From 062c1a04fcc129f2ba61edaac2f7b35e07e11e81 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 Aug 2018 14:42:01 -0600 Subject: [PATCH 001/760] 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/760] 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/760] 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/760] 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 zcmb7q1yo$kvhJQ?a35SVxCXc21B1I0Ai*_2fZ#y}2<}dBcXtRH2niZof(J>E5C{@T zkVpP={&UYd@2-2_>*>{dSJhY5)q7U=s_w44#k&oFKv`Z%9sq$rz=!)EaJLM|0w`ec zpL$;)_Z1Zb6%_(O#X?6%!@$A9!NJDD#>T~i65!$y;$dSGkP;9Q5tERR;NX*ylM<6d ziAjk67y+T&>p)O3QBg68aj|iU|G&%KTYwM)cmke70TBXVLJ$fe=xz|820#GHy|?%N z{#{Vf&><*b5XQZf_}|$76yJRUa8N)1m;i+U06@1De{21Da@Z;f{X6}i@92*vfkz+s zn(bjItSs1z|0(`28c*l&Cn{q{F8b0D7Vnu?8WJBWa?0F?{%G4X@r%|WKFapqe}VtJ zfri}k%>H7bnfMVQ`c1jQY%~bA8@BDtz`;7v9b;OtUr|^k)gTjb!M{`~`iqc%f&bM! z2y?UBVT~0X-T1>I@AssO3>l1O9DX7BP`V3=KX65STO$_FFt&&0;7VidI5)E7!>>Ig zO{t~M1-n-$O9yA0NZ-3*$P$-uPXl~Sx~y`#-?&jD01U8rG7Hx0H#g-(BUa0FRTSWtVBH?B%u|4a z4RMh1Lj2|VWb{3rr2JUS<03!l@rtf=Z#y4Ff&ADZR~nB#Hq~#6#&QNRMDn@ZI}y%& z-+%x_x+VZ@u-SxR$aMK8gcWNlCVhhE$p?ediO^qPnnqz#8-57+Iw{RBqq_UBSjhpP zaD{o2X=>rot2V#hETVxCC?p;ld|tA*y! zM-fzpl!NBiCG2bf7%vV}=_55|Q(s5}goBs@%1A(5T?PTz?jmi_a{m~*FA(0aO#9Dv zNC1SUD=jv<2#n$KY>N-Wv_^fV|AF|sMTw{(gZ)ihqkjd!7&$PdB*yDU>cQR*LKUwV zaB=A(PfL6QZMMVCKD_Fc|mK2!sm0MKcCmT#S8X z`F}Y<^z}@!zSl0LHQMseG}$;_is?N=YPM8a_WnYQlvbVkyS^zML6l|42)+%j;7B!n zOt@FS^i9sOP*@CO&(_3u6=zwyWNn_ld5a~!FPI%#iA!A@%0td&;NfLivY;=>kO(fn zg*EO2cIra17Xr2`U9xB&UiU!kxw#jzUVhdO+$~Ed0L?pHaO0l^@$^16@GonfpWtlr zlfDB8E}d(P7}Y8cYg^~m)JI33eQF5y%qhXftIuA2zTZ{#)4I(!+iu(UxJ&94%3QkX ze$(5X6|n~=Qor93U9fZ|;+SYiJ6m?Ur9-IN1D!nJ@t>BY*QGLjTSOyThLP0xAE=0^OqIqZGP7%VAO(&}ml zX7bnPTs7Qa0em)u|6$Mc;UbDDv zd3l-VGZ4W`k|DgaUh-98_i!a8^R`>PF9<*E^0fnz@J~lSb(+*RU*T+UnBe2#L*7@v zlf>U$Cd?kfVh!A}C%%&9Omd6mKZU;?IXDXPSp}bVqJDA59$633yBDx7D$pO*CdXab z1l#}09Y3B3$oLuR-P?(}>uJsuwEB=JMirFvwwLJ9QuVmeS~@Ll>!naG58Y zR{_!E>-;=PPmPfp4pmX3kLKvd zT2U3Sg*nzaAER1U4laH$Zxw56wjkDpfoGI6kbs&NKtzRuX&SklnS@$b+H8OQF_8ev z5ts10LdbS=C(|W^#**NnXv+xnqUfqbVVX6r(I~dqPOz&vEb+yA2&tHJ<%|%*g2vY# zbuPAfNiw|7W87IXG+NChZa>C^%nz60jb|e^j&p+1-~q^Uosqt4HVjt znAu%o)lj$*nZNqwT621~WxOHE#}s-^V7c&ZCi_{0cBi|JM>@&WA{m~`pme8H1W!Ad zon%4&`|=m^kCJ%@Kg!#QM^j&e7niK;tD!~KR$TymGLas&{ezL0s^#8zbvz=LK;Zq; zIoIg%+ss!l+5Ort+eifH)n|;U`3;HAM@d5DuWVoYiA-B0$#CDp#g|0t3STiWmN|LgxRq&fSL+QXq`H{{aF17ef7h z6$RZ#MQG?aXc%ZH_h#-X2qAz9C8FacriW{pyAr_oWP%b4NEmqd1+*=aQX8hG(HI3a z3;U&IbDvCaN0C!k9%L-s^P8TiHdCATLQ`(`+bES1#$c>(6y{FWo9yd1QC z7W(_c@#IcogF#)oEa4ymt?UBZ*M&q{Ps^JwFsR3Pnf~ntuV!;af$i%u^RxH|#G?X{IF`{J^?gff)ahUKkGWaP z`p6z?p>$Q2IdPh%=$iSx|HZ( z(ZB-THsVpcc`*<1ush%z`8azHGA<0Gd@`3Zdtd5ZUgp|(thQ^j6v$;kuZD^m(AxE0~P0m0BdfE3Ob7vtH zuLEQ68spRfTv^0(c2&$>k7&XW9Sxn-p|9@4*g8t?cfjHMksozuje*i0f|a#<)E=y&r%3(^y=-K4kCq9c9X)N$Q$+7hVH!}UcapdJu!O!ON>r^(0axR? zLAl1P1IIVyMgQsUzlJbf>%*j=2$t>141d z@6F8W*0NT^KC9~~A9g!me}3-WDmKJ0_BEkZOV@D<52Z#bV^C1{h%s1iwptvQI*L}9 z)Y=(hA)?#F=|D^>EJ-=GPuWo(yq4=Djom!8I1osMZSmNq#HK1&p+?}_jzjmX*O7_9 zc_iaAsMD9!gnb{X?B8$3>(5?0HieJ%Xh;h`_doP@08Em57Ry4Bi_`R2^BuYaP}TH4GL-5ME*jXB3DiHdAqUa>5C|3xzTb@m-pSd6+s8WyB1|a8Ag61C0`_hFHn}Edc7UI zO0#DgJJ7v>Gq1~q;+nFus5RB*A=!W%%Lgs2cfh3ZtqE^+b#TGMb~#l`*v*R#j-voG zM<-WR*WY5icYvyEE9-{+Tz;L{+(Kv+CHrO3laa_YRp1uKFN^oLXy9;svW=9j#ue`m z$M=VOcL1}bTE+|kLgoFVETZ_f{9e@m3q0u|vjwfJ*Yg);9k+jDUqzbL zY7Z^=Ql$7QJy~Ns6I7{WQz+4ZlV_bhZJ{+ZNe`WMexP#A^8M_xc+2U?!)E!nhTHDk z!PGx};(?cpDN4|O(YWIAr0};A-f9}zeQ;r(3(sK}Hztc@EyFknJbo!pR~D7l$=gAC zM#LVko-;sE7002(c8d~|kAI~rIpzxFk`3uS$tJ0eld<31j&*;?pI6lL^PpFrqJ7bn z!u<1739E}FrQgSHhC7vIqxN$9Mp44{RuU#tF2c)%YO)#za%sh?%p|I7*UQaIhU=a; zmxe-aG>WG7Wf@}J3$ZUBF?~Uufv$WPI@X$WbBM%Mv}{Fm*+0+rBQ|Nxtu=|ZQ2C)P zx6_+5;6g*TH)L&~^rUTcI|0L9y=vxY4fofLVH!<#h%~yLLB{i0*TfO=lCjMPM*9JG z0Gch^kCHJ5%wO}rk?%<1a*VT|RU}l;rqWZmwUL+`yy?`XSikH(C!GtDIBqDWiLY`w z4`w}YJ%rOvD16FtkZXUk@WsPI$z8mYOg|!BhjtU`DEAAGb#_Kq*X{Ky;UGb~UKLMo zzIlS#(KHIGG&dR9Pb*WdeF5ZEm7^Rqd?y&P>BCjp-PhgQ@%nU6vXh*Q)ux=uyohFb z;A?oSp!Fh?fKX4AqoEmV&gE~V#IuVxIT?3Asfb|*iKD^k4ze;{BRD#3W^OdmQ7J%K zv8(O0-5I6uMr5pVkE8X5+qa z!MP6ROgH-;(*ynux@Q&56^0puIZjRk#Amo#k5g_Fo1<$R>$_V_{o9U?S{fD{6@(@f zTcW?FIu3MM3Os;ooZ#s6PQ+?7QRwlN?Q>|dR9N_u1^?1mjd{y%J*Rng)DV5*B-W5N zHJTnpZvT0PLv{1@$0;nY=LhfioQz7R^6xj4Ii8VtWRHx}Gb=3PY&v$8UOsU@b6s_m zRb?-YOEY4Az1gd1P1V`Hbr$oEdA=~rr>M-{H#m&!U@JnK?I09yz@&zU712ieS+vE( z<=Dxgf<9NpSO+IyB4mFvH!V$sCNvU0b*$??-CbJcmI&Lc@3@rcLVh@Om&5YW?${`T z?otFnZCV&|6)@5Z1rKT0kvSEFR+Si@cDsFT@_e0wDRVzUU+55_{!Bnm^*|}}yp^Q9 zBpXS~MbM^-j2OC0lg+)kvg9hKzOu7f=CnQwKl{~??$(|b7o4Q_hPhjV!yR`8J*e@^ zd6;y@|=*%Z#8y@-e7UPBFo& zkU+HDcX=8vFykf)UDsKf5;eV6%VB~_=vposdK6#y2Ip0iXn30ohwjO8o>bts_w8+4!jQQcka!#qp@DR~_XYt}W76+x? zoBjrkyh-w>?(x=~L`enj4b5=liwG&yBu&+8D$+>#x^mLl0opFN0G;oIGEZH1S3ga0 z`v;wGS_S977f2pJ73H4b;xexD`01Uxl#SCeHCtFYAPA3<`#SwR>TtTuf`k36LQ(vc z*7EdAS6P)2?ET=!`$Xf|E(G`*>g*2duM~||{WJ1Q(zmpE>#h}iF7n9uyf1tbsv(HpV};o%Pj7jQe|SL zE}g`Sl?`Jf;t5VmOT&CMs6dyx5*NKkDbL|BZxcxu6cuq@nmm5-8MmYB7usZej??8B zu=cTl*kg5wK7NkZyfSFu=)5d-?8Mr~B$eYjohOSax$3KJ?SB8ZtC5B^ zczf&2qSCe0rz}0|luUl-4p>WaffW`wzODQeg$Z$po;UoQW&2A!JOyDBe}2C9rtL~f z(L%WVmCl%gDD2nSFFzlL{bE8m!R(mp(Y*CzHR{$DCJxo!s{ z%NMnJT)U+Bh`lVzn0PC47XMOToXgjrJc@xqSxY88;NkLTS(y~y+`_z+KF?h1Zy#6h zKSygJbxToounwi1L|+Q{(Lm{nzu}102tBV#+nfRYkd~+Z7xdMxbMM!=%3f~lNmJZ6 zWM8;XPf$&qn%p{>XrOrUipR6F(>h_5{%)vTjuQa~ix$))jfARfdt+Jy<-GIr^UIyW zpe_5-cpDK{=C?oV&p-PtwYCt^zR1fIVLf~>b_uJ{U;0S;O?E=(okr+^P{8d4r?aCX zDcb7dC{sH^1BPZ-)4~uEZNkSn{Ee8>V;;yk=mzcPb``X=39cPUAP)5h3bzu{&Tz zK0%qeqIOCJr{W9$)ml}y=Cu6`=IE-$cf2><(tbd2C!Q98lMyyy?^OJf>y78N>u)Zp z+Vwao>-Xo&CxadWOYW{36rDY#LKl}E=U%VzCc?OXME5ptG!ayaBqQgj=(qDCf4HxE zH7+Kr$eiT^0#rRcS--`3Y>5@E%0oS0$aL9+mwU!B5RMbhQN>E%?j`wf7oek(vDD+} z?s|-tcGj-_d~ZqqL+2`Y=7#x3@{wT`Nt(#j*``;r|9Bvr7O2-RFq}+Ba;NsbFs*Xk z4D&LJcr!{HqpSXm)Xp<(WmSyBncZJ_E0Q^>mIk9UHk&B;RJ~DG*|UbS-6=twY*M0a zkoZKu*bR+oYsNnx#dm#LTsf+~WE=S`)>rV@_$N`IJS<<|D~yrgHRy8G2jS^D>=~lM z9*U!ewcY_P=N5(Lay&_-QdR1mCY|3+pB_4@iTEr!F$%)UlMKE{ylXev(5W>}!}z*n zl{Vqtv$G1+JIN1C zfb&zv8?h4`=Iv|=F(pR$w~wLC_3I0ft13zY-zpzl{m9A>xVYcevlHB({okK`LO_uF z6VE?ee-I%ZzY7(?NW` z--wzWOp(`)tT!v=8*3{`^1iibbwmg)HpB^SIf*VJh$I8D;+>1@Br&fcL+%7DsTxx4 zcYqQsBA!8&dT>oZk#jIo)=uf_Tumi_@a=J{8}=_+eEtuV}tezDDl}qr|QD2W)h1 z)D3($H+022;4Nlgn^GVsI;gxwc5GV%A~59Yx0HY@=-fIszZqKR;*O|Us@La>d4nu+$mExwdb?NFM3cd zyBEp6sBXmv_`FVxGmY4QL3VbL+4@EF`vGSN%LJPD>mb#R5D!RMRs9sg7_3aK-?E-M*OiTNgXoxPAUWQq$X$+7Uu z&Ka>&6!BYg_g=SKeprhyA7akE@143JR`xog5Z#GF`}3_T#0q~W{i+{S>BFxs#n)PP zA&gU6Bioho`044wj#rKMrue#0 zzJ8+Hr@myl10=+qJ};RkpvgG7CO@mHTr^IYDX~S|0s2*m^uLlxGp&Vzym;j!Ip-qD z(DMXlp+Vir4#aCh-M45#2{l#D2=P8ZxN-Y>&}=?l=3R6mPfovx2Iu2X$Es(dh240>(HEj; z=WHi>pQMzT6*0A0`lx;cWV+7()_NJ}v|%uRdk1J_wcLhu3>B1jtE+Dt^23l)5$Cv! zC?BMOcj2tLB122gVI}xRNOoQrQUNE80@`K=}z# zukU~aSWe46w|HD43~y+ksnix%tG~Wkk@QoD90gp?#6aZLh54oAtt4D_r2l7@(bmGL zZL1So3tAFlFt#6IX)ZAzfpeCg_OyYSi^7{aGwlwbE#7x;;==x9emPG0E{F-s?bGGZ z=UN%|8-iM!udj&Z$b&*|XCi!aozVEx1FaYqj|B1Bv7j56#}?w$ny-@~qVzC?wc;dD z7N218u#1>Lf(M&0Q}h6X-bc~NDhRB(cl-@mKtbI9vpgwA&?XUR7=>( z5D?q}mTSs=Q>b%F*Drr`1lQW&K-T{!k<&X#Kz1bEI7y1NJtX^>^R`_Ln%w;oc z*;%jbe@I~})ja(YBDmST;z&AJ*&nKc)X_c>C{`?{qN+1{;`D&azwBVKhHj58>xz^% zWnY3g3N)D9!JLTGFeM|%#Hwzb@Kd6+&lwvVQi^xt6^cc#n5}qICK>g~&%T5zF-R1C z=#M5`Yfi64uM`vKaw+g2fs`Wn(Z$!MS96ji-18cyh7+X4HQ+w7Xk}FQC0qLXBU*_s z#;SvKQskJ&*psA8`S^|kdaxvHCa^S>sX7Jj89s_+@0Rd+exas9xnCIX1k@9RS&=bA z$l6~RW08OI49x*zmv9^UAm5@OpN+_}ZAm>xBo0#%p~`bHVRJHtdU=dpT?&&Jsr;jJ#x|@vgVISj9_-zyFV!(4|_#)nPH8b2+!aUNe8)+ zJn3v7wOA`sqgOKp#MzJpZTyBBE`8iaf#q5u&EjS*IOeh$6^YS_ zpLm(K*T-ef3zfAAiQVVD{Pj2wFOe{Z8Ks$y81p!e&IzY)KUY>#m59+zD?=5Q(LQGd zvU7N6`YPhfW&{&H64Qc(?v{Xi><%zz3>yo%e8rQHMP$|c`a@mml|{*?)T{fcyK}T= zy`mySA5|ThW*W}EW6}*0FJQj|{CwG%eE9Qk`_L)OYngeT?Opcm?S{(S=YSvqsnNju zc<8UZ3E|ZMX#s4>O@Lw+dr%2;}xVrjt zxkd25UT*yZaUUoD36w$iIX|fXNTRvVx}m#|lL=tvJgz~SiT%=M1yjcje_vePTfTvG z*%~K4g{nL;F{AMn{Qfx64taW$y{_3gsr-XgAd6VxQ}p&YjL2F>oQ1;TdAT+-ums(! zM-lFV(l;Cx&FK*RT#?$maG8;cDYx{wPhf)wZ(diB)G5k#jGYDl-f=Rvqb z?@ji7E*r&8k@SwStkn1cqaS}U^!>hgKweXoNj&K=%`{hD%V8MDhb}i0C((c=mTYc_ zmG9Ty?zS~pzlu`BD*j7r17pfiCaBU*Xe_B0nG|J-IHtW(Q;Q(fodhbkglLiMb}~Hp z@AsJ9Uq+yGpuR$t)+CFZ(Z!{wXOWsx3Knc|yY5ZtdnWMVwrfpKR=9xr_p=D{qIwr+ zfm-;BX5y#PBh(|e4=!&`gi~4r0Zu8j?490}z#%BcehErWLf52gLL#1u5k{rE!R7LJ?$k+tP!;01a#n(G5~Ic==xW8Fry} zLih)Am<@$6KfN|o8aoZzrtrf8!HN-(vH>8JnW?BM%D4`X=*s;m$Ma`Ao})AXW-1TS z-l*c@qJ?yB)Nhbjd$NGsJ{YZGaj@Mr)kXgtB)12LW zzIg{Euc4M7%6j+ZP*AkTvUL_G3kY@erbAq}Wm7Kbe&WNYS!~$QADA1+&#K|QGZ1}N zkaC;`!tItRHGgL?WReeL1g_)@^O-n@%mY!8Qd^ z#m0#32-1bw>3PV!%Pfeege90lYXI5`%Ys}U6_ftP3E*KBHo-L5p!TR}lmC32u)%|> zM&qVZ6Poa5u;!}81_y#*@RdMQx(+VDNwr1s_J3Fyt|gyy9gNvloa=goW$2l*G56)H zg*D1gCs&%JCHa+%A7;$sb4%|#ElOXaH1;zVwj?1ZD2W*cd|aAck*R1 zgG-Qp6}$<59t_XF#J3sGA|^CHU~({k;FXppBLprEmzpdN+{-~aX3}=mSSySBwO*VL z7?F7E*6<>F+=7k100ueISxQ}ePL;m42X@2svM?I7g^l5G)Mvxne(P$naJ&tKg878K zi^liV>(A07&FQl*lWkk7E()G2f0? zT5G@3pmX;p^+i`0_@sMOi}a~%-vOtgCKU!**QMBs9Tfi4)i9$>8a4K5O+{Slf}KZi z8XC))p(v{l<>7ORy)FcW+(Fls*)5Is=ch7mFmjZ(O3z-oZq9uSy-7MDI5Hk}! zPg9@1l;+Oh$YvOhw5AF=L_pwZ<1TtkNZ zP0y${KyRg4jSHRh24!#^*5rd4C`SvmA<25_z;r7F`R`#W z-`F5}YA`yl6x=Zc4Jxj%w)ilm2K^Ft9BNuw^p zR~V5Mg3Q)%&Qjp|lr7u#&84?ERT3t8NPBVG>`n>nVBl7wt>_(u8*!7;zm3EXYOyV3 zu}83sh_k*ZSF1$aN5J%g9cMVI3~3ZT z+zP6eg*et2Il18*@5jRwp(hJFPp?SW{G7Alt^=z5P2p9DOQya{WqG`$aw@fShQCwT zjoN}?{IO}FPMtgsT~kjkWr6vl1xBO-H0orN{@PvK;!OcjhhF}btKE8TVwU!ZI<6{O zg9NUyfufPavsuRMV81U(L#Y?%TNhK>$XrbZ1kqVe=O=JJxE@?C_Ktp>P<2%tj3^A$ zjQ0G{0?j4w?coZ8@SBa`k4agssn?`oG1pPJr)!j~v9#qrD^`Z%SibMz7pnZq3qAu0 za%iOB^x^QlX&@+=R{Zk^CiEWxHpmZlym~rehTfEA`2-vb>GqJSk?Re0eYvj>IS+~j z!^sFA^97&%YUx*e5{&QS>c1SPYjT+4wXqeif*dt#cPB zz$-+dWl7c?jGYg|Kw4G9!=D9)x&qQgF>ibt!5uHM7B(&(K0ZDgCLs|49uW>6KHeW8AUGHg z1Rfb49vKfE6&>&2F29EXY$QMvLIelG2Ef=LIBd}GQGg5p0bsa4=Kiz5Bfvor!5}19 zE8f52|3>h86F`H5@nFGW0RZSp;}7-)c3Bn>%R9;Q{hvbq2LKjhi$e)v3fdhsTY;KI zoSX^(s4(H98i%gA$&@T{N@0`&el~fHd;vR=a~(wB z{B(EoYas|pGDd&qat8o#Q^x=xQV;}VJGk){h27z%isWH8FmH+o#UKD+G8VybL#F@$ zT=@XlqtWt=iSw1>!bAYsOZp)41(rnh{=rOEi3^{23kQV8$-5$KMw$^a|lUMponh$k_1TO>>O2G zx^a=;`&5qc7U(A;8&zqjbelXr70Llr9c=F#ZRCQWl=C8`7u zW*{83J>tq&f)T!|?MMM3ErTgMw33u_q+p@#bv_C5uc3;a!$_<0{NM z6bYqV$d2<^ET@>{@rE5@xyk9Ut>`+_TQ^*oBeHE-pJj) ztm(>zJPiOLcmtXIpn1hAE?nSqrNW=K|GI$5A~>l2LBedc2%sRpVx@HQ@0m$4;}@b%GHW+te%`X{zimBW@sW!TM=R6u~*P6vwCF*wB?=GnhW*qDn4x*i=pHkzTh!C3DUs6aS zRqcJI$cy_-%a*Skf!t+EGK?TEB_XFM&4-NCgeDp{t8ngI_sl->Vt)R@(lLWn^V=cR zAv~QEL*~tR^~njXSw)a>j6gNl?nD)22Y*{5;C)-q8a^x42Wd+pCp6r~4k3*?cF`#M zOtK}(4x8JN4{RngB-T;s;V9xd)34K->>;h0zFKvR=r1;qS9^Lz(&}Pev75}gxK!Ro zXoQ!q-n~_n`qt?kiyk7z<8u38q&)ogE3pDWrsf7I^<-ze;JmzT<&{y0W>~p&OQdfO zedS$CBX``sfDVBoJLemm@89o?ZnIZc9ylbJhc!y{rTQlS#S~pKMX2MdNW7x(sD8WN zV*$gIYuma{SjsW#G=#|6urhs`i?WI$0=BV7*&Nb3~}FosYK^O`WdMEtNXnz0xGA~t&#pms(>}pqph(1WVy;0 z+IcavQcG{pCrsYg?aeJRWJxEuhwVv9PreZ{q>b0Xes7{Zakm*J3#nQuWSN(-CO;nI zI!Q>mp7$hiQ-E^l9$2aka`sC-i=9zxD>K6<2(Z78zT+`9BdrstLiAVLU+v`&TD{s# z@xK&@Kaxisg^*~8x?EPUe|vkRZ7xgJIG7yvE{eA*YrP|hS1sY~RiVL_wT}W+&1`CF zM|Lfpe_<}*^2N9k8m(s}K5$+`=93w*NK#;^q1w*`^nL*uHEFIbqFZi+nrJF9-d+v= zdUujr*=c%ld5P&7Y2;Ce^+Io3=S6u(nqxOt5Iza}p@5b=s^o|P&YlnU?Gk3fb-XpN zz#F`ou^*Jax5oZ6C)O z=&&J|8oDo8xoEh9Mru1V->*yi#upO8B_9&Wkvcc6E%7TRr@S(^Um2@8IkbjwKT7a_ z*I%r|=E?_Ye^T9J)%1&T_?z_Zs4k!G^a^*%q`~t2Ie3g|e1}a9QJkd`9Sj`uu437Q zvVewR#m=d9bY>tDnxK}>^oLwJ#?fYKRc3c1g=v5x(3kR;=1-TlcFRbDj#4pn69!z0uJSssa{;10k|k+FnRXtJ?>w! z4Hk0VttQxbZ$ca!9cF*Vt`sF`Rb6WD!?id=f0&qXUWy7znv zorkWps=fL*5SLm#$%xI()}{jThW2YqhE?ljSIbE@^;{&U;c%OGq;eG>m(^6JYuoe~ zUGzhWmX`CVg#!%$L_*q{iPigOiSKbQq4B|$-C5JM`(*4E-D>I$th?X){KN=S?Yu{c@5kM(+O&9cT(#Z8Hn=1$xF6^ z9;Re?P{F?eYWHu+p?1ojw-nibxt*{lZL#q`3rr9EGYiK4m)Y@O<6F^RgBWbuEC%8g z`!6WK|D;gE0>B_J7#;}@6&W4@5heu$hJ#=OIPkdC+!9!LG(75NuEA82#R#-q&-gUl zlGB=7@aZ&7%|lX#mZUsWONJSErQMe=_{Fs>tadN|K8PZSfxk;an~2_*;D;ynHQ&BJ z^5K-G}Pdrp+8qGRxQl2QmsOul#wn+#Y`( zXTpszUO$Ts$^)78k9lTZpU|8fq|wL-Hx9Y$>+$relvIH$N_a-G7PmRTRE#nM6mvP3z42D5iit z`g5aWa_3oAwoaKD$BhUYkMk)P^ zHe^<^ijeMNSe3|(^vr1QJ$VRJS{95@1Aev;jy*SuDCyjCftVK}zC zi?R;Q=HqKJmkB6Wm0x16aFC&NErh%{Z7tBRVdj&0ZOf|JOEp`#JcXZ(GtYi``DOJ__wU0j~uUKTS#8sO||Y`H(p^q-EDX(h+C9Ii>KfuFKrpiR=D?fYXsN4tbWw}nr$$g&r2e|TyLSk2 zsVq`jS5DTGlP<(^wy|CAdW1h^ne5T)p*c+YV)*#!X0KwA z;urk@c+d$B{EP(|8^Mj>yi&A{gP7 zb{Th#boDll+E9-MHvBZpIg+YW-lP|#*|FBy?no05&WW(6}t=@*k1`;3jXzedVBNH`B4yWWtpT!Wswfmxsj4aY*X{! zuTV&(T9}0m^BCsUD{cJ0zKyeX>p^AO-{Y3k)kh8~k^TaA67as@m#(FECLlb&z6hZk& zvUX6t%qWHFLBcg&jViaYYS`H77=Lk#m#RpoIe(R&F8MVPziA`dc#|M%pf^kTQS|A) zpD`n+FkdCsBjRq}mm88gGWXd7?b74{)9O-JRe~v@-)aVHA+6Jf{H~vuBB6c>*Eg>! z#PqVw^~Rbu{48()K06)JJ{L`H-qUYyTU1x)>HWl8ncF~qXOYN9G#msA$Iwnnn$ADo zgH=hIy@w}eL8;3A;mD+_PP@@XkC%!va>bg`a(Gogzv)P^96mojWH`9blTG5Ku{K*ud+cxTISZMc4sD-{ zpgj`mcXcYLtqnNYttc+}S*(Tx#(MDYIvr2o)v7Hwt4NyCF1>aP%y!)vz`wOu<&UjP z$Tv@we776OJwdEq%*FC!XP_Tp_izCJRA?qSGRm`q++Vi<-WlC)Pd~SoB=dz{ z?TU|-%uIRKRBffv($^v~akTAy$L2D|Y?^X>jT3?t+{G}1Px>ESS$iax2=7yo2jm9& z?+5iZ34$fw#omm#{PIg*T#&T=vddasD0;iyBVd~1fJkQRlkzQcabKpPO>_3()VJ5tY9p8d$hKQcwmIi@nB z}JwGt9GEav=sG-_9eEQw1T$wR1L=Ss(q)QVG zGq3iZa7GJe+0+$DwIRr)TDgc$Kdrq`5U#w?tP8cE7MYqo?2j*IRoVH(gz^c#pr7U4 znIkhs=FT1y@AX|#%>^htI_+PviI)&Cl_NZP1L*a)1Ud-Vr`NqD~n`0xkPN^MmZK|#f3Txs?0K5 zO^!O6%xZsHTUrXgPHv1UEum+rIaos^U3KjYz=)5OK&r7)YSDc!V%2&X5N)n%O~6zh zUlRg}uTc)|40t9C5BEkG;hAa;UGq%!cE%H>_5bI4iC$xqQ5;@^OUmp-L|mU6-~27v z|K(in0`;#@y!IrUwUx~m1vH8BmHZ8cw=rj1_AY1RnGF^1CFoW_?07MF;^Mo`KQ^M@ zs2$){x6TngUpNN8%4D-@wpG@zTP zAubCb`?Y9smFbG=jph<3e*1JXDoZs(V94Qrw;R_`oY}O$NAnAm7?t=Pv64?)$})m} zb^@=xCW5bkn@V%|Hvsn=7}OL?w+wxP+w|v8ZgA|Dy%Pb(vyU(fq*PVp`^Ub|g)SC7 zGG3C|u$(PT)0KLi)AIOg?RBJxrV5#eRq!{qp-BnAOHZ|XSMQ0)q9Y_WR3>CKJ6fy| zWICU3{xZ??vC^jt!RHwuNV|>y;T+z*z+1Mev|n2wl~;Aqb-1+lg=Iopa;y}m*n1%g z;$@!G1Jx>*TK=St$89OY=u4Uc9do!_P+M}hk=R)#8(6>^@r_ENUvL>uUXJwidno-4 zq?NKz3cp-fvfC6@>06YeO7jfbZgUz_Nvlm#eJK?6tz?D-Q`=QLFlJe;w)!{lA<>L- z#NtOK9$)gjt^IMK$TO>15u`otlv*gAi_eSTpN8B%#my|2|XZLiNUIAf-2?W`Nk`BKnlthUlMTh9mKqjT(66=|F> z8Rdg_UE}G@h^a~{W0J-9ls`P}XH+C;%#dAXO&RZfH^wFR7vZJmdsAE?v|JgmeDJb= zJtSV2oelspH_Wy|^}O6S4r@@?i93AR&p0Jhcuth3_K?$5aLDb875@tpkeGf1rLnAM+G9YSexP zO>&AR{J5lQ*0Ps^)TzEarB3VmD!GpHC;N;Ry;1qsiX?xWg9NCVQ(cVK!(L8-YGN6? zGSw;5XrPjs?r*?C9lIpy=evH(-+9zN z5{BgLQ8%Gz`s7BNy)T+P_mHP0lD1dw`3c~GfP{EXY@5meGx$qYenhhKVp zk*`Dx42t@Kb6>T5NWU2EE=xg_FpwmtoPE7V7?_q9r|&0LF<_!3B%)zr0RNvrZP{7MtS7FBj`;RY3` z400^!uOadKpbhtm|4MVJ%%gbwTA{(8yhiSgSt&>tW&ABaX9-*3P!BPgNuyM4OmEzWjXx2-|)V_4=W50 zAeHa@$;ZnR{KL&kIPmrP#dzfBCij@gN*NhpJco}HL8CuBWJ;$sq!z#M<}((Ad~g8- za4r;CP|hX6^h}>ln;Yz!6N8EZp#*m_L7@3oLPY%LuxfJ!YL?vv8hq`hbh+(W`HT~7 zyWg)F#je0+ippYfmdI~qJ6hbGtySJSL+AFxBM+p}&c~K|wO5kMPmcm&iyL2rHH9gS zhSQWNJ>&4u;oDj7o)8ba8>OCL8+?DWLZhv}PAX-quE!{g>fJW2fxdodx=P1?@Q@=GoOP=p$=$ z>)wy%)eXxm2ZrBFw!E(A`M-ddXqYgYF#wQm#9Vc1^IBI%@jQU$W@!w z7v9Q$JtLy|u2oG*laF5lmOt&mq*TZ#>1eMlD@U)P2Rk~R`YLz)?|uv0l&yA~ovDcs z{-jI(>&mN;WBzX=-h)sizZe}X(M=KcOpwUf3?-6yzh_L7DtV}9u_?zSu}Ic5|t?;seoBfo)Xr8^n< zkB)R{%P(WlE4DL)MXB*zdx*Df4^p_G39t>}rf)M4eCl z?bN=X-A%c5)%ZuGl$e8e>nyVSg8lj5Fji@Kw{zk^EjO@$kESJ zR~BaEkCJ?%r5XypVXn!3*~0NPaIwN&H@Q%O_GSH&+C`j6A~v>1wBzv|y>v)M4{LBO zG7}qK)1ASQqQvUbpn7vg2d6$cTv1Y_y>OyFw7eOgVTpg@a&O-di8PuWdM)dT!`bvm zHI4ROqxdi+k~<(?~Q$4ca!;3jMF= z9LUxp7T%wShc&?KBYsD!Hi83f`gBQrRspQ+_Fr1sPQ0Q!UOY6#`-V0`LHSaagPALX ze(RVrIVI?MKz=op$>nU(tqJ8df>|PFV|< zsXHDwhNES8sVFCZ+P}fEF-r8&Uf&BQ%f^*3q~(yJ*A%;cVDkiTCPP=j$tt0GjlH4p zBP8>xX)`!#BJyq5;zgy;t(#|33=Z9UPLir zA%pUlR(~(+7SFzLBDoS=tr;XBtJ)y8Oove+k050REF?aE_q?268f8!?D>58>;I#-8 zqKW*Opv_`Nznk7p6r9QMMBzFbyutm(KfE_{vBYxazbP0;moY6+r{ z#fUSWiCikCa`|sY#(HXUQsl#e>~3&LK!6U`2e`|tF@C*K6ZvBn$!}?- zGhLmUX<+Gh&G{+9h$A2K=a5(M?+iWn&N zODvW6%-v5_&;q|@wA@#P&f&Zof;;#^OOGf|ajY^yQDcdPA$@vV_bqF;%KTs#TfJmE zW0AAw-sbYF38T-;jH&JKx#Qd`@fFbrt}A%`lK%I)r(!uzk=HMqe%aqq&IOD-G_D8o z{lNS@VD|Im^coQd2TFcmH$u~I&TIiSRq;Jo@ZpxWPieNVC16#& zUa6VA_V&{pPQdwF7TWpawo{pRj7H{##B`H7%gAvU&s0gpTgk00+p^pHYXG zhh=^6riY`^+E#xm(shE*CYRmy+=maAZwC_s{N>N(!-yH!HyojoDY3cgv_lXqR2E{h zUj5oWfu1a6LrLK}#lXQ0ItvKjOMJ1j#Ktb>nQKB=v|Qk$c2Lj4Sy2O*WFowB8Mm^L zz_64`gO7zMTY-?7viE}>w4TrLbwm*$z4bnRz3Gl)Jml0}x$J)#bL>t64x z&bsbXUuEaYy7MloYjX-#*Jq1f@BhPc=vuY?oGP3pPowE|^n{qLCKo zHYIUTdCHF1<`k#G`4aLfdVQHWL?AoU)3%0WSCCTA%rQMRu{2w9D=3yMGQPkWmKFX zIi$(LF#USu#l7eEF3)0>W#R+8un#XZiksAKnEX>z4zYW$?#e@haIIo&Ay#tAY0?{U zn*Ea%udwzo3IiHf0XRZk8tj674eywVlA$^y^om`8^n;fceIy^wwt>twk}vLG z#jtu*NB1x&u$p=sTlm|nNY*mGF!Vb$7^7(8Eg7i>G+wc0gAp0t&^htCerbKNVlni& zRJrv-|7s~=Cf|QZM4jZf1_x}*OKXV`OA%9(S=NbkrMmJAO*hmF-x|0+i28MJS7gM; zEBEGK$}5i?vJixHzV`l%*09=kDk~|;=cvkSe-E~us$-+yFt)R?ZRYRnM(@9^s zdAip?qPDi{abaP0n+5hF-0v)b4#jOxJr;u^1lowz4AHSF7P^^aO<%_Pgyw-%S{8y2 zKK^C)SW9N&0qc*1Iogr0I)%5d&egDYL&&%e_A0)mXq=$-YZc4U_JjvLkHm8+GH-^W z%gmqK`DX+!?p>7DN$ViK9X6FMzm%={{BhDFecFT>r}bg6nAsJ}l+}{e+1dPM31Ub`;*qo3K3rtT*$TLl!C)d@CEz$>fgKKWBlb7E9h>?AH*+JQYS3h{qa20CnymO zYd4Y+|G7s>rk?RtIf@|p2R2ZzKxsG}evG^w$7^5B)7D>+gyG~bs{jO!25DN+@v=+& zM43>%E>h)Vec4peq;JA~#iki!fB)5$h1Oca&EW~ypTAw6yD4I0<3>aH59d^$kC^Cw z#1zA4LV^lD`X)Ll70e`xDkI8o8~b60QQV=n+2xZNS#Qa!I;Q`MzzZLkTIA542K@jr zI7;G|NDivwJu;DVhFE=r$9!Jo0rg~Kgp%Iq5fna|PDWY9N*s^=QZZ{$bX0s66KX@p z?44ksiy0dxV)WKG2%V2y0?U6K+JA!+=Xs7RJN1!~r4PWua`4ky+`u0fZVJxQF4k+E zr90i-3xbV#h_j|heF!74HSSWfN)yxAoUJl?vXMm(5^?y;ByjUqK0SVxR+uOCw>Ph{ULaGcOtSJLJu15D+{w@Lm6=_&y&16$M z#P$eCdqzhn^JmOu(_PC^om!wlx#-udo?XFnS;_=`1kgTw45}`6JWz~I=HQ*G>fd>D z9Ezi)kt+bDR%a`lG=|jqnP$hH>m%8>96MX~k{hw561w>>OW77RvDg%eQev^#7{0;T zvs8@dvE%Hb@Sz$_#jBXdk=IgW<{^||rNlLIfSRK=NrU)%7whyt<9NATiW4m&!Br7q zOZnjF9ikX2IXoBBR|;n4Pl>oeD+jy@^7gMmV$^zXY!#!%9FDW_qJmcJh{ z2H;@FB(PGTbSV;af9ikZqQdz@{I~kQWBel=l7a-Jh*KrW10gU*dDsPksrw`3F8~Jr zLBeV%T?iBcApgMwe+Z}m@jnDE z_%9YPG9(D55g7nOsc^)pu*B(-B2Ea7_`AUTa zQvn5VkRUKj5{L?R68n$YFc?Y)My3M)!_=U^kT84-GE6m0>|Zp0;J>@{j}`z(Li$VB zKZ*bEz+YT{HNkp~^M9xLf5?G30r~&Y^l!=eKZpzei?cU>PUm3#x2JRdM!|#yTN#7F zFz18e{(9IoZkcW4x?kn?g~LlhEd-i1%QVYDjIBlyRLc0uT#vYRGa{1VV< zYaWP)0=Bn#!doK2WF#jaJ`#Z@fuJq_Lml(Y1cCiQB5uTv+5;IAdP5|p$Ct@<<~f#3 zY!1{B@iT)K%|(T9jXJbMg5CPYaDKl53dsnD0WFzTsdJ*^$Y{^fI#tRrCSotdC;IW$ zMJqSu;uM!k$q)iO8ZjT{^|jirTCO;x?h;R=k9No({1OW*9t7~vdfmF>2 zG_I6b{My`iLN{j88fJR}XEeB9Qiw zlggG-s#FRJ3W4bbGpU3iIOyJla@c}wUwyE*F>&xAhRM9@7|w2IIads)*fVYZ1L>&p`na?2AEVi`cSNDf~%h6;ZGm~&n6DvV(*Gkp18 zajr&ksZ#f9Pb40vS(-QcZ2&FN5lI64p`Y)o2^BgT=Hi$rX@6+RPgmMxi0+iqw;WtA zX~zwe-W^NN6b)a{V2%7Iy9e$zQy~YBvhx>hG~al80AUPThcG4yW<*b#Z2P->KWT5J`eP5$HaaxH($|MrmTNP1I8z32aV2Vfm1Lr#(MQFPQ8YbOOEkXbr z5q=jJdR8R;?w;HBhbUWZLTnSZ3l$X&)uCk_L^}vvgalbSqkjvDXpcbUTIgRL zVEM&?!^F&ALP8h4YU-C!0v5TT^<=*!D!1o0CIjIKZ-eBir9BD~MT93eJflO9WLOay z+J(qs9uF!}4RIB?MBfoPpA3u91Wagt+wE{Blf$U1Q#D=9fU1svK}XTF#|4Av zje;W?>SreLN+v8U6};Hv{+uA*h#1MY98a~G9MFUG&*C#EWgh1=>iZS!#w}RaU(<0F z3DKlJqnQ^X1l#W(ULKQ1%*B8fd8;h3V(O=HLtBfxs_Fw4A67R>z6!FBAU&?Lbx=oK_hs_=31rU5SIyN`vN3q`C19HB2 zKB3jrusAe%w5-EUD@9|Xenfe`wTX3)R|l(w}LC*y7$qMTeg*zL&_k2t{GghCRlS89DF}EurB(gwPHk64I z%&Kgm;|L-Z=Gl%LFG9|8Au$X?8Sf2GQkk5y+^L&VEX6Ad9A~;vezOv^HN6K7OZ*h2 zhXue-D|uE#DTBlW;d!ltDNlr&BkvrF|t(K96_((awn`d*N!O>fU(jvwO*}c>9 zG&cRbaM@|Qk6W3su|cwVffj+4L6@&tsmLNg2Qm?G9g|!VsM2_K6yviqdlqWCL!~6& zD?AkZ#=a`=%~lZ%hg8za8Xi3~LMyOxGzIuuH%%E{nZlf(H+Y&}$Gr;OpR-QkQeS3?c^bO`56PPxYY7&L!G-(Vk-4?CwGZH@*nLC| z930{Ui1~~MH!)LXB?>48YXw0x3MlakgD|&;E)m-u>H|ACIRJ^x73+Qww5USLA}y-O z?_>jyYH@Cny=icJsW~jGYtvW-f@!qpaPLWQfOU(Y`>Ti#nl^P z3J@rqbeRmNc`IZfrMtbS-P!}a>+WX|NlAvLnLPT)KjkhvMc_#&PM@7n`BBC=PEt#w zn^x)0h`Uao#mkEu2+{loY>X}NO{D>h<)4U>&j+tV=A*=!?T6-1(A^r2qZ8q1hvT@N zid5n>2!!=~>`HCHHZ{B?@b0dtrxvC8k-aQ(!QEJoBvqvQ&WpD3Z z6gA$lm9cp>g=&=9rGogiJi=77bj*-gvL$cuv1P)Zn-A@T0hn?jzX5l;+319srW*#E z=X1XSoTKT-pP{FT!36;mNq*F+dv082oigftTw^o!Q36^-JG`nxUR-VRRsxM;4NztR zUE491$e=Pi8+gfZX^i85Ks^aWai6!j)E0B%3QcYHv7veWRnPFE#PRfVfcV0V5O*@L=jMR>?>j#k3cLq1{2D5112vN4EvfsQJ zU(_KMFVaT;yi!yOQLs;4Sy;cq4CC=rkwxP_u3@Mk>h^3#Ls1+?t&Ag-ZffgatyHDO3E8xs-H^g+w*(r*6Xm+T4 zjk@Rjc2RrLAVUs^Zx80?gJM!LF#=;C;&9^RzTehg+}&FLj0y&oE|g4?NIUfIX9_mv zQNIojD%b@CL7nH|@R{1mAO-6+?bSht7d?z$_sdIHQJNeHmWygksOVh_J0dWeMo#TY z`iD371rFJP{c}~^*QcXZd4Y(ajilbF9h@$SReEe3u1T)PR1Dde$}`pFQNBU! zh!}}EkcPk(W;7VojkMk?*GUEuOfHO;`uXeHY|TZ`InhweOIys8#HwG=_q;_1qq}za(tusRdU? zVmQm6nNxp~mP~^O1^9J@(HTlBgLi_nEI-Uf%R>Rq(i&^?dHQ3wfr)fhskLgfO0{t* zUqe!}fd{%?94#TCRJBuQdrY@#OB7!9Xb%i*yqD!j;-H!tg*?C48mRtg0R#CeBNHwu zZE7M_ucORgIpiD3<>mB6c8fFAC|)Zgel<7-v-a$Xdv0fMmjSqfjJym00)c>D^aI>30FnR%4E~eQ z21O?r77PZ3!f-G#F|hD(@bGYPaB=Yoh~fAIL@ETh@L`k(S@p@NJ~o@qXS1~vqdOFmwths}eMrwxsQVjl&c z7;z82H%#n_2HT>tUJPm5NkmDdDjh*5t?$qv=5hK*{qTyrFUIEZ3jpF1QvQHxa%w>KP$aC<1% zPKvru7_U69hs~q`@4i#s2ktk4aIFKLQLr$oorc6^z=p((t`#t%8eI^h%9`&&(2z5x zV@q(&8Wq8%gSwc8v5AY!lDPosSk$KGP=Ixe&7W4_9LVrso75TLCIFL|pIM}d0`@Sf z9!6wefivVtS}8F+7@kV#0-CsvA6`QI(hUIs-s6PqMT((|f@9S~K_>Kg5E}r?v=gi} zh*AGw-E&<9&{TZ&NBVCDldAp81xPEl0GQ@4iDc+Mp?`5Oqf5iX03d*8aQR=*f4a1U z5SD*_{M|thA|xC=!oZ+EqaO_U8w!O%FhF1cPDYPOL`qD;Mb03mN^y@7!H*tXSm+@K zf`P9Rhxyu%UUhn76Hb#PN6GCQ2P^K}0t>(@Idh2vMBejNylv@>p;aCMgNgO#K5x9| zTBMMCQ9^A;&B+?=mCMJq8^ss=94iKOrJor}5$<^6U}JN8+agm=5P_i>iZ6pro)5yXF=rfMu}74%6B zFU6HKyI@1o5sdiAR;6X=D38wY9m)#fST*G2jj!#xocOn!+Kbp_@Sc23F4CHzHnqK> z`My9o%-^$K>yIoX|3s~Ia|^UE#mKuJ)O)2CvKKBF1y%<7WJwqY(INM6@5UM6yx#uJ z&Ok{Cggb4vRfCXU4~_*LmJe7?VJ_}c>Yt8LSepxO2g%NAF%-FPk&4rt*O!=Nsf<3GCAM=oe<&btR~B@Uh5Pu5hM`yG+Wj zaKW!s&JDcZU95(;CQ|!>H_>OoxX_l6xyD7m?Xg*4%W+5uL~?6E1gK+S^*dGnVP z*?J*11dPfC#p0A!Zs?z5Ida5LlsnSa!=bs{(sxmt?3&KtRbp#ym_rO}ZS`F|Awr7a zHG3li*&?^JS|u;HFaG4)vok+ERHWFQlX2I6+)}@#?wt&-S;15N8`C^ z9%&DVya{W?*-m%^(jR==zdT-i_TF9AiQ&}9vuC;%6q;>hp=_(D}0?{@p52o~& z8zy%qo~Iu3w|o3@3!b3V&F7fAwzGC~^CfxqjAffr?fqTJPBu?6WUv4oUbMoDgTpM> z8U{f|Mm+4CjzLN;-%P%>vT{yA|1ebzapjNn_j;Gu#uAb~nnOHw7V~;TOs_)v36IG^ zBF~}u^^?+1xl>2S7tJ{E6{~UX9G-LD3qqp)aC;a(Vf}a8^X?77XR{R@<3dCU1d13k=bJE-+Dl zn*$&qkSK_+<$qy-|H)85&o3Y_7zV?KU}3}lOfcxx3rYkK!$=so#YxqS9epw2^o&eA zd=l!>vE^-C4?iPRO`K3M8DnI;{9=+Cn&T@{rhXOs|CoI+M8TI5@@14W8D##EF{VFD ztCxF}=~;{Elz(%tHhDQx+zZb3yrC-1q~aQb8E*G0(JEy6Ps zQl+mS5jB3|MLnn_3&wEhv)~eBvM}ObSo)Tmp)UI%KjLH1DZ$JQ{1quKs0-Es?5dD)E6`^ z)~y~4DMfQj=wbZXww8G;s25jNE2##`REQ}H zB6nXpR=q7nX5X}kc}iiXeRDbu4bzyGJkv;za$Ehn)7v(as(i)vdu!FIz+73q0Kb{L z|DA^~V@?pS0x7?WvCYY9Mw|dKgJ{&;r8#RXJna>L}r6H z`+~h?XKT^H@$q%;R&_S|o43IA(0fv@Y^mdYUos*7ZX^Db#q}j{5<$A)_s?nmmO%* zQ$)CuR&iw{rt)?dt44oaSq_&c=UD;9JNbi)l=)s zeB14ceEt9#OnLp#*3ga)F8h&ac!Q(rY;(-}_^_wnDzLIWDnOdEX?$!5_`7j9v95Fi^y|U>8U0VW%NgjmH5`m{WY!I%KLb?;WwzBmP@Z_lFiCFHIn#SWgX{l4C!zcdA6zX$27XTrHv zUpG5{eL=;p-k>QTJy+oL#ZaEzZu&=u)9awzffmh`;uZOfe8ZfG5AzM5MVxOGKBW<} zM9EU&6%^JH;&?D6=BG)q-BbQC5l({tU|qjD<^>aT;YZsev6GtJt$pFd;uTuAtYaHk zbL#ed6J6DLA@$=7BM0wk8X=C5?Y`^{zLU~4EAR#+QPbH(C?U3w1Mi16+`%@t`)*}2 zA?~@pe!^~LNOaH^tIJ2h?1)wVq}W7KXWLhVjbvK*yi-%$&yB`Y5A{1NmeXe!GU2N1 z!X3m|NLc;n}BO!pb8p@-^mqYV9L_z#h}EjG z{hwX-En(52^$y4VwU9DtfB~2dZ(+GEC2B|U4i{5!v z)K8j>P|r>S`=vD2Z5x%y^%yAxu1dsR%errl#2Oz4GV?jjVl2bgA1`{Tg>z(X_HG9C zSg9KDyEX-Vr^9>AEHs&!|7p)!<(mq6GhXCj!lq!yL@Y^JHv8?U@|_4f#ZK*E8@uil z{!SOkTU+jXa)B|H{h;;H^ART7`fZB2iKXuq|5J-}*_FsP&;lKF^LN_eLUhNvG%oyB&Ab8?QU7Y1K)7CW-kK_#IP2 zgC1+iRCRkcn}}Vc%ApsIe#rcE2`ZL9FBZGHw){K)+)DfL)R%Z>+kVqwx?5o2Uz8jl zm*Y)6SWg#k%CZaLmX&C9<(^G*TYY#1~&dM_dy(E+pf= z?v8;+UG=5oSA4bLHItl(kA}KYKEFGP6E4d$`O0~DLR_?E$?1J~K4&X9a5tI(R#8sO6|$Lej=BBg7aTdqQlPAD=txChG%9NXRhMR9IAR`sdw#YUve z_`4PFI2?^O8XV>RPG8w~*74!fX%S)4)LgT}o9hv6wlAYAN_LP#+8-@v9EE%e;{)qV z+(U}ZgSB*2DXeMFTI6bd5tBZAv<4Pw)C-7Dn-5+PEnM$wYwJoXJ1WBVYQq9^lap&N zr$j`gh5Mk@^1v&*jmIm~u$tdm>gt^qg;GK(jU7aB*YN@&p{mln3XE#Z?b`y;6XD!h z-jmZj4BzFh#1BQ&p6gK}EFV7PU*^t;BPX61mzc60sCpKldkf(8bOfkqsHu!u)MW3z zIa+12cA4s+>@PfDF9iDC;2z6G@GLgBdA{1sQuH~34UUd0{4ECYSF{Tq21B0@)Ewc) zzVy*;`&{L!pT))wR{n}Xh%#ISh!L0IT+=J~jJoU+G{-jc{65=}#1{|aLhw~*;=Ct3 z^9WHn*wKp38Z{TX1s+i6es&A3O0dY$uv?e14;A9_AHyoG6XgZML4c-xn*TiKxN%aV za&0tG1F~2mi*l0a&5%6ByEq5WSDMI-7G_&KipE=jZE#Oge3qC=tG~r}$JSVSj0I?j zVs*k21}Fu+Iqce`Xb62}+V$v++Ti{ZbKDl@eE zY#VgL#I;Zb*8cEe;8C=oIP5W2|Kum|;!k=lD!f5pET~O(4xeQ2m1pL^vE-w>d=2VM zQ_W_U1wiQ^#&!c%XZ08lAo|j6yi@c!%~|(L1clyA8+`cQA)6b$s^&L7=_Ik@dlOix zY8S+6Ml7$IC?qS#N3KeYIn051(Nyl|2L7G>oioO~DIsXpkF@Z+*L2&r6xZV%F??Ib zocw&E56__~Z5y=`{ZHGxwjPgVjfO3G=n4}`_F>7gBzWC#S%qqYx5qxfqxr7N9t)73 z+NIb%HS4Pfah-9i_IdRv=69AEJo)TBaf0$75t1g0?j^g+@-RtW*N#i}Lci&a#UL&} zk40x~PO@OxHx{i6?XEq5d)BfjLM-oGJY`yM97l+p`y!)I?@RqJoumPd#KvE+8h&Xu zzEJX%MyDQks~!V&O3~fVrOwivZ)M{(1e@ehkC{f~>|g8+oK5StcFuoFzsu}EPb!d8 z@Z=>>QqpI89zF7(oJ+QO{JD)XWk#%S(wk@wPsiI8Cw|2eHPh@ia);_uuhHcCC(k*GO=h&ERaLoD!2G7TKLdjP#Uc_|F7>ban{G=j5Tro7ReB zvL6yk6_-+Kv?7{XDH7jaUz1`vFiN+>Y46aXWV|VuH}3an@}6>6Hkd2)!Qw*I_ho zKT!6Zc<8c}cV8CD6mKrPaXqP=71Cz0NE>gZp8T^NbCSt2-PTe^1;|8q^Qld%8QK@r(f>OI}@<>ETf*#E&H16eEY1zhXgw_lh~QcglWo2Zwb;(6v{9T12O8ec`ZsF zr@YMAd$My~dXEiiQuatMk+;C-t`%uSBB64}@=UnA0?IC>!T}XFDz{WpttPb2 zSY)?eXGJX*y`$|dn79Qf=KXu5fR}?d^aDEaG(szW9Lcqjjk+ zv&rRH2|uD7Hp>VkKY#0}3Lp`o)q*nSH=Q=u%1y;4v~1QShfIL zuX>bjb7N%DJBsslwrosj?nd$L%0mGV>GQ6#j%_;wKnosVG(|SdL&}dLr%4=CPp!`~ zVLH6=PIU8BfGU)XJyrF(Zcux@%HYR@$0cPK$Q^>v}E6# z483Ij?M?{z6W)iT1-`G$;ae!DJ z@WTesf_~WODxf~te{_iDplBrOAC3GYLJa&Vhz9>7{UQG!Ae!TY7W|)Zbo2gQLG*u# zV*ZJ9!vC*v&c8F5;pnRo^i2x-66Mc>w!iOS;A-^7T#mkCs?lTn2mjo?z^{T5BU||k z_KkZ$N)~RR#k;GPUKH|M%o(p0DA*ELJvP=Kah-ByfR)aOkE|>f0jIU=FRufZ!-Li7 z8Mlw#^TZS;6p6Fgx-zac>K?#T1kMNQfFR%%rXJnrIwlj%AgqQj%Y#|lo9u7}YFfDl zgcsu(1rc63=c9^Zt#{1iPU2s6D)0J024jpYSrxR? zNBSagtcf5l8M2{=d|?_&{;=>5Tx0bfcy7ETTdw;a5;+5$!>UPnvgZlr0Y3>k+xw?f z-_dcfO$1$oSBjRvKxHgLwHP~>I3ZXt-u7|6%an2M1Ab5A<8&jN^wgf-^DBqS6n(8+ zq6=7uUNaQ*l10+mN830^=3d{PeVUHf6n1GIv1N6KxC1N7b5YMpa9J7SV04r@Aad{S z;{ASm+`zAQnWnlJi8H~5IIn4huYG0fjw3o{n7O6L4Esj>ovsoNG;o@F;Bs+Td>*!*Ze(3e znU}$ot<1OVQ;#fy>@lD8n=;%2ZTnPSnB$TK046@smdFjgk~tQrzYcRS6;e(&(x2TF zV-=h1V9nNGstDaD9L>NP8ncfWA~C*?o-8fVf_dsmp9Bp!N zsAk5jn};MN%SRBINc3M)sQPPyocfkRUak6B7UXZOWd=tg40(Z@1gwbG;hT$v3Y z+mq^6F(y&9gV&?^*H<)OQv#3Gyc3{)q_XnMBzM3;hXP|CzG{5>l0=w^HTp))d7(K$ zXu!UwQ}g0Zo8u?&@J8cZaa~jrJsz3Rn*Suq1=}P80kDW5}u>#}k=e%+KyvKa- z^s&8FG;at-N;#)r(LN$0>Nl=VZA2C@M@a5Z-1PLu+t0=6_50jxN*m4?ets@V^1w1p z1a=t2PC)Nd>nBsHIQ=cFM=H5Gn6zeh_I}h^0)7>sd?)fO_(h<=vyVr@t0>CR8Puq&zS{3R+Gx5dvRgzp~I=ZR%lOu;E zGR^rM>;}3zC5MD~<4CvZ9z34M-^3l0cDOsuh#>^96}Fl;&n%u-N?>d;g_HRuFtVEA z`1lR@OyB>Uv;6~CS=qz>$;>VAMv}%6Ap;PV%Dum%x%z3wEJav07qU|!5lW>IAJwR9 zpe>^Px*%$6UY~Us3>-4`ZDfj}(%}%FC-y(X3aUgCLH@j$^bw|M26FT1=Ky~=(>)b>$xw`3-xU^ z*NswszwapT-X*n_-ty8{t8xgZ$9$eW8V~zfHvFq(mk-$}X!ubf^9~n(o_h$BfK$3X zFC<)$2q#jFE&WMI#W0t3F`!8#v!WPOlqmlCt^RTrXV?2XN#heGK56`Nel?8LK4Y?S zoeNQ|Yn*L%5*T$pCp@te{m{qwPb2=-2>bGT4oDem>e3* zvCqKj`O@{c5BYp?7EO}^(t`z>3s94hjgNAZ86^cQ`Tt(?>W4kU-sj4F zb=H(zSCwg9f>#o$7?aEP@Z|1EVo?yC9%d#BLOl}t#e+?t%#>XN(zI1G6#nWNM$keg zXx|BkBU+4lqAw#SHcuq%N!$}Sab})M*R$Vu#2>h)U-)NZfqYsSh*%PSSe(e=g!z$; zl8}6TA>Rvf2eg2h?&o2>8>(7BdcDOA=)r7;%}GjT=O)v9f6FT$%!uNm3Fm1C{xlgT z@UJ_wSDjT;D8>Q=yu>FVZTmt+47U!Phf)6A>$1M7LbiIEc`YQC`mn6%^&7ZJ?4lnj zgtOw!a!?ts?J=pjkG~ZZdFKND%6U`GM^aH-K#567Gsee+VNz-$^dSb17*0wZAKMiv z8CEBtr46br_3;Js3Lle`(wE^560#xoKdQ@C6ZfPb)3G!_FbRMyoq*&OrHn6_&BlhT zHD+aQE*aTjG`BCs4=x(r!Usv?wQQtLP2$XDM_g;vp~D5bA*>REkL1)SuiRzG_JTAm z+3=99A6=s$7*p1SEYgRNn8?gqVBWi4Z@U#+bG 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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 3367a408b25efd4f720dd600e894e10269020013 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Thu, 8 Nov 2018 12:03:24 -0500 Subject: [PATCH 017/760] Add single2 method to Pair that can compute and return the Hessian matrix --- src/pair.cpp | 14 +++++++++++++- src/pair.h | 14 ++++++++++---- src/pair_lj_smooth_linear.cpp | 27 +++++++++++++++++++++++++-- src/pair_lj_smooth_linear.h | 1 + 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/pair.cpp b/src/pair.cpp index 18d561bdb5..f76bb54c36 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -301,7 +301,7 @@ void Pair::init_style() specific pair style can override this function ------------------------------------------------------------------------- */ -void Pair::init_list(int /*which*/, NeighList *ptr) +void Pair::init_list(int which, NeighList *ptr) { list = ptr; } @@ -1740,6 +1740,18 @@ void Pair::init_bitmap(double inner, double outer, int ntablebits, /* ---------------------------------------------------------------------- */ +void Pair::pairTensor(double fforce, double dfac, double delr[3], double phiTensor[6]) { + int m = 0; + for (int k=0; k<3; k++) { + phiTensor[m] = fforce; + for (int l=k; l<3; l++) { + if (l>k) phiTensor[m] = 0; + phiTensor[m++] += delr[k]*delr[l] * dfac; + } + } +} +/* ---------------------------------------------------------------------- */ + double Pair::memory_usage() { double bytes = comm->nthreads*maxeatom * sizeof(double); diff --git a/src/pair.h b/src/pair.h index c1a9e6eef8..a9506480be 100644 --- a/src/pair.h +++ b/src/pair.h @@ -145,6 +145,16 @@ class Pair : protected Pointers { return 0.0; } + void pairTensor(double fforce, double dfac, double delr[3], double phiTensor[6]); + + virtual double single2(int, int, int, int, + double, double[3], double, double, + double& fforce, double d2u[6]) { + fforce = 0.0; + for (int i=0; i<6; i++) d2u[i] = 0; + return 0.0; + } + virtual void settings(int, char **) = 0; virtual void coeff(int, char **) = 0; @@ -207,10 +217,6 @@ class Pair : protected Pointers { typedef union {int i; float f;} union_int_float_t; - // Accessor for the user-intel package to determine virial calc for hybrid - - inline int fdotr_is_set() const { return vflag_fdotr; } - protected: int vflag_fdotr; int maxeatom,maxvatom; diff --git a/src/pair_lj_smooth_linear.cpp b/src/pair_lj_smooth_linear.cpp index 17c789bcee..4cf8d6d3db 100644 --- a/src/pair_lj_smooth_linear.cpp +++ b/src/pair_lj_smooth_linear.cpp @@ -326,9 +326,9 @@ void PairLJSmoothLinear::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, +double PairLJSmoothLinear::single(int i, int j, int itype, int jtype, double rsq, - double /*factor_coul*/, double factor_lj, + double factor_coul, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj,r,rinv; @@ -347,3 +347,26 @@ double PairLJSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, return factor_lj*philj; } + +double PairLJSmoothLinear::single2(int i, int j, int itype, int jtype, double rsq, + double delr[3], double factor_coul, double factor_lj, + double &fforce, double d2u[6]) +{ + double r2inv,r6inv,forcelj,philj,r,rinv; + + r2inv = 1.0/rsq; + r6inv = r2inv*r2inv*r2inv; + rinv = sqrt(r2inv); + r = sqrt(rsq); + forcelj = r6inv*(lj1[itype][jtype]*r6inv-lj2[itype][jtype]); + forcelj = rinv*forcelj - dljcut[itype][jtype]; + fforce = factor_lj*forcelj*rinv; + + philj = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]); + philj = philj - ljcut[itype][jtype] + + (r-cut[itype][jtype])*dljcut[itype][jtype]; + + double d2r = factor_lj * r6inv * (13.0*lj1[itype][jtype]*r6inv - 7.0*lj2[itype][jtype])/rsq; + pairTensor(fforce, -(fforce + d2r) / rsq, delr, d2u); + return factor_lj*philj; +} diff --git a/src/pair_lj_smooth_linear.h b/src/pair_lj_smooth_linear.h index c18c442a18..9cee9f2951 100644 --- a/src/pair_lj_smooth_linear.h +++ b/src/pair_lj_smooth_linear.h @@ -38,6 +38,7 @@ class PairLJSmoothLinear : public Pair { void write_restart_settings(FILE *); void read_restart_settings(FILE *); double single(int, int, int, int, double, double, double, double &); + double single2(int, int, int, int, double, double[3], double, double, double&, double[6]); protected: double cut_global; From 29cd4eb5b6584d62dfc331ad9e58343264334b62 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Thu, 8 Nov 2018 12:03:51 -0500 Subject: [PATCH 018/760] Add HMA compute --- doc/src/compute.txt | 71 +----- doc/src/compute_hma.txt | 147 +++++++++++++ doc/src/computes.txt | 9 +- src/compute_hma.cpp | 470 ++++++++++++++++++++++++++++++++++++++++ src/compute_hma.h | 66 ++++++ 5 files changed, 689 insertions(+), 74 deletions(-) create mode 100644 doc/src/compute_hma.txt create mode 100644 src/compute_hma.cpp create mode 100644 src/compute_hma.h diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 857795ffe5..676c00d7a5 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -173,65 +173,43 @@ There are also additional accelerated compute styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands compute"_Commands_compute.html doc page are followed by one or more of -(g,i,k,o,t) to indicate which accelerated styles exist. +(g,i,k,o,t) to indicate which accerlerated styles exist. -"ackland/atom"_compute_ackland_atom.html - "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom -"angle"_compute_angle.html - -"angle/local"_compute_angle_local.html - "angle/local"_compute_bond_local.html - theta and energy of each angle "angmom/chunk"_compute_angmom_chunk.html - angular momentum for each chunk -"basal/atom"_compute_basal_atom.html - "body/local"_compute_body_local.html - attributes of body sub-particles "bond"_compute_bond.html - values computed by a bond style "bond/local"_compute_bond_local.html - distance and energy of each bond "centro/atom"_compute_centro_atom.html - centro-symmetry parameter for each atom "chunk/atom"_compute_chunk_atom.html - assign chunk IDs to each atom -"chunk/spread/atom"_compute_chunk_spread_atom.html - spreads chunk values to each atom in chunk "cluster/atom"_compute_cluster_atom.html - cluster ID for each atom "cna/atom"_compute_cna_atom.html - common neighbor analysis (CNA) for each atom -"cnp/atom"_compute_cnp_atom.html - "com"_compute_com.html - center-of-mass of group of atoms "com/chunk"_compute_com_chunk.html - center-of-mass for each chunk "contact/atom"_compute_contact_atom.html - contact count for each spherical particle "coord/atom"_compute_coord_atom.html - coordination number for each atom "damage/atom"_compute_damage_atom.html - Peridynamic damage for each atom -"dihedral"_compute_dihedral.html - "dihedral/local"_compute_dihedral_local.html - angle of each dihedral "dilatation/atom"_compute_dilatation_atom.html - Peridynamic dilatation for each atom -"dipole/chunk"_compute_dipole_chunk.html - "displace/atom"_compute_displace_atom.html - displacement of each atom -"dpd"_compute_dpd.html - -"dpd/atom"_compute_dpd_atom.html - -"edpd/temp/atom"_compute_edpd_temp_atom.html - -"entropy/atom"_compute_entropy_atom.html - "erotate/asphere"_compute_erotate_asphere.html - rotational energy of aspherical particles "erotate/rigid"_compute_erotate_rigid.html - rotational energy of rigid bodies "erotate/sphere"_compute_erotate_sphere.html - rotational energy of spherical particles "erotate/sphere/atom"_compute_erotate_sphere.html - rotational energy for each spherical particle -"erotate/sphere/atom"_compute_erotate_sphere_atom.html - "event/displace"_compute_event_displace.html - detect event on atom displacement -"fep"_compute_fep.html - -"force/tally"_compute_tally.html - "fragment/atom"_compute_cluster_atom.html - fragment ID for each atom -"global/atom"_compute_global_atom.html - "group/group"_compute_group_group.html - energy/force between two groups of atoms "gyration"_compute_gyration.html - radius of gyration of group of atoms "gyration/chunk"_compute_gyration_chunk.html - radius of gyration for each chunk "heat/flux"_compute_heat_flux.html - heat flux through a group of atoms -"heat/flux/tally"_compute_tally.html - "hexorder/atom"_compute_hexorder_atom.html - bond orientational order parameter q6 -"improper"_compute_improper.html - +"hma"_compute_hma.html - harmonically mapped averaging for atomic crystals "improper/local"_compute_improper_local.html - angle of each improper "inertia/chunk"_compute_inertia_chunk.html - inertia tensor for each chunk "ke"_compute_ke.html - translational kinetic energy "ke/atom"_compute_ke_atom.html - kinetic energy for each atom -"ke/atom/eff"_compute_ke_atom_eff.html - -"ke/eff"_compute_ke_eff.html - "ke/rigid"_compute_ke_rigid.html - translational kinetic energy of rigid bodies -"meso/e/atom"_compute_meso_e_atom.html - -"meso/rho/atom"_compute_meso_rho_atom.html - -"meso/t/atom"_compute_meso_t_atom.html - "msd"_compute_msd.html - mean-squared displacement of group of atoms "msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk "msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms @@ -241,77 +219,36 @@ compute"_Commands_compute.html doc page are followed by one or more of "pair/local"_compute_pair_local.html - distance/energy/force of each pairwise interaction "pe"_compute_pe.html - potential energy "pe/atom"_compute_pe_atom.html - potential energy for each atom -"pe/mol/tally"_compute_tally.html - -"pe/tally"_compute_tally.html - "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 - -"pressure/uef"_compute_pressure_uef.html - "property/atom"_compute_property_atom.html - convert atom attributes to per-atom vectors/arrays -"property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "property/local"_compute_property_local.html - convert local attributes to localvectors/arrays -"ptm/atom"_compute_ptm_atom.html - +"property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "rdf"_compute_rdf.html - radial distribution function g(r) histogram of group of atoms "reduce"_compute_reduce.html - combine per-atom quantities into a single global value -"reduce/chunk"_compute_reduce_chunk.html - reduce per-atom quantities within each chunk "reduce/region"_compute_reduce.html - same as compute reduce, within a region "rigid/local"_compute_rigid_local.html - extract rigid body attributes -"saed"_compute_saed.html - "slice"_compute_slice.html - extract values from global vector or array -"smd/contact/radius"_compute_smd_contact_radius.html - -"smd/damage"_compute_smd_damage.html - -"smd/hourglass/error"_compute_smd_hourglass_error.html - -"smd/internal/energy"_compute_smd_internal_energy.html - -"smd/plastic/strain"_compute_smd_plastic_strain.html - -"smd/plastic/strain/rate"_compute_smd_plastic_strain_rate.html - -"smd/rho"_compute_smd_rho.html - -"smd/tlsph/defgrad"_compute_smd_tlsph_defgrad.html - -"smd/tlsph/dt"_compute_smd_tlsph_dt.html - -"smd/tlsph/num/neighs"_compute_smd_tlsph_num_neighs.html - -"smd/tlsph/shape"_compute_smd_tlsph_shape.html - -"smd/tlsph/strain"_compute_smd_tlsph_strain.html - -"smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html - -"smd/tlsph/stress"_compute_smd_tlsph_stress.html - -"smd/triangle/vertices"_compute_smd_triangle_vertices.html - -"smd/triangle/vertices"_compute_smd_triangle_vertices.html - -"smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html - -"smd/ulsph/strain"_compute_smd_ulsph_strain.html - -"smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html - -"smd/ulsph/stress"_compute_smd_ulsph_stress.html - -"smd/vol"_compute_smd_vol.html - "sna/atom"_compute_sna_atom.html - calculate bispectrum coefficients for each atom "snad/atom"_compute_sna_atom.html - derivative of bispectrum coefficients for each atom "snav/atom"_compute_sna_atom.html - virial contribution from bispectrum coefficients for each atom -"spin"_compute_spin.html - "stress/atom"_compute_stress_atom.html - stress tensor for each atom -"stress/mop"_compute_stress_mop.html - -"stress/mop/profile"_compute_stress_mop.html - -"stress/tally"_compute_tally.html - -"tdpd/cc/atom"_compute_tdpd_cc_atom.html - "temp"_compute_temp.html - temperature of group of atoms "temp/asphere"_compute_temp_asphere.html - temperature of aspherical particles "temp/body"_compute_temp_body.html - temperature of body particles "temp/chunk"_compute_temp_chunk.html - temperature of each chunk "temp/com"_compute_temp_com.html - temperature after subtracting center-of-mass velocity -"temp/cs"_compute_temp_cs.html - "temp/deform"_compute_temp_deform.html - temperature excluding box deformation velocity -"temp/deform/eff"_compute_temp_deform_eff.html - -"temp/drude"_compute_temp_drude.html - -"temp/eff"_compute_temp_eff.html - "temp/partial"_compute_temp_partial.html - temperature excluding one or more dimensions of velocity "temp/profile"_compute_temp_profile.html - temperature excluding a binned velocity profile "temp/ramp"_compute_temp_ramp.html - temperature excluding ramped velocity component "temp/region"_compute_temp_region.html - temperature of a region of atoms -"temp/region/eff"_compute_temp_region_eff.html - -"temp/rotate"_compute_temp_rotate.html - "temp/sphere"_compute_temp_sphere.html - temperature of spherical particles -"temp/uef"_compute_temp_uef.html - "ti"_compute_ti.html - thermodynamic integration free energy values "torque/chunk"_compute_torque_chunk.html - torque applied on each chunk "vacf"_compute_vacf.html - velocity-autocorrelation function of group of atoms "vcm/chunk"_compute_vcm_chunk.html - velocity of center-of-mass for each chunk -"voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom -"xrd"_compute_xrd.html - :ul +"voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom :ul [Restrictions:] none diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt new file mode 100644 index 0000000000..f71ddc9e2e --- /dev/null +++ b/doc/src/compute_hma.txt @@ -0,0 +1,147 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +compute hma command :h3 + +[Syntax:] + +compute ID group-ID hma temp-ID keyword ... :pre + +ID, group-ID are documented in "compute"_compute.html command :l +hma = style name of this compute command :l +temp-ID = ID of fix that specifies the set temperature during canonical simulation :l +keyword = {anharmonic} {u} {p Pharm} {cv} :l + {anharmonic} = compute will return anharmonic property values + {u} = compute will return potential energy + {p} = compute will return pressure. the following keyword must be the difference between the harmonic pressure and lattice pressure as described below + {cv} = compute will return the heat capacity :pre +:ule + +[Examples:] + +compute 2 all hma 1 u +compute 2 all hma 1 anharmonic u p 0.9 +compute 2 all hma 1 u cv :pre + + + +[Description:] + +Define a computation that calculates the properties of a solid (potential +energy, pressure or heat capacity), using the harmonically-mapped averaging +(HMA) method. +This command yields much higher precision than the equivalent compute commands +("compute pe"_compute_pe.html, "compute pressure"_compute_pressure.html, etc.) +commands during a canonical simulation of an atomic crystal. + + +In this method, the analytically known harmonic behavior of a crystal is removed from the traditional ensemble +averages, which leads to an accurate and precise measurement of the anharmonic contributions without contamination +by noise produced by the already-known harmonic behavior. +A detailed description of this method can be found in ("Moustafa"_#hma-Moustafa). The potential energy is computed by the formula: + +\begin\{equation\} +\left< U\right>_\{HMA\} = \frac\{d(N-1)\}\{2\beta\} + \left< U + \frac\{1\}\{2\} F\bullet\Delta r \right> +\end\{equation\} + +where \(N\) is the number of atoms in the system, \(\beta\) is the reciprocal of the thermodynamic temperature, \(d\) is the +dimensionality of the system (2 or 3 for 2d/3d), \(F\bullet\Delta r\) is the sum of dot products of the +atomic force vectors and displacement (from lattice sites) vectors, and \(U\) is the sum of +pair, bond, angle, dihedral, improper, kspace (long-range), and fix energies. + +The pressure is computed by the formula: + +\begin\{equation\} +\left< P\right>_\{HMA\} = \Delta \hat P + \left< P_\{vir\} + \frac\{\beta \Delta \hat P - \rho\}\{d(N-1)\} F\bullet\Delta r \right> +\end\{equation\} + +where \(\rho\) is the number density of the system, \(\Delta \hat P\) is the +difference between theh harmonic and lattice pressure, and \(P_\{vir\}\) is +the virial pressure computed as the sum of pair, bond, angle, dihedral, +improper, kspace (long-range), and fix contributions to the force on each +atom. Although the method will work for any value of \(\Delta \hat P\) +specified (use pressure "units"_units.html), the precision of the resultant +pressure is sensitive to \(\Delta \hat P\); the precision tends to be +best when \(\Delta \hat P\) is the actual the difference between the lattice +pressure and harmonic pressure. + +\begin\{equation\} +\left_\{HMA\} = \frac\{d k_B (N-1)\}\{2\} + \beta \left( \left< +U_\{HMA\}^2 \right> - \left^2 \right)/T + \frac\{1\}\{4 T\} +\left< F\bullet\Delta r + \Delta r \bullet \Phi \bullet \Delta r \right> +\end\{equation\} + +where \(\Phi\) is the Hessian of second derivatives. The compute hma command +computes the full expression for \(C_V\) except for the +\(\left^2\) in the variance term, which can be obtained by +passing the {u} keyword; you must add this extra contribution to the \(C_V\) +value reported by this compute. The variance term can cause significant +roundoff error when computing \(C_V\). To address this, the {anharmonic} +keyword can be passed and/or the output format can be speicified with more +digits. + +thermo_modify format float '%22.15e' :pre + +The {anharmonic} keyword will instruct the compute to return anharmonic +properties rather than the full properties (lattice, harmonic and anharmonic). +When using this keyword, the compute must be first active (it must be included +via a "thermo_style custom"_thermo_style.html command) while the atoms are +still at their lattice sites (before equilibration). + +The temp-ID specified with compute hma command should be same as the fix-ID of Nose-Hoover ("fix nvt"_fix_nh.html) or +Berendsen ("fix temp/berendsen"_fix_temp_berendsen.html) thermostat used for the simulation. While using this command, Langevin thermostat +("fix langevin"_fix_langevin.html) +should be avoided as its extra forces interfere with the HMA implementation. + + + +NOTE: Compute hma command should be used right after the energy minimization, when the atoms are at their lattice sites. +The simulation should not be started before this command has been used in the input script. + + +The following example illustrates the placement of this command in the input script: + + +min_style cg +minimize 1e-35 1e-15 50000 500000 +compute 1 all hma thermostatid u +fix thermostatid all nvt temp 600.0 600.0 100.0 :pre + + + +NOTE: Compute hma should be used when the atoms of the solid do not diffuse. Diffusion will reduce the precision in the potential energy computation. + + +NOTE: The "fix_modify energy yes"_fix_modify.html command must also be specified if a fix is to contribute potential energy to this command. + +:line + +[Output info:] + +This compute calculates a global vector that includes the n properties +requested as arguments to the command (the potential energy, pressure or heat +capacity). The elements of the vector can be accessed by indices 1-n by any +command that uses global vector values as input. See the "Howto +output"_Howto_output.html doc page for an overview of LAMMPS output options. + +The vector values calculated by this compute are "extensive". The +scalar value will be in energy "units"_units.html. + +[Restrictions:] Usage restricted to canonical (NVT) ensemble simulation only. + +[Related commands:] + +"compute pe"_compute_pe.html, "compute pressure"_compute_pressure.html + +[Default:] none + +:line + +:link(hma-Moustafa) +[(Moustafa)] Sabry G. Moustafa, Andrew J. Schultz, and David A. Kofke, {Very fast averaging of thermal properties of crystals by molecular simulation}, +"Phys. Rev. E \[92\], 043303 (2015)"_https://link.aps.org/doi/10.1103/PhysRevE.92.043303 diff --git a/doc/src/computes.txt b/doc/src/computes.txt index 926b8da222..c636633b38 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -6,7 +6,6 @@ Computes :h1 :maxdepth: 1 compute_ackland_atom - compute_adf compute_angle compute_angle_local compute_angmom_chunk @@ -16,7 +15,6 @@ Computes :h1 compute_bond_local compute_centro_atom compute_chunk_atom - compute_chunk_spread_atom compute_cluster_atom compute_cna_atom compute_cnp_atom @@ -46,6 +44,7 @@ Computes :h1 compute_gyration_chunk compute_heat_flux compute_hexorder_atom + compute_hma compute_improper compute_improper_local compute_inertia_chunk @@ -68,15 +67,12 @@ Computes :h1 compute_pe_atom compute_plasticity_atom compute_pressure - compute_pressure_cylinder compute_pressure_uef compute_property_atom compute_property_chunk compute_property_local - compute_ptm_atom compute_rdf compute_reduce - compute_reduce_chunk compute_rigid_local compute_saed compute_slice @@ -94,7 +90,7 @@ Computes :h1 compute_smd_tlsph_strain compute_smd_tlsph_strain_rate compute_smd_tlsph_stress - compute_smd_triangle_vertices + compute_smd_triangle_mesh_vertices compute_smd_ulsph_num_neighs compute_smd_ulsph_strain compute_smd_ulsph_strain_rate @@ -103,7 +99,6 @@ Computes :h1 compute_sna_atom compute_spin compute_stress_atom - compute_stress_mop compute_tally compute_tdpd_cc_atom compute_temp diff --git a/src/compute_hma.cpp b/src/compute_hma.cpp new file mode 100644 index 0000000000..ac976080ce --- /dev/null +++ b/src/compute_hma.cpp @@ -0,0 +1,470 @@ +/* ---------------------------------------------------------------------- + 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 "compute_hma.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "pair.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "group.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "fix_store.h" +#include "memory.h" +#include "error.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" + +#include + + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), id_temp(NULL), deltaR(NULL) +{ + if (narg < 4) error->all(FLERR,"Illegal compute hma command"); + if (igroup) error->all(FLERR,"Compute hma must use group all"); + if (strcmp(arg[3],"NULL") == 0) {error->all(FLERR,"fix ID specifying the set temperature of canonical simulation is required");} + else { + int n = strlen(arg[3]) + 1; + id_temp = new char[n]; + strcpy(id_temp,arg[3]); + } + + create_attribute = 1; + extscalar = 1; + timeflag = 1; + +// (from compute displace/atom) create a new fix STORE style +// our new fix's id (id_fix)= compute-ID + COMPUTE_STORE +// our new fix's group = same as compute group + + int n = strlen(id) + strlen("_COMPUTE_STORE") + 1; + id_fix = new char[n]; + strcpy(id_fix,id); + strcat(id_fix,"_COMPUTE_STORE"); + + char **newarg = new char*[6]; + newarg[0] = id_fix; + newarg[1] = group->names[igroup]; + newarg[2] = (char *) "STORE"; + newarg[3] = (char *) "peratom"; + newarg[4] = (char *) "1"; + newarg[5] = (char *) "3"; + modify->add_fix(6,newarg); + fix = (FixStore *) modify->fix[modify->nfix-1]; + + delete [] newarg; + + // calculate xu,yu,zu for fix store array + // skip if reset from restart file + + if (fix->restart_reset) fix->restart_reset = 0; + else { + double **xoriginal = fix->astore; + double **x = atom->x; + imageint *image = atom->image; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) + domain->unmap(x[i],image[i],xoriginal[i]); + } + + vector_flag = 1; + extvector = -1; + comm_forward = 0; // 3 if 2nd derivative needed + + computeU = computeP = computeCv = -1; + returnAnharmonic = 0; + std::vector extvec; + for (int iarg=4; iarg narg) error->all(FLERR,"Illegal fix hma command"); + computeP = extvec.size(); + deltaPcap = force->numeric(FLERR, arg[iarg+1]); + extvec.push_back(0); + iarg++; + } + else if (!strcasecmp(arg[iarg], "cv")) { + computeCv = extvec.size(); + comm_forward = 3; + extvec.push_back(1); + } + else if (!strcasecmp(arg[iarg], "anharmonic")) { + returnAnharmonic = -1; + } + else { + error->all(FLERR,"Illegal fix hma command"); + } + } + + if (extvec.size() == 0) { + error->all(FLERR,"Illegal fix hma command"); + } + size_vector = extvec.size(); + memory->create(vector, size_vector, "hma::vector"); + extlist = new int[size_vector]; + for (int i=0; i-1 || computeCv>-1) { + peflag = 1; + } + if (computeP>-1) { + pressflag = 1; + } + + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +ComputeHMA::~ComputeHMA() +{ + // check nfix in case all fixes have already been deleted + if (modify->nfix) modify->delete_fix(id_fix); + + delete [] id_fix; + delete [] id_temp; + delete [] extlist; + memory->destroy(vector); + memory->destroy(deltaR); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeHMA::init() { + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->occasional = 1; +} + +void ComputeHMA::init_list(int id, NeighList *ptr) { + list = ptr; +} + +void ComputeHMA::setup() +{ + int dummy=0; + int ifix = modify->find_fix(id_temp); + if (ifix < 0) error->all(FLERR,"Could not find compute hma temperature ID"); + double * temperat = (double *) modify->fix[ifix]->extract("t_target",dummy); + if (temperat==NULL) error->all(FLERR,"Could not find compute hma temperature ID"); + finaltemp = * temperat; + + + // set fix which stores original atom coords + + int ifix2 = modify->find_fix(id_fix); + if (ifix2 < 0) error->all(FLERR,"Could not find compute hma ID"); + fix = (FixStore *) modify->fix[ifix2]; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeHMA::compute_vector() +{ + invoked_vector = update->ntimestep; + +// dx,dy,dz = displacement of atom from original position + // original unwrapped position is stored by fix + // for triclinic, need to unwrap current atom coord via h matrix + + // grow deltaR array if necessary + + if (comm_forward>0 && atom->nmax > nmax) { + memory->destroy(deltaR); + nmax = atom->nmax; + memory->create(deltaR,nmax,3,"hma:deltaR"); + } + + double **xoriginal = fix->astore; + double fdr = 0.0; + double **x = atom->x; + double **f = atom->f; + + imageint *image = atom->image; + int nlocal = atom->nlocal; + + double *h = domain->h; + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + + double u = 0.0; + if (computeU>-1 || computeCv>-1) { + if (force->pair) u += force->pair->eng_vdwl + force->pair->eng_coul; + if (force->bond) u += force->bond->energy; + if (force->angle) u += force->angle->energy; + if (force->dihedral) u += force->dihedral->energy; + if (force->improper) u += force->improper->energy; + } + + int dimension = domain->dimension; + double p = 0, vol = 0; + if (computeP>-1) { + p = virial_compute(dimension); + vol = xprd * yprd; + if (dimension == 3) vol *= zprd; + p *= force->nktv2p / (dimension*vol); + if (returnAnharmonic == -1) { + pLat = p; + } + } + + if (domain->triclinic == 0) { + for (int i = 0; i < nlocal; i++) { + int xbox = (image[i] & IMGMASK) - IMGMAX; + int ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + int zbox = (image[i] >> IMG2BITS) - IMGMAX; + double dx = x[i][0] + xbox*xprd - xoriginal[i][0]; + double dy = x[i][1] + ybox*yprd - xoriginal[i][1]; + double dz = x[i][2] + zbox*zprd - xoriginal[i][2]; + if (comm_forward>0) { + deltaR[i][0] = dx; + deltaR[i][1] = dy; + deltaR[i][2] = dz; + } + fdr += dx*f[i][0] + dy*f[i][1] + dz*f[i][2]; + } + } + else { + for (int i = 0; i < nlocal; i++) { + int xbox = (image[i] & IMGMASK) - IMGMAX; + int ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + int zbox = (image[i] >> IMG2BITS) - IMGMAX; + double dx = x[i][0] + h[0]*xbox + h[5]*ybox + h[4]*zbox - xoriginal[i][0]; + double dy = x[i][1] + h[1]*ybox + h[3]*zbox - xoriginal[i][1]; + double dz = x[i][2] + h[2]*zbox - xoriginal[i][2]; + if (comm_forward>0) { + deltaR[i][0] = dx; + deltaR[i][1] = dy; + deltaR[i][2] = dz; + } + fdr += ((dx*f[i][0])+(dy*f[i][1])+(dz*f[i][2])); + } + } + + double phiSum = 0.0; + if (computeCv>-1) { + comm->forward_comm_compute(this); + int *type = atom->type; + double** cutsq = force->pair->cutsq; + if (force->pair) { + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + double *special_coul = force->special_coul; + int newton_pair = force->newton_pair; + + if (update->firststep == update->ntimestep) neighbor->build_one(list,1); + else neighbor->build_one(list); + int inum = list->inum; + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + double fac = (newton_pair || i < nlocal) ? 1.0 : 0.5; + double* ix = x[i]; + int itype = type[i]; + int *jlist = firstneigh[i]; + int jnum = numneigh[i]; + double *idr = deltaR[i]; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + if (!newton_pair && j>=nlocal) fac -= 0.5; + double factor_lj = special_lj[sbmask(j)]; + double factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + double* jx = x[j]; + double delr[3]; + delr[0] = ix[0] - jx[0]; + delr[1] = ix[1] - jx[1]; + delr[2] = ix[2] - jx[2]; + double rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + int jtype = type[j]; + if (rsq < cutsq[itype][jtype]) { + double* jdr = deltaR[j]; + double fforce, d2u[6]; + force->pair->single2(i, j, itype, jtype, rsq, delr, factor_coul, factor_lj, fforce, d2u); + int m = 0; + for (int k=0; k<3; k++) { + double a = fac; + for (int l=k; l<3; l++) { + phiSum += a*(idr[k]*jdr[l]+jdr[k]*idr[l])*d2u[m]; + phiSum -= a*(idr[k]*idr[l]*d2u[m] + jdr[k]*jdr[l]*d2u[m]); + m++; + if (k==l) a *= 2; + } + } + } + } + } + } + } + +//adding PE for this processor + +//adding the energies of all processors + + double fdrTotal; + MPI_Allreduce(&fdr,&fdrTotal,1,MPI_DOUBLE,MPI_SUM,world); + double uTotal; + if (computeU>-1 || computeCv>-1) { + MPI_Allreduce(&u,&uTotal,1,MPI_DOUBLE,MPI_SUM,world); + if (returnAnharmonic == -1) { + uLat = uTotal; + } + if (computeU>-1) { + if (returnAnharmonic) { + vector[computeU] = uTotal - uLat + 0.5*fdrTotal; + } + else { + vector[computeU] = uTotal + 0.5*fdrTotal + 0.5*dimension*(atom->natoms - 1)*force->boltz*finaltemp; + } + } + } + + if (computeP>-1) { + double fv = ((deltaPcap)-(force->boltz*finaltemp*force->nktv2p*atom->natoms/vol))/(force->boltz*finaltemp*dimension*(atom->natoms - 1)); + if (returnAnharmonic) { + vector[computeP] = p - pLat + (fv*fdrTotal); + } + else { + vector[computeP] = p + (fv*fdrTotal) + deltaPcap; + } + } + + if (computeCv>-1) { + if (computeU==-1) MPI_Allreduce(&u,&uTotal,1,MPI_DOUBLE,MPI_SUM,world); + double buTot; + if (returnAnharmonic) { + buTot = (uTotal - uLat + 0.5*fdrTotal)/finaltemp; + } + else { + buTot = (uTotal + 0.5*fdrTotal)/finaltemp + 0.5*dimension*(atom->natoms - 1)*force->boltz; + } + double one = -0.25*(fdr + phiSum)/finaltemp; + double Cv; + MPI_Allreduce(&one,&Cv,1,MPI_DOUBLE,MPI_SUM,world); + vector[computeCv] = Cv + buTot*buTot; + if (!returnAnharmonic) { + vector[computeCv] += 0.5*dimension*(atom->natoms-1); + } + } + if (returnAnharmonic == -1) { + returnAnharmonic = 1; + } +} + +double ComputeHMA::virial_compute(int n) { + double v = 0; + + // sum contributions to virial from forces and fixes + + if (force->pair) v += sumVirial(n, force->pair->virial); + if (force->bond) v += sumVirial(n, force->bond->virial); + if (force->angle) v += sumVirial(n, force->angle->virial); + if (force->dihedral) v += sumVirial(n, force->dihedral->virial); + if (force->improper) v += sumVirial(n, force->improper->virial); + for (int i = 0; i < modify->nfix; i++) + if (modify->fix[i]->thermo_virial) v += sumVirial(n, modify->fix[i]->virial); + + // sum virial across procs + + double virial; + MPI_Allreduce(&v,&virial,1,MPI_DOUBLE,MPI_SUM,world); + + // KSpace virial contribution is already summed across procs + + if (force->kspace) + for (int i = 0; i < n; i++) virial += force->kspace->virial[i]; + return virial; +} + +/* ---------------------------------------------------------------------- */ + +int ComputeHMA::pack_forward_comm(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + double **xoriginal = fix->astore; + imageint *image = atom->image; + double **x = atom->x; + double *h = domain->h; + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + + int m = 0; + for (int ii = 0; ii < n; ii++) { + int i = list[ii]; + buf[m++] = deltaR[i][0]; + buf[m++] = deltaR[i][1]; + buf[m++] = deltaR[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeHMA::unpack_forward_comm(int n, int first, double *buf) +{ + double **xoriginal = fix->astore; + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + deltaR[i][0] = buf[m++]; + deltaR[i][1] = buf[m++]; + deltaR[i][2] = buf[m++]; + } +} + + +/* ---------------------------------------------------------------------- + initialize one atom's storage values, called when atom is created +------------------------------------------------------------------------- */ + +void ComputeHMA::set_arrays(int i) +{ + double **xoriginal = fix->astore; + double **x = atom->x; + xoriginal[i][0] = x[i][0]; + xoriginal[i][1] = x[i][1]; + xoriginal[i][2] = x[i][2]; +} diff --git a/src/compute_hma.h b/src/compute_hma.h new file mode 100644 index 0000000000..f40103c3c4 --- /dev/null +++ b/src/compute_hma.h @@ -0,0 +1,66 @@ +/* -*- 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(HMA,ComputeHMA) + +#else + +#ifndef LMP_COMPUTE_HMA_H +#define LMP_COMPUTE_HMA_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeHMA : public Compute { + public: + ComputeHMA(class LAMMPS *, int, char **); + ~ComputeHMA(); + void setup(); + void init(); + void init_list(int, class NeighList *); + void compute_vector(); + void set_arrays(int); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + + private: + int nmax; + int atomsingroup; + char *id_fix; + char *id_temp; + double finaltemp; + class FixStore *fix; + double boltz, nktv2p, inv_volume; + double deltaPcap; + double virial_compute(int); + static double sumVirial(int n, double* v) { + double x = 0; + for (int i=0; i Date: Thu, 8 Nov 2018 16:17:43 -0700 Subject: [PATCH 019/760] 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 134b1d70ad0fd316ece5951b1efe938be67fbc3c Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 9 Nov 2018 21:28:41 -0500 Subject: [PATCH 020/760] Cleanup, add memory_usage method --- src/compute_hma.cpp | 23 +++++++++++++---------- src/compute_hma.h | 1 + 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/compute_hma.cpp b/src/compute_hma.cpp index ac976080ce..c0a7901640 100644 --- a/src/compute_hma.cpp +++ b/src/compute_hma.cpp @@ -59,9 +59,9 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : extscalar = 1; timeflag = 1; -// (from compute displace/atom) create a new fix STORE style -// our new fix's id (id_fix)= compute-ID + COMPUTE_STORE -// our new fix's group = same as compute group + // (from compute displace/atom) create a new fix STORE style + // our new fix's id (id_fix)= compute-ID + COMPUTE_STORE + // our new fix's group = same as compute group int n = strlen(id) + strlen("_COMPUTE_STORE") + 1; id_fix = new char[n]; @@ -169,7 +169,8 @@ void ComputeHMA::init() { neighbor->requests[irequest]->occasional = 1; } -void ComputeHMA::init_list(int id, NeighList *ptr) { +void ComputeHMA::init_list(int id, NeighList *ptr) +{ list = ptr; } @@ -196,12 +197,7 @@ void ComputeHMA::compute_vector() { invoked_vector = update->ntimestep; -// dx,dy,dz = displacement of atom from original position - // original unwrapped position is stored by fix - // for triclinic, need to unwrap current atom coord via h matrix - // grow deltaR array if necessary - if (comm_forward>0 && atom->nmax > nmax) { memory->destroy(deltaR); nmax = atom->nmax; @@ -391,7 +387,8 @@ void ComputeHMA::compute_vector() } } -double ComputeHMA::virial_compute(int n) { +double ComputeHMA::virial_compute(int n) +{ double v = 0; // sum contributions to virial from forces and fixes @@ -468,3 +465,9 @@ void ComputeHMA::set_arrays(int i) xoriginal[i][1] = x[i][1]; xoriginal[i][2] = x[i][2]; } + +double ComputeHMA::memory_usage() +{ + double bytes = nmax * 3 * sizeof(double); + return bytes; +} diff --git a/src/compute_hma.h b/src/compute_hma.h index f40103c3c4..44906b53a1 100644 --- a/src/compute_hma.h +++ b/src/compute_hma.h @@ -35,6 +35,7 @@ class ComputeHMA : public Compute { void set_arrays(int); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); + double memory_usage(); private: int nmax; From d66a1ac054222c06cb95285f364127e6bb9ee815 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 13 Nov 2018 17:03:32 -0700 Subject: [PATCH 021/760] 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 022/760] 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 7a2d326103b111c6282e128d2c617a4af461237b Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 8 Jan 2019 09:19:49 -0700 Subject: [PATCH 023/760] 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 024/760] 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 101948ce1e2c0084b1b4e9774446e9e751a98132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugen=20Ro=C5=BEi=C4=87?= Date: Thu, 21 Feb 2019 01:49:04 +0100 Subject: [PATCH 025/760] Added a Morse potential option to 'fix wall/region' --- src/fix_wall_region.cpp | 34 ++++++++++++++++++++++++++++++---- src/fix_wall_region.h | 2 ++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp index ff147d7446..2b16ec3bf4 100644 --- a/src/fix_wall_region.cpp +++ b/src/fix_wall_region.cpp @@ -31,7 +31,7 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; -enum{LJ93,LJ126,LJ1043,COLLOID,HARMONIC}; +enum{LJ93,LJ126,LJ1043,MORSE,COLLOID,HARMONIC}; /* ---------------------------------------------------------------------- */ @@ -39,7 +39,7 @@ FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), idregion(NULL) { - if (narg != 8) error->all(FLERR,"Illegal fix wall/region command"); + if (narg < 8) error->all(FLERR,"Illegal fix wall/region command"); scalar_flag = 1; vector_flag = 1; @@ -63,6 +63,7 @@ FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[4],"lj93") == 0) style = LJ93; else if (strcmp(arg[4],"lj126") == 0) style = LJ126; else if (strcmp(arg[4],"lj1043") == 0) style = LJ1043; + else if (strcmp(arg[4],"morse") == 0) style = MORSE; else if (strcmp(arg[4],"colloid") == 0) style = COLLOID; else if (strcmp(arg[4],"harmonic") == 0) style = HARMONIC; else error->all(FLERR,"Illegal fix wall/region command"); @@ -73,6 +74,14 @@ FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) : sigma = force->numeric(FLERR,arg[6]); cutoff = force->numeric(FLERR,arg[7]); + if (style == MORSE) { + if (narg != 9) + error->all(FLERR,"Illegal fix wall/region command"); + else + alpha = force->numeric(FLERR,arg[8]); + } else if (narg != 8) + error->all(FLERR,"Illegal fix wall/region command"); + if (cutoff <= 0.0) error->all(FLERR,"Fix wall/region cutoff <= 0.0"); eflag = 0; @@ -157,12 +166,15 @@ void FixWallRegion::init() coeff5 = coeff1 * 10.0; coeff6 = coeff2 * 4.0; coeff7 = coeff3 * 3.0; - double rinv = 1.0/cutoff; double r2inv = rinv*rinv; double r4inv = r2inv*r2inv; offset = coeff1*r4inv*r4inv*r2inv - coeff2*r4inv - coeff3*pow(cutoff+coeff4,-3.0); + } else if (style == MORSE) { + coeff1 = 2 * epsilon * alpha; + double alpha_dr = -alpha * (cutoff - sigma); + offset = epsilon * (exp(2.0*alpha_dr) - 2.0*exp(alpha_dr)); } else if (style == COLLOID) { coeff1 = -4.0/315.0 * epsilon * pow(sigma,6.0); coeff2 = -2.0/3.0 * epsilon; @@ -253,6 +265,7 @@ void FixWallRegion::post_force(int vflag) if (style == LJ93) lj93(region->contact[m].r); else if (style == LJ126) lj126(region->contact[m].r); else if (style == LJ1043) lj1043(region->contact[m].r); + else if (style == MORSE) morse(region->contact[m].r); else if (style == COLLOID) colloid(region->contact[m].r,radius[i]); else harmonic(region->contact[m].r); @@ -287,7 +300,7 @@ void FixWallRegion::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallRegion::post_force_respa(int vflag, int ilevel, int /*iloop*/) +void FixWallRegion::post_force_respa(int vflag, int ilevel, int iloop) { if (ilevel == ilevel_respa) post_force(vflag); } @@ -375,6 +388,19 @@ void FixWallRegion::lj1043(double r) coeff3*pow(r+coeff4,-3.0) - offset; } +/* ---------------------------------------------------------------------- + Morse interaction for particle with wall + compute eng and fwall = magnitude of wall force +------------------------------------------------------------------------- */ + +void FixWallRegion::morse(double r) +{ + double dr = r - sigma; + double dexp = exp(-alpha * dr); + fwall = coeff1 * (dexp*dexp - dexp) / r; + eng = epsilon * (dexp*dexp - 2.0*dexp) - offset; +} + /* ---------------------------------------------------------------------- colloid interaction for finite-size particle of rad with wall compute eng and fwall = magnitude of wall force diff --git a/src/fix_wall_region.h b/src/fix_wall_region.h index e3688c99ee..663a12b257 100644 --- a/src/fix_wall_region.h +++ b/src/fix_wall_region.h @@ -41,6 +41,7 @@ class FixWallRegion : public Fix { private: int style,iregion; double epsilon,sigma,cutoff; + double alpha; int eflag; double ewall[4],ewall_all[4]; int ilevel_respa; @@ -53,6 +54,7 @@ class FixWallRegion : public Fix { void lj93(double); void lj126(double); void lj1043(double); + void morse(double); void colloid(double, double); void harmonic(double); }; From 4ea7d733e8eab688c29948d45e61536f367b4ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugen=20Ro=C5=BEi=C4=87?= Date: Thu, 21 Feb 2019 02:17:19 +0100 Subject: [PATCH 026/760] Initial commit... --- src/USER-MISC/pair_cosine_squared.cpp | 473 ++++++++++++++++++++++++++ src/USER-MISC/pair_cosine_squared.h | 95 ++++++ 2 files changed, 568 insertions(+) create mode 100644 src/USER-MISC/pair_cosine_squared.cpp create mode 100644 src/USER-MISC/pair_cosine_squared.h diff --git a/src/USER-MISC/pair_cosine_squared.cpp b/src/USER-MISC/pair_cosine_squared.cpp new file mode 100644 index 0000000000..db3d8a6aa7 --- /dev/null +++ b/src/USER-MISC/pair_cosine_squared.cpp @@ -0,0 +1,473 @@ +/* ---------------------------------------------------------------------- + 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: Eugen Rozic (University College London) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_cosine_squared.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; + +/* ---------------------------------------------------------------------- */ + +PairCosineSquared::PairCosineSquared(LAMMPS *lmp) : Pair(lmp) +{ + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairCosineSquared::~PairCosineSquared() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(w); + memory->destroy(cut); + memory->destroy(wcaflag); + + memory->destroy(lj12_e); + memory->destroy(lj6_e); + memory->destroy(lj12_f); + memory->destroy(lj6_f); + } +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairCosineSquared::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(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(w, n+1, n+1, "pair:w"); + memory->create(wcaflag, n+1, n+1, "pair:wcaflag"); + + memory->create(lj12_e, n+1, n+1, "pair:lj12_e"); + memory->create(lj6_e, n+1, n+1, "pair:lj6_e"); + memory->create(lj12_f, n+1, n+1, "pair:lj12_f"); + memory->create(lj6_f, n+1, n+1, "pair:lj6_f"); + + for (int i = 1; i <= n; i++) { + for (int j = i; j <= n; j++) { + setflag[i][j] = 0; + wcaflag[i][j] = 0; + } + } +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairCosineSquared::settings(int narg, char **arg) +{ + if (narg != 1) { + error->all(FLERR, "Illegal pair_style command (wrong number of params)"); + } + + 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+1; j <= atom->ntypes; j++) + if (setflag[i][j]) + cut[i][j] = cut_global; + } +} + + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairCosineSquared::coeff(int narg, char **arg) +{ + if (narg < 4 || narg > 6) + error->all(FLERR, "Incorrect args for pair coefficients (too few or too many)"); + + 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; + double wca_one = 0; + if (narg == 6) { + cut_one = force->numeric(FLERR, arg[4]); + if (strcmp(arg[5], "wca") == 0) { + wca_one = 1; + } else { + error->all(FLERR, "Incorrect args for pair coefficients (unknown option)"); + } + } else if (narg == 5) { + if (strcmp(arg[4], "wca") == 0) { + wca_one = 1; + } else { + cut_one = force->numeric(FLERR, arg[4]); + } + } + + if (cut_one <= sigma_one) + error->all(FLERR, "Incorrect args for pair coefficients (cutoff <= sigma)"); + + 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; + wcaflag[i][j] = wca_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) + error->all(FLERR, "Incorrect args for pair coefficients (none set)"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style (unneccesary) +------------------------------------------------------------------------- */ + +/* +void PairCosineSquared::init_style() +{ + neighbor->request(this,instance_me); +} +*/ + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairCosineSquared::init_one(int i, int j) +{ + if (setflag[i][j] == 0) + error->all(FLERR, "Mixing not supported in pair_style cosine/squared"); + + epsilon[j][i] = epsilon[i][j]; + sigma[j][i] = sigma[i][j]; + cut[j][i] = cut[i][j]; + wcaflag[j][i] = wcaflag[i][j]; + + w[j][i] = w[i][j] = cut[i][j] - sigma[i][j]; + + if (wcaflag[i][j]) { + lj12_e[j][i] = lj12_e[i][j] = epsilon[i][j] * pow(sigma[i][j], 12.0); + lj6_e[j][i] = lj6_e[i][j] = 2.0 * epsilon[i][j] * pow(sigma[i][j], 6.0); + lj12_f[j][i] = lj12_f[i][j] = 12.0 * epsilon[i][j] * pow(sigma[i][j], 12.0); + lj6_f[j][i] = lj6_f[i][j] = 12.0 * epsilon[i][j] * pow(sigma[i][j], 6.0); + } + + // Note: cutsq is set in pair.cpp + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + this is here to throw errors & warnings for given options +------------------------------------------------------------------------- */ + +void PairCosineSquared::modify_params(int narg, char **arg) +{ + Pair::modify_params(narg, arg); + + int iarg = 0; + while (iarg < narg) { + if (strcmp(arg[iarg], "mix") == 0) { + error->all(FLERR, "pair_modify mix not supported for pair_style cosine/squared"); + } else if (strcmp(arg[iarg], "shift") == 0) { + error->warning(FLERR, "pair_modify shift is meaningless for pair_style cosine/squared"); + offset_flag = 0; + } else if (strcmp(arg[iarg], "tail") == 0) { + error->warning(FLERR, "pair_modify tail is meaningless for pair_style cosine/squared"); + tail_flag = 0; + } + iarg++; + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairCosineSquared::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); + fwrite(&wcaflag[i][j], sizeof(int), 1, fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairCosineSquared::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); + fread(&wcaflag[i][j], sizeof(int), 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); + MPI_Bcast(&wcaflag[i][j], 1, MPI_INT, 0, world); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairCosineSquared::write_restart_settings(FILE *fp) +{ + fwrite(&cut_global, sizeof(double), 1, fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairCosineSquared::read_restart_settings(FILE *fp) +{ + int me = comm->me; + if (me == 0) { + fread(&cut_global, sizeof(double), 1, fp); + } + MPI_Bcast(&cut_global, 1, MPI_DOUBLE, 0, world); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairCosineSquared::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp, "%d %g %g %g %d\n", i, epsilon[i][i], sigma[i][i], + cut[i][i], wcaflag[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairCosineSquared::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 %d\n", i, j, epsilon[i][j], sigma[i][j], + cut[i][j], wcaflag[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +void PairCosineSquared::compute(int eflag, int vflag) +{ + int i, j, ii, jj, inum, jnum, itype, jtype; + int *ilist, *jlist, *numneigh, **firstneigh; + double xtmp, ytmp, ztmp, delx, dely, delz, evdwl, fpair; + double r, rsq, r2inv, r6inv; + double factor_lj, force_lj, force_cos, cosone; + + evdwl = 0.0; + if (eflag || vflag) + ev_setup(eflag, vflag); + else + evflag = vflag_fdotr = 0; + + 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]) { + + /* + This is exactly what the "single" method does, in fact it could be called + here instead of repeating the code but here energy calculation is optional + so a little bit of calculation is possibly saved + */ + + r = sqrt(rsq); + + if (r <= sigma[itype][jtype]) { + if (wcaflag[itype][jtype]) { + r2inv = 1.0/rsq; + r6inv = r2inv*r2inv*r2inv; + force_lj = r6inv*(lj12_f[itype][jtype]*r6inv - lj6_f[itype][jtype]); + fpair = factor_lj*force_lj*r2inv; + if (eflag) { + evdwl = factor_lj*r6inv * + (lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); + } + } else { + fpair = 0.0; + if (eflag) { + evdwl = -factor_lj*epsilon[itype][jtype]; + } + } + } else { + force_cos = -(MY_PI*epsilon[itype][jtype] / (2.0*w[itype][jtype])) * + sin(MY_PI*(r-sigma[itype][jtype]) / w[itype][jtype]); + fpair = factor_lj*force_cos / r; + if (eflag) { + cosone = cos(MY_PI*(r-sigma[itype][jtype]) / (2.0*w[itype][jtype])); + evdwl = -factor_lj*epsilon[itype][jtype]*cosone*cosone; + } + } + + 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 (evflag) + ev_tally(i, j, nlocal, newton_pair, evdwl, 0.0, fpair, delx, dely, delz); + } + } + } + + if (vflag_fdotr) + virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + This is used be pair_write; + it is called only if rsq < cutsq[itype][jtype], no need to check that +------------------------------------------------------------------------- */ + +double PairCosineSquared::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + double r, r2inv, r6inv, cosone, force, energy; + + r = sqrt(rsq); + + if (r <= sigma[itype][jtype]) { + if (wcaflag[itype][jtype]) { + r2inv = 1.0/rsq; + r6inv = r2inv*r2inv*r2inv; + force = r6inv*(lj12_f[itype][jtype]*r6inv - lj6_f[itype][jtype])*r2inv; + energy = r6inv*(lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); + } else { + force = 0.0; + energy = -epsilon[itype][jtype]; + } + } else { + cosone = cos(MY_PI*(r-sigma[itype][jtype]) / (2.0*w[itype][jtype])); + force = -(MY_PI*epsilon[itype][jtype] / (2.0*w[itype][jtype])) * + sin(MY_PI*(r-sigma[itype][jtype]) / w[itype][jtype]) / r; + energy = -epsilon[itype][jtype]*cosone*cosone; + } + fforce = factor_lj*force; + return factor_lj*energy; +} + diff --git a/src/USER-MISC/pair_cosine_squared.h b/src/USER-MISC/pair_cosine_squared.h new file mode 100644 index 0000000000..8c294e0d36 --- /dev/null +++ b/src/USER-MISC/pair_cosine_squared.h @@ -0,0 +1,95 @@ +/* -*- 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. +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing authors: Eugen Rozic (University College London) +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(cosine/squared, PairCosineSquared) + +#else + +#ifndef LMP_PAIR_LJ_COS_SQ_H +#define LMP_PAIR_LJ_COS_SQ_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairCosineSquared : public Pair { + public: + PairCosineSquared(class LAMMPS *); + virtual ~PairCosineSquared(); + void settings(int, char **); + void coeff(int, char **); + // void init_style(); + double init_one(int, int); + void modify_params(int, char **); + 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 *); + virtual void compute(int, int); + double single(int, int, int, int, double, double, double, double &); + // void *extract(const char *, int &); + +/* RESPA stuff not implemented... + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); +*/ + + protected: + double cut_global; + double **epsilon, **sigma, **w, **cut; + int **wcaflag; + double **lj12_e, **lj6_e, **lj12_f, **lj6_f; + + virtual void allocate(); +}; + +} // namespace LAMMPS_NS + +#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: Mixing not supported in pair_style cosine/squared + +Self-explanatory. All coefficients need to be specified explicitly. + +E: pair_modify mix not supported for pair_style cosine/squared + +Same as above, only when calling "pair_modify" command + +W: pair_modify shift/tail is meaningless for pair_style cosine/squared + +This style by definition gets to zero at cutoff distance, so there is nothing +to shift and there is no tail contribution + +*/ + From 0a02097e20354223d2f0a0c52618d125c22f314d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 25 Feb 2019 08:39:54 -0700 Subject: [PATCH 027/760] 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/760] 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/760] 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 14353c5ea52ff3780873ad93821838dcae46f387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugen=20Ro=C5=BEi=C4=87?= Date: Sun, 3 Mar 2019 01:52:43 +0100 Subject: [PATCH 030/760] Added WCA-only option (sigma == cutoff case with wca) --- src/USER-MISC/pair_cosine_squared.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/USER-MISC/pair_cosine_squared.cpp b/src/USER-MISC/pair_cosine_squared.cpp index db3d8a6aa7..0229af7a08 100644 --- a/src/USER-MISC/pair_cosine_squared.cpp +++ b/src/USER-MISC/pair_cosine_squared.cpp @@ -153,8 +153,15 @@ void PairCosineSquared::coeff(int narg, char **arg) } } - if (cut_one <= sigma_one) - error->all(FLERR, "Incorrect args for pair coefficients (cutoff <= sigma)"); + if (cut_one < sigma_one) { + error->all(FLERR, "Incorrect args for cosine/squared pair coeffs (cutoff < sigma)"); + } else if (cut_one == sigma_one) { + if (wca_one == 0) { + error->all(FLERR, "Incorrect args for cosine/squared pair coeffs (cutoff = sigma w/o wca)") + } else { + error->warning(FLERR, "Cosine/squared set to WCA only (cutoff = sigma)") + } + } int count = 0; for (int i = ilo; i <= ihi; i++) { @@ -224,10 +231,10 @@ void PairCosineSquared::modify_params(int narg, char **arg) if (strcmp(arg[iarg], "mix") == 0) { error->all(FLERR, "pair_modify mix not supported for pair_style cosine/squared"); } else if (strcmp(arg[iarg], "shift") == 0) { - error->warning(FLERR, "pair_modify shift is meaningless for pair_style cosine/squared"); + error->warning(FLERR, "pair_modify shift has no effect on pair_style cosine/squared"); offset_flag = 0; } else if (strcmp(arg[iarg], "tail") == 0) { - error->warning(FLERR, "pair_modify tail is meaningless for pair_style cosine/squared"); + error->warning(FLERR, "pair_modify tail has no effect on pair_style cosine/squared"); tail_flag = 0; } iarg++; @@ -399,8 +406,12 @@ void PairCosineSquared::compute(int eflag, int vflag) force_lj = r6inv*(lj12_f[itype][jtype]*r6inv - lj6_f[itype][jtype]); fpair = factor_lj*force_lj*r2inv; if (eflag) { - evdwl = factor_lj*r6inv * + evdwl = factor_lj*r6inv* (lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); + if (sigma[itype][jtype] == cut[itype][jtype]) { + // this is the WCA-only case (it requires this shift by definition) + evdwl += factor_lj*epsilon[itype][jtype] + } } } else { fpair = 0.0; @@ -457,6 +468,10 @@ double PairCosineSquared::single(int i, int j, int itype, int jtype, double rsq, r6inv = r2inv*r2inv*r2inv; force = r6inv*(lj12_f[itype][jtype]*r6inv - lj6_f[itype][jtype])*r2inv; energy = r6inv*(lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); + if (sigma[itype][jtype] == cut[itype][jtype]) { + // this is the WCA-only case (it requires this shift by definition) + energy += epsilon[itype][jtype] + } } else { force = 0.0; energy = -epsilon[itype][jtype]; From 05f739a5a007d3da97cf7b89b6ec83df3890b7fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugen=20Ro=C5=BEi=C4=87?= Date: Sun, 3 Mar 2019 01:55:02 +0100 Subject: [PATCH 031/760] Bugfix for WCA-only option (trivial) --- src/USER-MISC/pair_cosine_squared.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/USER-MISC/pair_cosine_squared.cpp b/src/USER-MISC/pair_cosine_squared.cpp index 0229af7a08..67cefd894b 100644 --- a/src/USER-MISC/pair_cosine_squared.cpp +++ b/src/USER-MISC/pair_cosine_squared.cpp @@ -157,9 +157,9 @@ void PairCosineSquared::coeff(int narg, char **arg) error->all(FLERR, "Incorrect args for cosine/squared pair coeffs (cutoff < sigma)"); } else if (cut_one == sigma_one) { if (wca_one == 0) { - error->all(FLERR, "Incorrect args for cosine/squared pair coeffs (cutoff = sigma w/o wca)") + error->all(FLERR, "Incorrect args for cosine/squared pair coeffs (cutoff = sigma w/o wca)"); } else { - error->warning(FLERR, "Cosine/squared set to WCA only (cutoff = sigma)") + error->warning(FLERR, "Cosine/squared set to WCA only (cutoff = sigma)"); } } @@ -410,7 +410,7 @@ void PairCosineSquared::compute(int eflag, int vflag) (lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); if (sigma[itype][jtype] == cut[itype][jtype]) { // this is the WCA-only case (it requires this shift by definition) - evdwl += factor_lj*epsilon[itype][jtype] + evdwl += factor_lj*epsilon[itype][jtype]; } } } else { @@ -470,7 +470,7 @@ double PairCosineSquared::single(int i, int j, int itype, int jtype, double rsq, energy = r6inv*(lj12_e[itype][jtype]*r6inv - lj6_e[itype][jtype]); if (sigma[itype][jtype] == cut[itype][jtype]) { // this is the WCA-only case (it requires this shift by definition) - energy += epsilon[itype][jtype] + energy += epsilon[itype][jtype]; } } else { force = 0.0; From ff7276e494082d9fca6f766469f826b378970836 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 7 Mar 2019 08:56:13 -0700 Subject: [PATCH 032/760] 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 033/760] 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 034/760] 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 71a622724042151cb2c861a69ce1209cc0de58ff Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 14 Mar 2019 15:43:50 -0600 Subject: [PATCH 035/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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/760] 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 bbec50bef1795ae2737afb9b1cea75cf1bbdb355 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 29 Mar 2019 15:06:49 -0400 Subject: [PATCH 047/760] Add HMA examples --- examples/USER/hma/README | 22 + examples/USER/hma/hma.in | 36 + examples/USER/hma/log.6Nov18.hma.g++.1 | 10159 +++++++++++++++++++++++ examples/USER/hma/log.6Nov18.hma.g++.4 | 10159 +++++++++++++++++++++++ 4 files changed, 20376 insertions(+) create mode 100644 examples/USER/hma/README create mode 100644 examples/USER/hma/hma.in create mode 100644 examples/USER/hma/log.6Nov18.hma.g++.1 create mode 100644 examples/USER/hma/log.6Nov18.hma.g++.4 diff --git a/examples/USER/hma/README b/examples/USER/hma/README new file mode 100644 index 0000000000..5af6ec15fa --- /dev/null +++ b/examples/USER/hma/README @@ -0,0 +1,22 @@ +The example input script sets up a simple FCC crystal using the Lennard-Jones +potential. The script sets up the HMA compute to calculate the energy, pressure +and heat capacity. The output columns are: + +1: timestep +2: measured temperature +3: potential energy +4: HMA potential energy +5: pressure +6: HMA pressure +7: HMA heat capacity contribution + +Averages of the potential energy (#3 and #4) agree although #4 (HMA) is more precise. + +Averages of the pressure (#5 and #6) agree once the ideal gas +contribution is included; #6 (HMA) is more precise. + +The heat capacity can be computed from colume #3 (convential) as +Cv = Var(#3)/(k T^2) + +With HMA, the heat capacity can be computed from column #4 and #7 as +Cv = #7 + Var(#4)/(k T^2) diff --git a/examples/USER/hma/hma.in b/examples/USER/hma/hma.in new file mode 100644 index 0000000000..50c6dd96fb --- /dev/null +++ b/examples/USER/hma/hma.in @@ -0,0 +1,36 @@ +# Harmonically mapped average example + +units lj +dimension 3 +boundary p p p +atom_style atomic +atom_modify map array +# ---------- Create Atoms ---------------------------- +lattice fcc 1.0 +region box block 0 4 0 4 0 4 units lattice +create_box 1 box +lattice fcc 1.0 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1 +create_atoms 1 region box +# ---------- Define Interatomic Potential --------------------- +pair_style lj/smooth/linear 3 +pair_coeff * * 1.0 1.0 +mass 1 1.0 + +atom_modify sort 0 1 +velocity all create 0.1 45678 dist gaussian + +compute u all pe + +compute p all pressure NULL pair + +compute hma all HMA settemp u p 9.579586686264458 cv + +timestep 0.005 + +fix settemp all nvt temp 1.0 1.0 0.5 +thermo_style custom elapsed temp c_u c_hma[1] c_p c_hma[2] c_hma[3] +thermo_modify format float '%22.15e' +thermo 500 +run 20000 +thermo 20 +run 200000 diff --git a/examples/USER/hma/log.6Nov18.hma.g++.1 b/examples/USER/hma/log.6Nov18.hma.g++.1 new file mode 100644 index 0000000000..fba304d783 --- /dev/null +++ b/examples/USER/hma/log.6Nov18.hma.g++.1 @@ -0,0 +1,10159 @@ +LAMMPS (31 Aug 2018) +# Harmonically mapped average example + +units lj +dimension 3 +boundary p p p +atom_style atomic +atom_modify map array +# ---------- Create Atoms ---------------------------- +lattice fcc 1.0 +Lattice spacing in x,y,z = 1.5874 1.5874 1.5874 +region box block 0 4 0 4 0 4 units lattice +create_box 1 box +Created orthogonal box = (0 0 0) to (6.3496 6.3496 6.3496) + 1 by 1 by 1 MPI processor grid +lattice fcc 1.0 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1 +Lattice spacing in x,y,z = 1.5874 1.5874 1.5874 +create_atoms 1 region box +Created 256 atoms + Time spent = 0.000558853 secs +# ---------- Define Interatomic Potential --------------------- +pair_style lj/smooth/linear 3 +pair_coeff * * 1.0 1.0 +mass 1 1.0 + +atom_modify sort 0 1 +velocity all create 0.1 45678 dist gaussian + +compute u all pe + +compute p all pressure NULL pair + +compute hma all HMA settemp u p 9.579586686264458 cv + +timestep 0.005 + +fix settemp all nvt temp 1.0 1.0 0.5 +thermo_style custom elapsed temp c_u c_hma[1] c_p c_hma[2] c_hma[3] +thermo_modify format float '%22.15e' +thermo 500 +run 20000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.3 + ghost atom cutoff = 3.3 + binsize = 1.65, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair lj/smooth/linear, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) compute HMA, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.425 | 3.425 | 3.425 Mbytes +Elapsed Temp c_u c_hma[1] c_p c_hma[2] c_hma[3] + 0 9.999999999999984e-02 -7.321210550029651e+00 -5.827069925029651e+00 -3.541123363606526e+00 6.038463322657933e+00 8.693908581888376e+03 + 500 2.386148283497847e-01 -7.031289207724356e+00 -5.841955950103862e+00 -1.905706169928171e+00 5.923629444055504e+00 8.738341241696249e+03 + 1000 1.033640532939756e+00 -5.899129588008281e+00 -5.989693420271868e+00 4.270084606318116e+00 4.750053066752854e+00 9.185409687897396e+03 + 1500 9.066678783388608e-01 -6.084949363864708e+00 -6.008077972326689e+00 3.223989663631114e+00 4.665397089651815e+00 9.241882696308397e+03 + 2000 8.653666754537616e-01 -6.040261189331211e+00 -6.030563879284796e+00 3.468617809376976e+00 4.524301264317375e+00 9.311127705836057e+03 + 2500 1.037531298248839e+00 -6.132639377068311e+00 -5.988640354751864e+00 2.977362159634933e+00 4.804226829552658e+00 9.182209655823657e+03 + 3000 1.021622746681649e+00 -5.898542445856487e+00 -6.009151612939077e+00 4.221727087636999e+00 4.586592133535478e+00 9.245164803297535e+03 + 3500 1.106519160715706e+00 -5.970546432235779e+00 -6.015249245376119e+00 3.866123627527625e+00 4.609433156737818e+00 9.263945750662717e+03 + 4000 9.930240066865930e-01 -5.912152557873307e+00 -6.025083715886064e+00 4.138611283233161e+00 4.490143097883684e+00 9.294225198089340e+03 + 4500 9.646555658575586e-01 -6.015677130022131e+00 -6.036721545560821e+00 3.568689708725919e+00 4.447849418089985e+00 9.330138922961722e+03 + 5000 9.434923165946090e-01 -6.027456548570741e+00 -6.014550053270733e+00 3.565441638398635e+00 4.639552731684967e+00 9.261770624752438e+03 + 5500 1.026864240931640e+00 -6.061505823962392e+00 -6.019404988381412e+00 3.401241932620071e+00 4.642991445609312e+00 9.276731237911577e+03 + 6000 9.983312526598234e-01 -5.946349587454857e+00 -5.983050555300542e+00 3.979901469071073e+00 4.769158832244731e+00 9.165087115091061e+03 + 6500 1.006036143286260e+00 -5.945850544079388e+00 -6.071303751273131e+00 3.946077295974201e+00 4.225705566446658e+00 9.437216768355414e+03 + 7000 9.981593359539495e-01 -5.990330698910480e+00 -6.037063892399898e+00 3.663774642188439e+00 4.395425413233882e+00 9.331181435130977e+03 + 7500 9.507280203289744e-01 -5.984730396336532e+00 -5.991644972746507e+00 3.755491186444424e+00 4.715786618671108e+00 9.191404619772287e+03 + 8000 9.048837157594684e-01 -6.079029085917312e+00 -5.964267902838972e+00 3.230203589004437e+00 4.889180061475951e+00 9.107693071292861e+03 + 8500 9.883413333994134e-01 -6.002876846326834e+00 -6.011751334719937e+00 3.642240804100097e+00 4.591282118424260e+00 9.253163154010274e+03 + 9000 1.056758147654552e+00 -6.036760797857792e+00 -6.002535828890329e+00 3.520846457975964e+00 4.717371526083967e+00 9.224856128595033e+03 + 9500 1.035347515567710e+00 -5.969647617813958e+00 -5.990309632036265e+00 3.813299824718261e+00 4.694655341617407e+00 9.187302608800977e+03 + 10000 1.023738343179159e+00 -5.877099589117778e+00 -6.048562900734738e+00 4.344908960531808e+00 4.360340091365503e+00 9.366720846528935e+03 + 10500 1.069815794809561e+00 -5.913367214053245e+00 -6.010777075880958e+00 4.147089675758311e+00 4.587747175016184e+00 9.250158711907829e+03 + 11000 9.776294387160251e-01 -5.925772082085378e+00 -5.989277934483906e+00 4.082344757077178e+00 4.717684325105934e+00 9.184160813848264e+03 + 11500 9.499730095716009e-01 -5.976861040295939e+00 -6.004120411932708e+00 3.808317456317362e+00 4.651789926004906e+00 9.229684845202884e+03 + 12000 9.782073857977380e-01 -6.066220802750934e+00 -6.031270148041170e+00 3.304122260466307e+00 4.504814328406108e+00 9.313293791801259e+03 + 12500 9.552683271823048e-01 -6.108551273751968e+00 -5.979666568626595e+00 3.136478232915417e+00 4.876554154588973e+00 9.154740057331765e+03 + 13000 8.742841944497640e-01 -6.013421944223564e+00 -6.021450865532995e+00 3.577734470946406e+00 4.531631162316097e+00 9.283015239817061e+03 + 13500 1.004344955842980e+00 -5.899309998559693e+00 -6.011273141389537e+00 4.232629792927130e+00 4.589720100557810e+00 9.251678010621874e+03 + 14000 9.987696680587935e-01 -5.929715246484374e+00 -6.008152969607664e+00 4.103967501967555e+00 4.653565957595201e+00 9.242036851405348e+03 + 14500 1.006604156366316e+00 -6.153189106822779e+00 -5.973434451881044e+00 2.841124235115949e+00 4.873303280734345e+00 9.135699098879228e+03 + 15000 9.051321416654020e-01 -6.031733280212374e+00 -5.972657495662279e+00 3.559001586802186e+00 4.898223883636946e+00 9.133297115127007e+03 + 15500 9.682672962081463e-01 -6.067136130017134e+00 -5.966412476549884e+00 3.354912150470541e+00 4.933282955614485e+00 9.114211079881910e+03 + 16000 1.015665897061745e+00 -6.059784334366720e+00 -5.980063616786515e+00 3.369338836061829e+00 4.827107533148539e+00 9.155963314807441e+03 + 16500 1.006968180883997e+00 -5.995526549328130e+00 -5.964005551783969e+00 3.802449041277696e+00 4.983447487034876e+00 9.106875404577086e+03 + 17000 1.042050305358167e+00 -5.919486263379956e+00 -6.013086895161285e+00 4.122119914992582e+00 4.584650602653237e+00 9.257241816102296e+03 + 17500 1.013492134662422e+00 -5.898786232899295e+00 -5.988108507110901e+00 4.246935217818169e+00 4.734032896717861e+00 9.180541556032720e+03 + 18000 1.045293495070465e+00 -6.013155802624135e+00 -6.000945960251793e+00 3.631220305239846e+00 4.701331109608827e+00 9.219959027336774e+03 + 18500 9.134705431704426e-01 -5.943263213107316e+00 -6.036334213909798e+00 4.028889501874485e+00 4.494461412575806e+00 9.328923769735196e+03 + 19000 1.007628738828841e+00 -6.062647924602851e+00 -5.961993496778848e+00 3.347669071096405e+00 4.925642371884200e+00 9.100752827583676e+03 + 19500 1.000237087620137e+00 -5.934759822585448e+00 -6.020766118588664e+00 4.035509558295610e+00 4.541648097213850e+00 9.280908870426259e+03 + 20000 9.615364955745067e-01 -5.859940462234714e+00 -5.981549364677676e+00 4.480555066266412e+00 4.782257929522093e+00 9.160435351560425e+03 +Loop time of 33.5763 on 1 procs for 20000 steps with 256 atoms + +Performance: 257324.049 tau/day, 595.658 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 30.404 | 30.404 | 30.404 | 0.0 | 90.55 +Neigh | 2.1959 | 2.1959 | 2.1959 | 0.0 | 6.54 +Comm | 0.50746 | 0.50746 | 0.50746 | 0.0 | 1.51 +Output | 0.16503 | 0.16503 | 0.16503 | 0.0 | 0.49 +Modify | 0.237 | 0.237 | 0.237 | 0.0 | 0.71 +Other | | 0.06721 | | | 0.20 + +Nlocal: 256 ave 256 max 256 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2116 ave 2116 max 2116 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19135 ave 19135 max 19135 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19135 +Ave neighs/atom = 74.7461 +Neighbor list builds = 1946 +Dangerous builds = 1902 +thermo 20 +run 200000 +Per MPI rank memory allocation (min/avg/max) = 3.806 | 3.806 | 3.806 Mbytes +Elapsed Temp c_u c_hma[1] c_p c_hma[2] c_hma[3] + 0 9.615364955745067e-01 -5.859940462234714e+00 -5.981549364677676e+00 4.480555066266412e+00 4.782257929522093e+00 9.160435351560425e+03 + 20 1.020600011999315e+00 -5.958432657247554e+00 -5.970407876039725e+00 3.888068459330918e+00 4.819304899867157e+00 9.126408714227488e+03 + 40 9.814651761832457e-01 -5.909251537070915e+00 -5.991660882363840e+00 4.211003703521785e+00 4.737796490044842e+00 9.191407419668969e+03 + 60 1.017977787037964e+00 -5.969196214125930e+00 -5.964268442742594e+00 3.868843363187895e+00 4.897139389041168e+00 9.107658398968413e+03 + 80 1.014099325641110e+00 -5.967528512390698e+00 -5.995071997895454e+00 3.830673462482372e+00 4.672514506373457e+00 9.201917832597679e+03 + 100 9.996875356603929e-01 -5.951588326170250e+00 -6.038052192222564e+00 3.956276886785969e+00 4.459787987673556e+00 9.334249364612955e+03 + 120 1.012056868305871e+00 -5.978870473165807e+00 -6.025850442982817e+00 3.772945936859251e+00 4.503179680043147e+00 9.296565936440789e+03 + 140 9.767869134157122e-01 -5.935832220940478e+00 -5.962749498947353e+00 4.000315968594315e+00 4.845752792843529e+00 9.103038302449055e+03 + 160 9.892523056702491e-01 -5.959324837828405e+00 -5.989985114179447e+00 3.844041265550217e+00 4.667985214080106e+00 9.186300645060488e+03 + 180 9.515078978028194e-01 -5.906073543975624e+00 -5.989405874738726e+00 4.168541295586040e+00 4.690034156707802e+00 9.184525321314130e+03 + 200 9.472636015419604e-01 -5.901747840949999e+00 -6.059197474754500e+00 4.085216465358702e+00 4.181116302801172e+00 9.399653985979861e+03 + 220 9.987356397412785e-01 -5.979817989736361e+00 -6.023113896710152e+00 3.732212025258467e+00 4.483600227395010e+00 9.288140153203587e+03 + 240 1.038054632582729e+00 -6.041406960780349e+00 -5.980798008747044e+00 3.486347567353394e+00 4.834373549133644e+00 9.158206331469573e+03 + 260 9.871325901445797e-01 -5.972400207772776e+00 -5.968492407279171e+00 3.916384667845522e+00 4.938823863009977e+00 9.120560085095371e+03 + 280 9.956901322007337e-01 -5.990610420020357e+00 -5.962602141919667e+00 3.753129205829077e+00 4.913957072950271e+00 9.102601708340648e+03 + 300 1.009984603711227e+00 -6.014944223505186e+00 -6.010674471382663e+00 3.587051537885279e+00 4.611569115314808e+00 9.249843677831494e+03 + 320 9.305773490336505e-01 -5.901476652774451e+00 -6.038002596975854e+00 4.176230329941724e+00 4.392277231015683e+00 9.334082842844762e+03 + 340 1.056836316225221e+00 -6.094477310586364e+00 -5.975940734624987e+00 3.221256895122957e+00 4.901912257769030e+00 9.143345371605477e+03 + 360 1.027370901346992e+00 -6.057905193474668e+00 -5.990495882312443e+00 3.382497773809937e+00 4.769572470060623e+00 9.187901604960492e+03 + 380 1.027053843567510e+00 -6.067567333363834e+00 -5.992992123368923e+00 3.352964818195047e+00 4.781187214462276e+00 9.195571631580398e+03 + 400 9.647458413060627e-01 -5.991119322386009e+00 -6.023522809301189e+00 3.756132264420374e+00 4.570066428130018e+00 9.289383729169578e+03 + 420 9.505543699450696e-01 -5.990054663373088e+00 -5.954997797428323e+00 3.796781777281000e+00 4.998083726568312e+00 9.079390028764674e+03 + 440 9.432138789227676e-01 -5.999500661104858e+00 -5.965348596051710e+00 3.749404409954200e+00 4.945510852504365e+00 9.110957857286596e+03 + 460 9.946517677936523e-01 -6.094506023215614e+00 -5.922729347729346e+00 3.244233981455053e+00 5.230602234451828e+00 8.981356715586544e+03 + 480 9.768158811921931e-01 -6.083372216619380e+00 -5.984015465829660e+00 3.255702454543993e+00 4.826224292986060e+00 9.168060189574073e+03 + 500 9.735587401236447e-01 -6.093252792321985e+00 -5.989449928193141e+00 3.225643293190835e+00 4.821695402459973e+00 9.184679322046662e+03 + 520 9.673953565770059e-01 -6.095243147212247e+00 -5.970259243675635e+00 3.254347301876793e+00 4.972024217180586e+00 9.125967781754774e+03 + 540 9.564831427064477e-01 -6.085367390550866e+00 -5.960762164817647e+00 3.252523065566245e+00 4.968025554322751e+00 9.096994293608030e+03 + 560 9.160259766588862e-01 -6.024333603042241e+00 -6.004486973148659e+00 3.561916257252231e+00 4.675878677357225e+00 9.230818152603229e+03 + 580 9.365262885929674e-01 -6.047282384694587e+00 -5.995736849141418e+00 3.467335056536695e+00 4.763317498328839e+00 9.203985250309977e+03 + 600 9.905085824153109e-01 -6.111632605457764e+00 -5.999026265069876e+00 3.120825308203702e+00 4.767428340485811e+00 9.214080648246067e+03 + 620 8.983062544144987e-01 -5.953208418045645e+00 -6.051189931643725e+00 3.902216336689605e+00 4.339591323019206e+00 9.374838861707278e+03 + 640 9.727178632994492e-01 -6.034356553093311e+00 -5.993377567277118e+00 3.544024007704800e+00 4.779331685738934e+00 9.196711017802761e+03 + 660 9.868479743130403e-01 -6.018937110508205e+00 -6.022262145227385e+00 3.646354583354751e+00 4.627261719449758e+00 9.285527836847134e+03 + 680 1.042099410995170e+00 -6.061895338965634e+00 -6.009701595109138e+00 3.448886151723162e+00 4.748590705902920e+00 9.246864122826662e+03 + 700 1.007797621586424e+00 -5.977163022849595e+00 -6.038029591020394e+00 3.793032147707110e+00 4.443526894199397e+00 9.334177552353092e+03 + 720 1.060607296456946e+00 -6.028231877432784e+00 -6.016093863057161e+00 3.583008768087949e+00 4.652707124984429e+00 9.266521722759040e+03 + 740 1.032187279438618e+00 -5.965848703351575e+00 -6.040028547837692e+00 3.860961083724912e+00 4.435008937391792e+00 9.340337375312332e+03 + 760 1.026294810899552e+00 -5.944279252754226e+00 -6.028390103116603e+00 3.971505547814307e+00 4.488528028921509e+00 9.304396431357543e+03 + 780 1.004838448427803e+00 -5.903901342566534e+00 -6.054572355333297e+00 4.234631152466997e+00 4.369454880896369e+00 9.385298252566547e+03 + 800 1.072022975471984e+00 -6.004117677002591e+00 -6.023784574182003e+00 3.645243430038966e+00 4.532313062992278e+00 9.290217112242535e+03 + 820 1.004076334131657e+00 -5.908459509214397e+00 -5.998944780536973e+00 4.207017478915473e+00 4.687437048430760e+00 9.213783936955662e+03 + 840 1.053090926477705e+00 -5.987174315507324e+00 -6.000355723291464e+00 3.703641389302587e+00 4.627951705989791e+00 9.218103864493949e+03 + 860 1.059694538978974e+00 -6.006624645080397e+00 -5.989214936393363e+00 3.625012862867183e+00 4.724982104291838e+00 9.183981890165787e+03 + 880 1.038407762919759e+00 -5.987136018377438e+00 -6.025552832897892e+00 3.794956680037541e+00 4.574361386078261e+00 9.295652878164343e+03 + 900 1.043007690526313e+00 -6.013465419734895e+00 -6.027614020233820e+00 3.606232258595921e+00 4.524988805042247e+00 9.302022765689335e+03 + 920 9.896570453270673e-01 -5.959465041355689e+00 -6.022233802324223e+00 3.876398191027682e+00 4.515970252111998e+00 9.285436808518602e+03 + 940 9.948607795251544e-01 -5.993672588532680e+00 -5.984650909476759e+00 3.701359263747514e+00 4.753163140986936e+00 9.169980614085634e+03 + 960 1.035827229385980e+00 -6.081034553559161e+00 -5.964961535588436e+00 3.249267281501619e+00 4.915776512931000e+00 9.109798757436427e+03 + 980 9.645096834387771e-01 -6.002594103325545e+00 -5.970445825678690e+00 3.712446235988870e+00 4.897046621167003e+00 9.126545101595195e+03 + 1000 1.009701922889595e+00 -6.096480717012984e+00 -5.972865879407933e+00 3.150534106838672e+00 4.860349633701173e+00 9.133926064502963e+03 + 1020 9.503812786142370e-01 -6.034008329652367e+00 -5.988601219595624e+00 3.507987022353116e+00 4.768721675026509e+00 9.182098355151335e+03 + 1040 9.746274789930985e-01 -6.096484341462583e+00 -5.950936231351280e+00 3.210104652802036e+00 5.045864424558385e+00 9.067059029444334e+03 + 1060 9.407431654685644e-01 -6.068377501281406e+00 -5.992631788204981e+00 3.352843024974694e+00 4.787786631070743e+00 9.194434219962888e+03 + 1080 9.091514504280382e-01 -6.043112056004267e+00 -5.973207871722924e+00 3.505526407055114e+00 4.906927050836144e+00 9.134970839495374e+03 + 1100 9.823903220122076e-01 -6.174514117857894e+00 -5.976777098839887e+00 2.740608171405174e+00 4.876044734311370e+00 9.145905655707946e+03 + 1120 8.981855268428002e-01 -6.082432685610340e+00 -6.020568037873874e+00 3.214706017518917e+00 4.569942398345004e+00 9.280315376370809e+03 + 1140 8.612422145608321e-01 -6.067113629744508e+00 -6.009413636339771e+00 3.288232584945134e+00 4.619554876120258e+00 9.245993039824376e+03 + 1160 9.045004881983270e-01 -6.173092798124903e+00 -6.002290480654269e+00 2.775781332075512e+00 4.756554670565095e+00 9.224085597860292e+03 + 1180 8.261610909928941e-01 -6.091231310673821e+00 -5.987711242384705e+00 3.247882000724438e+00 4.842310252519333e+00 9.179374736097656e+03 + 1200 9.282271319004017e-01 -6.262203325647667e+00 -5.975959661581035e+00 2.263150983099611e+00 4.906806398234071e+00 9.143433281056405e+03 + 1220 8.679135131073991e-01 -6.179410432364137e+00 -5.949695464638571e+00 2.752682811237898e+00 5.071741704194469e+00 9.063282970693110e+03 + 1240 8.583254347975858e-01 -6.158990899882398e+00 -5.940456743778165e+00 2.869393831047280e+00 5.124250773449146e+00 9.035165857395938e+03 + 1260 8.392364297846614e-01 -6.108064463514651e+00 -5.991278083147219e+00 3.109662104369866e+00 4.780267573073615e+00 9.190311837705440e+03 + 1280 8.631940855471624e-01 -6.106811334400191e+00 -5.987869258418657e+00 3.096836280393307e+00 4.779820086906047e+00 9.179852510951436e+03 + 1300 9.465910253599886e-01 -6.185941712773322e+00 -5.966243376948754e+00 2.718706219490234e+00 4.980248062002492e+00 9.113715590844284e+03 + 1320 8.939698422180601e-01 -6.062554909492443e+00 -6.022387835720140e+00 3.339322187895670e+00 4.569967741330808e+00 9.285909078300389e+03 + 1340 9.663415310096390e-01 -6.131157347769264e+00 -5.999184745874027e+00 2.998219610823661e+00 4.756026713600249e+00 9.214559738040494e+03 + 1360 9.326348979354570e-01 -6.051960664761741e+00 -6.011566541804979e+00 3.365357240996571e+00 4.597306545984625e+00 9.252606709869695e+03 + 1380 9.838831860561270e-01 -6.102340308996237e+00 -5.979875506911626e+00 3.181681026634277e+00 4.884892871570987e+00 9.155389025363127e+03 + 1400 9.561080585035765e-01 -6.037376222780178e+00 -5.978052697966062e+00 3.543719619114497e+00 4.884364478882951e+00 9.149781487609316e+03 + 1420 9.616152894373232e-01 -6.020403307929190e+00 -5.978725706122892e+00 3.613292863917748e+00 4.852612103077540e+00 9.151829441811955e+03 + 1440 9.231289155307136e-01 -5.934284213675148e+00 -6.028403994703597e+00 4.048890017676614e+00 4.508439670022217e+00 9.304435171640742e+03 + 1460 1.061667021810408e+00 -6.111519345048196e+00 -5.982690110417253e+00 3.113188388223132e+00 4.852945789733632e+00 9.163980881948735e+03 + 1480 1.059560219796085e+00 -6.084363329559978e+00 -5.987728413345155e+00 3.245236537840204e+00 4.800129180950673e+00 9.179438219977714e+03 + 1500 1.012750280838527e+00 -5.994531923159054e+00 -6.015705850948073e+00 3.690030187222798e+00 4.568446217203522e+00 9.265347935357384e+03 + 1520 9.790047711106866e-01 -5.925333053702159e+00 -6.031653821996447e+00 4.150180624103042e+00 4.539670319471520e+00 9.314481840846052e+03 + 1540 1.025220067885404e+00 -5.977965865465314e+00 -6.045639152412221e+00 3.784324604882108e+00 4.395734118825657e+00 9.357694194805334e+03 + 1560 1.053346800561144e+00 -6.007394640953897e+00 -6.035779256370128e+00 3.638965429074724e+00 4.475976574849684e+00 9.327229361837670e+03 + 1580 1.003756286747422e+00 -5.925712214111871e+00 -6.049388789297026e+00 4.111927361262683e+00 4.401757327661366e+00 9.369295883063558e+03 + 1600 1.040645216151974e+00 -5.976765290845121e+00 -6.024478595502995e+00 3.838056328051300e+00 4.564079149095758e+00 9.292350889159208e+03 + 1620 1.030742510336460e+00 -5.963069451146461e+00 -6.055529072612251e+00 3.826054093709232e+00 4.295136639172486e+00 9.388280332857752e+03 + 1640 1.018291214069761e+00 -5.950336595093376e+00 -6.006532544475585e+00 3.985599254086584e+00 4.662913416438871e+00 9.237118285165081e+03 + 1660 1.009859899650586e+00 -5.949038278212260e+00 -6.024847881588862e+00 3.882239073593950e+00 4.446928599507297e+00 9.293477948668717e+03 + 1680 9.780695418336188e-01 -5.917263721192500e+00 -5.984150165550203e+00 4.205923125606110e+00 4.821850811460366e+00 9.168437667864344e+03 + 1700 9.844247949153297e-01 -5.944284099104667e+00 -6.001674975408905e+00 3.981291226819832e+00 4.651743933871494e+00 9.222151852808516e+03 + 1720 1.035204086152618e+00 -6.041765106493767e+00 -5.948400346256865e+00 3.508107768540726e+00 5.044222669970972e+00 9.059309939352459e+03 + 1740 9.735465874127380e-01 -5.973907150827966e+00 -6.006128340233649e+00 3.849236040922400e+00 4.664216985142023e+00 9.235831751128731e+03 + 1760 1.021647547350805e+00 -6.071789444504817e+00 -5.989492696206266e+00 3.322520166070766e+00 4.795080830181685e+00 9.184829491874758e+03 + 1780 9.829912709311043e-01 -6.046511031752197e+00 -6.038580258282047e+00 3.444541353488311e+00 4.490081082037142e+00 9.335858705823826e+03 + 1800 9.067041211651782e-01 -5.967479188311842e+00 -5.998576782562291e+00 3.876458068413311e+00 4.697890869890072e+00 9.212664495094426e+03 + 1820 9.303027555203129e-01 -6.029911981483854e+00 -5.930260731696491e+00 3.557669590060521e+00 5.129882487320623e+00 9.004180678770081e+03 + 1840 9.484660292210128e-01 -6.076645362889215e+00 -5.951701991424679e+00 3.286465790439809e+00 5.003909964313417e+00 9.069351674519061e+03 + 1860 9.637328962958422e-01 -6.110724043144727e+00 -5.953757959079353e+00 3.119542288695860e+00 5.020865833822242e+00 9.075642905854969e+03 + 1880 8.992123982400598e-01 -6.018902590362062e+00 -5.991568529985308e+00 3.591046499455746e+00 4.748002904071240e+00 9.191203718047062e+03 + 1900 9.136576225450348e-01 -6.037676417633506e+00 -5.999434369818164e+00 3.511791468349679e+00 4.731383224843148e+00 9.215333290945684e+03 + 1920 9.375535911212801e-01 -6.062472661411043e+00 -6.047567016027818e+00 3.282000146257340e+00 4.367590668688988e+00 9.363663142520585e+03 + 1940 9.350410412094516e-01 -6.039333226980075e+00 -6.015832450194493e+00 3.452686812962875e+00 4.587631909999144e+00 9.265750484394532e+03 + 1960 9.309914320231641e-01 -6.003514157522395e+00 -6.027302326423196e+00 3.700951024414730e+00 4.564355677379094e+00 9.301039255333508e+03 + 1980 9.786398925214956e-01 -6.028676277651872e+00 -5.957244057744021e+00 3.550445026623316e+00 4.960619887434501e+00 9.086252584614320e+03 + 2000 1.017743470513826e+00 -6.025728074018636e+00 -5.974009382759989e+00 3.526447486996597e+00 4.823424215645353e+00 9.137407848709952e+03 + 2020 9.921831384791643e-01 -5.930579681929451e+00 -6.026583243819555e+00 4.095294307714560e+00 4.544026998838393e+00 9.298780957635769e+03 + 2040 1.034756316252099e+00 -5.953264022547445e+00 -6.024434590300764e+00 3.912884935097801e+00 4.504212521448473e+00 9.292197153295034e+03 + 2060 1.041898878799784e+00 -5.943857455222254e+00 -5.973584742468068e+00 4.009494240136615e+00 4.838795556488317e+00 9.136119215063945e+03 + 2080 1.051587850596250e+00 -5.949092659230135e+00 -6.022106408040662e+00 3.979419693954676e+00 4.560163449443515e+00 9.285027914872551e+03 + 2100 1.020323879461642e+00 -5.900714442462338e+00 -5.972696865701201e+00 4.295087615259903e+00 4.881753401778361e+00 9.133418294755478e+03 + 2120 1.044581017076930e+00 -5.937354763172756e+00 -6.039917373455466e+00 3.978618766764721e+00 4.389688387008756e+00 9.339992016263102e+03 + 2140 1.072055660059346e+00 -5.984065213816709e+00 -6.034809567899721e+00 3.798878619746003e+00 4.507496685937936e+00 9.324209110359001e+03 + 2160 1.031227062578640e+00 -5.938162908297856e+00 -6.008447238754909e+00 4.021517220865634e+00 4.617933718916242e+00 9.243000022398610e+03 + 2180 1.034755143010538e+00 -5.961335305794837e+00 -6.000325005504487e+00 3.915225660617375e+00 4.691340771248034e+00 9.218057646159879e+03 + 2200 1.039001354083559e+00 -5.991444062035432e+00 -5.983379262141549e+00 3.733477616826287e+00 4.779786945840719e+00 9.166106402515536e+03 + 2220 9.498847331017423e-01 -5.885838586722715e+00 -5.984317424434447e+00 4.321695272838102e+00 4.756214547146445e+00 9.168955183721220e+03 + 2240 9.501942141050930e-01 -5.910020863783831e+00 -6.001311713438006e+00 4.156209699406988e+00 4.632003513479384e+00 9.221083876521356e+03 + 2260 1.026549044077855e+00 -6.043911692494221e+00 -5.985909374576475e+00 3.420934742591152e+00 4.753993027904539e+00 9.173858090843971e+03 + 2280 9.873378131784011e-01 -6.005570184901982e+00 -5.966671314414222e+00 3.687934278815697e+00 4.911297612737165e+00 9.115019236940161e+03 + 2300 9.660380825961528e-01 -5.991868163662822e+00 -5.979463994929207e+00 3.732624032155659e+00 4.803850688562990e+00 9.154115146407163e+03 + 2320 9.851804439154875e-01 -6.036748149167285e+00 -6.010997252042185e+00 3.492100692452209e+00 4.639966328682985e+00 9.250817241884635e+03 + 2340 9.482326737821434e-01 -5.997867538123590e+00 -5.986639006873171e+00 3.689368633512774e+00 4.753844597562276e+00 9.176097066986249e+03 + 2360 9.953533969036702e-01 -6.077373108878684e+00 -5.962167911492571e+00 3.280619420808249e+00 4.942145492145984e+00 9.101280340212683e+03 + 2380 9.555158600898254e-01 -6.023581740385814e+00 -6.025046558822569e+00 3.547031133274983e+00 4.538619919131214e+00 9.294088012067339e+03 + 2400 1.010563190649329e+00 -6.108023021694780e+00 -5.991314693986003e+00 3.084174459512837e+00 4.754331737771976e+00 9.190415795063142e+03 + 2420 9.303996037417740e-01 -5.991673144743388e+00 -5.983113311373838e+00 3.810089780922815e+00 4.859241668760707e+00 9.165260814618883e+03 + 2440 9.761594421211988e-01 -6.057620798964248e+00 -5.983689112842983e+00 3.367003247267722e+00 4.791530429867476e+00 9.167047424311824e+03 + 2460 9.762053469145309e-01 -6.045998557885177e+00 -6.012621894164110e+00 3.485410621104526e+00 4.677064589212911e+00 9.255827985432243e+03 + 2480 9.794895189369441e-01 -6.029820602379265e+00 -6.013111971902220e+00 3.568292288370280e+00 4.664235830221678e+00 9.257340610576595e+03 + 2500 9.901602346720159e-01 -6.013416932535310e+00 -5.998316337917947e+00 3.636029655824388e+00 4.722739606926750e+00 9.211864986791772e+03 + 2520 1.006256892986497e+00 -5.994119228495149e+00 -5.995810750660208e+00 3.701285240106636e+00 4.691572258072658e+00 9.204202979425774e+03 + 2540 1.068647567454971e+00 -6.037162225076347e+00 -5.995673923946281e+00 3.526770949061185e+00 4.765003194443874e+00 9.203773043658322e+03 + 2560 9.345765840500163e-01 -5.793252466848898e+00 -6.072559642621477e+00 4.807504092675140e+00 4.203679066743230e+00 9.441133173025577e+03 + 2580 1.060362174286126e+00 -5.945450448550415e+00 -6.032953948211018e+00 3.968270453044044e+00 4.465811816870048e+00 9.318475555371035e+03 + 2600 1.080011758746663e+00 -5.949340082433418e+00 -6.069588002464240e+00 3.908557299120135e+00 4.218075133997671e+00 9.431912568369982e+03 + 2620 1.113381394285127e+00 -5.988674325747065e+00 -6.035308977841042e+00 3.690519788330698e+00 4.422736399317997e+00 9.325775624233764e+03 + 2640 1.023657166333712e+00 -5.857016009885120e+00 -6.048180465356296e+00 4.458707362785388e+00 4.361011476866018e+00 9.365525943049823e+03 + 2660 1.109488090531586e+00 -5.992004849303601e+00 -5.994857830601346e+00 3.790170239168447e+00 4.773787979059367e+00 9.201251093039617e+03 + 2680 1.032737652275809e+00 -5.893406738708014e+00 -6.008598442737576e+00 4.289615871101264e+00 4.628167280704933e+00 9.243453162978010e+03 + 2700 1.051629171914912e+00 -5.942509257626184e+00 -5.993657008849417e+00 4.038403003349119e+00 4.744704700736395e+00 9.197587475794442e+03 + 2720 1.014722340874505e+00 -5.914614315536612e+00 -6.025274163896979e+00 4.224254414766998e+00 4.588828440925579e+00 9.294780369992295e+03 + 2740 1.039197040881143e+00 -5.981558520348850e+00 -5.997250644504337e+00 3.829334480190060e+00 4.739227874940885e+00 9.208629298257638e+03 + 2760 1.070878298826088e+00 -6.057517124960611e+00 -6.008307276540997e+00 3.382791461497443e+00 4.665362026322305e+00 9.242577588477710e+03 + 2780 9.830312757942556e-01 -5.959283988455138e+00 -6.039760881587464e+00 3.921878249313939e+00 4.459767475189163e+00 9.339520863067426e+03 + 2800 9.801307540648010e-01 -5.981790130528015e+00 -6.034934304254086e+00 3.870926889113588e+00 4.565764819544185e+00 9.324605886665495e+03 + 2820 9.462318991246462e-01 -5.953966927629361e+00 -6.041830260968773e+00 3.959424236510390e+00 4.454899379668600e+00 9.345901684382037e+03 + 2840 9.535508840369477e-01 -5.980222082028534e+00 -6.012182687144961e+00 3.876535132139107e+00 4.693012391672928e+00 9.254461951048976e+03 + 2860 9.627648079880218e-01 -6.002855054410181e+00 -6.018572722364612e+00 3.686783491084446e+00 4.596530209388844e+00 9.274130511816469e+03 + 2880 1.005801764967796e+00 -6.071303014685317e+00 -5.990168863171433e+00 3.418057899300059e+00 4.883942752762154e+00 9.186884425309876e+03 + 2900 9.849232294897350e-01 -6.042206903587623e+00 -6.008418887185501e+00 3.453067575227690e+00 4.647083594087311e+00 9.242919697632258e+03 + 2920 9.411968773959798e-01 -5.977984921752276e+00 -6.021323552518306e+00 3.809540561171684e+00 4.560683436681699e+00 9.282625017763461e+03 + 2940 1.000686166239594e+00 -6.063314862394346e+00 -5.976942496972629e+00 3.353806447158134e+00 4.849769935489987e+00 9.146411942290853e+03 + 2960 9.392082554761829e-01 -5.967112888359170e+00 -5.989627792429555e+00 3.840019384867245e+00 4.710735321524949e+00 9.185226185427615e+03 + 2980 9.447304062331515e-01 -5.967848312745796e+00 -5.984103680657841e+00 3.871254031001020e+00 4.777913192940002e+00 9.168298809431211e+03 + 3000 9.606414785527527e-01 -5.981194174221447e+00 -6.002773462745154e+00 3.784288609205670e+00 4.660376995118439e+00 9.225552721251815e+03 + 3020 9.880595790204920e-01 -6.009494716157877e+00 -5.992218641087182e+00 3.654581812368313e+00 4.753783708888221e+00 9.193173636030911e+03 + 3040 1.011180929173924e+00 -6.029525900679877e+00 -5.989745576332014e+00 3.587552084372791e+00 4.815976862763517e+00 9.185596499324651e+03 + 3060 1.011911136187293e+00 -6.016382547528823e+00 -6.012811783938136e+00 3.638614503821353e+00 4.659118380932961e+00 9.256420456776001e+03 + 3080 1.020026774447945e+00 -6.016400564864076e+00 -6.017117826887823e+00 3.558561438341541e+00 4.554442808805248e+00 9.269676226489781e+03 + 3100 1.007971832853203e+00 -5.987149615203221e+00 -6.005785857028267e+00 3.751523937660454e+00 4.644511753151946e+00 9.234815644439706e+03 + 3120 1.011341027154857e+00 -5.981640734874794e+00 -6.027486903465731e+00 3.730749043776597e+00 4.467493249055780e+00 9.301614192902829e+03 + 3140 1.007076862660630e+00 -5.965252156060949e+00 -6.007617148696273e+00 3.882499579681222e+00 4.639233236007769e+00 9.240442889560381e+03 + 3160 1.073632589572695e+00 -6.054031491915745e+00 -5.988175570421679e+00 3.401162761039406e+00 4.779317653429248e+00 9.180779960820466e+03 + 3180 1.030166609526896e+00 -5.978856982193729e+00 -5.985084017109939e+00 3.840710935495786e+00 4.804954337376373e+00 9.171308501639287e+03 + 3200 1.020630683248332e+00 -5.950649446427690e+00 -6.017463492031761e+00 3.957398786018643e+00 4.573742196719922e+00 9.270722729195708e+03 + 3220 9.968101488815060e-01 -5.896947045257455e+00 -6.010164052361333e+00 4.229104054184100e+00 4.578994479118410e+00 9.248266408994359e+03 + 3240 1.042428406148051e+00 -5.940420358450944e+00 -5.975439308105395e+00 4.005601418669922e+00 4.804517190589120e+00 9.141791687066110e+03 + 3260 1.080066598827196e+00 -5.964930572463833e+00 -5.979451273974031e+00 3.903313057861419e+00 4.819932942718562e+00 9.154080881470041e+03 + 3280 1.072746146537266e+00 -5.920567906594299e+00 -6.040384428456953e+00 4.044621794660398e+00 4.356616784578203e+00 9.341431434208342e+03 + 3300 1.085441613190360e+00 -5.913497649224604e+00 -6.040784403647850e+00 4.101471058690484e+00 4.370570817230624e+00 9.342451133263708e+03 + 3320 1.076712344604172e+00 -5.882368602096050e+00 -5.976627399621725e+00 4.320070893900955e+00 4.778822292006757e+00 9.145409093911379e+03 + 3340 1.093623640378408e+00 -5.898439667333133e+00 -5.961261734807988e+00 4.219166263362994e+00 4.858432230238855e+00 9.098490429666879e+03 + 3360 1.072944271299633e+00 -5.868168079823051e+00 -5.983598523840099e+00 4.349648711679153e+00 4.686829239329781e+00 9.166723610562371e+03 + 3380 1.117417028058658e+00 -5.943277023718887e+00 -5.971003119454888e+00 4.000763826108606e+00 4.841556293793033e+00 9.128192779090085e+03 + 3400 1.037683867890879e+00 -5.843876471677682e+00 -5.989427558972986e+00 4.476469135700259e+00 4.640692268492654e+00 9.184581782035362e+03 + 3420 1.021658763572165e+00 -5.847874001331785e+00 -5.995160526740977e+00 4.484251693906921e+00 4.638509672491197e+00 9.202201969602043e+03 + 3440 1.065258345480367e+00 -5.948706834196946e+00 -6.021101835130653e+00 3.944764126475560e+00 4.529060828024026e+00 9.281956137858011e+03 + 3460 1.031966239432393e+00 -5.942066839140922e+00 -6.009466249572204e+00 3.970214508221928e+00 4.583196663500449e+00 9.246135658337891e+03 + 3480 1.054415802962347e+00 -6.017189121400237e+00 -6.039561024296128e+00 3.495311757239141e+00 4.366848828770149e+00 9.338901754216091e+03 + 3500 1.006713120035035e+00 -5.987115225273905e+00 -6.005650854316645e+00 3.790130531512980e+00 4.683696081170244e+00 9.234350064588838e+03 + 3520 9.694265651904677e-01 -5.963306726200607e+00 -5.966162793792082e+00 3.910760246909794e+00 4.894360264824506e+00 9.113468184892854e+03 + 3540 9.523886622156332e-01 -5.958295393871244e+00 -5.951014673946521e+00 3.993914615308931e+00 5.035721635804457e+00 9.067254570836672e+03 + 3560 9.733982647195688e-01 -6.000797567247605e+00 -6.006092547335903e+00 3.677027906655749e+00 4.646623311593222e+00 9.235746258530027e+03 + 3580 9.738608440074300e-01 -6.009589702599920e+00 -5.993259212848380e+00 3.660396982962986e+00 4.754169182251450e+00 9.196369398150540e+03 + 3600 1.008182083410457e+00 -6.067282747934456e+00 -6.008069012592548e+00 3.324726438250809e+00 4.664740869879974e+00 9.241840845024502e+03 + 3620 1.002095068944762e+00 -6.063250784132899e+00 -5.992218881697625e+00 3.310853870743812e+00 4.718730046678532e+00 9.193189633138662e+03 + 3640 9.629683766275819e-01 -6.007373423042736e+00 -5.974138378824420e+00 3.635931648761555e+00 4.826772415769597e+00 9.137832470439938e+03 + 3660 1.007030923033976e+00 -6.072116412557006e+00 -5.975314120209388e+00 3.288734236995075e+00 4.844587979761419e+00 9.141437924786280e+03 + 3680 9.453196857004574e-01 -5.975910717319501e+00 -6.019637357777501e+00 3.779414660700684e+00 4.528329524515105e+00 9.277403897910148e+03 + 3700 9.996765988317244e-01 -6.049604721879160e+00 -5.971170765744680e+00 3.437491838825863e+00 4.887871752565535e+00 9.128743783552945e+03 + 3720 9.465109335752906e-01 -5.960165110712005e+00 -5.993689640179413e+00 3.930219404439828e+00 4.737716368333798e+00 9.197667412311866e+03 + 3740 9.998547044993243e-01 -6.021687768071473e+00 -6.048088367359931e+00 3.526643281450887e+00 4.375046954857030e+00 9.365263468853485e+03 + 3760 1.018426162079519e+00 -6.030903549796617e+00 -5.993436468656391e+00 3.526410892325625e+00 4.741552670244868e+00 9.196891645020381e+03 + 3780 9.919301478058797e-01 -5.968266890542978e+00 -6.022663169456979e+00 3.831763946607261e+00 4.519412095286113e+00 9.286749062207580e+03 + 3800 1.032802765587220e+00 -5.998284844862726e+00 -6.046348762501665e+00 3.615032409709428e+00 4.339041956759424e+00 9.359889654518405e+03 + 3820 1.009259296190237e+00 -5.930434238432996e+00 -6.010049375019904e+00 4.071052486198413e+00 4.613890051513823e+00 9.247921460503227e+03 + 3840 1.126585385853035e+00 -6.070637489612041e+00 -5.931108859694871e+00 3.331552083578798e+00 5.132747068548887e+00 9.006756904059446e+03 + 3860 9.858165235427868e-01 -5.826058291580198e+00 -6.029707170790079e+00 4.595379584086751e+00 4.425996205101403e+00 9.308414534071862e+03 + 3880 9.918746602449459e-01 -5.802990672416779e+00 -5.986998010402254e+00 4.773592382640776e+00 4.716993772884655e+00 9.177142765501709e+03 + 3900 1.071007285801113e+00 -5.890931339508187e+00 -5.970525541733624e+00 4.325594881923820e+00 4.868552655582372e+00 9.126749130409693e+03 + 3920 1.089491711223534e+00 -5.895780558788224e+00 -5.993777207016893e+00 4.223861574889584e+00 4.661149655828264e+00 9.197953925282025e+03 + 3940 1.048658572352398e+00 -5.818089211285449e+00 -6.028886286520174e+00 4.653984790997178e+00 4.443555364257424e+00 9.305927237018384e+03 + 3960 1.101185247847629e+00 -5.892941942773515e+00 -6.024968922271480e+00 4.258372831016914e+00 4.500253483630549e+00 9.293875687543781e+03 + 3980 1.120313400269944e+00 -5.932846968646495e+00 -6.019595212961144e+00 4.023945209774448e+00 4.525823366672314e+00 9.277298240403734e+03 + 4000 1.091829127582950e+00 -5.918734396430521e+00 -5.985734198674102e+00 4.119797275426038e+00 4.735074042757508e+00 9.173313233656256e+03 + 4020 9.721963004624756e-01 -5.783194037174813e+00 -6.021902596844681e+00 4.757020743483064e+00 4.386319253828455e+00 9.284403214650089e+03 + 4040 1.063373464920160e+00 -5.974536434176336e+00 -6.045427591412041e+00 3.769015665640560e+00 4.361947670422014e+00 9.357007046233530e+03 + 4060 1.015293346186780e+00 -5.966548746963285e+00 -6.006285398183890e+00 3.914527435356471e+00 4.686353434820857e+00 9.236338961582338e+03 + 4080 9.993378842786982e-01 -5.991883149289349e+00 -6.004487612620793e+00 3.703123216914080e+00 4.630746437930532e+00 9.230824719355480e+03 + 4100 9.561151538000644e-01 -5.954860014194095e+00 -6.012220272542246e+00 3.885895556850453e+00 4.556524076944077e+00 9.254585714971439e+03 + 4120 9.408987236223856e-01 -5.946937895081044e+00 -6.003477253968585e+00 4.019013748889695e+00 4.694356000719924e+00 9.227706769291255e+03 + 4140 1.004251879573544e+00 -6.047439193456807e+00 -5.999469157020783e+00 3.364161134212510e+00 4.639612506767302e+00 9.215409979388383e+03 + 4160 9.586432653986863e-01 -5.982433031350787e+00 -6.021278538486745e+00 3.859902493038883e+00 4.636845579741412e+00 9.282466826975768e+03 + 4180 1.019596530380820e+00 -6.075200624225912e+00 -5.972003418600652e+00 3.327443469990194e+00 4.920017794406395e+00 9.131319024056338e+03 + 4200 9.086914438199921e-01 -5.912702595721634e+00 -5.999284005381182e+00 4.175701362648018e+00 4.678537509953052e+00 9.214805411939538e+03 + 4220 9.715150786532474e-01 -6.003188042160390e+00 -5.967304306169579e+00 3.636773451115851e+00 4.842823416165289e+00 9.116939352035424e+03 + 4240 1.005305718437036e+00 -6.046592714837915e+00 -5.941203590097428e+00 3.428614800244865e+00 5.033775463419084e+00 9.037429637655890e+03 + 4260 9.257906715417170e-01 -5.915993439442449e+00 -5.988992329070927e+00 4.082651425180469e+00 4.663480504392084e+00 9.183264967211482e+03 + 4280 9.999548309041966e-01 -6.009850818174981e+00 -5.955710736827855e+00 3.620834930803031e+00 4.931715656048740e+00 9.081585542575438e+03 + 4300 1.021830487647197e+00 -6.020985563180852e+00 -6.013836887115412e+00 3.552511010400049e+00 4.593559814621850e+00 9.259590321663001e+03 + 4320 1.039766526261748e+00 -6.028362336867639e+00 -6.003849233477077e+00 3.588097103167032e+00 4.728855136226136e+00 9.228893642098019e+03 + 4340 1.059382561732061e+00 -6.041040928346275e+00 -6.000815225312564e+00 3.448783252554340e+00 4.679765464281340e+00 9.219566237384897e+03 + 4360 9.601960985591919e-01 -5.879358097120233e+00 -6.027806230706406e+00 4.356576068614383e+00 4.504163913288152e+00 9.302583550401443e+03 + 4380 1.058249279172794e+00 -6.011082182682083e+00 -5.960575171682509e+00 3.632558932859346e+00 4.922578005953594e+00 9.096396761605236e+03 + 4400 1.002980986478341e+00 -5.914417481258615e+00 -5.984633972644812e+00 4.191620143915703e+00 4.788426184409230e+00 9.169933636563908e+03 + 4420 1.082068816461707e+00 -6.017436089080619e+00 -5.983053343078428e+00 3.586038757578460e+00 4.783469805835790e+00 9.165116976022857e+03 + 4440 1.061286486232710e+00 -5.974874890749169e+00 -5.996978928286077e+00 3.859710563955086e+00 4.732785759829409e+00 9.207781248806115e+03 + 4460 1.038420575605546e+00 -5.934923792289783e+00 -6.025381434770757e+00 4.053721441706790e+00 4.534299660306106e+00 9.295149503596334e+03 + 4480 1.086746055791167e+00 -6.005858125526991e+00 -6.019440893004091e+00 3.658459955594631e+00 4.580465602814648e+00 9.276847117278245e+03 + 4500 1.004168006580201e+00 -5.891357210668867e+00 -6.049336854842889e+00 4.245339504612212e+00 4.338195940494049e+00 9.369129634674207e+03 + 4520 1.074376045690063e+00 -6.012947987904671e+00 -5.983343029405423e+00 3.589121564058499e+00 4.759117817113709e+00 9.165986080710611e+03 + 4540 1.065658866546122e+00 -6.026136894492219e+00 -5.952077384549630e+00 3.585952781609784e+00 5.011213948372253e+00 9.070509265396831e+03 + 4560 1.014347533226436e+00 -5.983900639677593e+00 -5.973688214772762e+00 3.746795102680053e+00 4.805436426851234e+00 9.136464519241572e+03 + 4580 1.080895178222875e+00 -6.123232706459804e+00 -5.929630186162070e+00 3.120877493665051e+00 5.232573125107832e+00 9.002296828090088e+03 + 4600 1.023694977760492e+00 -6.082546721213627e+00 -5.982998842510562e+00 3.283069243988292e+00 4.854688568485736e+00 9.164920622509109e+03 + 4620 1.015242909288608e+00 -6.108709820259902e+00 -5.941959479201487e+00 3.116497674912809e+00 5.074003937802107e+00 9.039719718175407e+03 + 4640 9.437963938727322e-01 -6.029091791227970e+00 -5.975115874897527e+00 3.564927016150610e+00 4.874865080466072e+00 9.140801596889612e+03 + 4660 1.032349219695345e+00 -6.180017520349998e+00 -5.940668658696694e+00 2.725226651747389e+00 5.099604854477294e+00 9.035833106021235e+03 + 4680 8.751490224849779e-01 -5.956774824522371e+00 -6.014287728499493e+00 3.945624925148114e+00 4.615376930418346e+00 9.260944839503827e+03 + 4700 9.620283301213486e-01 -6.086762233934897e+00 -5.977006653639287e+00 3.266065562869586e+00 4.896299089548140e+00 9.146596388119653e+03 + 4720 9.288832846089641e-01 -6.033565851287475e+00 -6.002306350916044e+00 3.515603056148436e+00 4.695099944673240e+00 9.224126821863805e+03 + 4740 9.171479947665157e-01 -6.007981814752871e+00 -6.003910283841148e+00 3.643230966849780e+00 4.666610327412265e+00 9.229052171876554e+03 + 4760 9.853995364836978e-01 -6.094701962473504e+00 -5.974474254587436e+00 3.213301259810074e+00 4.903667363669545e+00 9.138862427644885e+03 + 4780 9.490384698113096e-01 -6.022070329756303e+00 -6.021428214332465e+00 3.613064220015441e+00 4.616751346146162e+00 9.282950342019618e+03 + 4800 9.856489968670992e-01 -6.056563941714792e+00 -6.018039145783735e+00 3.373470257286558e+00 4.594685597215588e+00 9.272528922026149e+03 + 4820 9.897056684697090e-01 -6.041354017993713e+00 -5.981655802229364e+00 3.518919709495153e+00 4.861716102683078e+00 9.160827436546373e+03 + 4840 9.512275933944374e-01 -5.962423114536703e+00 -6.021382904494739e+00 3.941539698000876e+00 4.602983460063827e+00 9.282779117091648e+03 + 4860 9.974556488948330e-01 -6.008304304574613e+00 -6.002909434507348e+00 3.646830439109826e+00 4.677808617889510e+00 9.225966721877481e+03 + 4880 1.071064655139168e+00 -6.098181338622992e+00 -5.959279019786360e+00 3.203795283419748e+00 5.001393893244066e+00 9.092454621248857e+03 + 4900 9.704409234167937e-01 -5.932937165041182e+00 -5.983341666542739e+00 4.077860999365625e+00 4.788430551672287e+00 9.165969254440059e+03 + 4920 1.059680802063349e+00 -6.052092435826277e+00 -5.984282167934261e+00 3.422153198810520e+00 4.811530250651517e+00 9.168851646029139e+03 + 4940 9.976110119627312e-01 -5.951119446824801e+00 -6.003892209096567e+00 3.957283656833675e+00 4.654254289310630e+00 9.228993446688221e+03 + 4960 9.754515856461196e-01 -5.913513928462592e+00 -6.061746871802318e+00 4.136522580070434e+00 4.285346080439885e+00 9.407573560105668e+03 + 4980 1.045355579062856e+00 -6.016634841863393e+00 -6.025847765746166e+00 3.585903510377515e+00 4.533001475747270e+00 9.296550655221881e+03 + 5000 9.757168464506525e-01 -5.915662370049439e+00 -6.030359452794837e+00 4.165906739320581e+00 4.507298340880316e+00 9.310464913229451e+03 + 5020 1.010924527008094e+00 -5.969366204432081e+00 -6.033809327852344e+00 3.838693448487930e+00 4.468651061267659e+00 9.321137507991523e+03 + 5040 1.048559112424664e+00 -6.028115724924825e+00 -6.066959224545453e+00 3.522977519302258e+00 4.299932133468471e+00 9.423770270936211e+03 + 5060 1.031725061240572e+00 -6.013183814086882e+00 -6.030091869590448e+00 3.616650222322243e+00 4.519561551107633e+00 9.309659051140223e+03 + 5080 1.011490547826237e+00 -5.994397659536984e+00 -5.953966354534775e+00 3.704962329880044e+00 4.937125139926956e+00 9.076275019279554e+03 + 5100 9.998510673257971e-01 -5.984340965627356e+00 -6.012370532233728e+00 3.767643435423025e+00 4.606693326407823e+00 9.255019995855891e+03 + 5120 1.040691574646468e+00 -6.052579169644728e+00 -5.973184896293180e+00 3.433469573468745e+00 4.889363777277431e+00 9.134908320765669e+03 + 5140 9.530941563442179e-01 -5.930871496783237e+00 -5.995256021530674e+00 4.037184739109076e+00 4.667478834536284e+00 9.202436179321334e+03 + 5160 9.466286786653619e-01 -5.927233285920511e+00 -5.980625460928309e+00 4.140470103086515e+00 4.833883971779358e+00 9.157611049099092e+03 + 5180 9.893774345529118e-01 -5.992872163600977e+00 -5.944770423410557e+00 3.734306613896735e+00 5.010514249790365e+00 9.048278794999967e+03 + 5200 9.989122652156947e-01 -6.005983315413761e+00 -5.968075660677441e+00 3.684872344039691e+00 4.902543963726249e+00 9.119299015050627e+03 + 5220 9.894473034498165e-01 -5.989629378670713e+00 -6.000962221885221e+00 3.724927021705166e+00 4.659852082215644e+00 9.220003678964240e+03 + 5240 9.971788648933735e-01 -6.000014969898450e+00 -5.983900634015466e+00 3.678431402795091e+00 4.770962413120600e+00 9.167695104450562e+03 + 5260 9.880383802563765e-01 -5.983578234475841e+00 -5.976172427753403e+00 3.773413384189942e+00 4.815938672435072e+00 9.144055265842986e+03 + 5280 9.783770157190620e-01 -5.963008888068987e+00 -6.022069406001164e+00 3.816855110166231e+00 4.477720476614055e+00 9.284920980034141e+03 + 5300 1.011596818460412e+00 -6.003750172799442e+00 -6.013112214098848e+00 3.689041184912189e+00 4.635282894999793e+00 9.257357248035451e+03 + 5320 1.059997981633053e+00 -6.063093853469650e+00 -5.986919747911196e+00 3.366118812296346e+00 4.803522314317728e+00 9.176942170936964e+03 + 5340 9.783497976824099e-01 -5.929488288641137e+00 -6.004612595881234e+00 4.032702470814444e+00 4.601327073192834e+00 9.231208711471123e+03 + 5360 1.059745567706651e+00 -6.035030404515558e+00 -5.939953243430296e+00 3.505184553017902e+00 5.051132325112606e+00 9.033602607856410e+03 + 5380 1.014863342614668e+00 -5.948550557313336e+00 -5.972325901094496e+00 3.961143881335394e+00 4.824622178121409e+00 9.132249921902299e+03 + 5400 9.897324472720891e-01 -5.889600958850225e+00 -5.969282641716284e+00 4.285840475903901e+00 4.828295922186413e+00 9.122955462689279e+03 + 5420 1.078236172588016e+00 -5.996725122020378e+00 -5.980336283635626e+00 3.736943020808769e+00 4.831050266978560e+00 9.156767541934090e+03 + 5440 1.084004762944947e+00 -5.983275043051478e+00 -5.983366020347341e+00 3.785085016004242e+00 4.784562610292706e+00 9.166043399978666e+03 + 5460 1.084297857704596e+00 -5.966394586005583e+00 -5.984257122921901e+00 3.861706783670842e+00 4.759137332478693e+00 9.168764419851001e+03 + 5480 1.153904884946485e+00 -6.060333254198593e+00 -5.970304437330078e+00 3.386734019519226e+00 4.903693417892619e+00 9.126122759377435e+03 + 5500 1.077808931407963e+00 -5.945935275087555e+00 -6.053847002352839e+00 3.952932861655575e+00 4.333287024412490e+00 9.383088796157850e+03 + 5520 9.786816592634638e-01 -5.809539653554174e+00 -6.056871941087502e+00 4.689344684602474e+00 4.269124415038306e+00 9.392449300654971e+03 + 5540 1.017367441444998e+00 -5.885321262895590e+00 -6.008598816853474e+00 4.282274636371971e+00 4.574395844405982e+00 9.243452929086670e+03 + 5560 1.052711361242152e+00 -5.962151010836577e+00 -5.977904402783764e+00 3.929488732149212e+00 4.839030317758937e+00 9.149332572700278e+03 + 5580 1.035425238393093e+00 -5.967359900927145e+00 -6.011843502482197e+00 3.849322586420446e+00 4.593890862476246e+00 9.253435065589945e+03 + 5600 1.091397696372464e+00 -6.087413463504488e+00 -5.965079262787088e+00 3.221046605321297e+00 4.923508516996986e+00 9.110152942889883e+03 + 5620 9.871344351288274e-01 -5.970114225847386e+00 -6.021471851996687e+00 3.884573163176955e+00 4.589669726260704e+00 9.283066992292188e+03 + 5640 9.356090245220325e-01 -5.929250743872026e+00 -6.057837391421076e+00 4.090679057663870e+00 4.352314628717824e+00 9.395447721744136e+03 + 5660 9.570236131341587e-01 -5.989829397900140e+00 -6.018915008253314e+00 3.729604022280806e+00 4.562589946649220e+00 9.275199671006494e+03 + 5680 1.006769274817507e+00 -6.084954490916584e+00 -5.976089766181515e+00 3.292537107828805e+00 4.917655204019278e+00 9.143804346081633e+03 + 5700 9.772226525496084e-01 -6.054154103207125e+00 -6.027980248427560e+00 3.456600073305338e+00 4.606894397840540e+00 9.303112449557271e+03 + 5720 1.004681132964730e+00 -6.103537996580522e+00 -5.980211002428537e+00 3.178632718504834e+00 4.886795403716198e+00 9.156395588605385e+03 + 5740 9.629537114872642e-01 -6.046293531496374e+00 -5.980301385354695e+00 3.446842608053926e+00 4.825779723451062e+00 9.156683801735328e+03 + 5760 9.432814310657786e-01 -6.017441989022483e+00 -5.997856050936480e+00 3.633029867370203e+00 4.745495354774160e+00 9.210460024984968e+03 + 5780 9.438639880269430e-01 -6.012985460723320e+00 -6.010682504765166e+00 3.638310316890554e+00 4.651534246383560e+00 9.249850660066708e+03 + 5800 1.013396540903074e+00 -6.105633804982491e+00 -5.983017122842493e+00 3.144377758802217e+00 4.848461722520325e+00 9.164985339179280e+03 + 5820 9.924605588213712e-01 -6.061544550307547e+00 -6.009827671759471e+00 3.381161968027473e+00 4.678128287811613e+00 9.247242714295948e+03 + 5840 9.790768567247068e-01 -6.030616117197404e+00 -6.001454508371686e+00 3.519530007935466e+00 4.686980478557122e+00 9.221531719326957e+03 + 5860 9.865267384262718e-01 -6.028707447766974e+00 -5.959296367723541e+00 3.599082791593898e+00 4.997651954533209e+00 9.092500975018178e+03 + 5880 1.004392276508255e+00 -6.038164096856935e+00 -5.945079514525006e+00 3.541938107758773e+00 5.076444184301268e+00 9.049212008805031e+03 + 5900 9.829846021670952e-01 -5.986019833191618e+00 -5.968206618477462e+00 3.764849623064507e+00 4.867135858539259e+00 9.119695262244757e+03 + 5920 9.951404425776585e-01 -5.980630968966068e+00 -5.976137391136598e+00 3.825038142542648e+00 4.850840961818385e+00 9.143936359961393e+03 + 5940 1.079725312220321e+00 -6.080438292526281e+00 -6.001428032402661e+00 3.270317279673002e+00 4.724006420101069e+00 9.221448861266723e+03 + 5960 9.989169253465102e-01 -5.939895171011616e+00 -6.026045393649169e+00 3.982790120490079e+00 4.488102210401383e+00 9.297192983611458e+03 + 5980 9.783374881607838e-01 -5.894432258850787e+00 -6.041486865680836e+00 4.326536967913803e+00 4.482126658868799e+00 9.344817811866129e+03 + 6000 1.041546319877692e+00 -5.974705612601799e+00 -6.030246193470867e+00 3.815614706266918e+00 4.496692096039618e+00 9.310148842452130e+03 + 6020 1.051890912843227e+00 -5.981522930968983e+00 -6.002336230830966e+00 3.783060230215579e+00 4.663547041560326e+00 9.224219931460868e+03 + 6040 1.046437633435792e+00 -5.968561881988920e+00 -6.015282243198760e+00 3.834808140727155e+00 4.566532596707729e+00 9.263972011743794e+03 + 6060 1.039728880833183e+00 -5.959037025820198e+00 -5.985761787054544e+00 3.923250046454887e+00 4.769792331803838e+00 9.173378181370605e+03 + 6080 1.072441332746860e+00 -6.011392160441919e+00 -5.979704768888013e+00 3.655816589118137e+00 4.837770495028661e+00 9.154836299537148e+03 + 6100 1.018684095824418e+00 -5.942301602409385e+00 -6.027019038936158e+00 3.991129394040049e+00 4.504668763522388e+00 9.300178539178612e+03 + 6120 1.077321872357380e+00 -6.059974814004906e+00 -5.975647366246227e+00 3.425897200241240e+00 4.910118454901943e+00 9.142450846910046e+03 + 6140 9.572651025713240e-01 -5.937997217759268e+00 -5.997908292121036e+00 4.018383218728724e+00 4.674364558534656e+00 9.210623585628760e+03 + 6160 9.437428086284227e-01 -5.988614087691234e+00 -5.955238601319259e+00 3.730600081624487e+00 4.922247289212191e+00 9.080152577679510e+03 + 6180 8.993558712645703e-01 -5.976270306171967e+00 -5.999222734867604e+00 3.770686471983723e+00 4.638890074536516e+00 9.214641427904013e+03 + 6200 1.005502516319027e+00 -6.169504426293264e+00 -5.967201584836466e+00 2.783747729842324e+00 4.945401951750798e+00 9.116649054744739e+03 + 6220 9.143645629047400e-01 -6.058259416269181e+00 -6.002396813551449e+00 3.341686704996195e+00 4.662458414511242e+00 9.224431373030429e+03 + 6240 9.180292769616188e-01 -6.077203530032666e+00 -5.985559911995239e+00 3.221198994539089e+00 4.747430831114052e+00 9.172793988607698e+03 + 6260 9.361532244543671e-01 -6.107968807570139e+00 -5.990173959447031e+00 3.082620076662173e+00 4.759016323278898e+00 9.186907079470320e+03 + 6280 9.169244918505576e-01 -6.074123191940696e+00 -5.966673803722117e+00 3.376217162274156e+00 4.993208177164332e+00 9.115018213151356e+03 + 6300 9.535200288440666e-01 -6.116459456911077e+00 -5.927199422062985e+00 3.068950866784288e+00 5.155711274777767e+00 8.994916798676715e+03 + 6320 9.613177290124841e-01 -6.107179281891756e+00 -5.939951531648578e+00 3.144025915637616e+00 5.104273535944655e+00 9.033638602190102e+03 + 6340 9.905306767367399e-01 -6.118940340932075e+00 -5.959466032124624e+00 3.046515843933387e+00 4.962242003675300e+00 9.093027743636927e+03 + 6360 9.195044884619412e-01 -5.980163506165749e+00 -5.980036732237592e+00 3.814250996041184e+00 4.814978951554864e+00 9.155837004888808e+03 + 6380 9.521204022032809e-01 -5.991538099379107e+00 -5.958431056156011e+00 3.728454124059966e+00 4.918559889545360e+00 9.089862513292219e+03 + 6400 1.018707907979674e+00 -6.051242064607791e+00 -6.005404543330376e+00 3.339034732723152e+00 4.602240873231566e+00 9.233654407248681e+03 + 6420 9.407497928423399e-01 -5.903377523223403e+00 -6.012102398420906e+00 4.218246124971374e+00 4.593931066467254e+00 9.254236770651876e+03 + 6440 9.849100299157684e-01 -5.942937704813716e+00 -6.001027607255208e+00 3.995438044806107e+00 4.661876835603707e+00 9.220214442928758e+03 + 6460 1.070865304036714e+00 -6.049532356078034e+00 -5.982479195741548e+00 3.443919028672649e+00 4.828948651767778e+00 9.163348290350565e+03 + 6480 1.014423973452145e+00 -5.950331077809093e+00 -6.025751133993360e+00 3.911801896728462e+00 4.478728262902427e+00 9.296290736484900e+03 + 6500 1.054343883792371e+00 -5.999675146058478e+00 -5.999572581342661e+00 3.747503623170923e+00 4.748092565640983e+00 9.215711877629525e+03 + 6520 9.879580455720320e-01 -5.895831003709989e+00 -6.038218909782963e+00 4.249775297487751e+00 4.432161906359481e+00 9.334588387667487e+03 + 6540 1.014581840022688e+00 -5.931860340293778e+00 -6.009505015628525e+00 4.056919207461520e+00 4.611071466214722e+00 9.246227498630960e+03 + 6560 1.079115691975294e+00 -6.028066490394108e+00 -5.998251774483101e+00 3.575642241626110e+00 4.746842954199489e+00 9.211675794381028e+03 + 6580 9.909498145204441e-01 -5.902362707862014e+00 -6.019247057253169e+00 4.165647699171476e+00 4.494479677172851e+00 9.276229018258397e+03 + 6600 1.019457493218320e+00 -5.952339796802649e+00 -6.028683887305545e+00 3.902525074647001e+00 4.464145492769551e+00 9.305327661986828e+03 + 6620 1.002956082445952e+00 -5.940935398856265e+00 -6.011796296377248e+00 3.973642188543184e+00 4.566747949289244e+00 9.253297834552495e+03 + 6640 1.034010105212105e+00 -6.007113560478710e+00 -5.978018203045727e+00 3.645221974062047e+00 4.812292018934250e+00 9.149671734008138e+03 + 6660 1.042555111690499e+00 -6.043579367778883e+00 -5.948747092379153e+00 3.466944492727897e+00 5.011486093320335e+00 9.060372779149848e+03 + 6680 9.693288206159477e-01 -5.961949408013727e+00 -5.982692661531932e+00 3.958668718980093e+00 4.839557747270447e+00 9.163954578331099e+03 + 6700 9.501652731260414e-01 -5.960583007119434e+00 -5.980855201421551e+00 3.949934740440664e+00 4.833528663645978e+00 9.158366624263243e+03 + 6720 9.614381634009187e-01 -6.007348896448929e+00 -6.034954041181657e+00 3.606748769686718e+00 4.448235756749052e+00 9.324675206323607e+03 + 6740 9.594738253572362e-01 -6.037485453580036e+00 -6.005346620851628e+00 3.505049222578182e+00 4.689595373572989e+00 9.233453985862467e+03 + 6760 9.321625065563082e-01 -6.027681711734496e+00 -5.972774889542199e+00 3.559434499223746e+00 4.874717969055183e+00 9.133655797604904e+03 + 6780 9.306651908960466e-01 -6.051039835764435e+00 -5.958984978297700e+00 3.435087529701439e+00 4.963680766718587e+00 9.091565776765417e+03 + 6800 9.560581300274191e-01 -6.105567320430523e+00 -5.962754882386369e+00 3.140887487294914e+00 4.960938606697807e+00 9.103057208659622e+03 + 6820 9.635113904575634e-01 -6.126711710079060e+00 -5.980657430914196e+00 3.094450715078799e+00 4.933116987870100e+00 9.157778975190929e+03 + 6840 9.552671459692759e-01 -6.119506842035788e+00 -6.004743295302093e+00 3.063842971815524e+00 4.722833016761859e+00 9.231623746788207e+03 + 6860 9.359675835623258e-01 -6.090100319669534e+00 -5.969200215545214e+00 3.249496486328817e+00 4.943723593441313e+00 9.122748151699549e+03 + 6880 9.458027870708864e-01 -6.094799374890442e+00 -5.970994634339798e+00 3.179946235756467e+00 4.890852214719951e+00 9.128237737498437e+03 + 6900 9.787467483347099e-01 -6.119415746310791e+00 -5.962939559257894e+00 3.053818785004969e+00 4.952329265674395e+00 9.103624544687600e+03 + 6920 9.460049950218078e-01 -6.025587554448097e+00 -5.988831650520934e+00 3.563117778874712e+00 4.774175867182231e+00 9.182782964602371e+03 + 6940 1.021217928965151e+00 -6.071136166007149e+00 -6.001921838686365e+00 3.275596348856908e+00 4.673035727215385e+00 9.222946680297211e+03 + 6960 9.711597655806342e-01 -5.931372903462444e+00 -6.010338909250049e+00 4.074539605009772e+00 4.621104579827440e+00 9.248803802053097e+03 + 6980 1.009093481032663e+00 -5.942710393776651e+00 -5.985948690389844e+00 4.016667187713307e+00 4.768386197455581e+00 9.173956482099673e+03 + 7000 1.002498818114505e+00 -5.904126615547081e+00 -6.012079185901725e+00 4.217945072597616e+00 4.598064708014976e+00 9.254163695766718e+03 + 7020 1.016751810462210e+00 -5.908987088291426e+00 -6.025072709027548e+00 4.191146145764518e+00 4.524564547305959e+00 9.294157555685233e+03 + 7040 1.058157127250388e+00 -5.962289730113469e+00 -6.048309407286286e+00 3.917964750046102e+00 4.424026452217767e+00 9.365934220421901e+03 + 7060 1.005613393312745e+00 -5.883807456672683e+00 -6.077354627941743e+00 4.286676826166834e+00 4.175299017411935e+00 9.456039050603660e+03 + 7080 1.040357681132129e+00 -5.942093401398654e+00 -6.038568043287182e+00 4.012966048905793e+00 4.458993725779284e+00 9.335824668304796e+03 + 7100 1.059819816751772e+00 -5.981914872427253e+00 -5.981032296329150e+00 3.881915442300499e+00 4.886983330834017e+00 9.158903997459436e+03 + 7120 9.828580555396533e-01 -5.883793697499620e+00 -6.007696416816798e+00 4.331494242777085e+00 4.620025654574001e+00 9.240644222187477e+03 + 7140 1.047675115471584e+00 -5.998787368223506e+00 -5.983270987184026e+00 3.702820049178855e+00 4.791917510259753e+00 9.165746988381374e+03 + 7160 1.010496594214760e+00 -5.964892183925705e+00 -6.036084626974207e+00 3.836094633946786e+00 4.427296608967334e+00 9.328163257725235e+03 + 7180 9.707332287557553e-01 -5.930439480074009e+00 -6.047032183940592e+00 4.060456330428669e+00 4.390962982164136e+00 9.362003054842835e+03 + 7200 1.042186728921942e+00 -6.063321280149080e+00 -6.019120892526889e+00 3.362305017288850e+00 4.616110483003354e+00 9.275854019193985e+03 + 7220 9.518454721049487e-01 -5.959084528544982e+00 -6.037029401658884e+00 3.914799062200843e+00 4.467227538850685e+00 9.331085176212033e+03 + 7240 9.658894033754571e-01 -6.006365949457385e+00 -6.004706879926307e+00 3.659004899169161e+00 4.668531533156797e+00 9.231500550126371e+03 + 7260 9.716954402136218e-01 -6.038108694709853e+00 -5.971560551391164e+00 3.563530230196384e+00 4.945659967424191e+00 9.129927028319607e+03 + 7280 9.928310444284584e-01 -6.085965576963126e+00 -5.914651409165964e+00 3.258378325816789e+00 5.242090788089879e+00 8.956904465428192e+03 + 7300 1.030853189965956e+00 -6.151616317720324e+00 -5.940735090869970e+00 2.904476264916390e+00 5.115388903255507e+00 9.036002859372953e+03 + 7320 8.948460086534725e-01 -5.953238733848448e+00 -6.015621522892873e+00 3.966544417310241e+00 4.608332788911740e+00 9.265068667525051e+03 + 7340 9.850518947787603e-01 -6.086842017017735e+00 -5.987366223106482e+00 3.222425493806060e+00 4.793630896273829e+00 9.178308255658276e+03 + 7360 1.031034946032220e+00 -6.150871217997465e+00 -5.958575677607955e+00 2.926367630506823e+00 5.030558381062089e+00 9.090325835971507e+03 + 7380 9.504717002872186e-01 -6.023088656915732e+00 -6.003721824965108e+00 3.568364415112937e+00 4.679571761180979e+00 9.228468454529182e+03 + 7400 9.938308519090427e-01 -6.073183359683384e+00 -5.981305278099306e+00 3.311021066985849e+00 4.838599229528795e+00 9.159741986425757e+03 + 7420 1.009930733075871e+00 -6.075081022937376e+00 -5.975396196325661e+00 3.297761401490151e+00 4.870167102071678e+00 9.141678534967246e+03 + 7440 9.736441665213251e-01 -5.985914145022256e+00 -6.042184023734006e+00 3.733210431756945e+00 4.410100080458489e+00 9.347003706598038e+03 + 7460 1.021604312765205e+00 -6.011219764229052e+00 -6.035378513105234e+00 3.642364883347206e+00 4.503641608745864e+00 9.325978970150041e+03 + 7480 1.056100326328717e+00 -6.009974266967321e+00 -5.999370299081802e+00 3.614157879016557e+00 4.675047503573934e+00 9.215126084853311e+03 + 7500 1.007363868772451e+00 -5.891100777309807e+00 -6.016448917065444e+00 4.318373557797262e+00 4.598605141758455e+00 9.267591713939011e+03 + 7520 1.089762806008584e+00 -5.975878374562923e+00 -6.028952829251605e+00 3.839926237342217e+00 4.535164505274484e+00 9.306139788600980e+03 + 7540 1.012973106967515e+00 -5.839768442679252e+00 -6.091018955356993e+00 4.504169032590799e+00 4.061449707904031e+00 9.498574675590999e+03 + 7560 1.083530570431038e+00 -5.936854462398189e+00 -6.030217517688675e+00 4.053218659128030e+00 4.517113547763945e+00 9.310031259661055e+03 + 7580 1.040424103206520e+00 -5.875511075528949e+00 -6.018045958849482e+00 4.344378035800899e+00 4.525920678572489e+00 9.272498836925623e+03 + 7600 1.085288072866474e+00 -5.950388381029457e+00 -5.982576496087789e+00 3.991246935733240e+00 4.806417797973589e+00 9.163622593627686e+03 + 7620 1.039718684520211e+00 -5.894628474113993e+00 -6.002383320555101e+00 4.259731002922820e+00 4.640985999649388e+00 9.224351534858128e+03 + 7640 1.042586071627145e+00 -5.913308914003086e+00 -6.015341545969797e+00 4.141646690074887e+00 4.555759527823267e+00 9.264194484414133e+03 + 7660 1.060215756013953e+00 -5.959312231108781e+00 -5.978305304245007e+00 3.931060220305807e+00 4.821999055189031e+00 9.150551238863622e+03 + 7680 1.035699906496397e+00 -5.942885159873710e+00 -5.989453403000205e+00 4.000620593546664e+00 4.733218535102000e+00 9.184677665008379e+03 + 7700 1.009615980858888e+00 -5.925206686049202e+00 -5.981626868152309e+00 4.149299634042764e+00 4.825326217411757e+00 9.160725942945523e+03 + 7720 1.014416971583102e+00 -5.953040245075697e+00 -6.048013367249411e+00 3.934439010753561e+00 4.389088646188940e+00 9.365027551199744e+03 + 7740 1.036165532408244e+00 -6.008029857557380e+00 -5.993435792469193e+00 3.624339957250140e+00 4.708141337410785e+00 9.196915537169458e+03 + 7760 1.007852010113247e+00 -5.986043688900468e+00 -6.007735272398434e+00 3.712147391468592e+00 4.587590962261575e+00 9.240805933398660e+03 + 7780 9.839871289128796e-01 -5.968386433557097e+00 -5.993093948846074e+00 3.828243494130702e+00 4.686369117865762e+00 9.195868903008117e+03 + 7800 9.474909311650864e-01 -5.927461600954150e+00 -6.016555661281227e+00 4.099349663299221e+00 4.587757781639865e+00 9.267903673305525e+03 + 7820 1.048438605604947e+00 -6.090001700579502e+00 -5.986517734336616e+00 3.228824574131142e+00 4.823045522389819e+00 9.175722368146386e+03 + 7840 9.250487862157670e-01 -5.920761447908625e+00 -6.004156253034242e+00 4.133449777568130e+00 4.654583901232452e+00 9.229806696702333e+03 + 7860 9.911372459967506e-01 -6.026984064454687e+00 -5.953222784163502e+00 3.557936417604497e+00 4.981485103557715e+00 9.073991445926942e+03 + 7880 9.963964198560328e-01 -6.036501706186205e+00 -5.985332421451309e+00 3.515399037007994e+00 4.809220988376991e+00 9.172062006938484e+03 + 7900 9.723406493460053e-01 -6.001713145150640e+00 -5.991532523476794e+00 3.668371596031432e+00 4.726830301128774e+00 9.191079217436498e+03 + 7920 9.540973117277876e-01 -5.972275101541171e+00 -6.102493394343085e+00 3.775421623559645e+00 4.027688035075367e+00 9.534374456191894e+03 + 7940 9.545742692403106e-01 -5.973347400534109e+00 -6.043731721797710e+00 3.835644086878578e+00 4.431486422244467e+00 9.351792332827028e+03 + 7960 9.727847901504699e-01 -5.999150024032616e+00 -6.038977087917916e+00 3.675509200035209e+00 4.446816035987603e+00 9.337090579596483e+03 + 7980 1.004243730969421e+00 -6.042428896492863e+00 -6.052673403056741e+00 3.499015785486462e+00 4.440190243464407e+00 9.379453642422903e+03 + 8000 1.012258477905718e+00 -6.050600711525896e+00 -6.033290362385436e+00 3.450985167503198e+00 4.550383871035589e+00 9.319545251664364e+03 + 8020 1.011728490139650e+00 -6.046531185536313e+00 -6.013019507037622e+00 3.461357197285424e+00 4.653786441140394e+00 9.257058147785403e+03 + 8040 9.989996303790981e-01 -6.021471235911876e+00 -5.994229820905920e+00 3.594940929090994e+00 4.751365349650541e+00 9.199343244838534e+03 + 8060 9.671757815901910e-01 -5.962221602765267e+00 -6.048273664973887e+00 3.886542549926610e+00 4.392418292211124e+00 9.365836321610950e+03 + 8080 1.020208460272742e+00 -6.021752687843501e+00 -5.993926512261591e+00 3.552375039241109e+00 4.712157245519187e+00 9.198399004924366e+03 + 8100 9.981778009397709e-01 -5.963202012463737e+00 -6.006057337822964e+00 3.904677037904562e+00 4.658595127851719e+00 9.235650734648934e+03 + 8120 1.010239074276646e+00 -5.952746820251543e+00 -6.017577925890014e+00 3.985077027537552e+00 4.612806786380281e+00 9.271087901548155e+03 + 8140 1.016607853097346e+00 -5.931072924400683e+00 -6.016938096863252e+00 4.128315259597166e+00 4.635264151724602e+00 9.269099518328889e+03 + 8160 1.067104860706063e+00 -5.977881125270215e+00 -6.010450667575917e+00 3.826209234939313e+00 4.639189882899588e+00 9.249148478038724e+03 + 8180 1.135940642421255e+00 -6.055040912772896e+00 -5.988820545774976e+00 3.415542052813033e+00 4.795789647683765e+00 9.182771421179992e+03 + 8200 1.056452437837062e+00 -5.921225257420688e+00 -6.034457084922640e+00 4.121465547643301e+00 4.471270871558416e+00 9.323137722040676e+03 + 8220 1.113925903885310e+00 -6.001227537762582e+00 -6.007770578862067e+00 3.659877688918144e+00 4.622306534392560e+00 9.240936124752150e+03 + 8240 1.078517856435575e+00 -5.953492060410785e+00 -5.979739464045510e+00 4.014411018966119e+00 4.863694365522947e+00 9.154939833063012e+03 + 8260 1.117979023678269e+00 -6.024286778702543e+00 -5.924328711175165e+00 3.568164280263094e+00 5.142138972466258e+00 8.986198798695363e+03 + 8280 1.074005991034700e+00 -5.976400387895874e+00 -5.938689721345706e+00 3.796105705354512e+00 5.012646188392366e+00 9.029793612563164e+03 + 8300 9.957096687981000e-01 -5.881088433970347e+00 -5.998957125122426e+00 4.294972166640921e+00 4.618151901924676e+00 9.213816586390252e+03 + 8320 1.034447583534329e+00 -5.965264002386957e+00 -5.983745801699573e+00 3.893830370997175e+00 4.787705019294929e+00 9.167201649599223e+03 + 8340 1.065087501604691e+00 -6.039982967083817e+00 -5.976949152702617e+00 3.488004183312982e+00 4.849954099941081e+00 9.146419365586846e+03 + 8360 1.023533593929409e+00 -6.012718844724199e+00 -6.000612967054978e+00 3.651997625837365e+00 4.721511448792545e+00 9.218933870482979e+03 + 8380 1.037764591524573e+00 -6.067531961837249e+00 -5.992949139127081e+00 3.345345102274758e+00 4.773611211931055e+00 9.195432557250488e+03 + 8400 9.315924296284999e-01 -5.941101451286960e+00 -6.080275983165434e+00 3.970844242549128e+00 4.171682543313727e+00 9.465134894678829e+03 + 8420 9.869458991667961e-01 -6.049644479911886e+00 -5.988453883624965e+00 3.413920544463938e+00 4.765286417557608e+00 9.181605423339453e+03 + 8440 1.031746159244917e+00 -6.134009383321497e+00 -5.945235574251138e+00 2.933521659133599e+00 5.017490083468143e+00 9.049702621681867e+03 + 8460 9.925155791175165e-01 -6.087344565089579e+00 -5.973940658432459e+00 3.229359222348116e+00 4.880542003571135e+00 9.137222659243045e+03 + 8480 9.237768194683385e-01 -5.991546763069630e+00 -6.033401622121576e+00 3.665363716644506e+00 4.425026638949729e+00 9.319875561456594e+03 + 8500 9.545704767401293e-01 -6.038784176793393e+00 -6.022056727098937e+00 3.441093622323465e+00 4.537145227033508e+00 9.284864388150525e+03 + 8520 8.946821667548673e-01 -5.946578495147095e+00 -6.025577314051967e+00 3.989333365882552e+00 4.535709922703064e+00 9.295727544682610e+03 + 8540 1.012435379090851e+00 -6.112735435733456e+00 -5.971562509517301e+00 3.107664427329580e+00 4.918301216102473e+00 9.129975654023896e+03 + 8560 9.878992316678229e-01 -6.066119769781031e+00 -5.999986166440178e+00 3.382021219814443e+00 4.761770604339665e+00 9.217026719039186e+03 + 8580 9.685302014723293e-01 -6.025303504759485e+00 -6.021039648427675e+00 3.563902391840724e+00 4.588386114727610e+00 9.281747287368955e+03 + 8600 1.000242614188331e+00 -6.056009789631392e+00 -6.038568998351090e+00 3.397020324847476e+00 4.497168047332694e+00 9.335843070009472e+03 + 8620 1.007101058771196e+00 -6.050233611417831e+00 -6.005275757554238e+00 3.447108382935594e+00 4.705263337025747e+00 9.233263770125368e+03 + 8640 9.926596022982569e-01 -6.013838583410926e+00 -5.994292182793066e+00 3.668987489427153e+00 4.781225946570625e+00 9.199529637350912e+03 + 8660 9.753719531180020e-01 -5.970341701262394e+00 -6.026199379912557e+00 3.874665397293913e+00 4.553921962536844e+00 9.297653741325003e+03 + 8680 1.074782687566805e+00 -6.097853763719905e+00 -6.005590468478255e+00 3.162340638499193e+00 4.692130757475544e+00 9.234229037818019e+03 + 8700 1.005617251882110e+00 -5.975774042276945e+00 -6.026812750602021e+00 3.832730480661595e+00 4.539658319244419e+00 9.299544786628661e+03 + 8720 1.044011047372157e+00 -6.013880676082564e+00 -5.981691876498203e+00 3.653119053086011e+00 4.837952121500044e+00 9.160933500061130e+03 + 8740 1.022785057904126e+00 -5.959982508245668e+00 -6.035537337172879e+00 3.888404776318141e+00 4.454557256546109e+00 9.326457126686359e+03 + 8760 9.943200577505166e-01 -5.888334100278578e+00 -6.017751555893971e+00 4.333362734967881e+00 4.590227677537760e+00 9.271606281803635e+03 + 8780 1.138742319548021e+00 -6.058640258995050e+00 -6.000320403697350e+00 3.389062852957077e+00 4.723944487044911e+00 9.218049422553368e+03 + 8800 1.092052210262641e+00 -5.928935863782261e+00 -6.022838082625175e+00 4.120415667946348e+00 4.581214596028929e+00 9.287289085700158e+03 + 8820 1.135759260363767e+00 -5.929179256068837e+00 -6.026857353661868e+00 4.074362115504423e+00 4.513479363488484e+00 9.299704746779038e+03 + 8840 1.121726572935529e+00 -5.858050607208816e+00 -6.023926331250714e+00 4.490527140047542e+00 4.538043063413627e+00 9.290634859886797e+03 + 8860 1.163799480109180e+00 -5.892244325673274e+00 -6.031779380810762e+00 4.286266736733428e+00 4.485034857153976e+00 9.314815237120803e+03 + 8880 1.077027190688427e+00 -5.755434151183429e+00 -6.029748294397256e+00 5.028167759630656e+00 4.453013499320397e+00 9.308540743248510e+03 + 8900 1.151985678725246e+00 -5.873201815901925e+00 -6.024131652517024e+00 4.317388511511230e+00 4.450726033350599e+00 9.291238655341736e+03 + 8920 1.102875222674269e+00 -5.820417497895305e+00 -6.035332590723200e+00 4.632016860212458e+00 4.397941139191555e+00 9.325839342001213e+03 + 8940 1.170686397959420e+00 -5.954447328692348e+00 -6.011017320190598e+00 4.009260964094552e+00 4.684427318733706e+00 9.250896304040793e+03 + 8960 1.116558299489435e+00 -5.919422204564552e+00 -6.042714856037228e+00 4.177449547321721e+00 4.469484063089461e+00 9.348649054420734e+03 + 8980 1.093782399482975e+00 -5.931278532925495e+00 -5.998020846490425e+00 4.106344091323497e+00 4.723099398494026e+00 9.210978097172128e+03 + 9000 1.029556567396871e+00 -5.871172309562287e+00 -5.987803978739872e+00 4.465967730880854e+00 4.796250637770687e+00 9.179647528037767e+03 + 9020 1.009823406203204e+00 -5.868740297742549e+00 -5.998662590381961e+00 4.431645869733828e+00 4.685611959988513e+00 9.212910075716196e+03 + 9040 1.093660700864974e+00 -6.017124359938343e+00 -5.995152102151873e+00 3.601202565057382e+00 4.727370669463197e+00 9.202165847216464e+03 + 9060 1.002615093840386e+00 -5.905381854008013e+00 -6.011631061226547e+00 4.169629858284694e+00 4.559530468424193e+00 9.252761555959909e+03 + 9080 1.009480890507454e+00 -5.937095512294461e+00 -5.973602416337368e+00 4.083766029288963e+00 4.874137736849455e+00 9.136160787721135e+03 + 9100 9.926992799928857e-01 -5.931691460053030e+00 -5.970308251239895e+00 4.103659474243251e+00 4.881915883319152e+00 9.126092891105462e+03 + 9120 1.001959434151317e+00 -5.963363822316613e+00 -5.970192794759989e+00 3.932436086047084e+00 4.893223069497149e+00 9.125741670749139e+03 + 9140 1.034937632598562e+00 -6.029604865528968e+00 -6.000855379829725e+00 3.597262059793986e+00 4.762346055647578e+00 9.219679282939271e+03 + 9160 9.952568455848112e-01 -5.990218783821075e+00 -6.008576367607411e+00 3.743770375534544e+00 4.638358288606493e+00 9.243409167863103e+03 + 9180 9.677511903913248e-01 -5.967193866894939e+00 -5.976591341531845e+00 3.899252384207249e+00 4.845290630587630e+00 9.145322491866891e+03 + 9200 1.013208125344860e+00 -6.050627079224326e+00 -5.967247939554268e+00 3.481666039052632e+00 4.960441961918269e+00 9.116763466224924e+03 + 9220 9.537951443020047e-01 -5.975982453248433e+00 -6.013292846329843e+00 3.847978332667470e+00 4.633736281829339e+00 9.257891196415771e+03 + 9240 1.026385895331382e+00 -6.097812486661910e+00 -6.012633246948617e+00 3.150686836341297e+00 4.639799212219772e+00 9.255872228387383e+03 + 9260 9.952007877194865e-01 -6.064415678336472e+00 -6.006927355112740e+00 3.366550789752613e+00 4.696657637992549e+00 9.238327677154941e+03 + 9280 9.919618726159793e-01 -6.070707203371811e+00 -5.977251150972430e+00 3.384637773678713e+00 4.921276888833323e+00 9.147342041644095e+03 + 9300 9.701851505152759e-01 -6.046404177253374e+00 -5.986127210159029e+00 3.434451267875929e+00 4.780570940762166e+00 9.174512181139607e+03 + 9320 9.387965154534705e-01 -6.005444480720042e+00 -6.021597823603404e+00 3.670695257546362e+00 4.577940262988365e+00 9.283457133715476e+03 + 9340 9.874783347088840e-01 -6.081507260446741e+00 -6.032617733805425e+00 3.226898566325981e+00 4.507629793930217e+00 9.317431734523572e+03 + 9360 9.190501573570268e-01 -5.982238740304129e+00 -6.012701790913839e+00 3.794206734742646e+00 4.619283183999841e+00 9.256061148029617e+03 + 9380 9.359257066728851e-01 -6.003750631301298e+00 -5.984534162702907e+00 3.653528156946607e+00 4.763872093377469e+00 9.169606749833063e+03 + 9400 9.958722565418563e-01 -6.078551933176087e+00 -5.979442652587870e+00 3.253432192816212e+00 4.822533019065359e+00 9.154052662736565e+03 + 9420 1.024211416476011e+00 -6.096380757797624e+00 -5.988779968626462e+00 3.171930607287572e+00 4.789790989876694e+00 9.182632666514812e+03 + 9440 1.034521700193158e+00 -6.080466065351087e+00 -5.973995331343151e+00 3.225543777112403e+00 4.836915208078809e+00 9.137412029225439e+03 + 9460 1.012379772002706e+00 -6.007641121488699e+00 -5.975894242700327e+00 3.656101760398049e+00 4.838397251214499e+00 9.143205737511398e+03 + 9480 9.879023246181512e-01 -5.929325849524712e+00 -6.025173163178639e+00 4.069944809158377e+00 4.519574701833675e+00 9.294495126289899e+03 + 9500 1.041111812723053e+00 -5.967702435480341e+00 -6.033988733339302e+00 3.831607935866256e+00 4.450981755788658e+00 9.321691025544878e+03 + 9520 1.047484630139405e+00 -5.946215850088573e+00 -6.008834284070519e+00 3.965661614976770e+00 4.606096876881095e+00 9.244159897614883e+03 + 9540 1.091088305830229e+00 -5.989153254415805e+00 -5.996884763651746e+00 3.782878968264118e+00 4.738483445784158e+00 9.207481228538094e+03 + 9560 1.083276511264488e+00 -5.966211101003869e+00 -5.996948602514702e+00 3.867515823525912e+00 4.691016333237722e+00 9.207676218409555e+03 + 9580 1.017169099749810e+00 -5.863540739833284e+00 -6.048047060126060e+00 4.433126799122403e+00 4.373662955740493e+00 9.365109528161367e+03 + 9600 1.061260902706465e+00 -5.932901184899079e+00 -6.015126944076611e+00 3.998319674021628e+00 4.526166640429132e+00 9.263529553180271e+03 + 9620 1.035081741705939e+00 -5.901364742335772e+00 -6.019292494672020e+00 4.218902022634197e+00 4.541742619458765e+00 9.276286999071146e+03 + 9640 1.122426643453385e+00 -6.045621536420263e+00 -5.996546157933918e+00 3.428958124990193e+00 4.710756542649061e+00 9.206468004867227e+03 + 9660 1.043703867218134e+00 -5.952611700164081e+00 -6.015387355635579e+00 3.919769116767270e+00 4.559301588548639e+00 9.264347172696906e+03 + 9680 1.096148164487773e+00 -6.059219452763040e+00 -5.989326599193350e+00 3.413658301263333e+00 4.814993882344628e+00 9.184333620465593e+03 + 9700 9.607280397378312e-01 -5.891773652972197e+00 -6.032280798261480e+00 4.274197985754116e+00 4.467384214092587e+00 9.316433448982527e+03 + 9720 1.045245860543595e+00 -6.050647842315002e+00 -5.998493887302433e+00 3.398734903312541e+00 4.698210983793166e+00 9.212414202317817e+03 + 9740 1.006121016096058e+00 -6.019557538214365e+00 -5.999714365232612e+00 3.577392670580473e+00 4.691335240562796e+00 9.216175522590778e+03 + 9760 9.978789653408975e-01 -6.030361754024232e+00 -5.971847870172142e+00 3.533504008248505e+00 4.869499784321464e+00 9.130840628523909e+03 + 9780 9.823762561452597e-01 -6.022963664555407e+00 -5.950504683563046e+00 3.550612522134862e+00 4.966683203984072e+00 9.065751808457422e+03 + 9800 9.732680572318851e-01 -6.015949388232504e+00 -5.985618556644621e+00 3.622882776264145e+00 4.797047104922790e+00 9.172951361430429e+03 + 9820 1.041025810369076e+00 -6.119644972017258e+00 -5.999368448119620e+00 3.062961648836695e+00 4.753608061788851e+00 9.215118726224522e+03 + 9840 9.294372549399544e-01 -5.956322729176466e+00 -6.017943557495133e+00 3.876312694818813e+00 4.522476362820665e+00 9.272204555654185e+03 + 9860 9.460294108613490e-01 -5.979261739470184e+00 -5.955076404217027e+00 3.841013347910597e+00 4.979889285602760e+00 9.079656598372037e+03 + 9880 1.036756019088814e+00 -6.107252072569871e+00 -6.026037013169002e+00 3.101819027136038e+00 4.568168466205647e+00 9.297152037446082e+03 + 9900 8.878229505896857e-01 -5.881079542378245e+00 -6.055187534881963e+00 4.340246210532168e+00 4.340491174451060e+00 9.387249390762987e+03 + 9920 9.618062732219242e-01 -5.985668341402605e+00 -5.996932366933933e+00 3.801410610814624e+00 4.736730833111421e+00 9.207623663313429e+03 + 9940 1.038836830858150e+00 -6.091515943718913e+00 -5.975562981387544e+00 3.255966426098923e+00 4.921786279468573e+00 9.142185471548897e+03 + 9960 1.016903338849936e+00 -6.049850604794574e+00 -6.015891554530967e+00 3.429849055044154e+00 4.624847176803829e+00 9.265917510458596e+03 + 9980 1.034748402765150e+00 -6.069020288003499e+00 -5.976744892202777e+00 3.371319227566136e+00 4.901178829825232e+00 9.145804547576199e+03 + 10000 9.984994206490150e-01 -6.006600178899083e+00 -5.989647913281131e+00 3.666362392096620e+00 4.763704924629525e+00 9.185308218479915e+03 + 10020 9.851108337492883e-01 -5.974881777532757e+00 -5.980067177661095e+00 3.896879954653299e+00 4.867104584678305e+00 9.155970505793390e+03 + 10040 1.007505633266816e+00 -5.993796855249520e+00 -6.034841277453326e+00 3.700480417625615e+00 4.464796993727552e+00 9.324308634995754e+03 + 10060 1.028693196520807e+00 -6.012507850738915e+00 -6.006098042431858e+00 3.635932532205734e+00 4.672738643419489e+00 9.235778865066719e+03 + 10080 1.059658709662737e+00 -6.046463641895166e+00 -6.004293180309256e+00 3.474485411308702e+00 4.716634727592833e+00 9.230207422946185e+03 + 10100 1.003774229599662e+00 -5.948005022878164e+00 -6.042902663994946e+00 4.005925248061164e+00 4.461008307406104e+00 9.349201993444954e+03 + 10120 1.025789726975146e+00 -5.964124677045945e+00 -6.044093430515735e+00 3.913324618185590e+00 4.454131660637449e+00 9.352891260791657e+03 + 10140 1.010973540578409e+00 -5.923903070213691e+00 -6.019673001505894e+00 4.120007027565063e+00 4.570081261736262e+00 9.277526389840537e+03 + 10160 1.023248098050766e+00 -5.918558372958229e+00 -6.016066434182749e+00 4.202663932814021e+00 4.642757555939119e+00 9.266421208403395e+03 + 10180 1.042219862874707e+00 -5.921611217644643e+00 -6.016734444646033e+00 4.166356050392580e+00 4.620143760678796e+00 9.268494111422720e+03 + 10200 1.118393306770505e+00 -6.007367443615957e+00 -6.019238775247340e+00 3.655882328798441e+00 4.587715305488407e+00 9.276204687869969e+03 + 10220 1.037211644339839e+00 -5.863600721065480e+00 -6.038511368413548e+00 4.443646755948876e+00 4.439282751541072e+00 9.335641174439026e+03 + 10240 1.125540439354577e+00 -5.974979746613246e+00 -5.956887860611890e+00 3.927448589507544e+00 5.031334998637639e+00 9.085151969005985e+03 + 10260 1.117498548008918e+00 -5.950132348349095e+00 -6.002917684786300e+00 3.930202019245598e+00 4.627100448918755e+00 9.226015458222084e+03 + 10280 1.085808626554846e+00 -5.899561036147876e+00 -6.028583959959111e+00 4.221027053309455e+00 4.480157458552413e+00 9.305004575208241e+03 + 10300 1.119415502370355e+00 -5.957820211144199e+00 -6.044403279795012e+00 3.844801835810768e+00 4.347628456931226e+00 9.353864885044042e+03 + 10320 1.062593396092369e+00 -5.898306978047894e+00 -6.050812164929608e+00 4.219155914897834e+00 4.343447531721631e+00 9.373642986475477e+03 + 10340 1.022711378720038e+00 -5.874727217571833e+00 -5.993243637825312e+00 4.335597474503672e+00 4.655057849051433e+00 9.196325960451750e+03 + 10360 1.023037598649729e+00 -5.917175816199303e+00 -6.012477377814767e+00 4.168098783395341e+00 4.620862468730354e+00 9.255361962769231e+03 + 10380 1.008303988680454e+00 -5.940833610345277e+00 -6.023188543271370e+00 4.015532889359511e+00 4.542638120113204e+00 9.288363142607437e+03 + 10400 1.054560645643758e+00 -6.049460900458026e+00 -5.994139217481457e+00 3.404614050194293e+00 4.722279714848531e+00 9.199064018869454e+03 + 10420 9.691922764701637e-01 -5.956838384668929e+00 -6.012122238042028e+00 3.944787735223039e+00 4.627339294006039e+00 9.254289984139477e+03 + 10440 9.931230087591062e-01 -6.017792880356016e+00 -5.931605114781473e+00 3.632769235906584e+00 5.127672723349226e+00 9.008265153997612e+03 + 10460 9.562678635059454e-01 -5.978752782659028e+00 -5.962629194346910e+00 3.783661010205789e+00 4.876245149411203e+00 9.102667321868223e+03 + 10480 9.663112241381656e-01 -6.002303977197318e+00 -5.979517120675430e+00 3.699528945063555e+00 4.830374601466886e+00 9.154266264594085e+03 + 10500 9.981264873125600e-01 -6.053577148945060e+00 -5.975043743856378e+00 3.412923592840193e+00 4.863874557864571e+00 9.140589870069365e+03 + 10520 9.696919377302500e-01 -6.014968254913319e+00 -5.991303911008362e+00 3.597990757708996e+00 4.733875082456636e+00 9.190358226420247e+03 + 10540 9.559557766884813e-01 -5.995502786996037e+00 -5.977419908880790e+00 3.671118744931031e+00 4.774953429385130e+00 9.147841756688696e+03 + 10560 9.197307537856222e-01 -5.937959720388442e+00 -5.962373741798588e+00 4.094607818688843e+00 4.954418729694181e+00 9.101854762735600e+03 + 10580 9.975861726675496e-01 -6.043977724375615e+00 -5.957843123863436e+00 3.490794787350597e+00 4.985392992777881e+00 9.088067093036254e+03 + 10600 1.026819056244318e+00 -6.072506858844783e+00 -5.957374841250497e+00 3.354736343431122e+00 5.015842205079656e+00 9.086665906544347e+03 + 10620 9.214557791007064e-01 -5.898299097817215e+00 -6.061327607717842e+00 4.170981548226254e+00 4.234846615796479e+00 9.406261959693711e+03 + 10640 9.627495565880440e-01 -5.940181065478112e+00 -6.013053913224126e+00 4.013938882552422e+00 4.595491713758067e+00 9.257161203701642e+03 + 10660 1.056126749278196e+00 -6.057449058005408e+00 -5.962385073100544e+00 3.382933846526166e+00 4.928805958954017e+00 9.101951259092571e+03 + 10680 1.029495670252706e+00 -5.994633643461212e+00 -6.005955940385111e+00 3.726074635494272e+00 4.661060254437453e+00 9.235340120936957e+03 + 10700 1.039121460643558e+00 -5.985437606561888e+00 -5.986145317798027e+00 3.759752672247453e+00 4.755688884811583e+00 9.174564263220094e+03 + 10720 1.076830867408513e+00 -6.015848259973812e+00 -5.950336991928004e+00 3.607612852195457e+00 4.983788691150457e+00 9.065212342431018e+03 + 10740 1.016202328145503e+00 -5.898157011859024e+00 -5.987169259733083e+00 4.237898314759217e+00 4.726776212865534e+00 9.177687594081841e+03 + 10760 1.068078512654131e+00 -5.943778356654711e+00 -6.013856118877746e+00 3.977487254523228e+00 4.575089899339902e+00 9.259644478772056e+03 + 10780 1.065462406204430e+00 -5.910458201703106e+00 -6.048994797055880e+00 4.108768354887745e+00 4.313269785903276e+00 9.368029711176088e+03 + 10800 1.124079978813171e+00 -5.971183160612850e+00 -6.005504434004209e+00 3.859667564844583e+00 4.662589501831509e+00 9.233917393201002e+03 + 10820 1.094246965279270e+00 -5.903007153775795e+00 -6.023941640363835e+00 4.217649496503872e+00 4.523224959964034e+00 9.290684940347754e+03 + 10840 1.036831329218040e+00 -5.799877327217703e+00 -6.063788162391363e+00 4.713403407355159e+00 4.197986551718252e+00 9.413891651442000e+03 + 10860 1.044655193573991e+00 -5.800938571010285e+00 -6.051881099261248e+00 4.772274358793347e+00 4.331323528345576e+00 9.376997201183980e+03 + 10880 1.124112862968799e+00 -5.917601014836281e+00 -6.055844385269884e+00 4.106187755911050e+00 4.312372929788868e+00 9.389218797829870e+03 + 10900 1.077387991827628e+00 -5.861645880125255e+00 -6.056176991432302e+00 4.426782155093280e+00 4.309754410376027e+00 9.390315748361112e+03 + 10920 1.169797992334755e+00 -6.034864483419414e+00 -6.000484901182565e+00 3.484207326877281e+00 4.681620208304421e+00 9.218523850506726e+03 + 10940 1.042796849782627e+00 -5.901389506994596e+00 -6.007608007336572e+00 4.241784099971941e+00 4.631861033748509e+00 9.240393082720917e+03 + 10960 1.016270753139657e+00 -5.921829170238494e+00 -5.981686269197214e+00 4.104652558016708e+00 4.760943832939614e+00 9.160922630475716e+03 + 10980 1.020959050938291e+00 -5.975906510316869e+00 -5.991670903589995e+00 3.793817051319277e+00 4.703295465613014e+00 9.191488642756658e+03 + 11000 1.055544433330639e+00 -6.064185316644144e+00 -5.964035730769369e+00 3.411266660628330e+00 4.986341080819615e+00 9.106945257096446e+03 + 11020 9.386633408299155e-01 -5.918852407237668e+00 -5.981313136409038e+00 4.145253259115609e+00 4.786594086447000e+00 9.159762034968173e+03 + 11040 1.003913117468434e+00 -6.035415674516419e+00 -5.961249686162828e+00 3.535016755069509e+00 4.960889337345435e+00 9.098463571331144e+03 + 11060 1.006087125885276e+00 -6.054127815862659e+00 -5.985551353871114e+00 3.347494319971502e+00 4.741270976900150e+00 9.172746772434743e+03 + 11080 9.548088766076680e-01 -5.991024488118587e+00 -5.992929283384212e+00 3.741345946701323e+00 4.730408317519987e+00 9.195372111167528e+03 + 11100 9.605747048778263e-01 -6.009317824307352e+00 -5.977393474483607e+00 3.627952683645830e+00 4.811267240610947e+00 9.147777205772856e+03 + 11120 9.371575242362759e-01 -5.978511463158938e+00 -6.000441342761206e+00 3.807437032587885e+00 4.681512270273758e+00 9.218401112068268e+03 + 11140 1.054586794945487e+00 -6.153420818107269e+00 -5.980397706095547e+00 2.847777999705193e+00 4.841303484116549e+00 9.156997786295657e+03 + 11160 9.644018104064676e-01 -6.019512757497020e+00 -6.015954240864851e+00 3.581406875197081e+00 4.601840428377667e+00 9.266103733200795e+03 + 11180 9.810890694815781e-01 -6.040645909295389e+00 -6.013698312806616e+00 3.474833868656902e+00 4.629571137822516e+00 9.259164509898741e+03 + 11200 9.487046495259399e-01 -5.986721593521511e+00 -5.981879824476934e+00 3.763571624342837e+00 4.791373811458136e+00 9.161518348392448e+03 + 11220 9.859079532350460e-01 -6.032479828763271e+00 -5.970035396144976e+00 3.547010091389429e+00 4.905575686728399e+00 9.125286920763130e+03 + 11240 9.768596978375125e-01 -6.002050746507216e+00 -6.009093916877307e+00 3.684331879434569e+00 4.643888905242408e+00 9.244982775917779e+03 + 11260 1.000431019361460e+00 -6.017516860468419e+00 -6.017820795995877e+00 3.542066395090113e+00 4.540321150257580e+00 9.271841222513038e+03 + 11280 9.661017669476601e-01 -5.944098952712189e+00 -6.014545877349188e+00 3.987855231649211e+00 4.583338088757205e+00 9.261728149348497e+03 + 11300 9.706164279367708e-01 -5.921863814907089e+00 -5.983741477025912e+00 4.106117125345909e+00 4.750806013922356e+00 9.167207428666130e+03 + 11320 1.013985310373838e+00 -5.952034579557037e+00 -6.012188121117321e+00 3.971445448946632e+00 4.626034504577015e+00 9.254497076981568e+03 + 11340 1.050277027360306e+00 -5.973505128679848e+00 -6.036344390230028e+00 3.838136179321394e+00 4.477303415155969e+00 9.328933998630973e+03 + 11360 1.067212651981315e+00 -5.971773862689867e+00 -6.018353652719678e+00 3.856266257445431e+00 4.588797894895046e+00 9.273476522414045e+03 + 11380 1.081779181886474e+00 -5.971111422259604e+00 -6.056435791642803e+00 3.833896705624649e+00 4.343950972722828e+00 9.391122224738248e+03 + 11400 1.097403093526767e+00 -5.981373031483263e+00 -6.053478007646010e+00 3.732294638435476e+00 4.318256707099984e+00 9.381955171022511e+03 + 11420 1.029033935210177e+00 -5.876823839184764e+00 -6.047808775595789e+00 4.388816997860358e+00 4.406995033154857e+00 9.364387828387156e+03 + 11440 1.059217126642086e+00 -5.927703644184177e+00 -5.988665493414898e+00 4.151894670762655e+00 4.801842298664175e+00 9.182268187862921e+03 + 11460 1.028696277919683e+00 -5.896133388195913e+00 -5.978350802918429e+00 4.261896892787568e+00 4.789791774347069e+00 9.150647239846912e+03 + 11480 1.050916689029432e+00 -5.948785306511120e+00 -5.980145800430473e+00 3.951379958420772e+00 4.771303149315096e+00 9.156191465409578e+03 + 11500 1.060655903931912e+00 -5.993846189671455e+00 -5.991169714237948e+00 3.721989933494625e+00 4.737358669617055e+00 9.189911092753464e+03 + 11520 1.009664368787817e+00 -5.961602559262605e+00 -5.971210048487654e+00 3.902429375990025e+00 4.847261686105642e+00 9.128861688595483e+03 + 11540 1.009981993799828e+00 -6.014853923912263e+00 -5.969874505672382e+00 3.648191756590710e+00 4.906470536666584e+00 9.124781548298022e+03 + 11560 9.653157363217941e-01 -6.002311087073635e+00 -6.020526032257248e+00 3.669083539544142e+00 4.564490505546179e+00 9.280184264787636e+03 + 11580 9.827024786170135e-01 -6.073302048756975e+00 -6.022120826929208e+00 3.281020027651540e+00 4.574910523655061e+00 9.285097316141888e+03 + 11600 9.531938091622449e-01 -6.056863872033605e+00 -5.996534954418502e+00 3.422905128952865e+00 4.769323109768619e+00 9.206412537218959e+03 + 11620 9.752829218495953e-01 -6.102706099653068e+00 -5.975714444420897e+00 3.162138491246283e+00 4.891344227484538e+00 9.142658431130356e+03 + 11640 9.259220074579443e-01 -6.033042367536347e+00 -5.991662667582348e+00 3.536632262043902e+00 4.774240902667637e+00 9.191449839013008e+03 + 11660 9.587523444204059e-01 -6.078531104525986e+00 -5.983323876814975e+00 3.273942120753274e+00 4.820636755540773e+00 9.165926621384979e+03 + 11680 9.573196814752961e-01 -6.068884248620989e+00 -6.013927042748625e+00 3.304211671979201e+00 4.619784452698442e+00 9.259860967701119e+03 + 11700 9.016201059758417e-01 -5.975496682964903e+00 -6.000175548166907e+00 3.817124643933108e+00 4.675414780901155e+00 9.217584079303042e+03 + 11720 9.906638503361345e-01 -6.092308948784274e+00 -5.980059235447971e+00 3.154493149449595e+00 4.799048374013648e+00 9.155952914969155e+03 + 11740 9.776391605190644e-01 -6.051225747319669e+00 -5.980727140814255e+00 3.453354005041947e+00 4.858167913220131e+00 9.157993178995952e+03 + 11760 9.745887845529185e-01 -6.023410256967221e+00 -6.017995453713411e+00 3.528159904396655e+00 4.559252542618125e+00 9.272381558265204e+03 + 11780 9.369199809960895e-01 -5.944047179422365e+00 -6.029829131973734e+00 3.943517232460340e+00 4.450943986196127e+00 9.308841946193925e+03 + 11800 9.772189735715376e-01 -5.978606264826636e+00 -6.060631210010444e+00 3.795017903978089e+00 4.324017975413422e+00 9.404101905965301e+03 + 11820 1.018430229912655e+00 -6.017150052048595e+00 -6.024259097919700e+00 3.590994791336468e+00 4.550173549823290e+00 9.291681938554253e+03 + 11840 9.622632429653328e-01 -5.913153099233442e+00 -6.000605277389734e+00 4.182148865023239e+00 4.679984924868983e+00 9.218898694165218e+03 + 11860 1.065063540437112e+00 -6.046399070708226e+00 -5.992611792411036e+00 3.426711501985380e+00 4.735566377522261e+00 9.194382906277740e+03 + 11880 1.002502760808567e+00 -5.938081502795338e+00 -6.015167050488839e+00 4.086942765212848e+00 4.644305621406813e+00 9.263642976598003e+03 + 11900 1.048416567394966e+00 -5.993809541110108e+00 -5.979874734672318e+00 3.757607069452106e+00 4.837622884422226e+00 9.155376533015546e+03 + 11920 1.045314677798976e+00 -5.980027549548176e+00 -6.015840351682799e+00 3.741390712115300e+00 4.535748060245073e+00 9.265722452117601e+03 + 11940 9.879107710303084e-01 -5.889660942584376e+00 -5.988803712985581e+00 4.312216907237365e+00 4.742923777299514e+00 9.182684228239719e+03 + 11960 1.030885496599534e+00 -5.949297188635499e+00 -6.020666668236100e+00 3.939600913374911e+00 4.529786317116989e+00 9.280589144309221e+03 + 11980 1.050274073229787e+00 -5.977785872258659e+00 -5.989794601627848e+00 3.756385867081570e+00 4.687429884698821e+00 9.185747709900292e+03 + 12000 1.020725896371546e+00 -5.939522719490583e+00 -5.999362443031330e+00 4.043259586181069e+00 4.699650633442807e+00 9.215059346518627e+03 + 12020 1.068033529351182e+00 -6.021079976247308e+00 -5.978271592568855e+00 3.587617701140103e+00 4.833430064797746e+00 9.150451931296786e+03 + 12040 1.050892785066724e+00 -6.016796002115467e+00 -6.014501248167917e+00 3.535815017275052e+00 4.548991849553905e+00 9.261622652833232e+03 + 12060 9.658500762597488e-01 -5.925402848315420e+00 -6.028876818442834e+00 4.063100091859031e+00 4.468936542842290e+00 9.305911645168475e+03 + 12080 1.045958879576089e+00 -6.095161631829183e+00 -5.932352547076914e+00 3.252210579925705e+00 5.187085539197672e+00 9.010545616699797e+03 + 12100 9.570018742982238e-01 -6.017819053404588e+00 -6.009151438493580e+00 3.636424460120083e+00 4.686195246248160e+00 9.245169688714950e+03 + 12120 9.433342389461870e-01 -6.044534140975789e+00 -5.994549947606646e+00 3.434649004227996e+00 4.721665977582541e+00 9.200322813828034e+03 + 12140 9.462687305885389e-01 -6.079508454970265e+00 -5.960559199110566e+00 3.283321147599708e+00 4.966346182083953e+00 9.096363772321780e+03 + 12160 8.910896609733795e-01 -6.014494650383254e+00 -5.978704190894199e+00 3.706088487906533e+00 4.911602844848396e+00 9.151781155649049e+03 + 12180 9.568152034725037e-01 -6.118235388188965e+00 -5.995325683641637e+00 3.053174488729216e+00 4.758941032455281e+00 9.202725599076035e+03 + 12200 9.471491390131267e-01 -6.103241373287179e+00 -5.958680539586132e+00 3.164452874415270e+00 4.994543552243394e+00 9.090652684233850e+03 + 12220 9.516127978497880e-01 -6.102284960556728e+00 -5.962069908771221e+00 3.117276333393444e+00 4.922412858954965e+00 9.100994608449209e+03 + 12240 9.895284848741711e-01 -6.143789147630965e+00 -5.986276521334877e+00 2.924220948951471e+00 4.828682824143753e+00 9.174956395488045e+03 + 12260 9.229758221131442e-01 -6.026514993302938e+00 -5.901247746120077e+00 3.662999352274793e+00 5.382303270642637e+00 8.916361558326858e+03 + 12280 8.874285471993554e-01 -5.947033519904397e+00 -5.940755265351851e+00 4.068534731052413e+00 5.104585440249886e+00 9.036042800012468e+03 + 12300 9.122181307090483e-01 -5.948362085166613e+00 -6.019812651288089e+00 3.955232354070918e+00 4.544952146462025e+00 9.277952346029193e+03 + 12320 1.062527964817957e+00 -6.136630469711283e+00 -5.975825483495633e+00 2.987508013985336e+00 4.910875129326797e+00 9.142992737561446e+03 + 12340 9.431794986015637e-01 -5.930461687191942e+00 -6.041480279179327e+00 4.094796845458520e+00 4.457310910195370e+00 9.344804450824277e+03 + 12360 1.019039083746880e+00 -6.020873271870316e+00 -6.038743040939598e+00 3.500822665473204e+00 4.398211686139561e+00 9.336369508485508e+03 + 12380 1.029484715546167e+00 -6.020074457926896e+00 -6.012962149384893e+00 3.590573499164287e+00 4.631413475438657e+00 9.256887430092194e+03 + 12400 9.917700965792271e-01 -5.954213673838062e+00 -5.996921747288610e+00 3.929721039863783e+00 4.684484673057730e+00 9.207614570720825e+03 + 12420 9.481275080566788e-01 -5.882600124019753e+00 -6.002331039849366e+00 4.332414128745494e+00 4.644900681752511e+00 9.224161961006477e+03 + 12440 9.954148179874700e-01 -5.946104601502890e+00 -5.915552605421094e+00 4.020635664595039e+00 5.196069954002829e+00 8.959604254082707e+03 + 12460 1.031638274520333e+00 -5.990231671001813e+00 -5.958309522009293e+00 3.775038626206746e+00 4.958340545658388e+00 9.089490214231828e+03 + 12480 1.014848719406440e+00 -5.958913525150632e+00 -5.992104446820566e+00 3.891686521244034e+00 4.701099112736745e+00 9.192800416655562e+03 + 12500 1.039211560876270e+00 -5.990155825859240e+00 -6.014682230339302e+00 3.736340173533593e+00 4.595505763560249e+00 9.262182369176380e+03 + 12520 1.053907238681274e+00 -6.011484142939248e+00 -6.021205813593180e+00 3.651517404623368e+00 4.595694067304821e+00 9.282257219573410e+03 + 12540 1.043385930323635e+00 -6.001222520270105e+00 -5.992207133922096e+00 3.669556122978664e+00 4.721323866515462e+00 9.193166611119485e+03 + 12560 9.769367992808742e-01 -5.910153679631581e+00 -6.020286059232671e+00 4.244977591917491e+00 4.612580425317373e+00 9.279416093122856e+03 + 12580 1.057912966517759e+00 -6.040181222259123e+00 -6.010493723241304e+00 3.543354753689537e+00 4.713824967175481e+00 9.249291505753310e+03 + 12600 1.088755828363539e+00 -6.102953215321034e+00 -5.973708696503108e+00 3.164460486399427e+00 4.906602513976608e+00 9.136538121852356e+03 + 12620 9.637905850356971e-01 -5.939989389510406e+00 -6.059072054861244e+00 4.001640237853886e+00 4.317849145426468e+00 9.399267929717131e+03 + 12640 9.675735469780228e-01 -5.976124962154703e+00 -6.015711473688024e+00 3.802418082202862e+00 4.575106206985673e+00 9.265352565594218e+03 + 12660 1.008311562812418e+00 -6.075778093532571e+00 -5.985841109101320e+00 3.298275979965813e+00 4.814708062273417e+00 9.173649194710226e+03 + 12680 9.458033468053731e-01 -6.025552491141647e+00 -6.005746408759344e+00 3.580511289155156e+00 4.694240879175680e+00 9.234701566866359e+03 + 12700 9.101565640450048e-01 -6.014176745803566e+00 -6.011677683091690e+00 3.629035723890684e+00 4.643385728710982e+00 9.252960203924962e+03 + 12720 9.592228398963907e-01 -6.125153470692678e+00 -6.018374182914302e+00 2.979158233024656e+00 4.592301427489472e+00 9.273560567887194e+03 + 12740 9.438591170518340e-01 -6.128841875453158e+00 -5.972160474559272e+00 2.992104792356599e+00 4.891793642657721e+00 9.131805035660593e+03 + 12760 9.419367777358212e-01 -6.140634277998831e+00 -5.975297035352732e+00 2.989524806440289e+00 4.938916839569801e+00 9.141381682158626e+03 + 12780 9.335891670554377e-01 -6.130694396654655e+00 -6.009198570861613e+00 2.936271071016743e+00 4.633918904138669e+00 9.245317253865836e+03 + 12800 9.419126867775685e-01 -6.138974700012927e+00 -5.985635995536536e+00 2.918716059536643e+00 4.799210629727907e+00 9.173027877516230e+03 + 12820 9.566068378767565e-01 -6.149185771405964e+00 -5.959923356544177e+00 2.887426481814926e+00 4.974200556215351e+00 9.094439153018089e+03 + 12840 8.680355279830988e-01 -6.001626311814348e+00 -6.015981130584516e+00 3.702985956406570e+00 4.620558365627238e+00 9.266167163014232e+03 + 12860 9.428994932292935e-01 -6.094612678351087e+00 -5.954204522792125e+00 3.275476122501676e+00 5.081721479813085e+00 9.076997626686623e+03 + 12880 1.015114810725502e+00 -6.181403971235684e+00 -5.936081719043171e+00 2.770160375611435e+00 5.178838711196685e+00 9.021882452435035e+03 + 12900 1.004606022822095e+00 -6.143084268414085e+00 -5.990184850986178e+00 2.935562522613102e+00 4.813534638592524e+00 9.186944098233704e+03 + 12920 9.774498352261826e-01 -6.083085136670594e+00 -5.994274546637798e+00 3.253187707011113e+00 4.763151858373815e+00 9.199482130086359e+03 + 12940 9.677009577739466e-01 -6.052411418511741e+00 -5.996468074193715e+00 3.398305914033805e+00 4.719541254312466e+00 9.206210417222328e+03 + 12960 9.811208819242638e-01 -6.055868917520762e+00 -5.950267811594409e+00 3.430667194765073e+00 5.037045086712521e+00 9.065000039446672e+03 + 12980 9.589686764632543e-01 -6.005264969934738e+00 -5.979773494626130e+00 3.653273023617234e+00 4.799649019632321e+00 9.155055630880710e+03 + 13000 9.623158166166383e-01 -5.990330530601011e+00 -6.017560186231721e+00 3.740733259603906e+00 4.584376363196779e+00 9.271015003012189e+03 + 13020 9.918431235434656e-01 -6.015109826902791e+00 -6.014260760592631e+00 3.540996774990364e+00 4.545872245135892e+00 9.260891341939994e+03 + 13040 9.917158285868454e-01 -5.997489820236130e+00 -5.997166970639603e+00 3.721392197053691e+00 4.723246049397758e+00 9.208316168283072e+03 + 13060 9.767074055940901e-01 -5.958053545711565e+00 -5.974615004196152e+00 3.932789392811709e+00 4.837690935315795e+00 9.139251485303535e+03 + 13080 1.010432337925047e+00 -5.990461795565110e+00 -5.941286381767460e+00 3.831706248045781e+00 5.114079083942582e+00 9.037666321513232e+03 + 13100 1.057813457744726e+00 -6.043294400068824e+00 -5.984790923095892e+00 3.423141459924419e+00 4.759077478086800e+00 9.170408111641862e+03 + 13120 1.038732115618878e+00 -6.000893333579627e+00 -5.949316933853328e+00 3.698244283353420e+00 4.994403952003887e+00 9.062104045939413e+03 + 13140 1.039629229077769e+00 -5.988123656960269e+00 -5.945513168532421e+00 3.780853614225959e+00 5.025529632730437e+00 9.050532630419071e+03 + 13160 1.059799711726345e+00 -6.004404446692083e+00 -5.983659883847587e+00 3.616721046464140e+00 4.735839536527962e+00 9.166954915791481e+03 + 13180 1.045101419781784e+00 -5.973384544532364e+00 -6.019490534437324e+00 3.789640873100682e+00 4.524893144187525e+00 9.276976280021188e+03 + 13200 9.828143421093938e-01 -5.876351592211674e+00 -6.002213715254975e+00 4.368260654661329e+00 4.645540867046103e+00 9.223824775866859e+03 + 13220 9.841375046419810e-01 -5.876463427427820e+00 -6.031037423108485e+00 4.305060185616577e+00 4.417472382169676e+00 9.312564426691099e+03 + 13240 1.051963059880574e+00 -5.977049866977263e+00 -6.010805458921764e+00 3.828916359284499e+00 4.635086526678204e+00 9.250244991236163e+03 + 13260 1.085427755060753e+00 -6.033173494298611e+00 -6.000040216215819e+00 3.541654950261243e+00 4.731911360370853e+00 9.217169665582427e+03 + 13280 1.026191272575016e+00 -5.961454789480383e+00 -6.017665294485574e+00 3.903252784300558e+00 4.580483366013217e+00 9.271345818736534e+03 + 13300 9.893545628543342e-01 -5.935939878425217e+00 -6.053837274382641e+00 4.001092184665404e+00 4.324107092514821e+00 9.383023187165973e+03 + 13320 1.017426546816271e+00 -6.019687778656925e+00 -5.982504082209016e+00 3.635182475850031e+00 4.848697015012355e+00 9.163419947266422e+03 + 13340 1.015468177274977e+00 -6.066584345191529e+00 -5.989793488513505e+00 3.312055581363150e+00 4.753000563755031e+00 9.185741806858139e+03 + 13360 9.343203322336090e-01 -5.994203720277369e+00 -6.028203747175231e+00 3.716816492935294e+00 4.521583077000610e+00 9.303843982294393e+03 + 13380 9.517143517019200e-01 -6.059163039507457e+00 -6.002975837537313e+00 3.411000823769389e+00 4.733636432423358e+00 9.226178457838138e+03 + 13400 9.620689462683979e-01 -6.099823452704063e+00 -5.992341471230464e+00 3.148054306200648e+00 4.765232476604931e+00 9.193566226387971e+03 + 13420 9.388801397787644e-01 -6.081197622432939e+00 -5.990144295267878e+00 3.284113464809745e+00 4.806955759848372e+00 9.186825913402536e+03 + 13440 9.202371770225128e-01 -6.060849502548947e+00 -5.991313308709848e+00 3.352909069233559e+00 4.752196654948890e+00 9.190404610828540e+03 + 13460 9.049631624782820e-01 -6.036479062626970e+00 -6.009117321890004e+00 3.481912210390387e+00 4.639027559917743e+00 9.245066000850933e+03 + 13480 9.391703091589585e-01 -6.078301309568737e+00 -5.980263007941661e+00 3.257782202678379e+00 4.820733301999193e+00 9.156584736660247e+03 + 13500 9.330573482551512e-01 -6.054176438359347e+00 -5.979413513803845e+00 3.399852596528873e+00 4.829152878851753e+00 9.153968949925698e+03 + 13520 9.010024151139526e-01 -5.984594346774619e+00 -6.034268487381922e+00 3.796859116695365e+00 4.511622514279818e+00 9.322550923155895e+03 + 13540 9.647321867159638e-01 -6.052556231673164e+00 -5.988344073516386e+00 3.436649314344653e+00 4.805365463280237e+00 9.181301979446038e+03 + 13560 9.944488293876476e-01 -6.069112023876447e+00 -5.951043728724810e+00 3.395725017616723e+00 5.073691439387050e+00 9.067365762513704e+03 + 13580 9.689443368391509e-01 -6.002724699338702e+00 -5.958027657150615e+00 3.721200971512336e+00 4.977858304601257e+00 9.088629516102366e+03 + 13600 1.017768333815674e+00 -6.045204071675910e+00 -5.948173767283750e+00 3.490288637881658e+00 5.047451661092518e+00 9.058629524412479e+03 + 13620 9.951900915305153e-01 -5.984311521089371e+00 -6.020952683926789e+00 3.745544341135308e+00 4.535145113921227e+00 9.281473334067881e+03 + 13640 1.010104472379224e+00 -5.986157579107998e+00 -6.052503241670323e+00 3.700292524648948e+00 4.319325463257979e+00 9.378935722652122e+03 + 13660 9.665759256792122e-01 -5.908079714554942e+00 -6.010465446292135e+00 4.192015697141136e+00 4.604100981365398e+00 9.249199962721705e+03 + 13680 1.019921594570815e+00 -5.977409693616421e+00 -6.018997983797384e+00 3.822614121022965e+00 4.583807723036770e+00 9.275459908730872e+03 + 13700 1.075648729941505e+00 -6.055504712025390e+00 -6.026285508699770e+00 3.361822369394123e+00 4.529603556546935e+00 9.297926924066951e+03 + 13720 1.019071102584764e+00 -5.973068271159070e+00 -6.050181981113328e+00 3.819549818843288e+00 4.376750962977889e+00 9.371727148238519e+03 + 13740 1.004586217260948e+00 -5.955604670964619e+00 -6.031186902816487e+00 3.883483455493209e+00 4.449478583887204e+00 9.313035333132730e+03 + 13760 1.059512337978601e+00 -6.042683548125341e+00 -6.009180491677015e+00 3.444634140129649e+00 4.637013874837166e+00 9.245252786426678e+03 + 13780 9.580622244218194e-01 -5.899697445292140e+00 -5.993841885035435e+00 4.239953733092989e+00 4.699361791282024e+00 9.198151296070644e+03 + 13800 1.037598070071333e+00 -6.025840891061420e+00 -5.986725564028316e+00 3.521566820569805e+00 4.746173081471180e+00 9.176342007764264e+03 + 13820 9.708924135690336e-01 -5.935790996106090e+00 -6.030435423281469e+00 3.989894876808374e+00 4.446431929789576e+00 9.310684550860882e+03 + 13840 9.602819063892584e-01 -5.928319903827726e+00 -5.967220120146290e+00 4.122326894767640e+00 4.898955832877426e+00 9.116673796631043e+03 + 13860 1.025095402485861e+00 -6.031321668245525e+00 -5.971727983622753e+00 3.480211775332939e+00 4.822407934529785e+00 9.130460554499901e+03 + 13880 1.010952403370913e+00 -6.018374363518667e+00 -5.971051848424547e+00 3.627320627850045e+00 4.899053832656030e+00 9.128393882975772e+03 + 13900 9.954852305458934e-01 -6.003466446066224e+00 -5.980928686400139e+00 3.731538741981649e+00 4.860954045691352e+00 9.158576020955768e+03 + 13920 1.016268356203339e+00 -6.040393583269869e+00 -5.981421243530807e+00 3.450737595293037e+00 4.789365896014811e+00 9.160099600531272e+03 + 13940 9.786833210774085e-01 -5.993806793602945e+00 -6.042654092684542e+00 3.701015891320091e+00 4.420527140898462e+00 9.348443506908668e+03 + 13960 9.891011305972971e-01 -6.023162590321609e+00 -5.990267208547309e+00 3.515827538648122e+00 4.704717911340030e+00 9.187209310112599e+03 + 13980 9.442672768223425e-01 -5.973580542903748e+00 -6.031816817120200e+00 3.779916672551878e+00 4.445514973966699e+00 9.314946270218148e+03 + 14000 9.662230875744618e-01 -6.029866675288530e+00 -6.036209942950221e+00 3.548577440083888e+00 4.512153415552960e+00 9.328525980611725e+03 + 14020 9.057001366030705e-01 -5.971819198831652e+00 -6.065881574534823e+00 3.803918754415768e+00 4.263798037022558e+00 9.420405868558724e+03 + 14040 9.301819357908376e-01 -6.042189919170998e+00 -6.026279973313184e+00 3.461961196613779e+00 4.553318567785511e+00 9.297890887721753e+03 + 14060 8.853153103102254e-01 -6.005653860336191e+00 -5.986461143461435e+00 3.714038311477717e+00 4.824245861835905e+00 9.175522205344349e+03 + 14080 9.634333916627276e-01 -6.144536272065914e+00 -5.960215555196624e+00 2.925784099731376e+00 4.984182179533591e+00 9.095330944708730e+03 + 14100 9.146867688940616e-01 -6.087054630302132e+00 -5.995379551379986e+00 3.200206912203148e+00 4.726619402046726e+00 9.202877988891187e+03 + 14120 9.320601300576017e-01 -6.120416620742057e+00 -5.984551569168874e+00 3.032236014892496e+00 4.812394166074492e+00 9.169693796201498e+03 + 14140 9.579624282181181e-01 -6.156442505095035e+00 -5.971433627928624e+00 2.884273812240886e+00 4.946623414961636e+00 9.129577299428871e+03 + 14160 8.326997641141263e-01 -5.960054838466997e+00 -6.033563054381723e+00 3.953368026075111e+00 4.531272474933104e+00 9.320357899573894e+03 + 14180 9.342928401337091e-01 -6.091357131979897e+00 -5.986228416183719e+00 3.259737759445618e+00 4.863403114163461e+00 9.174812310653626e+03 + 14200 9.392304837995251e-01 -6.065838061702508e+00 -6.009689871706525e+00 3.384721608663775e+00 4.707133204525030e+00 9.246814632189415e+03 + 14220 9.353550765957238e-01 -6.021225879618004e+00 -5.991932337424866e+00 3.584200322791232e+00 4.752408375225237e+00 9.192279963690353e+03 + 14240 9.516997093865492e-01 -6.004685039595415e+00 -5.978853743004056e+00 3.738064415579393e+00 4.886391717987205e+00 9.152216323487915e+03 + 14260 9.744973590202504e-01 -6.001012259015856e+00 -5.991118878569472e+00 3.711526796643562e+00 4.768336118162376e+00 9.189799641186473e+03 + 14280 9.750995025775289e-01 -5.969265575310930e+00 -6.051209223073906e+00 3.842915230055302e+00 4.372382123861784e+00 9.374920599762667e+03 + 14300 1.018366323221876e+00 -6.011298827059964e+00 -5.999794814759222e+00 3.651329113011656e+00 4.717386931882663e+00 9.216428120614755e+03 + 14320 9.979290218700698e-01 -5.965919006478767e+00 -6.011467246638254e+00 3.905903568887151e+00 4.644358525323991e+00 9.252276033007809e+03 + 14340 1.052726667664419e+00 -6.037436691027604e+00 -6.002583273323571e+00 3.521525333453916e+00 4.721659051459429e+00 9.224988001035070e+03 + 14360 1.030879212583412e+00 -5.998053751675562e+00 -6.013217845216550e+00 3.683691292169797e+00 4.596616720421551e+00 9.257675920509515e+03 + 14380 1.011231685314199e+00 -5.967098045691603e+00 -5.993112280840384e+00 3.901644853731905e+00 4.752267089817725e+00 9.195921194674658e+03 + 14400 1.064733780866991e+00 -6.045409331912724e+00 -5.997739293580194e+00 3.484811887017156e+00 4.758540624037134e+00 9.210109199271268e+03 + 14420 1.029990037786566e+00 -5.995528438258201e+00 -5.987971467337595e+00 3.758574219667636e+00 4.801967516131228e+00 9.180157716110933e+03 + 14440 1.046846247597656e+00 -6.024125187028860e+00 -5.974091570165323e+00 3.594818602892671e+00 4.882119373600283e+00 9.137688259168341e+03 + 14460 1.001521376197511e+00 -5.961888553046335e+00 -6.005424624489557e+00 3.926026168955821e+00 4.676035309543554e+00 9.233707345828185e+03 + 14480 1.053895832952659e+00 -6.047984239191268e+00 -6.008159553253616e+00 3.429322317435656e+00 4.658001826939883e+00 9.242130150625930e+03 + 14500 9.921460814263839e-01 -5.969313102670810e+00 -6.006104545531834e+00 3.848091808048848e+00 4.636829649683470e+00 9.235801958039723e+03 + 14520 9.943852645897678e-01 -5.987614268106825e+00 -6.041976592007347e+00 3.735686836261388e+00 4.423529959882156e+00 9.346357195075043e+03 + 14540 1.023016709090836e+00 -6.049106863874751e+00 -5.990298674743202e+00 3.462787238011426e+00 4.800472960542640e+00 9.187293631468870e+03 + 14560 9.884333435519419e-01 -6.019921560248269e+00 -5.992157310805880e+00 3.579885737309376e+00 4.739312354111287e+00 9.192986916183747e+03 + 14580 1.049897411424165e+00 -6.139732067402549e+00 -5.983188251073981e+00 2.929159951447253e+00 4.828058769883175e+00 9.165503039540958e+03 + 14600 9.651573841839691e-01 -6.044158789801968e+00 -5.995332456429395e+00 3.453723079967800e+00 4.734091442043784e+00 9.202714395870797e+03 + 14620 9.453523274364023e-01 -6.046054717876401e+00 -5.992371740194324e+00 3.502586541198240e+00 4.810842506462675e+00 9.193658634593347e+03 + 14640 9.853353847441770e-01 -6.136595985130529e+00 -5.988422068601172e+00 2.921387128129163e+00 4.772224686680209e+00 9.181548848121294e+03 + 14660 8.923250831768785e-01 -6.027125297262975e+00 -6.005525625693679e+00 3.552217959068511e+00 4.676246615757786e+00 9.234021551433425e+03 + 14680 9.228874180822773e-01 -6.093024565484999e+00 -5.982354304744548e+00 3.176718975315279e+00 4.812204738654453e+00 9.162980552178109e+03 + 14700 9.572710976781926e-01 -6.157851480222909e+00 -6.004274331361785e+00 2.816443893015322e+00 4.698307647762880e+00 9.230200114807767e+03 + 14720 9.176331832190230e-01 -6.105741058493149e+00 -5.996835784938701e+00 3.134225757831238e+00 4.759576691617497e+00 9.207332262974975e+03 + 14740 8.830362594213180e-01 -6.052974543814891e+00 -5.974715328513976e+00 3.459413437129864e+00 4.908789961962148e+00 9.139584403103012e+03 + 14760 9.091010829605519e-01 -6.076518086052246e+00 -6.027547969791208e+00 3.282443998626163e+00 4.563637984298051e+00 9.301820460729452e+03 + 14780 9.708361502904458e-01 -6.140048433627999e+00 -5.992879852440447e+00 2.947959954202735e+00 4.793024721645994e+00 9.195219942439348e+03 + 14800 9.222220010180092e-01 -6.022285400635354e+00 -6.010178988033177e+00 3.547995178954994e+00 4.617512073577994e+00 9.248322725980086e+03 + 14820 9.332349448915777e-01 -5.979593942277390e+00 -6.018790312403501e+00 3.822117625442727e+00 4.597046002559921e+00 9.274827087037835e+03 + 14840 1.012458235412856e+00 -6.036131265473125e+00 -5.996320833027842e+00 3.552907760980256e+00 4.781505424725577e+00 9.205767767045592e+03 + 14860 1.006789647209557e+00 -5.986823355632439e+00 -6.034798996925952e+00 3.703265347610308e+00 4.427781791096462e+00 9.324175055935153e+03 + 14880 1.019824177045552e+00 -5.981645440070493e+00 -6.022213546705503e+00 3.784020704152293e+00 4.551072357959856e+00 9.285378699247032e+03 + 14900 1.008427924971822e+00 -5.951206752684636e+00 -6.034167513272133e+00 3.898129512916136e+00 4.421755987486515e+00 9.322246493739389e+03 + 14920 1.016067588044179e+00 -5.955080092730041e+00 -6.001980037163976e+00 3.903192632953148e+00 4.633885894270554e+00 9.223090311148435e+03 + 14940 9.943516113113841e-01 -5.918571601138767e+00 -6.033267921724736e+00 4.094807240738207e+00 4.436203218735327e+00 9.319435690527122e+03 + 14960 1.038363945597395e+00 -5.982554952527606e+00 -6.024513467468314e+00 3.771802691415798e+00 4.530870405567057e+00 9.292460141753703e+03 + 14980 1.021125360889804e+00 -5.959952334247435e+00 -6.041158491683223e+00 3.848690013495274e+00 4.382391690886729e+00 9.343815768686029e+03 + 15000 9.832357746842078e-01 -5.910430194942424e+00 -6.001923502476149e+00 4.147872886149311e+00 4.622504155747076e+00 9.222927883713255e+03 + 15020 1.003089927786025e+00 -5.947370401790578e+00 -5.996890339145149e+00 3.930887048308773e+00 4.646535904833288e+00 9.207494463419454e+03 + 15040 1.041801518997001e+00 -6.013870785578861e+00 -6.010821645086613e+00 3.621984011903171e+00 4.639492648462625e+00 9.250301615584005e+03 + 15060 1.006697359125730e+00 -5.975496490226733e+00 -5.996150903307937e+00 3.824521070447352e+00 4.705920234274984e+00 9.205240662727867e+03 + 15080 1.012631413497304e+00 -5.999607206315405e+00 -6.003502616685140e+00 3.706355611479565e+00 4.683987562323743e+00 9.227813430641863e+03 + 15100 1.027255146869554e+00 -6.042384192595095e+00 -5.998238370266910e+00 3.473302656425250e+00 4.726794799777610e+00 9.211644696096027e+03 + 15120 9.894155504952339e-01 -6.008699273450648e+00 -5.980242673304412e+00 3.644298205295747e+00 4.807700406980079e+00 9.156487202256354e+03 + 15140 9.832774122211521e-01 -6.020080304146821e+00 -5.978151429201674e+00 3.583278459744251e+00 4.824040548151716e+00 9.150113982641389e+03 + 15160 1.033127892111074e+00 -6.115063577947739e+00 -5.992888920138225e+00 3.080943117045043e+00 4.782488908654463e+00 9.195248184745780e+03 + 15180 9.982011358099073e-01 -6.084855415484716e+00 -5.981584756380695e+00 3.296452584062660e+00 4.889448689720798e+00 9.160598923735270e+03 + 15200 9.722445357820864e-01 -6.066008956350461e+00 -5.987541368873890e+00 3.331657739749601e+00 4.782230769859993e+00 9.178845260531720e+03 + 15220 9.697117600045936e-01 -6.076980706488086e+00 -5.964637407185260e+00 3.322542062430765e+00 4.967634672096969e+00 9.108814339770330e+03 + 15240 9.832485597782736e-01 -6.109452710834826e+00 -5.974101731613088e+00 3.117294526507890e+00 4.894500794695452e+00 9.137751148142410e+03 + 15260 9.530744039852279e-01 -6.075001847666452e+00 -6.008808987456170e+00 3.291602992817331e+00 4.671692639456783e+00 9.244114475685166e+03 + 15280 9.350713136243083e-01 -6.053466727689420e+00 -5.968473396226428e+00 3.447470623822618e+00 4.935515485758656e+00 9.120521198299575e+03 + 15300 1.018558224795023e+00 -6.175915200941908e+00 -5.956287137417533e+00 2.761827135832458e+00 5.022965463922409e+00 9.083356648807123e+03 + 15320 9.223022270300407e-01 -6.025468412608612e+00 -5.977945831421264e+00 3.584919117801911e+00 4.857801133075331e+00 9.149457418138692e+03 + 15340 9.507897179144256e-01 -6.048682332276661e+00 -5.948228117698299e+00 3.444455850149162e+00 5.021279495497583e+00 9.058799777776147e+03 + 15360 1.001344669912450e+00 -6.086469755467908e+00 -5.985102541136126e+00 3.225468516271051e+00 4.807534747489860e+00 9.171394484469665e+03 + 15380 9.736032232818543e-01 -5.996117397311394e+00 -6.031414157338427e+00 3.717760397190810e+00 4.515080938959631e+00 9.313751795539005e+03 + 15400 9.660825305161991e-01 -5.934922969023227e+00 -6.009910917126087e+00 4.047014936067699e+00 4.616422533713615e+00 9.247514364767621e+03 + 15420 1.051481913102264e+00 -6.017158126143888e+00 -6.012312108276678e+00 3.611131510649913e+00 4.638958095162272e+00 9.254892312865863e+03 + 15440 1.099503085714131e+00 -6.055511174579758e+00 -6.026779592155419e+00 3.361026906408012e+00 4.526008098886575e+00 9.299448593902765e+03 + 15460 1.044939292337747e+00 -5.954397370079508e+00 -6.027894300748307e+00 3.983947054569640e+00 4.561916305056133e+00 9.302886859304908e+03 + 15480 1.111268001139891e+00 -6.042927797800162e+00 -5.990274548919131e+00 3.485485845470278e+00 4.787828948609089e+00 9.187227962608147e+03 + 15500 1.009552530804799e+00 -5.888964164140117e+00 -6.027934097424412e+00 4.311729058516539e+00 4.513742196070448e+00 9.302972745392335e+03 + 15520 1.030246793721443e+00 -5.922429131783099e+00 -5.980888862399471e+00 4.092362270345772e+00 4.756677450532488e+00 9.158440348080954e+03 + 15540 9.975922210702153e-01 -5.878299052398336e+00 -5.983743040819674e+00 4.410757828427396e+00 4.805282129507598e+00 9.167175216530726e+03 + 15560 1.082418671989176e+00 -6.012082066018948e+00 -5.981664419063939e+00 3.661487487040021e+00 4.836150322971342e+00 9.160854457807143e+03 + 15580 1.042842259432051e+00 -5.968012360496712e+00 -6.027916461617234e+00 3.847893442011583e+00 4.503914823247863e+00 9.302954905183999e+03 + 15600 9.653681620221185e-01 -5.872321953026235e+00 -6.051562613523336e+00 4.363348494344606e+00 4.334120884367687e+00 9.376017262160663e+03 + 15620 1.039465066011725e+00 -6.006774385734478e+00 -5.962908953256215e+00 3.685101084428548e+00 4.936983185872472e+00 9.103522105930297e+03 + 15640 9.959993876069543e-01 -5.967575392147994e+00 -5.965987970319528e+00 3.869014656861653e+00 4.878129878653439e+00 9.112918577795066e+03 + 15660 1.039514543615304e+00 -6.058726867450306e+00 -5.971587057383079e+00 3.397063867146809e+00 4.897434141394857e+00 9.130035600839274e+03 + 15680 9.186810047381179e-01 -5.907155615932896e+00 -6.055283683674707e+00 4.160714266887610e+00 4.310139979169731e+00 9.387538328122100e+03 + 15700 9.852933271298693e-01 -6.032771273925749e+00 -6.007576608349518e+00 3.493909053596011e+00 4.638580722196631e+00 9.240318332336854e+03 + 15720 9.958565645542300e-01 -6.071000268390845e+00 -5.976853072587240e+00 3.357048121285746e+00 4.897655888821513e+00 9.146121541915845e+03 + 15740 9.479532805469607e-01 -6.019202457797280e+00 -5.986378713860523e+00 3.649269408000298e+00 4.837748425143114e+00 9.175269743283417e+03 + 15760 9.597754537155575e-01 -6.050471197120063e+00 -6.002816946227338e+00 3.437929066877525e+00 4.711567149975049e+00 9.225698505442859e+03 + 15780 9.587271125857375e-01 -6.060165679976816e+00 -5.977881776449152e+00 3.397055459805893e+00 4.869542367254656e+00 9.149242219198843e+03 + 15800 8.988244408203014e-01 -5.975257475101839e+00 -5.940456213488443e+00 3.817880514506519e+00 5.017714744168469e+00 9.035150109434859e+03 + 15820 9.524300343673753e-01 -6.049913923969113e+00 -5.939527099622970e+00 3.429400536465309e+00 5.063258764166720e+00 9.032333577428828e+03 + 15840 9.387125985957174e-01 -6.015463356773948e+00 -5.986087733911527e+00 3.606963586137629e+00 4.775642958476592e+00 9.174389475113712e+03 + 15860 9.442015499304807e-01 -6.001048429168136e+00 -5.999132947280391e+00 3.690804105165445e+00 4.701803098584736e+00 9.214403304535377e+03 + 15880 1.040460992919469e+00 -6.108541595362967e+00 -6.019497522492548e+00 3.087561493861394e+00 4.598866339809084e+00 9.277014361750218e+03 + 15900 1.006307656520622e+00 -6.005912562994236e+00 -5.990916974180545e+00 3.694756899663111e+00 4.780863891191201e+00 9.189190949267684e+03 + 15920 9.739650855508706e-01 -5.891259265195796e+00 -6.021120702384584e+00 4.242856157162151e+00 4.497171688831672e+00 9.282005751951348e+03 + 15940 1.043529363485901e+00 -5.923286296156697e+00 -6.044643440085450e+00 4.056327576174173e+00 4.359476075777945e+00 9.354618170961621e+03 + 15960 1.032482521468340e+00 -5.863832363752441e+00 -6.021722886296762e+00 4.440108801777649e+00 4.533476987848764e+00 9.283842919130395e+03 + 15980 1.090211966623664e+00 -5.929399980603203e+00 -6.015511943810689e+00 4.071797202943952e+00 4.577328984423326e+00 9.264742121177609e+03 + 16000 1.119917871770703e+00 -5.970547985839363e+00 -6.006814286928043e+00 3.876388679874490e+00 4.668141966831338e+00 9.237978198065348e+03 + 16020 1.038670480226327e+00 -5.856963451948980e+00 -6.035899006772087e+00 4.420738700713010e+00 4.393263054731107e+00 9.327570749707285e+03 + 16040 1.111960006598479e+00 -5.979498946201963e+00 -5.959517961937144e+00 3.791270375491699e+00 4.906004279187609e+00 9.093176530397619e+03 + 16060 1.014578791306964e+00 -5.852527921606540e+00 -6.034214102547810e+00 4.442263699061439e+00 4.398993532251034e+00 9.322328904493563e+03 + 16080 1.070143013802163e+00 -5.958127181542800e+00 -6.045957559482914e+00 3.933772825697144e+00 4.429437203857947e+00 9.358660726208411e+03 + 16100 1.059385820968090e+00 -5.973587218445555e+00 -6.005730123436942e+00 3.871573200981748e+00 4.687003666422731e+00 9.234642397685626e+03 + 16120 1.029147721603271e+00 -5.961962182250252e+00 -6.040404587610968e+00 3.920161692165637e+00 4.469733261661405e+00 9.341479963451662e+03 + 16140 1.084545860741448e+00 -6.079749110082415e+00 -5.965772735817823e+00 3.352040935149971e+00 5.006510913964171e+00 9.112270055112816e+03 + 16160 1.001544712843063e+00 -5.988560144066131e+00 -6.008293208888090e+00 3.735685358272912e+00 4.622375046383311e+00 9.242501135975748e+03 + 16180 1.021610862144649e+00 -6.046708635009876e+00 -5.947599647485053e+00 3.500237023900787e+00 5.069336167334580e+00 9.056884226831984e+03 + 16200 9.996196822025203e-01 -6.035980717875709e+00 -5.963088802893962e+00 3.561561116568659e+00 4.980117772381245e+00 9.104081147135690e+03 + 16220 9.667280948315832e-01 -6.003873912140834e+00 -6.029266740648056e+00 3.676163162286024e+00 4.530353611470045e+00 9.307120620459347e+03 + 16240 1.044814511361942e+00 -6.133482541393508e+00 -5.996537979429706e+00 2.960421670791425e+00 4.746778537690048e+00 9.206449716741608e+03 + 16260 9.828113555857294e-01 -6.055053703745427e+00 -5.997998235710874e+00 3.397160823790285e+00 4.724782150549835e+00 9.210913682184944e+03 + 16280 9.836200616351478e-01 -6.066448569737368e+00 -5.986829781708607e+00 3.329342005862354e+00 4.786525407691126e+00 9.176661220746782e+03 + 16300 9.706816758214837e-01 -6.053160736146162e+00 -6.006920116031742e+00 3.385326521662988e+00 4.650847318072824e+00 9.238294350015800e+03 + 16320 9.386393254113247e-01 -6.007429758212115e+00 -5.955763681525857e+00 3.699919327205507e+00 4.996593934837527e+00 9.081736223915159e+03 + 16340 1.006175033992813e+00 -6.103511373014333e+00 -5.966370993012679e+00 3.124911492572879e+00 4.912392776947598e+00 9.114084855988927e+03 + 16360 9.449112569405301e-01 -6.003778301851324e+00 -6.004391352276248e+00 3.627280468316835e+00 4.623760237907673e+00 9.230528527875267e+03 + 16380 9.963027094050009e-01 -6.064812716379080e+00 -5.965389259077392e+00 3.350432476367847e+00 4.921337353924430e+00 9.111087226040068e+03 + 16400 1.014161861864463e+00 -6.068100585936381e+00 -5.991555765197051e+00 3.340021717886150e+00 4.779553923844110e+00 9.191138998277158e+03 + 16420 9.630807216164625e-01 -5.962556997959725e+00 -5.999339510013300e+00 3.890338466661848e+00 4.679127590374874e+00 9.215008359607682e+03 + 16440 1.042241325292144e+00 -6.044672656004720e+00 -5.976653483744734e+00 3.471736052071346e+00 4.862312665121074e+00 9.145504342133841e+03 + 16460 1.001279370843563e+00 -5.940600374719270e+00 -5.989486927483195e+00 4.008885886377403e+00 4.728171735237356e+00 9.184792441285039e+03 + 16480 1.006910426607016e+00 -5.906953155649825e+00 -5.975235335073020e+00 4.169410384592255e+00 4.777323543711156e+00 9.141146286262157e+03 + 16500 1.111025541553890e+00 -6.022240757674968e+00 -5.966771416757488e+00 3.553932484943734e+00 4.872446024344673e+00 9.115328194534928e+03 + 16520 1.064529453378381e+00 -5.926147619288513e+00 -6.007275850023660e+00 4.077552128599220e+00 4.611701273164875e+00 9.239402807591428e+03 + 16540 1.074024504345767e+00 -5.925433266325845e+00 -6.024506086833570e+00 4.062009574146015e+00 4.493118107321229e+00 9.292438858568908e+03 + 16560 1.102003404249147e+00 -5.963960317218174e+00 -6.058823659801582e+00 3.797482493305224e+00 4.252762500136474e+00 9.398518125555918e+03 + 16580 1.053479012049155e+00 -5.898744507071199e+00 -6.044286845375987e+00 4.189570204657825e+00 4.353843575507670e+00 9.353473808470189e+03 + 16600 1.099383376681937e+00 -5.980586518079263e+00 -5.987018179436031e+00 3.832879653911318e+00 4.795948059104374e+00 9.177215251869593e+03 + 16620 1.057877377693240e+00 -5.934993035161610e+00 -5.975679199285806e+00 4.069402999275983e+00 4.835776748711298e+00 9.142522169908640e+03 + 16640 1.096410518871104e+00 -6.008649279470569e+00 -5.967281847206526e+00 3.678556379607090e+00 4.916094577256681e+00 9.116883957867251e+03 + 16660 1.004496589334081e+00 -5.890957468562389e+00 -6.007502950185087e+00 4.293880951539177e+00 4.624658760706651e+00 9.240084361635689e+03 + 16680 1.019662639971786e+00 -5.931355049517618e+00 -6.012084920449190e+00 4.109406119380905e+00 4.645842707584671e+00 9.254167945428246e+03 + 16700 1.043591898595632e+00 -5.984075066170873e+00 -6.009995685516705e+00 3.729608626620457e+00 4.580768419133815e+00 9.247756112618841e+03 + 16720 9.651169108758548e-01 -5.885026314512714e+00 -6.042297323062252e+00 4.328137530956362e+00 4.425063062254993e+00 9.347343300611061e+03 + 16740 1.025443653125723e+00 -5.993401393192968e+00 -6.056046010240834e+00 3.702573411402036e+00 4.342858326090031e+00 9.389911064706876e+03 + 16760 1.040321625566783e+00 -6.034073341909074e+00 -5.997101654410751e+00 3.542229264351756e+00 4.754526415317273e+00 9.208147637483760e+03 + 16780 9.859775011202554e-01 -5.968991458205546e+00 -5.983237602138166e+00 3.890539593259309e+00 4.808736030214556e+00 9.165634010108388e+03 + 16800 9.884653421519799e-01 -5.984580875168528e+00 -6.021679281104608e+00 3.807460535710798e+00 4.594435747866063e+00 9.283709998166285e+03 + 16820 1.062280055040524e+00 -6.106553201186487e+00 -5.966033022081692e+00 3.125250965947634e+00 4.932139579794802e+00 9.113097466572090e+03 + 16840 1.010264574921863e+00 -6.041056549723880e+00 -5.986331963349495e+00 3.449011581359245e+00 4.763248624923334e+00 9.175142850191049e+03 + 16860 9.734692393836242e-01 -5.994898905507279e+00 -6.025793627473734e+00 3.681624955123896e+00 4.504222680649743e+00 9.296401595530804e+03 + 16880 9.578470383813710e-01 -5.978413189180635e+00 -6.018094246722809e+00 3.814413437190905e+00 4.586558664159933e+00 9.272696678412965e+03 + 16900 9.544746446363546e-01 -5.979279196178286e+00 -6.036303196646175e+00 3.827116398296035e+00 4.499675763173863e+00 9.328824825582569e+03 + 16920 9.790937728005572e-01 -6.019920930596426e+00 -5.963884077374939e+00 3.558784536610578e+00 4.880556819483364e+00 9.106524369040393e+03 + 16940 9.979087284754528e-01 -6.048847328415294e+00 -5.975871213036347e+00 3.473593830425984e+00 4.892633977949255e+00 9.143118078260639e+03 + 16960 1.001372384316250e+00 -6.053325648519742e+00 -5.983008823678847e+00 3.347450299795585e+00 4.751220389525482e+00 9.164970104888862e+03 + 16980 9.495369561054742e-01 -5.972332810885871e+00 -5.988802375661896e+00 3.900722625474983e+00 4.806151835874136e+00 9.182673663902007e+03 + 17000 1.004652804553360e+00 -6.044052056270499e+00 -5.970439510000572e+00 3.468775027194833e+00 4.891469659381471e+00 9.126519084373687e+03 + 17020 9.504618321210833e-01 -5.945855898328440e+00 -6.025813754187435e+00 3.946928114512158e+00 4.487797732731599e+00 9.296471653958220e+03 + 17040 9.983326289373902e-01 -5.987683425417126e+00 -6.033128197146650e+00 3.760844449876864e+00 4.499893538050242e+00 9.319030020133772e+03 + 17060 1.037531948287053e+00 -6.000301804220634e+00 -6.053640672452377e+00 3.678189730507182e+00 4.371909694957332e+00 9.382441504698101e+03 + 17080 1.071576028171232e+00 -5.999175394344467e+00 -6.011137293860008e+00 3.734975150861554e+00 4.666288072745356e+00 9.251286249569876e+03 + 17100 1.081463689206868e+00 -5.962188168661991e+00 -6.001824629087645e+00 3.940893639798026e+00 4.713294950311493e+00 9.222634003107041e+03 + 17120 1.089739097842401e+00 -5.936591719396770e+00 -5.998052803917646e+00 4.015194653830019e+00 4.662275595439056e+00 9.211083623665278e+03 + 17140 1.095062054425581e+00 -5.919251033059413e+00 -5.985926074688694e+00 4.101040800105736e+00 4.718182393141062e+00 9.173885563448477e+03 + 17160 1.071433007647596e+00 -5.872272233969349e+00 -6.016217837204072e+00 4.314569469066353e+00 4.488011539782468e+00 9.266875182613381e+03 + 17180 1.119594979875887e+00 -5.942729821417191e+00 -5.987977119343153e+00 3.984910203084596e+00 4.725093216396998e+00 9.180161367041119e+03 + 17200 1.054708662091585e+00 -5.854703743288421e+00 -6.006614074586382e+00 4.491109658008900e+00 4.618817027648215e+00 9.237323055784636e+03 + 17220 1.066125323894024e+00 -5.888626101234864e+00 -5.963631510740051e+00 4.306677850796348e+00 4.875985182367957e+00 9.105711603604965e+03 + 17240 1.084034748602998e+00 -5.936699012285631e+00 -5.999056755722497e+00 4.045048038894926e+00 4.686980226250829e+00 9.214102177940282e+03 + 17260 1.043937442965128e+00 -5.908788449510177e+00 -6.024302339365368e+00 4.161939004967312e+00 4.498640373702119e+00 9.291776724046724e+03 + 17280 1.038133033742346e+00 -5.934069048245194e+00 -5.998489327863095e+00 4.005530476846223e+00 4.635619262274180e+00 9.212415672608238e+03 + 17300 1.053403595654856e+00 -5.993219027709928e+00 -6.027715446049482e+00 3.746324213218287e+00 4.548240440809083e+00 9.302284131722656e+03 + 17320 9.804201492613073e-01 -5.918520887386850e+00 -6.015699229815652e+00 4.139777174183189e+00 4.581764093657124e+00 9.265295255489031e+03 + 17340 1.009418364913800e+00 -5.988561663032932e+00 -5.989948503175782e+00 3.764276232328435e+00 4.756312781615374e+00 9.186183034808422e+03 + 17360 9.856701866056794e-01 -5.971713635179905e+00 -5.936392196807986e+00 3.914590182061049e+00 5.117411347167529e+00 9.022807187983572e+03 + 17380 9.720941125870967e-01 -5.963082935112788e+00 -5.977274446888640e+00 3.849284019028471e+00 4.767794162282177e+00 9.147428668226667e+03 + 17400 1.024905459126536e+00 -6.048799989359965e+00 -5.995817597246074e+00 3.390803626240889e+00 4.695036720757534e+00 9.204221936015509e+03 + 17420 1.026567097003944e+00 -6.056620477627159e+00 -5.965658930403348e+00 3.386912226582850e+00 4.909227506995913e+00 9.111943347269387e+03 + 17440 1.008675691728021e+00 -6.033161235131350e+00 -6.016006282911424e+00 3.441059898403239e+00 4.539566288770327e+00 9.266269625405585e+03 + 17460 9.080984743903288e-01 -5.887010572457441e+00 -6.085385614325908e+00 4.182494666418110e+00 4.043394477570856e+00 9.481036018013001e+03 + 17480 9.944630232760490e-01 -6.018677164324184e+00 -6.011120618402915e+00 3.610259490708203e+00 4.653650346759831e+00 9.251217081557557e+03 + 17500 9.759776930851446e-01 -5.993427419008173e+00 -5.992912873755718e+00 3.743618696159810e+00 4.746573294625026e+00 9.195312300845768e+03 + 17520 1.010669362886012e+00 -6.044221591353360e+00 -6.000416481077136e+00 3.444882730921969e+00 4.696418452946955e+00 9.218329125910859e+03 + 17540 9.696818064539382e-01 -5.982387257154176e+00 -5.985346195434657e+00 3.772825948990143e+00 4.755835267489407e+00 9.172112083508009e+03 + 17560 9.680526626590338e-01 -5.977833277252081e+00 -6.004938515963047e+00 3.787176163303919e+00 4.631533688103421e+00 9.232217942798026e+03 + 17580 1.014847341131473e+00 -6.041027730257754e+00 -6.002889013966105e+00 3.447511959480200e+00 4.666510370374117e+00 9.225909519957588e+03 + 17600 9.639929781539910e-01 -5.958297852564044e+00 -6.016722680928043e+00 3.886107046858323e+00 4.550622641179274e+00 9.268450157788748e+03 + 17620 1.034196136801247e+00 -6.052735836127812e+00 -6.005093962045483e+00 3.402367666734574e+00 4.675934680271492e+00 9.232696278514597e+03 + 17640 9.664300240503234e-01 -5.938142550798120e+00 -6.025207511888059e+00 4.077629333046271e+00 4.577688853208656e+00 9.294609892481116e+03 + 17660 1.018496691878853e+00 -5.998708777162175e+00 -6.025393291009647e+00 3.687772443624044e+00 4.534545835696692e+00 9.295173734317876e+03 + 17680 1.000893067325556e+00 -5.949594417650285e+00 -6.015691959030227e+00 3.923164327209895e+00 4.543622016044798e+00 9.265292685990989e+03 + 17700 9.875844681225524e-01 -5.901365411726051e+00 -6.051410544350759e+00 4.167749972521387e+00 4.306167601581083e+00 9.375555653763018e+03 + 17720 1.091080435620308e+00 -6.023496503815850e+00 -5.981246069651732e+00 3.538051346224706e+00 4.780659877428628e+00 9.159581426765624e+03 + 17740 1.044076003381774e+00 -5.922805327342090e+00 -6.015064694861939e+00 4.077079855160536e+00 4.547312289770577e+00 9.263340055211049e+03 + 17760 1.049183665095641e+00 -5.901273140642618e+00 -6.004902191024042e+00 4.223927839828479e+00 4.628873795994624e+00 9.232092851863188e+03 + 17780 1.005755360987675e+00 -5.814601715463706e+00 -6.043867885901649e+00 4.662909328192946e+00 4.346427498713062e+00 9.352179170585412e+03 + 17800 1.123798019815680e+00 -5.973260817185960e+00 -5.989676699570317e+00 3.826812094106307e+00 4.732549557105740e+00 9.185376142099378e+03 + 17820 1.098409247446478e+00 -5.927303556103620e+00 -6.036001301245498e+00 4.116500032396906e+00 4.492340758870546e+00 9.327888138208251e+03 + 17840 1.081979724386392e+00 -5.907038809368990e+00 -6.006526392232447e+00 4.202932719003422e+00 4.631659622547763e+00 9.237085743300939e+03 + 17860 1.126965292422963e+00 -5.986932840313537e+00 -6.008254895813187e+00 3.794832492086718e+00 4.672397949830306e+00 9.242401210729473e+03 + 17880 1.044496481306441e+00 -5.892342411053446e+00 -6.063586350752452e+00 4.231022726723773e+00 4.247713525058054e+00 9.413268314620746e+03 + 17900 1.072806564419027e+00 -5.974786835003923e+00 -6.020788033829181e+00 3.827999723056787e+00 4.563853720739644e+00 9.280970728889348e+03 + 17920 1.046715333447897e+00 -5.987292007077288e+00 -6.037255987939306e+00 3.704566270182039e+00 4.417665360171289e+00 9.331776613406993e+03 + 17940 9.871622359596613e-01 -5.948360585014385e+00 -5.992190839105964e+00 3.966349846148713e+00 4.714669744444965e+00 9.193103374892153e+03 + 17960 1.035759543109347e+00 -6.057212635947933e+00 -5.978937516486671e+00 3.414218575338493e+00 4.863686424320649e+00 9.152497791373864e+03 + 17980 9.276315670765530e-01 -5.922255371906326e+00 -6.041109556066617e+00 4.086760594213454e+00 4.404281476139506e+00 9.343664760364230e+03 + 18000 9.994602941231261e-01 -6.044402664126796e+00 -6.008713400103766e+00 3.446190129203910e+00 4.651123406119905e+00 9.243835523090673e+03 + 18020 1.024094209922603e+00 -6.092357347850473e+00 -5.989967330668676e+00 3.184781648302612e+00 4.772720971764443e+00 9.186307080193828e+03 + 18040 9.816932130083108e-01 -6.036685205199944e+00 -6.038198072298032e+00 3.442041014620181e+00 4.433353897627533e+00 9.334672024833904e+03 + 18060 9.977535787655942e-01 -6.065099527563580e+00 -5.989271096559059e+00 3.324435072370272e+00 4.759853657610006e+00 9.184128048579842e+03 + 18080 9.623895290207776e-01 -6.014803089909850e+00 -5.997080714813748e+00 3.635374973102222e+00 4.737139593432719e+00 9.208090313060540e+03 + 18100 9.765507279857853e-01 -6.035197675566198e+00 -5.967303356423883e+00 3.524843539810195e+00 4.914703226937302e+00 9.116943479876903e+03 + 18120 8.971790237430630e-01 -5.911094583522542e+00 -5.987842040163612e+00 4.138079145932101e+00 4.697383373268544e+00 9.179731030369752e+03 + 18140 9.865708333596941e-01 -6.030732792353082e+00 -5.960608388102626e+00 3.523216367340401e+00 4.925881548263009e+00 9.096502323646715e+03 + 18160 1.018304057735848e+00 -6.060007905136610e+00 -5.978821511271845e+00 3.396764996153095e+00 4.862949833278423e+00 9.152140998120156e+03 + 18180 9.924347898217442e-01 -6.003039951609093e+00 -6.044040735654973e+00 3.636484284390367e+00 4.401051437548098e+00 9.352710476723580e+03 + 18200 1.046266652036784e+00 -6.063193289205522e+00 -5.980215979800755e+00 3.364001410870856e+00 4.840469962170157e+00 9.156420428805473e+03 + 18220 9.726369871085755e-01 -5.933046065279984e+00 -5.997515360623295e+00 4.042440923452824e+00 4.672248253000320e+00 9.209419649889160e+03 + 18240 1.000680729655884e+00 -5.952705788170711e+00 -5.984881541696477e+00 3.964530960987230e+00 4.779772805060518e+00 9.170657502295988e+03 + 18260 1.005699594500001e+00 -5.933831727269307e+00 -5.965193077998222e+00 4.031329006744192e+00 4.851247277705419e+00 9.110487394114312e+03 + 18280 1.077118484116914e+00 -6.011938987463949e+00 -5.972701543788044e+00 3.684112583728944e+00 4.909420057290776e+00 9.133430880844697e+03 + 18300 9.990112283295048e-01 -5.869349721883754e+00 -6.063486223444696e+00 4.390070705230780e+00 4.275308870741332e+00 9.412953534466322e+03 + 18320 1.040505685339923e+00 -5.907535782941021e+00 -6.083224876144481e+00 4.192043052185379e+00 4.183209091211805e+00 9.474289646547797e+03 + 18340 1.118563194171285e+00 -6.005459271936644e+00 -6.024560363388957e+00 3.669413871015970e+00 4.559732448012436e+00 9.292612414694271e+03 + 18360 1.099393745030746e+00 -5.968688166288169e+00 -6.017803029209755e+00 3.891664277870881e+00 4.609639134474663e+00 9.271781544877773e+03 + 18380 1.117738317076156e+00 -5.995555976155166e+00 -5.996983086373443e+00 3.770579879062371e+00 4.762385191344435e+00 9.207792792265043e+03 + 18400 1.041770755613395e+00 -5.891764186029680e+00 -6.045957724228440e+00 4.228174764257883e+00 4.342771606547684e+00 9.358681210779096e+03 + 18420 1.027575024167783e+00 -5.896844691165052e+00 -6.006378082023485e+00 4.254539594701370e+00 4.625581914154795e+00 9.236629354358782e+03 + 18440 9.989424698645518e-01 -5.899582655153067e+00 -6.011609444866338e+00 4.285069783216396e+00 4.641794620593111e+00 9.252695105814415e+03 + 18460 9.898219988333975e-01 -5.942674866239423e+00 -6.016005933572570e+00 4.015193117013204e+00 4.594114780440277e+00 9.266239727358099e+03 + 18480 1.026359620543620e+00 -6.057202511932885e+00 -6.004236257917090e+00 3.397831111686383e+00 4.701971538746394e+00 9.230053984421727e+03 + 18500 1.025869181359671e+00 -6.104348736506338e+00 -5.980135102916621e+00 3.149434696908707e+00 4.862688602978540e+00 9.156148937043179e+03 + 18520 9.257468031412428e-01 -5.985508593853569e+00 -5.968532681737250e+00 3.747011174971259e+00 4.844489489357073e+00 9.120690588770034e+03 + 18540 9.340806757226165e-01 -6.013734562159490e+00 -5.958988502605152e+00 3.649352495324135e+00 4.963712841210480e+00 9.091553000402706e+03 + 18560 9.226833792012186e-01 -6.005056593501181e+00 -5.976790663540826e+00 3.632684873062655e+00 4.794992217033538e+00 9.145934760950819e+03 + 18580 9.311594308010234e-01 -6.018663656889939e+00 -6.000516935066948e+00 3.579601491288220e+00 4.683802776191961e+00 9.218636263102730e+03 + 18600 9.607203064403740e-01 -6.057463871834262e+00 -5.955373607285648e+00 3.427018480028718e+00 5.013236577484237e+00 9.080575271012531e+03 + 18620 9.025656325655277e-01 -5.959512809406918e+00 -6.003138478082454e+00 3.913893345316668e+00 4.663388004731328e+00 9.226692349740581e+03 + 18640 9.730086473705979e-01 -6.048463371971904e+00 -6.005550051740422e+00 3.411077202110857e+00 4.657492127694869e+00 9.234092058435956e+03 + 18660 1.002472387886004e+00 -6.072877927236409e+00 -5.982358126008788e+00 3.261899576598261e+00 4.781678283141228e+00 9.162989967540645e+03 + 18680 9.711716833875289e-01 -6.003946690768953e+00 -6.001325737761383e+00 3.652237620909838e+00 4.667287538670473e+00 9.221112953806361e+03 + 18700 9.776417394181699e-01 -5.988458674580767e+00 -5.979462286343042e+00 3.755231075232557e+00 4.806889728680154e+00 9.154073594432006e+03 + 18720 1.039190126550525e+00 -6.052037776888484e+00 -5.957968682897910e+00 3.451047259390530e+00 4.991206554229651e+00 9.088430624222481e+03 + 18740 9.325208894434228e-01 -5.865345146103860e+00 -5.972654384319705e+00 4.448344864899459e+00 4.832158613013132e+00 9.133259869567599e+03 + 18760 1.084241230871755e+00 -6.063466760942323e+00 -5.967047270512539e+00 3.388286944221928e+00 4.941942579137670e+00 9.116138044654517e+03 + 18780 1.034219873855957e+00 -5.963788043205668e+00 -5.997381780233737e+00 3.895170755445824e+00 4.702270318816648e+00 9.209028014885711e+03 + 18800 1.027524200554626e+00 -5.937247518026616e+00 -6.022333489177877e+00 4.047352395997275e+00 4.558775582635252e+00 9.285686377859194e+03 + 18820 1.042606426753261e+00 -5.948458897748116e+00 -5.996695846363409e+00 3.981339670646384e+00 4.704355647053702e+00 9.206885418062458e+03 + 18840 9.846616524895233e-01 -5.855936295245451e+00 -6.007386985369196e+00 4.490771455757740e+00 4.621118156148643e+00 9.239709606457935e+03 + 18860 9.827531597377804e-01 -5.849516640861546e+00 -6.042610475340859e+00 4.474940278318243e+00 4.366165599563711e+00 9.348301574462605e+03 + 18880 1.050487278046361e+00 -5.950384094827135e+00 -6.026505050937897e+00 3.987098763425120e+00 4.550000453757239e+00 9.298600101965494e+03 + 18900 1.074138258592828e+00 -5.994380072357722e+00 -6.042641419571380e+00 3.675249633927108e+00 4.398125509806937e+00 9.348436647143119e+03 + 18920 1.028872113531929e+00 -5.944464597756838e+00 -6.026192001243607e+00 3.999349926340737e+00 4.530058528244892e+00 9.297621926705824e+03 + 18940 9.864816662423845e-01 -5.903289603680446e+00 -6.046110197351942e+00 4.322969185004393e+00 4.502871234727228e+00 9.359127182003991e+03 + 18960 1.017886900590775e+00 -5.980194419187219e+00 -6.017157491682779e+00 3.806612103760398e+00 4.594364421473908e+00 9.269780889266749e+03 + 18980 1.017402625954216e+00 -6.014395730210121e+00 -5.964721089189772e+00 3.658423675158015e+00 4.943663151022712e+00 9.109076160724047e+03 + 19000 1.004287339989931e+00 -6.033159874134210e+00 -5.990131374134492e+00 3.492090827465359e+00 4.739167133102596e+00 9.186774145313242e+03 + 19020 1.012003890115472e+00 -6.086529560837555e+00 -6.003170364216685e+00 3.243757788628426e+00 4.722419195419445e+00 9.226780850812249e+03 + 19040 9.904504368572550e-01 -6.095940836385743e+00 -5.951680686907650e+00 3.234185543242030e+00 5.062549645731217e+00 9.069307441178707e+03 + 19060 9.707812024583312e-01 -6.099050664648521e+00 -5.962276201579887e+00 3.156676833149988e+00 4.942056965869842e+00 9.101615000972597e+03 + 19080 9.139075685781860e-01 -6.033038264457056e+00 -5.998883057777602e+00 3.459541841611653e+00 4.655666323866225e+00 9.213632432227274e+03 + 19100 9.048712739197019e-01 -6.026449745193111e+00 -5.977604799619012e+00 3.612187516897309e+00 4.892662753114683e+00 9.148426105659002e+03 + 19120 9.631546844864886e-01 -6.110122601418831e+00 -5.960133220159843e+00 3.127228955195803e+00 4.988491193166649e+00 9.095063047858830e+03 + 19140 9.236839053940779e-01 -6.044185621452637e+00 -6.008911316341555e+00 3.472067772666047e+00 4.674618291294957e+00 9.244430932171934e+03 + 19160 9.670729016046413e-01 -6.099982789136825e+00 -6.020983681350573e+00 3.135649673010194e+00 4.589274774991274e+00 9.281588487230300e+03 + 19180 9.580095918540483e-01 -6.075635498830700e+00 -6.018922944640721e+00 3.282261854081981e+00 4.607914116480240e+00 9.275251908513370e+03 + 19200 8.922788928148744e-01 -5.965079138059791e+00 -6.049427972223858e+00 3.841842459176597e+00 4.357498400466623e+00 9.369438040271903e+03 + 19220 9.423147495619238e-01 -6.022499256917360e+00 -6.068763917847466e+00 3.549002562262404e+00 4.283343719768598e+00 9.429359298703985e+03 + 19240 9.799665788917042e-01 -6.059909797718247e+00 -6.028200856075808e+00 3.397667228117023e+00 4.579744877970772e+00 9.303863178924732e+03 + 19260 1.015346789799016e+00 -6.092682360552907e+00 -5.994008358836891e+00 3.236361801155677e+00 4.802963188761454e+00 9.198694526828720e+03 + 19280 9.919143538314130e-01 -6.037126368621372e+00 -6.019497042861907e+00 3.544176039753963e+00 4.645406356394156e+00 9.276993348453632e+03 + 19300 9.881370581412801e-01 -6.008714595357652e+00 -6.016175405301644e+00 3.684555706437927e+00 4.641714581182917e+00 9.266780736411991e+03 + 19320 1.018084585246837e+00 -6.029793084329337e+00 -6.041317531518627e+00 3.505960208476635e+00 4.439785049313297e+00 9.344322210806500e+03 + 19340 9.740381644227906e-01 -5.942429014489933e+00 -5.986019521512296e+00 4.065539464440732e+00 4.815236027509159e+00 9.174186360396217e+03 + 19360 1.021906166421283e+00 -5.993270469396553e+00 -6.015263339168603e+00 3.748676750640689e+00 4.622390289023976e+00 9.263963389812870e+03 + 19380 1.027484245533571e+00 -5.981602644101094e+00 -6.050172399655223e+00 3.737291167499331e+00 4.343553019972148e+00 9.371726755284320e+03 + 19400 1.038869437118971e+00 -5.983189176747636e+00 -6.017254154423726e+00 3.777219291736456e+00 4.581612918382094e+00 9.270096488671337e+03 + 19420 1.020331082493819e+00 -5.944418898241981e+00 -6.031883929479714e+00 3.989733550958557e+00 4.487495806421650e+00 9.315176884390854e+03 + 19440 1.028754324950355e+00 -5.948210483208362e+00 -6.035511565467589e+00 3.975187300755447e+00 4.473890976624149e+00 9.326377269375100e+03 + 19460 1.031645237676291e+00 -5.946593043577979e+00 -6.039842305503716e+00 4.007752915246380e+00 4.472301222992156e+00 9.339780355803092e+03 + 19480 1.063097915790032e+00 -5.994061120155066e+00 -6.011542299575819e+00 3.681921458358527e+00 4.581541820920791e+00 9.252521387117764e+03 + 19500 1.044312172277415e+00 -5.972941576951937e+00 -6.017977759897184e+00 3.872961001350828e+00 4.614356269552434e+00 9.272301568102153e+03 + 19520 1.055211755483276e+00 -6.001883753103421e+00 -6.013867367722170e+00 3.729638643268829e+00 4.660826873669602e+00 9.259665643535405e+03 + 19540 1.031960801232421e+00 -5.991310518353628e+00 -5.977074735049409e+00 3.741497848456379e+00 4.823241919169551e+00 9.146797905896567e+03 + 19560 1.029964378920267e+00 -6.023271707986305e+00 -5.983519620786972e+00 3.588845231167448e+00 4.817107867481625e+00 9.166494178496401e+03 + 19580 9.636180115883948e-01 -5.967384758908694e+00 -5.993489410450480e+00 3.889132268773828e+00 4.739235319939125e+00 9.197072548817028e+03 + 19600 9.519328731428395e-01 -5.996270494745978e+00 -5.992429058897695e+00 3.734249817307903e+00 4.756307936409019e+00 9.193805618471592e+03 + 19620 1.003945377929180e+00 -6.114906973677165e+00 -6.001890354696376e+00 3.084460805992188e+00 4.733419721445143e+00 9.222855037388083e+03 + 19640 9.309550556126024e-01 -6.040386395538083e+00 -6.043421327867108e+00 3.450985243713201e+00 4.433558192625682e+00 9.350842482920929e+03 + 19660 9.149862525941476e-01 -6.039778053892229e+00 -5.995330863769185e+00 3.456728344278707e+00 4.711950988145663e+00 9.202727738638236e+03 + 19680 9.417089830562242e-01 -6.090097743919928e+00 -5.933302581640321e+00 3.250094397750714e+00 5.150436483533162e+00 9.013425848713612e+03 + 19700 9.425583203580494e-01 -6.091227855303219e+00 -5.971179488802461e+00 3.162745886576703e+00 4.852082184448731e+00 9.128804691185211e+03 + 19720 9.338559095126143e-01 -6.071924893702485e+00 -6.002960688022274e+00 3.311249037823965e+00 4.707252179016074e+00 9.226141378791503e+03 + 19740 9.896657881631955e-01 -6.143304236475532e+00 -5.973313307851650e+00 2.928959044230785e+00 4.905073262400305e+00 9.135322291705972e+03 + 19760 9.530370160237346e-01 -6.073813637508671e+00 -5.970252018811771e+00 3.356702411662521e+00 4.951369252328821e+00 9.125944990224894e+03 + 19780 9.393735981940707e-01 -6.035263782604650e+00 -5.981417350208623e+00 3.538797291210644e+00 4.847991838737109e+00 9.160083131614023e+03 + 19800 9.369171586216624e-01 -6.007974223559207e+00 -5.987295135985382e+00 3.745405313587274e+00 4.864147834514637e+00 9.178090390901396e+03 + 19820 9.667283728408363e-01 -6.026113953318115e+00 -6.019467790750278e+00 3.567860618582071e+00 4.606023912536920e+00 9.276898613878775e+03 + 19840 9.611870292986935e-01 -5.993533785216806e+00 -6.037232389145746e+00 3.734373640911056e+00 4.483449494813978e+00 9.331709711526455e+03 + 19860 1.046762414261234e+00 -6.100109318212309e+00 -6.013525901441813e+00 3.148051246568854e+00 4.645226624405479e+00 9.258648999658166e+03 + 19880 9.678062274943662e-01 -5.967315502618262e+00 -6.042937379739211e+00 3.889697325490058e+00 4.455464804613905e+00 9.349346239823937e+03 + 19900 1.039716218700582e+00 -6.063884040710181e+00 -5.988872455416274e+00 3.337031087723430e+00 4.767759218486351e+00 9.182940953958598e+03 + 19920 1.004228614601709e+00 -6.002674241545346e+00 -5.993521317203074e+00 3.754962208350164e+00 4.807519716333957e+00 9.197170733169616e+03 + 19940 1.063514127644385e+00 -6.083491000907729e+00 -5.975925569183282e+00 3.237659264177161e+00 4.855316618835698e+00 9.143299688604857e+03 + 19960 9.721350344990661e-01 -5.940961294793323e+00 -6.009243744094235e+00 4.011507354052708e+00 4.619418963491994e+00 9.245439653729172e+03 + 19980 1.074187014857956e+00 -6.087382586660635e+00 -5.986087606112245e+00 3.202703342846972e+00 4.784354796503409e+00 9.174389068442630e+03 + 20000 9.586956696805027e-01 -5.913583827036164e+00 -6.017783122639313e+00 4.180401105070656e+00 4.582072624928488e+00 9.271720245627213e+03 + 20020 9.756039964612050e-01 -5.938223060474987e+00 -6.014121543857206e+00 4.011867522438195e+00 4.576046685605153e+00 9.260448170246575e+03 + 20040 1.024830635088957e+00 -6.011083601480799e+00 -5.963956967611655e+00 3.669974047694331e+00 4.940582472193974e+00 9.106730927556020e+03 + 20060 1.018188185198244e+00 -5.999196044138616e+00 -6.032412392897958e+00 3.684332960720981e+00 4.493599545931479e+00 9.316823066095676e+03 + 20080 1.008828101022529e+00 -5.986381730614814e+00 -6.007381611468565e+00 3.738859135837844e+00 4.618274570254545e+00 9.239744045065223e+03 + 20100 1.003299685049185e+00 -5.981369048667415e+00 -6.005502564494861e+00 3.806933232966970e+00 4.668354850436272e+00 9.233940306012060e+03 + 20120 1.022102642631560e+00 -6.014727227319523e+00 -5.982229948081949e+00 3.584039058050297e+00 4.770643464370156e+00 9.162557847804454e+03 + 20140 1.012819585775307e+00 -6.006347815049013e+00 -5.992605040478459e+00 3.705351617878134e+00 4.784264756149747e+00 9.194342555830035e+03 + 20160 8.721997668502887e-01 -5.804559639797571e+00 -6.011743968543839e+00 4.731787235765315e+00 4.542102758432990e+00 9.253123265222814e+03 + 20180 1.059535973210264e+00 -6.088678107722265e+00 -5.961953522182384e+00 3.196080748060212e+00 4.923752928796441e+00 9.100615883003573e+03 + 20200 1.003960046226445e+00 -6.014397153652652e+00 -6.036276037300642e+00 3.597313985049986e+00 4.471682049396929e+00 9.328723981327856e+03 + 20220 9.419011277147145e-01 -5.936985823250719e+00 -6.015118429815407e+00 4.100721860467189e+00 4.652072342590962e+00 9.263509124530357e+03 + 20240 1.014058596329688e+00 -6.065875002694027e+00 -6.015096131487900e+00 3.309102076176239e+00 4.600682212646743e+00 9.263457950822092e+03 + 20260 9.477983078027976e-01 -5.994893495345016e+00 -6.046683254738086e+00 3.658011871577773e+00 4.360627058703400e+00 9.360915255937643e+03 + 20280 9.581065112073174e-01 -6.040470410067775e+00 -5.979596495529517e+00 3.474472948974026e+00 4.824020386460533e+00 9.154522435342553e+03 + 20300 9.655075211039569e-01 -6.078804069114625e+00 -5.981554191274677e+00 3.288130147198975e+00 4.846553995125915e+00 9.160511877585135e+03 + 20320 9.031511743790760e-01 -6.009761700494803e+00 -5.980599899218661e+00 3.683938323662654e+00 4.851389899364422e+00 9.157583338571396e+03 + 20340 9.741028720809839e-01 -6.131236638392272e+00 -5.967985419300072e+00 3.023511103671520e+00 4.960924866743442e+00 9.119032287623524e+03 + 20360 9.477872715902415e-01 -6.101909667217741e+00 -5.980645917326064e+00 3.178841672367231e+00 4.875156889749888e+00 9.157716852212659e+03 + 20380 9.373815732368236e-01 -6.088527336394848e+00 -5.949180378873124e+00 3.225238405839897e+00 5.025390199801622e+00 9.061714593003970e+03 + 20400 9.386721056251052e-01 -6.083386884752374e+00 -5.959337286331024e+00 3.267072370186400e+00 4.979384360935102e+00 9.092657456738305e+03 + 20420 9.325818861371803e-01 -6.058568025188599e+00 -6.017504144146249e+00 3.321408658786559e+00 4.557203818346787e+00 9.270872752526846e+03 + 20440 1.027756094246380e+00 -6.178193185261197e+00 -5.957337899773229e+00 2.740728844868564e+00 5.008914071385451e+00 9.086560474003487e+03 + 20460 9.359892949609220e-01 -6.013235328454130e+00 -5.981091563811965e+00 3.677683228189272e+00 4.862257698996089e+00 9.159068455995706e+03 + 20480 9.327347354459434e-01 -5.973656117344914e+00 -5.950084192481249e+00 3.850390075043141e+00 4.985743715353894e+00 9.064422611075741e+03 + 20500 9.760494945605893e-01 -5.996437193959518e+00 -5.942126101844713e+00 3.682995683398277e+00 4.994858378935827e+00 9.040223208407604e+03 + 20520 1.064669288018811e+00 -6.088403582552969e+00 -5.943944413774862e+00 3.235894337751839e+00 5.065401239859845e+00 9.045753558106526e+03 + 20540 1.009725622962596e+00 -5.976545498924846e+00 -6.006050935365019e+00 3.866114941922778e+00 4.696690159931772e+00 9.235621627260673e+03 + 20560 1.020798984763025e+00 -5.972371040192424e+00 -6.004248307383287e+00 3.907148847628986e+00 4.724104646427895e+00 9.230093763275461e+03 + 20580 1.014922822370177e+00 -5.949992799170198e+00 -6.060201214859090e+00 3.926516418225993e+00 4.293682640643170e+00 9.402761357281825e+03 + 20600 1.035017376094610e+00 -5.971567829417104e+00 -6.014885569684968e+00 3.818858765598949e+00 4.570121597582232e+00 9.262810752706142e+03 + 20620 9.924369341528846e-01 -5.905762941359292e+00 -6.018472973992654e+00 4.176942399028769e+00 4.529743949826828e+00 9.273840434356111e+03 + 20640 1.004272831117531e+00 -5.924050201231220e+00 -6.041376329475145e+00 4.107810685982058e+00 4.434105901445766e+00 9.344483719382340e+03 + 20660 1.070359738187667e+00 -6.026410415796454e+00 -6.010289110988638e+00 3.527965995096381e+00 4.620537022066714e+00 9.248648496506170e+03 + 20680 1.000825115648316e+00 -5.932211821589053e+00 -6.010017101372076e+00 4.069007760003320e+00 4.622237803161068e+00 9.247787116688058e+03 + 20700 9.784156218282832e-01 -5.909927785735512e+00 -6.008098789581702e+00 4.192575580135307e+00 4.628862484136737e+00 9.241912890781110e+03 + 20720 1.039485448953510e+00 -6.014092252199362e+00 -6.021722885459310e+00 3.616764717950337e+00 4.572948440935031e+00 9.283851138223044e+03 + 20740 1.013762993461398e+00 -5.991488397536363e+00 -6.002718241581963e+00 3.780626821542098e+00 4.716143319219515e+00 9.225383928898778e+03 + 20760 1.036376896970358e+00 -6.045063907797879e+00 -5.959670082530110e+00 3.475712869761939e+00 4.966057429101223e+00 9.093653642481759e+03 + 20780 1.008532386633857e+00 -6.024832133862389e+00 -5.991730606321353e+00 3.545473997403356e+00 4.735548090988816e+00 9.191680694821633e+03 + 20800 9.766464118561824e-01 -5.999505501909324e+00 -6.035131726297457e+00 3.645216668497414e+00 4.440645374920349e+00 9.325224648828233e+03 + 20820 9.446024657198889e-01 -5.979101014292813e+00 -6.007702836761771e+00 3.828887378173619e+00 4.664651287439140e+00 9.240714759292758e+03 + 20840 9.885425562321638e-01 -6.072009022762399e+00 -5.976413150704073e+00 3.331797246600941e+00 4.880723537373238e+00 9.144780038997740e+03 + 20860 9.675983912233611e-01 -6.069147026429859e+00 -5.999250852093621e+00 3.340290374433711e+00 4.741645023870417e+00 9.214751658438629e+03 + 20880 1.007539415987811e+00 -6.159230621788292e+00 -5.990059441077380e+00 2.834137761311104e+00 4.805544860108766e+00 9.186574161792309e+03 + 20900 8.864583481580945e-01 -6.012238019642031e+00 -5.990784656387733e+00 3.604326951909681e+00 4.727515483613091e+00 9.188796655063423e+03 + 20920 9.141891206472920e-01 -6.080614552103516e+00 -5.976176165510761e+00 3.259981731047744e+00 4.859683108651440e+00 9.144051829374790e+03 + 20940 9.069619256446170e-01 -6.091130535634698e+00 -5.980376751131521e+00 3.228218811822532e+00 4.864184181532535e+00 9.156919333980681e+03 + 20960 9.526248411065934e-01 -6.173727628757638e+00 -5.980775418837575e+00 2.789399720139843e+00 4.897361168758833e+00 9.158141587012338e+03 + 20980 9.096096454652371e-01 -6.118938499719637e+00 -6.038931110782706e+00 3.093165923539658e+00 4.552580731918942e+00 9.336952740840952e+03 + 21000 9.365221698226965e-01 -6.166605096059263e+00 -5.965616149211142e+00 2.832983088109319e+00 4.987092723850239e+00 9.111817307814172e+03 + 21020 9.112556346184451e-01 -6.127281989138037e+00 -5.980966953033772e+00 2.993054343407086e+00 4.833217922896434e+00 9.158719775518490e+03 + 21040 9.268235798308070e-01 -6.132785689707513e+00 -5.996859333116735e+00 2.967800132931297e+00 4.748310307011243e+00 9.207412308662158e+03 + 21060 9.244367475843404e-01 -6.093304357783126e+00 -5.981558294458706e+00 3.197356825093093e+00 4.839020013349320e+00 9.160544662434511e+03 + 21080 8.957194235632201e-01 -5.999548611178652e+00 -5.995281077980962e+00 3.704663401607085e+00 4.729168237626849e+00 9.202559323533784e+03 + 21100 9.843736734404599e-01 -6.075922437371969e+00 -5.997632261086396e+00 3.293515621839609e+00 4.743069929436992e+00 9.209783856209737e+03 + 21120 9.081205549317221e-01 -5.913372455935938e+00 -6.001748078532727e+00 4.175738278484628e+00 4.668271777450468e+00 9.222406346748190e+03 + 21140 9.737673673871678e-01 -5.972066505713202e+00 -5.985939544226416e+00 3.894349284933486e+00 4.814688150944840e+00 9.173920528639239e+03 + 21160 1.016562213495425e+00 -6.004467334952213e+00 -6.032226365365413e+00 3.653250336275875e+00 4.493853687947204e+00 9.316256487405703e+03 + 21180 1.029830237359170e+00 -6.000884522002250e+00 -6.050430119233621e+00 3.667181401043314e+00 4.382682914584391e+00 9.372520531395354e+03 + 21200 1.033156538720732e+00 -5.990760422829060e+00 -5.993000899215175e+00 3.787066692664143e+00 4.774201530542470e+00 9.195596300194788e+03 + 21220 1.061892922765096e+00 -6.021939963897680e+00 -5.990187704182897e+00 3.627675232080608e+00 4.810001621009198e+00 9.186942744340467e+03 + 21240 1.045921093388182e+00 -5.990383124417299e+00 -5.974194067069547e+00 3.775227737758645e+00 4.868187810297969e+00 9.138010290881450e+03 + 21260 1.068873558382580e+00 -6.019154586544250e+00 -5.986908808568401e+00 3.625957498919632e+00 4.811117746074974e+00 9.176895525859767e+03 + 21280 1.031638557717918e+00 -5.961335127595028e+00 -6.022029766283485e+00 3.962963709722696e+00 4.614445701908597e+00 9.284780972826964e+03 + 21300 1.011440818498198e+00 -5.932982530892483e+00 -6.046533574497506e+00 4.050427334110070e+00 4.398399669762822e+00 9.360434439791457e+03 + 21320 1.004474598014488e+00 -5.929860919434580e+00 -6.017367660051163e+00 4.079207621346967e+00 4.576730375102199e+00 9.270446925032566e+03 + 21340 1.014423505839948e+00 -5.955968371467351e+00 -6.017158822560202e+00 3.937392677489328e+00 4.586027638122482e+00 9.269786182435941e+03 + 21360 1.010594055482384e+00 -5.963883585107683e+00 -6.070783879634211e+00 3.904902496701473e+00 4.291064462763035e+00 9.435614470467932e+03 + 21380 1.055327599875555e+00 -6.052826924943264e+00 -6.001990462072757e+00 3.419658579153863e+00 4.711569415873518e+00 9.223184820365814e+03 + 21400 9.975408411506242e-01 -5.992208190105005e+00 -6.021850149561996e+00 3.705000970293903e+00 4.534792252013459e+00 9.284260834483148e+03 + 21420 1.025642296858505e+00 -6.062190618954173e+00 -6.018367055593384e+00 3.360055822319629e+00 4.611697504811791e+00 9.273536254476159e+03 + 21440 1.016766395486329e+00 -6.079802132743065e+00 -5.980606199480831e+00 3.315393813540257e+00 4.884992212853070e+00 9.157621278326009e+03 + 21460 9.884973136514468e-01 -6.065133912753671e+00 -5.962649803357463e+00 3.390972160097218e+00 4.979451775614922e+00 9.102755922781651e+03 + 21480 1.010045460136650e+00 -6.119545900930342e+00 -5.958397366361438e+00 3.059819775078156e+00 4.985159598227938e+00 9.089785348669584e+03 + 21500 9.578084942327825e-01 -6.059314701002214e+00 -5.978579715789180e+00 3.348996709232883e+00 4.812589488024709e+00 9.151423119973959e+03 + 21520 9.349516294469200e-01 -6.035245550338884e+00 -6.002073164638952e+00 3.509186141398508e+00 4.699667113497616e+00 9.223424354614353e+03 + 21540 9.485861074112382e-01 -6.061787962923744e+00 -5.994808200048660e+00 3.397018227220127e+00 4.781626390733664e+00 9.201108127693344e+03 + 21560 9.512816409476849e-01 -6.066516277500308e+00 -5.989075768216615e+00 3.302934764173889e+00 4.747610152360936e+00 9.183574236931976e+03 + 21580 9.426794807895247e-01 -6.047964168488923e+00 -6.002976249111178e+00 3.422451600340873e+00 4.680779195265902e+00 9.226193791750682e+03 + 21600 9.449658705086974e-01 -6.038657325959218e+00 -5.977819523435237e+00 3.489491714430772e+00 4.838831791142988e+00 9.149097409079393e+03 + 21620 9.676819121743778e-01 -6.051111354044293e+00 -6.001066440797603e+00 3.372741846150461e+00 4.660107482438255e+00 9.220332183394996e+03 + 21640 9.777314517561777e-01 -6.031447106639646e+00 -6.020783341253719e+00 3.548447118661793e+00 4.609680109720141e+00 9.280978746535984e+03 + 21660 1.009192771368310e+00 -6.032766848594189e+00 -6.000590934896252e+00 3.522246636256921e+00 4.707005711917033e+00 9.218869083287937e+03 + 21680 9.848068732729762e-01 -5.943658805804026e+00 -5.988675122241485e+00 3.992938760823892e+00 4.734448105587548e+00 9.182307674139849e+03 + 21700 9.850759726715091e-01 -5.892786542244903e+00 -6.033034956550161e+00 4.240749148245754e+00 4.435421049932992e+00 9.318730682554666e+03 + 21720 1.069009067469885e+00 -5.977671844398080e+00 -5.978449292470763e+00 3.789812511153447e+00 4.785348284010405e+00 9.150998118247298e+03 + 21740 9.985408225603840e-01 -5.850813519849134e+00 -5.994194924080292e+00 4.506217486924694e+00 4.682899275628788e+00 9.199207884679307e+03 + 21760 1.006665657395554e+00 -5.849959949410122e+00 -6.013709872425877e+00 4.505062700051891e+00 4.564785301876740e+00 9.259178029298280e+03 + 21780 1.075698481524050e+00 -5.948212204628414e+00 -6.020590101010090e+00 3.956502386303996e+00 4.540897304837141e+00 9.280367584291802e+03 + 21800 1.072724877866037e+00 -5.949090381355365e+00 -6.044677002447319e+00 3.955825524782365e+00 4.406952354490558e+00 9.354708236722661e+03 + 21820 1.083362560344358e+00 -5.979752018580949e+00 -6.011245002695928e+00 3.787977412481804e+00 4.607139824170053e+00 9.251589064039325e+03 + 21840 1.008298683611080e+00 -5.885785902874779e+00 -6.005374769194457e+00 4.279631116163903e+00 4.592933339439054e+00 9.233545001151000e+03 + 21860 1.042594847959691e+00 -5.954409882112978e+00 -5.989907250401030e+00 3.943344889009151e+00 4.739513507099168e+00 9.186069773565097e+03 + 21880 1.037313946132831e+00 -5.967067749895882e+00 -6.011126282825774e+00 3.858866275201810e+00 4.605875361082431e+00 9.251238336109820e+03 + 21900 1.013766167698136e+00 -5.955929350455447e+00 -6.026652121017448e+00 3.948403410587580e+00 4.542302317707199e+00 9.299053677199034e+03 + 21920 1.020658019567199e+00 -5.991852672124380e+00 -6.021677855296451e+00 3.742317996111643e+00 4.571057178905432e+00 9.283738749959868e+03 + 21940 9.744100464971485e-01 -5.949939182578109e+00 -6.012624954792670e+00 3.987329325038448e+00 4.627377920390538e+00 9.255840082354114e+03 + 21960 9.675134840772445e-01 -5.964091547591459e+00 -6.031460403349347e+00 3.875148110523191e+00 4.488305715464666e+00 9.313864275290711e+03 + 21980 9.965240078580956e-01 -6.028855341028070e+00 -5.980371027582361e+00 3.577373509105057e+00 4.855777939833571e+00 9.156886667697847e+03 + 22000 9.514271935528292e-01 -5.978725219301328e+00 -6.002184008286664e+00 3.829364883209661e+00 4.694660886619998e+00 9.223739474557260e+03 + 22020 9.940460504694612e-01 -6.053964678985806e+00 -5.986831637509244e+00 3.415995010383648e+00 4.801483323346661e+00 9.176663964427968e+03 + 22040 9.719485391705455e-01 -6.029278208990231e+00 -5.991723920364276e+00 3.545435232982013e+00 4.761077769779633e+00 9.191655688369992e+03 + 22060 9.844209782252207e-01 -6.053751321569300e+00 -5.979806655652412e+00 3.423732491828641e+00 4.848334206423482e+00 9.155156884698168e+03 + 22080 9.592794508616364e-01 -6.016574359548541e+00 -6.020250549548290e+00 3.663958804235392e+00 4.642849552368268e+00 9.279315264681192e+03 + 22100 1.023651492186338e+00 -6.109115730645064e+00 -6.010538965456517e+00 3.139821084557475e+00 4.705864124975221e+00 9.249457870362703e+03 + 22120 1.008033729000489e+00 -6.082937691699531e+00 -6.028868719305971e+00 3.263651504590349e+00 4.574123911220603e+00 9.305888837061453e+03 + 22140 9.824960942319197e-01 -6.041214244588620e+00 -6.000853581009070e+00 3.488894169952543e+00 4.720651346018823e+00 9.219666248041431e+03 + 22160 1.010276049584021e+00 -6.075113036284337e+00 -5.989512184668444e+00 3.258883682275347e+00 4.750417018942787e+00 9.184895881659224e+03 + 22180 9.353748266889038e-01 -5.949551967301566e+00 -6.028225921052252e+00 3.961522276614026e+00 4.509764259422592e+00 9.303903094277826e+03 + 22200 9.996989232830139e-01 -6.020325095745490e+00 -6.009770851143893e+00 3.580917270329521e+00 4.641521376095965e+00 9.247069465388709e+03 + 22220 9.861438845340266e-01 -5.961722502281965e+00 -6.007642542328646e+00 3.957152664314655e+00 4.693472688263383e+00 9.240476624924002e+03 + 22240 1.046043078650233e+00 -5.997881735028341e+00 -5.964315165180904e+00 3.679828328467466e+00 4.872572766941348e+00 9.107825262752171e+03 + 22260 1.053182331913205e+00 -5.949519124357746e+00 -6.010140922069191e+00 3.963550163355416e+00 4.615450419703420e+00 9.248211566984630e+03 + 22280 1.096347242595124e+00 -5.964582630634802e+00 -6.031121718245451e+00 3.855072185912874e+00 4.472994447961998e+00 9.312851940279308e+03 + 22300 1.073406091764057e+00 -5.902286317063940e+00 -6.018406385786178e+00 4.283642576212900e+00 4.616863172087251e+00 9.273639020026389e+03 + 22320 1.082572063366422e+00 -5.901086255333301e+00 -6.010931580131981e+00 4.211076609642139e+00 4.580327756139044e+00 9.250653831293233e+03 + 22340 1.181265590861121e+00 -6.045206200201357e+00 -6.032171183353801e+00 3.452369293262064e+00 4.527218377163067e+00 9.316088359244253e+03 + 22360 1.070377914366425e+00 -5.893945485931649e+00 -6.016880076334583e+00 4.243722153004058e+00 4.537812710844032e+00 9.268955739288724e+03 + 22380 1.014543204043877e+00 -5.829672271678801e+00 -5.981786851422060e+00 4.632704599328211e+00 4.759239142787278e+00 9.161192506153317e+03 + 22400 1.069340436156244e+00 -5.933349382029788e+00 -6.018674882507375e+00 3.992111131769074e+00 4.502158903948240e+00 9.274442725661889e+03 + 22420 1.119155558288320e+00 -6.039960209364453e+00 -5.971688244840399e+00 3.515656067588013e+00 4.907684252937493e+00 9.130348613789605e+03 + 22440 9.734179805720071e-01 -5.856359845697537e+00 -6.014674676508955e+00 4.407584241039862e+00 4.498515983379813e+00 9.262138398825888e+03 + 22460 1.040780816899016e+00 -5.985593721370673e+00 -5.975410562713689e+00 3.767570694760452e+00 4.826043967607568e+00 9.141688790996766e+03 + 22480 1.024306935468777e+00 -5.988592252014897e+00 -5.947910658708029e+00 3.777813271464962e+00 5.011413275689216e+00 9.057835723060265e+03 + 22500 9.840836883913052e-01 -5.951782520760736e+00 -5.962194322211336e+00 3.947054966223592e+00 4.887268791073176e+00 9.101342073097358e+03 + 22520 9.992756851528051e-01 -5.991191696073945e+00 -5.913112153546153e+00 3.756400387987090e+00 5.204745203951831e+00 8.952231025049852e+03 + 22540 9.837775373285002e-01 -5.978395146362014e+00 -5.968802148716978e+00 3.823783034856672e+00 4.878867511846052e+00 9.121517918125746e+03 + 22560 1.019555877357196e+00 -6.040789817867394e+00 -5.991431098364913e+00 3.472009768291402e+00 4.755435173911808e+00 9.190762857809254e+03 + 22580 9.463161607538978e-01 -5.938498921292265e+00 -6.049693568904718e+00 4.011622944475823e+00 4.373126070569007e+00 9.370215388010241e+03 + 22600 9.898006887993822e-01 -6.009656070448387e+00 -6.027632766083134e+00 3.598216233656488e+00 4.494991265437112e+00 9.302064298511470e+03 + 22620 9.703096377169923e-01 -5.987251063387972e+00 -5.972646183852948e+00 3.788208775985933e+00 4.872072254373843e+00 9.133244423999313e+03 + 22640 9.441460560558099e-01 -5.949753448375971e+00 -5.995070278999011e+00 4.006842213288429e+00 4.746625959094063e+00 9.201904599576317e+03 + 22660 1.054618695011741e+00 -6.111589657622789e+00 -5.948460051883800e+00 3.128259562524306e+00 5.064975002902484e+00 9.059509561344194e+03 + 22680 9.582606069399543e-01 -5.966437417074094e+00 -6.008598380471077e+00 3.866905073332547e+00 4.624810297119073e+00 9.243457425567231e+03 + 22700 9.460516819600393e-01 -5.945374419853894e+00 -6.002081388564481e+00 4.042012454108173e+00 4.716392264396932e+00 9.223413993480221e+03 + 22720 1.040581912797539e+00 -6.081430718517721e+00 -5.953596058683428e+00 3.240347787265607e+00 4.974394186383794e+00 9.075149659419869e+03 + 22740 9.535704020508389e-01 -5.943054055505801e+00 -5.991033890392194e+00 4.053058297781253e+00 4.777550661008129e+00 9.189526224982092e+03 + 22760 9.974254094980254e-01 -5.992677587976494e+00 -5.972812250639418e+00 3.762867175099884e+00 4.876937016240396e+00 9.133754013189860e+03 + 22780 1.004783522576845e+00 -5.978358447020567e+00 -6.018810047434065e+00 3.782968263145299e+00 4.550688913706064e+00 9.274863629923353e+03 + 22800 1.080523698017781e+00 -6.054307864097428e+00 -5.962099331798464e+00 3.434685608582307e+00 4.964161270267216e+00 9.101060874423354e+03 + 22820 1.063693743997020e+00 -5.983574287729931e+00 -5.993230009828820e+00 3.744249741259245e+00 4.688805090749262e+00 9.196285771164730e+03 + 22840 1.119112864451027e+00 -6.015462251321929e+00 -5.961193020173469e+00 3.612882258490450e+00 4.924504581881285e+00 9.098295137522528e+03 + 22860 1.063782555745310e+00 -5.890024205836619e+00 -5.987539362433659e+00 4.297581793887479e+00 4.737634674285562e+00 9.178777961110016e+03 + 22880 1.068451338663774e+00 -5.861001028075132e+00 -6.013749277712171e+00 4.448042305103737e+00 4.570938217972621e+00 9.259266197591669e+03 + 22900 1.068906187388771e+00 -5.839502786681755e+00 -6.046575195377505e+00 4.538483471093286e+00 4.349441656010607e+00 9.360536486486935e+03 + 22920 1.111270344287865e+00 -5.896598072330429e+00 -6.028859095114656e+00 4.265777692275742e+00 4.506314432121578e+00 9.305808052386701e+03 + 22940 1.119718320805876e+00 -5.915827619680201e+00 -5.991195709505258e+00 4.154103336072158e+00 4.721328101122471e+00 9.190014538502810e+03 + 22960 1.105020944910178e+00 -5.910177952835169e+00 -5.967183170094396e+00 4.197972649005118e+00 4.870639869973776e+00 9.116555807129311e+03 + 22980 1.021123989721004e+00 -5.807945552474302e+00 -6.032231819232560e+00 4.687579603982824e+00 4.399693152069294e+00 9.316255854639892e+03 + 23000 1.144029870539443e+00 -6.023475325563410e+00 -6.019558874552592e+00 3.563935559727535e+00 4.586424427500488e+00 9.277181656122446e+03 + 23020 1.091103485819771e+00 -5.985391724783264e+00 -6.009059842420667e+00 3.741842292170433e+00 4.605936298067103e+00 9.244894553436716e+03 + 23040 1.023574239504814e+00 -5.923342553679900e+00 -5.982409594774756e+00 4.084761431822979e+00 4.745589341261248e+00 9.163104484241052e+03 + 23060 9.952255141534451e-01 -5.908449471125698e+00 -6.023783446825103e+00 4.158628551360158e+00 4.496363015019118e+00 9.290184483163805e+03 + 23080 1.001403901351069e+00 -5.938150107064108e+00 -6.056905579539535e+00 3.955646867601502e+00 4.273734567297628e+00 9.392542303126103e+03 + 23100 1.027451214775791e+00 -5.994019202958555e+00 -5.988975959549632e+00 3.702739677653376e+00 4.731698761746809e+00 9.183241952688044e+03 + 23120 1.013257738501018e+00 -5.987349157230756e+00 -6.005869350688939e+00 3.746995560980489e+00 4.640649744152931e+00 9.235067754429323e+03 + 23140 1.036110992070139e+00 -6.034287519024865e+00 -5.973202125597413e+00 3.513212437853774e+00 4.863974219848284e+00 9.134968835715928e+03 + 23160 9.360748138517090e-01 -5.896440434896551e+00 -6.004644535775131e+00 4.216635066153907e+00 4.595310374378606e+00 9.231322570716842e+03 + 23180 1.026066821955168e+00 -6.038099086107348e+00 -5.928296953753506e+00 3.504583103006823e+00 5.135083938807652e+00 8.998247400933033e+03 + 23200 9.560960622990720e-01 -5.939639739019891e+00 -5.997572306913449e+00 4.019557574005027e+00 4.686899804124312e+00 9.209599082812059e+03 + 23220 9.820471201951061e-01 -5.982215508457016e+00 -5.998659008715363e+00 3.723330331301858e+00 4.628909208194992e+00 9.212933404207432e+03 + 23240 9.418746555245011e-01 -5.925615721121098e+00 -6.020567219513699e+00 4.084619760982378e+00 4.539393563515178e+00 9.280289579632277e+03 + 23260 1.014601203315200e+00 -6.036707515405468e+00 -5.995162462178644e+00 3.503680193404550e+00 4.742238318109182e+00 9.202196986540424e+03 + 23280 9.388994381726942e-01 -5.928133972456029e+00 -5.976393187828457e+00 4.105271839647507e+00 4.828159956889586e+00 9.144698832051074e+03 + 23300 9.542630305527271e-01 -5.950432322003468e+00 -5.973462127287819e+00 3.947909377253916e+00 4.815668671460324e+00 9.135738502720045e+03 + 23320 9.924028584752060e-01 -6.001282462041309e+00 -6.023426900656155e+00 3.663895990895331e+00 4.536739197528084e+00 9.289116967440455e+03 + 23340 1.004880788203612e+00 -6.013758343791251e+00 -6.031047686738633e+00 3.596504558901734e+00 4.497226476180693e+00 9.312609423010450e+03 + 23360 1.001626532896770e+00 -6.003802855534238e+00 -5.995821690203309e+00 3.719997732066550e+00 4.765826818478092e+00 9.204227877097685e+03 + 23380 1.075079859372530e+00 -6.106255996314603e+00 -5.975570499735172e+00 3.097138628478355e+00 4.847554973352690e+00 9.142202597418596e+03 + 23400 1.080998360726217e+00 -6.105552819587765e+00 -5.975717473836726e+00 3.115059447338586e+00 4.860594094595877e+00 9.142638568486771e+03 + 23420 9.269649245232087e-01 -5.866191048896711e+00 -6.031509639548976e+00 4.459941157371730e+00 4.510656226877201e+00 9.314004663519225e+03 + 23440 1.044080876356171e+00 -6.025678328778124e+00 -6.016087240496591e+00 3.527163211134529e+00 4.582236724263202e+00 9.266496527060257e+03 + 23460 1.007026315920273e+00 -5.955704464726350e+00 -5.985788390553695e+00 3.888176174897633e+00 4.715429617324538e+00 9.173457191378859e+03 + 23480 1.032818932394846e+00 -5.976226719858841e+00 -5.988906246413413e+00 3.810509633646745e+00 4.737701830020002e+00 9.183011841605983e+03 + 23500 1.087663353514909e+00 -6.037608708573009e+00 -6.004531187988261e+00 3.506907679548012e+00 4.696843921475401e+00 9.230964891534377e+03 + 23520 9.849033068221833e-01 -5.867422697183307e+00 -6.059389077016779e+00 4.357319617590001e+00 4.255018957884935e+00 9.400284885803161e+03 + 23540 1.058612545373282e+00 -5.964902548644724e+00 -6.014654950315041e+00 3.904130572765705e+00 4.618444583215465e+00 9.262073840245957e+03 + 23560 1.096445406158602e+00 -6.013747574932844e+00 -5.983950739595115e+00 3.645279096644945e+00 4.816377136199550e+00 9.167835940152110e+03 + 23580 1.021920940851455e+00 -5.900664264312986e+00 -5.994217737140208e+00 4.203482924410968e+00 4.666284406083925e+00 9.199274654210272e+03 + 23600 1.106586320532422e+00 -6.026640714960187e+00 -5.938142022461502e+00 3.573286208726709e+00 5.081459396182565e+00 9.028105304869983e+03 + 23620 1.031811840247262e+00 -5.921324431279090e+00 -6.020982003015754e+00 4.128534598579947e+00 4.556285399708637e+00 9.281550359591085e+03 + 23640 1.021191360886209e+00 -5.920870321020116e+00 -5.998713046809233e+00 4.105838583983660e+00 4.658853606379666e+00 9.213060295173513e+03 + 23660 9.872272921241033e-01 -5.890653174973520e+00 -6.023119448966434e+00 4.265095266583923e+00 4.504453422226962e+00 9.288165939887182e+03 + 23680 1.012687471101928e+00 -5.959179157843993e+00 -6.024480283763479e+00 3.874395108736938e+00 4.499425938390673e+00 9.292364121601302e+03 + 23700 9.934297238211419e-01 -5.962928502233890e+00 -6.001805855219794e+00 3.861556840771734e+00 4.638317063675745e+00 9.222605207181952e+03 + 23720 1.078226194596499e+00 -6.124120487956777e+00 -6.004538780371904e+00 2.995351044577188e+00 4.682007714738971e+00 9.230995142334918e+03 + 23740 9.403619580013592e-01 -5.958193796616512e+00 -6.059036450516951e+00 3.891960369018971e+00 4.312906244972392e+00 9.399166996234069e+03 + 23760 1.012222690981270e+00 -6.099402651171915e+00 -5.976651702140102e+00 3.140908086043059e+00 4.845763031031701e+00 9.145525785806172e+03 + 23780 9.305538574137315e-01 -6.002194836756610e+00 -5.999902237015148e+00 3.695005359351923e+00 4.708169821846062e+00 9.216744952368213e+03 + 23800 9.304659910525171e-01 -6.017635132405653e+00 -5.985174734338973e+00 3.568907173128490e+00 4.755299802057738e+00 9.171601896644212e+03 + 23820 9.663426486823621e-01 -6.077715637619503e+00 -5.987059904476306e+00 3.282620684705434e+00 4.803179933343033e+00 9.177383333311871e+03 + 23840 9.768528292112534e-01 -6.095334867204607e+00 -6.023412476181182e+00 3.148048716204886e+00 4.561038215415431e+00 9.289081452640989e+03 + 23860 9.728887630069939e-01 -6.089337438589326e+00 -5.984068468589230e+00 3.224631306464780e+00 4.829102022525790e+00 9.168225142368639e+03 + 23880 9.388410794631378e-01 -6.033714612426442e+00 -5.986022127306610e+00 3.514474623913572e+00 4.788332253859863e+00 9.174200288748556e+03 + 23900 9.398909621796898e-01 -6.023834787390280e+00 -6.011440829856431e+00 3.565139647439149e+00 4.636307669557240e+00 9.252203423194616e+03 + 23920 9.617276936542071e-01 -6.040298793827024e+00 -6.014503874899810e+00 3.488551622556811e+00 4.636670038787674e+00 9.261629845246161e+03 + 23940 9.982468550161129e-01 -6.075217026117334e+00 -5.996074885780695e+00 3.320448620161547e+00 4.774895037181163e+00 9.205009635862118e+03 + 23960 9.950743358065683e-01 -6.050015329793554e+00 -6.008786555733002e+00 3.444909133640445e+00 4.681651134428307e+00 9.244035468228272e+03 + 23980 9.984518829605556e-01 -6.034363734355538e+00 -6.015387406415675e+00 3.493260527924752e+00 4.602225539532707e+00 9.264340947957600e+03 + 24000 9.901066727809733e-01 -5.999955087889771e+00 -6.002442554528635e+00 3.686744449890698e+00 4.672461031516127e+00 9.224518900457093e+03 + 24020 9.929144194602537e-01 -5.984044373109232e+00 -5.950715316965018e+00 3.786412932251656e+00 4.977793530286505e+00 9.066342661911020e+03 + 24040 1.053449424471868e+00 -6.053023077655664e+00 -5.953513403951625e+00 3.384182363420871e+00 4.955582308901699e+00 9.074876687387617e+03 + 24060 9.935963053243630e-01 -5.944789489477801e+00 -6.008585743944305e+00 3.975164767478685e+00 4.608836801893545e+00 9.243394778199807e+03 + 24080 1.008598837588408e+00 -5.952312361908022e+00 -5.983852095747551e+00 3.948743651748072e+00 4.767637619283461e+00 9.167542194563657e+03 + 24100 1.039617793378025e+00 -5.988883696873023e+00 -6.007373191184286e+00 3.770035663566809e+00 4.663866125991538e+00 9.239687609096258e+03 + 24120 1.032876852952362e+00 -5.976306552788454e+00 -6.023190614570858e+00 3.822725042292434e+00 4.553509504252758e+00 9.288373326818131e+03 + 24140 1.025908166184252e+00 -5.967606891553671e+00 -6.020841763957241e+00 3.852449591463940e+00 4.546766716052756e+00 9.281136792898273e+03 + 24160 1.015692766037965e+00 -5.954689844650210e+00 -6.008156189477858e+00 3.958481694382245e+00 4.651469668491773e+00 9.242101515639601e+03 + 24180 1.006454058534310e+00 -5.945568399362463e+00 -6.017971298147499e+00 3.974610237219224e+00 4.558861588083172e+00 9.272309808642991e+03 + 24200 1.024115924726461e+00 -5.978118008870537e+00 -6.033761538569079e+00 3.789874096924634e+00 4.470360338587216e+00 9.320981050546647e+03 + 24220 1.014009007421846e+00 -5.971649602304685e+00 -6.037922524755314e+00 3.785225670718830e+00 4.404676294305718e+00 9.333851538324097e+03 + 24240 1.030588317741757e+00 -6.006672940371399e+00 -6.011131369064864e+00 3.665240487915033e+00 4.639639500417551e+00 9.251259649248190e+03 + 24260 1.032799083574534e+00 -6.020154086524438e+00 -6.049082870836463e+00 3.580558749123652e+00 4.414445192889101e+00 9.368330949739693e+03 + 24280 8.944599349795245e-01 -5.829340751136027e+00 -6.064005914682426e+00 4.525360427909154e+00 4.177876744509038e+00 9.414576138284774e+03 + 24300 9.984967493431696e-01 -5.998065518296047e+00 -6.012397270671221e+00 3.687733260887534e+00 4.605438120917771e+00 9.255152399831215e+03 + 24320 1.000641457247221e+00 -6.016333819899034e+00 -5.992009949304992e+00 3.607765897294534e+00 4.747437326352333e+00 9.192521933323615e+03 + 24340 9.728665242258239e-01 -5.987664549132372e+00 -5.974382593663725e+00 3.810742786184715e+00 4.887009829861654e+00 9.138570172302190e+03 + 24360 1.049782005888907e+00 -6.113353404207963e+00 -5.998355015900117e+00 3.051074317684598e+00 4.711412859291327e+00 9.211986554953890e+03 + 24380 9.076967398382690e-01 -5.915401481724168e+00 -6.048827615953693e+00 4.073693600363690e+00 4.307540089990217e+00 9.367521527726327e+03 + 24400 9.853708998684139e-01 -6.042337333545764e+00 -5.963533815626914e+00 3.492684247633987e+00 4.945186242329008e+00 9.105453058091221e+03 + 24420 9.779519209529595e-01 -6.039217823812852e+00 -5.982024902690989e+00 3.507927951457429e+00 4.836338555115105e+00 9.161959571779769e+03 + 24440 1.028652883327693e+00 -6.120956960367353e+00 -5.989536879812207e+00 3.008273216642551e+00 4.762907656381937e+00 9.184961740985927e+03 + 24460 9.754193826709597e-01 -6.048594076886068e+00 -5.974945186944693e+00 3.462235479865352e+00 4.885138803037610e+00 9.140287951871136e+03 + 24480 9.656359340516233e-01 -6.038614144376597e+00 -5.979534522678211e+00 3.520536971938327e+00 4.859781302272367e+00 9.154351555935047e+03 + 24500 1.008526626519664e+00 -6.105233611852269e+00 -5.988412824788652e+00 3.131829585097349e+00 4.802632622375015e+00 9.181522130583477e+03 + 24520 9.969122859136935e-01 -6.087314278833569e+00 -5.999540133622036e+00 3.257531189292348e+00 4.761543914102045e+00 9.215644215804412e+03 + 24540 9.181038418559867e-01 -5.964679850640079e+00 -5.994147339615951e+00 3.867771643814020e+00 4.698564762035376e+00 9.199112627833223e+03 + 24560 1.007928009966990e+00 -6.087389977851733e+00 -5.943300740239629e+00 3.249019148156082e+00 5.076401848262242e+00 9.043824272441392e+03 + 24580 9.846035585755484e-01 -6.033939775796517e+00 -5.964125514380301e+00 3.528363626743388e+00 4.929247919517339e+00 9.107247058342849e+03 + 24600 9.619141770738985e-01 -5.975134743821143e+00 -6.025218221592451e+00 3.837838139796431e+00 4.550251060040445e+00 9.294615637178467e+03 + 24620 1.023646910950984e+00 -6.033321914606761e+00 -6.012999052096410e+00 3.476467437844374e+00 4.593164459331623e+00 9.257011041563977e+03 + 24640 9.883181429912322e-01 -5.948330359022422e+00 -6.035392655396787e+00 3.937262828286544e+00 4.437337649658119e+00 9.326028120266761e+03 + 24660 1.008587650953296e+00 -5.947951848998422e+00 -6.033533098607539e+00 3.966342186939557e+00 4.474921408028435e+00 9.320276445989561e+03 + 24680 1.023254873262603e+00 -5.942590734834437e+00 -6.032882377788955e+00 4.014909530314265e+00 4.496440943882837e+00 9.318280958244395e+03 + 24700 1.073539035883313e+00 -5.997036371014651e+00 -6.029657702130103e+00 3.701454470217791e+00 4.514137738818192e+00 9.308328241112104e+03 + 24720 1.038188085381236e+00 -5.931371427502929e+00 -6.004637934558472e+00 4.103791422207566e+00 4.683083800739309e+00 9.231289125006366e+03 + 24740 9.802546081976065e-01 -5.838075729215221e+00 -6.007934658251597e+00 4.509943179440929e+00 4.534586923329742e+00 9.241382657432108e+03 + 24760 9.834801348740070e-01 -5.838179462243146e+00 -6.007101615886058e+00 4.671572517744147e+00 4.701595370907753e+00 9.238757736126970e+03 + 24780 1.046907427566315e+00 -5.931176979289883e+00 -5.999845118449656e+00 4.095330241738809e+00 4.701027160323200e+00 9.216545822879083e+03 + 24800 9.890970830678699e-01 -5.847406693819051e+00 -6.079671023959563e+00 4.558458496441965e+00 4.224760769986217e+00 9.463224662646033e+03 + 24820 1.068559716326653e+00 -5.977219689017462e+00 -5.991263312565978e+00 3.858753823138704e+00 4.778113163479407e+00 9.190247926388634e+03 + 24840 1.050447079513754e+00 -5.973374618087465e+00 -5.972591787885340e+00 3.862101608747089e+00 4.866596740910275e+00 9.133079102457024e+03 + 24860 9.551455620169513e-01 -5.860338322110857e+00 -6.027558197246420e+00 4.496625165197022e+00 4.536422764976572e+00 9.301829675585021e+03 + 24880 1.053568666978196e+00 -6.044066388791570e+00 -6.010510090972565e+00 3.480992978384114e+00 4.673678433281143e+00 9.249292884414992e+03 + 24900 9.934772947553909e-01 -5.998574687659675e+00 -5.994498741814298e+00 3.756579578838002e+00 4.779984290632738e+00 9.200160648668938e+03 + 24920 1.004819662220164e+00 -6.058019066789635e+00 -5.986443841933086e+00 3.429190632730087e+00 4.840186650086642e+00 9.175495814353388e+03 + 24940 9.333766607446183e-01 -5.988007906607703e+00 -6.017201745293049e+00 3.815197354523459e+00 4.647561815060273e+00 9.269945824054810e+03 + 24960 9.953118360004829e-01 -6.106414217729097e+00 -5.977875797227708e+00 3.142405259665446e+00 4.880492761440710e+00 9.149286197136549e+03 + 24980 9.389609694247300e-01 -6.039424169451664e+00 -5.976784515608776e+00 3.524021883344068e+00 4.883708469165033e+00 9.145943940355732e+03 + 25000 1.021298406554060e+00 -6.169012586067874e+00 -6.005738496142936e+00 2.772375931114391e+00 4.709921022047144e+00 9.234681365900948e+03 + 25020 8.970199456774209e-01 -5.986254756516197e+00 -6.006852939454157e+00 3.834418343047697e+00 4.716140389059425e+00 9.238093082762227e+03 + 25040 9.373766569826291e-01 -6.042144058863648e+00 -6.015084473687793e+00 3.511768192894261e+00 4.667148518431291e+00 9.263417427618378e+03 + 25060 9.169179660995167e-01 -6.004177197307262e+00 -6.009543737577303e+00 3.673622376089657e+00 4.642806871389663e+00 9.246359993713751e+03 + 25080 9.661187661701454e-01 -6.066098162929717e+00 -5.983018729953681e+00 3.426768430183138e+00 4.903823390832239e+00 9.164995970482374e+03 + 25100 9.787966407415332e-01 -6.069206545454048e+00 -6.015661738131121e+00 3.267330985244146e+00 4.574793554924549e+00 9.265191817880988e+03 + 25120 9.788892251486335e-01 -6.052718361386717e+00 -5.972015810813353e+00 3.439840900283265e+00 4.903247434354856e+00 9.131336575125084e+03 + 25140 9.681513771096300e-01 -6.019451892538259e+00 -6.012200995749929e+00 3.561702971319687e+00 4.603338742750935e+00 9.254547249860325e+03 + 25160 9.309128777984570e-01 -5.945241626197062e+00 -6.034964567071962e+00 4.004836446876724e+00 4.489633435792817e+00 9.324691503959575e+03 + 25180 1.006058693145230e+00 -6.037194733147822e+00 -6.013894497682836e+00 3.486781731992483e+00 4.620575289732221e+00 9.259776601007243e+03 + 25200 1.025842500807844e+00 -6.050002741782516e+00 -6.049364062988539e+00 3.370287176027751e+00 4.373954568497991e+00 9.369234106279026e+03 + 25220 1.003100500599713e+00 -6.004046036256691e+00 -6.022102157656734e+00 3.671280473242780e+00 4.567599429987973e+00 9.285042397632966e+03 + 25240 1.064166955031397e+00 -6.084783466566471e+00 -5.957651693948488e+00 3.255057353550620e+00 4.985067665501303e+00 9.087522364615419e+03 + 25260 9.605410199502851e-01 -5.922753651440207e+00 -5.984311678693154e+00 4.109312034923668e+00 4.755836316363315e+00 9.168946607970493e+03 + 25280 9.985388851132635e-01 -5.970205750827290e+00 -6.008290648769282e+00 3.763849116695558e+00 4.545159739093733e+00 9.242490050440339e+03 + 25300 1.047080092039443e+00 -6.034292941231458e+00 -5.983875113926064e+00 3.491906902880467e+00 4.781413869401601e+00 9.167628985741661e+03 + 25320 9.853109900055954e-01 -5.937653927073246e+00 -5.980605309004058e+00 3.962205853919735e+00 4.715572372168139e+00 9.157616268602002e+03 + 25340 1.068237803444794e+00 -6.055283309404507e+00 -5.981932244561525e+00 3.436013344269545e+00 4.857206509638541e+00 9.161650185424402e+03 + 25360 1.053245090918012e+00 -6.030587932117379e+00 -5.997507790044111e+00 3.578549359542827e+00 4.768500654462974e+00 9.209412268636599e+03 + 25380 1.000883110446410e+00 -5.955569382117465e+00 -6.006767543427498e+00 3.937236034365120e+00 4.643248269233059e+00 9.237786320672150e+03 + 25400 9.796607520065639e-01 -5.926717606150513e+00 -5.979715818236763e+00 4.094647951054140e+00 4.790324015808074e+00 9.154883116886396e+03 + 25420 1.022745569411853e+00 -5.993347160010311e+00 -5.970526901489540e+00 3.706806234429999e+00 4.837843690279858e+00 9.126786846414907e+03 + 25440 9.657359911946622e-01 -5.910919238806466e+00 -6.043416610128262e+00 4.120342279325468e+00 4.359521869293768e+00 9.350812168407230e+03 + 25460 1.011984361106450e+00 -5.986003988007022e+00 -6.006345261742263e+00 3.761024717618938e+00 4.644221976029246e+00 9.236543570518705e+03 + 25480 9.857075605702293e-01 -5.959595554877169e+00 -6.007945640092950e+00 3.910395727061808e+00 4.632762055601290e+00 9.241456406004072e+03 + 25500 9.831778801967717e-01 -5.980027930507499e+00 -6.025877614856469e+00 3.793361816088093e+00 4.530085833340584e+00 9.296657324173346e+03 + 25520 1.055124152990025e+00 -6.127539720916109e+00 -5.971332605472899e+00 3.009710811563143e+00 4.906676241411049e+00 9.129262379872194e+03 + 25540 9.810731921061823e-01 -6.069521226837232e+00 -6.008061541976624e+00 3.304603464016857e+00 4.657514485341965e+00 9.241827222390451e+03 + 25560 9.519920937852896e-01 -6.077789885639940e+00 -6.021697045750013e+00 3.234517552299371e+00 4.556611319286255e+00 9.283789764785879e+03 + 25580 8.768960614945165e-01 -6.004706354507245e+00 -5.959553025016761e+00 3.745280375644142e+00 5.004557781033663e+00 9.093305529486042e+03 + 25600 9.637267958799459e-01 -6.154754018476939e+00 -5.992003107369703e+00 2.868572962733742e+00 4.803113879933589e+00 9.192528520463044e+03 + 25620 9.412579924039020e-01 -6.135305413494863e+00 -5.985191758526433e+00 2.988924042590679e+00 4.850899879432433e+00 9.171666287015061e+03 + 25640 8.816441052255399e-01 -6.052061764355211e+00 -5.988884361104717e+00 3.402157101877232e+00 4.764931528013127e+00 9.182949553624600e+03 + 25660 9.098324493436031e-01 -6.088357573104333e+00 -5.965169323401383e+00 3.223657992648954e+00 4.931023985763327e+00 9.110417779885996e+03 + 25680 9.333053694194586e-01 -6.107217380538256e+00 -5.949075972227413e+00 3.149983917537468e+00 5.058056356362174e+00 9.061380811155155e+03 + 25700 9.173095378972868e-01 -6.059078401819902e+00 -5.967050998722505e+00 3.362089280585657e+00 4.890524870365516e+00 9.116174143148270e+03 + 25720 9.277209153198580e-01 -6.041038180841880e+00 -5.980080226764808e+00 3.457561031285756e+00 4.807591036809209e+00 9.155981117993555e+03 + 25740 1.010766511069370e+00 -6.123830409409469e+00 -5.984999963907922e+00 2.997928308241534e+00 4.795114210253427e+00 9.171065932910171e+03 + 25760 9.524297891098265e-01 -6.000845269193007e+00 -5.985240609941362e+00 3.664323888926160e+00 4.753928257162312e+00 9.171770017833216e+03 + 25780 9.513611519677030e-01 -5.968092148502381e+00 -5.966523397320382e+00 3.842294207035356e+00 4.851302219085851e+00 9.114554646154780e+03 + 25800 9.657049348805068e-01 -5.958198058103020e+00 -6.020600735205639e+00 3.939634880359980e+00 4.581309051653667e+00 9.280368056927085e+03 + 25820 1.062153445574549e+00 -6.077082829647437e+00 -5.980834767560508e+00 3.275296149889738e+00 4.827967416732353e+00 9.158292758135745e+03 + 25840 1.023396966393312e+00 -6.000750881867030e+00 -5.953293891355035e+00 3.664866821142515e+00 4.937372204607941e+00 9.074214941082610e+03 + 25860 9.802427676578191e-01 -5.920806002543928e+00 -5.961679192928036e+00 4.110524436734681e+00 4.875824252443356e+00 9.099729940713589e+03 + 25880 9.734696895922152e-01 -5.895854092044422e+00 -6.002905937680329e+00 4.259640094827924e+00 4.644931830966972e+00 9.225934760568734e+03 + 25900 1.072830297821731e+00 -6.032110236127459e+00 -5.967093362827668e+00 3.535783191961928e+00 4.909120139777959e+00 9.116302612982314e+03 + 25920 1.008818279729162e+00 -5.930388283115262e+00 -5.996685645082760e+00 4.032023612486922e+00 4.651333900585942e+00 9.206875656452117e+03 + 25940 9.604111280560184e-01 -5.853657955730506e+00 -6.037954659371901e+00 4.435802993303708e+00 4.377542801172098e+00 9.333930315960726e+03 + 25960 1.099384282805530e+00 -6.056658827377374e+00 -5.962668464640556e+00 3.380114390722614e+00 4.919821598519054e+00 9.102806426401146e+03 + 25980 1.027298229393469e+00 -5.950096210713926e+00 -6.014165368949624e+00 3.912156996870025e+00 4.544261975610453e+00 9.260567419084713e+03 + 26000 1.018392523716680e+00 -5.942450653448435e+00 -6.017467465044152e+00 3.986270328016146e+00 4.555512187019464e+00 9.270747203785386e+03 + 26020 9.959283945606101e-01 -5.921600640435349e+00 -5.993817897402833e+00 4.097719968508047e+00 4.683037303416357e+00 9.198052863263672e+03 + 26040 1.004167210311523e+00 -5.950346703214370e+00 -5.978280430691507e+00 3.902267019905094e+00 4.741867234001018e+00 9.150444709874984e+03 + 26060 1.049134079644829e+00 -6.036803106406152e+00 -5.987095445660588e+00 3.468499844318236e+00 4.753928924554909e+00 9.177474585772541e+03 + 26080 1.026218752989698e+00 -6.031171243762435e+00 -5.985677017210115e+00 3.539159160532024e+00 4.800394049604249e+00 9.173100140175191e+03 + 26100 9.392594035445407e-01 -5.934218137850061e+00 -6.014068301371411e+00 4.024291089025573e+00 4.565779093313107e+00 9.260283785425618e+03 + 26120 9.512240467925916e-01 -5.988988916732684e+00 -6.017871171805234e+00 3.779601605137140e+00 4.613755226996023e+00 9.271984703745893e+03 + 26140 9.960809724730890e-01 -6.095122216890608e+00 -5.982575281037149e+00 3.208135286069953e+00 4.854397208322547e+00 9.163658283160163e+03 + 26160 9.160939804689968e-01 -6.012180785413905e+00 -6.026307813584104e+00 3.639273975936193e+00 4.558154394032365e+00 9.297980933105917e+03 + 26180 9.662262067461681e-01 -6.115762818175169e+00 -6.002504197838276e+00 3.061988910826899e+00 4.712337435516188e+00 9.224750518760346e+03 + 26200 9.453695345952386e-01 -6.103662516785826e+00 -5.991061923054637e+00 3.193109869770761e+00 4.839679903860810e+00 9.189621170972330e+03 + 26220 8.861661039222235e-01 -6.025500011322938e+00 -6.040148150534377e+00 3.582542732089503e+00 4.498430849945204e+00 9.340721996992048e+03 + 26240 9.439092256582445e-01 -6.113487567814783e+00 -6.003140713779043e+00 3.149998732403559e+00 4.783627444397252e+00 9.226693327869381e+03 + 26260 9.197241621735672e-01 -6.071964778881519e+00 -6.008336982322382e+00 3.292082558520587e+00 4.657443212732849e+00 9.242667962676733e+03 + 26280 9.435277106252464e-01 -6.096155229261827e+00 -5.996742216988634e+00 3.199087601023340e+00 4.769932501609940e+00 9.207055839041413e+03 + 26300 9.218045740493285e-01 -6.047708821279508e+00 -6.009489639312625e+00 3.441610222400578e+00 4.661070679653712e+00 9.246213493102432e+03 + 26320 9.252040659232807e-01 -6.032608892966441e+00 -5.998961219992685e+00 3.529453666625325e+00 4.722663811801195e+00 9.213857153045321e+03 + 26340 9.902981232272590e-01 -6.106580223681664e+00 -6.001655980827415e+00 3.136309836229737e+00 4.738801075672935e+00 9.222123783446699e+03 + 26360 9.431367099233550e-01 -6.015561196035239e+00 -5.995378360170598e+00 3.635081864821340e+00 4.750974831639862e+00 9.202874318618680e+03 + 26380 9.949114680471377e-01 -6.074777248058229e+00 -5.951019168090145e+00 3.311973224271712e+00 5.022611270949429e+00 9.067306220851191e+03 + 26400 9.899066095904333e-01 -6.050731486826334e+00 -6.005744416313608e+00 3.396625876526365e+00 4.654948597137098e+00 9.234698638076165e+03 + 26420 9.883190757678249e-01 -6.035857592180676e+00 -6.023229999708681e+00 3.490904015411199e+00 4.563413605499015e+00 9.288498216236321e+03 + 26440 9.993556143962278e-01 -6.042389464877455e+00 -5.997491349774313e+00 3.443164545933044e+00 4.700976470816142e+00 9.209355638380161e+03 + 26460 1.009826051505172e+00 -6.050009021346177e+00 -6.011167397187894e+00 3.415670402816726e+00 4.638705019455502e+00 9.251362774203964e+03 + 26480 9.485045981692308e-01 -5.951528491571622e+00 -6.038440028273707e+00 3.923490847805867e+00 4.424431354545663e+00 9.335441527714080e+03 + 26500 9.475692539997201e-01 -5.942597358948994e+00 -6.033366682273623e+00 3.986878348151550e+00 4.465666847114142e+00 9.319766658493700e+03 + 26520 9.683781448299486e-01 -5.965698302467739e+00 -6.009110821059569e+00 3.864477847994406e+00 4.615196448174585e+00 9.245015247814323e+03 + 26540 9.571153784774734e-01 -5.938661398776790e+00 -6.017420438071207e+00 4.019368618536496e+00 4.567122026986012e+00 9.270595672342546e+03 + 26560 9.963700323918843e-01 -5.987266008402548e+00 -6.016442415018030e+00 3.778471790211424e+00 4.610936348390993e+00 9.267584696572065e+03 + 26580 1.014618035535428e+00 -6.004919037984700e+00 -6.004076874488086e+00 3.624048904752096e+00 4.628884737874035e+00 9.229557131398606e+03 + 26600 1.054285166233861e+00 -6.053568123749942e+00 -5.961135674284072e+00 3.385179415656896e+00 4.915940844365252e+00 9.098125928411304e+03 + 26620 1.035384421160120e+00 -6.013681962307880e+00 -6.008862078014003e+00 3.654978203510955e+00 4.682654725001078e+00 9.244243113771221e+03 + 26640 1.018829673976967e+00 -5.979180568012238e+00 -5.999347286184133e+00 3.885319588473103e+00 4.769519171940534e+00 9.215041618229545e+03 + 26660 1.061430348537269e+00 -6.032142779805004e+00 -6.064902160153220e+00 3.540599914669801e+00 4.352490483212619e+00 9.417357377514185e+03 + 26680 9.913657132534580e-01 -5.920956260720130e+00 -6.051146714030268e+00 4.114671702326757e+00 4.367097972512410e+00 9.374724534707220e+03 + 26700 1.040439721194922e+00 -5.990387072684332e+00 -6.031717927883734e+00 3.732116873758050e+00 4.494788707273917e+00 9.314688098969315e+03 + 26720 1.001849163680788e+00 -5.932894647199312e+00 -6.064868365915213e+00 4.037019069263300e+00 4.279205553529630e+00 9.417269803173511e+03 + 26740 9.655843383654731e-01 -5.883765207646092e+00 -6.093842876272586e+00 4.331818868059222e+00 4.125520385391742e+00 9.507353989955931e+03 + 26760 1.045175055068835e+00 -6.014227725931010e+00 -6.005413066204813e+00 3.620610650833521e+00 4.671225791045525e+00 9.233677075569769e+03 + 26780 9.953599414492561e-01 -5.958594356564933e+00 -6.020993260402718e+00 3.938842125619652e+00 4.580537963583931e+00 9.281593795121291e+03 + 26800 9.829828001559450e-01 -5.962483699211297e+00 -6.005825944128868e+00 3.912140194834136e+00 4.663262317326716e+00 9.234939674281130e+03 + 26820 1.035266936602966e+00 -6.069340024950086e+00 -6.027556690046854e+00 3.302497899252490e+00 4.542424274217028e+00 9.301865634970136e+03 + 26840 1.007876330954407e+00 -6.064606813736348e+00 -6.013595367064669e+00 3.301142664408001e+00 4.594058285192643e+00 9.258837165956951e+03 + 26860 9.699348531984305e-01 -6.042845085070240e+00 -6.000851436257970e+00 3.445350527832958e+00 4.686484557809165e+00 9.219668789844749e+03 + 26880 9.634473563485493e-01 -6.061085928946822e+00 -5.998173517769858e+00 3.351124585171625e+00 4.712377385813921e+00 9.211453137806910e+03 + 26900 9.499127806399479e-01 -6.063500963243912e+00 -5.993824002202202e+00 3.331383970088634e+00 4.731479862865003e+00 9.198123525066230e+03 + 26920 9.899795160606156e-01 -6.139012501191987e+00 -5.984251302603741e+00 2.987269645834671e+00 4.875932397346461e+00 9.168784631172943e+03 + 26940 9.701071593392978e-01 -6.121034847466492e+00 -5.970910871083147e+00 3.042603786074674e+00 4.904638890078101e+00 9.127979237816195e+03 + 26960 8.491853202647082e-01 -5.944881097762019e+00 -6.023840335551021e+00 4.004781449475719e+00 4.551385287188713e+00 9.290377004956044e+03 + 26980 9.421397124393567e-01 -6.079498699946559e+00 -5.987801441110460e+00 3.232226280624345e+00 4.758766130966166e+00 9.179660665414938e+03 + 27000 9.744729480255444e-01 -6.116145792772875e+00 -5.982560877711191e+00 3.106261484498423e+00 4.873326738981408e+00 9.163613674252221e+03 + 27020 9.223727352729290e-01 -6.021076397508061e+00 -5.988284880546438e+00 3.578016343419241e+00 4.766310308283730e+00 9.181126167199975e+03 + 27040 9.455831063228392e-01 -6.026887245417519e+00 -5.978433197965661e+00 3.598286903920087e+00 4.876517542628264e+00 9.150955219626328e+03 + 27060 9.689533105277583e-01 -6.025688247526988e+00 -6.025503931106525e+00 3.514748149213525e+00 4.515806522622698e+00 9.295509340748611e+03 + 27080 1.012399636967868e+00 -6.050008456217423e+00 -5.999017193649915e+00 3.412643072630035e+00 4.705442793165047e+00 9.214027251005758e+03 + 27100 9.891940338380578e-01 -5.977650664108701e+00 -5.976215594413667e+00 3.803483184296121e+00 4.811723576561329e+00 9.144184401562585e+03 + 27120 9.687017500544800e-01 -5.916598487889412e+00 -5.988534448480671e+00 4.139800697606367e+00 4.726733279837431e+00 9.181881267819166e+03 + 27140 1.037146436436462e+00 -5.993807494022347e+00 -6.017964017470762e+00 3.715348726106671e+00 4.576638230255953e+00 9.272264987648879e+03 + 27160 1.016934884494603e+00 -5.947880379769530e+00 -6.038643569513634e+00 3.984561533065667e+00 4.463385251996804e+00 9.336055558785029e+03 + 27180 1.034507542746743e+00 -5.967819089135967e+00 -6.035228275935958e+00 3.884340318121123e+00 4.497266335977636e+00 9.325505220584442e+03 + 27200 1.071178492827565e+00 -6.023204575304274e+00 -6.020554920965714e+00 3.542048774279277e+00 4.557263499523975e+00 9.280253901903241e+03 + 27220 9.867644844035480e-01 -5.902529903526671e+00 -6.015385185253888e+00 4.241353637449309e+00 4.593321145473221e+00 9.264317521186465e+03 + 27240 1.059979797456440e+00 -6.016569449353873e+00 -5.960166307226832e+00 3.612473295505697e+00 4.936348865957199e+00 9.095170882167500e+03 + 27260 1.060608216219965e+00 -6.024244994406827e+00 -5.977130014179148e+00 3.552489729559791e+00 4.823031237046751e+00 9.146970897468702e+03 + 27280 9.960753965283066e-01 -5.936047062756765e+00 -6.003107861470136e+00 4.076359438239574e+00 4.691285954402334e+00 9.226526196044453e+03 + 27300 1.042541389049485e+00 -6.013710439778599e+00 -6.037708513043897e+00 3.608611603120279e+00 4.470810952741102e+00 9.333151858054540e+03 + 27320 9.444775768942942e-01 -5.880580310794739e+00 -6.065088673664728e+00 4.306916409866738e+00 4.247440837690388e+00 9.417949748538475e+03 + 27340 1.008534627286023e+00 -5.991846922656856e+00 -6.008688748098925e+00 3.679424533256534e+00 4.582716165304110e+00 9.243739661273345e+03 + 27360 9.630546366672733e-01 -5.940984462555936e+00 -5.989684225866467e+00 4.015297708059070e+00 4.735656130865983e+00 9.185401570380916e+03 + 27380 9.988885380947690e-01 -6.009749248724494e+00 -5.987202522399756e+00 3.591687043220364e+00 4.721153834871629e+00 9.177808010865125e+03 + 27400 9.930793117447083e-01 -6.017143289298067e+00 -5.976048856374288e+00 3.630207531687882e+00 4.866178124879166e+00 9.143678305964455e+03 + 27420 1.030636429210788e+00 -6.087880293211160e+00 -5.948888627407857e+00 3.235744056369835e+00 5.033855710303177e+00 9.060830934950771e+03 + 27440 9.462319624054668e-01 -5.977642549775878e+00 -5.992349407946955e+00 3.805257004151622e+00 4.720807948654352e+00 9.193567063702878e+03 + 27460 9.645352579399442e-01 -6.018538379506525e+00 -5.963629477826064e+00 3.687134074552471e+00 5.002429485126754e+00 9.105727451914574e+03 + 27480 1.002738936303536e+00 -6.089151904983111e+00 -5.991858877217838e+00 3.254760976637729e+00 4.813432598113311e+00 9.192068475447604e+03 + 27500 9.353743570856123e-01 -6.005748106118038e+00 -6.022869736927978e+00 3.679806405605295e+00 4.581491351930812e+00 9.287390104871154e+03 + 27520 9.799217585818061e-01 -6.089366435245411e+00 -5.979941766002367e+00 3.260457932166900e+00 4.888791316373299e+00 9.155580841170713e+03 + 27540 9.283970948727412e-01 -6.033878178272121e+00 -5.991787180755086e+00 3.555020238949807e+00 4.796713260253438e+00 9.191878560445837e+03 + 27560 9.522218752693293e-01 -6.091707939125141e+00 -5.991324388102013e+00 3.247395478249032e+00 4.823813362528147e+00 9.190441020623144e+03 + 27580 9.625618546082225e-01 -6.129966572553270e+00 -5.973605676107027e+00 3.013035905586652e+00 4.910884369751501e+00 9.136215649408119e+03 + 27600 9.472254913757170e-01 -6.126036363920218e+00 -5.991533718444473e+00 2.991903831992664e+00 4.764238836531508e+00 9.191089495114022e+03 + 27620 8.714750487600875e-01 -6.028001610369969e+00 -5.982686609703543e+00 3.533834384544501e+00 4.794040130844811e+00 9.163989097108841e+03 + 27640 8.996218362433056e-01 -6.076111518085125e+00 -5.963663964378407e+00 3.250352449233675e+00 4.896043703820350e+00 9.105841281497531e+03 + 27660 8.884259422073223e-01 -6.055151989915837e+00 -5.949853639156968e+00 3.412411358058467e+00 5.017050782983009e+00 9.063757821715657e+03 + 27680 9.558661347182068e-01 -6.139451230840570e+00 -5.964487393905256e+00 2.923995218435233e+00 4.928664645684069e+00 9.108359546052705e+03 + 27700 9.427480597644755e-01 -6.093510468254363e+00 -5.967946230079281e+00 3.159864819455000e+00 4.880874106059382e+00 9.118928697665700e+03 + 27720 9.608589617458617e-01 -6.083073963087498e+00 -5.987435436768905e+00 3.270083422360786e+00 4.819254640496267e+00 9.178520926841047e+03 + 27740 9.483046541488918e-01 -6.021258818969733e+00 -5.994886706388693e+00 3.564206071180362e+00 4.715638822691925e+00 9.201374288213323e+03 + 27760 9.486324698030321e-01 -5.980383338328356e+00 -5.990702534221319e+00 3.771870386982515e+00 4.712615967274717e+00 9.188549570618308e+03 + 27780 1.043234891490521e+00 -6.084072596070903e+00 -5.989805163573187e+00 3.280550576214043e+00 4.821848761453962e+00 9.185762877391515e+03 + 27800 9.462777331022916e-01 -5.911316177144968e+00 -6.022247478570696e+00 4.254849241028481e+00 4.617864541678540e+00 9.285463190241648e+03 + 27820 1.041778414646208e+00 -6.032876913893089e+00 -5.978612164661120e+00 3.476616344254921e+00 4.788212931787688e+00 9.151518188195550e+03 + 27840 1.039470761840076e+00 -6.014265230341593e+00 -5.978256302392833e+00 3.659957011239747e+00 4.866725847885116e+00 9.150420976034360e+03 + 27860 1.015181200971059e+00 -5.966262020403065e+00 -6.028966695349557e+00 3.863268309063966e+00 4.503208362004117e+00 9.306166085901783e+03 + 27880 1.024841218237219e+00 -5.973730386219399e+00 -6.003883041818700e+00 3.871523022445162e+00 4.698381807885605e+00 9.228937359090134e+03 + 27900 1.011277400152437e+00 -5.948608245003178e+00 -6.021541896239807e+00 3.979148036182251e+00 4.560351724335476e+00 9.283280107952132e+03 + 27920 9.695039402174337e-01 -5.885701219590517e+00 -6.035573877983513e+00 4.324162621374119e+00 4.463570624162602e+00 9.326561815037468e+03 + 27940 1.033810576615482e+00 -5.980572172736323e+00 -5.965801148508310e+00 3.845938570782814e+00 4.930756077708684e+00 9.112362866227797e+03 + 27960 1.049616977200825e+00 -6.005430142597134e+00 -5.982606595612739e+00 3.614999144886190e+00 4.746055483603064e+00 9.163734576042832e+03 + 27980 1.033753319888638e+00 -5.985257730354960e+00 -5.995690880871207e+00 3.789186175277897e+00 4.729277410488785e+00 9.203828087378617e+03 + 28000 1.057505199077214e+00 -6.031099990860334e+00 -5.989260064416386e+00 3.523942069007464e+00 4.764193401356305e+00 9.184103000493253e+03 + 28020 1.048766753519728e+00 -6.033736160918774e+00 -5.970519444527135e+00 3.530205769007253e+00 4.893205937283286e+00 9.126708711083033e+03 + 28040 9.695261096033957e-01 -5.936656690271800e+00 -5.960906876923937e+00 4.002741396690560e+00 4.863493072229734e+00 9.097363369294753e+03 + 28060 9.856662990412596e-01 -5.979387234082172e+00 -5.942331647575939e+00 3.817786579363989e+00 5.030565491416257e+00 9.040853248464282e+03 + 28080 1.059373091536898e+00 -6.111332584964903e+00 -5.994605601387574e+00 3.108023494561577e+00 4.778287897704928e+00 9.200486078063295e+03 + 28100 9.038957662314364e-01 -5.908830343121240e+00 -6.055890621635804e+00 4.153883971179798e+00 4.309441094444620e+00 9.389432379710319e+03 + 28120 1.008060788723283e+00 -6.097835488996002e+00 -5.976912873797956e+00 3.206362921656118e+00 4.900719290837520e+00 9.146312908976432e+03 + 28140 9.583930563362792e-01 -6.059891299820267e+00 -5.979638007578159e+00 3.387611631710931e+00 4.848438454921950e+00 9.154647667282694e+03 + 28160 9.861648629247483e-01 -6.131400760209572e+00 -5.980359086580825e+00 2.991286816328650e+00 4.858591479928367e+00 9.156856998614861e+03 + 28180 9.331741432074954e-01 -6.080274568648893e+00 -6.010906672424127e+00 3.256662056310701e+00 4.654983251080555e+00 9.250575868091884e+03 + 28200 9.487365970115789e-01 -6.124053786821472e+00 -5.980234239423813e+00 3.026249650686636e+00 4.852083747847020e+00 9.156495382343082e+03 + 28220 9.114577634125778e-01 -6.082060719689925e+00 -5.965068694096035e+00 3.267330318008544e+00 4.939116633426106e+00 9.110117421907767e+03 + 28240 9.204217757524628e-01 -6.098852783840079e+00 -5.935993573515242e+00 3.139492347080061e+00 5.074655135146623e+00 9.021597983002457e+03 + 28260 9.655212033004757e-01 -6.158440556204259e+00 -5.963638518525968e+00 2.838817927477874e+00 4.957401373344522e+00 9.105772460240843e+03 + 28280 9.873924749750815e-01 -6.174496784372912e+00 -5.966858916174683e+00 2.763346835914446e+00 4.955635606964932e+00 9.115612627892451e+03 + 28300 9.062975886648298e-01 -6.026802835103730e+00 -5.983901089239057e+00 3.537851694646410e+00 4.784200158425085e+00 9.167693145932984e+03 + 28320 9.240469692638211e-01 -6.009904912254956e+00 -5.996691526747439e+00 3.689365663590512e+00 4.765238967939470e+00 9.206883761337367e+03 + 28340 1.004311492099203e+00 -6.074908507271499e+00 -5.985888975239829e+00 3.345657912128385e+00 4.856821840782293e+00 9.173791333612286e+03 + 28360 1.016706758180717e+00 -6.041796236053391e+00 -6.030985962253030e+00 3.470893581743478e+00 4.532967846789619e+00 9.312434135093177e+03 + 28380 9.874048950994018e-01 -5.964654456240957e+00 -6.022495151868238e+00 3.873952801740150e+00 4.541822576629586e+00 9.286240841701350e+03 + 28400 1.041488541426884e+00 -6.025868643446168e+00 -6.008228877105564e+00 3.550770396740445e+00 4.652060664813215e+00 9.242325953813262e+03 + 28420 1.002885854865181e+00 -5.958381897030820e+00 -5.996224775982426e+00 3.957127022452642e+00 4.739827355345930e+00 9.205477884187449e+03 + 28440 1.049370544181631e+00 -6.022186024690050e+00 -5.973239231574145e+00 3.578594037951742e+00 4.859654098515019e+00 9.135078924877598e+03 + 28460 9.857187145804207e-01 -5.925467128856044e+00 -6.019228836604713e+00 4.084316227801585e+00 4.545921992331354e+00 9.276155748451205e+03 + 28480 1.016912184696090e+00 -5.970975071262721e+00 -6.038946003969629e+00 3.866536090339538e+00 4.476236476268629e+00 9.336997068464581e+03 + 28500 1.028307300006997e+00 -5.990560082016213e+00 -6.027136568431067e+00 3.705765742755110e+00 4.495737897568036e+00 9.300558280627594e+03 + 28520 1.016954212438940e+00 -5.980298001324171e+00 -5.977040781160179e+00 3.865383997349741e+00 4.884087459584578e+00 9.146687088651623e+03 + 28540 1.056024721359412e+00 -6.045516148948617e+00 -5.956156535862871e+00 3.486221098932965e+00 4.999337825626756e+00 9.082947105417434e+03 + 28560 9.839051355476658e-01 -5.948191718973401e+00 -5.993043752948756e+00 3.990724759891959e+00 4.733177439975648e+00 9.195697565700497e+03 + 28580 1.006138102519820e+00 -5.989701164156847e+00 -6.008171374837757e+00 3.772379272464455e+00 4.666320464478808e+00 9.242129777662814e+03 + 28600 1.037766030104577e+00 -6.047661953637897e+00 -6.006616425912386e+00 3.482074364646931e+00 4.717764136621707e+00 9.237361069371234e+03 + 28620 9.659443376312803e-01 -5.955158072010705e+00 -6.009664018831449e+00 3.972361147049752e+00 4.659379565637028e+00 9.246740770913540e+03 + 28640 1.017316284906998e+00 -6.045576804131761e+00 -5.995286608078919e+00 3.449584518786223e+00 4.738358606904329e+00 9.202587117532499e+03 + 28660 9.577804407050799e-01 -5.972745379337040e+00 -6.014008556755306e+00 3.870009954647008e+00 4.633070404455253e+00 9.260101274630691e+03 + 28680 9.474413353539920e-01 -5.973897071055424e+00 -6.002065631535745e+00 3.852656283446636e+00 4.690908050097980e+00 9.223373693040479e+03 + 28700 1.017104471432281e+00 -6.091282034671464e+00 -5.981710620472496e+00 3.222513698750876e+00 4.851689715202898e+00 9.160915217138234e+03 + 28720 1.005345044397297e+00 -6.088815245676647e+00 -5.942833924228069e+00 3.290074517050226e+00 5.128321855344449e+00 9.042400026548798e+03 + 28740 9.813762673374394e-01 -6.066549915314827e+00 -5.957266113139400e+00 3.356101876411747e+00 4.983626380116779e+00 9.086343519063474e+03 + 28760 9.653847697801363e-01 -6.054643177173745e+00 -5.988457378538456e+00 3.365662673375492e+00 4.745711771358559e+00 9.181657630333046e+03 + 28780 9.587590993123012e-01 -6.054058434583946e+00 -5.979365665902244e+00 3.388949683867171e+00 4.817847120306103e+00 9.153831636261464e+03 + 28800 9.040431139686514e-01 -5.979314352604691e+00 -5.993252864811110e+00 3.849403104418126e+00 4.769366010351073e+00 9.196326797466869e+03 + 28820 9.115654142044766e-01 -5.989940615113626e+00 -5.992423743629933e+00 3.762417450336267e+00 4.748158942132736e+00 9.193793244142766e+03 + 28840 9.754058565697546e-01 -6.076886502898839e+00 -5.969441678219704e+00 3.310135214941831e+00 4.927100025282309e+00 9.123482238600380e+03 + 28860 9.587361316427093e-01 -6.034558712246425e+00 -6.002407221117857e+00 3.505872605608647e+00 4.690491443096056e+00 9.224448066894422e+03 + 28880 1.011675087147180e+00 -6.086326826020558e+00 -6.005672971429328e+00 3.200717685995156e+00 4.663844600201662e+00 9.234496103880314e+03 + 28900 9.766675390624291e-01 -6.004355916494490e+00 -5.987623152207387e+00 3.630942804509664e+00 4.727024926433113e+00 9.179083018325524e+03 + 28920 1.049191871161144e+00 -6.076350377546601e+00 -5.950209815476448e+00 3.293840001112845e+00 5.018158628708557e+00 9.064827234880959e+03 + 28940 1.012873183427687e+00 -5.978436158514741e+00 -5.977472307116853e+00 3.795201997156629e+00 4.800736581038823e+00 9.148020884569307e+03 + 28960 1.028732091672302e+00 -5.963321835645610e+00 -6.013958050130856e+00 3.835515301610799e+00 4.544754322107647e+00 9.259941569164273e+03 + 28980 1.021772659444471e+00 -5.923753828854793e+00 -6.032654140884123e+00 4.114243566344634e+00 4.488921122403402e+00 9.317556792062800e+03 + 29000 1.082243177129964e+00 -5.993774074450423e+00 -5.970542686263892e+00 3.805520179121197e+00 4.938918405133962e+00 9.126826970490769e+03 + 29020 1.021588304188529e+00 -5.890514213167553e+00 -6.026716394264996e+00 4.363543487268874e+00 4.581449486187946e+00 9.299245006984265e+03 + 29040 1.058507080087246e+00 -5.940779001325294e+00 -6.060849535106583e+00 4.059049754102874e+00 4.369586168275657e+00 9.404797986556085e+03 + 29060 1.057459784182103e+00 -5.943785254801710e+00 -6.036615025991380e+00 3.988057943463091e+00 4.455015031931338e+00 9.329782234796643e+03 + 29080 1.022219879864499e+00 -5.903059204429085e+00 -6.012451262507249e+00 4.178034987108999e+00 4.549888861257902e+00 9.255313282078598e+03 + 29100 1.083637908939573e+00 -6.011380434521747e+00 -6.020794606531589e+00 3.632432060311167e+00 4.578374427792243e+00 9.280972407843090e+03 + 29120 9.957837155052961e-01 -5.903348281736229e+00 -6.037350414592377e+00 4.245562060164006e+00 4.476101076540965e+00 9.332011422013924e+03 + 29140 9.672713287498631e-01 -5.885866115602342e+00 -5.955195294563532e+00 4.278806776372667e+00 4.880707902121741e+00 9.080000970897076e+03 + 29160 9.927843018394513e-01 -5.945994384435984e+00 -5.997639634403891e+00 4.020529081432159e+00 4.723974064039837e+00 9.209798576411866e+03 + 29180 1.069533995994706e+00 -6.083723542092270e+00 -6.050761140409985e+00 3.207582727474011e+00 4.396857938848859e+00 9.373536178109489e+03 + 29200 9.845417440568524e-01 -5.985811107064321e+00 -6.006454279476295e+00 3.768825195889611e+00 4.650288905379449e+00 9.236881346242813e+03 + 29220 9.647934047677093e-01 -5.980184108831502e+00 -5.970880839224472e+00 3.806001605504369e+00 4.859422419264249e+00 9.127865520067760e+03 + 29240 1.026214752622953e+00 -6.089218700927397e+00 -5.978251701129010e+00 3.148789439563063e+00 4.785979124493122e+00 9.150410489362395e+03 + 29260 9.950024545978784e-01 -6.056184673287427e+00 -5.967407847834280e+00 3.409120036176434e+00 4.918890306097744e+00 9.117264454824444e+03 + 29280 9.976840082535774e-01 -6.068816260444843e+00 -5.982403250709504e+00 3.329374449560904e+00 4.825571323831264e+00 9.163104307796335e+03 + 29300 9.274399326175897e-01 -5.968193313051001e+00 -5.978248299784009e+00 3.860816723012973e+00 4.803079433187877e+00 9.150368344070803e+03 + 29320 9.868006097871423e-01 -6.054855062030459e+00 -5.966588184295469e+00 3.396901175539483e+00 4.903743246748975e+00 9.114754717728470e+03 + 29340 9.899444781062093e-01 -6.055138059269869e+00 -5.967437554726304e+00 3.419775396780256e+00 4.923365265478624e+00 9.117367431745864e+03 + 29360 9.663727155608948e-01 -6.013310413477299e+00 -5.974131730563347e+00 3.648840874536920e+00 4.873810934710417e+00 9.137808363160486e+03 + 29380 9.750770533677555e-01 -6.018640411511455e+00 -5.987806748717642e+00 3.611856037783077e+00 4.788907701039046e+00 9.179653685664820e+03 + 29400 9.748765965418188e-01 -6.012207410241462e+00 -5.995438264592647e+00 3.649146671623696e+00 4.745437700956098e+00 9.203035879862704e+03 + 29420 9.438078754944723e-01 -5.958641768052282e+00 -6.030963389991151e+00 3.867763678269130e+00 4.452481733361319e+00 9.312350037892540e+03 + 29440 1.056461221571512e+00 -6.118561804609593e+00 -5.976282403200306e+00 3.016902514516836e+00 4.833892855075169e+00 9.144396181895105e+03 + 29460 9.109807593599298e-01 -5.893652520520836e+00 -6.035823972869681e+00 4.250997572711173e+00 4.434627092362953e+00 9.327338199520040e+03 + 29480 1.073132083698660e+00 -6.125540645559286e+00 -5.927099584086852e+00 3.029538146102407e+00 5.169017429732140e+00 8.994627736545643e+03 + 29500 9.507761180188994e-01 -5.933684047595972e+00 -6.013722739154598e+00 4.082156803746088e+00 4.622562250868972e+00 9.259209622948030e+03 + 29520 1.070893063264405e+00 -6.100279961877620e+00 -5.994733191897323e+00 3.149417233303650e+00 4.755483119840385e+00 9.200905378148676e+03 + 29540 1.033192584583307e+00 -6.035594357949856e+00 -6.015534286027502e+00 3.504554562004205e+00 4.619742599268458e+00 9.264793066581120e+03 + 29560 9.984235088410777e-01 -5.978632026053406e+00 -5.992818916503188e+00 3.811773593477925e+00 4.730310273101077e+00 9.194980578456067e+03 + 29580 9.782168386658057e-01 -5.941064268115537e+00 -5.981033740331191e+00 4.028280180474235e+00 4.798769285756112e+00 9.158909295133537e+03 + 29600 1.010188133657555e+00 -5.977931663523375e+00 -5.997737042644165e+00 3.748774257593740e+00 4.635048705809655e+00 9.210117436464387e+03 + 29620 1.027322148721312e+00 -5.992813557031439e+00 -5.994670763920011e+00 3.731566906097881e+00 4.720902536741860e+00 9.200677584387106e+03 + 29640 9.659535898942938e-01 -5.891778197022241e+00 -6.014854489953541e+00 4.285876055292825e+00 4.579152935286527e+00 9.262676790536627e+03 + 29660 1.068408927267755e+00 -6.031798237411427e+00 -5.971858562367476e+00 3.461458336456697e+00 4.805641226193798e+00 9.130849865628978e+03 + 29680 9.528229368747220e-01 -5.846588627198785e+00 -5.997008497659730e+00 4.549702832894747e+00 4.685968659308274e+00 9.207807988589573e+03 + 29700 9.778655348391855e-01 -5.866592344020100e+00 -5.979465093578170e+00 4.427079488647842e+00 4.778946693683861e+00 9.154075779230565e+03 + 29720 1.046019026322564e+00 -5.941033829065968e+00 -5.987436754604585e+00 3.994007143952243e+00 4.727554364679986e+00 9.178496655866271e+03 + 29740 1.093017904360123e+00 -5.981286143635683e+00 -5.968445706027685e+00 3.795850897039152e+00 4.869582676835570e+00 9.120400718628467e+03 + 29760 1.081435015660344e+00 -5.937528636263007e+00 -5.960042500858987e+00 4.042979893505347e+00 4.913701798985946e+00 9.094743820373702e+03 + 29780 1.032977594009540e+00 -5.842985650638500e+00 -5.962574875481101e+00 4.529599589561191e+00 4.842899754142242e+00 9.102494569419829e+03 + 29800 1.110155829983875e+00 -5.937079912755975e+00 -5.963508388900301e+00 4.033115698808997e+00 4.881359298994812e+00 9.105338159836523e+03 + 29820 1.069364079718904e+00 -5.862036650250691e+00 -6.034739694386893e+00 4.345039869171149e+00 4.353352264031374e+00 9.323996368686723e+03 + 29840 1.124937716235160e+00 -5.941882666546898e+00 -6.000174210698900e+00 3.968797563006729e+00 4.634078495898632e+00 9.217552726273581e+03 + 29860 1.103010236366959e+00 -5.917815645411634e+00 -6.002372566345578e+00 4.106585964895744e+00 4.621047039751814e+00 9.224283373865937e+03 + 29880 1.082760243061814e+00 -5.908888543703807e+00 -5.961252090247383e+00 4.178931860089552e+00 4.878252272603703e+00 9.098451030699134e+03 + 29900 1.057986508276424e+00 -5.904214241847932e+00 -6.013298785997994e+00 4.198190129393701e+00 4.571809796105394e+00 9.257891858807350e+03 + 29920 9.996815436691404e-01 -5.859184389749883e+00 -6.005210465816346e+00 4.512688882206788e+00 4.674184555970916e+00 9.233049362274414e+03 + 29940 1.049197383888980e+00 -5.979803533765239e+00 -6.006492940301733e+00 3.803678436581749e+00 4.650423734076885e+00 9.236994899481502e+03 + 29960 1.029478396893733e+00 -5.996329089212416e+00 -6.046717811347401e+00 3.635458778889337e+00 4.346118938760705e+00 9.361033313396620e+03 + 29980 1.044480118617374e+00 -6.056243846655912e+00 -5.975131600274828e+00 3.418881713304631e+00 4.884640784104372e+00 9.140868585131188e+03 + 30000 1.016767391866971e+00 -6.041880949276345e+00 -6.008532375668739e+00 3.425265928605920e+00 4.616758598935883e+00 9.243254019607506e+03 + 30020 9.922247197783098e-01 -6.023803263966383e+00 -6.005941781914484e+00 3.514202224383747e+00 4.616765618381163e+00 9.235310858602918e+03 + 30040 1.015084969262159e+00 -6.069619921071927e+00 -6.007898245326070e+00 3.335982280909654e+00 4.690397694440826e+00 9.241326647138807e+03 + 30060 9.882612529099631e-01 -6.040284749510060e+00 -6.023507846472330e+00 3.465731552741875e+00 4.562067126201876e+00 9.289377826918633e+03 + 30080 1.006152782716636e+00 -6.075767938727057e+00 -5.986193350702851e+00 3.285433879225506e+00 4.799785025283194e+00 9.174733880226882e+03 + 30100 9.679814941592997e-01 -6.025131795077628e+00 -6.019920002711325e+00 3.549667806400158e+00 4.579594724689728e+00 9.278290579112328e+03 + 30120 9.311208921328133e-01 -5.973117554157160e+00 -5.982077785981280e+00 3.886328053177712e+00 4.834877015452216e+00 9.162080792690465e+03 + 30140 1.016894008588022e+00 -6.095566240787789e+00 -5.954919582073374e+00 3.187354219830481e+00 4.994969099168746e+00 9.079179160131311e+03 + 30160 1.000528545015609e+00 -6.066061308542642e+00 -6.007830879936967e+00 3.293919819856046e+00 4.628287952039537e+00 9.241075914727677e+03 + 30180 9.956050615235298e-01 -6.050461112666764e+00 -5.965799988060901e+00 3.427096780125436e+00 4.913234058878992e+00 9.112351260889902e+03 + 30200 9.882358765782590e-01 -6.026515988153109e+00 -5.964714821978155e+00 3.557479226850643e+00 4.912351086726785e+00 9.109051797357193e+03 + 30220 1.006934228929713e+00 -6.035253633162323e+00 -5.980793283070424e+00 3.511727090969686e+00 4.824446848909312e+00 9.158179293361896e+03 + 30240 1.004118717215138e+00 -6.008648526824767e+00 -5.962032954551027e+00 3.655754961014896e+00 4.923428790747208e+00 9.100862582232357e+03 + 30260 9.813019668401489e-01 -5.947496886525927e+00 -5.977684413881758e+00 4.003691062380976e+00 4.830349608799037e+00 9.148656976793382e+03 + 30280 1.024481767133316e+00 -5.978499913010214e+00 -5.986694342097683e+00 3.809221359835032e+00 4.762167679930986e+00 9.176251467302583e+03 + 30300 9.372559915964310e-01 -5.812215677039879e+00 -6.071883747463453e+00 4.663143359153668e+00 4.172089115277479e+00 9.439007312162808e+03 + 30320 1.037288373435426e+00 -5.928307902238423e+00 -6.030087311434825e+00 4.050865057736326e+00 4.466431939817912e+00 9.309624715503543e+03 + 30340 1.068069193295996e+00 -5.943532333151957e+00 -5.985089649760610e+00 3.998435209050835e+00 4.759806666109988e+00 9.171338455044290e+03 + 30360 1.088471716750496e+00 -5.950361095175069e+00 -6.038067073983443e+00 3.932682962372284e+00 4.429061659598243e+00 9.334267393989394e+03 + 30380 1.087176090824334e+00 -5.936349256647279e+00 -6.035533122416764e+00 4.048510510878478e+00 4.478981404976475e+00 9.326472522392092e+03 + 30400 1.059111122397142e+00 -5.893360705102793e+00 -6.071651010853246e+00 4.185555474317064e+00 4.161784948362317e+00 9.438313057485690e+03 + 30420 1.070826677341120e+00 -5.918315395300726e+00 -6.008904710307636e+00 4.086356900497336e+00 4.566179035076466e+00 9.244419129936921e+03 + 30440 1.016543629364807e+00 -5.857560330802976e+00 -6.013409112803366e+00 4.455599245142363e+00 4.560691421375054e+00 9.258217533942241e+03 + 30460 9.702987054343737e-01 -5.814606880813549e+00 -6.033768896319408e+00 4.666416210599313e+00 4.407954002352379e+00 9.320931574525333e+03 + 30480 1.082733533589915e+00 -6.016922587497267e+00 -6.006907900640629e+00 3.547957095010784e+00 4.605462976709386e+00 9.238182664729875e+03 + 30500 1.001906763239213e+00 -5.943670747390758e+00 -6.013336663985812e+00 3.990900521965803e+00 4.590868048111253e+00 9.258016240636491e+03 + 30520 9.797690573249267e-01 -5.965765034306995e+00 -6.052580723175923e+00 3.875323223374128e+00 4.376814103204312e+00 9.379168511796996e+03 + 30540 1.053728165387525e+00 -6.130671941847972e+00 -5.974409347140792e+00 2.995504204736305e+00 4.892788205103312e+00 9.138683789743040e+03 + 30560 9.149138820086319e-01 -5.962518195578482e+00 -6.013974570802310e+00 3.900819426229920e+00 4.605348956846370e+00 9.260001380764621e+03 + 30580 9.794553746289623e-01 -6.076446572662526e+00 -5.977868597052700e+00 3.312814132337314e+00 4.878864123181362e+00 9.149207616915081e+03 + 30600 9.793786307577188e-01 -6.081191036216134e+00 -5.999309945015895e+00 3.265622291146604e+00 4.735796187876284e+00 9.214930712703792e+03 + 30620 9.839331633188340e-01 -6.088366487284060e+00 -5.989463688150250e+00 3.230073602719602e+00 4.797988780504639e+00 9.184724500492623e+03 + 30640 9.496629160440291e-01 -6.033569190909154e+00 -6.006531523771501e+00 3.502253657486081e+00 4.657508126255953e+00 9.237121583300195e+03 + 30660 9.980475234917288e-01 -6.096680730751965e+00 -5.998652985178605e+00 3.155440872244674e+00 4.718331357071502e+00 9.212928116577159e+03 + 30680 8.790823870794808e-01 -5.909962481524311e+00 -6.029714861845568e+00 4.178182439655728e+00 4.490545740230115e+00 9.308492611090194e+03 + 30700 1.009297806258212e+00 -6.088813060451855e+00 -5.977629584834364e+00 3.230760801937853e+00 4.869193524520734e+00 9.148528958501074e+03 + 30720 9.647424618486342e-01 -6.003133083901356e+00 -6.027874374965818e+00 3.660157053700603e+00 4.518088731706042e+00 9.302828902110852e+03 + 30740 9.600666106900217e-01 -5.976134918318284e+00 -6.012833302033489e+00 3.789619177423901e+00 4.578891379074669e+00 9.256499692122556e+03 + 30760 1.007209515135164e+00 -6.023076443973832e+00 -5.963509756986515e+00 3.602289666375500e+00 4.944330800971693e+00 9.105374791885750e+03 + 30780 9.835253434531696e-01 -5.962995925613893e+00 -6.014890918717711e+00 3.852615370239854e+00 4.554626289113505e+00 9.262824358974634e+03 + 30800 9.901096090643858e-01 -5.949810021567699e+00 -6.015644753909554e+00 3.992353676019660e+00 4.614320455020824e+00 9.265117359220740e+03 + 30820 1.068298446540637e+00 -6.043063452334981e+00 -5.996360832258252e+00 3.462060193646347e+00 4.730233865334025e+00 9.205877255751644e+03 + 30840 1.009641441733039e+00 -5.936741398002539e+00 -6.017183552823007e+00 3.972366426346770e+00 4.510455124984414e+00 9.269864940620777e+03 + 30860 1.001333536575028e+00 -5.908763650218204e+00 -5.980623464157447e+00 4.195983326084190e+00 4.783353154174789e+00 9.157640802325868e+03 + 30880 1.085065814710660e+00 -6.018338678779311e+00 -5.953923545065096e+00 3.607800033275592e+00 4.977681699272343e+00 9.076147967617149e+03 + 30900 1.011603814605248e+00 -5.899719690816252e+00 -6.013462543619100e+00 4.221226040462660e+00 4.568096978019121e+00 9.258373463897826e+03 + 30920 1.066779677787184e+00 -5.977035359572429e+00 -5.946862693356818e+00 3.870758310224919e+00 5.044014428839958e+00 9.054610640585372e+03 + 30940 1.039123952151273e+00 -5.932544068130576e+00 -5.967119335583754e+00 4.121097257770650e+00 4.922560721549155e+00 9.116361559327639e+03 + 30960 1.030126243359813e+00 -5.918898599943358e+00 -5.982771855073100e+00 4.177914678652430e+00 4.811144563343162e+00 9.164230979907226e+03 + 30980 1.041838106261155e+00 -5.941069203124223e+00 -6.040250910121639e+00 3.963139528041572e+00 4.393622818142854e+00 9.341022992867327e+03 + 31000 1.097328558014269e+00 -6.036532622298008e+00 -5.976050016383020e+00 3.511759002120119e+00 4.859059484936999e+00 9.143660928666943e+03 + 31020 1.006434645681044e+00 -5.926743668792462e+00 -5.999709846357222e+00 4.047484804560873e+00 4.628501721504532e+00 9.216165690815711e+03 + 31040 9.905252794761835e-01 -5.937717825332274e+00 -5.995257706230751e+00 4.033339371263279e+00 4.702936470876431e+00 9.202476411251106e+03 + 31060 1.016987042923998e+00 -6.020824078426609e+00 -5.980650268413588e+00 3.617821430976102e+00 4.848505664947877e+00 9.157729985073440e+03 + 31080 9.383106110221200e-01 -5.948953612527005e+00 -6.031196282731257e+00 3.903632523246659e+00 4.431382383921761e+00 9.313074749745740e+03 + 31100 9.690788583441644e-01 -6.036941636175341e+00 -5.991339430290878e+00 3.483109432521416e+00 4.744964355628549e+00 9.190478033356183e+03 + 31120 9.652855434407017e-01 -6.062619184450023e+00 -5.969069139354080e+00 3.369716354034427e+00 4.906895189798020e+00 9.122341404331593e+03 + 31140 9.237416682692647e-01 -6.019563778864507e+00 -5.986824420386447e+00 3.572364109905785e+00 4.760358572686156e+00 9.176655323694271e+03 + 31160 9.256175182566047e-01 -6.031879444997407e+00 -6.025219372497717e+00 3.534864139694895e+00 4.573107306631002e+00 9.294630936408337e+03 + 31180 9.349901431113254e-01 -6.047606582801631e+00 -6.020628472488992e+00 3.375558650995205e+00 4.530471135259454e+00 9.280511344569504e+03 + 31200 9.844343169412370e-01 -6.118465197851640e+00 -5.991291620025524e+00 3.059765794970863e+00 4.790016158895991e+00 9.190359627360043e+03 + 31220 9.779250394008274e-01 -6.103035818425727e+00 -5.961586384649608e+00 3.181685567927520e+00 4.993910105899131e+00 9.099524142841708e+03 + 31240 8.759283831900172e-01 -5.942396795784949e+00 -6.013894726646763e+00 4.024795946931501e+00 4.614243763653922e+00 9.259738381603776e+03 + 31260 1.003056755248818e+00 -6.113892981814609e+00 -5.947410488959805e+00 3.158705190330195e+00 5.114673427384988e+00 9.056305435744935e+03 + 31280 9.769911168449510e-01 -6.053347453364530e+00 -5.984812822346967e+00 3.443266253142045e+00 4.836802710144763e+00 9.170482865757986e+03 + 31300 1.020752563820373e+00 -6.095664620845620e+00 -5.972416874954117e+00 3.191883713498897e+00 4.899591342934939e+00 9.132566182949346e+03 + 31320 1.022478766241860e+00 -6.074910491468308e+00 -5.951231616356780e+00 3.307908009440895e+00 5.018091249575357e+00 9.067948788001102e+03 + 31340 1.054971990168924e+00 -6.098569456498211e+00 -5.953494755592094e+00 3.170954231169822e+00 5.003995614010156e+00 9.074840432369208e+03 + 31360 9.973704590653775e-01 -5.992901349612234e+00 -6.008411289892942e+00 3.696805355528511e+00 4.607744878281185e+00 9.242890666183901e+03 + 31380 1.035628978166274e+00 -6.035234657909723e+00 -5.959017789900678e+00 3.538157483577374e+00 4.975806534207514e+00 9.091658589163611e+03 + 31400 1.007215446884386e+00 -5.981156457653849e+00 -5.933268956614238e+00 3.854855956008263e+00 5.129833397544546e+00 9.013292065947442e+03 + 31420 9.700833558294085e-01 -5.913391699591791e+00 -6.001616926214121e+00 4.152830836972430e+00 4.646227932897317e+00 9.221955601442796e+03 + 31440 1.062862843593357e+00 -6.042710698824335e+00 -5.976886352318830e+00 3.427057257211922e+00 4.805030841131234e+00 9.146240160481975e+03 + 31460 9.974447708621510e-01 -5.940636885119797e+00 -6.034965496522629e+00 4.006989045379230e+00 4.465339561398729e+00 9.324701673798418e+03 + 31480 1.034264271048248e+00 -5.995907947803619e+00 -6.057014092170522e+00 3.674362031945616e+00 4.323481094845580e+00 9.392922485782594e+03 + 31500 1.020663026102032e+00 -5.979463450604142e+00 -6.043463959910865e+00 3.821253711133585e+00 4.453752882647569e+00 9.350968589700768e+03 + 31520 1.023930684951674e+00 -5.990545388184390e+00 -6.012252731437277e+00 3.769512702140426e+00 4.644865777981839e+00 9.254708195328310e+03 + 31540 1.049660241105234e+00 -6.036748637479337e+00 -5.978966489806875e+00 3.569285429009280e+00 4.901079462703013e+00 9.152580803756582e+03 + 31560 1.029057026142104e+00 -6.012542251167478e+00 -5.983816831933439e+00 3.713630461812929e+00 4.878576264299037e+00 9.167432320713644e+03 + 31580 1.061709728414808e+00 -6.068510000087695e+00 -5.983056710726014e+00 3.385350178848636e+00 4.876036190217199e+00 9.165112362652819e+03 + 31600 1.005963352151126e+00 -5.993701890546827e+00 -6.042791400573085e+00 3.730616879704237e+00 4.448737316556342e+00 9.348883070659540e+03 + 31620 1.010493528781656e+00 -6.009473726344407e+00 -6.010284957607306e+00 3.639767455784868e+00 4.635109240335668e+00 9.248652010803937e+03 + 31640 9.971633125753645e-01 -5.998655478294780e+00 -6.004410674399989e+00 3.739992032045502e+00 4.706944805395673e+00 9.230575939776329e+03 + 31660 9.887207839355799e-01 -5.995155597896978e+00 -5.991574033134789e+00 3.695853234837108e+00 4.716419133946953e+00 9.191215127168460e+03 + 31680 9.703943878744241e-01 -5.976235338269938e+00 -6.029102758110812e+00 3.856033208415129e+00 4.552460302482052e+00 9.306587282107315e+03 + 31700 1.021146141569824e+00 -6.059415821922836e+00 -5.984234799927833e+00 3.390284422167717e+00 4.821985484688577e+00 9.168703142613313e+03 + 31720 9.823584890550099e-01 -6.007388218439872e+00 -5.997969499707191e+00 3.698141858659910e+00 4.752225599164981e+00 9.210818309084396e+03 + 31740 1.010897179502517e+00 -6.054301677109072e+00 -6.011722415749551e+00 3.400609805734097e+00 4.645106513579862e+00 9.253084691950648e+03 + 31760 9.795242658260285e-01 -6.015029940721191e+00 -6.037562228610831e+00 3.603959048689419e+00 4.474575164766823e+00 9.332725988776559e+03 + 31780 1.067038334897512e+00 -6.157119628526302e+00 -5.953987579750482e+00 2.913559449512548e+00 5.079975108166266e+00 9.076343552371096e+03 + 31800 9.195949052916385e-01 -5.953305472037782e+00 -6.010268298126794e+00 3.951982022750168e+00 4.624892660378209e+00 9.248581019164323e+03 + 31820 1.004815422944286e+00 -6.098686739303657e+00 -5.961584522823613e+00 3.164300742848844e+00 4.951562886376689e+00 9.099505832036777e+03 + 31840 9.289304413315859e-01 -6.008640209452857e+00 -6.020085703299594e+00 3.635871880088492e+00 4.570150083236086e+00 9.278822310846777e+03 + 31860 9.585223467802553e-01 -6.078126829287502e+00 -5.980148135985970e+00 3.315237763639118e+00 4.877846582730301e+00 9.156201436281284e+03 + 31880 9.357973841139077e-01 -6.065006489685641e+00 -5.973976723715542e+00 3.385341798201100e+00 4.908048801212166e+00 9.137317683490974e+03 + 31900 9.622485557608046e-01 -6.120735472922959e+00 -5.980038325891370e+00 3.034250056582494e+00 4.842154847651015e+00 9.155871464859647e+03 + 31920 9.254293647485294e-01 -6.077623434944692e+00 -5.997467152567999e+00 3.262871742118818e+00 4.723141519670403e+00 9.209302102219070e+03 + 31940 9.466773570666212e-01 -6.114150059026270e+00 -5.974298839189773e+00 3.108013554573379e+00 4.911060900780869e+00 9.138336748224461e+03 + 31960 8.951138003405223e-01 -6.035203417283264e+00 -6.005904957796069e+00 3.483053505449365e+00 4.651289793746792e+00 9.235191564896037e+03 + 31980 9.674772298737931e-01 -6.131290412923964e+00 -5.985953066114665e+00 2.967152712836285e+00 4.801702249097014e+00 9.173999222842505e+03 + 32000 9.151687308805541e-01 -6.033182285661968e+00 -6.006360537697566e+00 3.533443001796853e+00 4.687457629260535e+00 9.236591218996804e+03 + 32020 9.329394209775618e-01 -6.031322865775140e+00 -6.018396704824514e+00 3.483206505572282e+00 4.557430522067715e+00 9.273620285000563e+03 + 32040 1.014622252942742e+00 -6.116210189421648e+00 -5.970314071633263e+00 3.095209412653582e+00 4.932967498345749e+00 9.126147471483651e+03 + 32060 9.752743607819213e-01 -6.020267915840212e+00 -5.998289426610700e+00 3.608749341467501e+00 4.734953227783574e+00 9.211814682333496e+03 + 32080 1.034853770589371e+00 -6.072876486258344e+00 -5.972414558398592e+00 3.381856196713629e+00 4.958724132917416e+00 9.132557684545227e+03 + 32100 9.636459671481310e-01 -5.935712418042361e+00 -6.044567058566010e+00 4.001724812770362e+00 4.376664621682392e+00 9.354357701737485e+03 + 32120 1.014976934167490e+00 -5.986939133031907e+00 -6.008125509346358e+00 3.748937485352682e+00 4.627282033973968e+00 9.242013618468278e+03 + 32140 1.055877228880048e+00 -6.028586948410262e+00 -6.000318115015489e+00 3.565921846872949e+00 4.728245862813565e+00 9.218013078284330e+03 + 32160 1.020863871416893e+00 -5.964581972725310e+00 -5.962843633470621e+00 3.897480382951808e+00 4.907462195959360e+00 9.103331835043660e+03 + 32180 1.040603962268929e+00 -5.985525144525254e+00 -5.947976311839689e+00 3.807058448993650e+00 5.022669656937245e+00 9.058014658168457e+03 + 32200 1.004225116949734e+00 -5.924670945837244e+00 -5.985152646157317e+00 4.093669765122435e+00 4.746374482371698e+00 9.171491371042935e+03 + 32220 1.034965909824623e+00 -5.965343999346651e+00 -5.956457413216826e+00 3.913427198957867e+00 4.964455351710082e+00 9.083845782765093e+03 + 32240 1.022343541261796e+00 -5.943430668803857e+00 -5.993263761940056e+00 3.939274574789402e+00 4.653125242355109e+00 9.196374564547248e+03 + 32260 1.013315546690252e+00 -5.928522719815480e+00 -5.985698939482600e+00 4.101543275701234e+00 4.773228574381233e+00 9.173175631752434e+03 + 32280 1.059212635853594e+00 -5.999589900997943e+00 -5.987597441084226e+00 3.639100673593213e+00 4.707963234244949e+00 9.179022057591794e+03 + 32300 1.043091902488871e+00 -5.982750498995590e+00 -6.018173349463371e+00 3.753479567076826e+00 4.550076078022437e+00 9.272927611214955e+03 + 32320 9.960002004924462e-01 -5.925539211578099e+00 -6.042532690157208e+00 4.081881931560716e+00 4.410087272877169e+00 9.348070077293960e+03 + 32340 1.012745165168379e+00 -5.969722238636041e+00 -6.013196662310541e+00 3.834423018681704e+00 4.584786150297402e+00 9.257597620543975e+03 + 32360 1.034399184427269e+00 -6.029104578250220e+00 -6.003194690991163e+00 3.495597162416441e+00 4.644375744600048e+00 9.226870929816167e+03 + 32380 9.722915226433857e-01 -5.973151181185625e+00 -6.015041308741568e+00 3.890683037376547e+00 4.650143442474038e+00 9.263283398830101e+03 + 32400 9.976249220341185e-01 -6.055644742241949e+00 -6.033392618281356e+00 3.334059509022716e+00 4.461834648309491e+00 9.319858715298624e+03 + 32420 9.111814549617361e-01 -5.976629688062792e+00 -5.990439677087604e+00 3.772747455875586e+00 4.693448361806219e+00 9.187714106781797e+03 + 32440 9.311821100018742e-01 -6.042972545226986e+00 -5.944346640755546e+00 3.470688353048231e+00 5.037013558832632e+00 9.046983030889913e+03 + 32460 9.457060037709563e-01 -6.086344330307546e+00 -5.992328867173882e+00 3.186631424455464e+00 4.726482762614869e+00 9.193542506170570e+03 + 32480 9.211491694250057e-01 -6.064450023792324e+00 -6.042150210442010e+00 3.278478786011996e+00 4.406527765154468e+00 9.346903274506667e+03 + 32500 9.745196411001332e-01 -6.150703076940249e+00 -5.963161091978562e+00 2.887918676668388e+00 4.964813776346770e+00 9.104315289702728e+03 + 32520 9.420780892600498e-01 -6.100424802990642e+00 -5.972609535054874e+00 3.157631318919244e+00 4.891566366755217e+00 9.133153964215675e+03 + 32540 8.941819844812283e-01 -6.019487301886222e+00 -5.978055719836230e+00 3.610341759746424e+00 4.848248315394082e+00 9.149814335019460e+03 + 32560 9.574705975210956e-01 -6.098156409554119e+00 -5.987089320670942e+00 3.164884122672570e+00 4.802648534616228e+00 9.177476191346832e+03 + 32580 9.669712722388146e-01 -6.096277603991965e+00 -6.020634157460800e+00 3.144200697002606e+00 4.578557072770075e+00 9.280501374446865e+03 + 32600 9.545382031429612e-01 -6.059829377622717e+00 -5.993924334608217e+00 3.326098593156519e+00 4.704535548918223e+00 9.198431825205653e+03 + 32620 8.820136041831191e-01 -5.933395852948081e+00 -6.026720162763350e+00 4.005636103264551e+00 4.469753474415003e+00 9.299267771395173e+03 + 32640 1.026171642786762e+00 -6.128642427057849e+00 -5.973928437745823e+00 3.028899531599942e+00 4.917291200142062e+00 9.137194907120793e+03 + 32660 9.954509267786282e-01 -6.064038713570797e+00 -5.995538215500442e+00 3.367796593050097e+00 4.761137053387893e+00 9.203374657679680e+03 + 32680 9.678378785449161e-01 -6.007236532003341e+00 -5.978573559158003e+00 3.676731681366806e+00 4.841318907025447e+00 9.151382916690802e+03 + 32700 9.850152364537634e-01 -6.017452556249521e+00 -5.993285352770817e+00 3.601573168938829e+00 4.740344991176194e+00 9.196462110044624e+03 + 32720 9.964918219327976e-01 -6.017706837762883e+00 -6.000713296826092e+00 3.586905078304135e+00 4.684484620105146e+00 9.219228997333652e+03 + 32740 1.011855946185646e+00 -6.025644395926242e+00 -6.016697215477672e+00 3.536154189146110e+00 4.587530283853496e+00 9.268371572912933e+03 + 32760 9.884985354163046e-01 -5.978529017573485e+00 -6.054913664882109e+00 3.777202113232237e+00 4.338589647900145e+00 9.386405658224165e+03 + 32780 9.948188638879417e-01 -5.979895339342377e+00 -6.018354499348703e+00 3.818136290426440e+00 4.597297842134339e+00 9.273481399700213e+03 + 32800 1.029707340054262e+00 -6.024715145423071e+00 -5.970652692697107e+00 3.574208886569269e+00 4.884643856259276e+00 9.127189255561274e+03 + 32820 9.631914057895057e-01 -5.920071387288813e+00 -6.027295707935913e+00 4.135747720624055e+00 4.520049078558413e+00 9.301025162060238e+03 + 32840 9.783456506880607e-01 -5.937400524689138e+00 -6.015948257332845e+00 4.069136250911697e+00 4.618103014849190e+00 9.266046956598579e+03 + 32860 1.038951277304072e+00 -6.021898288056663e+00 -5.995082604800057e+00 3.607924270047689e+00 4.761904073020697e+00 9.201973846341320e+03 + 32880 1.043813797743947e+00 -6.025815493722068e+00 -6.046399682376568e+00 3.494188908358649e+00 4.375991311711612e+00 9.360065557711128e+03 + 32900 1.014450505218701e+00 -5.984368728957874e+00 -5.999105407841731e+00 3.780953996978146e+00 4.696333706333353e+00 9.214317201241920e+03 + 32920 1.028516139563638e+00 -6.007656380872955e+00 -6.004599453127692e+00 3.675961427638714e+00 4.693514779810060e+00 9.231167186142182e+03 + 32940 9.737317873205221e-01 -5.932597597294760e+00 -6.040096884031715e+00 4.054263635983120e+00 4.436986096078667e+00 9.340521972617806e+03 + 32960 9.994148775020879e-01 -5.982350240352226e+00 -6.005149866587979e+00 3.745839295837920e+00 4.614920313761472e+00 9.232832568013988e+03 + 32980 9.564987284096131e-01 -5.934418932978470e+00 -5.995897340752041e+00 4.020361028793277e+00 4.667342497604571e+00 9.204451394716863e+03 + 33000 9.902670572660667e-01 -6.005486671036238e+00 -5.990684398218967e+00 3.657242400978359e+00 4.742239342139444e+00 9.188493228831911e+03 + 33020 9.907133215196436e-01 -6.038607925083467e+00 -5.987358459479071e+00 3.551284055420164e+00 4.845566417749779e+00 9.178290377182429e+03 + 33040 8.854605713119302e-01 -5.918846948562457e+00 -6.092399902473762e+00 4.087247126470153e+00 4.090679207878622e+00 9.502859044287876e+03 + 33060 9.457960455472602e-01 -6.047247394991219e+00 -6.000378143630154e+00 3.441238248927672e+00 4.710368743236114e+00 9.218217309403561e+03 + 33080 9.859991420191038e-01 -6.139627417025794e+00 -5.965307863745714e+00 2.960406692265189e+00 4.961376543063098e+00 9.110869825546823e+03 + 33100 9.636644101116570e-01 -6.133387056533358e+00 -5.923291485556746e+00 2.997712384424845e+00 5.204113665157088e+00 8.983074689120373e+03 + 33120 9.061081317673598e-01 -6.063130423941759e+00 -5.948338652419478e+00 3.366255357785959e+00 5.025407473836129e+00 9.059132823214735e+03 + 33140 9.466287232773588e-01 -6.126872310813608e+00 -5.987312439146013e+00 2.964154347887431e+00 4.765528727823108e+00 9.178150159981338e+03 + 33160 9.050497290619023e-01 -6.060662663634652e+00 -5.979566918042548e+00 3.396751554448482e+00 4.862415875164416e+00 9.154436076429969e+03 + 33180 9.038664157680500e-01 -6.045659628302595e+00 -5.999171970821189e+00 3.468704736050266e+00 4.735644059250241e+00 9.214504556108197e+03 + 33200 9.238791783721760e-01 -6.053461084678899e+00 -5.983928537394516e+00 3.395079761194356e+00 4.794346407828198e+00 9.167788342383607e+03 + 33220 9.806740015500254e-01 -6.108082394689459e+00 -5.977235895552507e+00 3.100651738814782e+00 4.851992585289466e+00 9.147301036190685e+03 + 33240 9.757358511039843e-01 -6.065860889355597e+00 -5.994201535957030e+00 3.321375079678545e+00 4.732854176142215e+00 9.199236227932066e+03 + 33260 9.685717906786085e-01 -6.019719067896865e+00 -5.976598719878332e+00 3.533116979536751e+00 4.780720690711457e+00 9.145317391440101e+03 + 33280 9.999457141822766e-01 -6.032472242706670e+00 -5.940084819981209e+00 3.594395205477916e+00 5.124898083674974e+00 9.034011093919691e+03 + 33300 9.682581058867985e-01 -5.954686588667549e+00 -5.958333046365404e+00 3.958585040422841e+00 4.937646516034256e+00 9.089567954343567e+03 + 33320 9.627652606617650e-01 -5.922546378992930e+00 -5.977160609701055e+00 4.116813023551186e+00 4.803209659300248e+00 9.147047369508411e+03 + 33340 1.043648890054688e+00 -6.022699261668340e+00 -5.995823077411917e+00 3.507025042346800e+00 4.661352251423249e+00 9.204231226798081e+03 + 33360 9.886693739577626e-01 -5.927952557155355e+00 -6.017378443456908e+00 4.080391304704123e+00 4.566894026949426e+00 9.270466778988892e+03 + 33380 1.030282999459966e+00 -5.981660312371774e+00 -6.035355102857128e+00 3.739671987435172e+00 4.431348191226296e+00 9.325900947232032e+03 + 33400 9.585724956057314e-01 -5.871961841891172e+00 -6.032728250702713e+00 4.367790537853402e+00 4.444644939936170e+00 9.317801208201563e+03 + 33420 1.034120923856528e+00 -5.984017443491371e+00 -5.996333748474152e+00 3.807829773424403e+00 4.737107644271239e+00 9.205781613905488e+03 + 33440 1.048007602981950e+00 -6.007554681931542e+00 -6.013371390242893e+00 3.651093302038379e+00 4.617692862781897e+00 9.258098194866563e+03 + 33460 1.025281436380503e+00 -5.978968635064622e+00 -6.002326904348418e+00 3.844122890320267e+00 4.709996093412224e+00 9.224184838056346e+03 + 33480 1.008654787141651e+00 -5.963384638301566e+00 -6.005067213296680e+00 3.897725194996888e+00 4.658377399017311e+00 9.232615981018898e+03 + 33500 1.043549703759146e+00 -6.025804723334518e+00 -5.986243697297672e+00 3.565552409970119e+00 4.792717943522684e+00 9.174862120351141e+03 + 33520 1.075019218641920e+00 -6.084548304003254e+00 -5.968598750113390e+00 3.278772079976358e+00 4.944572361547433e+00 9.120894595833415e+03 + 33540 1.037683292042541e+00 -6.044496868251161e+00 -5.981074654604106e+00 3.505966186134025e+00 4.870146351451260e+00 9.159058568947914e+03 + 33560 1.008884288359768e+00 -6.020600259038438e+00 -6.059701446610946e+00 3.558861216442294e+00 4.334336146511729e+00 9.401245468424922e+03 + 33580 1.002496681654785e+00 -6.037512612137221e+00 -6.022207828024466e+00 3.497792563844871e+00 4.585675002628000e+00 9.285348645016293e+03 + 33600 9.003063210291008e-01 -5.915088595965547e+00 -5.997258177359505e+00 4.159418962453176e+00 4.687588510387440e+00 9.208620415825608e+03 + 33620 9.697104833530661e-01 -6.043527114209985e+00 -5.962125637299414e+00 3.501336464766463e+00 4.968756342024806e+00 9.101148429256535e+03 + 33640 1.021172053329951e+00 -6.144996897148092e+00 -5.999371456175157e+00 2.874312266719389e+00 4.710516084250139e+00 9.215132065020665e+03 + 33660 9.771284416283188e-01 -6.106716036551368e+00 -6.024806496347844e+00 3.078629403783051e+00 4.548966659092061e+00 9.293380994813402e+03 + 33680 9.315271765672908e-01 -6.066301656567071e+00 -6.000972406228986e+00 3.370650019655127e+00 4.745780684765231e+00 9.220057357059735e+03 + 33700 9.149799223153399e-01 -6.066740353394578e+00 -6.013032231260791e+00 3.356354697900811e+00 4.664755046498054e+00 9.257119320489650e+03 + 33720 9.536147634243390e-01 -6.147525539825371e+00 -6.008358057578698e+00 2.879041873907398e+00 4.678163093066074e+00 9.242730512117005e+03 + 33740 9.446118323398265e-01 -6.153514848975169e+00 -5.978850437216445e+00 2.856100580957237e+00 4.859050662506196e+00 9.152247342708759e+03 + 33760 8.696873328093571e-01 -6.057066271272640e+00 -5.971236954037765e+00 3.436951970368221e+00 4.929797191974790e+00 9.128973740177265e+03 + 33780 8.977837393781597e-01 -6.106415495590634e+00 -5.959909518491742e+00 3.085434032899455e+00 4.926694025127979e+00 9.094403925857352e+03 + 33800 9.116251180149476e-01 -6.125743879936487e+00 -5.976118104450610e+00 2.990190659644540e+00 4.849365016998377e+00 9.143886989428755e+03 + 33820 9.211915089663100e-01 -6.124514054143138e+00 -5.984381665339884e+00 3.022640958194752e+00 4.827302820120122e+00 9.169186221904138e+03 + 33840 9.395031302416452e-01 -6.117927466480293e+00 -5.971934640042973e+00 3.095378999414376e+00 4.933692401134344e+00 9.131103561563781e+03 + 33860 9.034655108560102e-01 -6.012697689615202e+00 -6.005282405857484e+00 3.629520463345373e+00 4.672100170193644e+00 9.233283970413788e+03 + 33880 9.851841002401279e-01 -6.078857341753924e+00 -5.982518979467227e+00 3.259475779427306e+00 4.812665563990905e+00 9.163471630765747e+03 + 33900 8.782238873563603e-01 -5.872467032486519e+00 -6.041208365799362e+00 4.415039231505569e+00 4.446100382986288e+00 9.343962803711103e+03 + 33920 9.779863953032754e-01 -5.980663550877299e+00 -6.002331812018170e+00 3.900176342578287e+00 4.775753833954832e+00 9.224174385623191e+03 + 33940 1.040438798829637e+00 -6.041803853397737e+00 -6.010403334294034e+00 3.456441559369241e+00 4.636748199277336e+00 9.249029028270581e+03 + 33960 9.835408149031730e-01 -5.936066409183342e+00 -6.001569346676382e+00 4.072840889867244e+00 4.696712886235391e+00 9.221870964931311e+03 + 33980 1.014788617537240e+00 -5.966583857995999e+00 -5.993212599055729e+00 3.814216995239411e+00 4.661310643290077e+00 9.196229426512591e+03 + 34000 1.003541278664898e+00 -5.936855632147974e+00 -5.966113367574051e+00 4.030090754921023e+00 4.862088310484559e+00 9.113296357197898e+03 + 34020 1.028072314518105e+00 -5.960791744969534e+00 -5.977437536984114e+00 3.883540519233895e+00 4.787957805558190e+00 9.147889898825462e+03 + 34040 1.061819882867355e+00 -5.998046280097934e+00 -6.014960555190786e+00 3.692033646922333e+00 4.594909261863565e+00 9.263026702182857e+03 + 34060 1.022651140574749e+00 -5.932908150676687e+00 -6.040076176865240e+00 4.053582233567334e+00 4.438206842994204e+00 9.340466261775489e+03 + 34080 1.111420145564495e+00 -6.065141173406783e+00 -5.974177590792148e+00 3.346271124841783e+00 4.868598092783932e+00 9.137932328151574e+03 + 34100 1.036121711731233e+00 -5.959047584985695e+00 -6.001690150776374e+00 3.904937134704594e+00 4.660076923018786e+00 9.222227923555181e+03 + 34120 1.035080572945139e+00 -5.968321054388600e+00 -5.934920272068526e+00 3.856790055845723e+00 5.048582516681948e+00 9.018344913922654e+03 + 34140 1.011654007292492e+00 -5.943855928000963e+00 -5.963155359968600e+00 3.979161873077312e+00 4.868341548141695e+00 9.104286076322087e+03 + 34160 1.070506873534731e+00 -6.043939017287849e+00 -6.000457130450219e+00 3.465025204762040e+00 4.714704927783958e+00 9.218461717038124e+03 + 34180 1.033578637200572e+00 -6.010704473709740e+00 -6.049631928451516e+00 3.636457171786251e+00 4.412929702654823e+00 9.370028443056621e+03 + 34200 9.422118436028556e-01 -5.902822048980751e+00 -6.053599804684061e+00 4.187253814154459e+00 4.321464608123763e+00 9.382306440626026e+03 + 34220 9.879468739359611e-01 -5.998254656983296e+00 -6.001232808039214e+00 3.716744770228155e+00 4.699643765997685e+00 9.220847239944535e+03 + 34240 1.035007144365113e+00 -6.100040650839254e+00 -6.019046915003993e+00 3.119198367552936e+00 4.584276932459121e+00 9.275636993379732e+03 + 34260 9.599123272526355e-01 -6.020676892064640e+00 -6.001236758301349e+00 3.628835415191777e+00 4.740463671611567e+00 9.220848746519447e+03 + 34280 9.531672029216303e-01 -6.036186390163556e+00 -5.999465335865843e+00 3.486274279870611e+00 4.697132256212874e+00 9.215405185850168e+03 + 34300 9.460053973363286e-01 -6.045139800534158e+00 -5.961124659042118e+00 3.441467052242184e+00 4.923894995990605e+00 9.098092057911896e+03 + 34320 9.467642020436395e-01 -6.058367851961826e+00 -5.962672668723082e+00 3.397712543812279e+00 4.947209094750898e+00 9.102811040860832e+03 + 34340 9.875530224240409e-01 -6.122769906460754e+00 -5.995670872909958e+00 3.000627584067935e+00 4.730449903228486e+00 9.203774174321561e+03 + 34360 1.016842552975050e+00 -6.167084451398407e+00 -5.966458163194686e+00 2.791824093449569e+00 4.943851287133096e+00 9.114388509397248e+03 + 34380 9.500991951002065e-01 -6.063524588314137e+00 -5.988074387875151e+00 3.345575230824916e+00 4.778821957626361e+00 9.180504968218484e+03 + 34400 9.541609385222664e-01 -6.059918210169195e+00 -5.971892686346856e+00 3.370477882390710e+00 4.875934062084365e+00 9.130981668739203e+03 + 34420 9.295401668140288e-01 -6.006476371811631e+00 -5.965955516001371e+00 3.652323896134907e+00 4.885000920779592e+00 9.112819695429993e+03 + 34440 9.491557202683801e-01 -6.008551081570284e+00 -5.949708340200093e+00 3.622696812264180e+00 4.960580939096615e+00 9.063298706040276e+03 + 34460 1.045867078373231e+00 -6.108720667166840e+00 -5.958919802048690e+00 3.096037627634987e+00 4.956217376752363e+00 9.091382082286247e+03 + 34480 1.045331529189962e+00 -6.054547723980393e+00 -5.965294523924631e+00 3.401745971020905e+00 4.914251657629164e+00 9.110834065222925e+03 + 34500 9.970243812991485e-01 -5.930738117481931e+00 -6.043938719440161e+00 4.006973213322732e+00 4.356957839142039e+00 9.352392822743181e+03 + 34520 1.072690766000264e+00 -6.006614468706598e+00 -5.981062664989095e+00 3.690086868829410e+00 4.836809279904155e+00 9.158970347146302e+03 + 34540 1.028827004273694e+00 -5.918487187630155e+00 -5.993562022106553e+00 4.118588661467624e+00 4.687497344111057e+00 9.197270736654580e+03 + 34560 1.035133149389094e+00 -5.917915145239099e+00 -6.003501888968486e+00 4.092227583634710e+00 4.600775256634780e+00 9.227775834018144e+03 + 34580 1.046563789494169e+00 -5.932226064576133e+00 -5.964394147612981e+00 4.063264086406178e+00 4.878549975613834e+00 9.108061610398918e+03 + 34600 1.073921222392445e+00 -5.973354294487048e+00 -6.054758126852446e+00 3.774612176480133e+00 4.307178773835668e+00 9.385919896722267e+03 + 34620 1.139273786773978e+00 -6.080741538785975e+00 -6.021480827818183e+00 3.245146589460724e+00 4.585430762403169e+00 9.283126141863040e+03 + 34640 9.830795713155516e-01 -5.865708587061977e+00 -6.038716012089068e+00 4.433671606879127e+00 4.440236199561071e+00 9.336267907199725e+03 + 34660 1.056088300295727e+00 -5.993500014412904e+00 -5.967586400374310e+00 3.737237079068778e+00 4.886037060997200e+00 9.117809466216771e+03 + 34680 1.080979169432538e+00 -6.050659064459841e+00 -5.977328820178178e+00 3.429964123070661e+00 4.851037733554604e+00 9.147584629435103e+03 + 34700 9.647861202639074e-01 -5.901398173400184e+00 -6.026425284408602e+00 4.226365742343789e+00 4.508440723050556e+00 9.298331961438809e+03 + 34720 1.002491774161328e+00 -5.981309476389429e+00 -5.990443874283450e+00 3.788824406929170e+00 4.736373280678193e+00 9.187733852020370e+03 + 34740 1.028215143929322e+00 -6.041336532383569e+00 -5.981512003165607e+00 3.461796010575603e+00 4.805317715161125e+00 9.160377243653407e+03 + 34760 1.024945236530417e+00 -6.056658160192340e+00 -5.990323557186668e+00 3.396453691492574e+00 4.777357247197777e+00 9.187351197600054e+03 + 34780 9.778080523122809e-01 -6.007417868038531e+00 -6.014388330119592e+00 3.637030127231559e+00 4.597004655286583e+00 9.261271776712116e+03 + 34800 9.870153980013269e-01 -6.038932289599342e+00 -6.001409950269310e+00 3.498300457324050e+00 4.713759536320340e+00 9.221399168198892e+03 + 34820 9.822646507590398e-01 -6.048635314402544e+00 -6.020882931280021e+00 3.398130551352223e+00 4.557489029909158e+00 9.281260881601213e+03 + 34840 9.541668602630072e-01 -6.022126423342334e+00 -5.958285199122209e+00 3.602733137703586e+00 4.969319326573062e+00 9.089419303117369e+03 + 34860 9.533934197269855e-01 -6.029997067900548e+00 -5.951753830867576e+00 3.483248129134522e+00 4.932532904279650e+00 9.069524662387670e+03 + 34880 9.016191299794400e-01 -5.955693137052450e+00 -5.985759678547641e+00 3.922613299836366e+00 4.749966565788714e+00 9.173309883387104e+03 + 34900 9.652271373706185e-01 -6.045518647026376e+00 -6.008762520124411e+00 3.424680983768814e+00 4.635740352432153e+00 9.243945804485833e+03 + 34920 9.547793947232713e-01 -6.020575907734938e+00 -5.986180018727359e+00 3.660107915435105e+00 4.857614432863243e+00 9.174671919549311e+03 + 34940 9.749913305283587e-01 -6.036304230935364e+00 -5.989584926548906e+00 3.550156281066591e+00 4.818425756642624e+00 9.185078519861650e+03 + 34960 9.546761346725343e-01 -5.983881560295552e+00 -5.994222568795648e+00 3.795462467694266e+00 4.736082796620821e+00 9.199299126174928e+03 + 34980 9.985574021780338e-01 -6.012024315056893e+00 -5.956434416284742e+00 3.631514619030748e+00 4.950720420289471e+00 9.083781568875071e+03 + 35000 9.988082222825961e-01 -5.960777959094782e+00 -6.010849833309306e+00 3.930775215378311e+00 4.643254765041016e+00 9.250367123094447e+03 + 35020 1.093889328252382e+00 -6.046204677809361e+00 -5.963415484501124e+00 3.475377873794278e+00 4.950766233356434e+00 9.105082444248012e+03 + 35040 1.070226101709364e+00 -5.964864765251237e+00 -6.011763347822352e+00 3.918819296178552e+00 4.649520377523009e+00 9.253204350737049e+03 + 35060 1.082816269619288e+00 -5.954003379351628e+00 -6.049641192870213e+00 3.918652692430480e+00 4.369485567302958e+00 9.370080652397730e+03 + 35080 1.110402479809612e+00 -5.982927231733442e+00 -6.015308882503428e+00 3.823265490490503e+00 4.637325040724983e+00 9.264108791326318e+03 + 35100 1.023848398765998e+00 -5.854697393463796e+00 -5.999283982164206e+00 4.497967723105257e+00 4.667729156085214e+00 9.214810376362107e+03 + 35120 1.005384635430524e+00 -5.832981740264931e+00 -5.957234304348768e+00 4.650260299178484e+00 4.936782848186942e+00 9.086179064603110e+03 + 35140 9.973079073832217e-01 -5.825353156976501e+00 -6.008574422284925e+00 4.621871654902588e+00 4.569786796102449e+00 9.243346429929967e+03 + 35160 1.092852797509506e+00 -5.976763060783914e+00 -6.054443989162827e+00 3.803020861250594e+00 4.356964949414060e+00 9.384923307537209e+03 + 35180 1.021955619552017e+00 -5.891148315322929e+00 -6.035133238017371e+00 4.227806729368615e+00 4.401023021662355e+00 9.325233559586004e+03 + 35200 1.040730395486057e+00 -5.944950439406575e+00 -5.989443753104648e+00 4.011950720360010e+00 4.756463227787630e+00 9.184658338122434e+03 + 35220 1.037447360488019e+00 -5.967083516299775e+00 -6.016116789818277e+00 3.935919903911590e+00 4.654363259493800e+00 9.266557591171166e+03 + 35240 1.008068172620725e+00 -5.951218651422489e+00 -6.026979189301763e+00 3.937169271172723e+00 4.502140538764592e+00 9.300066020148992e+03 + 35260 1.023713581610329e+00 -6.001678392079574e+00 -6.017192110890970e+00 3.626562343440797e+00 4.537480169285536e+00 9.269920279462262e+03 + 35280 9.938643080704421e-01 -5.981073794241389e+00 -6.013114929805127e+00 3.848640855809534e+00 4.664655697052849e+00 9.257353421061298e+03 + 35300 9.900922845714374e-01 -5.995461556644762e+00 -6.020352991056877e+00 3.683899506821897e+00 4.540969038490505e+00 9.279656574393110e+03 + 35320 9.758663136855893e-01 -5.990696189990635e+00 -6.032666678593924e+00 3.727932668834004e+00 4.486931628361795e+00 9.317548916293830e+03 + 35340 9.935164877530744e-01 -6.028756119420661e+00 -5.997365387476096e+00 3.530477737149707e+00 4.710728177675472e+00 9.208978033808044e+03 + 35360 9.756047356444162e-01 -6.012623072928546e+00 -6.004216194070210e+00 3.657683865625168e+00 4.705957464990031e+00 9.229987073319466e+03 + 35380 1.005650940098622e+00 -6.061699317933312e+00 -5.994809202670155e+00 3.353307767312916e+00 4.737401160365843e+00 9.201137382807687e+03 + 35400 9.586391170097655e-01 -5.995157698975603e+00 -5.982381258341356e+00 3.732526750489974e+00 4.805891049759616e+00 9.163053789174252e+03 + 35420 9.188099276383979e-01 -5.934802435087092e+00 -6.022375582674369e+00 4.059649763754928e+00 4.556791198407995e+00 9.285859586687768e+03 + 35440 9.908600208540848e-01 -6.038121610833671e+00 -6.012820519175404e+00 3.464682098299358e+00 4.609964881932406e+00 9.256450420728979e+03 + 35460 9.922770690366294e-01 -6.035292021115004e+00 -6.013190461670430e+00 3.507201372763333e+00 4.634111947299351e+00 9.257589046879781e+03 + 35480 9.777379584020841e-01 -6.007593769400861e+00 -5.998471964543963e+00 3.692631555409368e+00 4.745010370492413e+00 9.212357099886816e+03 + 35500 1.009252780578784e+00 -6.046806969919109e+00 -5.998349239404622e+00 3.479730066654630e+00 4.757981854078377e+00 9.211977706847252e+03 + 35520 1.010431697190726e+00 -6.040221148019866e+00 -6.004452087732021e+00 3.494636648075242e+00 4.700028127492238e+00 9.230710031393315e+03 + 35540 9.438364935301815e-01 -5.934506260149205e+00 -6.058849012655848e+00 4.028754001023096e+00 4.314758674151189e+00 9.398571628233138e+03 + 35560 9.294016608656782e-01 -5.904428519310151e+00 -6.048591615886669e+00 4.180240984932514e+00 4.352434175223053e+00 9.366823943293635e+03 + 35580 1.011335770825997e+00 -6.015369111187106e+00 -5.987282560450582e+00 3.631380621780798e+00 4.792657942489602e+00 9.178052562356126e+03 + 35600 9.980861755199431e-01 -5.981933871297517e+00 -6.016931662975134e+00 3.743677729864410e+00 4.542714994160773e+00 9.269091117108210e+03 + 35620 9.695335651944508e-01 -5.923970935327216e+00 -6.051400636479813e+00 4.065310741947913e+00 4.333589678247182e+00 9.375486530262351e+03 + 35640 1.030023966513938e+00 -5.993920476658178e+00 -5.975833889646841e+00 3.754048229882517e+00 4.857904211391906e+00 9.142992185890047e+03 + 35660 1.022148219323836e+00 -5.951442049436960e+00 -5.999127518367678e+00 3.897486807814521e+00 4.623669465911872e+00 9.214324380953527e+03 + 35680 1.068572235567830e+00 -5.972301787278510e+00 -5.997218970742480e+00 3.901914605367373e+00 4.758836281995574e+00 9.208487926697177e+03 + 35700 1.079804879426755e+00 -5.929562480344019e+00 -6.013087375398226e+00 4.067415305795455e+00 4.587802432958459e+00 9.257261204844741e+03 + 35720 1.067525271662049e+00 -5.859320548242229e+00 -6.035438449633805e+00 4.461474172101465e+00 4.450177928153878e+00 9.326154630974424e+03 + 35740 1.177503510637374e+00 -5.984665068734431e+00 -6.043894613082071e+00 3.801952236118859e+00 4.461847026732342e+00 9.352298996913183e+03 + 35760 1.118309569938307e+00 -5.880375185136863e+00 -6.084120338250760e+00 4.305019458845960e+00 4.135083260205417e+00 9.477097737193088e+03 + 35780 1.106707304170611e+00 -5.866060543359131e+00 -6.032444014482957e+00 4.448444631825216e+00 4.493044992873263e+00 9.316923134633735e+03 + 35800 1.068902091967284e+00 -5.826761808240421e+00 -6.023717820787718e+00 4.597922916065560e+00 4.466971013174541e+00 9.289987986152630e+03 + 35820 1.083862856527862e+00 -5.874091391688279e+00 -5.994919978513782e+00 4.349360257419209e+00 4.655543813703789e+00 9.201431601807270e+03 + 35840 1.068649323408186e+00 -5.883652568010217e+00 -6.046794360825059e+00 4.288837038791494e+00 4.352051618337827e+00 9.361225666425580e+03 + 35860 1.085515781845037e+00 -5.948161386695497e+00 -5.981122114368732e+00 3.983666145371292e+00 4.794400546415448e+00 9.159180432604824e+03 + 35880 1.076641550915873e+00 -5.973725792494097e+00 -6.023898121351328e+00 3.855675519536123e+00 4.567578243095102e+00 9.290538284774189e+03 + 35900 1.058622201056142e+00 -5.983074072387935e+00 -5.976668827153423e+00 3.849387889474577e+00 4.886167798819644e+00 9.145559844722255e+03 + 35920 1.022983513172441e+00 -5.958132066067666e+00 -5.991815176159588e+00 3.919413890039747e+00 4.726000259447490e+00 9.191916086124827e+03 + 35940 1.005274640612464e+00 -5.954906791318727e+00 -6.017201718273808e+00 3.909705998552495e+00 4.551998887867629e+00 9.269928392497904e+03 + 35960 1.054066062302821e+00 -6.045642796584606e+00 -5.985156374984065e+00 3.438763229858638e+00 4.786085622932436e+00 9.171542375468603e+03 + 35980 1.025043457471736e+00 -6.019027734401497e+00 -6.008253287712654e+00 3.582035328234987e+00 4.643903868462568e+00 9.242405742687421e+03 + 36000 9.469991034959310e-01 -5.919476574356585e+00 -5.994840960114011e+00 4.109638200478257e+00 4.676884234858114e+00 9.201205196885583e+03 + 36020 9.253167407978832e-01 -5.897127740463791e+00 -6.044904431813987e+00 4.210800876065088e+00 4.362244245963181e+00 9.355398986514649e+03 + 36040 1.063760249045922e+00 -6.112985928425925e+00 -6.033252900981109e+00 3.033368710961339e+00 4.491208093195588e+00 9.319423012581918e+03 + 36060 9.462034689100994e-01 -5.950633568170702e+00 -6.020296948253497e+00 3.972077062729199e+00 4.572059153920562e+00 9.279455403174292e+03 + 36080 9.470136707864261e-01 -5.960729780904304e+00 -6.008417590131972e+00 3.906111441349117e+00 4.632280661099214e+00 9.242901866790779e+03 + 36100 9.791260583853553e-01 -6.015853726150142e+00 -6.053505731758884e+00 3.553856463361247e+00 4.337652820526810e+00 9.382042713827763e+03 + 36120 9.673302969599232e-01 -6.004595483781102e+00 -6.005045495999203e+00 3.679774661846302e+00 4.677190622050805e+00 9.232567734226297e+03 + 36140 9.798724806494594e-01 -6.027173705128885e+00 -6.008658635761039e+00 3.525175365148272e+00 4.631491758656162e+00 9.243659648948407e+03 + 36160 1.018013803386338e+00 -6.085957670157833e+00 -5.964368616744677e+00 3.242169624350631e+00 4.940352784894181e+00 9.108003565868870e+03 + 36180 9.199532743914051e-01 -5.941041736975180e+00 -6.027980249835528e+00 4.017590179102506e+00 4.518375784567001e+00 9.303126167440130e+03 + 36200 9.601741506307546e-01 -5.999971097326202e+00 -6.013114359107571e+00 3.670973268399041e+00 4.595502625337230e+00 9.257347009671292e+03 + 36220 9.366900374853713e-01 -5.960777914286508e+00 -5.956055911707092e+00 3.923156631881503e+00 4.950271101420046e+00 9.082647227843940e+03 + 36240 1.003787143392903e+00 -6.047990050449518e+00 -5.955780252293055e+00 3.444134592919373e+00 4.973617523353933e+00 9.081781566208625e+03 + 36260 1.019450408086629e+00 -6.047102869140272e+00 -5.957123624399629e+00 3.473692768053099e+00 4.990367515596989e+00 9.085899026711197e+03 + 36280 1.008912911877061e+00 -5.998030311872552e+00 -6.012495203242449e+00 3.691160456932757e+00 4.608100812252103e+00 9.255455885139176e+03 + 36300 1.027317492513053e+00 -5.987944285557328e+00 -6.027334793690954e+00 3.737410053389686e+00 4.511223660024974e+00 9.301135690259656e+03 + 36320 1.007435322463438e+00 -5.920567447040622e+00 -5.998054819454167e+00 4.148212760228302e+00 4.703268276697606e+00 9.211077846836617e+03 + 36340 1.041384266950475e+00 -5.933937580132779e+00 -6.062005274957086e+00 3.976256692988390e+00 4.240872170895496e+00 9.408368925867284e+03 + 36360 1.038577717447188e+00 -5.900377486332193e+00 -6.035404257134982e+00 4.219379522291034e+00 4.444034909016168e+00 9.326034931082686e+03 + 36380 1.027635165303362e+00 -5.863634365622748e+00 -6.025862959351761e+00 4.425061521440407e+00 4.493519831454673e+00 9.296559049177473e+03 + 36400 1.092694564370800e+00 -5.949512073503636e+00 -5.988629103821109e+00 3.978156454726325e+00 4.753540413302515e+00 9.182165592466978e+03 + 36420 1.076160104373824e+00 -5.922264304392592e+00 -6.017229122564696e+00 4.124820218124340e+00 4.579517536422005e+00 9.269976409040264e+03 + 36440 1.109224902239323e+00 -5.977803382532806e+00 -5.968906491347829e+00 3.835554131584675e+00 4.886641457558278e+00 9.121845467464289e+03 + 36460 1.017153437084077e+00 -5.856978135324383e+00 -6.015118295904209e+00 4.496313372930866e+00 4.588248098770747e+00 9.263497188949465e+03 + 36480 1.001758401936793e+00 -5.855674026375824e+00 -6.000995120798770e+00 4.426884055702711e+00 4.592427843159474e+00 9.220073615351639e+03 + 36500 1.062386585701779e+00 -5.973878016078698e+00 -5.965820626897673e+00 3.827623130856564e+00 4.873889906410950e+00 9.112404176566622e+03 + 36520 1.004158099795873e+00 -5.919934010618213e+00 -5.947810770068170e+00 4.120657108114059e+00 4.960584441437828e+00 9.057532241153369e+03 + 36540 1.031107183840657e+00 -5.996011134608522e+00 -5.976987878942571e+00 3.712772736963243e+00 4.822007214836431e+00 9.146533926389164e+03 + 36560 1.013348783345776e+00 -6.003443618638320e+00 -6.008269299203942e+00 3.646842351355121e+00 4.619132546775666e+00 9.242449444531534e+03 + 36580 1.023637471100517e+00 -6.049752492855310e+00 -6.017964098217170e+00 3.372719740262267e+00 4.555253621512639e+00 9.272299222787258e+03 + 36600 9.911388511893691e-01 -6.026721421228704e+00 -6.019213250518026e+00 3.542759733688976e+00 4.585872811795351e+00 9.276143433966043e+03 + 36620 9.388314073339610e-01 -5.964629249758816e+00 -6.009197800407183e+00 3.846606497388812e+00 4.590686982604968e+00 9.245317115201131e+03 + 36640 9.892410239936932e-01 -6.048452671360239e+00 -5.978088012644291e+00 3.426332954812942e+00 4.830377714055658e+00 9.149891360476031e+03 + 36660 9.685249106772260e-01 -6.020622305766929e+00 -5.985561151803427e+00 3.570822303494526e+00 4.772148875248996e+00 9.172778389622936e+03 + 36680 1.010353768349187e+00 -6.082119423699378e+00 -5.995901731665164e+00 3.265907294524423e+00 4.760982624329603e+00 9.204467501645866e+03 + 36700 9.929369814400122e-01 -6.053529512494370e+00 -6.015814560122999e+00 3.412199257499764e+00 4.628764350386191e+00 9.265652222452618e+03 + 36720 9.815638666629800e-01 -6.033073085586524e+00 -5.995979540281198e+00 3.487108354908332e+00 4.700105232259105e+00 9.204717859078017e+03 + 36740 9.440800440443918e-01 -5.970034662317654e+00 -5.996908629958850e+00 3.843801465649517e+00 4.689486984720718e+00 9.207556366036944e+03 + 36760 1.042745697690803e+00 -6.108024253896744e+00 -5.996209713552274e+00 3.038001574495076e+00 4.680057968397220e+00 9.205418230219049e+03 + 36780 9.957633898124747e-01 -6.028998058252559e+00 -5.992890673738679e+00 3.526084561776713e+00 4.733418751255105e+00 9.195237345973659e+03 + 36800 9.746658153552706e-01 -5.987638721859334e+00 -5.989712741696943e+00 3.801897942680494e+00 4.789988599819409e+00 9.185489115233251e+03 + 36820 1.020120299852784e+00 -6.042216527209265e+00 -5.967292078758437e+00 3.477473330144547e+00 4.907701107670129e+00 9.116936180300239e+03 + 36840 9.325147699167877e-01 -5.895955002356556e+00 -6.025899799294955e+00 4.302367628931503e+00 4.556204496018880e+00 9.296745005431114e+03 + 36860 1.038314005295628e+00 -6.035804754490004e+00 -6.034652057513815e+00 3.529158945641210e+00 4.535777910057773e+00 9.323746122804187e+03 + 36880 1.046709100672617e+00 -6.033562566381995e+00 -6.016583234993028e+00 3.517812280719391e+00 4.615310229097883e+00 9.268026207642506e+03 + 36900 1.029483705925623e+00 -5.994841661598700e+00 -6.004166198928036e+00 3.765119734793994e+00 4.711576798481457e+00 9.229840221867520e+03 + 36920 1.000892761483184e+00 -5.940005277806385e+00 -5.968804680242806e+00 4.015184794198873e+00 4.849814168715826e+00 9.121518784504793e+03 + 36940 9.978779264057396e-01 -5.920723976133440e+00 -5.990405960415092e+00 4.117457285338670e+00 4.717332548341204e+00 9.187605175114420e+03 + 36960 1.060572874129609e+00 -5.991724750528645e+00 -6.004512551407682e+00 3.754044691118648e+00 4.680615159565429e+00 9.230889930264570e+03 + 36980 1.020614804855683e+00 -5.909714037345507e+00 -5.989635579259693e+00 4.188020469763947e+00 4.729098608274051e+00 9.185225639580369e+03 + 37000 1.063498552066033e+00 -5.949812579818318e+00 -6.003780318304017e+00 3.946841380755090e+00 4.636950274889672e+00 9.228659883519969e+03 + 37020 1.066957842906642e+00 -5.928888427101344e+00 -5.984594505591758e+00 4.074957033450456e+00 4.755084110270713e+00 9.169813782441157e+03 + 37040 1.072413198638437e+00 -5.913906183468791e+00 -6.034835963404108e+00 4.137727267792695e+00 4.443329757581143e+00 9.324275381387082e+03 + 37060 9.724346226052142e-01 -5.742198069001293e+00 -6.074394219149722e+00 5.103258153913807e+00 4.195736452573435e+00 9.446792078109931e+03 + 37080 1.069692260980878e+00 -5.867259247505161e+00 -6.007082431435539e+00 4.399701183628770e+00 4.596814823932756e+00 9.238776199108917e+03 + 37100 1.088252642282031e+00 -5.881452157887193e+00 -6.008527939965528e+00 4.315746147463888e+00 4.586057341856367e+00 9.243228808822323e+03 + 37120 1.109945303056370e+00 -5.907641727310518e+00 -6.016955793186842e+00 4.203696253828905e+00 4.575997971270027e+00 9.269151554284925e+03 + 37140 1.137054275681675e+00 -5.954926419337808e+00 -6.044960770961199e+00 3.915441099224659e+00 4.398449919432264e+00 9.355603369901233e+03 + 37160 1.051547686720398e+00 -5.856090338162340e+00 -6.036515131317701e+00 4.504348180325803e+00 4.468321097381212e+00 9.329458748437484e+03 + 37180 1.034558955250509e+00 -5.871421044793450e+00 -6.020612083259469e+00 4.372477598277098e+00 4.515799568166629e+00 9.280427580970521e+03 + 37200 1.010491664666692e+00 -5.887107946680630e+00 -6.004812984198955e+00 4.313859735941955e+00 4.637979195716045e+00 9.231825494993054e+03 + 37220 9.704658273916356e-01 -5.873088239934580e+00 -6.042552021198706e+00 4.354842161437255e+00 4.381754904983251e+00 9.348118965407544e+03 + 37240 1.022308218589861e+00 -5.989818228837242e+00 -6.039677574637363e+00 3.724716502878204e+00 4.438416423585085e+00 9.339264376117020e+03 + 37260 1.053098718035580e+00 -6.069983066944873e+00 -5.995557648618812e+00 3.319123051782488e+00 4.746485321106997e+00 9.203429766987498e+03 + 37280 9.969880832436468e-01 -6.013190561339985e+00 -5.993158573459707e+00 3.616457204207074e+00 4.731483978555735e+00 9.196068974145035e+03 + 37300 9.828007641409754e-01 -6.010822366556760e+00 -6.061077187094754e+00 3.609244404720950e+00 4.320673448283444e+00 9.405482295376447e+03 + 37320 9.453905084779560e-01 -5.971178266507276e+00 -5.997158524569248e+00 3.871593555571557e+00 4.722410893347771e+00 9.208314152556668e+03 + 37340 9.972783680007371e-01 -6.056792504139715e+00 -5.978784547132979e+00 3.371544728436682e+00 4.819478489261696e+00 9.152023755525401e+03 + 37360 9.320211442997482e-01 -5.964609064911281e+00 -5.989849712121273e+00 3.870072501404250e+00 4.725136799146947e+00 9.185925160801025e+03 + 37380 9.970617086268079e-01 -6.063343636534338e+00 -5.991928495204344e+00 3.345650940515512e+00 4.755727733489742e+00 9.192301035579359e+03 + 37400 9.389656802115530e-01 -5.976164547450313e+00 -5.989083637439140e+00 3.870902010164056e+00 4.796718596225501e+00 9.183533861697588e+03 + 37420 1.051182104198060e+00 -6.138117975735532e+00 -5.969607570783782e+00 2.928365249092907e+00 4.895978071226745e+00 9.123977338862898e+03 + 37440 9.683413596366724e-01 -6.007760098167750e+00 -5.996002273624891e+00 3.622886008857348e+00 4.690401256899914e+00 9.204780681441098e+03 + 37460 9.932046459306464e-01 -6.033908678448235e+00 -6.011443900623002e+00 3.499535627408357e+00 4.628531858093980e+00 9.252214093155080e+03 + 37480 9.743788780481250e-01 -5.992348999502587e+00 -6.003606080597162e+00 3.731284827479192e+00 4.666644925806471e+00 9.228098981979878e+03 + 37500 9.463576468022046e-01 -5.932624804534935e+00 -5.976282426980381e+00 4.057481090697625e+00 4.806792266620634e+00 9.144366629073755e+03 + 37520 1.029464676983669e+00 -6.028650531382762e+00 -5.990444888404923e+00 3.571123276093178e+00 4.790505990376070e+00 9.187728206864074e+03 + 37540 1.019760357308256e+00 -5.982669738697906e+00 -6.046715853824923e+00 3.782104191013707e+00 4.414341486850090e+00 9.361017748233226e+03 + 37560 9.637593874931131e-01 -5.869170189281388e+00 -6.025298666438972e+00 4.397104760086986e+00 4.500590883444386e+00 9.294877796674489e+03 + 37580 1.079064817941273e+00 -6.010232843577590e+00 -6.024930575601261e+00 3.597781270856152e+00 4.513384619109553e+00 9.293730582268236e+03 + 37600 1.058624021014357e+00 -5.950566300423072e+00 -6.019848240641515e+00 3.945144316683233e+00 4.547316694603335e+00 9.278094548923518e+03 + 37620 1.049634170596198e+00 -5.914782646044503e+00 -5.986371725007887e+00 4.147406181875004e+00 4.736330612093089e+00 9.175242645655968e+03 + 37640 1.010041906114624e+00 -5.837917573922287e+00 -5.986902468445683e+00 4.575189775363658e+00 4.719695455672406e+00 9.176864296274398e+03 + 37660 1.086785996966676e+00 -5.936666132118446e+00 -6.000872376273508e+00 3.991411897583340e+00 4.622729707760802e+00 9.219703776299279e+03 + 37680 1.072880583592900e+00 -5.904384067424568e+00 -6.008579240036518e+00 4.199561375287123e+00 4.601256569998461e+00 9.243390965748691e+03 + 37700 1.065278444171610e+00 -5.888976332814567e+00 -6.037370294411526e+00 4.253316097391321e+00 4.401215006010246e+00 9.332127133109751e+03 + 37720 1.125131948018061e+00 -5.984476557450947e+00 -5.988939340973119e+00 3.800909835287828e+00 4.775283841689997e+00 9.183150180013432e+03 + 37740 1.038777133608582e+00 -5.879738653523186e+00 -6.052636750324194e+00 4.345037766064917e+00 4.352230138339519e+00 9.379342047683953e+03 + 37760 1.042733524542589e+00 -5.932769680208250e+00 -6.009941109309611e+00 4.016101779184198e+00 4.572971491044128e+00 9.247599875630176e+03 + 37780 9.540272522313293e-01 -5.865695268633773e+00 -6.101312000327191e+00 4.333202806523365e+00 3.980255071568371e+00 9.530646559765943e+03 + 37800 9.993011443796153e-01 -5.994271600356052e+00 -5.996065192090004e+00 3.736500197303624e+00 4.726201116009853e+00 9.204982624290033e+03 + 37820 9.635613495809030e-01 -5.984341516538412e+00 -6.034062855002272e+00 3.802384452614481e+00 4.516876832802735e+00 9.321894724833615e+03 + 37840 1.029337179552017e+00 -6.112869493110333e+00 -5.981459966974206e+00 3.081791557068172e+00 4.836365391700262e+00 9.160218293005433e+03 + 37860 9.585264584072239e-01 -6.028974728047388e+00 -5.956404927849636e+00 3.607913094407523e+00 5.024620117283300e+00 9.083692220656785e+03 + 37880 9.806848068836048e-01 -6.073385225165461e+00 -5.973832082975778e+00 3.312656132813135e+00 4.884305681065261e+00 9.136901817291855e+03 + 37900 9.748138239425553e-01 -6.070853019649356e+00 -5.990679649763575e+00 3.332629997623691e+00 4.792997894296732e+00 9.188463886963862e+03 + 37920 9.354842708286520e-01 -6.013626471806401e+00 -5.994563847219695e+00 3.659879478510688e+00 4.769340018819179e+00 9.200372424410267e+03 + 37940 9.841659141307527e-01 -6.082980297693998e+00 -5.984187268482114e+00 3.245636898626369e+00 4.812921760532866e+00 9.168578151312488e+03 + 37960 9.944604555413064e-01 -6.091281145598497e+00 -5.952564155378687e+00 3.199553737187124e+00 4.996088161414130e+00 9.072014468664474e+03 + 37980 9.795196924185924e-01 -6.057776286314744e+00 -5.971372579378203e+00 3.365406487466867e+00 4.861549943626921e+00 9.129374465926923e+03 + 38000 9.640605116855607e-01 -6.017319287734059e+00 -5.987959543007893e+00 3.570219292637590e+00 4.738807490261050e+00 9.180115701533929e+03 + 38020 1.021835277302069e+00 -6.078693022146584e+00 -5.949697447934095e+00 3.337001647125192e+00 5.077714196253898e+00 9.063274997581557e+03 + 38040 1.006719919383688e+00 -6.028958058208554e+00 -6.019901507967170e+00 3.463734093904660e+00 4.515738206887308e+00 9.278247071175309e+03 + 38060 1.032967704459175e+00 -6.041158991488864e+00 -6.000277954244529e+00 3.406253812837620e+00 4.640999055014658e+00 9.217897283462033e+03 + 38080 1.035288996199639e+00 -6.015776891858948e+00 -6.020922479038632e+00 3.562921244374011e+00 4.533374486511224e+00 9.281406890803950e+03 + 38100 1.056773709946216e+00 -6.025298100808695e+00 -5.979827321864734e+00 3.499243072123046e+00 4.760343321399565e+00 9.155239201545475e+03 + 38120 1.012747089278223e+00 -5.939629921724203e+00 -5.988215603113519e+00 3.991194929358072e+00 4.712208428210725e+00 9.180887063372575e+03 + 38140 9.766899188346450e-01 -5.866645924608112e+00 -6.047683006396601e+00 4.433770308415204e+00 4.394227369387838e+00 9.363990947070948e+03 + 38160 1.035749318856684e+00 -5.940657631699608e+00 -6.047459797644496e+00 3.951717201888584e+00 4.338442637451270e+00 9.363307081800023e+03 + 38180 1.056478292811039e+00 -5.962026565804096e+00 -6.058292884436681e+00 3.874454668919274e+00 4.321678570166306e+00 9.396854727274474e+03 + 38200 1.065328443088989e+00 -5.973440850762021e+00 -6.037432385787684e+00 3.869678440756886e+00 4.502229143981487e+00 9.332327674353362e+03 + 38220 1.095959747578653e+00 -6.027619485815262e+00 -5.974159855170043e+00 3.551839210803622e+00 4.858812682819578e+00 9.137891632020428e+03 + 38240 1.041418799791749e+00 -5.958751931039609e+00 -6.008562606687699e+00 3.882428806307043e+00 4.596408198558567e+00 9.243342336606911e+03 + 38260 9.903460184909346e-01 -5.905075470209611e+00 -6.001906377909831e+00 4.277189744159413e+00 4.721171687610207e+00 9.222865478411999e+03 + 38280 1.049229554007123e+00 -6.025809228222528e+00 -5.991580259089500e+00 3.557219184443029e+00 4.753767222120731e+00 9.191208427737691e+03 + 38300 1.042249188940319e+00 -6.061853478364874e+00 -5.983349518636856e+00 3.375331227340291e+00 4.826113112547078e+00 9.166013951438947e+03 + 38320 9.804692472573904e-01 -6.027373814995372e+00 -6.027852745251966e+00 3.549248913049061e+00 4.546498821401480e+00 9.302765189436655e+03 + 38340 1.020526455475971e+00 -6.142404304572307e+00 -5.966191154982407e+00 2.961979400981443e+00 4.973822574823421e+00 9.113556917435084e+03 + 38360 8.757501530683552e-01 -5.964791220746406e+00 -6.007851908018575e+00 3.921917133021162e+00 4.674656003084547e+00 9.241147267809685e+03 + 38380 1.014386960926706e+00 -6.189994765403801e+00 -5.958512986661701e+00 2.700392092752113e+00 5.029596287978739e+00 9.090130698572895e+03 + 38400 9.741505427094335e-01 -6.139454618133501e+00 -5.995174313531401e+00 2.952384682564291e+00 4.780864518894523e+00 9.202258134155436e+03 + 38420 9.178383663327556e-01 -6.056173297264013e+00 -6.038563935204233e+00 3.370037802389283e+00 4.471153484376508e+00 9.335815873330142e+03 + 38440 9.660798290647075e-01 -6.122746459621165e+00 -5.952624466992464e+00 3.069609241525943e+00 5.046476049493227e+00 9.072213224591220e+03 + 38460 8.941276397175144e-01 -6.004916744229828e+00 -6.038695057446024e+00 3.650026861084997e+00 4.456066559420523e+00 9.336202411511011e+03 + 38480 9.590511972019018e-01 -6.086299134023183e+00 -5.956288567146298e+00 3.233591437276432e+00 4.980132231353709e+00 9.083356525985839e+03 + 38500 9.808137398562464e-01 -6.096300315424232e+00 -6.001436369703134e+00 3.142011176035825e+00 4.686734632514524e+00 9.221481043490152e+03 + 38520 9.470475414890694e-01 -6.022003688315913e+00 -6.008821652154815e+00 3.546714609775174e+00 4.622407901325703e+00 9.244163146861787e+03 + 38540 8.979910490866605e-01 -5.922716639429476e+00 -6.011549965258234e+00 4.124077522866069e+00 4.613982819044597e+00 9.252553429806527e+03 + 38560 9.822519683329478e-01 -6.018221852623853e+00 -6.000393375755474e+00 3.591195714037190e+00 4.693569587163304e+00 9.218248843953228e+03 + 38580 1.020195564083564e+00 -6.048023162650294e+00 -5.982181545445737e+00 3.473581614695710e+00 4.851654369641611e+00 9.162434121071794e+03 + 38600 1.016672190889011e+00 -6.018825818600789e+00 -6.004562180396553e+00 3.560122758417391e+00 4.642026776276994e+00 9.231055685264831e+03 + 38620 9.788637207884947e-01 -5.944082329069713e+00 -5.978546396084853e+00 4.004506388353497e+00 4.806608382255429e+00 9.151272916656440e+03 + 38640 1.022760636824238e+00 -5.991772071073707e+00 -5.999616008160028e+00 3.724188918535313e+00 4.679147817940319e+00 9.215854555616381e+03 + 38660 1.051987784629127e+00 -6.019803839777429e+00 -5.983713429011041e+00 3.554056646826878e+00 4.761293370420498e+00 9.167132894182520e+03 + 38680 9.937590407807773e-01 -5.923200270323641e+00 -6.022900520730115e+00 4.089548593364839e+00 4.517054326966980e+00 9.287485596498309e+03 + 38700 1.105400362223100e+00 -6.081776224412954e+00 -5.949163000213135e+00 3.271911365921864e+00 5.033397021107344e+00 9.061653544182695e+03 + 38720 1.000681729998259e+00 -5.925361087549207e+00 -5.931049430065848e+00 4.098136808460798e+00 5.065473465462088e+00 9.006570703996667e+03 + 38740 1.038303294408498e+00 -5.979743501602742e+00 -5.955649214892404e+00 3.786347936365337e+00 4.924701059234921e+00 9.081380401207272e+03 + 38760 1.025683746007467e+00 -5.960471464374852e+00 -5.979271002583659e+00 3.912005778051594e+00 4.804055920437485e+00 9.153515123909532e+03 + 38780 1.065620323959801e+00 -6.019787144573454e+00 -5.979811917951924e+00 3.603433338758796e+00 4.832977276165947e+00 9.155178913945963e+03 + 38800 1.021998117205142e+00 -5.959712051057958e+00 -5.983490804113859e+00 3.937850150815656e+00 4.801308871018533e+00 9.166429036710661e+03 + 38820 9.848206722736876e-01 -5.914002061146652e+00 -5.968436924350276e+00 4.195079521344034e+00 4.882506113060970e+00 9.120350824833182e+03 + 38840 1.053222969995634e+00 -6.026875800413981e+00 -5.947864776244163e+00 3.592229304457855e+00 5.045922832157421e+00 9.057660653946694e+03 + 38860 9.760454320992497e-01 -5.926862998175616e+00 -5.963997752893302e+00 4.092972224379775e+00 4.879738716206099e+00 9.106841184894385e+03 + 38880 9.970214046606397e-01 -5.980820352998998e+00 -5.948177980541577e+00 3.829248764767611e+00 5.016686318808933e+00 9.058632343142499e+03 + 38900 1.028101329165235e+00 -6.060730868488148e+00 -5.987621425174390e+00 3.349821254424039e+00 4.769626991581431e+00 9.179057525121996e+03 + 38920 9.933189028402222e-01 -6.057663128644664e+00 -5.989232698623153e+00 3.409773734754015e+00 4.802711853512347e+00 9.183993118901477e+03 + 38940 9.588096271084245e-01 -6.058153157581030e+00 -5.960387461251721e+00 3.434713556687515e+00 4.996099314203017e+00 9.095795402896994e+03 + 38960 9.622207800536898e-01 -6.104379207360369e+00 -5.984971986641799e+00 3.097000135368199e+00 4.782654874941910e+00 9.170988203856945e+03 + 38980 9.107191156295875e-01 -6.057175180380285e+00 -6.041293174271008e+00 3.348150916853961e+00 4.439347853665933e+00 9.344268588865301e+03 + 39000 8.843498953653842e-01 -6.036678282372120e+00 -5.994931391873539e+00 3.566137426151975e+00 4.805854531705252e+00 9.201501000642047e+03 + 39020 8.807084329389108e-01 -6.038133376976080e+00 -6.011490990234666e+00 3.491662997138375e+00 4.644647704703596e+00 9.252378846374811e+03 + 39040 9.429141731722245e-01 -6.128645760158147e+00 -6.009835809617963e+00 3.042021793251330e+00 4.724246915033495e+00 9.247287781177822e+03 + 39060 9.232649508707361e-01 -6.091109221204396e+00 -6.032520672218390e+00 3.153835101751679e+00 4.490259616577981e+00 9.317186508548393e+03 + 39080 8.995270084694442e-01 -6.040110882598132e+00 -6.033066697235525e+00 3.499235614277644e+00 4.539684416713894e+00 9.318853334935697e+03 + 39100 9.812587614675191e-01 -6.139782340106682e+00 -6.004653662853449e+00 2.982407114870380e+00 4.758336890753670e+00 9.231368400493760e+03 + 39120 9.185528354805470e-01 -6.019609794505775e+00 -6.014442173115354e+00 3.553545038453187e+00 4.583218320163809e+00 9.261453921138580e+03 + 39140 9.226865778789355e-01 -5.997198600032333e+00 -5.977898979175070e+00 3.701008755732990e+00 4.811830165302070e+00 9.149294475404151e+03 + 39160 9.729352097797668e-01 -6.038208995748999e+00 -5.933578719326255e+00 3.495738552406443e+00 5.096541791108784e+00 9.014279714936392e+03 + 39180 9.311913000134393e-01 -5.943567662140037e+00 -5.987478128353436e+00 3.978626492315045e+00 4.726485800195024e+00 9.178637369580980e+03 + 39200 9.907148236196481e-01 -6.003979989140380e+00 -5.972048431453313e+00 3.648399205885624e+00 4.831755151517351e+00 9.131435198473504e+03 + 39220 1.073350226062492e+00 -6.105369332779104e+00 -5.979074192729880e+00 3.142022819266813e+00 4.867229057539218e+00 9.152931381644012e+03 + 39240 9.944313908150976e-01 -5.972853290450649e+00 -6.041230226496742e+00 3.866258635603583e+00 4.473627687530260e+00 9.344047679163938e+03 + 39260 9.904329105390487e-01 -5.958348392062888e+00 -6.014779984067884e+00 3.957087725630083e+00 4.633048791576758e+00 9.262472514776478e+03 + 39280 9.726268936386264e-01 -5.925647256107871e+00 -6.026544821419950e+00 4.097924999569475e+00 4.518555565699747e+00 9.298708776961350e+03 + 39300 1.002499795071449e+00 -5.966035471560161e+00 -5.992942716339940e+00 3.877471068799497e+00 4.722965505391333e+00 9.195380138970957e+03 + 39320 1.036573720028364e+00 -6.013409302754511e+00 -5.991192969125257e+00 3.609637605461713e+00 4.737207231127410e+00 9.190022879512873e+03 + 39340 9.807419403461997e-01 -5.929754619874904e+00 -6.027393407495659e+00 4.056071853024513e+00 4.495414824952589e+00 9.301317341157703e+03 + 39360 1.023802874458156e+00 -5.995326723078620e+00 -5.988054673493313e+00 3.727169091497216e+00 4.768926325562087e+00 9.180400163338274e+03 + 39380 1.005939640869309e+00 -5.971650634765179e+00 -5.999707214061928e+00 3.861518388047257e+00 4.700413167983712e+00 9.216125383113687e+03 + 39400 9.880525123649185e-01 -5.947962445017727e+00 -6.007943691607447e+00 3.998674439950886e+00 4.654252839964803e+00 9.241431844414092e+03 + 39420 9.907597136753317e-01 -5.956011757610961e+00 -6.033376766251378e+00 3.966265081136532e+00 4.522023229326868e+00 9.319794342463985e+03 + 39440 1.050728315363402e+00 -6.051606731809495e+00 -6.044608136206699e+00 3.416334126721120e+00 4.456521145701544e+00 9.354503072434662e+03 + 39460 1.039847052814568e+00 -6.049125316879459e+00 -6.002058989262358e+00 3.473020773257415e+00 4.743282909925465e+00 9.223390224339159e+03 + 39480 9.758483665069315e-01 -5.972655203185886e+00 -5.986327905328805e+00 3.819961252265296e+00 4.741450480716836e+00 9.175139237556987e+03 + 39500 1.006148368924944e+00 -6.040779400875048e+00 -5.976563242474391e+00 3.511534874945101e+00 4.880273993900071e+00 9.145244485126963e+03 + 39520 9.924570273829869e-01 -6.047919963501973e+00 -5.979960249184792e+00 3.433707854942617e+00 4.823943051283670e+00 9.155620363190474e+03 + 39540 1.017920593940073e+00 -6.116824903692079e+00 -5.942298194355336e+00 3.061031270040167e+00 5.063190642972726e+00 9.040780496116664e+03 + 39560 1.070193654308486e+00 -6.228473099808900e+00 -5.933014514648035e+00 2.515797774728675e+00 5.212366692790646e+00 9.012563585149952e+03 + 39580 9.617222114592462e-01 -6.100606765945614e+00 -5.990311362315667e+00 3.159369866545819e+00 4.792703142347525e+00 9.187327682143981e+03 + 39600 9.163249070380618e-01 -6.062236799919788e+00 -5.981423709077161e+00 3.399492256158327e+00 4.863533529562082e+00 9.160121617322242e+03 + 39620 8.942759924080836e-01 -6.051631448091086e+00 -6.000378450325121e+00 3.366736342289075e+00 4.661038986837019e+00 9.218221912736899e+03 + 39640 9.376053002925989e-01 -6.128918751111820e+00 -5.971695238641911e+00 2.987744492314121e+00 4.890546231176264e+00 9.130374488815794e+03 + 39660 9.348550128163947e-01 -6.129262867731251e+00 -5.943870876034629e+00 3.002734815441156e+00 5.067284321081155e+00 9.045566415151554e+03 + 39680 9.208545632214954e-01 -6.103695827894734e+00 -5.981330555284785e+00 3.144796991399735e+00 4.847437322690800e+00 9.159832003279722e+03 + 39700 9.109708295295589e-01 -6.074507851760340e+00 -5.984811615790004e+00 3.331808293326611e+00 4.846857960715940e+00 9.170471593457387e+03 + 39720 9.399971975630078e-01 -6.090838449451317e+00 -5.985948473354661e+00 3.234504875932525e+00 4.836799350350867e+00 9.173947166776168e+03 + 39740 8.667824729432793e-01 -5.938741049923375e+00 -5.993301069544156e+00 4.059358619593164e+00 4.746066543794891e+00 9.196502541863843e+03 + 39760 9.450618192780360e-01 -5.999623301824166e+00 -6.013575913030403e+00 3.695476470611384e+00 4.615358417905570e+00 9.258790163075570e+03 + 39780 9.701117232041475e-01 -5.984872733836295e+00 -6.012802084586447e+00 3.799756322529606e+00 4.639381668469170e+00 9.256393345509832e+03 + 39800 1.027996640768625e+00 -6.036748202117971e+00 -6.009056265658097e+00 3.482721012168093e+00 4.641732396634005e+00 9.244853437597214e+03 + 39820 9.805686985113743e-01 -5.946467549851589e+00 -6.026038573397098e+00 3.935850633433817e+00 4.478941502659407e+00 9.297165642116028e+03 + 39840 9.965247686932118e-01 -5.957649846374284e+00 -6.031783929496092e+00 3.994718936564067e+00 4.569029559066356e+00 9.314882514982413e+03 + 39860 1.098889613947990e+00 -6.102851323129457e+00 -5.963769867553003e+00 3.133574109342793e+00 4.932201350048484e+00 9.106181351213840e+03 + 39880 9.529349863291990e-01 -5.882496782098813e+00 -6.000865472388631e+00 4.332897595346281e+00 4.653206258206519e+00 9.219692826622490e+03 + 39900 1.014536953384891e+00 -5.970822125283486e+00 -6.011474558318290e+00 3.846900344196487e+00 4.613467782766962e+00 9.252283383154687e+03 + 39920 1.044740501614759e+00 -6.015599992022821e+00 -5.998887836913561e+00 3.581176242849479e+00 4.677140023684499e+00 9.213636216578274e+03 + 39940 1.016780437384348e+00 -5.976464028332214e+00 -5.991437291837746e+00 3.855661462186397e+00 4.769682666032590e+00 9.190776519743937e+03 + 39960 9.574596819710188e-01 -5.890831697210911e+00 -6.051404174262117e+00 4.245960947749993e+00 4.323928936011455e+00 9.375533642191791e+03 + 39980 1.045790408112205e+00 -6.028360175607633e+00 -6.003468576046304e+00 3.551263383793567e+00 4.694194800437302e+00 9.227698632133599e+03 + 40000 9.741345840101885e-01 -5.929992831724750e+00 -6.049799712130667e+00 4.086552795374923e+00 4.398603148029323e+00 9.370550399657091e+03 + 40020 1.040210623896662e+00 -6.039899795855032e+00 -6.018157346159612e+00 3.459097311442175e+00 4.583945822226495e+00 9.272887069653760e+03 + 40040 1.020698200321952e+00 -6.027483894143026e+00 -6.010318605753610e+00 3.531640523771552e+00 4.630206266023372e+00 9.248754061491536e+03 + 40060 9.492470417453232e-01 -5.940453352305340e+00 -5.986882022133473e+00 4.043960873340011e+00 4.777360266373438e+00 9.176750566893264e+03 + 40080 9.785054728284677e-01 -6.001710284796872e+00 -5.963069854243915e+00 3.688991572569921e+00 4.910870904392302e+00 9.104010755658346e+03 + 40100 1.002958422460763e+00 -6.053477042883676e+00 -6.002553232742580e+00 3.377352219779730e+00 4.669764618044061e+00 9.224869170448288e+03 + 40120 9.919787329060643e-01 -6.053080618855446e+00 -6.004503990098579e+00 3.414146918403534e+00 4.693081437934465e+00 9.230894993402258e+03 + 40140 9.116349767803236e-01 -5.951301951433242e+00 -6.026256839113415e+00 3.958120818265929e+00 4.527718253974994e+00 9.297843632149767e+03 + 40160 1.041667690856513e+00 -6.161613604685736e+00 -5.984660692843851e+00 2.811159140626263e+00 4.827250143796979e+00 9.170036754841271e+03 + 40180 9.279449269122680e-01 -6.009872995489977e+00 -5.971121649257267e+00 3.626295052350694e+00 4.848811279170363e+00 9.128622385284772e+03 + 40200 9.027587897634652e-01 -5.986145524972250e+00 -5.977529942617300e+00 3.761031308649730e+00 4.810503315788916e+00 9.148181011384509e+03 + 40220 9.530370159009197e-01 -6.070032142865107e+00 -5.957533864408089e+00 3.314291787812413e+00 4.960274311764938e+00 9.087138817820060e+03 + 40240 9.229133898976317e-01 -6.029878463996480e+00 -5.978700066947503e+00 3.540904936885112e+00 4.834779212571685e+00 9.151763591985769e+03 + 40260 9.290888404222283e-01 -6.037343343263341e+00 -5.956585391000640e+00 3.517195977903119e+00 4.980920637048269e+00 9.084201159144770e+03 + 40280 9.030571820890358e-01 -5.986542495218476e+00 -5.975850353974850e+00 3.742600719745334e+00 4.803996649369749e+00 9.143046678735356e+03 + 40300 1.035596913650094e+00 -6.158250188609495e+00 -5.983623300194167e+00 2.879345310608075e+00 4.882079927312534e+00 9.166846650436422e+03 + 40320 9.166878462214648e-01 -5.946732971150927e+00 -6.040106841815330e+00 3.939066026017316e+00 4.402898811102529e+00 9.340584651796549e+03 + 40340 9.749463824094581e-01 -5.993254330888436e+00 -5.994370851750487e+00 3.747817807406775e+00 4.741406571835835e+00 9.199758576879532e+03 + 40360 9.590584323957710e-01 -5.923992492968304e+00 -6.040065278941563e+00 4.095706403595697e+00 4.429198504331663e+00 9.340438824704721e+03 + 40380 1.028826260755825e+00 -5.986037670006086e+00 -6.025009508595312e+00 3.734797633628695e+00 4.511015305576825e+00 9.293987272241686e+03 + 40400 1.047129429055782e+00 -5.981887222034230e+00 -6.001805844998716e+00 3.864269665144129e+00 4.749893849685111e+00 9.222595492114366e+03 + 40420 1.024936145618428e+00 -5.927712138512521e+00 -6.022413023007136e+00 4.066213960721994e+00 4.522426827039402e+00 9.285985331539670e+03 + 40440 1.040011380881880e+00 -5.937603852945039e+00 -6.058329407771868e+00 4.003730971584696e+00 4.310506153549814e+00 9.396973440386744e+03 + 40460 1.063358061236139e+00 -5.967117911197093e+00 -6.031000258993130e+00 3.874312217890252e+00 4.507489891084035e+00 9.312455323571798e+03 + 40480 1.005765398461269e+00 -5.884196933472519e+00 -6.059689507741084e+00 4.310738974788758e+00 4.303033455950563e+00 9.401185726117097e+03 + 40500 1.077880801348800e+00 -5.999501815647682e+00 -6.044316232218611e+00 3.675912872368227e+00 4.418581557409405e+00 9.353588476160527e+03 + 40520 1.048005738274845e+00 -5.969477682873915e+00 -6.028412384338621e+00 3.881600074645810e+00 4.543187898719896e+00 9.304470720391892e+03 + 40540 1.040046948802218e+00 -5.976548961225775e+00 -6.043524966740740e+00 3.819992556577348e+00 4.435405968407060e+00 9.351132284585299e+03 + 40560 1.032907837436813e+00 -5.991693547359715e+00 -6.008923162108377e+00 3.763638524589354e+00 4.664703410428275e+00 9.244457811689439e+03 + 40580 9.551630611865963e-01 -5.905708251472383e+00 -5.977781200499306e+00 4.251307522045988e+00 4.837453495480580e+00 9.148901838229554e+03 + 40600 9.740242032054918e-01 -5.959106898919769e+00 -5.934513775275332e+00 3.926460861241041e+00 5.067678382980982e+00 9.017063655875021e+03 + 40620 1.034795425159255e+00 -6.067920091621085e+00 -5.949576613294319e+00 3.338043775433361e+00 5.017590341579737e+00 9.062869854771598e+03 + 40640 9.452952832570776e-01 -5.949922055275802e+00 -6.002132531060594e+00 3.973007306802757e+00 4.673206675301466e+00 9.223592368966581e+03 + 40660 9.807646660918888e-01 -6.015319291928376e+00 -5.998109403782946e+00 3.684662071179500e+00 4.783483912132144e+00 9.211230306708607e+03 + 40680 1.020995491726221e+00 -6.086808339611107e+00 -5.941977777821353e+00 3.258864407722225e+00 5.090503905975998e+00 9.039787644926577e+03 + 40700 9.974603408610261e-01 -6.060087627243324e+00 -5.987096006972180e+00 3.352064271882093e+00 4.771193450895733e+00 9.177485960536271e+03 + 40720 9.803795970916349e-01 -6.040944804077452e+00 -5.971389572887560e+00 3.529653894648914e+00 4.929050795778517e+00 9.129418935201054e+03 + 40740 9.118432513813673e-01 -5.941477614153066e+00 -5.980471805111281e+00 3.976294523507797e+00 4.752383844694175e+00 9.157189119726150e+03 + 40760 9.684165603282514e-01 -6.022229123631138e+00 -6.014594327166607e+00 3.537034676219550e+00 4.580874858999822e+00 9.261887647158619e+03 + 40780 9.529141168747349e-01 -5.991649339457775e+00 -6.006614465990598e+00 3.715952256075977e+00 4.630020183678655e+00 9.237367282276446e+03 + 40800 1.013475736724652e+00 -6.069130075709661e+00 -5.963848101039874e+00 3.348157275324611e+00 4.952702666211454e+00 9.106400197517987e+03 + 40820 1.014815605814441e+00 -6.048153060003267e+00 -5.963593174742585e+00 3.434145826276228e+00 4.919701773043020e+00 9.105633707519333e+03 + 40840 9.987394924144332e-01 -5.981814465767969e+00 -5.972370847466655e+00 3.848305452492535e+00 4.902532170173892e+00 9.132412851664709e+03 + 40860 1.033418355161952e+00 -5.966437551467926e+00 -5.991426250749475e+00 3.904516332416921e+00 4.761027354153550e+00 9.190746669302864e+03 + 40880 1.095512368017054e+00 -5.986027509444446e+00 -6.000158936324187e+00 3.742917316303431e+00 4.661772476328718e+00 9.217530116219299e+03 + 40900 1.047969710199426e+00 -5.863556659442547e+00 -6.015840849112379e+00 4.372057594999420e+00 4.497618212013051e+00 9.265710341470240e+03 + 40920 1.115989019117634e+00 -5.934205180036801e+00 -5.994773170810985e+00 4.078884880438856e+00 4.731094104547207e+00 9.201013623195273e+03 + 40940 1.067937835088060e+00 -5.849325196957891e+00 -6.077504209650836e+00 4.487604909055843e+00 4.177365707584858e+00 9.456503970823165e+03 + 40960 1.111302668504833e+00 -5.918498085989634e+00 -6.027721406519253e+00 4.128736504706641e+00 4.501559295971342e+00 9.302325401517686e+03 + 40980 1.004516417483344e+00 -5.773757546618644e+00 -6.033477491413037e+00 4.892918739867220e+00 4.401566625326254e+00 9.320096103543334e+03 + 41000 1.100312739072060e+00 -5.939163186913871e+00 -6.005619031686248e+00 4.065915162142243e+00 4.684315417450513e+00 9.234284639851356e+03 + 41020 1.117781793298070e+00 -5.993022707493547e+00 -6.040572895349359e+00 3.704148939129564e+00 4.431108402093703e+00 9.342030204500930e+03 + 41040 1.043227019909882e+00 -5.922639316386790e+00 -6.012588414784370e+00 4.119456131491478e+00 4.602954488914587e+00 9.255730939667679e+03 + 41060 9.649837032490974e-01 -5.845927083350358e+00 -6.008978190439571e+00 4.570384795957023e+00 4.634120106973490e+00 9.244602924219469e+03 + 41080 9.943917247604555e-01 -5.921690315801159e+00 -5.982755623067029e+00 4.125993871630752e+00 4.775347427484367e+00 9.164182880408296e+03 + 41100 1.087044340047338e+00 -6.086910597388145e+00 -6.028765419625411e+00 3.232790166958651e+00 4.566668775609447e+00 9.305550131344269e+03 + 41120 1.044395312067427e+00 -6.053691666966476e+00 -6.018742012903464e+00 3.382634075055759e+00 4.583320397127064e+00 9.274681219268139e+03 + 41140 1.018081845567299e+00 -6.040563563718770e+00 -5.991918129006105e+00 3.468534372494817e+00 4.747863986471634e+00 9.192248244558763e+03 + 41160 1.048266220355502e+00 -6.105585600521126e+00 -5.974446557198501e+00 3.157505808925461e+00 4.910526489385337e+00 9.138758064643944e+03 + 41180 9.552162332859526e-01 -5.983167812335538e+00 -5.957370601731499e+00 3.845474119907895e+00 4.993605695301726e+00 9.086651671355257e+03 + 41200 9.858948826664378e-01 -6.038456129043190e+00 -6.019115562937681e+00 3.470036018064547e+00 4.581092541585312e+00 9.275826716647505e+03 + 41220 9.751075664419505e-01 -6.031147448972682e+00 -6.046307952822344e+00 3.507362355847183e+00 4.420308396662035e+00 9.359759121565199e+03 + 41240 9.889913671098797e-01 -6.059266512793748e+00 -6.005587318866687e+00 3.356534808027669e+00 4.664769046385268e+00 9.234215192889671e+03 + 41260 9.495010426217806e-01 -6.004977962553616e+00 -6.004030371672636e+00 3.691131073788025e+00 4.696572287265827e+00 9.229421019883268e+03 + 41280 9.754017267026011e-01 -6.045121044590489e+00 -5.961617752682861e+00 3.473153726050506e+00 4.952642550276768e+00 9.099596412348541e+03 + 41300 9.657990250682423e-01 -6.026734062506521e+00 -6.015011430981524e+00 3.520299162466405e+00 4.587612326754305e+00 9.263202156452155e+03 + 41320 1.000056693942888e+00 -6.068124615696912e+00 -6.039374839904057e+00 3.265267140333068e+00 4.430352801949066e+00 9.338316051132173e+03 + 41340 1.026257524849330e+00 -6.096906946763355e+00 -5.975488058171505e+00 3.207823741730236e+00 4.905029789536917e+00 9.141969834784184e+03 + 41360 9.117056277924337e-01 -5.912576534673981e+00 -6.038490653175799e+00 4.163131448524815e+00 4.440113094940513e+00 9.335580537785239e+03 + 41380 1.039570834681165e+00 -6.081010148434698e+00 -5.960364298502459e+00 3.282616321799394e+00 4.975383461995248e+00 9.095782332941602e+03 + 41400 9.792152923796641e-01 -5.959507088669673e+00 -6.015749753028506e+00 3.906248120259810e+00 4.583294037987212e+00 9.265467177160410e+03 + 41420 1.045010525252104e+00 -6.016617454313644e+00 -6.022944478757136e+00 3.628757794896290e+00 4.592427041437890e+00 9.287627206059820e+03 + 41440 1.035319284230467e+00 -5.955816144156109e+00 -6.032974552075830e+00 3.979280038302685e+00 4.536224519802612e+00 9.318524916192082e+03 + 41460 1.002739846870994e+00 -5.867574539141209e+00 -6.024424348198652e+00 4.403094744600180e+00 4.502438868562839e+00 9.292165632195458e+03 + 41480 1.133146311288539e+00 -6.026713620240102e+00 -5.976233488571170e+00 3.583359695974593e+00 4.873224423792731e+00 9.144239542878808e+03 + 41500 1.055425410844994e+00 -5.890145150540625e+00 -6.036974398315731e+00 4.209066061980115e+00 4.365949799502796e+00 9.330878203444596e+03 + 41520 1.071914579040943e+00 -5.901729718952044e+00 -6.016785071296869e+00 4.230198750275984e+00 4.569533112353764e+00 9.268625556088251e+03 + 41540 1.101718045194419e+00 -5.942890612070487e+00 -6.017301622711790e+00 3.977597224690931e+00 4.550317686521887e+00 9.270236831334156e+03 + 41560 1.091812792028701e+00 -5.936039728476040e+00 -6.013671061047997e+00 4.058506690477264e+00 4.612735565439201e+00 9.259040334234722e+03 + 41580 1.013804350401596e+00 -5.835687469809648e+00 -6.068037703713831e+00 4.528396365493213e+00 4.194205366332908e+00 9.427061775130951e+03 + 41600 1.088930951190524e+00 -5.969606064307997e+00 -6.012966105300068e+00 3.866557727423964e+00 4.617577662102833e+00 9.256853153973401e+03 + 41620 1.055907596983285e+00 -5.945779918505039e+00 -6.058243571510969e+00 3.990395252508227e+00 4.344611553254120e+00 9.396709790017991e+03 + 41640 1.130585202435977e+00 -6.087296370255676e+00 -5.970065935047715e+00 3.253076070227216e+00 4.926231370542549e+00 9.125397126853812e+03 + 41660 9.662076617677472e-01 -5.870587949999952e+00 -6.009395870668800e+00 4.470132252157453e+00 4.673075691220625e+00 9.245877477028969e+03 + 41680 1.028475561433104e+00 -5.982003216397621e+00 -5.979001422549295e+00 3.801908285569944e+00 4.819145050373129e+00 9.152683969800424e+03 + 41700 1.000213358230597e+00 -5.954417743728164e+00 -6.014765145919803e+00 3.902761995732969e+00 4.556237873618266e+00 9.262423596151437e+03 + 41720 1.000548981444288e+00 -5.966240073677980e+00 -5.996761068471326e+00 3.887815898055840e+00 4.712559622843770e+00 9.207068669871995e+03 + 41740 1.011328196273304e+00 -5.990699714036409e+00 -6.017713055027428e+00 3.735522480157218e+00 4.580407695885781e+00 9.271452239462220e+03 + 41760 1.034832057223049e+00 -6.032611309280607e+00 -5.975120939821469e+00 3.506016755057652e+00 4.836135353097943e+00 9.140827284065472e+03 + 41780 1.066082669999160e+00 -6.086231166754189e+00 -5.968896139704679e+00 3.217245694032555e+00 4.891001576887595e+00 9.121812240206122e+03 + 41800 1.032989020673128e+00 -6.044707867470353e+00 -5.961509819572236e+00 3.426946832660657e+00 4.904682898547949e+00 9.099233379966327e+03 + 41820 1.040940157787977e+00 -6.063254571647652e+00 -5.952550239754821e+00 3.370590917192535e+00 5.006272322361168e+00 9.071933575824920e+03 + 41840 9.418229621212121e-01 -5.921241743453634e+00 -5.972709266301410e+00 4.128584641076563e+00 4.833050160311212e+00 9.133451174759266e+03 + 41860 1.012986529764073e+00 -6.029947262732189e+00 -5.983810918102788e+00 3.496825261405475e+00 4.761747291843753e+00 9.167411893954642e+03 + 41880 9.720378782548207e-01 -5.971311234500191e+00 -6.006191433597305e+00 3.796466184351464e+00 4.596178683442472e+00 9.236062432185679e+03 + 41900 1.026558840731612e+00 -6.053575082641583e+00 -5.977806799479943e+00 3.390534746492480e+00 4.825607953510541e+00 9.149054646604554e+03 + 41920 9.654337067147909e-01 -5.965393009405540e+00 -5.987596957799651e+00 3.891029926858260e+00 4.763531419129365e+00 9.178991884827015e+03 + 41940 9.325868398049214e-01 -5.918403699422151e+00 -5.974399033375511e+00 4.139143443263261e+00 4.817609570453143e+00 9.138597371021664e+03 + 41960 1.008174323289658e+00 -6.028459495713508e+00 -5.966315012820007e+00 3.504293906654822e+00 4.861137144256952e+00 9.113914225198740e+03 + 41980 1.001244772711308e+00 -6.012105519027181e+00 -5.984741695977820e+00 3.599025458645301e+00 4.756152765132667e+00 9.170258132130752e+03 + 42000 9.883389488254670e-01 -5.982539622029579e+00 -5.970001978367593e+00 3.756972270684452e+00 4.828965360785661e+00 9.125184592889773e+03 + 42020 9.983260186153656e-01 -5.983026992695594e+00 -6.003277310748927e+00 3.794918314332567e+00 4.678637854343740e+00 9.227106708291334e+03 + 42040 1.067569561263460e+00 -6.065726268969217e+00 -6.006416443901234e+00 3.344300253447148e+00 4.684866447153279e+00 9.236763402643672e+03 + 42060 1.009339883809101e+00 -5.957593849092540e+00 -5.953451405034358e+00 3.945983628408355e+00 4.969770183231578e+00 9.074724393585248e+03 + 42080 1.000802634394208e+00 -5.922813886468560e+00 -5.975164705637753e+00 4.164214157644846e+00 4.863607652712255e+00 9.140935764087262e+03 + 42100 1.002523074867508e+00 -5.896890779204693e+00 -5.995157450590504e+00 4.258699492348400e+00 4.694437058532821e+00 9.202171616778922e+03 + 42120 1.029682264227345e+00 -5.907422085881147e+00 -6.042056017871837e+00 4.191834242600210e+00 4.418745370576029e+00 9.346573558115551e+03 + 42140 1.020182821929958e+00 -5.864932287036603e+00 -6.087204242657284e+00 4.383436313477167e+00 4.107116347829243e+00 9.486672198113525e+03 + 42160 1.100710388146992e+00 -5.964492544590880e+00 -6.070355627829341e+00 3.810732098007655e+00 4.202849891793228e+00 9.434318958669412e+03 + 42180 1.050319845308460e+00 -5.882999156922605e+00 -6.017760932183309e+00 4.323070386698666e+00 4.549247418834383e+00 9.271647290820150e+03 + 42200 1.102167238778667e+00 -5.962195864007908e+00 -6.011722205301942e+00 3.835153633303725e+00 4.550765717416835e+00 9.253028569557557e+03 + 42220 9.929007405410472e-01 -5.808459174911580e+00 -6.032858263376204e+00 4.728527089424414e+00 4.439992797813838e+00 9.318167558145306e+03 + 42240 1.067468417507986e+00 -5.935613422723162e+00 -6.019983074366220e+00 4.028051079038299e+00 4.543587483142471e+00 9.278484215337145e+03 + 42260 1.037382823239018e+00 -5.920627699516973e+00 -6.062782093900850e+00 4.126069483963200e+00 4.309796953089541e+00 9.410794406151206e+03 + 42280 1.056018783432308e+00 -5.991481578667956e+00 -6.042755003084171e+00 3.728152384029184e+00 4.433732446494494e+00 9.348747847987999e+03 + 42300 9.749924002192110e-01 -5.918692850061968e+00 -5.955978031972080e+00 4.198607767295293e+00 4.984510482904172e+00 9.082392485504502e+03 + 42320 1.005765985273272e+00 -6.004266176969770e+00 -5.960137059099537e+00 3.658883645490996e+00 4.912279869260791e+00 9.095081183849157e+03 + 42340 1.000488442249874e+00 -6.026860991602560e+00 -6.010444680655715e+00 3.541073160182420e+00 4.635338158055110e+00 9.249124491450788e+03 + 42360 1.021027227119354e+00 -6.080541800545733e+00 -6.000374597068820e+00 3.277191009156674e+00 4.737523497355751e+00 9.218207455062064e+03 + 42380 9.876368553615831e-01 -6.047802632211480e+00 -5.985236081389377e+00 3.394138788698931e+00 4.753405605661900e+00 9.171820014800231e+03 + 42400 9.353238595323677e-01 -5.981028627410359e+00 -6.016236587807597e+00 3.782929493003387e+00 4.580759935988183e+00 9.266943499416178e+03 + 42420 9.277928428763611e-01 -5.973687758162972e+00 -6.003483867664166e+00 3.799381252694099e+00 4.628287381005197e+00 9.227753382121127e+03 + 42440 9.644170927797882e-01 -6.028196062747335e+00 -5.969998298036570e+00 3.574590017560665e+00 4.908770588604860e+00 9.125165510110977e+03 + 42460 9.221063611117847e-01 -5.960968830859374e+00 -5.971395549302516e+00 3.970732915555465e+00 4.910861084725479e+00 9.129441166678169e+03 + 42480 9.685052453610711e-01 -6.020292086542680e+00 -5.997299972266075e+00 3.597251056113297e+00 4.729275334307752e+00 9.208760108634246e+03 + 42500 1.004413820781589e+00 -6.060260573018681e+00 -6.020666047526991e+00 3.331464448953759e+00 4.558822341560059e+00 9.280630624251418e+03 + 42520 9.919404607610979e-01 -6.029843262149455e+00 -6.029369722552115e+00 3.540946551052425e+00 4.543665688700363e+00 9.307444260726128e+03 + 42540 9.816233209824741e-01 -6.002933876441045e+00 -6.000094161100922e+00 3.696964454642380e+00 4.713270539569894e+00 9.217354190864300e+03 + 42560 9.838593388869179e-01 -5.994898297799462e+00 -5.990747505611068e+00 3.765685749943987e+00 4.789520241022768e+00 9.188638480326732e+03 + 42580 9.308198779623225e-01 -5.901170235735740e+00 -6.019585774465984e+00 4.242424581270377e+00 4.562464233135923e+00 9.277237268107887e+03 + 42600 9.680489704144786e-01 -5.937214453171924e+00 -6.007297235752763e+00 3.960535505482295e+00 4.558109322627567e+00 9.239473417881185e+03 + 42620 1.070861566598949e+00 -6.066051233038757e+00 -6.004966358411322e+00 3.342521363849202e+00 4.693280166813735e+00 9.232316527625924e+03 + 42640 9.751189310589308e-01 -5.903285823641355e+00 -6.058034808304072e+00 4.189344304892298e+00 4.300751687630991e+00 9.396050120998671e+03 + 42660 9.731572859055522e-01 -5.880894785199361e+00 -6.023394722516059e+00 4.334938025111613e+00 4.516681333245104e+00 9.288997185851287e+03 + 42680 9.782938119957603e-01 -5.867143239203233e+00 -6.013157469230508e+00 4.383533864449713e+00 4.545097560004027e+00 9.257463858879093e+03 + 42700 1.048427319225294e+00 -5.947651879296277e+00 -5.965585920159571e+00 3.986211016485091e+00 4.883230978564202e+00 9.111649023152080e+03 + 42720 9.856468741301643e-01 -5.821196327792630e+00 -6.019534113005258e+00 4.644726134888419e+00 4.505839879524445e+00 9.277097604837996e+03 + 42740 1.153830078841981e+00 -6.029262413203185e+00 -5.985027926087037e+00 3.560106650630934e+00 4.814107920916611e+00 9.171146172277600e+03 + 42760 1.073076630408098e+00 -5.867082361197090e+00 -6.056436992475969e+00 4.381100798962864e+00 4.293797203625054e+00 9.391121440777741e+03 + 42780 1.129088786796924e+00 -5.911678348988840e+00 -6.033575220626751e+00 4.202310009691208e+00 4.502359309266404e+00 9.320407309509890e+03 + 42800 1.133618811493557e+00 -5.890405725625349e+00 -6.051891020850152e+00 4.259277686276134e+00 4.332004131326644e+00 9.377029157181451e+03 + 42820 1.152280073280757e+00 -5.904357007548787e+00 -6.022328322383362e+00 4.158709114376955e+00 4.481299568594856e+00 9.285713874040412e+03 + 42840 1.147618890673095e+00 -5.898211705899039e+00 -6.018114076043819e+00 4.263214343513316e+00 4.574716379310172e+00 9.272724944820558e+03 + 42860 1.067303376761237e+00 -5.799387852833096e+00 -6.046586687946289e+00 4.734966529333999e+00 4.315512564217942e+00 9.360563680019064e+03 + 42880 1.067451654650052e+00 -5.839018953002554e+00 -6.018131369814994e+00 4.555371209823728e+00 4.526879994929771e+00 9.272729996427064e+03 + 42900 1.017910504028394e+00 -5.821716510644388e+00 -6.002320404447032e+00 4.708163664389866e+00 4.671108157812847e+00 9.224103650735389e+03 + 42920 1.059701455343044e+00 -5.944552881968688e+00 -5.960473458120179e+00 3.990763912046887e+00 4.899345500083827e+00 9.096072481170564e+03 + 42940 9.878290660745270e-01 -5.890321766054291e+00 -6.025692589444443e+00 4.246363683573211e+00 4.469043467099747e+00 9.296097913809414e+03 + 42960 1.027061070576393e+00 -5.984038434391606e+00 -6.013893146383296e+00 3.753446052349330e+00 4.582015676091299e+00 9.259738441109906e+03 + 42980 1.023604291954133e+00 -6.003560703585315e+00 -5.977208996251175e+00 3.696466080291529e+00 4.847781661717693e+00 9.147198560564861e+03 + 43000 1.047040952463689e+00 -6.055402833051120e+00 -5.980630665071473e+00 3.384484174581140e+00 4.813837534075875e+00 9.157698807345088e+03 + 43020 1.031359357778491e+00 -6.046435347242450e+00 -6.012780630280496e+00 3.408662822744633e+00 4.601913415590793e+00 9.256338864382320e+03 + 43040 9.830260499444172e-01 -5.988067240269205e+00 -5.982814246380953e+00 3.729262574316410e+00 4.759426078120931e+00 9.164379421916006e+03 + 43060 9.569613321854348e-01 -5.960327856796565e+00 -5.987772049475552e+00 3.910603628310275e+00 4.753014826972441e+00 9.179554534259036e+03 + 43080 9.519482537088338e-01 -5.961192908361253e+00 -6.022789521857399e+00 3.948548302079721e+00 4.594851015339724e+00 9.287136281129708e+03 + 43100 9.896027148867316e-01 -6.024676819144529e+00 -6.000303924299015e+00 3.604723882677578e+00 4.744676816573810e+00 9.217985859733315e+03 + 43120 9.879506586404259e-01 -6.028341884448516e+00 -6.014971179339854e+00 3.525975931726293e+00 4.602752589570162e+00 9.263064222609757e+03 + 43140 9.495732833904647e-01 -5.976194969212692e+00 -6.003797855310245e+00 3.866972910243681e+00 4.708472866738711e+00 9.228700798946804e+03 + 43160 1.052294047671788e+00 -6.130260035585733e+00 -5.964976843684558e+00 2.999923553162124e+00 4.949005218549958e+00 9.109852532510920e+03 + 43180 1.004007056039291e+00 -6.058699466393047e+00 -5.965696520246928e+00 3.412237926333785e+00 4.946275235264199e+00 9.112035523971606e+03 + 43200 9.877195797013062e-01 -6.033009864470846e+00 -6.013693890129190e+00 3.455901337621872e+00 4.566816651429027e+00 9.259129697802808e+03 + 43220 1.001375449292046e+00 -6.049021769970193e+00 -5.979587618456819e+00 3.439670704625959e+00 4.838372347515977e+00 9.154487545677650e+03 + 43240 1.030573913098022e+00 -6.084572401545989e+00 -5.950678450674758e+00 3.236714533021168e+00 5.005554318945713e+00 9.066281503153792e+03 + 43260 9.545667384524475e-01 -5.959395229467003e+00 -6.017705347906028e+00 3.934684834008945e+00 4.599859110470395e+00 9.271460813538190e+03 + 43280 9.891693043603166e-01 -5.994199556339470e+00 -6.038093552065153e+00 3.713492061646571e+00 4.461445945615814e+00 9.334355562475148e+03 + 43300 9.401744431738801e-01 -5.901517074132211e+00 -6.090647042222202e+00 4.179195409306526e+00 4.093181864765822e+00 9.497395226762759e+03 + 43320 1.018153035613122e+00 -5.995127162374814e+00 -6.000379016673182e+00 3.743163107450942e+00 4.713006147347890e+00 9.218205075773891e+03 + 43340 9.816169751428591e-01 -5.914911309841576e+00 -6.051696240181725e+00 4.115457460039036e+00 4.330017222626345e+00 9.376424858128343e+03 + 43360 1.020514420308772e+00 -5.945623235512811e+00 -6.033851536465662e+00 3.987719437550037e+00 4.481098880193324e+00 9.321256130463647e+03 + 43380 1.049822266731537e+00 -5.960695632164704e+00 -6.037091578949415e+00 3.926830084105465e+00 4.488152735433095e+00 9.331253638021160e+03 + 43400 1.104107613336717e+00 -6.016887823218112e+00 -6.024708934025497e+00 3.608281979367014e+00 4.563371950798023e+00 9.293053166073969e+03 + 43420 1.067105552722048e+00 -5.945784971554009e+00 -5.989292297776403e+00 3.973838242448465e+00 4.724012442542499e+00 9.184223521146152e+03 + 43440 1.039504461383008e+00 -5.892300859036462e+00 -5.980781592914661e+00 4.297725292844597e+00 4.789655226566663e+00 9.158119279815603e+03 + 43460 9.889098167668555e-01 -5.808837432599365e+00 -6.015908798463626e+00 4.690725684546914e+00 4.501689857564020e+00 9.265935309641163e+03 + 43480 1.059854792665280e+00 -5.909766399686471e+00 -6.038949288624625e+00 4.144301925996133e+00 4.402513786725797e+00 9.336993476795287e+03 + 43500 1.039952725895798e+00 -5.885749399748401e+00 -6.037794677884799e+00 4.298058678056440e+00 4.424991162066498e+00 9.333433173026649e+03 + 43520 1.040733332848676e+00 -5.903190915999691e+00 -6.012277253473432e+00 4.282866901354387e+00 4.656476270524004e+00 9.254762410430034e+03 + 43540 1.068855680551549e+00 -5.976838093128382e+00 -6.002856631256365e+00 3.753554276319238e+00 4.604151804032599e+00 9.225814841236908e+03 + 43560 9.797788171985855e-01 -5.890614250718889e+00 -6.018238714491039e+00 4.288197247503880e+00 4.555357826702260e+00 9.273045483309674e+03 + 43580 1.001286688090568e+00 -5.975862330406976e+00 -5.950500158514716e+00 3.799734288735876e+00 4.945367804524652e+00 9.065713627082419e+03 + 43600 9.560588444261650e-01 -5.953729928899411e+00 -5.986631930594523e+00 3.931401694037400e+00 4.742473308735757e+00 9.176027810874892e+03 + 43620 9.516288890263075e-01 -5.980320778267289e+00 -5.997710796959076e+00 3.818842357103101e+00 4.718986178678161e+00 9.210000274863347e+03 + 43640 9.998427215934363e-01 -6.075021626592518e+00 -5.968574425301028e+00 3.314078328112557e+00 4.925314630579457e+00 9.120851155444963e+03 + 43660 9.530353603549442e-01 -6.021464010366691e+00 -6.030679719321651e+00 3.605885756519080e+00 4.552967729573345e+00 9.311461063008839e+03 + 43680 1.053803642179686e+00 -6.182616804528794e+00 -5.971533298191842e+00 2.703202384867893e+00 4.915276543321711e+00 9.129885254296563e+03 + 43700 9.054869488859441e-01 -5.968637804469909e+00 -6.001163842593330e+00 3.854055498321952e+00 4.667285954029135e+00 9.220606076412834e+03 + 43720 9.092715546334610e-01 -5.973510357038468e+00 -5.985528597367561e+00 3.816607850817448e+00 4.747597255031115e+00 9.172666853785340e+03 + 43740 9.648352587776566e-01 -6.049806570887415e+00 -5.936859000696399e+00 3.489169058285245e+00 5.137731484902055e+00 9.024236697275106e+03 + 43760 9.351932432860037e-01 -5.994543260263411e+00 -5.990393249873906e+00 3.764030712744081e+00 4.787860714612650e+00 9.187546694156073e+03 + 43780 1.058085435964107e+00 -6.160511815647474e+00 -5.975691069737474e+00 2.860009745733641e+00 4.921279069666857e+00 9.142586853911111e+03 + 43800 9.944016458290016e-01 -6.048255784435115e+00 -5.970449329038832e+00 3.467001913463403e+00 4.913778620858920e+00 9.126561681242074e+03 + 43820 9.663739136986895e-01 -5.985596461163115e+00 -5.947466913561681e+00 3.822017375038782e+00 5.040963137894641e+00 9.056493813119876e+03 + 43840 9.398389868783787e-01 -5.920740078145464e+00 -6.014947052912079e+00 4.116285885761977e+00 4.575334858169841e+00 9.262990812546112e+03 + 43860 1.029902982519457e+00 -6.024766348263920e+00 -6.025640789411106e+00 3.551235038741337e+00 4.546213862354866e+00 9.295945401530627e+03 + 43880 1.044787154454894e+00 -6.021825703389696e+00 -6.015765836227601e+00 3.577486698003261e+00 4.612283393009424e+00 9.265518173774766e+03 + 43900 1.017347564613833e+00 -5.961616603805984e+00 -6.035368076520879e+00 3.868101699299082e+00 4.444609329966637e+00 9.325947708391857e+03 + 43920 1.051271492095395e+00 -5.997370675638565e+00 -6.006671711673600e+00 3.712290617106905e+00 4.658882628863058e+00 9.237547838150287e+03 + 43940 1.033302111134558e+00 -5.959494352791464e+00 -6.006510046905924e+00 3.925597709834556e+00 4.655626318574174e+00 9.237027029862871e+03 + 43960 1.048268640733096e+00 -5.974074330648794e+00 -5.976280417552674e+00 3.915821076099669e+00 4.903153383706741e+00 9.144335275666786e+03 + 43980 1.031451242621384e+00 -5.946985114871048e+00 -5.994124628599200e+00 4.036432889972897e+00 4.765750507329679e+00 9.198962267471863e+03 + 44000 1.005911871965239e+00 -5.909133496219501e+00 -5.991316815400957e+00 4.196119889308073e+00 4.724210552740611e+00 9.190374653609519e+03 + 44020 1.052890297721638e+00 -5.981142560877849e+00 -5.959662504909911e+00 3.852959582498220e+00 4.976301387894043e+00 9.093643049754877e+03 + 44040 1.054115870502467e+00 -5.989654242170328e+00 -6.004740130812059e+00 3.746198960921911e+00 4.659573453807370e+00 9.231601089645210e+03 + 44060 1.016748787205440e+00 -5.948708956473249e+00 -5.999769051930477e+00 3.945196524408043e+00 4.652001554768402e+00 9.216350940308181e+03 + 44080 1.022358134265070e+00 -5.982029537570616e+00 -5.995223897469996e+00 3.772768066997626e+00 4.697004010634792e+00 9.202374179733488e+03 + 44100 9.976488675684239e-01 -5.987292867359272e+00 -5.985964764555890e+00 3.719787347419050e+00 4.727413519239311e+00 9.174010241602811e+03 + 44120 9.878774389058852e-01 -6.040063392081655e+00 -5.983679505518572e+00 3.468219910826282e+00 4.791984912849749e+00 9.167025834266926e+03 + 44140 9.811445851239732e-01 -6.104276502068400e+00 -5.987234838456873e+00 3.179995924826761e+00 4.852067269423058e+00 9.177893438559246e+03 + 44160 8.879097406772835e-01 -6.015150918813836e+00 -6.035658787842863e+00 3.583303474023029e+00 4.465544116475882e+00 9.326850821694325e+03 + 44180 9.404853277778682e-01 -6.119882529047506e+00 -6.015572614808396e+00 3.020606164163634e+00 4.619569833631665e+00 9.264930568316562e+03 + 44200 8.795486879054911e-01 -6.041899774901146e+00 -6.013802303763943e+00 3.430059136734282e+00 4.591399164073708e+00 9.259471572404133e+03 + 44220 9.174773000436394e-01 -6.098964529761320e+00 -5.984266502332054e+00 3.196861375306876e+00 4.855475198268100e+00 9.168806211460727e+03 + 44240 9.317818896596072e-01 -6.112780917416571e+00 -5.971426605809496e+00 3.101144182710253e+00 4.912822514467104e+00 9.129536224014815e+03 + 44260 9.122884283951161e-01 -6.067554546885442e+00 -6.006219325463735e+00 3.298222649218836e+00 4.650418982217120e+00 9.236152453011944e+03 + 44280 1.041744634801371e+00 -6.235675668622503e+00 -5.960102522178244e+00 2.475474138759287e+00 5.057857790448812e+00 9.095011348718204e+03 + 44300 9.314902462279555e-01 -6.042523426917090e+00 -6.034370859927232e+00 3.450653048652696e+00 4.497466349914127e+00 9.322876189241906e+03 + 44320 9.291402723635239e-01 -6.010500878758293e+00 -5.998930542939956e+00 3.628011065415561e+00 4.694449724188138e+00 9.213757106659979e+03 + 44340 9.826999131182712e-01 -6.056969718286006e+00 -5.958016110862165e+00 3.394572725968288e+00 4.962779652817241e+00 9.088617130600640e+03 + 44360 1.040923764306458e+00 -6.109885461557235e+00 -5.991496003246529e+00 3.124511687228603e+00 4.804322277558141e+00 9.190965877078530e+03 + 44380 9.734744607289658e-01 -5.979492629828739e+00 -6.025367411754219e+00 3.795563620911742e+00 4.532143523996071e+00 9.295080380872345e+03 + 44400 1.031607118497341e+00 -6.040628625650927e+00 -5.996666343504339e+00 3.505024110036007e+00 4.757462337262891e+00 9.206805795223194e+03 + 44420 1.051663108435957e+00 -6.046403150986342e+00 -6.038243165277815e+00 3.466149958797668e+00 4.513005859489738e+00 9.334833238355934e+03 + 44440 1.053086184577943e+00 -6.033286209042171e+00 -6.006317023791751e+00 3.554949301088040e+00 4.709810536263886e+00 9.236466474553114e+03 + 44460 1.028155467526128e+00 -5.984644824941411e+00 -6.044348939398279e+00 3.757708617530137e+00 4.414878353136949e+00 9.353675754734333e+03 + 44480 1.034563528443213e+00 -5.987431675567249e+00 -6.035025246188928e+00 3.766470334318505e+00 4.493180686727575e+00 9.324878048494254e+03 + 44500 1.044640663285337e+00 -6.000013801552655e+00 -6.025526521754809e+00 3.696249239700212e+00 4.549751252218750e+00 9.295560421354163e+03 + 44520 9.741811292179292e-01 -5.896628926601443e+00 -6.036788010655622e+00 4.235086821354985e+00 4.430271671167731e+00 9.330298366875495e+03 + 44540 1.033320293560809e+00 -5.987269973433270e+00 -5.998144892007492e+00 3.729627137886326e+00 4.667181672544933e+00 9.211338064886950e+03 + 44560 1.045010736128547e+00 -6.009568951139081e+00 -6.020845106469034e+00 3.643806840574785e+00 4.579057411690798e+00 9.281143584804753e+03 + 44580 1.108076239821885e+00 -6.114675659714501e+00 -5.973377991734043e+00 3.119603714030966e+00 4.930956789318206e+00 9.135500351817574e+03 + 44600 1.042002301079985e+00 -6.034794129171982e+00 -5.986180055304679e+00 3.531752828594982e+00 4.810902363744654e+00 9.174669074822155e+03 + 44620 9.900339218609060e-01 -5.978559797599485e+00 -5.989106557169039e+00 3.846535478743761e+00 4.785974353189617e+00 9.183635655550199e+03 + 44640 9.521899196989791e-01 -5.948304817607248e+00 -6.020921416943950e+00 4.007809258355389e+00 4.590833507581618e+00 9.281336497677594e+03 + 44660 9.904607532559435e-01 -6.036147852024190e+00 -6.010345874641897e+00 3.527943257919222e+00 4.676102204891444e+00 9.248840833776167e+03 + 44680 9.522527961358813e-01 -6.017244392039335e+00 -5.988771295544299e+00 3.610670954993704e+00 4.774167881265642e+00 9.182607617771590e+03 + 44700 9.778167397004138e-01 -6.093814438957845e+00 -5.967877177249019e+00 3.204150316486027e+00 4.927301561946374e+00 9.118694212763059e+03 + 44720 9.554767568724524e-01 -6.095009815749385e+00 -5.977477560777148e+00 3.194553542025427e+00 4.869441938133692e+00 9.148038085202334e+03 + 44740 9.016631559999805e-01 -6.042712937306354e+00 -5.968430207604885e+00 3.462716877197736e+00 4.889259806358844e+00 9.120390909697662e+03 + 44760 9.110012153255921e-01 -6.071622213824578e+00 -5.949903646555379e+00 3.334140491561252e+00 5.033067340708406e+00 9.063909964984870e+03 + 44780 9.367768111250798e-01 -6.115493813806432e+00 -5.984086680038731e+00 3.068521701282660e+00 4.823081798565030e+00 9.168271988856170e+03 + 44800 9.426598744713789e-01 -6.122598441475942e+00 -6.002267887738543e+00 2.991330638812212e+00 4.682287299465369e+00 9.224008288570460e+03 + 44820 8.982252198973060e-01 -6.048465753693729e+00 -5.998447839062718e+00 3.420677208507584e+00 4.707887814566126e+00 9.212280469748421e+03 + 44840 8.544935896449105e-01 -5.966778415044003e+00 -6.004069057877350e+00 3.811207679674588e+00 4.597079037817181e+00 9.229533123548090e+03 + 44860 9.787651380573306e-01 -6.122548618577605e+00 -5.948751283918413e+00 3.083363526820345e+00 5.081334717484047e+00 9.060397199405674e+03 + 44880 9.574037934031961e-01 -6.053590702113706e+00 -6.012866053212771e+00 3.401654177584300e+00 4.635501413692516e+00 9.256594951927616e+03 + 44900 1.010773908773713e+00 -6.093645653065124e+00 -6.019538160086261e+00 3.178568887398491e+00 4.604105580180599e+00 9.277136948292919e+03 + 44920 9.866902019024648e-01 -6.027109287492773e+00 -5.993707224389452e+00 3.624885235197160e+00 4.816685050488994e+00 9.197733228332030e+03 + 44940 1.020190537638765e+00 -6.056084065275464e+00 -5.966454310857993e+00 3.429076713471332e+00 4.943744633496122e+00 9.114337737008495e+03 + 44960 9.524672643064573e-01 -5.942260627102574e+00 -6.036539327484205e+00 3.986945865660108e+00 4.445582978487053e+00 9.329563686612148e+03 + 44980 9.667314090633224e-01 -5.954274812589973e+00 -6.023374155230139e+00 3.880113668259499e+00 4.483334549730946e+00 9.288943797340771e+03 + 45000 9.770601562059136e-01 -5.962905126795389e+00 -6.009004536656666e+00 3.942252905953867e+00 4.677542960669793e+00 9.244690345391469e+03 + 45020 9.985325647643951e-01 -5.989477147718591e+00 -5.993347920425673e+00 3.736859109477459e+00 4.714632533593255e+00 9.196641503405395e+03 + 45040 1.007504539887335e+00 -5.997817497285838e+00 -6.036125957602049e+00 3.704187491127704e+00 4.484214383776948e+00 9.328292769787153e+03 + 45060 1.003671947602390e+00 -5.988953345815810e+00 -6.027986304006537e+00 3.779557231522706e+00 4.555423945260795e+00 9.303174592776817e+03 + 45080 1.036428248556178e+00 -6.038342595110455e+00 -5.970958927520535e+00 3.515447961795993e+00 4.902375408686169e+00 9.128114309467492e+03 + 45100 9.900730243923580e-01 -5.968974068296387e+00 -5.987657449075325e+00 3.869931752946302e+00 4.762648889269812e+00 9.179186576986322e+03 + 45120 1.019234200729725e+00 -6.010499653940125e+00 -6.030121182620810e+00 3.607073762255418e+00 4.494403908149170e+00 9.309744399296134e+03 + 45140 1.013001905856983e+00 -6.002663701091591e+00 -6.029279456462883e+00 3.662727019838008e+00 4.509895233721217e+00 9.307168895779778e+03 + 45160 9.698363294889166e-01 -5.941237019205436e+00 -6.015921371514668e+00 4.010044526025745e+00 4.581195417699971e+00 9.265990627477371e+03 + 45180 9.744499586576585e-01 -5.951108383129355e+00 -6.046094904230198e+00 3.916006635071441e+00 4.370579331793769e+00 9.359085946889680e+03 + 45200 9.823399088730466e-01 -5.967396025468328e+00 -6.048193530368751e+00 3.781446232798570e+00 4.317494456286868e+00 9.365567517754695e+03 + 45220 1.014884389942635e+00 -6.022639499349491e+00 -6.021834794969820e+00 3.569088695345047e+00 4.573709432420721e+00 9.284167893845650e+03 + 45240 9.609991049530829e-01 -5.951021366942196e+00 -6.047123042655146e+00 3.936934244000892e+00 4.385103550370880e+00 9.362266183393145e+03 + 45260 9.860285264153303e-01 -5.998294014252766e+00 -6.024747874803780e+00 3.705515919166511e+00 4.553613758160898e+00 9.293180745229589e+03 + 45280 1.039500089932220e+00 -6.090752722379923e+00 -5.957914941721507e+00 3.209294620511539e+00 4.972069713632290e+00 9.088329038598336e+03 + 45300 9.914855379572206e-01 -6.031828476144758e+00 -5.969515768864861e+00 3.599695176136700e+00 4.957504384198160e+00 9.123696228189738e+03 + 45320 9.928047573685331e-01 -6.046510541925003e+00 -6.009536543703220e+00 3.455046294074056e+00 4.667356713571265e+00 9.246357374623882e+03 + 45340 9.738279510449656e-01 -6.034074839546645e+00 -6.042779204880069e+00 3.453919054416601e+00 4.403937241675900e+00 9.348831099002326e+03 + 45360 1.034756486499149e+00 -6.141996497742743e+00 -5.962786609980720e+00 2.942248048764549e+00 4.971298956934593e+00 9.103166585679541e+03 + 45380 9.660119205882111e-01 -6.056130103610525e+00 -5.968562744318561e+00 3.419241906807790e+00 4.922067234867301e+00 9.120793767244262e+03 + 45400 8.815184303390018e-01 -5.943744522652819e+00 -6.004943030045705e+00 3.975396723660041e+00 4.623985423771676e+00 9.232230305807490e+03 + 45420 9.150665021736227e-01 -6.001178525575921e+00 -5.993558879859882e+00 3.684605862280283e+00 4.728359047118143e+00 9.197290538511814e+03 + 45440 1.009690982375667e+00 -6.144693766793868e+00 -5.965249730633436e+00 2.969699193625116e+00 5.000094618133167e+00 9.110694326481607e+03 + 45460 9.802079686647477e-01 -6.101061999234433e+00 -5.974148773348036e+00 3.155579172627301e+00 4.884334555425228e+00 9.137872695360151e+03 + 45480 9.064530400004156e-01 -5.987314765332380e+00 -6.011781184309340e+00 3.714891149562635e+00 4.574401185630830e+00 9.253240653380661e+03 + 45500 9.270713427255561e-01 -6.003528696881522e+00 -5.994572577499298e+00 3.689433974206628e+00 4.740861397654359e+00 9.200401916061559e+03 + 45520 9.386765430170138e-01 -5.997613956261170e+00 -5.982842516153095e+00 3.713550293937092e+00 4.798370188910630e+00 9.164458514304373e+03 + 45540 9.907620792352331e-01 -6.042017169531688e+00 -6.033113399816497e+00 3.442580399322137e+00 4.493707222880677e+00 9.318959265289719e+03 + 45560 1.007557366295257e+00 -6.026174034478126e+00 -6.018532694151251e+00 3.590278618088091e+00 4.634156376738604e+00 9.274033728611394e+03 + 45580 1.036602352842762e+00 -6.030962624412669e+00 -6.025782339607796e+00 3.513917359421110e+00 4.543663356417176e+00 9.296380268850406e+03 + 45600 9.825801915476166e-01 -5.917334926316772e+00 -6.059700231234692e+00 4.135638216232778e+00 4.318154604434347e+00 9.401202756799008e+03 + 45620 1.086929699947403e+00 -6.043661484504853e+00 -5.997158206488040e+00 3.498966143830534e+00 4.765995162562092e+00 9.208318320480696e+03 + 45640 1.015784972069015e+00 -5.918560634637530e+00 -6.020037981822809e+00 4.167762136776048e+00 4.585063505669452e+00 9.278644329216979e+03 + 45660 9.905874066106548e-01 -5.867585363371559e+00 -6.085361711668277e+00 4.374961477312450e+00 4.124455984611710e+00 9.480946858428193e+03 + 45680 1.001403069643705e+00 -5.877699934157615e+00 -6.093142471850548e+00 4.274427325679746e+00 4.037322934621963e+00 9.505185810532963e+03 + 45700 1.012208629431235e+00 -5.896062902470717e+00 -6.002874956155948e+00 4.266775583418445e+00 4.653444242045954e+00 9.225873899126333e+03 + 45720 1.028046023958991e+00 -5.924749673863724e+00 -6.011400608525927e+00 4.051852582902914e+00 4.554289506883745e+00 9.252094438410912e+03 + 45740 1.083669740621331e+00 -6.017464256459352e+00 -5.980852146335405e+00 3.608665557306204e+00 4.818897959343641e+00 9.158359251375145e+03 + 45760 9.875412767167220e-01 -5.890034404873836e+00 -6.002074493731762e+00 4.291165326069461e+00 4.647813797699533e+00 9.223429906175650e+03 + 45780 9.582501034354468e-01 -5.864430838773478e+00 -6.017662036957267e+00 4.479894056211259e+00 4.600016803788660e+00 9.271317968838737e+03 + 45800 1.055868437196296e+00 -6.031074750768443e+00 -5.949643473826411e+00 3.558242509748278e+00 5.025833503398810e+00 9.063107851390636e+03 + 45820 1.074399035137153e+00 -6.081707616759515e+00 -5.965470011851463e+00 3.258419426780411e+00 4.925873741873676e+00 9.111354859078245e+03 + 45840 9.816627586646965e-01 -5.973088573349747e+00 -5.970578580690987e+00 3.861642821587270e+00 4.876055587853982e+00 9.126952455130249e+03 + 45860 9.634852339177441e-01 -5.975460845645318e+00 -5.976025838607751e+00 3.884523248003387e+00 4.881278970980717e+00 9.143583779641971e+03 + 45880 9.926686437227590e-01 -6.048308139025887e+00 -5.994277890567073e+00 3.439510682329893e+00 4.749760730134333e+00 9.199458976169082e+03 + 45900 9.828988381451896e-01 -6.062550379604077e+00 -5.975280955308194e+00 3.346555072174505e+00 4.847669611381228e+00 9.141324345445451e+03 + 45920 9.045368836714649e-01 -5.972890214255204e+00 -6.006844827084905e+00 3.825116503358220e+00 4.630143862030728e+00 9.238058438540929e+03 + 45940 9.373422585535576e-01 -6.043753499313156e+00 -6.010579809560938e+00 3.448124252181436e+00 4.638612712350567e+00 9.249514668200247e+03 + 45960 9.523795198154340e-01 -6.086806503256065e+00 -6.005837686214207e+00 3.234086369198321e+00 4.699021846536617e+00 9.234991326998052e+03 + 45980 9.920661511212907e-01 -6.166016779048537e+00 -5.931754102076604e+00 2.845988173321975e+00 5.191160716526914e+00 9.008744292714087e+03 + 46000 9.285306155636552e-01 -6.091379627318396e+00 -5.957951166111413e+00 3.229431358969648e+00 4.995598231207788e+00 9.088421003321448e+03 + 46020 9.076159055086368e-01 -6.081968831540318e+00 -6.022628923921800e+00 3.234696084090612e+00 4.575435016457167e+00 9.286659356591610e+03 + 46040 8.781644010579813e-01 -6.068414701817208e+00 -6.016899669901378e+00 3.307936947077756e+00 4.603744232263873e+00 9.269008610018995e+03 + 46060 8.966261590375787e-01 -6.128674807252696e+00 -5.973697570715760e+00 3.024641586980180e+00 4.914544861825114e+00 9.136493029150446e+03 + 46080 8.589240617693639e-01 -6.101087551653540e+00 -5.955316240345145e+00 3.207046797127908e+00 5.044088224698235e+00 9.080375913452643e+03 + 46100 8.739211096640135e-01 -6.142170080139031e+00 -5.974088292155754e+00 2.944086527498830e+00 4.909238164671434e+00 9.137685941073249e+03 + 46120 8.805460670904588e-01 -6.160615234811071e+00 -5.982884436801590e+00 2.820529283054132e+00 4.841087028976679e+00 9.164582532157927e+03 + 46140 8.966594402874921e-01 -6.180920329450290e+00 -5.947902340217479e+00 2.709265132279674e+00 5.047290485871767e+00 9.057810131478103e+03 + 46160 8.609720846127109e-01 -6.108645153294935e+00 -5.978130023836520e+00 3.107180668181516e+00 4.856618738682744e+00 9.150021582722595e+03 + 46180 8.891309228205539e-01 -6.116043413584434e+00 -5.991305472610404e+00 3.086303092701571e+00 4.802567652908430e+00 9.190390910191671e+03 + 46200 9.512295332094245e-01 -6.163171934526775e+00 -5.986032333532468e+00 2.803072608732340e+00 4.820235609906312e+00 9.174243548359696e+03 + 46220 9.925743823608261e-01 -6.178736376527546e+00 -5.975312734233944e+00 2.811295669833350e+00 4.979385703590121e+00 9.141436108923073e+03 + 46240 9.028499916711410e-01 -6.006682631094439e+00 -6.026581172630292e+00 3.661865108026519e+00 4.547604603238301e+00 9.298832433675374e+03 + 46260 9.905475460665116e-01 -6.103509603428252e+00 -5.959624970721642e+00 3.181219637396503e+00 5.007427464472810e+00 9.093546563359747e+03 + 46280 9.856565008831203e-01 -6.063999974939899e+00 -6.005157860257087e+00 3.380693785963591e+00 4.718574314260112e+00 9.232910146229293e+03 + 46300 9.868317854060463e-01 -6.038878409433588e+00 -6.019843514244683e+00 3.530849008414803e+00 4.640150322230006e+00 9.278060797230195e+03 + 46320 9.808713668706407e-01 -6.007704357707952e+00 -5.995988144271009e+00 3.644334198466209e+00 4.711610509099303e+00 9.204773455926890e+03 + 46340 1.003361535283730e+00 -6.018195638868329e+00 -5.984683405727990e+00 3.634633638184982e+00 4.827066066878128e+00 9.170090852533142e+03 + 46360 9.928029947049347e-01 -5.982335037817466e+00 -6.004405525219875e+00 3.776771579894942e+00 4.650039425833428e+00 9.230580612208647e+03 + 46380 1.029994413635385e+00 -6.017942914438843e+00 -6.004174567319483e+00 3.567804118799927e+00 4.646864098604128e+00 9.229885633001895e+03 + 46400 1.022548020002067e+00 -5.989625462536409e+00 -5.978494174812478e+00 3.774362281942298e+00 4.838279858614319e+00 9.151146239445870e+03 + 46420 1.029245211091858e+00 -5.983867300788291e+00 -6.008134384731347e+00 3.761827335720981e+00 4.622481984400851e+00 9.242017541289739e+03 + 46440 1.020189142121825e+00 -5.956209122181994e+00 -6.022278171022351e+00 4.005384521652338e+00 4.626005819058744e+00 9.285568744160906e+03 + 46460 1.107429562447294e+00 -6.074636432274575e+00 -5.985976654061473e+00 3.308424768755934e+00 4.817522935311906e+00 9.174068702676712e+03 + 46480 1.001615602748194e+00 -5.913793728939163e+00 -6.038915962182665e+00 4.131715843658667e+00 4.413244617771460e+00 9.336889645880470e+03 + 46500 1.056554707018495e+00 -5.993482696537441e+00 -6.006648279040602e+00 3.736268544710905e+00 4.660669732610444e+00 9.237481016985610e+03 + 46520 1.001338730523760e+00 -5.914377498803793e+00 -6.011708438045956e+00 4.171954107810986e+00 4.613064792768315e+00 9.253023626269813e+03 + 46540 1.065616188181594e+00 -6.016908957024450e+00 -5.965520373269309e+00 3.645748315098257e+00 4.940829515377909e+00 9.111497839385747e+03 + 46560 1.007066228262183e+00 -5.941972819988367e+00 -6.011267282829115e+00 4.012864926660507e+00 4.614965397745462e+00 9.251674517835585e+03 + 46580 1.051429956216368e+00 -6.025391080674834e+00 -5.981359892968555e+00 3.580533493281107e+00 4.833367386894833e+00 9.159911312423343e+03 + 46600 1.010591966937790e+00 -5.988500890293908e+00 -5.980291151525179e+00 3.775004230353700e+00 4.822145820816711e+00 9.156637638471004e+03 + 46620 1.056512396752328e+00 -6.085637696104891e+00 -5.988386933105334e+00 3.297786840155432e+00 4.856215770805825e+00 9.181428484707807e+03 + 46640 9.913258287267246e-01 -6.024537634592517e+00 -6.010238953136936e+00 3.564879110879077e+00 4.646984352510826e+00 9.248493622629509e+03 + 46660 9.667712774426389e-01 -6.024009557574392e+00 -6.019808456609887e+00 3.513954223776246e+00 4.538077595632705e+00 9.277978424915716e+03 + 46680 1.012256253770115e+00 -6.125793266929136e+00 -5.966542485779259e+00 3.019974348740370e+00 4.934416978081705e+00 9.114648648979874e+03 + 46700 9.172761110772630e-01 -6.014628533400526e+00 -5.975848957233569e+00 3.600394551189991e+00 4.823072878660673e+00 9.143070037083056e+03 + 46720 9.178267793505699e-01 -6.035434831276690e+00 -5.998852307041420e+00 3.497288784008906e+00 4.707351299295151e+00 9.213532317088946e+03 + 46740 9.396208660924898e-01 -6.079406958720270e+00 -5.975116683298361e+00 3.320357302371268e+00 4.919208202711832e+00 9.140830597019691e+03 + 46760 9.787384622379391e-01 -6.141198095062737e+00 -5.991098629305255e+00 2.951800975846797e+00 4.813695336043512e+00 9.189758366420401e+03 + 46780 9.168946240138081e-01 -6.046733124765542e+00 -6.016430316535546e+00 3.459818734074484e+00 4.633822148275540e+00 9.267566944102247e+03 + 46800 9.644447702023515e-01 -6.107906205149953e+00 -5.960272540301948e+00 3.192351229540711e+00 5.040086579333755e+00 9.095518289198460e+03 + 46820 9.490687349507424e-01 -6.071701976891272e+00 -5.986111073356558e+00 3.294373940005948e+00 4.785850153251788e+00 9.174458209325132e+03 + 46840 9.263478168223128e-01 -6.019260852984536e+00 -5.984050518980050e+00 3.637976176243283e+00 4.840159362878619e+00 9.168146565528912e+03 + 46860 9.549986310541327e-01 -6.035340907834312e+00 -6.044607437009500e+00 3.448815388560492e+00 4.395605544045811e+00 9.354484222306095e+03 + 46880 1.005868168781037e+00 -6.082471317243534e+00 -6.000899150881201e+00 3.231518096616500e+00 4.699918099120959e+00 9.219832570904862e+03 + 46900 9.600253819661831e-01 -5.986677471309874e+00 -6.032424101215349e+00 3.751507243150709e+00 4.488823014965374e+00 9.316858461229618e+03 + 46920 1.026666603563075e+00 -6.062311875074732e+00 -5.972791642643607e+00 3.421493816526797e+00 4.935532844357517e+00 9.133715357537843e+03 + 46940 1.023229501432172e+00 -6.040816482670267e+00 -5.984405881990998e+00 3.498685843795264e+00 4.822604242407865e+00 9.169222661644033e+03 + 46960 1.000453376694894e+00 -5.995795871128336e+00 -5.990133015680362e+00 3.745024210739944e+00 4.777541203046258e+00 9.186762852611764e+03 + 46980 1.018629910254946e+00 -6.016355909648707e+00 -5.988058099690006e+00 3.611816729114151e+00 4.774307132968949e+00 9.180435557939947e+03 + 47000 9.772524410600779e-01 -5.950848143358937e+00 -6.012859336442002e+00 3.899324850903198e+00 4.543246984019121e+00 9.256556364887409e+03 + 47020 1.035298727182403e+00 -6.033973495513307e+00 -5.959045466855176e+00 3.458993313430749e+00 4.889241649060695e+00 9.091764286812964e+03 + 47040 9.589495224925221e-01 -5.916924043268216e+00 -5.992256975144133e+00 4.162150020742001e+00 4.729576668176959e+00 9.193276351291361e+03 + 47060 9.685772226057998e-01 -5.927835970815170e+00 -6.029710357230710e+00 4.076404971447407e+00 4.491426479639027e+00 9.308480011291824e+03 + 47080 1.019468218865350e+00 -6.002177951596217e+00 -5.986616126090959e+00 3.647800686897764e+00 4.737159097133674e+00 9.176025620250395e+03 + 47100 1.022831742634128e+00 -6.006547928676476e+00 -6.035209849739507e+00 3.631897094316886e+00 4.467315908155016e+00 9.325455951549146e+03 + 47120 1.022293272171524e+00 -6.009773222131590e+00 -5.980523234102611e+00 3.624184276536950e+00 4.792142234220367e+00 9.157347779918020e+03 + 47140 9.423056859973550e-01 -5.895374629409778e+00 -5.975315283222015e+00 4.253127990493542e+00 4.794096385527482e+00 9.141399169122735e+03 + 47160 1.027915621663734e+00 -6.022381440948004e+00 -5.969576175829859e+00 3.548734707252225e+00 4.851950711148976e+00 9.123899539004036e+03 + 47180 1.076724790766702e+00 -6.093593003795228e+00 -5.991042620157881e+00 3.182734458585097e+00 4.771594631051325e+00 9.189576801926924e+03 + 47200 9.589907462149174e-01 -5.922185735565795e+00 -6.025500381257070e+00 4.061856262561983e+00 4.468607579112933e+00 9.295484401723021e+03 + 47220 1.037842817744221e+00 -6.042664240200288e+00 -6.017250601881949e+00 3.462159237189799e+00 4.608088281161518e+00 9.270090425741470e+03 + 47240 9.819795796705822e-01 -5.968707834517965e+00 -6.045703747695363e+00 3.779399774251591e+00 4.337277325707919e+00 9.357899071369449e+03 + 47260 1.010013572691110e+00 -6.022275807773817e+00 -5.987891011434825e+00 3.596985989957035e+00 4.794428811565566e+00 9.179907574650379e+03 + 47280 9.740897188651769e-01 -5.980484006628861e+00 -6.006221212009626e+00 3.845637181632835e+00 4.697850165516819e+00 9.236148688021134e+03 + 47300 9.448152764101302e-01 -5.951379869003774e+00 -5.986156980944982e+00 3.986834422173886e+00 4.787138863666788e+00 9.174598966954753e+03 + 47320 9.166005529509663e-01 -5.925688560142874e+00 -6.005115797657377e+00 4.070704348490401e+00 4.614620859356845e+00 9.232775415816768e+03 + 47340 9.851198548545493e-01 -6.044608009255396e+00 -5.988566546802008e+00 3.464987872227755e+00 4.786786622023396e+00 9.182001807310131e+03 + 47360 9.640526246689106e-01 -6.032809718373374e+00 -6.008194608582533e+00 3.540259719871117e+00 4.681603489466055e+00 9.242218240932571e+03 + 47380 9.389829112775817e-01 -6.014410531689600e+00 -5.985379181739933e+00 3.616970998640036e+00 4.783673502637906e+00 9.172219877817934e+03 + 47400 9.644741444950589e-01 -6.067070477756026e+00 -5.956100937489136e+00 3.349159559718594e+00 4.986363832411936e+00 9.082783795652038e+03 + 47420 9.476358226414632e-01 -6.052925710199912e+00 -5.979698778648117e+00 3.448130267936671e+00 4.868610640738117e+00 9.154820543277292e+03 + 47440 9.718178155550132e-01 -6.096780064715259e+00 -5.964356792332919e+00 3.161817782315639e+00 4.922212704770207e+00 9.107973207592200e+03 + 47460 9.342347111835503e-01 -6.045562708798508e+00 -5.961207038148329e+00 3.488518959970464e+00 4.972902274841636e+00 9.098351615872145e+03 + 47480 1.004395621849268e+00 -6.147587553967104e+00 -5.943212678725708e+00 2.858638675722382e+00 5.032190836268208e+00 9.043548940025654e+03 + 47500 9.352932252712870e-01 -6.033432059606342e+00 -5.970244360445858e+00 3.521355553211318e+00 4.884189100055659e+00 9.125933532819468e+03 + 47520 9.035306106016098e-01 -5.964973611041597e+00 -5.998973883521501e+00 3.871765888157765e+00 4.676531062052995e+00 9.213896633884660e+03 + 47540 9.500705343246588e-01 -6.002348667491014e+00 -5.989398977612783e+00 3.653769787706337e+00 4.728128910945173e+00 9.184533536203171e+03 + 47560 1.058680126848192e+00 -6.123864727391484e+00 -5.995591017646378e+00 2.988246940470632e+00 4.724814432119462e+00 9.203520944791037e+03 + 47580 9.933779450102438e-01 -5.986917194238927e+00 -5.973996745601135e+00 3.750046354961777e+00 4.824237570472944e+00 9.137399593099341e+03 + 47600 1.023192411970130e+00 -5.993569485678100e+00 -6.007429054107777e+00 3.737917960088068e+00 4.658334173403581e+00 9.239840714975684e+03 + 47620 9.617353405254992e-01 -5.869418807919121e+00 -6.025352057817954e+00 4.422390340607120e+00 4.526997489095588e+00 9.295033665024937e+03 + 47640 1.017926245968575e+00 -5.928967725688439e+00 -6.037614780982510e+00 4.030753386180224e+00 4.406885181604198e+00 9.332881180529850e+03 + 47660 1.049446135949654e+00 -5.959585038803749e+00 -6.013958604718921e+00 3.898377127259581e+00 4.586155697492531e+00 9.259959594976697e+03 + 47680 1.021850869143050e+00 -5.910955789202574e+00 -6.002424068973411e+00 4.191166347857600e+00 4.665941330742901e+00 9.224487394923333e+03 + 47700 1.035777978435509e+00 -5.929087991497107e+00 -6.014795287901498e+00 4.088724227730848e+00 4.596579668615578e+00 9.262541353551826e+03 + 47720 1.105539913381812e+00 -6.037597280977045e+00 -5.996219240228155e+00 3.463787876417025e+00 4.701386989628266e+00 9.205447208609179e+03 + 47740 9.781290046482486e-01 -5.858802045848045e+00 -6.006292815599252e+00 4.423884103720174e+00 4.576969279685886e+00 9.236368759384113e+03 + 47760 1.021448729452294e+00 -5.934007018234693e+00 -6.031631580577208e+00 4.034546090227980e+00 4.473970745905062e+00 9.314371657272459e+03 + 47780 9.597579824182658e-01 -5.856581177218993e+00 -6.081676067534707e+00 4.438988435860451e+00 4.146458742345918e+00 9.469470215984624e+03 + 47800 1.019281893528648e+00 -5.965087415347896e+00 -6.028633626030746e+00 3.872464444032479e+00 4.507572268547232e+00 9.305130885341976e+03 + 47820 9.688567097848912e-01 -5.911607154527433e+00 -5.998102735314928e+00 4.155959169191423e+00 4.659288159161753e+00 9.211219221217003e+03 + 47840 9.934748098728130e-01 -5.968960846338255e+00 -6.019629765402802e+00 3.876905925107859e+00 4.585957150849348e+00 9.277397188909807e+03 + 47860 1.049716418809813e+00 -6.077479430334300e+00 -6.029167161685926e+00 3.279726577390448e+00 4.557143100268823e+00 9.306810846017066e+03 + 47880 1.015357014804412e+00 -6.052510404720012e+00 -5.986539127733677e+00 3.447926946424655e+00 4.826744227902307e+00 9.175763938551667e+03 + 47900 9.970165991329032e-01 -6.049293773958754e+00 -5.981726647161199e+00 3.472440737612222e+00 4.860421635662862e+00 9.161026303656457e+03 + 47920 9.043362186140707e-01 -5.932254045547368e+00 -6.034620513277404e+00 4.045817465257281e+00 4.458013366391729e+00 9.323634550516099e+03 + 47940 9.715978377178396e-01 -6.048338942087860e+00 -5.982946268651575e+00 3.447704766459533e+00 4.823199616814192e+00 9.164761530882686e+03 + 47960 1.012887801145155e+00 -6.120270485000437e+00 -5.944972051518166e+00 3.073727275642639e+00 5.080318008042747e+00 9.048889284324729e+03 + 47980 9.069349980077585e-01 -5.967976947518326e+00 -6.022850369407328e+00 3.840870058571364e+00 4.525778378450122e+00 9.287325290350896e+03 + 48000 9.802200638679152e-01 -6.075950455434011e+00 -6.014242719884612e+00 3.255269926908890e+00 4.609605293674756e+00 9.260842836446942e+03 + 48020 1.019676289109958e+00 -6.132297044406452e+00 -5.971609034854695e+00 3.003107961493594e+00 4.925803378728896e+00 9.130103317746771e+03 + 48040 9.307626890877065e-01 -5.994544788054818e+00 -6.020081031423273e+00 3.714582714207531e+00 4.567949653064974e+00 9.278781272431908e+03 + 48060 9.591645664943167e-01 -6.025824978099593e+00 -5.970012214878137e+00 3.568981196009621e+00 4.889466719424417e+00 9.125222133666848e+03 + 48080 9.431422338479717e-01 -5.983030416998596e+00 -6.014045653639080e+00 3.759158117633214e+00 4.581063829251197e+00 9.260210410482972e+03 + 48100 1.017949080721878e+00 -6.064317642964275e+00 -5.994840958967280e+00 3.328708989290573e+00 4.727654860283420e+00 9.201238854310041e+03 + 48120 1.042634456966121e+00 -6.052839824573993e+00 -5.976959029646900e+00 3.407243389260697e+00 4.842962656247128e+00 9.146452461065901e+03 + 48140 9.408577083036700e-01 -5.821211183224125e+00 -6.015427341556861e+00 4.660994036821984e+00 4.545774800822046e+00 9.264465815326656e+03 + 48160 1.030585516462605e+00 -5.865872977161039e+00 -6.067777087701285e+00 4.345352679857655e+00 4.185988032575432e+00 9.426256047023180e+03 + 48180 1.139682932914843e+00 -5.970015017531304e+00 -5.978705624017688e+00 3.859416467103258e+00 4.809513659791436e+00 9.151807002856847e+03 + 48200 1.072191356002077e+00 -5.849974812903472e+00 -6.038610066321944e+00 4.393222717932279e+00 4.310049901592288e+00 9.335963103269078e+03 + 48220 1.078872925780270e+00 -5.855936368367009e+00 -6.049032890073923e+00 4.424049260847038e+00 4.315259151615773e+00 9.368169864033069e+03 + 48240 1.114112736498687e+00 -5.916753758017330e+00 -6.008179187767999e+00 4.158532745584832e+00 4.633553779916965e+00 9.242177451092912e+03 + 48260 1.085934645707828e+00 -5.895101522602380e+00 -6.055661290811640e+00 4.213949819014003e+00 4.291990783412603e+00 9.388687871725870e+03 + 48280 1.031792152914885e+00 -5.844732589181486e+00 -6.040697452584264e+00 4.486564227068834e+00 4.361303655945483e+00 9.342397504992032e+03 + 48300 1.103401396094482e+00 -5.989786610906229e+00 -5.987172349438199e+00 3.729813875412410e+00 4.744825369317494e+00 9.177706875608743e+03 + 48320 1.054332432966434e+00 -5.957918381279505e+00 -5.984491430585625e+00 3.939726721907716e+00 4.787140160625885e+00 9.169476899844631e+03 + 48340 1.015535377382261e+00 -5.937572199674421e+00 -5.999900377501064e+00 4.043704359137872e+00 4.685806316802943e+00 9.216723785746890e+03 + 48360 1.002654139582188e+00 -5.954622882505687e+00 -6.031376537613969e+00 3.967780220100761e+00 4.527048854879260e+00 9.313609187953723e+03 + 48380 1.033057655788855e+00 -6.034832171827000e+00 -6.003961349630051e+00 3.512667270907924e+00 4.689932309207103e+00 9.229192032738181e+03 + 48400 9.733471434508630e-01 -5.976870677864805e+00 -5.973167511658129e+00 3.832692291497569e+00 4.853956444919422e+00 9.134844798083617e+03 + 48420 1.026776532070965e+00 -6.078892048606168e+00 -5.988384919938065e+00 3.248973641850832e+00 4.768679580595971e+00 9.181433617400513e+03 + 48440 9.731082347646042e-01 -6.018209502113998e+00 -5.995583100109060e+00 3.651130300761780e+00 4.781054602498525e+00 9.203475374448963e+03 + 48460 9.615964223609431e-01 -6.017108573009856e+00 -6.005932901661578e+00 3.623726818908322e+00 4.687899253219687e+00 9.235267452319675e+03 + 48480 9.631697477898618e-01 -6.032250137615542e+00 -6.004211363280502e+00 3.540877721749003e+00 4.701880702967109e+00 9.229967592925723e+03 + 48500 9.780881068752744e-01 -6.063567858407954e+00 -5.978014048861581e+00 3.358358249730126e+00 4.849621463554641e+00 9.149676515529101e+03 + 48520 9.534173308651359e-01 -6.030556597427357e+00 -6.004455522500621e+00 3.549595406398676e+00 4.699471817756288e+00 9.230734843158583e+03 + 48540 9.487392879841468e-01 -6.023278130289144e+00 -6.005419689715017e+00 3.654067200383567e+00 4.756613129744949e+00 9.233698690948364e+03 + 48560 9.140006243709936e-01 -5.968274703704282e+00 -6.031956717918466e+00 3.892636711452368e+00 4.526964731074670e+00 9.315416861527508e+03 + 48580 1.018747999182326e+00 -6.116064409438147e+00 -5.986152939765185e+00 3.146709469690728e+00 4.892681232287837e+00 9.174608827126467e+03 + 48600 9.692345149179286e-01 -6.029161728581490e+00 -6.020304006172298e+00 3.561992458460034e+00 4.612854871261733e+00 9.279490070758904e+03 + 48620 9.448235242678893e-01 -5.977201698153387e+00 -6.010767026289907e+00 3.833615483895861e+00 4.640878175518219e+00 9.250116336716439e+03 + 48640 9.709584392157622e-01 -5.994070234062184e+00 -5.994748288496804e+00 3.719183715916007e+00 4.715290222423834e+00 9.200925243190643e+03 + 48660 1.011455341634459e+00 -6.024137007239858e+00 -5.972360033007915e+00 3.576366460977876e+00 4.873677859478561e+00 9.132407540970195e+03 + 48680 1.049542287562041e+00 -6.046544659943481e+00 -6.022896800844131e+00 3.438906803799227e+00 4.574696470242065e+00 9.287468639337689e+03 + 48700 1.018097753043231e+00 -5.968165557371307e+00 -5.990618102568760e+00 3.817441808485307e+00 4.688515819441395e+00 9.188270282457133e+03 + 48720 1.005127079261219e+00 -5.918821708936687e+00 -6.002302857493188e+00 4.094454937858867e+00 4.615093264181448e+00 9.224132191875873e+03 + 48740 1.111683962178856e+00 -6.048451344368667e+00 -5.972018029516452e+00 3.468882594903976e+00 4.907774516802645e+00 9.131363705013911e+03 + 48760 1.100551782574782e+00 -6.010621432116328e+00 -6.031499697091800e+00 3.626918876648790e+00 4.507032648258567e+00 9.314015380052400e+03 + 48780 1.024850020859685e+00 -5.885985841417209e+00 -6.053755409938208e+00 4.368394989048728e+00 4.405036164344327e+00 9.382794820766820e+03 + 48800 1.038986612965877e+00 -5.905658645886709e+00 -6.083158880918434e+00 4.134813515321957e+00 4.115579697697194e+00 9.474080432669640e+03 + 48820 1.065642094635793e+00 -5.950639225197349e+00 -6.045418509988269e+00 3.956916960731101e+00 4.412679640414722e+00 9.356960206620961e+03 + 48840 1.088593118493099e+00 -5.995250459161168e+00 -6.030081589277753e+00 3.681708920399130e+00 4.481703181169735e+00 9.309647072265925e+03 + 48860 1.071772352166674e+00 -5.991095504085848e+00 -6.024926264347941e+00 3.786491533309456e+00 4.592230072591290e+00 9.293720155024484e+03 + 48880 1.001595232113722e+00 -5.915372324625001e+00 -6.003595410325644e+00 4.156808974756324e+00 4.650218364184844e+00 9.228094773860739e+03 + 48900 9.522522171856076e-01 -5.875696612227006e+00 -6.020114959600915e+00 4.382311418324385e+00 4.553038919036372e+00 9.278891324245807e+03 + 48920 9.892203865307139e-01 -5.963034533138735e+00 -6.031248344429786e+00 3.892616992295109e+00 4.500922731808715e+00 9.313229801493380e+03 + 48940 1.014970859695119e+00 -6.033679494980607e+00 -6.019187502582506e+00 3.472444007213311e+00 4.555659270191786e+00 9.276062173261718e+03 + 48960 9.523003962799221e-01 -5.969466204279728e+00 -5.994394434848235e+00 3.923392046465469e+00 4.780250288909890e+00 9.199860701688054e+03 + 48980 9.871827717184365e-01 -6.041295292798919e+00 -6.010701557225357e+00 3.439229341836943e+00 4.614903305865623e+00 9.249936703594944e+03 + 49000 1.005408577802902e+00 -6.079704183843540e+00 -6.001204375754503e+00 3.289124286455544e+00 4.739882332308837e+00 9.220755673066991e+03 + 49020 9.646997179670587e-01 -6.024868802079363e+00 -6.013272912165401e+00 3.592445446442863e+00 4.659030840787002e+00 9.257848098872293e+03 + 49040 1.063414115325231e+00 -6.171582997403231e+00 -5.992613837430204e+00 2.737161646098397e+00 4.764830258051518e+00 9.194397139995641e+03 + 49060 9.272678602195490e-01 -5.967719936118869e+00 -6.011031254582509e+00 3.879293731123520e+00 4.630593438100433e+00 9.250943378711341e+03 + 49080 9.768093290486305e-01 -6.037914629294730e+00 -5.983923268993870e+00 3.548875242848396e+00 4.858901988831940e+00 9.167750113379392e+03 + 49100 9.674611881450518e-01 -6.018260586084838e+00 -5.970667012711619e+00 3.594100035824495e+00 4.867389699215193e+00 9.127223885654030e+03 + 49120 9.747882291705945e-01 -6.019686567967014e+00 -5.996577846526719e+00 3.578410102716620e+00 4.711103957289883e+00 9.206563200482971e+03 + 49140 1.021847620355163e+00 -6.076433005376655e+00 -6.007752432520269e+00 3.251920132023790e+00 4.646294609649459e+00 9.240876710196428e+03 + 49160 9.400928245145591e-01 -5.940175489823420e+00 -6.030113493139533e+00 3.967202456377268e+00 4.450764523475116e+00 9.309753345281018e+03 + 49180 9.838042027639273e-01 -5.990040666382249e+00 -6.010533748769880e+00 3.719286966791073e+00 4.601612516427052e+00 9.249445610969804e+03 + 49200 9.882322946811980e-01 -5.982494338435917e+00 -6.010296868804792e+00 3.784337917287297e+00 4.624691485481544e+00 9.248691904699102e+03 + 49220 9.631025896087370e-01 -5.928152732037622e+00 -6.060650908382201e+00 4.025298882660586e+00 4.264473850063490e+00 9.404181969978032e+03 + 49240 1.026215513593853e+00 -6.004541483379546e+00 -6.026062039176782e+00 3.679554182329038e+00 4.555979820646058e+00 9.297242740626350e+03 + 49260 1.030853008640274e+00 -5.995246156069519e+00 -6.032290463483811e+00 3.761312004244114e+00 4.548597858483204e+00 9.316429978721832e+03 + 49280 9.761273331256058e-01 -5.901852527982892e+00 -6.042341252303732e+00 4.182307804325788e+00 4.375599808715698e+00 9.347501731213661e+03 + 49300 1.044738314500833e+00 -5.993198292501122e+00 -5.973005401185380e+00 3.770816816853895e+00 4.886767523628722e+00 9.134347942879691e+03 + 49320 1.019364009519541e+00 -5.946026377045889e+00 -6.008861007014701e+00 3.970872129589444e+00 4.610065960680968e+00 9.244245690602624e+03 + 49340 1.065228019032234e+00 -6.005690111766587e+00 -5.967890204904438e+00 3.672959995219149e+00 4.890012909938289e+00 9.118752441800440e+03 + 49360 1.039341815884592e+00 -5.959783951023377e+00 -5.995329881733830e+00 3.910604444755188e+00 4.706494209900767e+00 9.202719247829560e+03 + 49380 1.063173117837755e+00 -5.989948140148889e+00 -6.041765707599088e+00 3.687429707297512e+00 4.389885216255821e+00 9.345699373890020e+03 + 49400 1.011988625905621e+00 -5.914486105747187e+00 -6.002360311039925e+00 4.161084859835595e+00 4.656497574555375e+00 9.224287694166540e+03 + 49420 1.065170747685042e+00 -5.999039876668198e+00 -5.965824865844365e+00 3.709297137595300e+00 4.900022869752068e+00 9.112432854331237e+03 + 49440 1.051669161450359e+00 -5.989467448667519e+00 -6.002690577040401e+00 3.734014898632972e+00 4.658085649243381e+00 9.225313680776328e+03 + 49460 1.043186952203883e+00 -5.995735806172373e+00 -6.029158904403056e+00 3.651367428821360e+00 4.459446826573044e+00 9.306778235083257e+03 + 49480 9.704208216590099e-01 -5.916310893504618e+00 -6.022696254441475e+00 4.149428478466396e+00 4.538547272885565e+00 9.286863933818331e+03 + 49500 9.846691602425099e-01 -5.972460889498598e+00 -6.006725407232146e+00 3.825144789502567e+00 4.628392626259555e+00 9.237714299610238e+03 + 49520 9.830162561994052e-01 -6.007515617761664e+00 -6.061518076295020e+00 3.560291514611001e+00 4.250201040859021e+00 9.406884618180440e+03 + 49540 9.563193122460731e-01 -6.006102979413655e+00 -5.987977305961195e+00 3.677766958287668e+00 4.781847380190596e+00 9.180199549324425e+03 + 49560 9.496843337182070e-01 -6.027197903720966e+00 -5.975649473910049e+00 3.570315476110371e+00 4.866314537178387e+00 9.142442040141437e+03 + 49580 9.905523653144579e-01 -6.108880474928243e+00 -5.964001413944545e+00 3.142663077733176e+00 4.974581065863802e+00 9.106854807614136e+03 + 49600 9.948488223490037e-01 -6.129629717418061e+00 -5.968804332848658e+00 3.016203035934646e+00 4.939687281779984e+00 9.121534201421306e+03 + 49620 9.824913379715953e-01 -6.119542933140023e+00 -5.987048447909253e+00 3.037605458445725e+00 4.798409296096132e+00 9.177358193547325e+03 + 49640 9.402803569188763e-01 -6.059879871058753e+00 -6.012439454201580e+00 3.345578458356621e+00 4.617988673331291e+00 9.255291549559355e+03 + 49660 9.357193007933300e-01 -6.051918842896614e+00 -5.962520523254814e+00 3.458720741328510e+00 4.972059727056982e+00 9.102359286802923e+03 + 49680 9.869178361013634e-01 -6.117773300507631e+00 -5.994343881559730e+00 3.075588790352731e+00 4.784339614592431e+00 9.199707659316986e+03 + 49700 9.471771613811811e-01 -6.044115934185584e+00 -5.975071660282525e+00 3.543726821932316e+00 4.940189727250530e+00 9.140657798228658e+03 + 49720 8.845688482930033e-01 -5.929610318326787e+00 -5.997010519989712e+00 4.078326032908327e+00 4.691303644812318e+00 9.207847107290261e+03 + 49740 1.034285742870357e+00 -6.120598335403827e+00 -5.933503796486266e+00 3.130836824319832e+00 5.205162619570791e+00 9.014037500406581e+03 + 49760 1.014923792631830e+00 -6.052656543478963e+00 -6.037048587195011e+00 3.414086389622610e+00 4.503709689928494e+00 9.331130138216462e+03 + 49780 1.028580829600424e+00 -6.037546398557192e+00 -6.013982221086176e+00 3.481697487037759e+00 4.617006640621010e+00 9.260035704968246e+03 + 49800 9.918987547662945e-01 -5.951652863996735e+00 -6.025406607469065e+00 3.984074982151195e+00 4.560569573778159e+00 9.295206033565137e+03 + 49820 9.649368419862987e-01 -5.887456547210538e+00 -6.049334921231297e+00 4.312110963005241e+00 4.382580288780630e+00 9.369103993224971e+03 + 49840 1.039319870474989e+00 -5.982552057062671e+00 -6.016575415731664e+00 3.818345183679530e+00 4.622977793104435e+00 9.267984283474150e+03 + 49860 1.019469996128546e+00 -5.946549854149473e+00 -5.996088098929134e+00 3.936241522297452e+00 4.651785254754035e+00 9.205038957284776e+03 + 49880 1.002828677524869e+00 -5.918236362888348e+00 -5.983446595432111e+00 4.158497632741261e+00 4.784050386224103e+00 9.166280693043114e+03 + 49900 1.017580672109399e+00 -5.938879381847934e+00 -5.983775448277921e+00 4.008123497535477e+00 4.750323336450666e+00 9.167285780683491e+03 + 49920 1.043722065121099e+00 -5.978297640544159e+00 -5.977490124566501e+00 3.873178167412284e+00 4.877815049118693e+00 9.148068505029394e+03 + 49940 1.055274561657066e+00 -5.999348038846908e+00 -6.010039087432594e+00 3.669275844117397e+00 4.607886188703972e+00 9.247903131288473e+03 + 49960 1.053223385952575e+00 -6.005283149089586e+00 -5.980163485038802e+00 3.649200437503405e+00 4.793441435738456e+00 9.156250672098911e+03 + 49980 1.036636083373875e+00 -5.990016091464960e+00 -5.968394003875577e+00 3.777478940083470e+00 4.901636313028949e+00 9.120268941147277e+03 + 50000 9.347809848277790e-01 -5.848348956788850e+00 -6.033723907284978e+00 4.481469906841286e+00 4.417018254411643e+00 9.320835921824397e+03 + 50020 1.048042142643880e+00 -6.027074600230936e+00 -5.948231713866965e+00 3.569671727389160e+00 5.022399781788312e+00 9.058796258268056e+03 + 50040 1.010882377579863e+00 -5.981403984413469e+00 -5.978673967917296e+00 3.765968972855084e+00 4.781645150044795e+00 9.151681005690358e+03 + 50060 9.628503024032478e-01 -5.921213832272064e+00 -6.012814447754034e+00 4.088254949554337e+00 4.562270040307435e+00 9.256409066572216e+03 + 50080 1.010223339509348e+00 -6.002484855528738e+00 -5.985398527731820e+00 3.687855869811480e+00 4.785968208122068e+00 9.172254751634498e+03 + 50100 1.001030790155916e+00 -6.001879219812774e+00 -5.979512858175347e+00 3.669126864370451e+00 4.797557974075836e+00 9.154237247691854e+03 + 50120 9.728502085737065e-01 -5.972406445479762e+00 -5.997108210553504e+00 3.814461116433904e+00 4.672619758794681e+00 9.208127962122860e+03 + 50140 9.603116292019739e-01 -5.966482129366100e+00 -5.981868989248910e+00 3.872450464049140e+00 4.784096733493175e+00 9.161468216480474e+03 + 50160 1.029386271117250e+00 -6.080345801056568e+00 -5.975217590065412e+00 3.276575011392812e+00 4.880237467442100e+00 9.141139378609003e+03 + 50180 9.916519387234235e-01 -6.038637136080856e+00 -6.019009158140265e+00 3.460111635805110e+00 4.572818522559757e+00 9.275504784305849e+03 + 50200 9.270338004349133e-01 -5.962580219456789e+00 -6.030402319547695e+00 3.815619853236619e+00 4.426174859078568e+00 9.310618299750673e+03 + 50220 9.772307223112187e-01 -6.061019967596733e+00 -5.998164756649634e+00 3.371590818341882e+00 4.732515166412587e+00 9.211408895894268e+03 + 50240 9.113991201335150e-01 -5.992614515377489e+00 -6.012670097272196e+00 3.705614733838208e+00 4.590452479007527e+00 9.256000499062413e+03 + 50260 9.469536417090276e-01 -6.079117499633528e+00 -5.999036126248356e+00 3.247634500973351e+00 4.707474139503494e+00 9.214091720683818e+03 + 50280 9.947909829129837e-01 -6.182945133191103e+00 -5.960842997103935e+00 2.741104279764050e+00 5.016449115371047e+00 9.097253717556239e+03 + 50300 9.444270115102688e-01 -6.138822663369643e+00 -5.972223501829921e+00 2.963687745957625e+00 4.920325912655633e+00 9.132010053989628e+03 + 50320 9.467215890815247e-01 -6.165152545747036e+00 -5.969149766839883e+00 2.829630942969079e+00 4.955109230785963e+00 9.122606514505844e+03 + 50340 8.884683631481608e-01 -6.093373377640092e+00 -5.960204716384486e+00 3.216048048805449e+00 4.980723109518870e+00 9.095308242407968e+03 + 50360 9.354639546879521e-01 -6.167437301137475e+00 -5.955414411845856e+00 2.823279159329291e+00 5.040747400077841e+00 9.080688717986763e+03 + 50380 9.200394577070150e-01 -6.138712224708702e+00 -5.972950089405519e+00 2.897430002605848e+00 4.849261835124262e+00 9.134207284956599e+03 + 50400 8.877300132711061e-01 -6.073906430188877e+00 -5.996251543417921e+00 3.308574975440318e+00 4.754481352334034e+00 9.205537301505667e+03 + 50420 9.766528264332138e-01 -6.174564377184337e+00 -6.018075687715577e+00 2.697370669110385e+00 4.595952940586443e+00 9.272634128519585e+03 + 50440 9.367383906562713e-01 -6.073439602714039e+00 -6.009370139880023e+00 3.350359741294610e+00 4.718256511604864e+00 9.245839875080566e+03 + 50460 1.016296505323768e+00 -6.144219573501404e+00 -6.004724122993658e+00 2.917777535141496e+00 4.718781998808172e+00 9.231562184673910e+03 + 50480 9.779204020810265e-01 -6.047345913998645e+00 -6.000794821385687e+00 3.465381575437741e+00 4.732685152979649e+00 9.219480161314723e+03 + 50500 9.932387072138371e-01 -6.041047351547241e+00 -5.964855662594410e+00 3.473517260779823e+00 4.911021729372735e+00 9.109465779788108e+03 + 50520 9.598239489220848e-01 -5.967993160364544e+00 -5.993271187034201e+00 3.852080507885196e+00 4.706930166986039e+00 9.196381278041974e+03 + 50540 9.919356155580373e-01 -5.997569545982326e+00 -5.963915070483893e+00 3.742363477393493e+00 4.935612683718741e+00 9.106596916839404e+03 + 50560 9.914927702750076e-01 -5.981534594532715e+00 -6.001302687568809e+00 3.796533506255475e+00 4.683022056939716e+00 9.221018954930403e+03 + 50580 9.982174594185610e-01 -5.979366865785390e+00 -5.986172076819497e+00 3.857482124237686e+00 4.818405549376838e+00 9.174530781267473e+03 + 50600 9.926025508454089e-01 -5.959970561475489e+00 -6.022797143781956e+00 3.849287751892840e+00 4.488527793906915e+00 9.287142927246781e+03 + 50620 9.804371044233543e-01 -5.932814417656726e+00 -5.981051104687015e+00 4.048096536587424e+00 4.771114015056305e+00 9.158954381747775e+03 + 50640 9.855910480561910e-01 -5.931708444238303e+00 -5.997701873332740e+00 4.047750158614251e+00 4.668805676303854e+00 9.209966582243898e+03 + 50660 1.003115410399010e+00 -5.949290560859173e+00 -5.996972927367745e+00 3.963276729286906e+00 4.689477201972318e+00 9.207740965030876e+03 + 50680 1.054054797389577e+00 -6.018796428655352e+00 -5.948621286531692e+00 3.647487548112994e+00 5.050444073755195e+00 9.059995375574263e+03 + 50700 1.024246155194408e+00 -5.969916257774501e+00 -6.008902537671252e+00 3.888918811269142e+00 4.665053558994677e+00 9.244370355984600e+03 + 50720 1.059345644717179e+00 -6.019978664659551e+00 -5.930033198097449e+00 3.666262659011285e+00 5.182743447026842e+00 9.003496197036568e+03 + 50740 1.033285188610389e+00 -5.979641565786328e+00 -6.017426513388751e+00 3.702128324705009e+00 4.485161308370151e+00 9.270621202637658e+03 + 50760 1.026365032062761e+00 -5.969388456763151e+00 -5.993536230824522e+00 3.859696151959576e+00 4.721035896443227e+00 9.197229479995653e+03 + 50780 1.034164795388583e+00 -5.986802164927403e+00 -6.003609126346675e+00 3.758525435160444e+00 4.662017261822109e+00 9.228107331114728e+03 + 50800 9.724304132940095e-01 -5.905810767781840e+00 -5.999597888521965e+00 4.159561518712751e+00 4.621021357912925e+00 9.215807262960543e+03 + 50820 9.742110337787011e-01 -5.923625822752065e+00 -5.993044201855982e+00 4.111304282544733e+00 4.712693207270596e+00 9.195688263539105e+03 + 50840 1.016522934943721e+00 -6.005333403402849e+00 -5.997220702411089e+00 3.669067610973946e+00 4.715651995505054e+00 9.208517474534847e+03 + 50860 9.855986051312848e-01 -5.984671633611327e+00 -6.032489785996475e+00 3.770667263086021e+00 4.496088032255339e+00 9.317032321046712e+03 + 50880 9.818174041362580e-01 -6.009441543384095e+00 -6.028771018671472e+00 3.649519746773015e+00 4.538526908446260e+00 9.305572422411053e+03 + 50900 9.265598581227038e-01 -5.962208828111066e+00 -6.040849443679447e+00 3.860000552682661e+00 4.408433968493095e+00 9.342854572039438e+03 + 50920 9.838843325524833e-01 -6.080871460471497e+00 -5.987458629093135e+00 3.278981636890721e+00 4.815372570254209e+00 9.178593232183581e+03 + 50940 9.329269729867284e-01 -6.034508528755980e+00 -6.037082921968420e+00 3.443293876610036e+00 4.428511312398145e+00 9.331255283737177e+03 + 50960 9.837277722685468e-01 -6.133371526563404e+00 -5.996071267855140e+00 3.000699604108495e+00 4.789098936757714e+00 9.204999426843136e+03 + 50980 8.702854982158668e-01 -5.981775451855867e+00 -6.060146978459880e+00 3.777657461830151e+00 4.327636028115366e+00 9.402614208273910e+03 + 51000 9.303081706730552e-01 -6.081232189657023e+00 -5.989764867404089e+00 3.324619873666510e+00 4.849839392565235e+00 9.185656808821976e+03 + 51020 9.362062832949892e-01 -6.094201533224385e+00 -5.994795858784208e+00 3.142074241480663e+00 4.712877007094562e+00 9.201079260013401e+03 + 51040 8.916724519068148e-01 -6.023573367327862e+00 -5.991655183484181e+00 3.585614088628065e+00 4.768893239581466e+00 9.191451222172351e+03 + 51060 9.496049770041730e-01 -6.095008359988786e+00 -5.991024599229093e+00 3.215032615465062e+00 4.812123461182193e+00 9.189516493543077e+03 + 51080 9.619916911226388e-01 -6.090569294193849e+00 -5.977867331693296e+00 3.173839925741933e+00 4.820992034992443e+00 9.149226195549452e+03 + 51100 9.658689906463416e-01 -6.064901932694718e+00 -5.972304744806273e+00 3.371965645125561e+00 4.903673027349527e+00 9.132206230068714e+03 + 51120 9.046054585225609e-01 -5.931771938116999e+00 -5.991746600862268e+00 4.094039390014879e+00 4.749655595482483e+00 9.191705148152854e+03 + 51140 9.704872552337590e-01 -5.981210451993307e+00 -6.024449021869296e+00 3.843386754803953e+00 4.595104195428959e+00 9.292240537702499e+03 + 51160 1.056813943904141e+00 -6.069305609638939e+00 -5.945723842710056e+00 3.393456172336288e+00 5.103081802258558e+00 9.051173173418034e+03 + 51180 1.000936629768517e+00 -5.958944049570591e+00 -6.013813275098727e+00 3.910008724303332e+00 4.594941140335565e+00 9.259489118274239e+03 + 51200 1.076942797090729e+00 -6.056011617741278e+00 -5.965345796768132e+00 3.422183047183304e+00 4.942800221701567e+00 9.110967684296853e+03 + 51220 1.001952029979790e+00 -5.936437209989361e+00 -6.015231062650301e+00 4.022384837293339e+00 4.569938342004929e+00 9.263845047357210e+03 + 51240 1.009760259942262e+00 -5.944456743464603e+00 -6.004084448473741e+00 4.028100334402474e+00 4.685708824882480e+00 9.229545729503996e+03 + 51260 1.041214657757352e+00 -5.989762400399491e+00 -5.996717450140490e+00 3.789934647964235e+00 4.749997676060953e+00 9.206963830070823e+03 + 51280 9.873780543116208e-01 -5.912741161960450e+00 -5.985079689066913e+00 4.179353597853135e+00 4.763974580856937e+00 9.171288347258091e+03 + 51300 9.458221571843548e-01 -5.853779710132804e+00 -5.997559365352577e+00 4.508777349786932e+00 4.683172319685257e+00 9.209552678828681e+03 + 51320 9.819913962944069e-01 -5.911708223714713e+00 -6.001413967189768e+00 4.182449487543105e+00 4.667345226590403e+00 9.221385642385763e+03 + 51340 1.011379443511577e+00 -5.960385247248838e+00 -5.990296655882952e+00 3.918690910411009e+00 4.746934973258399e+00 9.187284884095849e+03 + 51360 1.072304499396025e+00 -6.059768862924918e+00 -5.973504851488315e+00 3.372341523386148e+00 4.867682826367751e+00 9.135904468082566e+03 + 51380 1.009567364433845e+00 -5.979075618233754e+00 -6.016322092095097e+00 3.810734851105227e+00 4.596859834320194e+00 9.267195268590232e+03 + 51400 9.758340396241678e-01 -5.942925286669498e+00 -5.984994678059278e+00 4.071550838741338e+00 4.829981883163944e+00 9.171026010426125e+03 + 51420 9.995822326524497e-01 -5.993505503160767e+00 -6.003904430537700e+00 3.719813360193166e+00 4.660101109966003e+00 9.229039047119042e+03 + 51440 9.301334440437113e-01 -5.907991783603136e+00 -6.040033829323480e+00 4.174542386200208e+00 4.416336526233454e+00 9.340323695294672e+03 + 51460 9.538107309061349e-01 -5.962955583773232e+00 -6.000556628319814e+00 3.878656771273245e+00 4.662745754743936e+00 9.218689658912770e+03 + 51480 9.471465747023062e-01 -5.970918029893483e+00 -5.959029695731681e+00 3.882079184794659e+00 4.950343839265495e+00 9.091691857314732e+03 + 51500 9.490321868955238e-01 -5.989309161411400e+00 -6.015989186165962e+00 3.791552111155077e+00 4.638351280293898e+00 9.266193508301110e+03 + 51520 9.535641696492776e-01 -6.011809454547708e+00 -6.027959787965264e+00 3.604144974948812e+00 4.511407261209192e+00 9.303107696895384e+03 + 51540 1.005071032913334e+00 -6.105500555478793e+00 -6.032883225040666e+00 3.147533872937250e+00 4.564513821808542e+00 9.318274688095309e+03 + 51560 9.380748835465266e-01 -6.025870830866712e+00 -5.989247335313960e+00 3.537476557505350e+00 4.747774336436866e+00 9.184075832812823e+03 + 51580 9.259592934249862e-01 -6.026089046347916e+00 -6.016283967517524e+00 3.551921430671273e+00 4.608223710646426e+00 9.267093792332176e+03 + 51600 9.147637762751668e-01 -6.026768696214934e+00 -5.988134491832954e+00 3.598123864851806e+00 4.819967445036944e+00 9.180673772076632e+03 + 51620 9.870478551098852e-01 -6.148591727285904e+00 -5.980150487319964e+00 2.899391151860252e+00 4.866606817942323e+00 9.156224908340382e+03 + 51640 8.982848445049423e-01 -6.028480720906710e+00 -6.003435455185428e+00 3.576760548170372e+00 4.720574339684317e+00 9.227592642900363e+03 + 51660 9.743162099801198e-01 -6.147056358201722e+00 -5.967176388004423e+00 2.937969170891938e+00 4.970867796100254e+00 9.116570496834482e+03 + 51680 9.065447238652278e-01 -6.046621842401782e+00 -6.044849384456986e+00 3.482974886166088e+00 4.493152613972086e+00 9.355225788010583e+03 + 51700 9.252719405794706e-01 -6.066727533320868e+00 -6.007182571070153e+00 3.356108654160840e+00 4.698025041957573e+00 9.239126641171921e+03 + 51720 9.154243715009501e-01 -6.035377344101134e+00 -6.044691088574472e+00 3.479945081909376e+00 4.426464119846168e+00 9.354753219253567e+03 + 51740 9.560427940661892e-01 -6.069065215884385e+00 -5.976734227988724e+00 3.336016496016396e+00 4.866195316687483e+00 9.145765978635041e+03 + 51760 9.346537403776455e-01 -5.997849578075826e+00 -6.000120622853693e+00 3.746846751005250e+00 4.733806060447694e+00 9.217406971760780e+03 + 51780 1.008562057280396e+00 -6.064088041047438e+00 -5.949124649880481e+00 3.370607132802836e+00 5.030744715410787e+00 9.061529847140102e+03 + 51800 1.015131164922165e+00 -6.030699638438955e+00 -5.963740228703680e+00 3.518871968992393e+00 4.903363261627513e+00 9.106032651749667e+03 + 51820 1.007063507540216e+00 -5.980932020272008e+00 -5.985570945107920e+00 3.730144171719611e+00 4.703506747440505e+00 9.172800647356073e+03 + 51840 1.027943325767666e+00 -5.982298529524112e+00 -6.005240055729294e+00 3.778483857861036e+00 4.646750064201173e+00 9.233143568023681e+03 + 51860 1.026476534990275e+00 -5.959518428509644e+00 -6.046258826899614e+00 3.874383585628508e+00 4.376306795040033e+00 9.359587227077636e+03 + 51880 1.052284957712779e+00 -5.985500434120616e+00 -5.983253124512844e+00 3.805377306000628e+00 4.818281705538494e+00 9.165712052839463e+03 + 51900 1.045666458477144e+00 -5.968220015717245e+00 -5.999227351851104e+00 3.870046032849890e+00 4.691997110399514e+00 9.214666312535022e+03 + 51920 1.046688056766279e+00 -5.967247812089924e+00 -6.022051925049804e+00 3.890709504236362e+00 4.576015806711657e+00 9.284857125085031e+03 + 51940 9.855932020874038e-01 -5.879925685450293e+00 -6.050061835027734e+00 4.307405859285987e+00 4.330457759928261e+00 9.371369888927360e+03 + 51960 1.110355275138234e+00 -6.071909511313173e+00 -5.987444286967867e+00 3.304976512023054e+00 4.789988901165024e+00 9.178564225228083e+03 + 51980 9.929521519905856e-01 -5.910473081707128e+00 -6.020697101072803e+00 4.160731333014965e+00 4.527807956705388e+00 9.280670102762710e+03 + 52000 1.008408035924027e+00 -5.950135202123340e+00 -6.039454031686636e+00 3.910558942152007e+00 4.397676400755358e+00 9.338521010698263e+03 + 52020 9.650096050577709e-01 -5.906788417566562e+00 -5.997993144246366e+00 4.205739054970559e+00 4.682027400489286e+00 9.210882852758918e+03 + 52040 1.022933414540078e+00 -6.014578286283375e+00 -5.963866836575396e+00 3.612485947212137e+00 4.903678939006832e+00 9.106455099707433e+03 + 52060 1.006202595740163e+00 -6.012249866807991e+00 -6.011214842072961e+00 3.575835348497304e+00 4.581778620695411e+00 9.251525328875889e+03 + 52080 1.052417697164816e+00 -6.107534096237893e+00 -5.996008313858428e+00 3.089946653128287e+00 4.730344954110221e+00 9.204817581149982e+03 + 52100 9.431680840612089e-01 -5.977941204102937e+00 -6.023459131354882e+00 3.823355159989752e+00 4.561984177832610e+00 9.289194471499681e+03 + 52120 9.659619327480997e-01 -6.040284890910605e+00 -5.973514128472051e+00 3.472215774673018e+00 4.855623825337283e+00 9.135919492612627e+03 + 52140 9.308807677781163e-01 -6.011977845369612e+00 -5.970509228467302e+00 3.582762387161297e+00 4.820881602662089e+00 9.126732443230156e+03 + 52160 9.071861400048858e-01 -5.993126500493627e+00 -5.952020985588605e+00 3.735003116506627e+00 4.971037344149133e+00 9.070345152608201e+03 + 52180 9.653304313496931e-01 -6.088875063270415e+00 -5.969421063264388e+00 3.191642640839530e+00 4.877565994320890e+00 9.123404892128525e+03 + 52200 9.164479643663841e-01 -6.020947804289304e+00 -6.026905995779346e+00 3.551747887317327e+00 4.517535029754352e+00 9.299831728682744e+03 + 52220 9.297632623658564e-01 -6.040706533150455e+00 -5.978767466085873e+00 3.483262439655498e+00 4.838926147779983e+00 9.151988193854344e+03 + 52240 9.402843507872609e-01 -6.049955312177967e+00 -5.957535012511811e+00 3.459884846562414e+00 4.990576509240629e+00 9.087133281453420e+03 + 52260 9.295722169973417e-01 -6.013645720742579e+00 -5.990555231031236e+00 3.596533569943698e+00 4.729122735107968e+00 9.188084563107286e+03 + 52280 9.903536822885919e-01 -6.059673795152221e+00 -6.013065422301480e+00 3.325546476652243e+00 4.593178966183586e+00 9.257212874981069e+03 + 52300 1.019880398791717e+00 -6.041306430727134e+00 -5.970509573751407e+00 3.526460617785359e+00 4.932987126318192e+00 9.126733210775525e+03 + 52320 1.007240931584947e+00 -5.955597470598349e+00 -6.010101335371619e+00 3.887351002256649e+00 4.574381376282718e+00 9.248102214581102e+03 + 52340 1.023622438577219e+00 -5.928661719555032e+00 -6.026252365879883e+00 4.048652284205052e+00 4.488271690904042e+00 9.297833266251941e+03 + 52360 1.046798246009373e+00 -5.932724098997346e+00 -6.035898569657915e+00 4.006224157428909e+00 4.413780380698188e+00 9.327588143881630e+03 + 52380 1.106596386733531e+00 -6.005649720883485e+00 -5.981900185259828e+00 3.666676053337945e+00 4.803049562117743e+00 9.161585955208917e+03 + 52400 1.036506603730997e+00 -5.895470860335545e+00 -6.058068686167688e+00 4.199426067612437e+00 4.265764189752043e+00 9.396148971152239e+03 + 52420 1.076991826339070e+00 -5.958568191142979e+00 -5.968495784482372e+00 3.936968372984319e+00 4.879962595739419e+00 9.120600012704457e+03 + 52440 1.062932242835895e+00 -5.946009167806302e+00 -6.006278935124068e+00 3.948052527332568e+00 4.601974196677610e+00 9.236339494235986e+03 + 52460 1.070917419718506e+00 -5.973098800307517e+00 -5.983105168000568e+00 3.848088797899381e+00 4.790630686125487e+00 9.165254845568827e+03 + 52480 9.736384904994325e-01 -5.849949329320849e+00 -6.009789441181217e+00 4.444748850110064e+00 4.526922192630459e+00 9.247105651436716e+03 + 52500 1.063873915301763e+00 -6.007793601078929e+00 -5.956701757883597e+00 3.656532458801290e+00 4.949909728866066e+00 9.084517922688878e+03 + 52520 1.065780977131344e+00 -6.035156426614756e+00 -5.971497263413688e+00 3.496073457040874e+00 4.861614223365068e+00 9.129761107981814e+03 + 52540 9.788905514271805e-01 -5.934515972533159e+00 -6.028120656718690e+00 4.029671650583085e+00 4.492179068711709e+00 9.303583080173354e+03 + 52560 1.017888607173856e+00 -6.019728414652999e+00 -5.992547740530533e+00 3.639922759937061e+00 4.795998396943984e+00 9.194164078348520e+03 + 52580 9.735498260878793e-01 -5.982062076866749e+00 -6.007894704482911e+00 3.714935411829019e+00 4.566600466470815e+00 9.241313485180091e+03 + 52600 1.025871500414417e+00 -6.082466558518600e+00 -5.950172431019364e+00 3.278024905395235e+00 5.037678257945911e+00 9.064718418318713e+03 + 52620 9.754376729899238e-01 -6.025142988036771e+00 -5.993717291120018e+00 3.618541631043576e+00 4.798992845850453e+00 9.197780340024152e+03 + 52640 9.481246097829640e-01 -5.999243319143893e+00 -6.045235297331171e+00 3.672496373965805e+00 4.408403317978836e+00 9.356447485059593e+03 + 52660 1.001975454221739e+00 -6.091639522441146e+00 -5.989956357705017e+00 3.240559257147956e+00 4.824439724481699e+00 9.186247976451472e+03 + 52680 9.329808847849286e-01 -5.997763162984405e+00 -6.036817060109509e+00 3.688638817209709e+00 4.464385296346315e+00 9.330397447026453e+03 + 52700 9.142057337974470e-01 -5.973639329139375e+00 -6.014037663004262e+00 3.826043391418043e+00 4.594069906743899e+00 9.260208075779587e+03 + 52720 9.490040564353914e-01 -6.024229581351186e+00 -6.016592591296121e+00 3.490902002055461e+00 4.534754780772039e+00 9.268070123068326e+03 + 52740 1.001085698040597e+00 -6.095797009360768e+00 -6.000593426606239e+00 3.177299797692559e+00 4.723973502575886e+00 9.218891563568488e+03 + 52760 1.011231922447134e+00 -6.101593962210096e+00 -5.987306713874187e+00 3.160567663288969e+00 4.816822729128283e+00 9.178127830153120e+03 + 52780 9.329168122251138e-01 -5.972932811588024e+00 -5.959177213568859e+00 3.849697371975708e+00 4.928684144473662e+00 9.092163439538352e+03 + 52800 9.833136632247781e-01 -6.024374575036149e+00 -5.993717337286055e+00 3.543040194335394e+00 4.719078797688642e+00 9.197756060186164e+03 + 52820 9.924891576511857e-01 -6.001133170360404e+00 -5.975010092147766e+00 3.717414632300875e+00 4.867417389931134e+00 9.140483081146873e+03 + 52840 1.025028437966833e+00 -5.995004407447468e+00 -5.985953831873790e+00 3.696509464457718e+00 4.748479269973822e+00 9.173971626106906e+03 + 52860 9.786745177733325e-01 -5.866570465648356e+00 -6.029338951070430e+00 4.386956182581171e+00 4.452314350945906e+00 9.307294431352690e+03 + 52880 1.061703689307365e+00 -5.936875268461118e+00 -6.001814782766835e+00 3.990919317750786e+00 4.618026577250000e+00 9.222594596798250e+03 + 52900 1.091442686073946e+00 -5.947022164560953e+00 -5.975296121149489e+00 3.963534227981891e+00 4.801180793869876e+00 9.141360884173373e+03 + 52920 1.018147657110040e+00 -5.821231940709525e+00 -6.023374006980244e+00 4.658747177257646e+00 4.498016151347511e+00 9.288890980931996e+03 + 52940 1.106921234944824e+00 -5.948230501963789e+00 -6.009478674925897e+00 3.992538596182386e+00 4.640842108909830e+00 9.246161800478541e+03 + 52960 1.043850723994171e+00 -5.858517140262991e+00 -6.037421273667280e+00 4.420745381812571e+00 4.393450162479976e+00 9.332254275703262e+03 + 52980 1.146572084146277e+00 -6.024123742386364e+00 -5.992008195267806e+00 3.626360458907028e+00 4.810772900326647e+00 9.192512020501281e+03 + 53000 1.045708768352617e+00 -5.893566419835420e+00 -6.036023925205782e+00 4.263743125401001e+00 4.445730084336671e+00 9.327976687495480e+03 + 53020 1.066139618325122e+00 -5.949931833177454e+00 -6.008253453186554e+00 3.982385348091484e+00 4.647493580757702e+00 9.242388717424526e+03 + 53040 9.717946982252299e-01 -5.841095634475598e+00 -6.042196177504766e+00 4.511556816639685e+00 4.356806378357741e+00 9.347040636933820e+03 + 53060 1.072321437004657e+00 -6.020874172903369e+00 -5.984668312996838e+00 3.631074164424207e+00 4.838973814846221e+00 9.170038597085044e+03 + 53080 9.523846234842458e-01 -5.871321604560748e+00 -6.054842510593891e+00 4.403404172283365e+00 4.349598730072635e+00 9.386175005812172e+03 + 53100 1.018425726091077e+00 -5.996774029250003e+00 -6.015408131640375e+00 3.701582775990699e+00 4.594582876447157e+00 9.264422874205799e+03 + 53120 9.924607349976536e-01 -5.983069244398583e+00 -6.017439609970824e+00 3.753154824659362e+00 4.555794866746666e+00 9.270656866810732e+03 + 53140 9.974854833458909e-01 -6.009885452766574e+00 -6.009867521563295e+00 3.573702770731136e+00 4.573805734475211e+00 9.247368710658689e+03 + 53160 9.940751085819003e-01 -6.021595100052499e+00 -5.987711967347504e+00 3.579831050168595e+00 4.774393241558514e+00 9.179343816160032e+03 + 53180 9.666443054771724e-01 -5.993462840315974e+00 -5.965816521705590e+00 3.696135650678614e+00 4.854885090393418e+00 9.112393798526584e+03 + 53200 9.821699458789496e-01 -6.023249894731318e+00 -5.970367592701577e+00 3.551468191425392e+00 4.855126553189956e+00 9.126312828370314e+03 + 53220 9.272710253604787e-01 -5.944831109699081e+00 -6.030603698023383e+00 3.925040786441650e+00 4.432521311018358e+00 9.311239915970351e+03 + 53240 9.775165789530345e-01 -6.019507539357808e+00 -5.997289550889714e+00 3.587730402354819e+00 4.715309530361220e+00 9.208740338720916e+03 + 53260 1.057424203802684e+00 -6.138467595003966e+00 -5.915235692997455e+00 2.955192362793489e+00 5.237024489140065e+00 8.958678007761646e+03 + 53280 9.729165361109603e-01 -6.009315713517995e+00 -5.936377673937319e+00 3.651878232534388e+00 5.070699742931779e+00 9.022750436479284e+03 + 53300 9.829913345104407e-01 -6.015422455548157e+00 -5.983219005422930e+00 3.595302654250568e+00 4.780219848337429e+00 9.165591694171459e+03 + 53320 1.008794017081309e+00 -6.041954815400758e+00 -5.964851259336182e+00 3.467282428155766e+00 4.910022978815300e+00 9.109458049205927e+03 + 53340 1.005485120102753e+00 -6.020518057739581e+00 -5.977110253813974e+00 3.557920712955947e+00 4.807175040432733e+00 9.146895715578885e+03 + 53360 1.055782348600047e+00 -6.071377907471522e+00 -5.965462634459401e+00 3.309910355384630e+00 4.918092243355754e+00 9.111334947731586e+03 + 53380 1.034449759511274e+00 -6.008561035570028e+00 -6.020860443853002e+00 3.643613660363733e+00 4.572988554675614e+00 9.281195782495422e+03 + 53400 9.651743107645262e-01 -5.872006685577692e+00 -6.043195811315903e+00 4.294690028639466e+00 4.311695577219067e+00 9.350104080379133e+03 + 53420 1.035796442713569e+00 -5.934699347903999e+00 -5.989171246635725e+00 4.065959874381704e+00 4.753173802365050e+00 9.183807317234046e+03 + 53440 1.091746920455752e+00 -5.966754028769856e+00 -6.004497118016895e+00 3.854542728896817e+00 4.637816069716134e+00 9.230853072815878e+03 + 53460 1.131146227325475e+00 -5.978769549799787e+00 -6.008578138872749e+00 3.831975053144749e+00 4.660809521823552e+00 9.243383605451416e+03 + 53480 1.068258819224858e+00 -5.853311307979129e+00 -6.062825444552813e+00 4.498764652528436e+00 4.295702058114491e+00 9.410920501478418e+03 + 53500 1.144473784186664e+00 -5.948350374672767e+00 -6.056046390364228e+00 3.949425658581212e+00 4.331018470576275e+00 9.389924574736506e+03 + 53520 1.094728735030157e+00 -5.876270621218036e+00 -6.011388199900348e+00 4.386411964252725e+00 4.610545918081166e+00 9.252025039117731e+03 + 53540 1.068698498071433e+00 -5.850478698851571e+00 -6.022678006677888e+00 4.469215103502977e+00 4.480420030207506e+00 9.286760560622026e+03 + 53560 1.022025568330448e+00 -5.798739379430535e+00 -5.990213704163977e+00 4.847693102479370e+00 4.748217899303960e+00 9.186988240052389e+03 + 53580 1.080971893856868e+00 -5.908623943052528e+00 -6.017548357678433e+00 4.165044144311972e+00 4.539583299531339e+00 9.270989663307830e+03 + 53600 1.118183833765542e+00 -5.990172635510129e+00 -5.961533455299629e+00 3.761228045880086e+00 4.925678650547590e+00 9.099347281947013e+03 + 53620 1.100736206269385e+00 -5.991340670929203e+00 -5.987486481812516e+00 3.752664713471614e+00 4.774796063813468e+00 9.178655665610202e+03 + 53640 1.058632135947689e+00 -5.953942087571248e+00 -6.032624614549675e+00 3.906532273412553e+00 4.454725027420723e+00 9.317457763580438e+03 + 53660 1.036072524780025e+00 -5.941173994648743e+00 -5.989155437233582e+00 4.007475482415006e+00 4.731958613988618e+00 9.183770979502053e+03 + 53680 1.011098842717600e+00 -5.921279638574397e+00 -6.003511772663831e+00 4.059320044703824e+00 4.587130405380668e+00 9.227808797213391e+03 + 53700 1.042140276238395e+00 -5.982974244087150e+00 -5.962119762222389e+00 3.816153838863448e+00 4.935903500951545e+00 9.101122843343459e+03 + 53720 1.015132616623391e+00 -5.956981855314658e+00 -5.990511364806482e+00 3.961074147459456e+00 4.768542515282583e+00 9.187944782908702e+03 + 53740 9.838176637114679e-01 -5.924379754177998e+00 -6.019223725442540e+00 4.093615606318439e+00 4.549006846260322e+00 9.276162708457075e+03 + 53760 1.053302193298816e+00 -6.041660854400758e+00 -6.026787902909297e+00 3.416274278185297e+00 4.501677067231068e+00 9.299474800658514e+03 + 53780 1.000063208067193e+00 -5.978762919306122e+00 -6.012850090770648e+00 3.806504514058653e+00 4.610770700536607e+00 9.256550002760396e+03 + 53800 9.980375814867323e-01 -5.992572129120801e+00 -6.003969749041622e+00 3.710507271653715e+00 4.645060374292378e+00 9.229241116642581e+03 + 53820 1.042543449439469e+00 -6.075565126382925e+00 -5.975658040444740e+00 3.321594412917892e+00 4.895276360946530e+00 9.142470240619261e+03 + 53840 9.985450816635743e-01 -6.029411096125779e+00 -5.984794791206328e+00 3.566725331049144e+00 4.822919058247507e+00 9.170372290875619e+03 + 53860 1.035715401997662e+00 -6.101182126500418e+00 -5.952485337190494e+00 3.147828763935610e+00 5.001668738906972e+00 9.071762626318081e+03 + 53880 9.870568060008424e-01 -6.043273541372438e+00 -5.973501173485889e+00 3.449701431837473e+00 4.850345165481069e+00 9.135874385736128e+03 + 53900 9.155667710208502e-01 -5.947236788178921e+00 -5.980924681428175e+00 3.954460145815324e+00 4.761019049593475e+00 9.158556841170022e+03 + 53920 9.534139397041693e-01 -6.009258257218812e+00 -5.935998289205425e+00 3.655948475322871e+00 5.076618548599148e+00 9.021595347392269e+03 + 53940 9.831178025735192e-01 -6.053395494736893e+00 -5.912139268709897e+00 3.462595488988847e+00 5.273710598166195e+00 8.949298640865523e+03 + 53960 1.007717841815206e+00 -6.083446510073417e+00 -5.948344141634580e+00 3.234341502631163e+00 5.010120209230912e+00 9.059136750347028e+03 + 53980 9.595405683186373e-01 -6.000367912871468e+00 -6.010790333339369e+00 3.679355622244875e+00 4.619508471053836e+00 9.250182114446752e+03 + 54000 9.770449537282063e-01 -6.008994040440683e+00 -6.024713741685058e+00 3.583692327893432e+00 4.493427370732323e+00 9.293047830086660e+03 + 54020 1.024637848056716e+00 -6.051792812883864e+00 -5.990618076428905e+00 3.436483268815437e+00 4.787758072299678e+00 9.188268443097966e+03 + 54040 9.818594127211741e-01 -5.949050069722733e+00 -6.021403700422540e+00 4.036178662189709e+00 4.620712918023255e+00 9.282857879932666e+03 + 54060 1.091477687510626e+00 -6.066219296214215e+00 -5.992907664473782e+00 3.298016698629028e+00 4.718983433020942e+00 9.195304647267138e+03 + 54080 1.073057900154336e+00 -5.994236350042423e+00 -5.995493973971848e+00 3.764430025319911e+00 4.757208554100484e+00 9.203197592571596e+03 + 54100 1.076770153951080e+00 -5.963734840019113e+00 -5.993359873743739e+00 3.886297044919783e+00 4.716185516813827e+00 9.196658386561119e+03 + 54120 1.086255932639081e+00 -5.949761631920937e+00 -6.005991963039690e+00 4.048906228560317e+00 4.726022965660820e+00 9.235453556036309e+03 + 54140 1.105744408686670e+00 -5.962985047293924e+00 -6.026146170595598e+00 3.898881195026275e+00 4.536200250875821e+00 9.297488992661685e+03 + 54160 1.070487361786937e+00 -5.908335621743166e+00 -6.026832263401276e+00 4.190032313696031e+00 4.509606259999134e+00 9.299588776385383e+03 + 54180 1.098088690069195e+00 -5.955584101182066e+00 -6.026589012631286e+00 3.982595650760899e+00 4.574874461244946e+00 9.298840796003318e+03 + 54200 9.866563593999562e-01 -5.806740737845078e+00 -6.059025010112924e+00 4.639262317332776e+00 4.190606985105847e+00 9.399121816076367e+03 + 54220 1.075717877795899e+00 -5.956746585466376e+00 -5.960290828418375e+00 3.935512086157409e+00 4.915160494657204e+00 9.095557724466327e+03 + 54240 1.035827334390549e+00 -5.921079555687382e+00 -5.996851287655333e+00 4.131266988693183e+00 4.696173978095584e+00 9.207350468619268e+03 + 54260 1.127915649114686e+00 -6.081901170805526e+00 -5.963965435802386e+00 3.276584960001056e+00 4.953790200885093e+00 9.106750144146325e+03 + 54280 1.054877057039187e+00 -5.999697581123558e+00 -5.993456709662678e+00 3.714311651896822e+00 4.750147701596931e+00 9.196975995099487e+03 + 54300 9.628232125924775e-01 -5.889137643868834e+00 -6.031467394488017e+00 4.318038066573212e+00 4.500758613060134e+00 9.313894258397562e+03 + 54320 9.615570204218201e-01 -5.908998779812577e+00 -6.013433636630330e+00 4.197414887755412e+00 4.597733778666011e+00 9.258339195786244e+03 + 54340 9.932746340689625e-01 -5.971692953564488e+00 -6.006559622403910e+00 3.852415662715926e+00 4.652205854640401e+00 9.237190943320966e+03 + 54360 1.012407481702020e+00 -6.010853582313801e+00 -5.998083717318947e+00 3.614637646351827e+00 4.687964187282502e+00 9.211188072684419e+03 + 54380 1.009680495622634e+00 -6.013927312559051e+00 -6.022159601557566e+00 3.667467982864707e+00 4.620196905492634e+00 9.285185285526140e+03 + 54400 9.668698350026017e-01 -5.957758157456656e+00 -6.037198806573427e+00 4.000746172843474e+00 4.544585672214253e+00 9.331582454080000e+03 + 54420 1.007328646271102e+00 -6.023625989749931e+00 -6.026213050498333e+00 3.593274111507349e+00 4.578418808343668e+00 9.297670202081641e+03 + 54440 9.864892413799866e-01 -5.997248970003383e+00 -6.008657168125299e+00 3.714940141429913e+00 4.649432502400920e+00 9.243635272155399e+03 + 54460 9.530134833113747e-01 -5.951006745276899e+00 -6.003029112187733e+00 4.037144712765244e+00 4.738424231527972e+00 9.226351764741863e+03 + 54480 1.036880768159336e+00 -6.076515863439096e+00 -5.994320574596797e+00 3.272804341455232e+00 4.744782409667551e+00 9.199631076640653e+03 + 54500 9.804467287213167e-01 -5.992977294774775e+00 -6.034702610969758e+00 3.725957634589291e+00 4.486364412025885e+00 9.323900751107401e+03 + 54520 9.700098898365177e-01 -5.977938283224316e+00 -6.021186568401783e+00 3.833078935517706e+00 4.584740589378192e+00 9.282220122015045e+03 + 54540 1.030318662881385e+00 -6.068733020322838e+00 -5.988817546510124e+00 3.365933022447825e+00 4.824820039960036e+00 9.182774168443117e+03 + 54560 9.853601595940844e-01 -6.003353594084792e+00 -5.993827554132017e+00 3.748997592232018e+00 4.803697587790767e+00 9.198100040946489e+03 + 54580 9.678204542768577e-01 -5.976283357817767e+00 -6.012164101197142e+00 3.798140800403278e+00 4.592108019391814e+00 9.254424220422532e+03 + 54600 1.001254533071817e+00 -6.021782905553730e+00 -6.011284848679870e+00 3.603615665157530e+00 4.663897132296282e+00 9.251728000235782e+03 + 54620 1.022602942584029e+00 -6.049267499318328e+00 -6.014502819326941e+00 3.433302600118131e+00 4.632926772445522e+00 9.261637785656110e+03 + 54640 9.630289851929216e-01 -5.955535304955922e+00 -6.067957871332143e+00 3.936373644321743e+00 4.290825870853560e+00 9.426843972880242e+03 + 54660 1.000252976011499e+00 -6.004244185197375e+00 -6.030681149653883e+00 3.715586044564397e+00 4.563780903548096e+00 9.311477266155383e+03 + 54680 9.979828450038610e-01 -5.993307335543915e+00 -6.013931419528004e+00 3.711901954800187e+00 4.593475272996868e+00 9.259863635940037e+03 + 54700 9.591074227254339e-01 -5.923855770338760e+00 -6.014125794711280e+00 4.102850299306270e+00 4.584505850118135e+00 9.260461990444615e+03 + 54720 1.055207166018260e+00 -6.048739352345833e+00 -5.989351303155625e+00 3.461943760671218e+00 4.802959129392301e+00 9.184382366949339e+03 + 54740 9.924737107982928e-01 -5.936274616187706e+00 -5.980420481879225e+00 4.090499437447669e+00 4.837007045096330e+00 9.157030414819163e+03 + 54760 1.075457941007258e+00 -6.038962118502762e+00 -5.975611041681628e+00 3.532780727057252e+00 4.896552413711659e+00 9.142312958113214e+03 + 54780 1.054672790977728e+00 -5.985377771005628e+00 -5.998193711112647e+00 3.834376910619855e+00 4.760785799265030e+00 9.211497180719063e+03 + 54800 1.074215523895364e+00 -5.994690195941192e+00 -6.021485014174578e+00 3.710152945234278e+00 4.556292952453455e+00 9.283136347189517e+03 + 54820 1.080545844480252e+00 -5.987897249804607e+00 -6.062171907037995e+00 3.775956898894978e+00 4.349460323094806e+00 9.408910863657862e+03 + 54840 1.001081951092371e+00 -5.863762351121441e+00 -6.025861090346333e+00 4.395614315640981e+00 4.464818270312827e+00 9.296608324225268e+03 + 54860 1.028542998155979e+00 -5.904540204630682e+00 -6.008354808985229e+00 4.253975912284474e+00 4.657856388822563e+00 9.242689775723200e+03 + 54880 1.055990892570608e+00 -5.947236210662278e+00 -6.032069131953977e+00 3.984079513875495e+00 4.496955751966420e+00 9.315746820429342e+03 + 54900 1.071827291445359e+00 -5.981924178496953e+00 -6.016929493945915e+00 3.791467630294655e+00 4.590461691931658e+00 9.269086089453991e+03 + 54920 9.403814438438366e-01 -5.806305905542190e+00 -6.080817893410321e+00 4.643500676526418e+00 4.067210361594777e+00 9.466787177354996e+03 + 54940 1.104005542354030e+00 -6.074634993591562e+00 -6.036930265382416e+00 3.265758140179180e+00 4.482264524343927e+00 9.330771000703622e+03 + 54960 1.001691174846374e+00 -5.959317167654111e+00 -6.054938117242724e+00 3.902075449456775e+00 4.353005159624838e+00 9.386475375247321e+03 + 54980 9.801914539256972e-01 -5.967116892328596e+00 -5.988516449275192e+00 3.897047947315808e+00 4.774168379757721e+00 9.181837126922790e+03 + 55000 1.004584611527497e+00 -6.040049603077405e+00 -5.953927569639819e+00 3.569276778744225e+00 5.063802822084446e+00 9.076146546371046e+03 + 55020 9.854498551933859e-01 -6.040737550071690e+00 -5.994883739547839e+00 3.407945182696316e+00 4.671244858578515e+00 9.201369756381502e+03 + 55040 9.508405235514381e-01 -6.012166725188421e+00 -5.978543388182563e+00 3.633207198583318e+00 4.826277602865542e+00 9.151305541870759e+03 + 55060 9.623122759976038e-01 -6.044469994423334e+00 -5.970754424943978e+00 3.449008169797089e+00 4.872294377195063e+00 9.127487493495057e+03 + 55080 9.480421244285583e-01 -6.031710035309490e+00 -5.979846134314544e+00 3.558848009725099e+00 4.856658555150821e+00 9.155280620111158e+03 + 55100 9.371940237231567e-01 -6.016860921068209e+00 -6.015961310126649e+00 3.570372818196861e+00 4.575538523437638e+00 9.266125965117457e+03 + 55120 9.911777898489990e-01 -6.093483399793873e+00 -5.993346980733392e+00 3.218584797315810e+00 4.793583611621855e+00 9.196638173075327e+03 + 55140 9.537924429572718e-01 -6.032143538905562e+00 -6.016262577214070e+00 3.521890143244586e+00 4.613081082848014e+00 9.267051266410836e+03 + 55160 9.498273437749721e-01 -6.016666198934384e+00 -6.022861591455192e+00 3.608509910675919e+00 4.572935008087548e+00 9.287378034600104e+03 + 55180 9.950888083677079e-01 -6.071822302059814e+00 -6.023477346049612e+00 3.296274313137027e+00 4.573878531905374e+00 9.289272892149336e+03 + 55200 9.549631119442991e-01 -5.999330558394665e+00 -6.014103882207289e+00 3.705269981922795e+00 4.620439270426237e+00 9.260396556938038e+03 + 55220 9.605798548383276e-01 -5.991721214376103e+00 -6.010154927132058e+00 3.733062778820205e+00 4.627213547567679e+00 9.248245134610923e+03 + 55240 9.916325071023556e-01 -6.020759439311673e+00 -5.986897955276588e+00 3.566387603635186e+00 4.760825485012361e+00 9.176849553983015e+03 + 55260 9.691418454834565e-01 -5.964816542694719e+00 -5.997033527366728e+00 3.878993804814602e+00 4.693998893265665e+00 9.207944377336498e+03 + 55280 9.782736770897118e-01 -5.955396204141939e+00 -6.041201106102031e+00 3.905134677473414e+00 4.412429652152903e+00 9.343967689852265e+03 + 55300 1.013556994024557e+00 -5.985182331693085e+00 -6.027659120854840e+00 3.727716060050962e+00 4.483807763422286e+00 9.302157547573366e+03 + 55320 9.440857106319652e-01 -5.863201537063844e+00 -6.037869777253064e+00 4.390469350782919e+00 4.387497285793608e+00 9.333661226244176e+03 + 55340 1.061464906581466e+00 -6.016285056597329e+00 -5.975356206233603e+00 3.639652479510406e+00 4.874672272018048e+00 9.141539591407012e+03 + 55360 1.111809585094297e+00 -6.070076799777863e+00 -5.978798670564735e+00 3.274935623500686e+00 4.799068766687314e+00 9.152088762461864e+03 + 55380 9.962644919933222e-01 -5.883332408019612e+00 -6.010149986098979e+00 4.325798836611804e+00 4.597592678323296e+00 9.248173553235240e+03 + 55400 9.904718916244285e-01 -5.858101200963367e+00 -6.010186904630062e+00 4.414051886010650e+00 4.540752240369906e+00 9.248316835643403e+03 + 55420 1.082247825759530e+00 -5.969851888534757e+00 -5.982744927478870e+00 3.823232671755847e+00 4.749198846947421e+00 9.164133311401360e+03 + 55440 1.103718933420287e+00 -5.963292616620775e+00 -5.968486794633510e+00 3.907025427217947e+00 4.877199653272374e+00 9.120544846574141e+03 + 55460 1.099196214053692e+00 -5.901406465874010e+00 -6.009178099107871e+00 4.253669195069651e+00 4.634827799434482e+00 9.245242706547931e+03 + 55480 1.131073514661555e+00 -5.888831868071505e+00 -6.033040003177653e+00 4.259182946844825e+00 4.431117518928539e+00 9.318735267204067e+03 + 55500 1.140176430949628e+00 -5.857404018669083e+00 -6.012364505833356e+00 4.501862411424236e+00 4.612055314069091e+00 9.255032365682195e+03 + 55520 1.175221974737584e+00 -5.884356079668315e+00 -6.002094877112311e+00 4.320018796563801e+00 4.643944401620352e+00 9.223452729324892e+03 + 55540 1.138997679434158e+00 -5.826261945273386e+00 -6.007118212830075e+00 4.597502634368149e+00 4.558997958640691e+00 9.238905142846359e+03 + 55560 1.094434084126901e+00 -5.771825281159740e+00 -5.997336181104487e+00 4.892465389555270e+00 4.597546904373552e+00 9.208847982577541e+03 + 55580 1.107379697739695e+00 -5.818138275348063e+00 -5.990570959084911e+00 4.648804961063947e+00 4.658669807175399e+00 9.188116160141271e+03 + 55600 1.081705620864433e+00 -5.820654667159614e+00 -6.055349120475372e+00 4.657836584886988e+00 4.310184715098638e+00 9.387690524033884e+03 + 55620 1.041811185859008e+00 -5.810883416253248e+00 -6.057037123362514e+00 4.673498783686807e+00 4.260046105302339e+00 9.392943387747664e+03 + 55640 1.100896416326611e+00 -5.948992200438391e+00 -6.031537319307255e+00 3.997589382200984e+00 4.523602535840107e+00 9.314079194798518e+03 + 55660 1.062231029140101e+00 -5.937998930740423e+00 -5.979857942279100e+00 4.058875853784927e+00 4.818514931868740e+00 9.155302706418655e+03 + 55680 1.012821139753760e+00 -5.901178951698629e+00 -5.976755615339060e+00 4.249571507303352e+00 4.815598609229096e+00 9.145801158605425e+03 + 55700 9.779215065255480e-01 -5.877218372010355e+00 -6.036059451751992e+00 4.317360968633214e+00 4.405270908179086e+00 9.328028120053665e+03 + 55720 1.029095161509971e+00 -5.977435392989284e+00 -5.955343570916724e+00 3.823813034798215e+00 4.950667695837272e+00 9.080456583992438e+03 + 55740 9.933027378525247e-01 -5.942954744816950e+00 -5.981900739790127e+00 3.984125700377021e+00 4.760491770367789e+00 9.161529149668595e+03 + 55760 1.010296222797366e+00 -5.986579434992611e+00 -5.960598608317880e+00 3.802663374187271e+00 4.951849301473509e+00 9.096471407476078e+03 + 55780 9.713903304251943e-01 -5.945717717259810e+00 -5.941064050560882e+00 4.008107680870858e+00 5.034829755208695e+00 9.036985494715853e+03 + 55800 1.048416949187498e+00 -6.072265018161504e+00 -5.970416478500017e+00 3.278444156313515e+00 4.863274232060352e+00 9.126442238773061e+03 + 55820 9.928829601872921e-01 -6.002222927089231e+00 -6.010154035652733e+00 3.698929236856991e+00 4.653387584150278e+00 9.248233641298104e+03 + 55840 9.583111180999919e-01 -5.964857001059129e+00 -6.054917548153746e+00 3.853210862223546e+00 4.336069263981632e+00 9.386394646918869e+03 + 55860 9.514781812610510e-01 -5.969112965419253e+00 -6.028782929209297e+00 3.898242046734633e+00 4.555607880755151e+00 9.305591900159063e+03 + 55880 1.039158557855002e+00 -6.111224522029953e+00 -5.987120121082040e+00 3.129225550402055e+00 4.841852225738952e+00 9.177551789694453e+03 + 55900 9.638277058582696e-01 -6.009999155671554e+00 -6.014167484222057e+00 3.647397979687235e+00 4.623462792103489e+00 9.260601501558012e+03 + 55920 1.016012779676597e+00 -6.099273464983181e+00 -5.956360298540643e+00 3.133121898052023e+00 4.953751415506112e+00 9.083572894966006e+03 + 55940 9.247355447388724e-01 -5.971431960412266e+00 -5.941668381594416e+00 3.875925881875115e+00 5.046832957346151e+00 9.038838180359313e+03 + 55960 9.459038462526007e-01 -6.004186716280334e+00 -5.979442746174939e+00 3.654444364811247e+00 4.796528070273423e+00 9.154066165213551e+03 + 55980 9.988168241166809e-01 -6.079447766358204e+00 -6.007089674059547e+00 3.223866512864781e+00 4.639357876222265e+00 9.238854250840297e+03 + 56000 9.541825627409692e-01 -6.009637511883415e+00 -6.023675056637651e+00 3.584786542170633e+00 4.504180787888782e+00 9.289865404546832e+03 + 56020 9.415009393902448e-01 -5.982863630168257e+00 -5.951771965446629e+00 3.812157902784855e+00 4.990691053036008e+00 9.069561507806642e+03 + 56040 9.854186131503715e-01 -6.030888582830000e+00 -5.931082057806807e+00 3.577582134745762e+00 5.150686646438770e+00 9.006654467091950e+03 + 56060 9.525893747406403e-01 -5.952782225455519e+00 -6.054471222183893e+00 3.881617783092133e+00 4.297703827556423e+00 9.384968017956671e+03 + 56080 1.055919330528610e+00 -6.067679960328285e+00 -5.973898747455350e+00 3.351335923828400e+00 4.889842160740583e+00 9.137104957540247e+03 + 56100 1.012677065006862e+00 -5.962490298406584e+00 -6.017139038341393e+00 3.851494831496397e+00 4.537693309925545e+00 9.269729124765279e+03 + 56120 1.109086415310063e+00 -6.066971328858539e+00 -5.984290073594297e+00 3.349240052859003e+00 4.824008615469189e+00 9.168888689954405e+03 + 56140 1.043746985128696e+00 -5.940487073973911e+00 -5.994830850863329e+00 4.041970344835120e+00 4.729919968263791e+00 9.201141159840747e+03 + 56160 1.053480236927609e+00 -5.933614678523356e+00 -5.964324018357866e+00 4.046436393240709e+00 4.870098611655977e+00 9.107790381480962e+03 + 56180 1.113603375938232e+00 -6.004934336723722e+00 -5.975294718862550e+00 3.608282772142091e+00 4.778478044616984e+00 9.141330526154146e+03 + 56200 1.028644206899561e+00 -5.870522003672527e+00 -5.998366074108910e+00 4.339705539939957e+00 4.605605103688281e+00 9.212003079311035e+03 + 56220 1.033630750327328e+00 -5.876453409689939e+00 -5.990591536444792e+00 4.361511336255752e+00 4.706112549611358e+00 9.188179007827379e+03 + 56240 9.954566925141832e-01 -5.822888081281322e+00 -6.050253303675944e+00 4.604927133043205e+00 4.299360841398829e+00 9.371957459553389e+03 + 56260 1.031175844402633e+00 -5.885867466803091e+00 -6.068160687100173e+00 4.291742048935100e+00 4.244986168204584e+00 9.427436124020882e+03 + 56280 1.120293206176698e+00 -6.038545517569005e+00 -6.006079163239403e+00 3.505921762307090e+00 4.692348593019760e+00 9.235725059757649e+03 + 56300 1.052099671442379e+00 -5.968260229321049e+00 -6.011610422079510e+00 3.852762091914611e+00 4.603838576674880e+00 9.252746597973975e+03 + 56320 9.847671929878378e-01 -5.905827336333842e+00 -6.022919604020021e+00 4.187811819481618e+00 4.515449898457709e+00 9.287510193727046e+03 + 56340 9.626743385624225e-01 -5.909469487153911e+00 -6.007381592311148e+00 4.166545523584544e+00 4.604319063922381e+00 9.239704703796539e+03 + 56360 1.030715940167979e+00 -6.040380728247204e+00 -5.980769653687504e+00 3.438457397633834e+00 4.780753412539608e+00 9.158105055936645e+03 + 56380 9.790271385083111e-01 -5.986585989476599e+00 -5.997328685396431e+00 3.760027434414242e+00 4.698341212015748e+00 9.208860758526149e+03 + 56400 9.933189752516800e-01 -6.023543384424475e+00 -6.020145991158939e+00 3.554712349009919e+00 4.574220706885532e+00 9.279008744357612e+03 + 56420 9.838577626535955e-01 -6.020886190507584e+00 -5.984587635449633e+00 3.578055503148692e+00 4.786487423474690e+00 9.169810687885325e+03 + 56440 9.953290388767712e-01 -6.043809221810512e+00 -5.985808403620138e+00 3.419151084061821e+00 4.752200757708555e+00 9.173520964788280e+03 + 56460 9.621866753620619e-01 -5.995171612504797e+00 -5.968416684706860e+00 3.742124832538082e+00 4.895755768265535e+00 9.120339009166642e+03 + 56480 1.022059081848043e+00 -6.081924634640547e+00 -5.969113798692411e+00 3.250670039231960e+00 4.898447316666602e+00 9.122482786886205e+03 + 56500 9.979482149714280e-01 -6.041625846467564e+00 -5.989482284452763e+00 3.467532162747139e+00 4.766948565026269e+00 9.184800154793762e+03 + 56520 9.552797713004187e-01 -5.974470115458068e+00 -5.951832308380862e+00 3.854261530087014e+00 4.984251321513659e+00 9.069784681626597e+03 + 56540 9.598652374063001e-01 -5.973339948079397e+00 -5.969514402086134e+00 3.872347956098194e+00 4.894314833192841e+00 9.123675788315752e+03 + 56560 1.055429156720691e+00 -6.102229551193080e+00 -5.984992892614327e+00 3.199269802493843e+00 4.872460838367326e+00 9.171035090683912e+03 + 56580 1.001417392060915e+00 -6.009746475331953e+00 -6.060659708207388e+00 3.588339213843066e+00 4.295987551874993e+00 9.404220846683806e+03 + 56600 9.752211629039319e-01 -5.961334123817178e+00 -6.033248481601555e+00 3.933145254152790e+00 4.520201883043993e+00 9.319380187179253e+03 + 56620 1.052876728025028e+00 -6.067817167931534e+00 -5.975873592028023e+00 3.359870111603169e+00 4.887824352663521e+00 9.143124916422981e+03 + 56640 1.020148930437832e+00 -6.008563584042925e+00 -5.972384160303980e+00 3.662151734051142e+00 4.869899583907897e+00 9.132470599327276e+03 + 56660 9.450695930718166e-01 -5.885840347372925e+00 -6.006953403634609e+00 4.326739520312268e+00 4.631289609072798e+00 9.238389834616033e+03 + 56680 1.014317038816941e+00 -5.974109529097629e+00 -5.978330226398517e+00 3.880458512093112e+00 4.856222615040616e+00 9.150636267339936e+03 + 56700 1.028627632487641e+00 -5.979862652534659e+00 -5.984854949909543e+00 3.820577003424158e+00 4.791910459342050e+00 9.170614265771743e+03 + 56720 1.069368575933357e+00 -6.023378051639678e+00 -5.987747914337899e+00 3.592135184119027e+00 4.796728946251763e+00 9.179466040324558e+03 + 56740 1.040692124528165e+00 -5.962908919427649e+00 -6.008668362073653e+00 3.902760277806810e+00 4.640002476882590e+00 9.243672076598288e+03 + 56760 1.061071651849394e+00 -5.975166123791226e+00 -5.978659440837047e+00 3.862468396721510e+00 4.842409229655337e+00 9.151652706380406e+03 + 56780 1.046244079710479e+00 -5.932404566872014e+00 -6.067245348720643e+00 4.061963311643838e+00 4.287686675725458e+00 9.424612878923019e+03 + 56800 1.090587983038526e+00 -5.979216357738387e+00 -6.082365234279841e+00 3.780039521517765e+00 4.187742710179674e+00 9.471607089786830e+03 + 56820 1.017069717936967e+00 -5.857837627507098e+00 -6.063049321827076e+00 4.512042644830719e+00 4.333685339638337e+00 9.411597693501979e+03 + 56840 1.074534840585458e+00 -5.937964292584121e+00 -6.026430218751513e+00 4.022868209340350e+00 4.514883171229353e+00 9.298355453239121e+03 + 56860 1.105629699966827e+00 -5.985307903068275e+00 -6.009531571606672e+00 3.765878610695090e+00 4.626782557347019e+00 9.246323097474140e+03 + 56880 9.365978094482771e-01 -5.744898045909923e+00 -6.059783970533518e+00 5.057032545320546e+00 4.248908837692513e+00 9.401471807284226e+03 + 56900 1.059126566704163e+00 -5.946247482905694e+00 -6.014738660154975e+00 3.939769540265047e+00 4.546482601524247e+00 9.262359511215305e+03 + 56920 1.034009451917799e+00 -5.939885557199513e+00 -6.037292762856680e+00 4.019507716597229e+00 4.460180467997419e+00 9.331874306239702e+03 + 56940 1.025129209339759e+00 -5.966246311000991e+00 -5.991540009711406e+00 3.874451722768945e+00 4.729211390586516e+00 9.191086118622326e+03 + 56960 1.050421294699241e+00 -6.045997413710398e+00 -5.947563400845658e+00 3.500224247207867e+00 5.065447581691472e+00 9.056776142799330e+03 + 56980 1.007163412290015e+00 -6.023911250402898e+00 -5.983686649086141e+00 3.569959820578359e+00 4.800935706076117e+00 9.167034959257613e+03 + 57000 9.309288945719089e-01 -5.945039667994267e+00 -6.000378628168360e+00 3.948789579605922e+00 4.631024706609864e+00 9.218184404654423e+03 + 57020 9.884710892965154e-01 -6.053586995468538e+00 -5.916060656516715e+00 3.422082527318230e+00 5.211780047711770e+00 8.961151492768930e+03 + 57040 8.809970621089549e-01 -5.905985787923622e+00 -5.958383854005830e+00 4.223865119365154e+00 4.922987315346592e+00 9.089707557564196e+03 + 57060 9.959878111939372e-01 -6.080469682398911e+00 -5.967018343882826e+00 3.258690500850638e+00 4.910145643147893e+00 9.116092495548628e+03 + 57080 9.951104246659106e-01 -6.079383148315304e+00 -5.992230507265564e+00 3.297694488620225e+00 4.798138440355446e+00 9.193208252986884e+03 + 57100 9.740927638140553e-01 -6.045504406196317e+00 -6.013516122281800e+00 3.417450269600709e+00 4.601131946008805e+00 9.258576820475606e+03 + 57120 9.280859684191589e-01 -5.973691887965853e+00 -5.999119963096357e+00 3.828794374965326e+00 4.682782432584067e+00 9.214328532624862e+03 + 57140 9.013227941011318e-01 -5.925972063906412e+00 -5.998699397622463e+00 4.066515881551177e+00 4.648904276835089e+00 9.213040556424934e+03 + 57160 1.037557155624623e+00 -6.113118072510668e+00 -5.980432260738726e+00 3.040883582954080e+00 4.802786047211579e+00 9.157059212102398e+03 + 57180 9.961209475269126e-01 -6.033330826081715e+00 -5.967111803431570e+00 3.531499611668199e+00 4.911739487085969e+00 9.116335646804642e+03 + 57200 9.592643393964942e-01 -5.957509723857826e+00 -5.979202556124649e+00 3.871351403686421e+00 4.746787803855381e+00 9.153258241448018e+03 + 57220 1.018595292936397e+00 -6.017991089762433e+00 -5.975110562031761e+00 3.611936877573310e+00 4.858163503543054e+00 9.140800659814173e+03 + 57240 9.698046728212524e-01 -5.914247230286537e+00 -5.992770843062300e+00 4.151822884837062e+00 4.700928148788827e+00 9.194847907793737e+03 + 57260 1.028762057750746e+00 -5.970084071654433e+00 -6.009823614037479e+00 3.836187233242287e+00 4.607996631204529e+00 9.247187412274752e+03 + 57280 1.061177841539753e+00 -5.982157446411677e+00 -6.033874102259278e+00 3.789964141077660e+00 4.492999100074108e+00 9.321313476370518e+03 + 57300 1.061930412776711e+00 -5.953879132270297e+00 -6.010541429223182e+00 3.944164842558918e+00 4.618801164993334e+00 9.249430949817965e+03 + 57320 1.068218235884576e+00 -5.944514999272682e+00 -5.993529754978590e+00 3.952884409418600e+00 4.671434097146344e+00 9.197175793040353e+03 + 57340 1.061407128291408e+00 -5.922963944554405e+00 -5.981815719512783e+00 4.128284738110631e+00 4.790348739016886e+00 9.161290247496561e+03 + 57360 1.070040270354071e+00 -5.931013571653581e+00 -5.978197364927041e+00 4.156343698371375e+00 4.885407055726758e+00 9.150224076257286e+03 + 57380 1.004790300895971e+00 -5.835843686039258e+00 -5.990164057433454e+00 4.662881698832980e+00 4.776750245287215e+00 9.186838912985426e+03 + 57400 1.043477524448684e+00 -5.898555074584457e+00 -6.019245454853479e+00 4.236661382120923e+00 4.543638541840214e+00 9.276205737101965e+03 + 57420 1.037511149702690e+00 -5.902337124123962e+00 -6.067278156085971e+00 4.257996017543566e+00 4.310879087475505e+00 9.424725604419642e+03 + 57440 1.065442054346394e+00 -5.970257373657727e+00 -6.022794202992227e+00 3.859013177318711e+00 4.557338573231948e+00 9.287161258683904e+03 + 57460 1.045608969903219e+00 -5.980438818162919e+00 -6.003951461071262e+00 3.818106406304108e+00 4.683093172154671e+00 9.229179106583289e+03 + 57480 1.019015465158626e+00 -5.994518600338761e+00 -6.007163568076230e+00 3.676282422154918e+00 4.603673060603938e+00 9.239038543115954e+03 + 57500 1.009307658928902e+00 -6.043030934006151e+00 -6.000612274579384e+00 3.477989605258881e+00 4.721564111953717e+00 9.218929287603551e+03 + 57520 8.956016867171760e-01 -5.932699401689880e+00 -6.022545216254093e+00 4.030415420640217e+00 4.514506849817639e+00 9.286395126207286e+03 + 57540 9.468704654063052e-01 -6.041449704027035e+00 -5.974217989977765e+00 3.463693565712345e+00 4.849748471857378e+00 9.138077484829397e+03 + 57560 1.014106161304705e+00 -6.153285866815664e+00 -5.963595157727054e+00 2.914541459786687e+00 5.003774865915846e+00 9.105644704177546e+03 + 57580 9.513942177781685e-01 -6.063408990174259e+00 -6.013737678437217e+00 3.367945316035701e+00 4.653165674640448e+00 9.259278238186578e+03 + 57600 9.656748671639561e-01 -6.083650444755706e+00 -6.005163257040923e+00 3.224561370568370e+00 4.675246948279701e+00 9.232917486372597e+03 + 57620 9.304784974217767e-01 -6.025887177299108e+00 -5.952901386681315e+00 3.598391001708544e+00 5.017486705950505e+00 9.073026728452460e+03 + 57640 8.859354506828339e-01 -5.946445833889057e+00 -6.036150048897182e+00 3.966431129890889e+00 4.451335645631824e+00 9.328342227703326e+03 + 57660 9.570076980988320e-01 -6.032793351667209e+00 -6.000103835749513e+00 3.533879339311802e+00 4.721587598397450e+00 9.217378555925117e+03 + 57680 1.001677146277492e+00 -6.077299728093116e+00 -6.005067161880394e+00 3.266042602281327e+00 4.680813175428279e+00 9.232611469469961e+03 + 57700 9.911236704863889e-01 -6.037547350732281e+00 -5.971953188943321e+00 3.541234466748128e+00 4.917886294404067e+00 9.131147359565119e+03 + 57720 9.924715539741471e-01 -6.013051339140683e+00 -5.989606668862947e+00 3.667591385747819e+00 4.802214310533580e+00 9.185138781506348e+03 + 57740 1.041261966106049e+00 -6.057236816798165e+00 -6.008501504777332e+00 3.402602894433098e+00 4.682448597821882e+00 9.243146640617026e+03 + 57760 9.997328673283132e-01 -5.968598170804616e+00 -6.003635078788765e+00 3.855284704882333e+00 4.654097357293359e+00 9.228214861732822e+03 + 57780 1.006012698705330e+00 -5.954499490274520e+00 -6.040625002992915e+00 3.884844251385740e+00 4.390298229476700e+00 9.342170351535724e+03 + 57800 9.906342650568428e-01 -5.911135844488461e+00 -6.007257422506256e+00 4.216580983364718e+00 4.664636007620414e+00 9.239321618872542e+03 + 57820 1.024725950716412e+00 -5.944581309409092e+00 -5.975890470029317e+00 4.009857811844733e+00 4.830075766486453e+00 9.143158468044978e+03 + 57840 9.714285191591902e-01 -5.850459286090520e+00 -5.994044098524901e+00 4.512669933239190e+00 4.688183720563061e+00 9.198763686468688e+03 + 57860 1.108915742465107e+00 -6.040685254623445e+00 -6.004530164982844e+00 3.487183861968586e+00 4.694791981666953e+00 9.230968436938134e+03 + 57880 1.004881075419804e+00 -5.879198161706875e+00 -6.072491434510811e+00 4.287150481239037e+00 4.177230596761546e+00 9.440949202579535e+03 + 57900 1.037495323852943e+00 -5.929265741863543e+00 -6.005579819214597e+00 4.119766157198249e+00 4.681558915483190e+00 9.234174760361120e+03 + 57920 1.041116311199739e+00 -5.942022505019296e+00 -6.015270436845870e+00 4.036777038720489e+00 4.616176079091487e+00 9.263956537539587e+03 + 57940 1.038724687709235e+00 -5.951408067019543e+00 -6.004812090936297e+00 3.957368035304772e+00 4.650713865728775e+00 9.231818491355192e+03 + 57960 9.960857835417728e-01 -5.908402194838742e+00 -5.993143797819463e+00 4.205299816352214e+00 4.718700418316240e+00 9.195986702476792e+03 + 57980 9.505022823946647e-01 -5.864365338137638e+00 -5.969656838252953e+00 4.408407139164474e+00 4.803807051695355e+00 9.124117949163701e+03 + 58000 1.076399271851330e+00 -6.078863819395770e+00 -5.992710138597121e+00 3.241830763652230e+00 4.736538531037086e+00 9.194700216822339e+03 + 58020 1.005926385888553e+00 -6.011851237586388e+00 -6.053791314904590e+00 3.620608048830939e+00 4.379781634663835e+00 9.382930124333487e+03 + 58040 1.001047283492316e+00 -6.047165357299381e+00 -5.988845901753745e+00 3.426664936398044e+00 4.761544275047667e+00 9.182848236276090e+03 + 58060 9.877652979066205e-01 -6.064892773178935e+00 -5.976702086534846e+00 3.342752573180662e+00 4.849157143355668e+00 9.145651730253752e+03 + 58080 9.032594114331778e-01 -5.968102668849370e+00 -5.997447273638224e+00 3.893645765320454e+00 4.725144503559934e+00 9.209205604693725e+03 + 58100 9.719758118198240e-01 -6.087138936411355e+00 -6.009889207027286e+00 3.196314043357640e+00 4.639893943837951e+00 9.247449423843163e+03 + 58120 9.584839524515807e-01 -6.079078423876790e+00 -5.984573178269248e+00 3.277693193585621e+00 4.820356938503622e+00 9.169760099018644e+03 + 58140 9.249124612389599e-01 -6.034911076230839e+00 -6.009815517748282e+00 3.516061548218623e+00 4.660164128550589e+00 9.247202731252013e+03 + 58160 9.449142267283563e-01 -6.064431931428130e+00 -5.967428704202793e+00 3.363280952283854e+00 4.920288494212641e+00 9.117317251080829e+03 + 58180 9.274836920299137e-01 -6.030610760538377e+00 -5.983889014765071e+00 3.529712510991764e+00 4.797996005388875e+00 9.167642857998491e+03 + 58200 9.179847522105481e-01 -6.002410882060476e+00 -6.005836431349362e+00 3.657444583643790e+00 4.637774549524964e+00 9.234961681864219e+03 + 58220 1.013024510342217e+00 -6.127840334616860e+00 -5.975833273606940e+00 3.000320632112745e+00 4.873168699448367e+00 9.143014218867347e+03 + 58240 1.005828934401468e+00 -6.101336638062905e+00 -5.948972310432037e+00 3.214827741288038e+00 5.089727288847978e+00 9.061071714400152e+03 + 58260 9.429647307340651e-01 -5.993124102747226e+00 -5.984914480817990e+00 3.751553990054798e+00 4.798694909607363e+00 9.170788918249900e+03 + 58280 9.321972471271022e-01 -5.960847654937502e+00 -6.022935180468163e+00 3.889652458985398e+00 4.533136279374812e+00 9.287571802424962e+03 + 58300 9.769737010219337e-01 -6.010114536823198e+00 -6.039959995677941e+00 3.650367881287829e+00 4.478990637974065e+00 9.340123606360659e+03 + 58320 9.837632761399432e-01 -6.005686910283173e+00 -6.025088690490664e+00 3.661722539957373e+00 4.550314515590174e+00 9.294219248176127e+03 + 58340 1.031535756208099e+00 -6.066773138596636e+00 -5.984388804408360e+00 3.341266742763604e+00 4.814330338607197e+00 9.169194838336231e+03 + 58360 9.275573368976099e-01 -5.903232681967690e+00 -6.015579648850107e+00 4.233919067492256e+00 4.588805398016487e+00 9.264930493092646e+03 + 58380 9.423703664844929e-01 -5.916516060035773e+00 -5.987764006355304e+00 4.158453502309025e+00 4.749336768958217e+00 9.179476237853176e+03 + 58400 1.012294573885812e+00 -6.009187329748126e+00 -6.032512728601686e+00 3.625311415479727e+00 4.491373365668780e+00 9.317092798603922e+03 + 58420 9.478431849003378e-01 -5.904895984255397e+00 -6.014835827822780e+00 4.229701858292442e+00 4.598410263392720e+00 9.262631598916216e+03 + 58440 1.011268602765617e+00 -5.991586683027603e+00 -5.995110244970489e+00 3.804726544419702e+00 4.784493706474202e+00 9.201982419056601e+03 + 58460 1.020847556970670e+00 -5.997277145240524e+00 -5.989265180187004e+00 3.698269005411587e+00 4.744274948596479e+00 9.184125379961786e+03 + 58480 1.026788502911057e+00 -6.000007437327396e+00 -5.996438308248305e+00 3.721031208373689e+00 4.741525699866764e+00 9.206134592969856e+03 + 58500 1.002664944759519e+00 -5.961095445427382e+00 -6.017130087499905e+00 3.919868804809270e+00 4.598109218696006e+00 9.269701097159556e+03 + 58520 1.026020172431052e+00 -5.994661329995901e+00 -6.027878741119370e+00 3.733086924051510e+00 4.542347409002794e+00 9.302824315108483e+03 + 58540 1.035676260524936e+00 -6.009911701950544e+00 -6.031362567018034e+00 3.614236426179470e+00 4.491062239451303e+00 9.313560277394936e+03 + 58560 9.733054121939841e-01 -5.921839790706622e+00 -6.006726244997078e+00 4.100383284114454e+00 4.612952127442310e+00 9.237701507447946e+03 + 58580 9.490813248613714e-01 -5.891813830250243e+00 -6.002337620180184e+00 4.277556234582229e+00 4.642911529303288e+00 9.224202853220073e+03 + 58600 9.940430724713530e-01 -5.965772611233597e+00 -6.024494042448991e+00 3.869525040302903e+00 4.532337495151999e+00 9.292373117608293e+03 + 58620 9.644357271642758e-01 -5.933779491584830e+00 -6.023365734221189e+00 4.060051486828431e+00 4.545633418184218e+00 9.288889303695845e+03 + 58640 1.005755334472315e+00 -6.016687819462007e+00 -6.036574522756470e+00 3.529068851291258e+00 4.414876323517062e+00 9.329671227755129e+03 + 58660 9.889224032260400e-01 -6.027169621335694e+00 -6.003891602404538e+00 3.581513854156959e+00 4.715179841121443e+00 9.228985329903071e+03 + 58680 9.410759285468472e-01 -5.997648130566728e+00 -6.006404047169152e+00 3.703081393345271e+00 4.652803565240435e+00 9.236710875206261e+03 + 58700 9.599436148396296e-01 -6.065356826978618e+00 -5.967035910073171e+00 3.369636398414156e+00 4.934210318397954e+00 9.116140910439275e+03 + 58720 9.496534672262221e-01 -6.083900376559034e+00 -5.998477120291343e+00 3.273111838472800e+00 4.763625395168064e+00 9.212369176615082e+03 + 58740 9.645414318118468e-01 -6.132156332036777e+00 -6.012310725550726e+00 2.970614061821262e+00 4.658786080311828e+00 9.254878439454769e+03 + 58760 9.201101517692554e-01 -6.085165991208918e+00 -5.982496841209803e+00 3.205836982351012e+00 4.795379129645545e+00 9.163402412615456e+03 + 58780 9.683386134928132e-01 -6.165054077136232e+00 -5.941152596657636e+00 2.813184027179356e+00 5.098860976729581e+00 9.037295148947767e+03 + 58800 8.944430554896183e-01 -6.054928317182882e+00 -5.942066541737340e+00 3.397226265002083e+00 5.045296044913693e+00 9.040062660688436e+03 + 58820 8.675805357832946e-01 -6.004751785173260e+00 -5.983018935618515e+00 3.632580252008828e+00 4.757373637299779e+00 9.164970468685849e+03 + 58840 9.598704907954412e-01 -6.121242106256878e+00 -5.957341362918162e+00 3.037795595125485e+00 4.978939026934453e+00 9.086523464139314e+03 + 58860 9.641407077146225e-01 -6.096997399929053e+00 -5.991998439987800e+00 3.153677160613374e+00 4.756597437132585e+00 9.192505935701876e+03 + 58880 9.643116264362642e-01 -6.061704028074330e+00 -5.986670350532929e+00 3.314061384081984e+00 4.744916371948785e+00 9.176184745118728e+03 + 58900 9.064691527858670e-01 -5.939735337241417e+00 -5.986646578479452e+00 3.999956246836992e+00 4.730584640157073e+00 9.176099231407568e+03 + 58920 1.034051363937244e+00 -6.094063259796147e+00 -5.985015968351875e+00 3.183912664158048e+00 4.810079086644873e+00 9.171111893869485e+03 + 58940 1.000784109659022e+00 -6.016194749275673e+00 -5.976128577891124e+00 3.651232078686731e+00 4.881298234996799e+00 9.143901083176794e+03 + 58960 1.039400951634418e+00 -6.052267542273590e+00 -6.002353876937832e+00 3.423517956504809e+00 4.710129946977481e+00 9.224272720629713e+03 + 58980 1.056951161040194e+00 -6.063285739511778e+00 -5.990225681168238e+00 3.357321608383203e+00 4.776843769399296e+00 9.187092530375601e+03 + 59000 9.958809855658596e-01 -5.962985394757744e+00 -6.009177729940236e+00 3.912023089404509e+00 4.646779552545870e+00 9.245249112214638e+03 + 59020 9.783177626942990e-01 -5.930291408518323e+00 -6.058598082222668e+00 4.100465045998412e+00 4.363708270194476e+00 9.397797623872819e+03 + 59040 1.015698865069285e+00 -5.982279992042273e+00 -6.026598550735181e+00 3.813574479644443e+00 4.559090457354973e+00 9.298877836689613e+03 + 59060 1.015680384129265e+00 -5.981517031168232e+00 -6.019994412406600e+00 3.785373701788907e+00 4.564430624362694e+00 9.278531303694637e+03 + 59080 1.028755303407844e+00 -6.001524257594443e+00 -6.017051357261577e+00 3.684158967467974e+00 4.594999958368385e+00 9.269475975089128e+03 + 59100 1.059759089702097e+00 -6.049823941142697e+00 -6.011879805595534e+00 3.431338526420405e+00 4.649219624568219e+00 9.253584089159702e+03 + 59120 9.801052347370552e-01 -5.940006957286903e+00 -6.031376359155289e+00 4.029370540019864e+00 4.504713295122344e+00 9.313613743784819e+03 + 59140 9.487465569433818e-01 -5.902336795489122e+00 -6.063024942034184e+00 4.123126014954376e+00 4.200429811082316e+00 9.411537507815916e+03 + 59160 1.008448324921810e+00 -6.001579468786293e+00 -5.998780143773669e+00 3.690835444902571e+00 4.706909602319202e+00 9.213314726614200e+03 + 59180 1.039918628503567e+00 -6.059723622447883e+00 -5.993142399172604e+00 3.423495328145849e+00 4.805815015603500e+00 9.196020660431866e+03 + 59200 9.866708949157019e-01 -5.997824689834903e+00 -6.019836061212965e+00 3.692915389139434e+00 4.566522688437886e+00 9.278071702578080e+03 + 59220 1.008163024596283e+00 -6.050061440522176e+00 -5.989287166151563e+00 3.414301055537558e+00 4.763276343762188e+00 9.184195297528147e+03 + 59240 9.583052444291630e-01 -6.000175453310914e+00 -5.948381623522613e+00 3.741589487945884e+00 5.038997673659564e+00 9.059242582655219e+03 + 59260 1.000496072776032e+00 -6.087291351202121e+00 -5.955398628182101e+00 3.245519831266229e+00 5.002868257180110e+00 9.080629934248949e+03 + 59280 1.000915292778944e+00 -6.117042481996833e+00 -5.961543585930920e+00 3.073653308424175e+00 4.966552033011041e+00 9.099382363421868e+03 + 59300 9.320119720417929e-01 -6.046080898130620e+00 -5.982054901619715e+00 3.464303586474574e+00 4.831950766431131e+00 9.162040872291556e+03 + 59320 8.925925370362344e-01 -6.016641607865853e+00 -5.997131742667202e+00 3.605498076029320e+00 4.717526741141853e+00 9.208256366699141e+03 + 59340 9.822228909330101e-01 -6.174319459293407e+00 -5.980854013052516e+00 2.761477228700336e+00 4.872385759696582e+00 9.158378968688852e+03 + 59360 9.786972168950439e-01 -6.190080887123922e+00 -5.939584071431471e+00 2.679945334147144e+00 5.118336814110144e+00 9.032528756724874e+03 + 59380 8.936717248503367e-01 -6.076724278836729e+00 -5.994237375102617e+00 3.257073754305357e+00 4.730726320353726e+00 9.199368825903453e+03 + 59400 9.509449113142381e-01 -6.166756597434548e+00 -5.967366534341311e+00 2.851787254408953e+00 4.996715852202861e+00 9.117166804145554e+03 + 59420 8.678736947766870e-01 -6.041145366325354e+00 -5.991430583979224e+00 3.453369561742953e+00 4.738839535312135e+00 9.190764945378487e+03 + 59440 9.483802580718994e-01 -6.146504210685661e+00 -5.948552562866452e+00 2.913105127330984e+00 5.049774122027378e+00 9.059804213489115e+03 + 59460 8.792292486754552e-01 -6.011356117168795e+00 -6.014255731852828e+00 3.626322605137725e+00 4.609672568908087e+00 9.260830574572230e+03 + 59480 1.010338792936593e+00 -6.155495850086938e+00 -5.979704361163775e+00 2.897787235423469e+00 4.907209168465262e+00 9.154851290442693e+03 + 59500 9.491484385219364e-01 -6.006471842061510e+00 -6.008886209163663e+00 3.656958016999332e+00 4.643094347476666e+00 9.244344161279045e+03 + 59520 9.499864699059760e-01 -5.960353878910550e+00 -6.046467222800006e+00 3.910953048421840e+00 4.416476901811686e+00 9.360247901990640e+03 + 59540 9.885921332821541e-01 -5.982769937957406e+00 -6.012287250441438e+00 3.807965045500434e+00 4.638472069427778e+00 9.254821807796765e+03 + 59560 9.968823989160316e-01 -5.972316026103670e+00 -6.028909287078861e+00 3.832939596892417e+00 4.507972334594041e+00 9.305999259800807e+03 + 59580 1.085372498665647e+00 -6.089844978811223e+00 -5.957583417299832e+00 3.243002348695980e+00 5.002468702304879e+00 9.087287218151723e+03 + 59600 9.633819806744103e-01 -5.900375027905479e+00 -5.959377441742014e+00 4.223140445345548e+00 4.884339454502132e+00 9.092734102612614e+03 + 59620 9.561697533826122e-01 -5.879174176885371e+00 -6.018247706134918e+00 4.367068984971281e+00 4.568487258461288e+00 9.273069450929030e+03 + 59640 1.019967247191937e+00 -5.963671404926610e+00 -5.981968501476847e+00 3.888312814608924e+00 4.783248054750924e+00 9.161781223086622e+03 + 59660 1.016001185246944e+00 -5.952222357601446e+00 -5.994248049449993e+00 3.962461925505065e+00 4.721143899455911e+00 9.199381675843109e+03 + 59680 1.068377258379176e+00 -6.026000026786372e+00 -5.983006010612563e+00 3.575240021898838e+00 4.822118316071348e+00 9.164946113578577e+03 + 59700 9.654187849492624e-01 -5.873070920104716e+00 -6.046905665485152e+00 4.412499352331275e+00 4.414313343516905e+00 9.361580205625285e+03 + 59720 1.037461749301269e+00 -5.982713172664191e+00 -6.015460497107250e+00 3.776644568395269e+00 4.588604363811148e+00 9.264572222055243e+03 + 59740 1.060344672568465e+00 -6.023079073233118e+00 -5.981475377867469e+00 3.537448852359108e+00 4.776343709299723e+00 9.160281975950631e+03 + 59760 1.047311608676578e+00 -6.016953019439373e+00 -5.980545391057571e+00 3.617910063749931e+00 4.826968299980515e+00 9.157424169788903e+03 + 59780 1.058899856119250e+00 -6.050023798514513e+00 -5.997940966957498e+00 3.444445511713078e+00 4.743513190305594e+00 9.210730023193502e+03 + 59800 9.551154484251290e-01 -5.915810396148823e+00 -6.007076556346243e+00 4.186527192929419e+00 4.662462777683182e+00 9.238773058164890e+03 + 59820 9.930531126987272e-01 -5.993509323791945e+00 -6.002979665279788e+00 3.712104459881503e+00 4.657724293527699e+00 9.226191835371526e+03 + 59840 1.051511610956686e+00 -6.105617806842254e+00 -5.991305923909244e+00 3.128348538133291e+00 4.784745059641347e+00 9.190400502258355e+03 + 59860 9.311161406033018e-01 -5.956971656025754e+00 -6.028132295863152e+00 3.907560905811055e+00 4.498945499791290e+00 9.303617809684900e+03 + 59880 9.712275494533898e-01 -6.046674781510689e+00 -6.015834647246673e+00 3.377516015348504e+00 4.554604838787840e+00 9.265735467609205e+03 + 59900 9.300920790646831e-01 -6.012921684602676e+00 -5.996371773710299e+00 3.604488263361513e+00 4.699520412795977e+00 9.205912250962991e+03 + 59920 9.334936013493887e-01 -6.037594149772793e+00 -6.020764718871918e+00 3.487550706295017e+00 4.584187902873854e+00 9.280915353924094e+03 + 59940 9.561050379509840e-01 -6.087110529347389e+00 -6.045363754813770e+00 3.204277610225582e+00 4.443994049890104e+00 9.356862134396924e+03 + 59960 9.105111103037776e-01 -6.034796244308469e+00 -5.985211485420075e+00 3.547179192066802e+00 4.831902550820593e+00 9.171710393016107e+03 + 59980 9.339628103071459e-01 -6.078452115336090e+00 -5.963848220197885e+00 3.271896649650429e+00 4.929969950429454e+00 9.106394129682360e+03 + 60000 9.326356079547117e-01 -6.076553530357597e+00 -5.986886874080894e+00 3.272636214467297e+00 4.787516030678343e+00 9.176841729716281e+03 + 60020 9.082549899239701e-01 -6.031901949207639e+00 -5.990108052662265e+00 3.487903041157142e+00 4.727890062705267e+00 9.186694923171002e+03 + 60040 9.471039857281653e-01 -6.069789477969184e+00 -5.939908087267364e+00 3.298143850731321e+00 5.043942895221427e+00 9.033496321762917e+03 + 60060 9.589293025517928e-01 -6.048652836483151e+00 -5.956963165129356e+00 3.438804290582639e+00 4.965300572426919e+00 9.085400803977478e+03 + 60080 9.745656886241997e-01 -6.012631037511982e+00 -6.004326161240376e+00 3.568845401770801e+00 4.616533286497807e+00 9.230347568211047e+03 + 60100 1.050111577279047e+00 -6.060391578023852e+00 -5.997750237555873e+00 3.357478786001105e+00 4.717175056684350e+00 9.210149639579291e+03 + 60120 9.991363128129627e-01 -5.936553674139247e+00 -5.993318461114309e+00 4.018024606069495e+00 4.692072414936292e+00 9.196532369842869e+03 + 60140 9.979504858944885e-01 -5.905986526557367e+00 -6.023992392416011e+00 4.096189926494700e+00 4.418581983385641e+00 9.290826281514162e+03 + 60160 1.064208231811221e+00 -5.987754920050626e+00 -5.983601665162109e+00 3.740509965034784e+00 4.764358597318768e+00 9.166777037742200e+03 + 60180 9.847299662027588e-01 -5.861195841722440e+00 -6.012960956763258e+00 4.385205615854266e+00 4.513746839714234e+00 9.256871173795189e+03 + 60200 1.036102566391551e+00 -5.931644602859085e+00 -6.023010252127620e+00 4.037311163437560e+00 4.512675466549100e+00 9.287810531170577e+03 + 60220 1.057810846715224e+00 -5.965013118953214e+00 -6.020828686383574e+00 3.835966967196811e+00 4.515465341580539e+00 9.281094090784252e+03 + 60240 1.013168124050836e+00 -5.904765462436835e+00 -6.041869169084322e+00 4.215987930373879e+00 4.428717230073975e+00 9.346027712285035e+03 + 60260 1.044149145393432e+00 -5.963109428689067e+00 -6.047182331151114e+00 3.895229714719647e+00 4.412470098542963e+00 9.362452628713394e+03 + 60280 1.005106131081343e+00 -5.923896061180303e+00 -6.011837385250484e+00 4.120637204041472e+00 4.615664512354576e+00 9.253417720376956e+03 + 60300 9.984667867805197e-01 -5.936055962849261e+00 -6.035219365889242e+00 4.037269262298496e+00 4.467857656555898e+00 9.325456193625821e+03 + 60320 1.005975232630111e+00 -5.973260544544568e+00 -6.000911432250216e+00 3.869297757990165e+00 4.710522081823290e+00 9.219835165051785e+03 + 60340 1.019077907479947e+00 -6.017982038681300e+00 -5.997533530929275e+00 3.631414929853293e+00 4.748833425761767e+00 9.209479370219547e+03 + 60360 9.805548382832275e-01 -5.988209943574650e+00 -5.998217817850090e+00 3.753674986402316e+00 4.696208223599197e+00 9.211581763027234e+03 + 60380 1.053432836783597e+00 -6.122074121080716e+00 -5.976228940911843e+00 3.101764619911388e+00 4.939230213909742e+00 9.144218562040789e+03 + 60400 9.440806495202885e-01 -5.983200287142159e+00 -5.979633108752109e+00 3.837282619340406e+00 4.857765909675140e+00 9.154624518589120e+03 + 60420 9.111214437473398e-01 -5.951541131968829e+00 -5.994635894705891e+00 3.971889899151186e+00 4.724433102621996e+00 9.200584343955530e+03 + 60440 9.743086191279530e-01 -6.056845491958948e+00 -6.023629971274188e+00 3.329211454325692e+00 4.519940114182799e+00 9.289744532695364e+03 + 60460 9.854420286509262e-01 -6.082981635755663e+00 -5.983396114820446e+00 3.308497841943468e+00 4.880333313963046e+00 9.166144717710977e+03 + 60480 9.606695602149672e-01 -6.051046765172395e+00 -5.949331417438604e+00 3.440266740845565e+00 5.024332007932180e+00 9.062181043051190e+03 + 60500 9.906414297138281e-01 -6.093154316509323e+00 -5.985890004335680e+00 3.234540747303890e+00 4.850469026903609e+00 9.173785513634541e+03 + 60520 9.618420731760928e-01 -6.043599094937499e+00 -6.030361631749406e+00 3.460910255594978e+00 4.536921817711818e+00 9.310498183958738e+03 + 60540 9.710088313828686e-01 -6.046901908271585e+00 -6.007481463843847e+00 3.413746601051358e+00 4.640104893249486e+00 9.240028161186297e+03 + 60560 9.491149361449821e-01 -5.995480493545756e+00 -6.010297906358645e+00 3.686738056804310e+00 4.601654179445483e+00 9.248705737198368e+03 + 60580 1.007394530280685e+00 -6.052227879749315e+00 -5.990911131362481e+00 3.441734517285489e+00 4.793824775258836e+00 9.189171192572167e+03 + 60600 9.611969896720821e-01 -5.941787638136677e+00 -6.025172587094395e+00 4.010703765718648e+00 4.531894485024282e+00 9.294478855984718e+03 + 60620 1.014839505829820e+00 -5.962893584689844e+00 -6.020615291689129e+00 3.885491208898184e+00 4.554044234902998e+00 9.280443654059600e+03 + 60640 1.050016015090035e+00 -5.955686080869675e+00 -6.039069172979191e+00 3.939880009184594e+00 4.461081390799952e+00 9.337368670361599e+03 + 60660 1.072695266133326e+00 -5.946071673111667e+00 -6.046835123419465e+00 3.999697029364278e+00 4.421097704603361e+00 9.361353501720638e+03 + 60680 1.119370355321477e+00 -5.991959901488542e+00 -6.019242229449417e+00 3.751675437779045e+00 4.595016088701094e+00 9.276216987538892e+03 + 60700 1.048458995862748e+00 -5.877990616601041e+00 -6.005188805867933e+00 4.361883449504436e+00 4.631491762877769e+00 9.232971583365386e+03 + 60720 1.007334225519496e+00 -5.815737954414548e+00 -6.030186998645957e+00 4.658594211155034e+00 4.427194613295942e+00 9.309916264591284e+03 + 60740 1.102879853041884e+00 -5.962781395334816e+00 -6.049391315785254e+00 3.870668351516370e+00 4.373340785448081e+00 9.369303129082127e+03 + 60760 1.077549412384116e+00 -5.942368703125942e+00 -6.042217249351811e+00 4.030205621429189e+00 4.456859817487653e+00 9.347082386942226e+03 + 60780 1.038233494629653e+00 -5.907025607581639e+00 -5.968615301830698e+00 4.234634284103359e+00 4.880976728750882e+00 9.120938911205194e+03 + 60800 1.022007782059748e+00 -5.907036662128790e+00 -6.012248048835870e+00 4.168652441859772e+00 4.564512377978245e+00 9.254663859324655e+03 + 60820 1.027832883578764e+00 -5.941293438085149e+00 -5.983747577932228e+00 4.014671042784137e+00 4.770892802025304e+00 9.167199302213297e+03 + 60840 1.062018379781630e+00 -6.016580835731190e+00 -5.967294361530313e+00 3.592389009995081e+00 4.875399571913750e+00 9.116890254416958e+03 + 60860 1.047770365968525e+00 -6.019979317520511e+00 -5.975929378528663e+00 3.609974826155185e+00 4.862916392552401e+00 9.143264077823282e+03 + 60880 9.353579639879310e-01 -5.875026602768679e+00 -6.018833445366045e+00 4.353842608854288e+00 4.528081464623245e+00 9.274941551961023e+03 + 60900 1.015387962721038e+00 -6.012253096118938e+00 -6.016615548037507e+00 3.630285864151996e+00 4.605235990148325e+00 9.268118673429000e+03 + 60920 9.651700581957866e-01 -5.956344342323308e+00 -6.029404086742044e+00 3.908369356666696e+00 4.488848998255405e+00 9.307546852097896e+03 + 60940 1.012878788338464e+00 -6.041850375282624e+00 -5.988854984234290e+00 3.497314655135134e+00 4.801622391544923e+00 9.182882497017346e+03 + 60960 1.031599605384278e+00 -6.082213215242061e+00 -6.010330507723271e+00 3.263549382133250e+00 4.676311012519180e+00 9.248803542966749e+03 + 60980 9.211229854860442e-01 -5.930613383486815e+00 -6.039761037330304e+00 4.050086498507375e+00 4.423343779593218e+00 9.339529111484531e+03 + 61000 9.796881789077424e-01 -6.026141098717870e+00 -5.988437627613825e+00 3.583955715853704e+00 4.800454881526431e+00 9.181584749405672e+03 + 61020 9.219623155876951e-01 -5.944960836244091e+00 -6.013030849323743e+00 3.955332785818956e+00 4.564464236915115e+00 9.257085542856787e+03 + 61040 1.005855475444968e+00 -6.070466029320415e+00 -5.967646796552494e+00 3.304668195234410e+00 4.895072141012659e+00 9.117989627950099e+03 + 61060 1.050138920563730e+00 -6.133105780198076e+00 -5.959852464321712e+00 3.029428840962315e+00 5.024276191588376e+00 9.094227399228574e+03 + 61080 1.027119239866936e+00 -6.096662741385543e+00 -5.964508802335668e+00 3.228242472033446e+00 4.987090840813805e+00 9.108424741209948e+03 + 61100 9.518633792054130e-01 -5.980414565805518e+00 -5.942418264382932e+00 3.859672322553151e+00 5.077852965230279e+00 9.041121064500581e+03 + 61120 9.421724324883870e-01 -5.955593692989001e+00 -6.008108780955716e+00 3.899395503457149e+00 4.597845741668671e+00 9.241931746407401e+03 + 61140 9.476655976629762e-01 -5.946506350874446e+00 -6.002676982233635e+00 3.991336994042750e+00 4.668796536401178e+00 9.225278560682287e+03 + 61160 1.005325117732789e+00 -6.006942755019475e+00 -5.991247613920590e+00 3.650861483241983e+00 4.740985412247013e+00 9.190198726650309e+03 + 61180 1.004977007394602e+00 -5.971896597783632e+00 -6.014559201422663e+00 3.808111362545284e+00 4.563136090433392e+00 9.261789210949803e+03 + 61200 1.073480155052599e+00 -6.022199744548899e+00 -5.993942309697625e+00 3.556087810138170e+00 4.718346373878095e+00 9.198474164826795e+03 + 61220 1.060395678844813e+00 -5.943947422254252e+00 -6.035923209058437e+00 3.943175596275157e+00 4.415036395238518e+00 9.327648628587121e+03 + 61240 1.051605935095988e+00 -5.873421447657885e+00 -6.001009493487530e+00 4.341348237581209e+00 4.608717934241104e+00 9.220122082356038e+03 + 61260 1.014090196215956e+00 -5.774257010686015e+00 -6.024904443819096e+00 4.899574325213547e+00 4.460317976598471e+00 9.293593854143663e+03 + 61280 1.111006791215841e+00 -5.892138778860734e+00 -5.987255059058262e+00 4.251228113563866e+00 4.705055713472867e+00 9.177937828181412e+03 + 61300 1.049066666422557e+00 -5.790393121097853e+00 -6.040587749045264e+00 4.818445559524850e+00 4.381789288357275e+00 9.342050805507297e+03 + 61320 1.182736536710780e+00 -5.992398216171536e+00 -6.004894274336925e+00 3.761471017810316e+00 4.689716718065903e+00 9.232086057682620e+03 + 61340 1.099718567809540e+00 -5.886918439817529e+00 -6.021995747879867e+00 4.316584347614694e+00 4.540949541574883e+00 9.284697445942962e+03 + 61360 1.093641355225546e+00 -5.900146037802878e+00 -6.052134989463049e+00 4.192156910877176e+00 4.319412830230223e+00 9.377773011282976e+03 + 61380 1.119371762376638e+00 -5.965445136945090e+00 -6.019184528309919e+00 3.884432517940150e+00 4.575852616579359e+00 9.276050003366863e+03 + 61400 1.052169609283154e+00 -5.899794667216999e+00 -6.039313376301611e+00 4.248773054912367e+00 4.447635036898071e+00 9.338115449034001e+03 + 61420 1.056596232957568e+00 -5.939574275409563e+00 -6.027572206871184e+00 4.036011384589248e+00 4.530713644500736e+00 9.301896415465875e+03 + 61440 1.092389403068731e+00 -6.026046338241717e+00 -5.993312294811931e+00 3.556683646588066e+00 4.744647589538749e+00 9.196542179243579e+03 + 61460 9.894303426633724e-01 -5.902772627253678e+00 -5.988132039371454e+00 4.275468934533507e+00 4.785321980826902e+00 9.180640023206690e+03 + 61480 1.002117612477918e+00 -5.944865855688568e+00 -6.006744675359065e+00 3.966866734500864e+00 4.611548976236474e+00 9.237739433257440e+03 + 61500 1.042803169699456e+00 -6.024951303766385e+00 -6.020703795289689e+00 3.563964698202195e+00 4.588354549175195e+00 9.280728182909759e+03 + 61520 1.093314720838085e+00 -6.122292683417463e+00 -6.016407329242061e+00 3.003032416193748e+00 4.611042505574506e+00 9.267513486630025e+03 + 61540 1.006645636893841e+00 -6.018573819905805e+00 -6.001021835103591e+00 3.600655049604654e+00 4.701441262499831e+00 9.220177929869897e+03 + 61560 9.345499833352101e-01 -5.932021769529269e+00 -5.981876071710351e+00 4.100433106380009e+00 4.814161988327909e+00 9.161451404017031e+03 + 61580 9.958636017601727e-01 -6.037301876911618e+00 -5.941226312260438e+00 3.501089206077693e+00 5.052769965950349e+00 9.037502310713999e+03 + 61600 9.188438133666438e-01 -5.931217229650757e+00 -5.986651474421728e+00 4.058837686042794e+00 4.740525674146228e+00 9.176121636575939e+03 + 61620 1.001248762200739e+00 -6.057340674030399e+00 -6.020693105126335e+00 3.364077910058467e+00 4.574513921898567e+00 9.280677707862375e+03 + 61640 1.029916542576110e+00 -6.102360149968993e+00 -5.989777302431670e+00 3.162749491517002e+00 4.809217624215659e+00 9.185701853494915e+03 + 61660 9.694615536529152e-01 -6.015846099566195e+00 -6.024713645647333e+00 3.579381329618545e+00 4.528462507772330e+00 9.293064714370934e+03 + 61680 9.864504577856739e-01 -6.043833456124684e+00 -5.976676375501144e+00 3.450534906166751e+00 4.836161255631757e+00 9.145588768237598e+03 + 61700 9.553350790039336e-01 -5.994246771243653e+00 -6.030353901881091e+00 3.699374827054574e+00 4.492042095374002e+00 9.310452051636210e+03 + 61720 9.449258183792295e-01 -5.973296389136583e+00 -6.005891240389476e+00 3.865634207672111e+00 4.678469527741074e+00 9.235115380297195e+03 + 61740 9.803583215159333e-01 -6.015820894218590e+00 -5.974685661520995e+00 3.668371505362269e+00 4.904576377168544e+00 9.139479992816658e+03 + 61760 1.024934585641631e+00 -6.063931966926279e+00 -5.973403013695261e+00 3.365510304919900e+00 4.885341563682637e+00 9.135605054751508e+03 + 61780 1.053036280692463e+00 -6.079157652587177e+00 -5.988275767738372e+00 3.264995424360284e+00 4.786853271088346e+00 9.181075025029904e+03 + 61800 9.829226760819189e-01 -5.942664881518653e+00 -6.009825452759612e+00 4.040203423499570e+00 4.654557030369173e+00 9.247214531297353e+03 + 61820 1.037986424399148e+00 -5.984374079973818e+00 -5.973052088178509e+00 3.781196730579395e+00 4.846209359540625e+00 9.134507745804895e+03 + 61840 1.042104754115736e+00 -5.946503162648386e+00 -6.003751777888934e+00 3.982704725784891e+00 4.653974317879092e+00 9.228569502368411e+03 + 61860 1.067509056410986e+00 -5.945535544555412e+00 -6.019858688216872e+00 3.980187597727642e+00 4.553412605354229e+00 9.278099795764236e+03 + 61880 1.029515798354857e+00 -5.859229579961484e+00 -6.033312674419276e+00 4.444736692685390e+00 4.445124625036949e+00 9.319612701714856e+03 + 61900 1.141344741310598e+00 -6.008034631700263e+00 -6.025522025155319e+00 3.615476182652930e+00 4.515060863268609e+00 9.295562601513226e+03 + 61920 1.065136092349673e+00 -5.888239003200082e+00 -6.040642823780544e+00 4.259268464061610e+00 4.384142141873588e+00 9.342226528817821e+03 + 61940 9.987893751008103e-01 -5.793682152696769e+00 -6.064621280751471e+00 4.800644959236443e+00 4.244870558251788e+00 9.416485359430086e+03 + 61960 1.119082207095418e+00 -5.985123332760330e+00 -6.015514703131416e+00 3.829553899214146e+00 4.655041947494005e+00 9.264736509970477e+03 + 61980 1.033188472321082e+00 -5.882455842158323e+00 -6.030283729440821e+00 4.367927823621811e+00 4.519077218554082e+00 9.310235737964213e+03 + 62000 1.095172582141058e+00 -6.003633994266933e+00 -5.990765851514809e+00 3.695839447578575e+00 4.769730314599928e+00 9.188712661515037e+03 + 62020 1.013766400857933e+00 -5.917169885208084e+00 -5.993055539590889e+00 4.136164032920583e+00 4.700416862187449e+00 9.195745410340076e+03 + 62040 9.833814838985087e-01 -5.901867246834272e+00 -6.033407149413845e+00 4.219066239213107e+00 4.463743762867060e+00 9.319865873810304e+03 + 62060 9.232744067696529e-01 -5.838437632843046e+00 -6.060400526538004e+00 4.520014587246910e+00 4.245469303003675e+00 9.403371456344574e+03 + 62080 1.067800531141307e+00 -6.074083093573461e+00 -5.981436855789848e+00 3.238185270418877e+00 4.770174304731345e+00 9.160154113687877e+03 + 62100 1.001618554581549e+00 -5.990077456146822e+00 -6.045855820604262e+00 3.694427519601059e+00 4.374139519212432e+00 9.358361356606802e+03 + 62120 1.103996603347696e+00 -6.154469137182450e+00 -5.941129333541703e+00 2.901222593434167e+00 5.126252760167253e+00 9.037227004131721e+03 + 62140 1.023491611478847e+00 -6.043240727990319e+00 -6.012460461789459e+00 3.473771621801052e+00 4.650516673557187e+00 9.255335659914041e+03 + 62160 9.778317882328085e-01 -5.983385290082311e+00 -6.038585533450189e+00 3.734599301629169e+00 4.417630962000759e+00 9.335876915553396e+03 + 62180 9.459327274506478e-01 -5.941956817178966e+00 -6.054717552351121e+00 3.955335641063033e+00 4.307846050037145e+00 9.385783345135143e+03 + 62200 9.454884344079292e-01 -5.945126773794835e+00 -6.035196535721229e+00 3.937742168279464e+00 4.420547657047496e+00 9.325426904862139e+03 + 62220 9.872919160739323e-01 -6.010367863494485e+00 -5.976743369628855e+00 3.705395078661452e+00 4.898472125811514e+00 9.145798200440675e+03 + 62240 9.909092868996452e-01 -6.016748356760095e+00 -6.010050107111287e+00 3.608945222706521e+00 4.647407608740762e+00 9.247929211579731e+03 + 62260 1.026008594964891e+00 -6.070386604680373e+00 -6.012162448532495e+00 3.285161895198021e+00 4.619494009958187e+00 9.254430707301744e+03 + 62280 9.769901480224044e-01 -5.999644758640054e+00 -5.991403915490690e+00 3.694120998615567e+00 4.741441195245567e+00 9.190655430735773e+03 + 62300 9.593415937376595e-01 -5.975189677885592e+00 -5.961200601146051e+00 3.852747051972373e+00 4.933074495413448e+00 9.098278769273636e+03 + 62320 9.412831322453625e-01 -5.945806545413086e+00 -5.942014030191040e+00 3.983535099067260e+00 5.005312308362084e+00 9.039849671295615e+03 + 62340 9.463177085193605e-01 -5.943694900369366e+00 -5.916506906109714e+00 4.038086761951024e+00 5.194204432318467e+00 8.962439345227185e+03 + 62360 1.006943557923969e+00 -6.014613893138720e+00 -5.948628483197519e+00 3.592836584618837e+00 4.971735019710403e+00 9.059995175013557e+03 + 62380 9.965566031564339e-01 -5.971208172570700e+00 -5.983382452146556e+00 3.860506050306090e+00 4.790599453017850e+00 9.166096260046679e+03 + 62400 9.944976981697846e-01 -5.936866577848943e+00 -5.994045686986631e+00 4.064745403508277e+00 4.736414110401134e+00 9.198762522456778e+03 + 62420 1.015894981100166e+00 -5.930741561645382e+00 -6.061938010278445e+00 4.002622614803411e+00 4.249272304167552e+00 9.408136840152114e+03 + 62440 1.037669063384203e+00 -5.926688561315016e+00 -6.001284781187461e+00 4.074480065760626e+00 4.646137027525328e+00 9.220963546749343e+03 + 62460 1.035992279573005e+00 -5.890208169940077e+00 -5.976721939414675e+00 4.317094910533779e+00 4.820319458248074e+00 9.145717288913607e+03 + 62480 1.066995588480791e+00 -5.905177099966295e+00 -6.039393681191653e+00 4.221650006811007e+00 4.450957627466185e+00 9.338354277081216e+03 + 62500 1.081294896306551e+00 -5.906622024378319e+00 -6.005496963597978e+00 4.149884853198679e+00 4.582129651352004e+00 9.233929347377287e+03 + 62520 1.106087681364176e+00 -5.932649874268967e+00 -6.005536300181316e+00 4.089968674559200e+00 4.671443537832542e+00 9.234043283701332e+03 + 62540 1.061937596909736e+00 -5.867343849235407e+00 -6.021100268975403e+00 4.405579726002757e+00 4.522686570126646e+00 9.281921140168261e+03 + 62560 1.089823767824810e+00 -5.919165954942680e+00 -6.035854003176727e+00 4.091170316780468e+00 4.421129486403466e+00 9.327421246697058e+03 + 62580 1.089429250016763e+00 -5.940359534443325e+00 -5.988055297367142e+00 3.968202833811559e+00 4.694326382207546e+00 9.180418790171363e+03 + 62600 9.684034447745520e-01 -5.795288751506830e+00 -6.032038383437884e+00 4.760050896083818e+00 4.400597872648574e+00 9.315629622684044e+03 + 62620 1.023458966542059e+00 -5.919625514277941e+00 -5.990997749239352e+00 4.141335005715377e+00 4.731504587749291e+00 9.189416442487882e+03 + 62640 1.025370736275058e+00 -5.969763788243594e+00 -5.981946137106796e+00 3.882837306844079e+00 4.812884374459180e+00 9.161679096948954e+03 + 62660 1.018772072729489e+00 -6.001847704842594e+00 -5.948995227049875e+00 3.749527469746766e+00 5.053014576127062e+00 9.061143529508119e+03 + 62680 9.806772337940259e-01 -5.977032718697505e+00 -6.020839424891445e+00 3.766474570006991e+00 4.514929683975510e+00 9.281124265863398e+03 + 62700 9.413686363415079e-01 -5.936659276371264e+00 -6.013150613264209e+00 4.052481320013379e+00 4.613256226577961e+00 9.257440097904853e+03 + 62720 9.974636241998932e-01 -6.029915719029262e+00 -5.961674628244488e+00 3.564414670123375e+00 4.956265573684218e+00 9.099763099819176e+03 + 62740 9.761842146170331e-01 -6.002310068539187e+00 -5.993186938703166e+00 3.672421069661672e+00 4.724807492979881e+00 9.196088726555505e+03 + 62760 1.007785924344952e+00 -6.050324024961209e+00 -5.954685644649416e+00 3.477515530163222e+00 5.026685909905062e+00 9.078441954889087e+03 + 62780 9.888615018315380e-01 -6.019881209454237e+00 -5.973346598973175e+00 3.560203637828158e+00 4.827412572418112e+00 9.135403517860543e+03 + 62800 9.885952686534178e-01 -6.015196980243180e+00 -5.967416375979278e+00 3.657345739236780e+00 4.931709362944721e+00 9.117270870415578e+03 + 62820 1.036042704347277e+00 -6.079668317300062e+00 -5.989382685570827e+00 3.249897155497055e+00 4.768331224542677e+00 9.184469976219269e+03 + 62840 9.739512620619610e-01 -5.980101306436664e+00 -5.993292704939732e+00 3.780054883084091e+00 4.704307831517152e+00 9.196469608532176e+03 + 62860 9.761988946756960e-01 -5.975482683596345e+00 -6.005286135414658e+00 3.812065900588540e+00 4.640929868178523e+00 9.233283470550436e+03 + 62880 9.819470639997621e-01 -5.973754484528095e+00 -5.991552520217201e+00 3.846532935913688e+00 4.744333860749723e+00 9.191137069803890e+03 + 62900 1.011465636982320e+00 -6.003650993732537e+00 -6.032213412666207e+00 3.643426766675158e+00 4.479416937137976e+00 9.316205611311634e+03 + 62920 9.826653895523108e-01 -5.948538643841617e+00 -6.035554461044709e+00 3.977253483924385e+00 4.477595195890032e+00 9.326510802120034e+03 + 62940 1.024434483149470e+00 -5.999444653233049e+00 -6.029627323946122e+00 3.675526793305200e+00 4.502213227317539e+00 9.308231215691580e+03 + 62960 9.793616201459322e-01 -5.922110440194682e+00 -6.058270554341453e+00 4.120225880952586e+00 4.338373434812262e+00 9.396797822500601e+03 + 62980 1.025464946994930e+00 -5.981982622067201e+00 -6.007011028241269e+00 3.783373333739442e+00 4.639656352354602e+00 9.238591054828727e+03 + 63000 1.008704979515388e+00 -5.948694321433669e+00 -6.013462780682228e+00 3.924918803093109e+00 4.553008287201205e+00 9.258432086525905e+03 + 63020 1.071658360818167e+00 -6.034758728509550e+00 -6.001950532944242e+00 3.516961674531943e+00 4.705351410519799e+00 9.223044690914267e+03 + 63040 1.065330843849768e+00 -6.021043935566416e+00 -6.013970172031030e+00 3.584632876260151e+00 4.625251521141706e+00 9.259993200562163e+03 + 63060 1.042154054848827e+00 -5.988421074965594e+00 -6.006150809281766e+00 3.785569717028937e+00 4.683762838917961e+00 9.235931851231813e+03 + 63080 1.027932012205127e+00 -5.973203619287779e+00 -5.993555469374167e+00 3.803930994392104e+00 4.687067521757445e+00 9.197271565580919e+03 + 63100 1.040804392818381e+00 -6.000528627428446e+00 -5.959961504918008e+00 3.704885459740198e+00 4.937828154937056e+00 9.094527328633521e+03 + 63120 1.006026547289446e+00 -5.961441812629337e+00 -6.005100772564921e+00 3.837467054684912e+00 4.586770550532576e+00 9.232695830482035e+03 + 63140 1.029798153553050e+00 -6.015701122156917e+00 -5.971229081988095e+00 3.603550873036558e+00 4.858916209711913e+00 9.128927766894354e+03 + 63160 1.025771171471559e+00 -6.032670444310147e+00 -5.995400395970617e+00 3.515468600833028e+00 4.729478985919949e+00 9.202932585270699e+03 + 63180 9.631959121895662e-01 -5.968298767765773e+00 -6.053125716361849e+00 3.798990952237086e+00 4.311901486470542e+00 9.380849697869387e+03 + 63200 9.280178366504234e-01 -5.948448896945381e+00 -6.027863168784156e+00 3.948839198385943e+00 4.492830160168849e+00 9.302771923519034e+03 + 63220 9.319794185346946e-01 -5.984337605596137e+00 -5.998924473496148e+00 3.748798756170046e+00 4.665038703377668e+00 9.213736474205949e+03 + 63240 9.045872326390025e-01 -5.968411625001528e+00 -5.970118483353056e+00 3.861914864609539e+00 4.852113819819595e+00 9.125514117740009e+03 + 63260 9.817412893858715e-01 -6.101160895445014e+00 -5.957493812371935e+00 3.124607058050106e+00 4.949565681464982e+00 9.086993279566077e+03 + 63280 9.239800140321087e-01 -6.027297148187717e+00 -5.937447714149652e+00 3.641698043258198e+00 5.157627397659746e+00 9.025999568208203e+03 + 63300 9.587945790927189e-01 -6.084179694153965e+00 -5.951486769153604e+00 3.262669502625198e+00 5.024612812141054e+00 9.068718231598468e+03 + 63320 9.929204061403325e-01 -6.133226564890825e+00 -5.954694171930544e+00 3.018565484415354e+00 5.043726112591811e+00 9.078490832562426e+03 + 63340 9.158846842272510e-01 -6.009697491354939e+00 -5.978004668897957e+00 3.683906611520264e+00 4.865891702516679e+00 9.149655099529435e+03 + 63360 9.769240328269264e-01 -6.083293072091779e+00 -5.962482212853660e+00 3.247818744206460e+00 4.941533393371789e+00 9.102242904366129e+03 + 63380 9.851771204804662e-01 -6.068137785833398e+00 -5.998683576085343e+00 3.324482399906194e+00 4.723299220283748e+00 9.213012867599618e+03 + 63400 9.857459058777780e-01 -6.033315161749473e+00 -5.966134640393195e+00 3.582275385500284e+00 4.968036335280116e+00 9.113358618291519e+03 + 63420 9.457765451220203e-01 -5.929153849514661e+00 -6.027949035388561e+00 4.057355267178825e+00 4.490058021385289e+00 9.303026477564745e+03 + 63440 1.011046782635618e+00 -5.979918734940425e+00 -6.017743377033099e+00 3.777409634826612e+00 4.560214686586030e+00 9.271605805891904e+03 + 63460 1.073777476473059e+00 -6.033809738184863e+00 -6.037141383789757e+00 3.473750663583085e+00 4.454619838949293e+00 9.331423957826351e+03 + 63480 9.819039911558899e-01 -5.871980798014524e+00 -6.051817920064313e+00 4.400587100747927e+00 4.367934516233348e+00 9.376793317788171e+03 + 63500 1.047613982452744e+00 -5.956751278791237e+00 -6.026835973812791e+00 3.912650705663611e+00 4.510213541278342e+00 9.299607483368287e+03 + 63520 1.020193482747235e+00 -5.910659234009197e+00 -6.023471294792973e+00 4.204735791549656e+00 4.556951480919229e+00 9.289254586368488e+03 + 63540 1.026809206204617e+00 -5.922780285837630e+00 -6.025209339138868e+00 4.071935740959562e+00 4.483772266059083e+00 9.294582279403156e+03 + 63560 1.072367806096915e+00 -5.995091235794606e+00 -6.002598139914095e+00 3.730447692980064e+00 4.687341887836299e+00 9.225036809141504e+03 + 63580 1.023623413703573e+00 -5.932818212136196e+00 -5.967785502501092e+00 4.098774556962713e+00 4.897986964516779e+00 9.118429703035059e+03 + 63600 1.039826158804733e+00 -5.967032044540379e+00 -6.012721197569079e+00 3.848738186726391e+00 4.586383999662014e+00 9.256155497611318e+03 + 63620 1.059980028067638e+00 -6.010633786400336e+00 -6.030479902326549e+00 3.603896799359462e+00 4.489937330534634e+00 9.310861336137796e+03 + 63640 1.018402075481751e+00 -5.967625607360969e+00 -6.013423144098168e+00 3.863401313861679e+00 4.600424770770777e+00 9.258313124312017e+03 + 63660 1.014865415896960e+00 -5.982081319574339e+00 -6.004690373316318e+00 3.812218320572083e+00 4.682393635245876e+00 9.231427873521438e+03 + 63680 1.029326664780490e+00 -6.022113502236264e+00 -6.010045958840003e+00 3.572478073761755e+00 4.641771775389397e+00 9.247905893701329e+03 + 63700 9.945723101857432e-01 -5.991524719286261e+00 -6.011213177129822e+00 3.737104012685281e+00 4.624049840968549e+00 9.251496120253165e+03 + 63720 9.607540476939712e-01 -5.961478737663711e+00 -6.008336622907481e+00 3.887676379518982e+00 4.618611151214949e+00 9.242635169873653e+03 + 63740 9.783746425676478e-01 -6.004308596012074e+00 -5.965007652363307e+00 3.713172547854090e+00 4.938844648086685e+00 9.109909511289668e+03 + 63760 9.449029602749898e-01 -5.966172609613625e+00 -6.010216310787241e+00 3.914487546523195e+00 4.661581798643559e+00 9.248420331714735e+03 + 63780 1.022454769871586e+00 -6.088740144391313e+00 -6.016707256769598e+00 3.183836238677741e+00 4.597460226454961e+00 9.268428204484617e+03 + 63800 9.986726902931755e-01 -6.062012549096561e+00 -5.994704007875488e+00 3.387068507689208e+00 4.773564567343702e+00 9.200809872848145e+03 + 63820 9.853202186434556e-01 -6.049656067198745e+00 -6.014650645417757e+00 3.441852746613843e+00 4.642859295551789e+00 9.262070074724750e+03 + 63840 9.368594277782202e-01 -5.984594551161003e+00 -6.008111744861891e+00 3.768852216682431e+00 4.633812851177970e+00 9.241953878926030e+03 + 63860 9.359417309510070e-01 -5.986423546936924e+00 -6.002498577191968e+00 3.750079738703742e+00 4.657774427376387e+00 9.224712057141462e+03 + 63880 9.565154353997274e-01 -6.015495571439857e+00 -6.021318870694260e+00 3.558037629937056e+00 4.524599344465628e+00 9.282590607441360e+03 + 63900 9.850053348524292e-01 -6.052040984054347e+00 -5.992069219454899e+00 3.433565906272784e+00 4.777933059203389e+00 9.192729626105642e+03 + 63920 9.458483358713964e-01 -5.979151653435197e+00 -6.018750673380209e+00 3.760336684327901e+00 4.532952983875109e+00 9.274702202951492e+03 + 63940 9.759726956889762e-01 -5.999800632496981e+00 -5.971499530031152e+00 3.736519191568076e+00 4.899028501508314e+00 9.129744877350651e+03 + 63960 9.961867359843239e-01 -5.994002243660457e+00 -5.997523276928232e+00 3.777537060450894e+00 4.757318742549194e+00 9.209433046250784e+03 + 63980 9.580420443866193e-01 -5.893103256043563e+00 -6.012259011206742e+00 4.274088846628159e+00 4.589878061187673e+00 9.254734545458123e+03 + 64000 1.003310115833148e+00 -5.916475754533387e+00 -6.056885745658179e+00 4.082633857460446e+00 4.276377960045989e+00 9.392507223378614e+03 + 64020 1.066506367378135e+00 -5.973702400335957e+00 -6.024244906270763e+00 3.841766631957318e+00 4.551543741452146e+00 9.291633860607977e+03 + 64040 1.062201548727471e+00 -5.944496783488112e+00 -5.950512817701010e+00 4.032127272992513e+00 4.997582273563767e+00 9.065759480237059e+03 + 64060 9.493812502936735e-01 -5.760103571878942e+00 -6.024456310680781e+00 4.948517045029253e+00 4.430562710374971e+00 9.292243175053169e+03 + 64080 1.008609541770014e+00 -5.834579641034106e+00 -6.008247269762795e+00 4.562814470626127e+00 4.565588071487302e+00 9.242356848805885e+03 + 64100 1.120369648389353e+00 -5.992017513751180e+00 -5.989085971070988e+00 3.759350206018000e+00 4.776183577742424e+00 9.183577556350254e+03 + 64120 1.087862457723697e+00 -5.945877704738129e+00 -6.022932050132463e+00 3.999986057428029e+00 4.557528082052356e+00 9.287576428048858e+03 + 64140 1.036441755032167e+00 -5.881906071942267e+00 -6.038269199036900e+00 4.298663377740539e+00 4.400802104847442e+00 9.334908519438428e+03 + 64160 1.076075733757537e+00 -5.963311356003650e+00 -6.012679270480314e+00 3.890882129491142e+00 4.607403924906061e+00 9.256022193808094e+03 + 64180 1.021680785778537e+00 -5.913679970376115e+00 -6.032592653398145e+00 4.117951660294665e+00 4.435136632703943e+00 9.317332486194706e+03 + 64200 1.042074111458011e+00 -5.979086941150754e+00 -5.942882068673196e+00 3.778011142890716e+00 4.985905123342769e+00 9.042520910674513e+03 + 64220 9.727289736547844e-01 -5.909367978886213e+00 -6.016334251395611e+00 4.176863869999002e+00 4.562646980272867e+00 9.267238479392869e+03 + 64240 1.006589168793295e+00 -5.991991139749508e+00 -6.008777033006195e+00 3.685277615740957e+00 4.588890419052479e+00 9.244030543358342e+03 + 64260 9.883898949615147e-01 -5.994135957505360e+00 -6.004306708544147e+00 3.704907605023625e+00 4.646505578640275e+00 9.230299200775093e+03 + 64280 9.818514898713160e-01 -6.008076183678162e+00 -5.983299378374969e+00 3.680679837414999e+00 4.822952087664163e+00 9.165821403732953e+03 + 64300 9.986243689270662e-01 -6.049662586229292e+00 -5.966510751578223e+00 3.418503864896565e+00 4.895974567167833e+00 9.114520533539397e+03 + 64320 1.000412635844610e+00 -6.063018251625168e+00 -5.969437392314848e+00 3.344255232793161e+00 4.881611008544196e+00 9.123477658999682e+03 + 64340 9.912370828701690e-01 -6.055009199200229e+00 -5.989476717997743e+00 3.342468555276638e+00 4.718766203460008e+00 9.184790248359306e+03 + 64360 1.001545206296879e+00 -6.072522449282598e+00 -6.005947668678487e+00 3.294336497353398e+00 4.676619189996206e+00 9.235319489241065e+03 + 64380 9.552162634110006e-01 -6.004612235815550e+00 -6.014634253896670e+00 3.649711105765573e+00 4.592163127041498e+00 9.262048749773028e+03 + 64400 9.393099083480686e-01 -5.979586268680275e+00 -6.023672135207129e+00 3.797234661722231e+00 4.544086793859234e+00 9.289872583607432e+03 + 64420 1.036677794366756e+00 -6.121168270393387e+00 -5.976337888223911e+00 3.035577102074269e+00 4.867215568920605e+00 9.144572116841262e+03 + 64440 9.844402662131657e-01 -6.038089600081673e+00 -5.996790326013798e+00 3.500788759974591e+00 4.737935582714336e+00 9.207195265151828e+03 + 64460 9.316825937454173e-01 -5.951550955208468e+00 -6.004385148914509e+00 3.949284708684203e+00 4.645902592359064e+00 9.230526854520211e+03 + 64480 1.000985352296279e+00 -6.041112049539642e+00 -5.998907619495845e+00 3.502912004134307e+00 4.745256372560233e+00 9.213696179865237e+03 + 64500 9.373949049163564e-01 -5.931333286508147e+00 -6.049239070099915e+00 4.045413831248596e+00 4.368380576003625e+00 9.368813462582093e+03 + 64520 9.575008668139905e-01 -5.945600161232155e+00 -5.998450472223661e+00 3.971095505017687e+00 4.667620840745260e+00 9.212280398441593e+03 + 64540 1.017930553810809e+00 -6.014739857501250e+00 -6.016665878500361e+00 3.645388598625590e+00 4.634329087997910e+00 9.268266019213524e+03 + 64560 9.695351918443063e-01 -5.915432662417722e+00 -6.020541677920328e+00 4.141328914061977e+00 4.537776681478427e+00 9.280240227077016e+03 + 64580 1.061373159911985e+00 -6.014663881657287e+00 -5.998446922291521e+00 3.613065505709245e+00 4.706185795953824e+00 9.212297799013344e+03 + 64600 9.986079072162235e-01 -5.877030817866021e+00 -5.999323909637960e+00 4.355363239382890e+00 4.653137381633624e+00 9.214979660098450e+03 + 64620 1.106149048371082e+00 -5.982270034458686e+00 -6.031583859581318e+00 3.740845307811537e+00 4.457677692667612e+00 9.314255816572982e+03 + 64640 1.069250763283860e+00 -5.873519047872080e+00 -6.027724685614988e+00 4.419949197854041e+00 4.534476562688941e+00 9.302344721388705e+03 + 64660 1.123901882577953e+00 -5.916153047307929e+00 -6.017978382566520e+00 4.165718148934864e+00 4.581021316460327e+00 9.272270689594527e+03 + 64680 1.136406057644009e+00 -5.913121243580729e+00 -5.978950142837332e+00 4.186841654650135e+00 4.808841928129483e+00 9.152484136235393e+03 + 64700 1.138012434260695e+00 -5.907068729953219e+00 -6.019335641960604e+00 4.200060405812726e+00 4.555406423817841e+00 9.276474892615865e+03 + 64720 1.104236866995707e+00 -5.863501866490108e+00 -6.033812227974245e+00 4.488607642456103e+00 4.510659191370928e+00 9.321128573667462e+03 + 64740 1.099430920613121e+00 -5.873425909071909e+00 -6.040012262603555e+00 4.407347652163072e+00 4.450783031029465e+00 9.340262960279515e+03 + 64760 1.152095315537335e+00 -5.976181694733059e+00 -6.027342515506551e+00 3.869936268086412e+00 4.576162918093593e+00 9.301175720615593e+03 + 64780 1.158894199998673e+00 -6.016368942879380e+00 -5.998416253054008e+00 3.648713172992803e+00 4.751800296139862e+00 9.212176522118505e+03 + 64800 1.079715774013112e+00 -5.925461512820438e+00 -6.032337775372649e+00 4.092982166571727e+00 4.479282127948754e+00 9.316596751587167e+03 + 64820 1.133106650600378e+00 -6.032523636106405e+00 -6.029909490984015e+00 3.517012944992208e+00 4.532023770822621e+00 9.309084340395057e+03 + 64840 1.082422500381488e+00 -5.986153447815374e+00 -5.998303716871964e+00 3.779104382353485e+00 4.709335657182481e+00 9.211851127958296e+03 + 64860 1.041032782256140e+00 -5.951462078125060e+00 -6.003483349262452e+00 3.953246617748094e+00 4.654532428611498e+00 9.227706470636687e+03 + 64880 9.847883316651345e-01 -5.890016994726702e+00 -5.978678723806104e+00 4.285237562374158e+00 4.776128193641999e+00 9.151677108292464e+03 + 64900 9.953025786961780e-01 -5.923202288663068e+00 -5.978033808424744e+00 4.067575072957108e+00 4.752724001335300e+00 9.149729687582239e+03 + 64920 1.075785451914827e+00 -6.060512887410032e+00 -6.000941885754408e+00 3.344356188922957e+00 4.686422099012267e+00 9.219943071734959e+03 + 64940 1.062339713390021e+00 -6.063000938026938e+00 -5.981406319580043e+00 3.406354271415851e+00 4.874883197264317e+00 9.160053213325558e+03 + 64960 9.379199284841601e-01 -5.899339773647284e+00 -6.027364561574146e+00 4.205192820337231e+00 4.470054676289289e+00 9.301228478872579e+03 + 64980 9.542199539357837e-01 -5.942679077992116e+00 -6.035833579894796e+00 3.983555787531351e+00 4.448648221993581e+00 9.327360128897244e+03 + 65000 1.023352552975453e+00 -6.065776975960691e+00 -5.958600661342716e+00 3.354587222609745e+00 4.970010206627236e+00 9.090403643474689e+03 + 65020 9.442547372369401e-01 -5.962862866449044e+00 -5.970513617906954e+00 3.929742968181574e+00 4.885811169360289e+00 9.126744354919916e+03 + 65040 1.011470321414996e+00 -6.074292824329987e+00 -5.998023372115079e+00 3.262887335995571e+00 4.700838333273159e+00 9.211002547648051e+03 + 65060 9.559294447972756e-01 -6.003205997093528e+00 -5.991602263847186e+00 3.647091873063382e+00 4.713722305035792e+00 9.191315971000673e+03 + 65080 9.037393446547465e-01 -5.933161540474356e+00 -6.046732818235311e+00 4.014163290785985e+00 4.362019438784150e+00 9.361062911091753e+03 + 65100 9.452533990217297e-01 -6.000975013167154e+00 -5.989013073904189e+00 3.667724831680471e+00 4.736412138032533e+00 9.183355005123594e+03 + 65120 9.573719671976332e-01 -6.020639833081344e+00 -5.994074865889042e+00 3.562880445208243e+00 4.715420597741832e+00 9.198885088792887e+03 + 65140 9.828026722647268e-01 -6.056604850442708e+00 -5.980545259775145e+00 3.441641017638086e+00 4.878386957434850e+00 9.157407931622623e+03 + 65160 9.458443852636623e-01 -5.994965058188140e+00 -5.946453120322980e+00 3.743709304774989e+00 5.022272359194862e+00 9.053392944545703e+03 + 65180 9.727625115452220e-01 -6.018118691676275e+00 -5.978902347068054e+00 3.555979382185639e+00 4.781165701635755e+00 9.152380209138255e+03 + 65200 9.919763790717426e-01 -6.019586846582705e+00 -5.980360395482942e+00 3.633899011059561e+00 4.859143363548091e+00 9.156816911853342e+03 + 65220 9.663451806014972e-01 -5.944076749504652e+00 -6.012693101983437e+00 4.003150260372657e+00 4.609144546093243e+00 9.256042089820816e+03 + 65240 9.828059917615051e-01 -5.923400170442718e+00 -6.034006432393315e+00 4.093472665689930e+00 4.458354393305885e+00 9.321740999229289e+03 + 65260 1.068708784058185e+00 -6.006035299007579e+00 -5.967475234638855e+00 3.651754615724310e+00 4.873172472480202e+00 9.117442133227445e+03 + 65280 1.048260052767487e+00 -5.937586001803232e+00 -5.982815191630610e+00 4.032769781444872e+00 4.773056774261565e+00 9.164361158139351e+03 + 65300 1.095893455777025e+00 -5.977445913982258e+00 -5.971643729718593e+00 3.858838139565363e+00 4.892155179492442e+00 9.130195593002065e+03 + 65320 1.091811258685477e+00 -5.953577221513087e+00 -6.005024011229192e+00 3.965613473698706e+00 4.670198045783851e+00 9.232475121378935e+03 + 65340 1.044856660943211e+00 -5.879369417727929e+00 -6.060069784827506e+00 4.338845347053343e+00 4.301235875876137e+00 9.402365892068408e+03 + 65360 1.040988447554181e+00 -5.877766639346378e+00 -6.039274046820625e+00 4.316429902727068e+00 4.389029375819409e+00 9.337979788542320e+03 + 65380 9.890419143420222e-01 -5.810874523499997e+00 -5.994544360847625e+00 4.722244312698892e+00 4.667583683833342e+00 9.200261249283900e+03 + 65400 1.029645495067025e+00 -5.881770577377221e+00 -5.970019365867810e+00 4.299323930931474e+00 4.792585730962629e+00 9.125220679148015e+03 + 65420 1.060251928429955e+00 -5.943190310630442e+00 -5.977241757433022e+00 3.982392060640954e+00 4.786863383656175e+00 9.147284485434657e+03 + 65440 1.019121783373137e+00 -5.902872896071439e+00 -5.989657991825597e+00 4.182675965769502e+00 4.684342515998964e+00 9.185249768441236e+03 + 65460 1.076059565470839e+00 -6.010222207037476e+00 -5.977474815639834e+00 3.624031025341535e+00 4.812071614389234e+00 9.148013359297081e+03 + 65480 1.041389009012619e+00 -5.982649870182797e+00 -6.015153317266501e+00 3.770462546719682e+00 4.583822723672872e+00 9.263623206902725e+03 + 65500 1.023206214774157e+00 -5.978897601642629e+00 -6.049028807144020e+00 3.771382030912257e+00 4.368677796154293e+00 9.368174480512404e+03 + 65520 1.029011004227786e+00 -6.011670328717359e+00 -5.986789528717868e+00 3.666618040645287e+00 4.809487444533718e+00 9.176533514124823e+03 + 65540 9.757242701052797e-01 -5.952227277801682e+00 -6.007602611054625e+00 3.968066285287259e+00 4.650092552443732e+00 9.240391237181177e+03 + 65560 9.592383271024414e-01 -5.942755740309119e+00 -6.008595020340802e+00 4.035033222486600e+00 4.656973887949023e+00 9.243462131666261e+03 + 65580 1.048686369348883e+00 -6.086193547446296e+00 -5.994697983444187e+00 3.237716784290276e+00 4.763098471683156e+00 9.200785652437424e+03 + 65600 1.043521806596037e+00 -6.086817224246090e+00 -5.970257211803178e+00 3.216126909491451e+00 4.885432538542287e+00 9.125982505955944e+03 + 65620 9.774593127747844e-01 -5.993763930128718e+00 -6.006734616245240e+00 3.732486018642273e+00 4.658006331754013e+00 9.237745517011745e+03 + 65640 1.067800443726384e+00 -6.130454815211847e+00 -5.972312967283594e+00 3.043397770118092e+00 4.951472733293995e+00 9.132265565921538e+03 + 65660 9.779990340915540e-01 -6.000274350941320e+00 -6.015322439937025e+00 3.676816979950703e+00 4.590408524253119e+00 9.264153681257600e+03 + 65680 9.942739945525823e-01 -6.025660343557830e+00 -6.019763131354469e+00 3.551280938488499e+00 4.585143643550843e+00 9.277824144694348e+03 + 65700 1.018268082458024e+00 -6.061257355204458e+00 -6.047642625957879e+00 3.309673704343852e+00 4.387851586550253e+00 9.363880889079152e+03 + 65720 9.740302764191576e-01 -5.995745562925117e+00 -5.994041957822820e+00 3.763103927531318e+00 4.772886291660739e+00 9.198788797375966e+03 + 65740 1.001709180159406e+00 -6.034230360633322e+00 -6.020099652893245e+00 3.509711720182467e+00 4.590852430745946e+00 9.278870517408950e+03 + 65760 1.003122371744735e+00 -6.033960777155754e+00 -6.023733014152685e+00 3.518696058484299e+00 4.577425456389133e+00 9.290053442333972e+03 + 65780 8.675121503238773e-01 -5.830680943079776e+00 -6.087560878513758e+00 4.623207138312819e+00 4.148162797009355e+00 9.487774426563361e+03 + 65800 1.018284169273967e+00 -6.050379399813544e+00 -5.981361253206936e+00 3.456509982991949e+00 4.852822861330758e+00 9.159932067034502e+03 + 65820 1.006935310881990e+00 -6.026348658322816e+00 -6.016942227185641e+00 3.567659270483361e+00 4.621672453713533e+00 9.269124696013823e+03 + 65840 1.001375901871368e+00 -6.011535001289583e+00 -5.997973394868082e+00 3.643069529323482e+00 4.720942372047551e+00 9.210823779929757e+03 + 65860 9.933607190475716e-01 -5.990143284054682e+00 -6.005721236118526e+00 3.754586246010359e+00 4.665135234579476e+00 9.234613459169012e+03 + 65880 1.050975328644272e+00 -6.060215634934644e+00 -6.032851561535937e+00 3.366854370622662e+00 4.523983114654711e+00 9.318170444084893e+03 + 65900 1.000426726632251e+00 -5.967885195339933e+00 -5.999246724092002e+00 3.887970548068344e+00 4.707887796793072e+00 9.214749291094880e+03 + 65920 9.945489174347665e-01 -5.934554748251072e+00 -6.005314220986109e+00 4.084018682906196e+00 4.677706840468598e+00 9.233334206522451e+03 + 65940 1.040934292749284e+00 -5.970449483929085e+00 -5.983110608696709e+00 3.864144032728552e+00 4.791441895010129e+00 9.165255934690147e+03 + 65960 1.010007596505781e+00 -5.883503160239455e+00 -6.043076126747481e+00 4.301872558081109e+00 4.385579890555264e+00 9.349734518713358e+03 + 65980 1.148759998124574e+00 -6.049989840240140e+00 -5.995076100259435e+00 3.506965891692646e+00 4.822289084535653e+00 9.201942964046744e+03 + 66000 1.069068427566606e+00 -5.899774587346963e+00 -6.040751406298568e+00 4.210693025948485e+00 4.401182315436142e+00 9.342569682200998e+03 + 66020 1.110015934056683e+00 -5.941006994593684e+00 -6.026210987094728e+00 4.004688522328589e+00 4.515434012112366e+00 9.297689396154094e+03 + 66040 1.137733786828064e+00 -5.971045535505499e+00 -6.002397927177398e+00 3.868883572961104e+00 4.688853288214127e+00 9.224416225176748e+03 + 66060 1.080185705932078e+00 -5.888100880736138e+00 -6.010442279093865e+00 4.281865034732646e+00 4.579361793092370e+00 9.249124469756354e+03 + 66080 1.025138619855518e+00 -5.819253726273967e+00 -6.049406185819149e+00 4.640929733902702e+00 4.319358695216261e+00 9.369329481032310e+03 + 66100 1.099763731023909e+00 -5.953627008696292e+00 -6.012343147997401e+00 3.979696741862938e+00 4.642539583702783e+00 9.254970528913214e+03 + 66120 1.078230540742166e+00 -5.957644961621384e+00 -6.005328195069745e+00 3.927668146740602e+00 4.653863641323587e+00 9.233409114616652e+03 + 66140 9.734417008984010e-01 -5.847475606911382e+00 -5.993421256916630e+00 4.482934817003933e+00 4.644892309657454e+00 9.196834409642612e+03 + 66160 9.946284057296013e-01 -5.919114187439185e+00 -5.953497747633780e+00 4.132235019353375e+00 4.934799295877265e+00 9.074788629288998e+03 + 66180 9.708060288520367e-01 -5.914741458450351e+00 -5.978712407678747e+00 4.099973344146216e+00 4.732642254204367e+00 9.151780400217376e+03 + 66200 1.014974916202357e+00 -6.003406217764642e+00 -5.962389044420869e+00 3.670931605203974e+00 4.906458561930979e+00 9.101960553800434e+03 + 66220 1.001470725641395e+00 -6.001704250744334e+00 -6.022009382475545e+00 3.661037202493899e+00 4.544441993884302e+00 9.284755014731491e+03 + 66240 1.006220273569708e+00 -6.023409349163874e+00 -6.033012574132291e+00 3.529956686000107e+00 4.474813482137195e+00 9.318644217789395e+03 + 66260 9.782194972984947e-01 -5.993828707422923e+00 -6.010519544402745e+00 3.802443770477679e+00 4.706602401640858e+00 9.249358307968740e+03 + 66280 9.908869264474311e-01 -6.021106133253910e+00 -6.000019663448696e+00 3.620633136825902e+00 4.741714909568098e+00 9.217084456353577e+03 + 66300 1.020034630824749e+00 -6.069612313244798e+00 -5.974333230136956e+00 3.316782489397749e+00 4.863889728993435e+00 9.138435705446853e+03 + 66320 9.511238625755327e-01 -5.969843112470361e+00 -6.024244811792395e+00 3.837136510022721e+00 4.524753533879844e+00 9.291620482657047e+03 + 66340 9.714898467685636e-01 -5.999626991296810e+00 -6.024954439860316e+00 3.739553887432092e+00 4.594119758370442e+00 9.293802359490637e+03 + 66360 1.012260166776850e+00 -6.058454970693838e+00 -6.019840506657798e+00 3.329194168027486e+00 4.550924396091428e+00 9.278066783564984e+03 + 66380 1.003266121821861e+00 -6.043607882136898e+00 -6.007050391550767e+00 3.464858461837074e+00 4.674777230036023e+00 9.238710590489332e+03 + 66400 1.009456320348018e+00 -6.052328754002001e+00 -5.995214812220588e+00 3.400246325500061e+00 4.728203417562853e+00 9.202380413301162e+03 + 66420 9.343587568984277e-01 -5.937570443638043e+00 -6.006020143457339e+00 4.058297954789406e+00 4.665249185870195e+00 9.235522938064512e+03 + 66440 9.503047965886129e-01 -5.954019841400227e+00 -6.008719079277890e+00 3.913413624213580e+00 4.599322135640333e+00 9.243810371158041e+03 + 66460 9.696280401547355e-01 -5.971193084363878e+00 -5.987982538288606e+00 3.872333169534858e+00 4.775925526939472e+00 9.180153646196977e+03 + 66480 1.015017881851966e+00 -6.019645190588357e+00 -5.983741288297157e+00 3.611241529802151e+00 4.817407292869146e+00 9.167205749664821e+03 + 66500 1.057959754699335e+00 -6.056353373338747e+00 -6.054046300682630e+00 3.362294226967766e+00 4.375541795177531e+00 9.383712643052315e+03 + 66520 1.015807329619139e+00 -5.966431289323056e+00 -6.032950638132866e+00 3.841086570820030e+00 4.459122176118143e+00 9.318492615960706e+03 + 66540 1.050264140571100e+00 -5.989055129274790e+00 -5.953913580462945e+00 3.795045527969934e+00 4.996833739384653e+00 9.076089520825793e+03 + 66560 1.044767038688440e+00 -5.944603287253271e+00 -5.993003016918934e+00 3.948231212471732e+00 4.670312474897536e+00 9.195516605635814e+03 + 66580 1.010060643093009e+00 -5.852527984777908e+00 -6.010600982258619e+00 4.503443298882040e+00 4.595763685630494e+00 9.249591462320503e+03 + 66600 1.037752565804361e+00 -5.852458148558473e+00 -6.039429118137347e+00 4.508000191684914e+00 4.434383950698986e+00 9.338480503750281e+03 + 66620 1.123994865075966e+00 -5.947515713707972e+00 -6.035272928995831e+00 3.944343370695194e+00 4.440427860127131e+00 9.325674889152193e+03 + 66640 1.143493819075815e+00 -5.961661677516529e+00 -6.040189871472986e+00 3.900357772745592e+00 4.449436730848880e+00 9.340815469975352e+03 + 66660 1.021761236767090e+00 -5.780030575021286e+00 -6.106465901764150e+00 4.824541698481449e+00 3.950099536620369e+00 9.546751652521867e+03 + 66680 1.107905585672560e+00 -5.918187947094172e+00 -5.982355728999860e+00 4.137307748152503e+00 4.768846414517886e+00 9.162961173797634e+03 + 66700 1.080402229534054e+00 -5.896520295060216e+00 -5.999686250327597e+00 4.247378524678070e+00 4.654983644652783e+00 9.216069481013285e+03 + 66720 1.150680385491405e+00 -6.029969587925449e+00 -5.981853921307319e+00 3.565594552292289e+00 4.841882155888939e+00 9.161431186674032e+03 + 66740 1.109683714581079e+00 -6.012243185155223e+00 -6.037906409259394e+00 3.602350059206560e+00 4.454987855029316e+00 9.333777658150057e+03 + 66760 1.006496469842205e+00 -5.906699496924787e+00 -6.038371494367388e+00 4.253771519597263e+00 4.497690534106101e+00 9.335173261455562e+03 + 66780 1.045465265520584e+00 -6.003045768580300e+00 -5.990120989896773e+00 3.686029235404559e+00 4.760245314708411e+00 9.186722864119809e+03 + 66800 1.054719598448941e+00 -6.043571059307715e+00 -5.979266488347832e+00 3.496501896055073e+00 4.865748693606916e+00 9.153507356192094e+03 + 66820 1.025158956225415e+00 -6.016898328113887e+00 -6.013144323166510e+00 3.545303080827172e+00 4.566859158165395e+00 9.257445549416649e+03 + 66840 1.030738580282839e+00 -6.037541920680705e+00 -5.945410609800390e+00 3.510160916717602e+00 5.039193161066647e+00 9.050219246155890e+03 + 66860 1.034517081330480e+00 -6.051542967082438e+00 -5.956789523718410e+00 3.422800733753269e+00 4.966889668597492e+00 9.084883670750236e+03 + 66880 9.665251167567536e-01 -5.956030158204709e+00 -6.025983530594360e+00 3.948041447654047e+00 4.546358358143280e+00 9.296993528739964e+03 + 66900 1.027976343959499e+00 -6.053112865744838e+00 -6.021107665827106e+00 3.390966437057970e+00 4.574745247774268e+00 9.281985288512269e+03 + 66920 1.035908543912025e+00 -6.073894743250997e+00 -6.001896689724553e+00 3.262671064128053e+00 4.676095029139670e+00 9.222843074556109e+03 + 66940 9.184844932077428e-01 -5.906300096198942e+00 -6.007171425155247e+00 4.198532076160069e+00 4.619313295505260e+00 9.239066322376630e+03 + 66960 9.675114290761154e-01 -5.982000298177605e+00 -6.016792237999073e+00 3.723831294890430e+00 4.524050592400279e+00 9.268683297402637e+03 + 66980 9.980775021825152e-01 -6.030297149040487e+00 -6.008457281797232e+00 3.443648962466180e+00 4.569056859885483e+00 9.243041059731651e+03 + 67000 1.014661175527209e+00 -6.055450681272718e+00 -5.966535466815431e+00 3.385537139748468e+00 4.896102060747179e+00 9.114601977895209e+03 + 67020 9.809825643129686e-01 -6.005405135644025e+00 -6.004961524821542e+00 3.637496172434896e+00 4.640043454426144e+00 9.232284479602433e+03 + 67040 9.925217427807769e-01 -6.021734291615489e+00 -5.944791279718197e+00 3.626291567703969e+00 5.068110248910834e+00 9.048346806065429e+03 + 67060 1.045045209742671e+00 -6.094310057275067e+00 -5.978581805474740e+00 3.155526304972898e+00 4.820055835699458e+00 9.151416217083724e+03 + 67080 1.029032681680708e+00 -6.064094842698008e+00 -6.013966617507196e+00 3.330647990483311e+00 4.618492016846730e+00 9.259996556025222e+03 + 67100 9.653578352075562e-01 -5.963046874648354e+00 -6.010477459132173e+00 3.878670567549176e+00 4.606316811583858e+00 9.249233190612787e+03 + 67120 9.111914750514458e-01 -5.873954642728507e+00 -6.022400525489984e+00 4.354905471897273e+00 4.502506241154756e+00 9.285924952280346e+03 + 67140 1.012045505514191e+00 -6.008828714844642e+00 -5.973809279154077e+00 3.613094796304594e+00 4.814181815279980e+00 9.136834481195685e+03 + 67160 1.037322284428271e+00 -6.026638936251421e+00 -5.985533258359941e+00 3.501323285335869e+00 4.737358448871848e+00 9.172711505789448e+03 + 67180 9.945356287320889e-01 -5.938925525492723e+00 -6.057603632783982e+00 4.013822091367842e+00 4.332354033923687e+00 9.394716205735773e+03 + 67200 9.902636146576347e-01 -5.908320781601970e+00 -6.023235622178771e+00 4.237351661188532e+00 4.577492863582436e+00 9.288500631202858e+03 + 67220 1.034801977716242e+00 -5.949956350706637e+00 -6.016560708427788e+00 3.983545810567581e+00 4.601093281541691e+00 9.267947429512298e+03 + 67240 1.094741893894295e+00 -6.014162746613278e+00 -5.995825254781174e+00 3.630796090165475e+00 4.736092805983105e+00 9.204248677133743e+03 + 67260 1.063510806201818e+00 -5.947456089102931e+00 -6.018495490023627e+00 3.901420236478869e+00 4.493501003080469e+00 9.273938817471424e+03 + 67280 1.030211633956133e+00 -5.883328455719835e+00 -6.065474181772851e+00 4.275054063603320e+00 4.229145117646891e+00 9.419137096804589e+03 + 67300 1.057266281292817e+00 -5.916045975257955e+00 -6.011039821948060e+00 4.148966133224875e+00 4.603496765280027e+00 9.250960060604291e+03 + 67320 1.084516341467682e+00 -5.955276201353674e+00 -6.038558393428315e+00 3.843905129966247e+00 4.365685895196087e+00 9.335788907830007e+03 + 67340 1.064873261193631e+00 -5.931478498814941e+00 -6.063571001747287e+00 3.979706871203585e+00 4.221211278117284e+00 9.413243571481162e+03 + 67360 1.071087580253549e+00 -5.960422172350937e+00 -6.012114474902051e+00 3.879601789129118e+00 4.582776588522661e+00 9.254283617499683e+03 + 67380 1.036123680590614e+00 -5.942165427495971e+00 -5.990684529577715e+00 3.994366525180706e+00 4.715762332720550e+00 9.188474325612846e+03 + 67400 1.051582813033685e+00 -6.007179909111077e+00 -5.974667923295326e+00 3.665943750785678e+00 4.852632604553268e+00 9.139441977633478e+03 + 67420 9.709975521444160e-01 -5.934680098267561e+00 -6.039860079278758e+00 4.024598995972303e+00 4.420639268456557e+00 9.339836772836907e+03 + 67440 9.800332281181369e-01 -5.993985332204249e+00 -5.988866315888821e+00 3.731680575496282e+00 4.761074759344686e+00 9.182910633965370e+03 + 67460 9.727127352087102e-01 -6.018224159604705e+00 -5.957210256654268e+00 3.610311564970593e+00 4.960662837582968e+00 9.086142919915826e+03 + 67480 9.935865521129884e-01 -6.070808224808062e+00 -5.959274232517251e+00 3.286017356965337e+00 4.926462800528703e+00 9.092457202902164e+03 + 67500 9.659288915365276e-01 -6.041726304730241e+00 -6.006816563893703e+00 3.450681297495695e+00 4.651138431644029e+00 9.238005252809729e+03 + 67520 9.437216959995213e-01 -6.015515335158201e+00 -6.047887810345625e+00 3.559280465827150e+00 4.373392703676624e+00 9.364663274463783e+03 + 67540 1.018805057238960e+00 -6.131038816540118e+00 -6.004966308907223e+00 2.985726003101048e+00 4.709653851586630e+00 9.232318315624198e+03 + 67560 8.890172558509115e-01 -5.939195216749964e+00 -6.039957315440844e+00 4.007184226961141e+00 4.428592663393728e+00 9.340113013731758e+03 + 67580 9.385492618415294e-01 -6.008499065333626e+00 -6.053780067487033e+00 3.663169305417676e+00 4.403158783840382e+00 9.382881059434820e+03 + 67600 9.934606512002037e-01 -6.083047926480554e+00 -5.979991089950689e+00 3.267152315213068e+00 4.858920618561465e+00 9.155746363878472e+03 + 67620 9.773289644904192e-01 -6.047717312240374e+00 -6.038455927117944e+00 3.441805270766634e+00 4.494985577334345e+00 9.335467672049726e+03 + 67640 1.027830989682253e+00 -6.109438640164305e+00 -6.011097873406803e+00 3.091924864168302e+00 4.656612765074353e+00 9.251185531652034e+03 + 67660 1.010139484400637e+00 -6.068628031414050e+00 -6.009766175200919e+00 3.354728549090443e+00 4.692722436309057e+00 9.247057399872681e+03 + 67680 9.231937782787338e-01 -5.922962779643796e+00 -5.997665660922301e+00 4.122098009311824e+00 4.693142504777125e+00 9.209883647192377e+03 + 67700 9.930742251700908e-01 -6.006596237091420e+00 -5.982821254863474e+00 3.680646100554837e+00 4.817165727674313e+00 9.164405008556450e+03 + 67720 1.035096893606238e+00 -6.041593723610310e+00 -6.011939678914450e+00 3.531178869477331e+00 4.701456983069545e+00 9.253735381909983e+03 + 67740 1.037594562815710e+00 -6.019043692451458e+00 -5.984374325189156e+00 3.553101234055458e+00 4.752178105942838e+00 9.169154615161660e+03 + 67760 1.018464434681254e+00 -5.962429806436684e+00 -5.970074553258466e+00 3.929434730663952e+00 4.885537411392530e+00 9.125406249438678e+03 + 67780 1.029906905026654e+00 -5.946865140857094e+00 -6.005602303781080e+00 3.928476362119121e+00 4.591198483063006e+00 9.234257630196680e+03 + 67800 1.090930895736436e+00 -6.004827698174290e+00 -5.981713082960802e+00 3.718667360771149e+00 4.851395058302140e+00 9.161003031029926e+03 + 67820 1.042693508814884e+00 -5.903100599208122e+00 -6.047986962687466e+00 4.173231924455184e+00 4.341272004264509e+00 9.364948878169289e+03 + 67840 1.041026787681816e+00 -5.875924823950196e+00 -6.077563558815307e+00 4.309697206892895e+00 4.151856387804057e+00 9.456682619561718e+03 + 67860 1.066926500110198e+00 -5.896057128221269e+00 -6.007142861860547e+00 4.287039077814943e+00 4.649167604796483e+00 9.238956414163220e+03 + 67880 1.048544337115573e+00 -5.856593712239366e+00 -5.963823007783274e+00 4.480853490475383e+00 4.865126281782409e+00 9.106276317336960e+03 + 67900 1.057837220360690e+00 -5.860167888368156e+00 -5.978237300143055e+00 4.473276300880061e+00 4.795303467286169e+00 9.150342829856920e+03 + 67920 1.100985916644492e+00 -5.914119901500097e+00 -6.054259791430436e+00 4.112022035620860e+00 4.307317101062977e+00 9.384360949461605e+03 + 67940 1.084181408897506e+00 -5.890822860337608e+00 -6.029178191143545e+00 4.305460831529329e+00 4.511003111623395e+00 9.306793842762041e+03 + 67960 1.037499164465762e+00 -5.836590981593044e+00 -6.022496651890181e+00 4.605640155493202e+00 4.538141027837538e+00 9.286206995054910e+03 + 67980 1.094811827774892e+00 -5.953428792748918e+00 -6.018291503908625e+00 3.942457260585613e+00 4.570005535634467e+00 9.273262805702136e+03 + 68000 9.752374519098556e-01 -5.822614335543644e+00 -6.040614554218312e+00 4.617710894650749e+00 4.365919903595996e+00 9.342126112087342e+03 + 68020 1.019904820338775e+00 -5.936154114887150e+00 -6.010225630763998e+00 4.045186075880252e+00 4.619855969185354e+00 9.248454477428140e+03 + 68040 1.072022976081843e+00 -6.059593893396194e+00 -6.009303353015047e+00 3.393943616955830e+00 4.682719682260347e+00 9.245641793019744e+03 + 68060 1.006807607024998e+00 -6.005119202723638e+00 -6.041674279388438e+00 3.648891151952471e+00 4.438986244863361e+00 9.345428499924587e+03 + 68080 9.838454267410869e-01 -6.007810566786055e+00 -6.013181147680291e+00 3.652288758747965e+00 4.621450052158553e+00 9.257568848014051e+03 + 68100 9.267217073018031e-01 -5.951397793842877e+00 -6.025901587052223e+00 3.923982209573860e+00 4.496169899541057e+00 9.296709164082320e+03 + 68120 1.016948422495785e+00 -6.106074971665565e+00 -5.952050261500757e+00 3.146710196696843e+00 5.031143917710041e+00 9.070433997275897e+03 + 68140 9.438753743621873e-01 -6.011776684319846e+00 -5.989250924181849e+00 3.636731400362192e+00 4.766077800924686e+00 9.184073865712693e+03 + 68160 9.672068263374420e-01 -6.054542487150885e+00 -5.978878397635601e+00 3.430953183583238e+00 4.865428094560013e+00 9.152325206316666e+03 + 68180 1.024470142788593e+00 -6.144107759612810e+00 -5.989762546584246e+00 2.921245010258468e+00 4.807519108313004e+00 9.185673058707902e+03 + 68200 9.889891800882168e-01 -6.094343214049258e+00 -6.006144693348371e+00 3.176957151119697e+00 4.683406705661160e+00 9.235933751600342e+03 + 68220 9.382949753058375e-01 -6.017555137692742e+00 -6.016911374372552e+00 3.585723222391469e+00 4.589419810998054e+00 9.269041097361180e+03 + 68240 9.300158836562472e-01 -5.998464279014645e+00 -6.007483362171068e+00 3.673461502304512e+00 4.621672531121726e+00 9.240041860614194e+03 + 68260 9.722081216810353e-01 -6.049364703063667e+00 -6.007315329709964e+00 3.442320213845938e+00 4.683774222762398e+00 9.239511602044133e+03 + 68280 9.895926293987768e-01 -6.058885828631868e+00 -5.990540685045837e+00 3.374172753303237e+00 4.766621144151015e+00 9.188047696539257e+03 + 68300 9.595079793762733e-01 -5.993299896819209e+00 -6.021781009720743e+00 3.686602197293266e+00 4.523059239574678e+00 9.284038609288093e+03 + 68320 9.117840498664789e-01 -5.895743247489367e+00 -6.047526212296312e+00 4.213210689015853e+00 4.341649416756487e+00 9.363526138169025e+03 + 68340 9.723648590457549e-01 -5.955608493344664e+00 -5.989626655477355e+00 3.909247141950867e+00 4.713909590691383e+00 9.185213205174214e+03 + 68360 1.004831480827679e+00 -5.971030057111545e+00 -6.016351155793582e+00 3.801805039375094e+00 4.541564277325484e+00 9.267294025509300e+03 + 68380 1.009877735477846e+00 -5.947299387909505e+00 -5.964624781636716e+00 4.006121920105558e+00 4.906636828227897e+00 9.108751469956236e+03 + 68400 1.011815775503380e+00 -5.923419581669514e+00 -6.004340436200906e+00 4.095236979098734e+00 4.630576909917718e+00 9.230338786585540e+03 + 68420 1.120228201619910e+00 -6.061664055020864e+00 -5.968472436127905e+00 3.383589582169538e+00 4.918710279209325e+00 9.120519681024865e+03 + 68440 1.066519355260748e+00 -5.966600839988372e+00 -6.041889313987196e+00 3.833149815207118e+00 4.400831746652177e+00 9.346058317431158e+03 + 68460 1.015596865508945e+00 -5.883510444586338e+00 -6.017569405595361e+00 4.327173462363793e+00 4.557386162692814e+00 9.271062804701987e+03 + 68480 1.032624497610213e+00 -5.908544652832996e+00 -6.003078241942255e+00 4.188799757873143e+00 4.645973260182141e+00 9.226465394646300e+03 + 68500 1.000131835311615e+00 -5.864180613339229e+00 -6.031145100368463e+00 4.376064402878270e+00 4.417328480685543e+00 9.312891518459719e+03 + 68520 1.051750454197759e+00 -5.949321041045928e+00 -6.067293432294156e+00 3.910675865377326e+00 4.233260138661454e+00 9.424770863506303e+03 + 68540 1.014166407618716e+00 -5.910768561835623e+00 -6.041413276400032e+00 4.121788452559661e+00 4.371606284326586e+00 9.344608960883110e+03 + 68560 1.057700465267585e+00 -5.998238807531517e+00 -5.962281003848353e+00 3.690677158899802e+00 4.897152432100670e+00 9.101639621927749e+03 + 68580 9.479572945866706e-01 -5.860399954653880e+00 -6.051492616957435e+00 4.410307109222020e+00 4.313023470781085e+00 9.375759768944983e+03 + 68600 1.040854465800414e+00 -6.027131530410442e+00 -5.982855122083357e+00 3.506676873794838e+00 4.760918862161009e+00 9.164492351668210e+03 + 68620 1.018729827104335e+00 -6.020429717848271e+00 -5.994052637406304e+00 3.557365304271101e+00 4.708826582008879e+00 9.198796814603245e+03 + 68640 9.913987843793604e-01 -6.006060916982197e+00 -6.009758132482378e+00 3.664173902020241e+00 4.642943918475956e+00 9.247030391660363e+03 + 68660 9.880190789070139e-01 -6.025024877049546e+00 -6.008376032891793e+00 3.531902978341807e+00 4.627503217895931e+00 9.242801125856495e+03 + 68680 9.334084051983137e-01 -5.962791938200769e+00 -6.026978423864458e+00 3.824118631946610e+00 4.455549898439150e+00 9.300061850534506e+03 + 68700 9.384454904219944e-01 -5.981707239873182e+00 -6.024957471246437e+00 3.789711121429558e+00 4.541361599932650e+00 9.293825309770693e+03 + 68720 1.046027374070244e+00 -6.147076055934745e+00 -5.956723668613973e+00 2.906661660707237e+00 4.999694525639846e+00 9.084702966435460e+03 + 68740 9.486992988240669e-01 -6.003841259871783e+00 -5.984041157070878e+00 3.690993563545074e+00 4.804688817883882e+00 9.168117300765291e+03 + 68760 9.704346715714314e-01 -6.034496540326515e+00 -5.978160458135860e+00 3.455102440681337e+00 4.778592942600623e+00 9.150139732523608e+03 + 68780 1.013641136520927e+00 -6.093303350555248e+00 -5.985424035465829e+00 3.186855677682247e+00 4.806315399195742e+00 9.172363262240191e+03 + 68800 9.144277208672775e-01 -5.939495969183015e+00 -5.998812280193453e+00 4.005244914255635e+00 4.664641477264234e+00 9.213382368997900e+03 + 68820 9.333018535754948e-01 -5.957349399693246e+00 -5.998706295160906e+00 3.858222722320409e+00 4.620745028586215e+00 9.213087618516525e+03 + 68840 9.851493928308517e-01 -6.022964685691626e+00 -5.991940493796610e+00 3.543428183211157e+00 4.721573894050517e+00 9.192296960055361e+03 + 68860 9.434938618806449e-01 -5.948748570321367e+00 -5.976543181012717e+00 3.981252549339512e+00 4.821651593547678e+00 9.145135209271961e+03 + 68880 9.588175088911657e-01 -5.956862868603661e+00 -5.974456790028420e+00 3.945544547309466e+00 4.844517527837963e+00 9.138729127529756e+03 + 68900 9.744653219018354e-01 -5.961302800458627e+00 -5.950751095685412e+00 3.997187604453059e+00 5.057777126131899e+00 9.066421458317380e+03 + 68920 1.019564081598813e+00 -6.004924085593796e+00 -5.939319355068856e+00 3.668368257065376e+00 5.045080772038817e+00 9.031693198774226e+03 + 68940 1.010685331362514e+00 -5.967281440994053e+00 -5.983712374111588e+00 3.868008646581639e+00 4.773659685942070e+00 9.167094912838520e+03 + 68960 1.007687392619904e+00 -5.940978697280507e+00 -5.945243335967706e+00 3.983167397613843e+00 4.958679182321246e+00 9.049711154681843e+03 + 68980 1.003447874960950e+00 -5.911796299986793e+00 -5.997671637569777e+00 4.123577252997211e+00 4.630467775430176e+00 9.209878524030568e+03 + 69000 1.075274355662337e+00 -5.999821677522811e+00 -5.989997576300167e+00 3.711464823045240e+00 4.767876332540412e+00 9.186360145784383e+03 + 69020 1.033963165283710e+00 -5.924263675231807e+00 -6.020845880126675e+00 4.155553501225540e+00 4.600963534671305e+00 9.281142080128458e+03 + 69040 1.036928557025325e+00 -5.918743908717836e+00 -6.074646163582215e+00 4.083657522116015e+00 4.188442648888784e+00 9.447615322009495e+03 + 69060 1.044258113618064e+00 -5.928288439834048e+00 -6.034212119469940e+00 4.050693552179355e+00 4.442463392073617e+00 9.322382414205853e+03 + 69080 1.059459326141740e+00 -5.956876464061159e+00 -5.992333109334949e+00 3.985384174683948e+00 4.781786630623724e+00 9.193516196254308e+03 + 69100 9.849047026747783e-01 -5.858670978555253e+00 -6.035611152114821e+00 4.431921160206561e+00 4.415903302224151e+00 9.326662993759661e+03 + 69120 1.024838739143535e+00 -5.938749971706142e+00 -5.962956739661691e+00 4.024851754351905e+00 4.885852746765909e+00 9.103662184019338e+03 + 69140 9.902899932124012e-01 -5.916084141108882e+00 -6.024396648549645e+00 4.112933240847429e+00 4.490986061816215e+00 9.292086527790236e+03 + 69160 1.042306788255892e+00 -6.032453480299648e+00 -6.017440806436720e+00 3.472543153137463e+00 4.558748249662172e+00 9.270650678851845e+03 + 69180 1.019406965107340e+00 -6.045628741387449e+00 -5.987366358873903e+00 3.466370344020468e+00 4.800921960487806e+00 9.178300138240107e+03 + 69200 1.001163520033020e+00 -6.066530941477739e+00 -5.959635080865036e+00 3.341111243362488e+00 4.954923817081598e+00 9.093547020577938e+03 + 69220 9.879991392610417e-01 -6.084108281407361e+00 -5.978134758531469e+00 3.234435285782184e+00 4.842951653485217e+00 9.150053373971095e+03 + 69240 9.382962747098970e-01 -6.036199240633215e+00 -5.996990648252419e+00 3.488028398615518e+00 4.713170203576110e+00 9.207848076099952e+03 + 69260 9.812338724709685e-01 -6.114337566963933e+00 -5.982288504284372e+00 3.108189159378512e+00 4.866435311810963e+00 9.162775909190796e+03 + 69280 9.412562021764928e-01 -6.060525928242287e+00 -6.011634389743836e+00 3.349954371089106e+00 4.630697151088337e+00 9.252806005409180e+03 + 69300 9.408870177361662e-01 -6.059685523835410e+00 -6.012608274065905e+00 3.347290823458287e+00 4.617615676815638e+00 9.255816097367548e+03 + 69320 9.327491733997499e-01 -6.043982291018529e+00 -6.004865386490144e+00 3.482941969963893e+00 4.707557289087290e+00 9.231985545030388e+03 + 69340 9.397431608475214e-01 -6.046387312542032e+00 -6.002593409233991e+00 3.436777978864884e+00 4.688249348744296e+00 9.224993415276283e+03 + 69360 9.495452801287275e-01 -6.046616011437129e+00 -5.996982784684540e+00 3.463918346117792e+00 4.748920014848178e+00 9.207779949359048e+03 + 69380 9.738306559239879e-01 -6.065197717124311e+00 -6.015018409674704e+00 3.368841200344467e+00 4.656978548942845e+00 9.263211394609030e+03 + 69400 9.598789858393282e-01 -6.025569561287480e+00 -6.004689244742758e+00 3.563610834670167e+00 4.683508843488499e+00 9.231444455057152e+03 + 69420 9.941749203489039e-01 -6.055573092542616e+00 -6.026212061176351e+00 3.375886750958415e+00 4.544482336668427e+00 9.297686240339821e+03 + 69440 1.023894670745189e+00 -6.079558468737997e+00 -5.955677943081458e+00 3.327909644687157e+00 5.039250793456395e+00 9.081508353461004e+03 + 69460 1.029093875392457e+00 -6.068602790848482e+00 -5.986471491288456e+00 3.369668386641428e+00 4.841279018492630e+00 9.175554306300777e+03 + 69480 9.792433423116675e-01 -5.977161237868673e+00 -6.013043755135509e+00 3.756438624038982e+00 4.550395657091205e+00 9.257130619256297e+03 + 69500 9.328048157680555e-01 -5.891998114641646e+00 -6.021244179548226e+00 4.314109658841696e+00 4.571958753384207e+00 9.282334467695709e+03 + 69520 1.005794012832830e+00 -5.984705110523979e+00 -6.043924258552813e+00 3.709354710865605e+00 4.369309198750504e+00 9.352372225401237e+03 + 69540 9.688452838350087e-01 -5.916669643774752e+00 -6.028553154558140e+00 4.102551598841625e+00 4.460099166006076e+00 9.304901875777367e+03 + 69560 9.559410113108339e-01 -5.886576701845258e+00 -6.042357416117171e+00 4.278398434982454e+00 4.383881466645509e+00 9.347539454549071e+03 + 69580 1.019217639021093e+00 -5.973984159754081e+00 -5.999073069968986e+00 3.817137604692410e+00 4.673073199742116e+00 9.214186815282666e+03 + 69600 1.025647368555346e+00 -5.979400701225217e+00 -5.966463191915377e+00 3.819364201494218e+00 4.893653382024412e+00 9.114361484806544e+03 + 69620 1.039133762991373e+00 -5.996298860422524e+00 -5.990497612582082e+00 3.678071846078063e+00 4.711383508918080e+00 9.187878708611281e+03 + 69640 9.678250724812770e-01 -5.888550638365031e+00 -6.000707300182396e+00 4.286090753825563e+00 4.642069845482934e+00 9.219196281072789e+03 + 69660 1.108218439596053e+00 -6.097739024837245e+00 -5.967516494641372e+00 3.147898260263040e+00 4.895656180519160e+00 9.117610103866133e+03 + 69680 1.015884218402705e+00 -5.963867987125743e+00 -5.988902125354911e+00 3.950626156858185e+00 4.806876261125934e+00 9.182999205909098e+03 + 69700 1.078750192922928e+00 -6.063362120637528e+00 -5.988016845692251e+00 3.397881257947003e+00 4.830525486326398e+00 9.180299315568545e+03 + 69720 1.023989674573248e+00 -5.991311933360216e+00 -6.006521337817111e+00 3.723773173140301e+00 4.636438419101081e+00 9.237087195545648e+03 + 69740 1.043907612788110e+00 -6.030004272761485e+00 -5.985386223513388e+00 3.485513807592651e+00 4.741717550996032e+00 9.172244110551563e+03 + 69760 9.855258844270411e-01 -5.952326312771618e+00 -5.952862923915262e+00 3.992347048326526e+00 4.989265744099417e+00 9.072894438183102e+03 + 69780 1.008490619358759e+00 -5.991480691777755e+00 -5.924798705146660e+00 3.762463677460752e+00 5.145361963700583e+00 8.987614233113913e+03 + 69800 9.768201722638907e-01 -5.946731322094103e+00 -6.005928448009952e+00 3.898669639089970e+00 4.558750581355541e+00 9.235242404814710e+03 + 69820 9.844026951240963e-01 -5.958194927055757e+00 -6.015660591996427e+00 3.895035637687472e+00 4.565058896815239e+00 9.265181287775671e+03 + 69840 1.010596180323453e+00 -5.997919600672968e+00 -6.005956846925616e+00 3.670386022517257e+00 4.624234910774711e+00 9.235351643668326e+03 + 69860 9.748406791105271e-01 -5.946518880326788e+00 -6.011113623952737e+00 3.997393583499323e+00 4.626480569594856e+00 9.251169231989958e+03 + 69880 1.020277718700095e+00 -6.014887391637299e+00 -5.975131517784170e+00 3.668547576558483e+00 4.896831956424746e+00 9.140846370669844e+03 + 69900 1.029936795111498e+00 -6.030468731246760e+00 -5.972571785788999e+00 3.509648093336735e+00 4.842101313678548e+00 9.133043052821786e+03 + 69920 9.700978727879976e-01 -5.941941053479931e+00 -6.042721825331602e+00 3.949946207774847e+00 4.371247420028505e+00 9.348667494216550e+03 + 69940 9.936440920501012e-01 -5.979255450970929e+00 -6.007803570394982e+00 3.772561237608811e+00 4.608633518068699e+00 9.241016464042998e+03 + 69960 1.003130497428304e+00 -5.996242277028681e+00 -5.969039788753699e+00 3.757648261183772e+00 4.913849158430178e+00 9.122253330851694e+03 + 69980 1.044216552150625e+00 -6.059617274019580e+00 -5.965672748645492e+00 3.363628355778575e+00 4.903072358344904e+00 9.111960383400810e+03 + 70000 9.852857866268403e-01 -5.975417659615371e+00 -5.970595546649576e+00 3.866052625835466e+00 4.893741944704631e+00 9.126910560092116e+03 + 70020 9.521447088454075e-01 -5.927483317338010e+00 -5.952569967525423e+00 4.122190150795339e+00 4.978138723272644e+00 9.071984686956723e+03 + 70040 9.747547741272348e-01 -5.959234848799405e+00 -6.006684639081742e+00 3.898570742372665e+00 4.626106703740174e+00 9.237543811284933e+03 + 70060 1.021498447510868e+00 -6.025454432247567e+00 -6.029011446204793e+00 3.547178596103394e+00 4.526753671514875e+00 9.306316644346169e+03 + 70080 9.842505595894889e-01 -5.968322796902347e+00 -6.040565239801804e+00 3.828337532943981e+00 4.413510246333392e+00 9.342008701067141e+03 + 70100 9.787463834619456e-01 -5.961409855374034e+00 -5.981210801964068e+00 3.931127570188163e+00 4.817427470681613e+00 9.159435500639856e+03 + 70120 1.005660325235447e+00 -5.999992349811070e+00 -5.961977363406611e+00 3.742765598305623e+00 4.961053533040163e+00 9.100660831558309e+03 + 70140 1.075726393744813e+00 -6.101457502694361e+00 -5.912979323039012e+00 3.206323843680755e+00 5.288594718165804e+00 8.951843394956073e+03 + 70160 9.845988129087385e-01 -5.962434327511987e+00 -5.979147109364762e+00 3.899467719727201e+00 4.803500340033934e+00 9.153135457445871e+03 + 70180 9.799969509590278e-01 -5.948930351744463e+00 -5.989827389496398e+00 3.984979019634499e+00 4.750141900066749e+00 9.185828683835414e+03 + 70200 1.037500294428731e+00 -6.025233160214045e+00 -5.994370061893564e+00 3.497477298763991e+00 4.674697985369223e+00 9.199784988112962e+03 + 70220 9.524353245933865e-01 -5.889063724799857e+00 -6.019965267981704e+00 4.295613033114425e+00 4.543956115215919e+00 9.278420973733590e+03 + 70240 1.067401808273573e+00 -6.048512074212003e+00 -5.986156549958411e+00 3.447391860841215e+00 4.805446930591536e+00 9.174620454315991e+03 + 70260 1.046030181995155e+00 -6.005630572946362e+00 -6.026213986680897e+00 3.688382975507184e+00 4.570189828570503e+00 9.297708983252876e+03 + 70280 9.903238708068244e-01 -5.915714231403570e+00 -6.018863352333780e+00 4.193332711376542e+00 4.601034496720406e+00 9.275041767742216e+03 + 70300 1.054368400603872e+00 -6.005602617323390e+00 -5.981921502339052e+00 3.639226892776482e+00 4.775207519657253e+00 9.161634493099718e+03 + 70320 1.011213555644030e+00 -5.937321608885989e+00 -6.023202137758682e+00 4.020843469966564e+00 4.527704183210672e+00 9.288403073807489e+03 + 70340 1.076064964292021e+00 -6.032135154411962e+00 -6.030132772653575e+00 3.481623870196108e+00 4.493121856120338e+00 9.309797944034064e+03 + 70360 1.061282699097143e+00 -6.014762539367547e+00 -6.000263003707929e+00 3.694112843429825e+00 4.777371420983245e+00 9.217846907252660e+03 + 70380 9.274184484191209e-01 -5.825845023373073e+00 -6.021975436273323e+00 4.610739909111313e+00 4.484528727154773e+00 9.284618513366244e+03 + 70400 9.968163766711503e-01 -5.942685970212311e+00 -6.007575058536053e+00 3.950072650814566e+00 4.577469464105680e+00 9.240317648013504e+03 + 70420 9.761201635242843e-01 -5.930428694557924e+00 -5.981747164273491e+00 4.059653450487869e+00 4.764974855873560e+00 9.161078792380131e+03 + 70440 9.713867024820535e-01 -5.942086313575240e+00 -5.988125586064596e+00 3.948170404684166e+00 4.683805777495895e+00 9.180624759127617e+03 + 70460 1.006316693216304e+00 -6.013881445374881e+00 -5.978615344848601e+00 3.627481595938903e+00 4.829985002572228e+00 9.151533585943896e+03 + 70480 9.742213254284857e-01 -5.989170371003017e+00 -6.016548922505499e+00 3.755182416056681e+00 4.597970536512280e+00 9.267925499612702e+03 + 70500 9.826545144732803e-01 -6.026691591154540e+00 -6.024090706430131e+00 3.545288759747112e+00 4.560223442320284e+00 9.291159161167199e+03 + 70520 9.782870695124780e-01 -6.045872841111764e+00 -6.000400319605284e+00 3.435645516539124e+00 4.696755771879292e+00 9.218285934531230e+03 + 70540 9.168055778294389e-01 -5.979603577274032e+00 -6.019506460953115e+00 3.743787636488924e+00 4.514659103452336e+00 9.277024441967735e+03 + 70560 9.389316120792757e-01 -6.031078850665705e+00 -5.997412805144283e+00 3.497552172331292e+00 4.690867815519000e+00 9.209088750918942e+03 + 70580 9.742844868648181e-01 -6.097691873557064e+00 -6.011636152959340e+00 3.173067763463403e+00 4.667213028215262e+00 9.252803378852028e+03 + 70600 9.253321688657712e-01 -6.034674828112920e+00 -6.002645493200635e+00 3.485558753745739e+00 4.669476151335639e+00 9.225185260167767e+03 + 70620 9.638397026808231e-01 -6.097880327193794e+00 -6.014401242159638e+00 3.127516825126767e+00 4.606866649739553e+00 9.261330813197288e+03 + 70640 9.522620139952841e-01 -6.082628860789078e+00 -5.991198387439900e+00 3.270241528856104e+00 4.795249455647108e+00 9.190080458703873e+03 + 70660 9.684716586148416e-01 -6.103273277182125e+00 -5.982686277821319e+00 3.134777701811175e+00 4.827206912918764e+00 9.164002490463175e+03 + 70680 9.171964825713237e-01 -6.015633855824018e+00 -6.016846673568081e+00 3.645728821557715e+00 4.638764634388365e+00 9.268836177777528e+03 + 70700 9.911609315718957e-01 -6.099817159418151e+00 -6.017086254254054e+00 3.165736950888002e+00 4.640790610906448e+00 9.269601532287068e+03 + 70720 9.661113374224485e-01 -6.022847961052972e+00 -6.017463993586402e+00 3.582951994257866e+00 4.613867568617183e+00 9.270753969747608e+03 + 70740 1.015579423875894e+00 -6.046392958132828e+00 -6.007622299553887e+00 3.414422599669069e+00 4.637049720969373e+00 9.240480080510595e+03 + 70760 1.074355378180800e+00 -6.082092272173974e+00 -5.985522041420553e+00 3.272056349904133e+00 4.826577559085191e+00 9.172650288016712e+03 + 70780 1.017195074304929e+00 -5.956383062276692e+00 -5.966740378251631e+00 3.963624358940110e+00 4.904151047822547e+00 9.115194435344187e+03 + 70800 1.101391231856071e+00 -6.048493724259082e+00 -5.956504310747908e+00 3.452222075447216e+00 4.980439523144108e+00 9.083995891575007e+03 + 70820 1.076202380315758e+00 -5.989694510715016e+00 -5.994555745973149e+00 3.767818409275956e+00 4.739904444150034e+00 9.200343781739284e+03 + 70840 1.037920201539905e+00 -5.921749992826493e+00 -6.048647478772059e+00 4.092086695192322e+00 4.363421693570398e+00 9.367006359100198e+03 + 70860 1.079208670518661e+00 -5.981092501605542e+00 -6.033288883422049e+00 3.733859371381083e+00 4.434139669626719e+00 9.319526617272555e+03 + 70880 1.048641041490575e+00 -5.942072683509028e+00 -6.006378112287126e+00 4.030525458075617e+00 4.661273734798833e+00 9.236611420864498e+03 + 70900 1.102799369453900e+00 -6.033091195231801e+00 -5.945244797691348e+00 3.564146134883438e+00 5.068573743746803e+00 9.049696764594084e+03 + 70920 1.008300738029986e+00 -5.906474110435020e+00 -6.023051531940904e+00 4.151850578187029e+00 4.482444983602562e+00 9.287935505941927e+03 + 70940 1.047963690697337e+00 -5.984637984682442e+00 -5.957685353903432e+00 3.779913093828033e+00 4.934679270667241e+00 9.087590216990026e+03 + 70960 1.008306471711980e+00 -5.944218940330399e+00 -5.965502609161605e+00 4.014844160352446e+00 4.892630040286548e+00 9.111416952318772e+03 + 70980 9.844830554343613e-01 -5.927349625248446e+00 -6.047706044847937e+00 4.117153086760546e+00 4.426047900324531e+00 9.364064428847594e+03 + 71000 1.093317831662293e+00 -6.110440455961140e+00 -5.998143462359575e+00 3.136419328069795e+00 4.781246043233581e+00 9.211364543873264e+03 + 71020 1.038069042806743e+00 -6.055952119068007e+00 -5.999544966122630e+00 3.402379814607985e+00 4.726278415799051e+00 9.215670323833736e+03 + 71040 1.025771698772686e+00 -6.065206555135048e+00 -5.993512898087752e+00 3.326689458465902e+00 4.738365531789048e+00 9.197151163681378e+03 + 71060 9.547924300294415e-01 -5.986235781953862e+00 -5.992641994750723e+00 3.804814336268505e+00 4.768028871030708e+00 9.194443923604809e+03 + 71080 9.512512126915852e-01 -6.002195813934761e+00 -5.990430261843304e+00 3.648025364530105e+00 4.715584985352550e+00 9.187682429775406e+03 + 71100 9.651238720003124e-01 -6.035617255876769e+00 -5.995355254643203e+00 3.493611807361433e+00 4.724802448969121e+00 9.202791570511039e+03 + 71120 9.391212134331031e-01 -6.006264927523270e+00 -6.046366543574567e+00 3.625374424039867e+00 4.395104738968298e+00 9.359939621428322e+03 + 71140 9.780995346144636e-01 -6.070067227560605e+00 -5.970070803421549e+00 3.319388716141143e+00 4.893583657944221e+00 9.125410549761558e+03 + 71160 9.422439273216913e-01 -6.018277632392623e+00 -5.971017781226005e+00 3.596251370947818e+00 4.867624749784873e+00 9.128292673623775e+03 + 71180 8.953373227922906e-01 -5.946020470998536e+00 -5.975201594063404e+00 3.981807879385665e+00 4.814245354982994e+00 9.141066389661488e+03 + 71200 9.360093497416029e-01 -5.997496255992095e+00 -5.980727185098404e+00 3.701732116268822e+00 4.798022716345729e+00 9.157964485325909e+03 + 71220 9.595510957103931e-01 -6.017115915163399e+00 -6.014012620058224e+00 3.595762814233475e+00 4.613582414960758e+00 9.260114197716155e+03 + 71240 1.022302189070466e+00 -6.095498445915018e+00 -6.015103342600139e+00 3.138538683845451e+00 4.600179808181517e+00 9.263492158518040e+03 + 71260 9.539600300306490e-01 -5.980707235361757e+00 -6.018253033809237e+00 3.843244400920065e+00 4.627650616041106e+00 9.273164613456660e+03 + 71280 9.739483252419429e-01 -5.998982189843243e+00 -6.003156494943964e+00 3.743211536071267e+00 4.719242030211303e+00 9.226739303074457e+03 + 71300 9.893267733632010e-01 -6.013681210394778e+00 -6.026503647679898e+00 3.589013233293067e+00 4.515384814136151e+00 9.298603268027542e+03 + 71320 1.017717248988810e+00 -6.051447611332551e+00 -5.958475412843285e+00 3.409260828244252e+00 4.943121579370836e+00 9.090024406506074e+03 + 71340 9.027491933194501e-01 -5.875832359433527e+00 -6.013647845202923e+00 4.367336871939717e+00 4.575979025774354e+00 9.258963720507543e+03 + 71360 9.835126301373331e-01 -5.990083740944773e+00 -5.963465901635574e+00 3.749871921717480e+00 4.902715674128228e+00 9.105229265018572e+03 + 71380 1.009951659107425e+00 -6.021849331190434e+00 -5.971680356860030e+00 3.583107187749538e+00 4.871185201978407e+00 9.130293538631422e+03 + 71400 9.660978550681558e-01 -5.948350579057478e+00 -5.993786045792977e+00 3.993130431750898e+00 4.732232950639904e+00 9.197967254355051e+03 + 71420 9.942729105538943e-01 -5.982157256176687e+00 -6.019930944773595e+00 3.763163289123331e+00 4.546260923740464e+00 9.278334019747579e+03 + 71440 1.023346812833159e+00 -6.019275154002194e+00 -5.961517903862942e+00 3.577538064967328e+00 4.909189133172486e+00 9.099311039274462e+03 + 71460 9.785984074370471e-01 -5.947305811079222e+00 -6.008961838180979e+00 3.893727960694233e+00 4.539689511836582e+00 9.244563207524108e+03 + 71480 1.001936663544862e+00 -5.975383712620124e+00 -5.956220974946108e+00 3.841988271537350e+00 4.952023676685622e+00 9.083106487852001e+03 + 71500 9.758448619969763e-01 -5.928267489567518e+00 -6.003519838924873e+00 4.080415439762302e+00 4.648304804488941e+00 9.227851979846764e+03 + 71520 9.605426494497725e-01 -5.895851747017744e+00 -6.033080830948842e+00 4.255397191485234e+00 4.467406555420765e+00 9.318854210038962e+03 + 71540 1.086107132529073e+00 -6.072618791262723e+00 -5.978637413810428e+00 3.334561108831889e+00 4.874216721734129e+00 9.151604360545736e+03 + 71560 1.029487312461365e+00 -5.981881127300630e+00 -6.055172442504591e+00 3.738029171596152e+00 4.317179097900635e+00 9.387207366835322e+03 + 71580 9.889155214991516e-01 -5.917961882898070e+00 -6.038813180282013e+00 4.145515858090084e+00 4.451569006833656e+00 9.336597849567606e+03 + 71600 1.071779992790046e+00 -6.041715881375589e+00 -6.010042222290681e+00 3.422355544638722e+00 4.604230596587167e+00 9.247909183106223e+03 + 71620 1.045387051001033e+00 -6.007750656713964e+00 -5.991513631816355e+00 3.679137699798679e+00 4.772373209432231e+00 9.191013334353796e+03 + 71640 9.976304201425148e-01 -5.945722862013246e+00 -6.044979896073477e+00 3.953607522972456e+00 4.383658273422228e+00 9.355627793013258e+03 + 71660 1.030093144481907e+00 -6.008134872534762e+00 -5.958354142466147e+00 3.640828627041974e+00 4.926677282639041e+00 9.089661195187107e+03 + 71680 9.735890601838096e-01 -5.944521426992388e+00 -5.992746557657135e+00 3.962701487246581e+00 4.685785324154749e+00 9.194766387294718e+03 + 71700 9.718136152909835e-01 -5.968458793532701e+00 -5.947302403517010e+00 3.919440512801529e+00 5.040923778212404e+00 9.055953398534011e+03 + 71720 9.792500838272675e-01 -6.004369400978486e+00 -5.972438802520508e+00 3.630917930505519e+00 4.814268368095367e+00 9.132621416567956e+03 + 71740 1.017132512715343e+00 -6.087041548014650e+00 -5.946915139378068e+00 3.261134059083399e+00 5.065761581966309e+00 9.054791549602849e+03 + 71760 9.555981724742256e-01 -6.021054229370844e+00 -5.920401848356870e+00 3.613861167213172e+00 5.191822714901035e+00 8.974300585536268e+03 + 71780 9.326143455157420e-01 -6.005861366301362e+00 -5.972227275070633e+00 3.653356503763681e+00 4.846488660469321e+00 9.131959975134478e+03 + 71800 9.975761355065270e-01 -6.117550414376658e+00 -6.000454371284926e+00 3.048669700552140e+00 4.721053300538970e+00 9.218466002419173e+03 + 71820 9.578328188394227e-01 -6.073291908825091e+00 -6.005364507636676e+00 3.286102627160187e+00 4.676152276515430e+00 9.233542137315902e+03 + 71840 9.270729084556937e-01 -6.038286802033809e+00 -5.984575005010816e+00 3.530174098905868e+00 4.838595549285622e+00 9.169774523495307e+03 + 71860 8.938653310582083e-01 -5.995159379664235e+00 -6.019055955107147e+00 3.718523844482976e+00 4.581306010306676e+00 9.275655539246645e+03 + 71880 8.885410792384233e-01 -5.987873088774513e+00 -6.022412297676153e+00 3.736625872255009e+00 4.538296389816487e+00 9.285964427022614e+03 + 71900 9.563839895870021e-01 -6.079389394263660e+00 -6.011537465583292e+00 3.310235737837579e+00 4.699852012372279e+00 9.252484777712945e+03 + 71920 9.630348703513819e-01 -6.069517923419712e+00 -6.020844649068945e+00 3.273111089010839e+00 4.552600562497805e+00 9.281178426019344e+03 + 71940 9.739172391723437e-01 -6.056290238992450e+00 -6.003402839964583e+00 3.391715287284835e+00 4.695402916801395e+00 9.227517787445719e+03 + 71960 1.014113125183813e+00 -6.074593328143569e+00 -6.017723051222243e+00 3.292142529767240e+00 4.618700460496411e+00 9.271540432418946e+03 + 71980 9.699793435163528e-01 -5.962405309120965e+00 -6.001887957330549e+00 3.909722251238596e+00 4.683006775299100e+00 9.222843508214788e+03 + 72000 9.965478382267619e-01 -5.955830184798292e+00 -5.987265053858229e+00 3.921532276477161e+00 4.741028393804736e+00 9.177998887989144e+03 + 72020 1.078830008245408e+00 -6.037300092625221e+00 -5.983593211518478e+00 3.534839929774795e+00 4.843233152202703e+00 9.166767228477911e+03 + 72040 1.024939424166102e+00 -5.930672601878696e+00 -5.996544735008255e+00 4.075965573065004e+00 4.697717590955416e+00 9.206422189260182e+03 + 72060 1.102019506506799e+00 -6.030123380995437e+00 -5.956862211376690e+00 3.550052817922530e+00 4.970729791002737e+00 9.085078264463828e+03 + 72080 1.118149395075737e+00 -6.045421837898967e+00 -5.983311416211918e+00 3.412658874124937e+00 4.769306527008667e+00 9.165836409897805e+03 + 72100 1.002070216051627e+00 -5.871989531821907e+00 -6.008740031353540e+00 4.375232544573538e+00 4.589990014191490e+00 9.243889402190953e+03 + 72120 1.105415426892710e+00 -6.028277198756220e+00 -5.993854563758683e+00 3.531847971546880e+00 4.729508068588291e+00 9.198180755602387e+03 + 72140 1.009588243500069e+00 -5.894971833292948e+00 -6.041816542486082e+00 4.275535187323851e+00 4.432330142991575e+00 9.345858563363059e+03 + 72160 1.071683397213957e+00 -6.000744960720912e+00 -5.981885776964592e+00 3.674754665468287e+00 4.783047017046325e+00 9.161540611702623e+03 + 72180 9.946490512149536e-01 -5.902927079986131e+00 -6.090570727767410e+00 4.168632618087143e+00 4.091153754766386e+00 9.497191335466954e+03 + 72200 1.035507107271916e+00 -5.986990137599246e+00 -6.071748818749489e+00 3.756459179495844e+00 4.269761715967634e+00 9.438634855822280e+03 + 72220 9.895302681295302e-01 -5.946568895527877e+00 -6.071431176268351e+00 3.933916525493481e+00 4.216937987106183e+00 9.437658667263580e+03 + 72240 1.006784842984461e+00 -6.002232964994853e+00 -6.043165678976586e+00 3.646251387976828e+00 4.411209409976699e+00 9.350045822141316e+03 + 72260 9.800317915637684e-01 -5.990997667820258e+00 -5.993367971854662e+00 3.747706670204098e+00 4.734096017635187e+00 9.196711542883490e+03 + 72280 9.541611269377547e-01 -5.974495549746352e+00 -6.007631576537778e+00 3.827984914091407e+00 4.637712720471461e+00 9.240485748317889e+03 + 72300 9.703441132470307e-01 -6.014343188160325e+00 -6.007154961405859e+00 3.606793443586267e+00 4.648069353984906e+00 9.239037110084399e+03 + 72320 9.745826216168099e-01 -6.033042940840031e+00 -5.995390535825360e+00 3.553661731551272e+00 4.769867667836362e+00 9.202907563139648e+03 + 72340 9.893766172010181e-01 -6.062682746386683e+00 -5.971765898482897e+00 3.329315320608014e+00 4.851373930608297e+00 9.130588548477490e+03 + 72360 9.878885767452101e-01 -6.063625814109034e+00 -5.973130717294594e+00 3.338390998424539e+00 4.858027848404026e+00 9.134745742633941e+03 + 72380 1.003590090487693e+00 -6.084627335388021e+00 -5.973996400962502e+00 3.218669066042920e+00 4.853929011596021e+00 9.137400143012603e+03 + 72400 9.195761994545517e-01 -5.953605992015820e+00 -6.032573934334579e+00 3.953282218703383e+00 4.499836073659494e+00 9.317319563778892e+03 + 72420 1.007041620130130e+00 -6.077595323448280e+00 -5.986208045547843e+00 3.274393168785463e+00 4.799153060625322e+00 9.174770250881435e+03 + 72440 9.677492330028552e-01 -6.012882846342269e+00 -5.996740833921867e+00 3.629383792598831e+00 4.722073725885132e+00 9.207031490438956e+03 + 72460 9.297533990240068e-01 -5.947561024179301e+00 -6.052522664197780e+00 3.974802111536600e+00 4.372096131789196e+00 9.378981314326251e+03 + 72480 1.063229623977600e+00 -6.137372029978506e+00 -6.005256953442391e+00 2.902032248855926e+00 4.660657463068318e+00 9.233205226432330e+03 + 72500 9.821717840758694e-01 -6.010700947077045e+00 -5.996165548888605e+00 3.683418418385881e+00 4.766882924129504e+00 9.205279165884531e+03 + 72520 9.960538776416079e-01 -6.024524719042795e+00 -5.981954926054741e+00 3.567371546294845e+00 4.811813885286423e+00 9.161718748452320e+03 + 72540 9.633678176032293e-01 -5.966936630652946e+00 -5.993010304996823e+00 3.843526335369314e+00 4.693807262398707e+00 9.195589549789927e+03 + 72560 9.436046650141162e-01 -5.929456081398350e+00 -6.022480457203101e+00 4.061817871340354e+00 4.527657509993846e+00 9.286179719219996e+03 + 72580 9.869399320821113e-01 -5.984915766452129e+00 -5.996407449061546e+00 3.743978240213786e+00 4.677991220338381e+00 9.206039087703763e+03 + 72600 9.894433802598150e-01 -5.981765974398888e+00 -5.959143559923051e+00 3.825207478848676e+00 4.955108883576259e+00 9.092020922724414e+03 + 72620 1.012369969648965e+00 -6.007789460735888e+00 -5.968406337016056e+00 3.659451806762527e+00 4.885595797680506e+00 9.120327299602290e+03 + 72640 1.044833696804149e+00 -6.047548816885360e+00 -6.011591570363553e+00 3.401532642358674e+00 4.608004716252809e+00 9.252668929408239e+03 + 72660 1.042878119919221e+00 -6.041315105648441e+00 -5.967067552800815e+00 3.492665916880504e+00 4.919006855103245e+00 9.116232694050203e+03 + 72680 1.008609856064491e+00 -5.987829635750078e+00 -5.967645505756782e+00 3.792659165324096e+00 4.908559563229623e+00 9.117980949141656e+03 + 72700 9.837594588270533e-01 -5.949459601908766e+00 -5.998439563256382e+00 3.964513392359255e+00 4.683262874676719e+00 9.212240496179531e+03 + 72720 1.017579545891803e+00 -5.996451497709772e+00 -5.975441180260935e+00 3.695138026292372e+00 4.815782520419708e+00 9.141822906846657e+03 + 72740 1.035840642719175e+00 -6.020132138761793e+00 -6.005159753250268e+00 3.530463830540507e+00 4.616437585116852e+00 9.232895592936085e+03 + 72760 1.008928834107873e+00 -5.980747121490047e+00 -6.047023041371335e+00 3.788062050982600e+00 4.407495462858786e+00 9.361943374652943e+03 + 72780 1.059828341742672e+00 -6.060382805099971e+00 -6.013695712495570e+00 3.334679677148328e+00 4.602764187687033e+00 9.259105652548031e+03 + 72800 9.850789975835570e-01 -5.954030867994521e+00 -6.004543221841659e+00 3.935518103732135e+00 4.645468351180375e+00 9.231003177710052e+03 + 72820 9.630241799581404e-01 -5.927236528573200e+00 -6.003756287345747e+00 4.074351982060411e+00 4.634963685794044e+00 9.228568747751471e+03 + 72840 9.581509196072250e-01 -5.926424763739678e+00 -6.047814422295869e+00 4.073210582322220e+00 4.376172377903617e+00 9.364393046675106e+03 + 72860 9.538324350628707e-01 -5.927467671614225e+00 -6.033619713073127e+00 4.085138023159058e+00 4.475596574126718e+00 9.320508817989046e+03 + 72880 9.772919038816135e-01 -5.972255849766232e+00 -5.989933659745402e+00 3.804085942703376e+00 4.702577222170730e+00 9.186126927392355e+03 + 72900 9.385267236917162e-01 -5.928091576125930e+00 -5.977136678490178e+00 4.095129188857376e+00 4.813504621376804e+00 9.146987296195839e+03 + 72920 1.021914793879981e+00 -6.072481960013378e+00 -5.987770565577112e+00 3.298779120805454e+00 4.785205056704415e+00 9.179548916763926e+03 + 72940 9.956241273626569e-01 -6.069942850214470e+00 -5.972962058692605e+00 3.381462542508841e+00 4.938341255156369e+00 9.134227172931334e+03 + 72960 9.427537345327136e-01 -6.035433873158660e+00 -5.951503630991672e+00 3.479841322705057e+00 4.961781761390906e+00 9.068788063262227e+03 + 72980 9.584143174194453e-01 -6.096835711690988e+00 -5.962184387590973e+00 3.202888540254170e+00 4.976077280461521e+00 9.101322917840846e+03 + 73000 8.897433346864606e-01 -6.024582010244712e+00 -6.017266691069381e+00 3.511186317004973e+00 4.553192011751712e+00 9.270148894877773e+03 + 73020 9.420612941723159e-01 -6.122161043361315e+00 -5.988142730234958e+00 3.046100560714555e+00 4.815654453953028e+00 9.180710849400839e+03 + 73040 8.594203884316532e-01 -6.012021370172440e+00 -6.009392384352215e+00 3.653872842319607e+00 4.668968885733579e+00 9.245902218776162e+03 + 73060 9.153951703108179e-01 -6.098295642571225e+00 -5.966823386775557e+00 3.170637024517309e+00 4.925571062561866e+00 9.115492559813993e+03 + 73080 9.349185694147871e-01 -6.120332458214604e+00 -6.001838774433670e+00 3.009713019007640e+00 4.690122088116064e+00 9.222725441704393e+03 + 73100 8.902830525473573e-01 -6.038485246691873e+00 -6.055086490664407e+00 3.461832692944674e+00 4.366505781020178e+00 9.386933520293398e+03 + 73120 9.541177678962579e-01 -6.111302430691705e+00 -5.979619975024582e+00 3.073326582084753e+00 4.829467620319527e+00 9.154612407239043e+03 + 73140 9.446079358073918e-01 -6.066305813332002e+00 -6.000901303808815e+00 3.351472652066009e+00 4.727035467063291e+00 9.219808191803604e+03 + 73160 9.523283277816054e-01 -6.042124963276870e+00 -6.002409310929325e+00 3.424798832755642e+00 4.652852254512582e+00 9.224451131833444e+03 + 73180 9.860677071782967e-01 -6.052937141030777e+00 -6.011844524543125e+00 3.406591736981609e+00 4.642551899915558e+00 9.253454857453789e+03 + 73200 9.696758730040042e-01 -5.994139723843039e+00 -6.025167885409884e+00 3.696605648769986e+00 4.518437143460674e+00 9.294474643759902e+03 + 73220 9.685698567268297e-01 -5.964575540333408e+00 -5.978939121916369e+00 3.886407841529038e+00 4.803929933322610e+00 9.152493213761703e+03 + 73240 1.019949351075725e+00 -6.015005137941038e+00 -5.981924377408824e+00 3.629690850558613e+00 4.819645696765731e+00 9.161627700778021e+03 + 73260 9.802523650212820e-01 -5.933636352721432e+00 -5.996465272586661e+00 4.061399387477482e+00 4.700626006867407e+00 9.206215603778859e+03 + 73280 1.076139918541565e+00 -6.059214805804439e+00 -5.973754177933229e+00 3.418326278007336e+00 4.909054428233251e+00 9.136651810245194e+03 + 73300 9.951623101387671e-01 -5.926586783501308e+00 -6.023392146861017e+00 4.054972388352441e+00 4.499101011359426e+00 9.289000950348618e+03 + 73320 1.055424429054787e+00 -6.008430208280769e+00 -5.978004059442274e+00 3.621902741777660e+00 4.796614396839617e+00 9.149647265445203e+03 + 73340 1.023412207219636e+00 -5.956181948449548e+00 -6.003579218605379e+00 3.938087102240011e+00 4.665924642301377e+00 9.228042560828810e+03 + 73360 1.003807728222969e+00 -5.924937004075042e+00 -6.015707898954442e+00 4.091170215272779e+00 4.569949690124677e+00 9.265330261004359e+03 + 73380 9.559026332572658e-01 -5.855027826825950e+00 -6.055654366462881e+00 4.458932121982870e+00 4.306903484530941e+00 9.388669100465399e+03 + 73400 1.037852592749056e+00 -5.981079648619350e+00 -6.019974027281796e+00 3.847248531387730e+00 4.623910990222319e+00 9.278458618208364e+03 + 73420 1.072692042707207e+00 -6.044203960592385e+00 -5.988698961330708e+00 3.468813445786739e+00 4.787531740918162e+00 9.182385700210083e+03 + 73440 9.999946427266874e-01 -5.949725561931774e+00 -6.010709462947363e+00 3.972585780990825e+00 4.622406784131132e+00 9.249974056372803e+03 + 73460 9.886386741721456e-01 -5.951484561933450e+00 -6.023008183882084e+00 3.996156357327556e+00 4.585456651853772e+00 9.287819923013794e+03 + 73480 9.909420370217351e-01 -5.981962918496282e+00 -6.003082398752563e+00 3.804987889341656e+00 4.683716565481086e+00 9.226526522068676e+03 + 73500 9.735022201765233e-01 -5.987359680096206e+00 -5.998398472885821e+00 3.754767131161684e+00 4.691380674716045e+00 9.212140434787490e+03 + 73520 1.024103750097410e+00 -6.098275858583709e+00 -5.982401838108406e+00 3.174730058843979e+00 4.840096615859887e+00 9.163125262598514e+03 + 73540 9.490113754906571e-01 -6.025421573095553e+00 -6.008590778178114e+00 3.549747662637606e+00 4.646392691610639e+00 9.243450055791789e+03 + 73560 9.691281323624915e-01 -6.092049403394366e+00 -6.008933304298841e+00 3.176295959447998e+00 4.653561462629268e+00 9.244515878588805e+03 + 73580 8.869036170327755e-01 -6.000736475722387e+00 -6.018539277353098e+00 3.655714114911441e+00 4.553487672973247e+00 9.274070909065875e+03 + 73600 8.587375873138998e-01 -5.980523213660408e+00 -6.048936868582329e+00 3.777920883587395e+00 4.385079090046842e+00 9.367880511000523e+03 + 73620 8.887515577539745e-01 -6.036262402152713e+00 -6.025585650016043e+00 3.474824805092692e+00 4.536132368083503e+00 9.295783918509487e+03 + 73640 9.566899483279282e-01 -6.139458744436604e+00 -5.980252060230255e+00 2.980864258747454e+00 4.895053676615069e+00 9.156548221226662e+03 + 73660 9.059638205367911e-01 -6.060451563490118e+00 -5.987297905192203e+00 3.341698514287480e+00 4.761758140726145e+00 9.178105566097443e+03 + 73680 9.885040644887858e-01 -6.170493717751187e+00 -5.947091466689836e+00 2.819292181875123e+00 5.102102478856027e+00 9.055374459334902e+03 + 73700 8.840688143161977e-01 -5.997909589055889e+00 -6.017597169699814e+00 3.711955057981150e+00 4.598905923280478e+00 9.271167702400740e+03 + 73720 9.365566228236535e-01 -6.056835763544740e+00 -5.993285098337915e+00 3.404465325526309e+00 4.769383079577556e+00 9.196441354819448e+03 + 73740 9.751530238993469e-01 -6.092074963164404e+00 -5.967047927530567e+00 3.289551343810193e+00 5.007475930290920e+00 9.116170926077595e+03 + 73760 9.975831492148352e-01 -6.105257473770175e+00 -6.006174425853515e+00 3.116666309592710e+00 4.685616503782285e+00 9.236034698245219e+03 + 73780 9.491981272752904e-01 -6.019022887507274e+00 -6.006799806614746e+00 3.587465015970548e+00 4.657651837971096e+00 9.237945318475575e+03 + 73800 9.216555509806402e-01 -5.965813920687352e+00 -6.003387736334689e+00 3.887301085769727e+00 4.671546421793536e+00 9.227435384514798e+03 + 73820 9.406659277907080e-01 -5.982136118589128e+00 -5.996893245455352e+00 3.769564501857281e+00 4.684826795733422e+00 9.207538606891629e+03 + 73840 9.891430459387738e-01 -6.039551973014363e+00 -5.996521143106872e+00 3.462672563550377e+00 4.709762247878601e+00 9.206382389439392e+03 + 73860 9.641956462911899e-01 -5.988434455456525e+00 -6.022913449543973e+00 3.744670657850876e+00 4.546686938193655e+00 9.287525970883193e+03 + 73880 1.040436998836157e+00 -6.089197740751824e+00 -5.976583468637202e+00 3.209747510178056e+00 4.856396087662505e+00 9.145325511218460e+03 + 73900 9.902134433520842e-01 -6.001736018431164e+00 -5.988534457843059e+00 3.704927291764693e+00 4.780732695596491e+00 9.181887026660757e+03 + 73920 9.750133245832493e-01 -5.967663066883413e+00 -5.984000698922340e+00 3.876406902899693e+00 4.782593691491786e+00 9.168004380084978e+03 + 73940 9.676659038298104e-01 -5.943527519341075e+00 -6.009167331150826e+00 4.003113238752114e+00 4.626199281612475e+00 9.245192341642587e+03 + 73960 1.022926795406777e+00 -6.010827826801174e+00 -5.963057261811311e+00 3.622604812793118e+00 4.896910789435950e+00 9.103971088960068e+03 + 73980 9.936230909444714e-01 -5.950745586237474e+00 -5.970523657728851e+00 4.012275095885297e+00 4.898706348735141e+00 9.126760256883810e+03 + 74000 9.677971904937270e-01 -5.894639047040153e+00 -6.007142541591760e+00 4.309578534251855e+00 4.663566058677013e+00 9.238960846668213e+03 + 74020 1.038021345896250e+00 -5.980809707069948e+00 -6.017287406949886e+00 3.775172775859496e+00 4.565712178243079e+00 9.270201201010348e+03 + 74040 1.049623301639240e+00 -5.984762706398663e+00 -5.981745335087776e+00 3.764489474779817e+00 4.781815687783631e+00 9.161089525729400e+03 + 74060 1.002188666697246e+00 -5.903731468758542e+00 -6.022085452384821e+00 4.179474039450710e+00 4.499867150248843e+00 9.284940314765439e+03 + 74080 1.053302478472394e+00 -5.970006720760422e+00 -5.980070735402563e+00 3.901223859450767e+00 4.843434729974358e+00 9.155948172651344e+03 + 74100 9.993446325774886e-01 -5.881536762101338e+00 -6.051637262444094e+00 4.320948035587771e+00 4.344204639652308e+00 9.376222675169513e+03 + 74120 1.057371373534696e+00 -5.964382717968213e+00 -5.992082708326333e+00 3.875401649070734e+00 4.716344017874761e+00 9.192744929416014e+03 + 74140 1.059100064726554e+00 -5.970089011035608e+00 -5.991851099144516e+00 3.905355264036811e+00 4.780393986443207e+00 9.192004089486787e+03 + 74160 1.012734066428334e+00 -5.909967931623578e+00 -6.000440588299190e+00 4.144806234804341e+00 4.625298239574605e+00 9.218380888102363e+03 + 74180 1.008633872007563e+00 -5.920232898388734e+00 -5.955999617057108e+00 4.206675812570014e+00 5.001297779094386e+00 9.082443468750953e+03 + 74200 9.591600109347872e-01 -5.868373407856528e+00 -6.032826827320543e+00 4.416313621040069e+00 4.471996637393285e+00 9.318083929682352e+03 + 74220 1.095452984239014e+00 -6.103580511714972e+00 -5.996643799287971e+00 3.089170627233890e+00 4.703217778392498e+00 9.206765921389173e+03 + 74240 9.886066303671122e-01 -5.988512526126677e+00 -5.994509048595935e+00 3.766928270991767e+00 4.732495311014439e+00 9.200180359988837e+03 + 74260 9.411223199422218e-01 -5.960400452457267e+00 -5.970375259741683e+00 3.882880109001749e+00 4.825603221978195e+00 9.126319633202982e+03 + 74280 9.529909602980556e-01 -6.011606380794977e+00 -5.958498274012977e+00 3.644466846916080e+00 4.949421814511286e+00 9.090089143758922e+03 + 74300 9.235976668988890e-01 -5.989878319568323e+00 -5.991331221478392e+00 3.763403608490166e+00 4.755060820886709e+00 9.190441240661332e+03 + 74320 9.502289029324132e-01 -6.044833725493511e+00 -5.985216240738840e+00 3.471777046062495e+00 4.814109869299768e+00 9.171738115742695e+03 + 74340 9.652570913703946e-01 -6.076206760035795e+00 -6.011626902902939e+00 3.274773042297301e+00 4.645600575654756e+00 9.252804115994682e+03 + 74360 9.831976872799403e-01 -6.108786456278864e+00 -5.965360665919958e+00 3.131444597894031e+00 4.955017681204195e+00 9.111006700122731e+03 + 74380 9.468762251630668e-01 -6.055160460683966e+00 -5.981432884859819e+00 3.411454123922700e+00 4.834809273610433e+00 9.160119526759952e+03 + 74400 9.711692127968108e-01 -6.084723659965508e+00 -5.974109568396302e+00 3.268680654709732e+00 4.903843885975464e+00 9.137738108864660e+03 + 74420 9.571691205037024e-01 -6.051103259394720e+00 -5.997803782302231e+00 3.392340136575918e+00 4.698393982108413e+00 9.210316074517208e+03 + 74440 9.431146066364593e-01 -6.011444772907545e+00 -6.000585752889872e+00 3.619722061850069e+00 4.682076235219466e+00 9.218831306517093e+03 + 74460 9.894509465667535e-01 -6.053388857474249e+00 -5.980634912109710e+00 3.438883501037140e+00 4.856647913956983e+00 9.157684392197632e+03 + 74480 9.466338595274219e-01 -5.958288926465344e+00 -5.970911898820786e+00 3.957492679641246e+00 4.885009618977638e+00 9.127988633256457e+03 + 74500 1.072644057698383e+00 -6.111003206831461e+00 -5.934422816210002e+00 3.115830994191301e+00 5.129782922866848e+00 9.016853729222163e+03 + 74520 9.600788146021789e-01 -5.907807867108827e+00 -5.967626846587486e+00 4.204741608582630e+00 4.861251771459010e+00 9.117905091596664e+03 + 74540 1.002354400594536e+00 -5.935926997373625e+00 -5.955875563865781e+00 4.000893959997279e+00 4.886346204168629e+00 9.082068068329376e+03 + 74560 1.031669038183964e+00 -5.950385553548172e+00 -5.990021288327481e+00 3.941737550592642e+00 4.714143027879710e+00 9.186440899080435e+03 + 74580 1.119767064394269e+00 -6.062424206716082e+00 -6.006498337256842e+00 3.350412455689892e+00 4.671547452625178e+00 9.237022633588091e+03 + 74600 1.027980859129202e+00 -5.921036440618494e+00 -6.059313969190134e+00 4.088703246316681e+00 4.294692278879936e+00 9.400028553773775e+03 + 74620 9.971038222135958e-01 -5.875922197200731e+00 -5.998062168033779e+00 4.383276683798255e+00 4.681930070175494e+00 9.211064967646806e+03 + 74640 1.013258001856223e+00 -5.902500533533529e+00 -6.016190543704621e+00 4.177963530508841e+00 4.525137898634221e+00 9.266791164605867e+03 + 74660 1.059193675430028e+00 -5.976240775410083e+00 -6.035402595073657e+00 3.725388198118878e+00 4.385671874348631e+00 9.326032035460832e+03 + 74680 1.028157248942786e+00 -5.941259312767286e+00 -6.005303709807145e+00 3.994003166115061e+00 4.626250327473783e+00 9.233298723132541e+03 + 74700 1.014413372245092e+00 -5.934158874136894e+00 -6.013106878784708e+00 3.971760586441834e+00 4.518428926589850e+00 9.257330827541056e+03 + 74720 1.001833892551771e+00 -5.928896048569301e+00 -6.061116476130052e+00 4.042941513524431e+00 4.283711357425559e+00 9.405594345123131e+03 + 74740 1.061532192839292e+00 -6.034599053163236e+00 -6.000426365711791e+00 3.544977641761573e+00 4.741202501314065e+00 9.218346310761026e+03 + 74760 9.902227363604282e-01 -5.945828299383903e+00 -5.996289226839925e+00 4.028104925798226e+00 4.738350471542462e+00 9.205632245778941e+03 + 74780 9.861669758834188e-01 -5.956543563755902e+00 -5.985005868812186e+00 3.965476236022762e+00 4.802041275862109e+00 9.171079723979035e+03 + 74800 1.048940095783802e+00 -6.065132321655853e+00 -6.010596632637689e+00 3.367041636440358e+00 4.680194002153256e+00 9.249612316436929e+03 + 74820 1.015834966429493e+00 -6.034067298275076e+00 -6.015563651510153e+00 3.447482379290489e+00 4.553733182444764e+00 9.264919554420389e+03 + 74840 1.005087561666618e+00 -6.035735410062025e+00 -6.018618063564039e+00 3.460597649048988e+00 4.558888101541232e+00 9.274279876957518e+03 + 74860 9.962693175405798e-01 -6.037874776910914e+00 -6.006042770159165e+00 3.517454826834097e+00 4.700239135589765e+00 9.235615055760793e+03 + 74880 9.838210984550469e-01 -6.035391567341517e+00 -6.024031198393784e+00 3.491072320046960e+00 4.556305316556253e+00 9.290978717553890e+03 + 74900 9.898835861940940e-01 -6.057328591809266e+00 -5.975912018857560e+00 3.497926911986112e+00 4.965433473048749e+00 9.143251803428291e+03 + 74920 1.004909477001958e+00 -6.090743513431176e+00 -5.990829394774128e+00 3.273634725577022e+00 4.847357056565681e+00 9.188942810119861e+03 + 74940 9.013714894836677e-01 -5.947063166425846e+00 -6.067129678785827e+00 3.919276247697617e+00 4.229835753493866e+00 9.424284924996366e+03 + 74960 9.906082050584657e-01 -6.086509472189142e+00 -5.982767825923970e+00 3.230484647502322e+00 4.826185234324818e+00 9.164245384517386e+03 + 74980 9.731575350486679e-01 -6.065009099184050e+00 -5.989783895955930e+00 3.313236137130429e+00 4.745190895128873e+00 9.185734125492649e+03 + 75000 9.031767636327735e-01 -5.964194071152052e+00 -6.034594344179341e+00 3.847100290925394e+00 4.442851028795658e+00 9.323569205250889e+03 + 75020 9.891656218570476e-01 -6.091341204240019e+00 -6.013609404111023e+00 3.263613987255953e+00 4.709962012553845e+00 9.258872094576778e+03 + 75040 9.561902958900501e-01 -6.037082946438109e+00 -6.003341784424343e+00 3.459469436498536e+00 4.653216410209525e+00 9.227293357467415e+03 + 75060 9.581524310898951e-01 -6.025986576067939e+00 -5.989262989277131e+00 3.582128423811049e+00 4.793000942120560e+00 9.184122051767541e+03 + 75080 9.387389412284702e-01 -5.970807685842014e+00 -6.049767478002581e+00 3.806458001259527e+00 4.353058655685205e+00 9.370478257929057e+03 + 75100 1.044418386700193e+00 -6.097579746599338e+00 -6.004396905190619e+00 3.138306937845605e+00 4.673377233212571e+00 9.230566845158684e+03 + 75120 1.018087072607931e+00 -6.027268641292266e+00 -5.983662875710836e+00 3.540156788160131e+00 4.790547842099112e+00 9.166961386994813e+03 + 75140 9.909883097485785e-01 -5.954810891121200e+00 -5.995294338021647e+00 3.977313591988026e+00 4.744851375092496e+00 9.202589508768591e+03 + 75160 1.045909543562959e+00 -6.004171330811315e+00 -6.008944506402410e+00 3.658947651965899e+00 4.631539339075294e+00 9.244518642556346e+03 + 75180 1.054989044812415e+00 -5.991284879842066e+00 -5.987879125589654e+00 3.750026629047960e+00 4.769582997004078e+00 9.179871770258265e+03 + 75200 1.067002661576107e+00 -5.986307099405733e+00 -6.011345862520630e+00 3.769605685167063e+00 4.625829232625257e+00 9.251906644338298e+03 + 75220 1.105922795263517e+00 -6.028050886859274e+00 -6.017253752654459e+00 3.523489917872748e+00 4.585488733327917e+00 9.270110509705943e+03 + 75240 1.066246616021045e+00 -5.962059308394772e+00 -6.022797370135529e+00 3.818319742034890e+00 4.469552392334786e+00 9.287174457689011e+03 + 75260 1.067160928989269e+00 -5.960776474914677e+00 -5.997389461603242e+00 3.996222794054231e+00 4.785985358647114e+00 9.209036466065896e+03 + 75280 1.044739411074072e+00 -5.933220932086551e+00 -6.004514426293211e+00 4.084634762806452e+00 4.675256486439234e+00 9.230875370225827e+03 + 75300 1.010352341456237e+00 -5.894483044046141e+00 -6.006525821265237e+00 4.272884885446588e+00 4.629517920090801e+00 9.237089432280158e+03 + 75320 1.057688127006629e+00 -5.981959759748929e+00 -5.985651972876907e+00 3.824511211462229e+00 4.803309952313250e+00 9.173043169743796e+03 + 75340 1.083425482846253e+00 -6.043483076819438e+00 -6.006912996151572e+00 3.433519005409829e+00 4.643510067806410e+00 9.238295037052616e+03 + 75360 9.995795688748972e-01 -5.950110364480969e+00 -6.079360059960619e+00 3.905626636812446e+00 4.163454884042567e+00 9.462256827859637e+03 + 75380 9.801132111970365e-01 -5.957699646594110e+00 -6.019643513734653e+00 3.918240176567147e+00 4.562548905663687e+00 9.277434126401597e+03 + 75400 9.492582882703273e-01 -5.947366728712081e+00 -5.994264775209764e+00 3.959913947333450e+00 4.690618106894517e+00 9.199404777115471e+03 + 75420 9.892236933165036e-01 -6.036082187835361e+00 -5.975129311222140e+00 3.506518680043181e+00 4.856519529983462e+00 9.140827764862217e+03 + 75440 9.981365269938101e-01 -6.071597767123696e+00 -5.967698078811980e+00 3.324924850573961e+00 4.921532939284633e+00 9.118135088139110e+03 + 75460 9.866187069707827e-01 -6.070671803030987e+00 -5.953334102278861e+00 3.319037862306783e+00 4.992809097975996e+00 9.074333977195169e+03 + 75480 9.334906943703306e-01 -5.999884647112624e+00 -5.977785797213302e+00 3.671864168506138e+00 4.798759184414012e+00 9.148976605514208e+03 + 75500 1.023552451891128e+00 -6.136493766140057e+00 -5.930544394049958e+00 2.989713577526071e+00 5.172306742629749e+00 9.005066546657363e+03 + 75520 1.039443698483504e+00 -6.159465345475929e+00 -5.951838761235138e+00 2.825702610259700e+00 5.017926587080393e+00 9.069789785376292e+03 + 75540 8.903103785785813e-01 -5.933463243448830e+00 -5.984812899822739e+00 4.117314744942707e+00 4.822457071710081e+00 9.170441904241015e+03 + 75560 9.784698811300135e-01 -6.054469740441311e+00 -5.978496184325833e+00 3.402317915518569e+00 4.838569831603455e+00 9.151138456328537e+03 + 75580 9.733704414436345e-01 -6.033475562350262e+00 -6.005629566254975e+00 3.509287982797400e+00 4.669184001530511e+00 9.234321088914077e+03 + 75600 9.574098149151347e-01 -5.995844739760355e+00 -5.966459203382239e+00 3.698554207571252e+00 4.867290504851455e+00 9.114356866955495e+03 + 75620 9.334794682956703e-01 -5.944318230217112e+00 -5.967220120411055e+00 3.997128777686285e+00 4.865622580136614e+00 9.116679492964717e+03 + 75640 1.017813216774222e+00 -6.050475456241590e+00 -5.988513375223678e+00 3.411555454694427e+00 4.767351312500325e+00 9.181792010965863e+03 + 75660 1.018247067036535e+00 -6.033456197337858e+00 -6.007367624479294e+00 3.499831735510538e+00 4.649636358058020e+00 9.239687057587367e+03 + 75680 9.841612210055232e-01 -5.969275112742001e+00 -5.977324694765610e+00 3.838262099970233e+00 4.792040154321882e+00 9.147584227092411e+03 + 75700 1.023086156526466e+00 -6.016973927045079e+00 -6.002793952378700e+00 3.571559721494112e+00 4.652983330372449e+00 9.225626114234668e+03 + 75720 1.044223430331100e+00 -6.041212489930854e+00 -6.007142877061423e+00 3.474701268222751e+00 4.670334257574575e+00 9.238983486353010e+03 + 75740 9.802168433681153e-01 -5.943511748215252e+00 -6.022010906204428e+00 3.946425407635748e+00 4.495671094756464e+00 9.284735706470581e+03 + 75760 1.038954613890368e+00 -6.029881328656793e+00 -5.952945884107309e+00 3.540871849266513e+00 4.982647077591219e+00 9.073172151790774e+03 + 75780 9.993848586369747e-01 -5.970201108789675e+00 -6.023846731486981e+00 3.831640501698355e+00 4.523599034537143e+00 9.290374204570977e+03 + 75800 1.029290720166318e+00 -6.014602965115286e+00 -5.995357952957322e+00 3.606274871449123e+00 4.716782709416160e+00 9.202799288889351e+03 + 75820 9.917700322078955e-01 -5.959765865789294e+00 -6.026380689064617e+00 3.890163113003064e+00 4.507650489145570e+00 9.298211084524097e+03 + 75840 1.042892857361761e+00 -6.038284676672754e+00 -5.991404087365744e+00 3.522401576659979e+00 4.791597175208578e+00 9.190700934275812e+03 + 75860 1.026569282707879e+00 -6.018164703331084e+00 -6.013845163119138e+00 3.625743335696706e+00 4.650546804040385e+00 9.259590123767643e+03 + 75880 1.019310343460502e+00 -6.012670587135110e+00 -6.001861194840267e+00 3.673453076236659e+00 4.735522279541696e+00 9.222747903413472e+03 + 75900 9.996539443294665e-01 -5.991643372108337e+00 -5.966618700324237e+00 3.693974437407740e+00 4.837669975347482e+00 9.114835772791226e+03 + 75920 9.749006909556794e-01 -5.959933933584758e+00 -5.984274830928804e+00 3.885337413815258e+00 4.745568214524056e+00 9.168819951777805e+03 + 75940 1.032945191378279e+00 -6.048987263396410e+00 -6.000415941836204e+00 3.387731501983450e+00 4.666635546769871e+00 9.218341025775851e+03 + 75960 9.730442500072982e-01 -5.966501829892515e+00 -6.011242578217908e+00 3.829347408102279e+00 4.572439107609442e+00 9.251593896570248e+03 + 75980 9.563082526846279e-01 -5.946660088488365e+00 -5.995462278642439e+00 3.967992828326419e+00 4.687763100347206e+00 9.203122695522623e+03 + 76000 1.058997723492553e+00 -6.102536669633796e+00 -5.984321062105490e+00 3.157451226388706e+00 4.836263538622379e+00 9.168991509861893e+03 + 76020 9.805013462076424e-01 -5.993833789140003e+00 -5.998408899395569e+00 3.691087299817792e+00 4.664816308734304e+00 9.212182104184820e+03 + 76040 8.964928755427293e-01 -5.879642025898708e+00 -6.030264511635922e+00 4.272221797885052e+00 4.407324176027634e+00 9.310194074019859e+03 + 76060 1.006614301242289e+00 -6.051929230974168e+00 -5.991137774956438e+00 3.387713568774124e+00 4.736787516675347e+00 9.189878940377828e+03 + 76080 9.666553023282343e-01 -6.003549831001783e+00 -6.009936022633726e+00 3.679526993772567e+00 4.642856493161990e+00 9.247577640962007e+03 + 76100 9.614220741673107e-01 -6.008141877320506e+00 -5.978339355400136e+00 3.670887373936226e+00 4.842018066728354e+00 9.150675254777896e+03 + 76120 1.050500463316089e+00 -6.152801754801598e+00 -5.960273058215344e+00 2.883719295811404e+00 4.989248865329185e+00 9.095510106599324e+03 + 76140 9.346987238936402e-01 -5.996138869001317e+00 -6.001785448946238e+00 3.738170515829923e+00 4.705746979980766e+00 9.222525502074384e+03 + 76160 9.624118833728623e-01 -6.049282951305624e+00 -5.995734564101333e+00 3.458774950666093e+00 4.766258076579273e+00 9.203963132863235e+03 + 76180 9.431754148477602e-01 -6.030602554820272e+00 -6.020957590001691e+00 3.474640771180346e+00 4.530023651722122e+00 9.281502497573641e+03 + 76200 9.610186511686951e-01 -6.063543948994777e+00 -5.974839186615586e+00 3.368646722591369e+00 4.878003195190301e+00 9.139945889255712e+03 + 76220 9.086669644498075e-01 -5.987174244648362e+00 -5.981709122120128e+00 3.788426841995949e+00 4.819808421278049e+00 9.160989287064844e+03 + 76240 9.828826413289135e-01 -6.091437614645936e+00 -5.987485726540633e+00 3.230818062193644e+00 4.827725890196984e+00 9.178683911059974e+03 + 76260 9.713643711485727e-01 -6.062857408670565e+00 -6.012977713258335e+00 3.345658239932754e+00 4.632075169847695e+00 9.256939776110510e+03 + 76280 9.717497689601412e-01 -6.047388616174181e+00 -5.992313679297825e+00 3.456976691083747e+00 4.773225501446716e+00 9.193452782296879e+03 + 76300 9.732700430416599e-01 -6.025984166507838e+00 -5.965058366150467e+00 3.577698014021527e+00 4.927543387910685e+00 9.110106368520201e+03 + 76320 9.393263477521796e-01 -5.942602203717096e+00 -6.065160260035038e+00 4.008285687267376e+00 4.304538362091839e+00 9.418172735395015e+03 + 76340 1.025899129067717e+00 -6.037101081803071e+00 -5.990736718099890e+00 3.533370710060143e+00 4.799602061305902e+00 9.188637865100225e+03 + 76360 9.919463173302240e-01 -5.956023663040701e+00 -6.023207319579790e+00 3.951460898631297e+00 4.565681946146595e+00 9.288417673778627e+03 + 76380 1.074341972016869e+00 -6.048711788087820e+00 -6.004593177984445e+00 3.423100265281648e+00 4.676436151828078e+00 9.231158279894786e+03 + 76400 1.050799163978738e+00 -5.990433181623408e+00 -5.993920747600994e+00 3.780347102606379e+00 4.760320959063991e+00 9.198381864829003e+03 + 76420 9.792960951859160e-01 -5.866313953106109e+00 -6.041130800374077e+00 4.370715456274557e+00 4.366890066442200e+00 9.343735117088994e+03 + 76440 1.051384956401572e+00 -5.959778268615379e+00 -6.066305459797434e+00 3.881959272693226e+00 4.270263655896306e+00 9.421700878732379e+03 + 76460 1.036357685677671e+00 -5.931955912465336e+00 -6.025265234334005e+00 4.101667679746796e+00 4.565871114006007e+00 9.294747850975224e+03 + 76480 1.032009800217366e+00 -5.927388978314423e+00 -5.987017449215912e+00 4.101684063275973e+00 4.759288155883572e+00 9.177214174658451e+03 + 76500 1.027925035859570e+00 -5.926031675911401e+00 -6.018092463977688e+00 4.104122092603991e+00 4.575494801166463e+00 9.272655896554184e+03 + 76520 1.037580419386850e+00 -5.949032323179776e+00 -6.010198246998746e+00 4.024535934602671e+00 4.673311734638030e+00 9.248352565538145e+03 + 76540 1.035843889618901e+00 -5.960264906968655e+00 -6.053228202961442e+00 3.936829012181193e+00 4.403019380567052e+00 9.381166835479979e+03 + 76560 9.850519214102815e-01 -5.909536929257771e+00 -6.057584879157478e+00 4.199545301874537e+00 4.349431063204216e+00 9.394666394615720e+03 + 76580 9.998792076062604e-01 -5.963449729100997e+00 -6.020336461459119e+00 3.880447041390928e+00 4.553794620997207e+00 9.279553199305970e+03 + 76600 9.512210008359980e-01 -5.930078940772505e+00 -6.024702116058537e+00 4.100948196493619e+00 4.557607281112174e+00 9.293013388693058e+03 + 76620 9.226928427989315e-01 -5.930462054213585e+00 -6.035250457730156e+00 4.066645576362719e+00 4.464934347417533e+00 9.325534101334048e+03 + 76640 9.553986471574069e-01 -6.022872648314278e+00 -6.007687329245370e+00 3.553731684802222e+00 4.640928136816425e+00 9.240655830261981e+03 + 76660 9.383121041992821e-01 -6.033672842800294e+00 -5.998979769155121e+00 3.486821575638184e+00 4.686034573244561e+00 9.213910877011687e+03 + 76680 9.708105990326795e-01 -6.106143700013234e+00 -6.003165510453729e+00 3.095578960978561e+00 4.686895661252573e+00 9.226761497758769e+03 + 76700 8.912951718497409e-01 -6.001832657872717e+00 -5.983007315887091e+00 3.701910437137620e+00 4.810008464031336e+00 9.164961761229897e+03 + 76720 9.421990495286363e-01 -6.080301351109673e+00 -5.945697200326824e+00 3.341281492039762e+00 5.114199355759895e+00 9.051086277698612e+03 + 76740 9.432327326156946e-01 -6.077393098316669e+00 -5.982082890038811e+00 3.295132721809369e+00 4.842418686947893e+00 9.162123478709380e+03 + 76760 9.767937287972908e-01 -6.118548008785300e+00 -5.985724566341556e+00 3.061428558737151e+00 4.824121319610417e+00 9.173298336570455e+03 + 76780 9.561903923863774e-01 -6.077181607750971e+00 -6.003353010775188e+00 3.300242689887436e+00 4.724177918660837e+00 9.227345771209897e+03 + 76800 9.558471488326886e-01 -6.064119608469790e+00 -6.026584230859662e+00 3.368143719830464e+00 4.583677666648735e+00 9.298848875920663e+03 + 76820 9.877554494593810e-01 -6.096851290251675e+00 -6.001954716969349e+00 3.169299761614575e+00 4.714210570598948e+00 9.223071498655368e+03 + 76840 1.005662093760999e+00 -6.107363719388782e+00 -6.016023354510056e+00 3.129652788210538e+00 4.654143298219965e+00 9.266324546636293e+03 + 76860 9.629276590705684e-01 -6.028074305305965e+00 -6.010914277840445e+00 3.551764779963115e+00 4.650300313175793e+00 9.250593438980522e+03 + 76880 1.005640017437750e+00 -6.074059817665225e+00 -5.950349520443142e+00 3.360527956479642e+00 5.070891627235463e+00 9.065254930255074e+03 + 76900 9.558007498231788e-01 -5.978732247916508e+00 -6.029972410141292e+00 3.813202752771977e+00 4.518973811887786e+00 9.309281942000423e+03 + 76920 9.635833397830832e-01 -5.967959170085510e+00 -6.041678171327630e+00 3.820041388581217e+00 4.396735475470393e+00 9.345441925865203e+03 + 76940 9.421301427258595e-01 -5.912777915648110e+00 -6.053422211223491e+00 4.179861542793535e+00 4.372260232965303e+00 9.381751527154622e+03 + 76960 9.915752406071684e-01 -5.963930328138336e+00 -6.060114546532394e+00 3.872947542065824e+00 4.320642875587452e+00 9.402506821147526e+03 + 76980 1.046934619054613e+00 -6.030377398822007e+00 -5.997148154381055e+00 3.489395323496897e+00 4.680202787285801e+00 9.208317420400437e+03 + 77000 1.042335079469620e+00 -6.009978117040044e+00 -5.987932821460490e+00 3.600368097258323e+00 4.726955595974588e+00 9.180041326215613e+03 + 77020 1.024535178915475e+00 -5.971476807277279e+00 -5.980277684946483e+00 3.803232739899332e+00 4.752696738391347e+00 9.156605091412457e+03 + 77040 1.019598176556116e+00 -5.953315687064539e+00 -5.976077003144718e+00 4.009009834140306e+00 4.878310834905633e+00 9.143744415178186e+03 + 77060 1.041713831077807e+00 -5.976726548851118e+00 -5.996791784442926e+00 3.843018017423572e+00 4.727800329570239e+00 9.207181835851172e+03 + 77080 1.002934024327031e+00 -5.913750650813284e+00 -5.981341624834481e+00 4.163475944753184e+00 4.775358112254052e+00 9.159831459162140e+03 + 77100 9.982358074409257e-01 -5.902955991983289e+00 -6.016781512694070e+00 4.212760848272399e+00 4.559157093908688e+00 9.268602774832119e+03 + 77120 1.047665876949249e+00 -5.971728448697578e+00 -5.993512477430713e+00 3.821828849272328e+00 4.696741585219117e+00 9.197138565099101e+03 + 77140 1.036375780664809e+00 -5.954992368112570e+00 -6.004017623558129e+00 3.963488125319666e+00 4.681977521917512e+00 9.229384525264504e+03 + 77160 1.083417338499295e+00 -6.033351500097038e+00 -5.996351446041330e+00 3.510460346594006e+00 4.722920382721744e+00 9.205855566115824e+03 + 77180 9.497134417590708e-01 -5.854649528744345e+00 -6.026590805702252e+00 4.449485889100739e+00 4.462172468981819e+00 9.298847342883562e+03 + 77200 9.894655001962721e-01 -5.942531811988326e+00 -5.981341099856079e+00 3.997693021935425e+00 4.774844085280900e+00 9.159873237650569e+03 + 77220 1.010360947542924e+00 -6.012945004811342e+00 -6.006646322910180e+00 3.609005985009591e+00 4.645173991203935e+00 9.237467810396494e+03 + 77240 1.009200263605901e+00 -6.055225077700695e+00 -6.002119266627410e+00 3.393315630480870e+00 4.698257415761375e+00 9.223565661772283e+03 + 77260 9.836360584015219e-01 -6.060451391665072e+00 -5.998732676427379e+00 3.356611243517663e+00 4.711009657352810e+00 9.213168639885615e+03 + 77280 9.685437663568397e-01 -6.071742387060486e+00 -5.980134191056099e+00 3.311472811239249e+00 4.837501249018960e+00 9.156158120998918e+03 + 77300 9.452389807198504e-01 -6.061294159980749e+00 -5.968168502439280e+00 3.381130275701753e+00 4.915872212453797e+00 9.119599846795047e+03 + 77320 8.955472392653632e-01 -6.001762377437462e+00 -5.987818778440642e+00 3.732232254297299e+00 4.812298557502010e+00 9.179678733990897e+03 + 77340 9.683223768458368e-01 -6.115776029469878e+00 -5.966384884551712e+00 3.015040293711091e+00 4.872867366036164e+00 9.114162292673003e+03 + 77360 9.710326237342986e-01 -6.118669132700488e+00 -5.948709757641238e+00 3.058176408492790e+00 5.034109441211292e+00 9.060269773849717e+03 + 77380 8.650356003156162e-01 -5.952971528810299e+00 -6.008998753139428e+00 4.019882699531170e+00 4.698165707248370e+00 9.244682902453351e+03 + 77400 9.131556331120234e-01 -6.008409215535228e+00 -6.033416286288848e+00 3.630685856247787e+00 4.487091386148810e+00 9.319927730441170e+03 + 77420 9.763404064804806e-01 -6.078787770396910e+00 -6.016241409066623e+00 3.275117929098804e+00 4.634268814875448e+00 9.266995746758601e+03 + 77440 9.722340708376678e-01 -6.044122619354061e+00 -6.022693640634591e+00 3.451021339515321e+00 4.574069851446258e+00 9.286869486844340e+03 + 77460 1.017177365850317e+00 -6.082248924880900e+00 -5.981284691907249e+00 3.327329319937198e+00 4.907081569836457e+00 9.159703313212249e+03 + 77480 9.658975788279093e-01 -5.977402502441602e+00 -6.000395282625137e+00 3.795422905219624e+00 4.663394803284532e+00 9.218283139285564e+03 + 77500 9.442353782665713e-01 -5.914206468712625e+00 -6.032329993343484e+00 4.178594818543623e+00 4.500311260556872e+00 9.316545250762139e+03 + 77520 1.049576398605439e+00 -6.042887420064083e+00 -6.016984287363749e+00 3.475965489165315e+00 4.624705285627462e+00 9.269274340549440e+03 + 77540 1.021397397043001e+00 -5.980467997483546e+00 -6.023540739281695e+00 3.829482468465731e+00 4.582152119575504e+00 9.289441571086822e+03 + 77560 1.081718043063313e+00 -6.056658624635601e+00 -5.984961488239033e+00 3.389079210130718e+00 4.800775262415809e+00 9.170940437994550e+03 + 77580 1.051081133994240e+00 -6.002790863731874e+00 -6.002531779993344e+00 3.677989618991821e+00 4.679477317911537e+00 9.224820826580171e+03 + 77600 1.045144838650354e+00 -5.991019784205380e+00 -5.978131754932868e+00 3.774131312633760e+00 4.848136371132615e+00 9.150037938357164e+03 + 77620 9.680182838729169e-01 -5.875749678636447e+00 -6.035411279728108e+00 4.335281813683196e+00 4.418480192661962e+00 9.326070036218438e+03 + 77640 1.018954919826581e+00 -5.953533830460769e+00 -6.011670857923179e+00 3.909833588969740e+00 4.576001780604657e+00 9.252887617546943e+03 + 77660 1.007176929957126e+00 -5.938976396837838e+00 -6.036216775611024e+00 4.013974431109268e+00 4.455605128293656e+00 9.328551083226552e+03 + 77680 9.923511004572109e-01 -5.923442677615512e+00 -6.007661993330843e+00 4.065261397484885e+00 4.581661053750467e+00 9.240564443597070e+03 + 77700 1.039543549697005e+00 -6.001704272572851e+00 -5.960326312842605e+00 3.660259294958065e+00 4.897857942947711e+00 9.095654480658228e+03 + 77720 9.777990251909182e-01 -5.917285478683038e+00 -5.974411061196603e+00 4.206973561374035e+00 4.878949626425817e+00 9.138656956949191e+03 + 77740 1.022082528259537e+00 -5.989813024689306e+00 -5.978510241774536e+00 3.740885041193038e+00 4.805787369789648e+00 9.151175886242883e+03 + 77760 9.886953834658311e-01 -5.946410118122367e+00 -5.969587743105917e+00 3.975347972888523e+00 4.842258463507106e+00 9.123922926439400e+03 + 77780 1.061578330014396e+00 -6.059888056967913e+00 -5.991066218143676e+00 3.375710787152073e+00 4.770896435825980e+00 9.189647861639460e+03 + 77800 9.778484419740191e-01 -5.942984135445919e+00 -6.034167921374210e+00 3.972253946178110e+00 4.448662536732597e+00 9.322236018570735e+03 + 77820 1.034720078141913e+00 -6.036308450085625e+00 -5.980369853044770e+00 3.522590125062709e+00 4.843798205741212e+00 9.156889356561118e+03 + 77840 9.302569749794343e-01 -5.889827459535896e+00 -6.026527443334457e+00 4.260438756138591e+00 4.475486294913128e+00 9.298631571649845e+03 + 77860 9.854076357739538e-01 -5.978832068227005e+00 -5.991086670188578e+00 3.856886925175240e+00 4.786519104318365e+00 9.189660556677058e+03 + 77880 9.771709204725942e-01 -5.971340944069631e+00 -5.979993153965307e+00 3.826373791193700e+00 4.776691463047578e+00 9.155717981676084e+03 + 77900 9.838583252085812e-01 -5.983809071754007e+00 -5.947244266093203e+00 3.815421261565676e+00 5.025382034055401e+00 9.055784828092406e+03 + 77920 1.023374661453120e+00 -6.040827521537453e+00 -5.998995531952848e+00 3.479597086961526e+00 4.719802844635797e+00 9.213964150318579e+03 + 77940 9.753855008387742e-01 -5.970113202504599e+00 -6.051150741753498e+00 3.816902406340703e+00 4.351572315454859e+00 9.374740422117926e+03 + 77960 9.509833467938199e-01 -5.935861221172030e+00 -6.047364674563227e+00 4.004458025930132e+00 4.364187941454230e+00 9.363003209466837e+03 + 77980 1.000501956016721e+00 -6.009152484900175e+00 -5.979040776311124e+00 3.674137609486086e+00 4.847043699976264e+00 9.152795525109021e+03 + 78000 1.035558276446623e+00 -6.059646399185356e+00 -5.992183597233770e+00 3.360187400948170e+00 4.747569249589040e+00 9.193070884090206e+03 + 78020 1.031801518384735e+00 -6.054078037849761e+00 -5.978234881181659e+00 3.360844305816719e+00 4.796347448095525e+00 9.150348501088243e+03 + 78040 9.656222245905778e-01 -5.954411071397783e+00 -5.973511694340407e+00 3.972578943109828e+00 4.862900210361437e+00 9.135923912500321e+03 + 78060 1.011170700379149e+00 -6.020073804435849e+00 -5.979121773776226e+00 3.610937885366757e+00 4.846090782720574e+00 9.153057244485020e+03 + 78080 9.699830484688068e-01 -5.955785044985195e+00 -6.027195256344613e+00 3.907290035032333e+00 4.497241550712058e+00 9.300704756762751e+03 + 78100 9.610813965348000e-01 -5.942013859772642e+00 -5.987966570586007e+00 4.048235447364529e+00 4.784367870715170e+00 9.180139242009309e+03 + 78120 1.025812866564263e+00 -6.036576277231871e+00 -5.944614075377666e+00 3.520874316821975e+00 5.048935510973559e+00 9.047800525774805e+03 + 78140 1.029167987924762e+00 -6.037594329055075e+00 -5.980582677870343e+00 3.501838374707892e+00 4.829208098335134e+00 9.157541919890924e+03 + 78160 9.835237912607578e-01 -5.966550558786542e+00 -5.987165477301216e+00 3.864639646367784e+00 4.746265594108194e+00 9.177683698383820e+03 + 78180 9.561486445934152e-01 -5.920453392326651e+00 -5.983548461030182e+00 4.167595956491040e+00 4.805294308065045e+00 9.166587688297264e+03 + 78200 9.903941374251212e-01 -5.963828557270103e+00 -6.002396686169795e+00 3.894386921306210e+00 4.672922756765524e+00 9.224407529202610e+03 + 78220 1.057876955569207e+00 -6.057179896004997e+00 -5.964932011275994e+00 3.391526269118286e+00 4.921227898546247e+00 9.109667761734130e+03 + 78240 9.630265461838489e-01 -5.911619901225698e+00 -5.934907501226494e+00 4.216078442369825e+00 5.082357439420801e+00 9.018240981451250e+03 + 78260 1.077269212336475e+00 -6.072782749252964e+00 -5.876633914204840e+00 3.341010884937469e+00 5.467327849717924e+00 8.842183324704531e+03 + 78280 9.970598298591326e-01 -5.938080612214741e+00 -6.011349291534779e+00 3.969420566979301e+00 4.548700472032163e+00 9.251906226570100e+03 + 78300 1.061435024299968e+00 -6.014334463287263e+00 -6.009462189894336e+00 3.649028169986043e+00 4.677005517790101e+00 9.246092102465727e+03 + 78320 9.787270709110747e-01 -5.871717681722421e+00 -6.032583403681477e+00 4.360343534504780e+00 4.436627665125861e+00 9.317298261436030e+03 + 78340 1.102678630242116e+00 -6.034447246869417e+00 -5.973227655273385e+00 3.515790822786725e+00 4.867323191432330e+00 9.135048578131275e+03 + 78360 1.057204241775132e+00 -5.946192097353454e+00 -5.988388452768039e+00 3.984615675429995e+00 4.742317672774551e+00 9.181443210237541e+03 + 78380 9.893280282933085e-01 -5.828745090516662e+00 -6.045387884200591e+00 4.587886553160031e+00 4.343890106462939e+00 9.356865321622250e+03 + 78400 1.053306678465758e+00 -5.910026704823762e+00 -6.010779473515328e+00 4.156065726245334e+00 4.577527736977802e+00 9.250150928122406e+03 + 78420 9.868150142513562e-01 -5.800963539042431e+00 -6.049397822676246e+00 4.712709349528486e+00 4.286161247821981e+00 9.369304693532913e+03 + 78440 9.901759031263837e-01 -5.800094036448796e+00 -6.052342573985558e+00 4.756807655012659e+00 4.308357517141542e+00 9.378419942071738e+03 + 78460 1.073739643344300e+00 -5.924865216846635e+00 -6.001921228762137e+00 4.061646669862794e+00 4.619179125064680e+00 9.222943560826216e+03 + 78480 1.143927342387567e+00 -6.038550978516589e+00 -6.011563258982916e+00 3.442869434448245e+00 4.597837096346694e+00 9.252593040444399e+03 + 78500 1.032179657833521e+00 -5.897918239120339e+00 -6.029853108690820e+00 4.236786427244221e+00 4.479195989315442e+00 9.308915026663193e+03 + 78520 1.042215401167458e+00 -5.950578158116070e+00 -5.989930918181021e+00 3.931172340263523e+00 4.705202702150635e+00 9.186129068838927e+03 + 78540 9.970476489870109e-01 -5.926341348062729e+00 -5.944589811448207e+00 4.071803912423094e+00 4.967018411723097e+00 9.047715710282891e+03 + 78560 9.517091121773785e-01 -5.897295666729639e+00 -6.003733757849261e+00 4.217445591714504e+00 4.606261601264264e+00 9.228480719592844e+03 + 78580 1.081789729646000e+00 -6.124980925436486e+00 -5.955077474193791e+00 3.010762435639613e+00 4.986374345149272e+00 9.079666659425113e+03 + 78600 1.014627314971315e+00 -6.055275194414532e+00 -5.983834517690553e+00 3.361596416479979e+00 4.771819837638057e+00 9.167490450124029e+03 + 78620 9.616948928726742e-01 -6.000035195042575e+00 -5.940127530466191e+00 3.714984392001054e+00 5.058983472679778e+00 9.034163809888018e+03 + 78640 9.524373869648703e-01 -6.000872336999088e+00 -6.010610131253565e+00 3.622197142985709e+00 4.566281221457712e+00 9.249621586994937e+03 + 78660 1.028927671274577e+00 -6.124736986929117e+00 -5.940876632743382e+00 3.061046469344237e+00 5.116801075376577e+00 9.036450298520682e+03 + 78680 9.456871941114241e-01 -6.006817994074615e+00 -5.978133941407339e+00 3.685806025051366e+00 4.850514294309672e+00 9.150040581860607e+03 + 78700 9.591998253277820e-01 -6.027926903531983e+00 -5.951362200963295e+00 3.522568575390019e+00 4.962214945888855e+00 9.068332423019394e+03 + 78720 9.285202023313307e-01 -5.976431947831863e+00 -6.013021018716906e+00 3.793411721804943e+00 4.583311614642611e+00 9.257059500192408e+03 + 78740 1.018128245515924e+00 -6.097645963800478e+00 -6.037455264090092e+00 3.138253804227053e+00 4.483878116444762e+00 9.332400033088696e+03 + 78760 9.795047739244352e-01 -6.032619372988026e+00 -6.005281103602453e+00 3.557891298829758e+00 4.714871872225229e+00 9.233247589986886e+03 + 78780 9.797599624029488e-01 -6.022422407558693e+00 -6.018758136649420e+00 3.548159106901778e+00 4.569199917506918e+00 9.274714482911944e+03 + 78800 9.889848552322934e-01 -6.019938375789486e+00 -5.990886136505022e+00 3.606712311864928e+00 4.773534765655818e+00 9.189085688942474e+03 + 78820 1.016181227012294e+00 -6.039945699056154e+00 -6.002442407504644e+00 3.457259117302304e+00 4.672608821006688e+00 9.224544831556430e+03 + 78840 1.020038795584622e+00 -6.022951695514823e+00 -6.007542024771134e+00 3.559278285303629e+00 4.647762999352734e+00 9.240208373979474e+03 + 78860 1.031588973236699e+00 -6.010667460352778e+00 -5.994376011284881e+00 3.662324383711345e+00 4.755872405352804e+00 9.199785395935016e+03 + 78880 1.050418868335119e+00 -6.004578971182838e+00 -5.994522496902715e+00 3.700638146875298e+00 4.758383978426126e+00 9.200236146901805e+03 + 78900 1.057654014429690e+00 -5.977309490504414e+00 -6.044375388860435e+00 3.796956648130540e+00 4.411853881356040e+00 9.353777061147757e+03 + 78920 1.039118074481839e+00 -5.910382592475586e+00 -6.052977517470810e+00 4.229751421488650e+00 4.410949295672747e+00 9.380391232580549e+03 + 78940 1.043392432989924e+00 -5.879519212341009e+00 -6.074252070616045e+00 4.308309312968984e+00 4.190123105941303e+00 9.446401254562359e+03 + 78960 1.078145343636826e+00 -5.899075920199808e+00 -6.011773951239642e+00 4.270903374757216e+00 4.623773840562547e+00 9.253217154549773e+03 + 78980 1.074152668398324e+00 -5.868991093625352e+00 -6.042776177483228e+00 4.390863481301415e+00 4.392962636634677e+00 9.348798996054009e+03 + 79000 1.087119540468721e+00 -5.872479099440164e+00 -6.028040506981574e+00 4.396650785246825e+00 4.503393110094033e+00 9.303313985013136e+03 + 79020 1.045594376917950e+00 -5.806400210036923e+00 -5.978380898053079e+00 4.766158122425988e+00 4.778618397911764e+00 9.150779076462419e+03 + 79040 1.050787461867241e+00 -5.817866658126946e+00 -6.042735076944107e+00 4.609850743621839e+00 4.318621484498357e+00 9.348664290039538e+03 + 79060 1.118529069719522e+00 -5.936477655074926e+00 -6.011877044980094e+00 4.049474259201137e+00 4.616519294347784e+00 9.253541687095676e+03 + 79080 1.037653782897599e+00 -5.861895815075505e+00 -6.048808746908097e+00 4.426638768443851e+00 4.353355789178391e+00 9.367459128955737e+03 + 79100 1.038199487015037e+00 -5.933490529071011e+00 -6.019888840877403e+00 4.037378768024137e+00 4.541266291536290e+00 9.278166779912566e+03 + 79120 1.041007842571978e+00 -6.007252077349941e+00 -6.036054921119177e+00 3.633078153130786e+00 4.467687766982163e+00 9.328078612817981e+03 + 79140 1.025406368535512e+00 -6.041361898140677e+00 -6.041000342870972e+00 3.486120739853750e+00 4.488196846162893e+00 9.343357298072640e+03 + 79160 9.341456859815093e-01 -5.941385867746375e+00 -6.048466434129687e+00 3.994571257516307e+00 4.379698074679232e+00 9.366428492812618e+03 + 79180 9.771608506276181e-01 -6.028575982982802e+00 -5.991812443083738e+00 3.568658433428185e+00 4.779760368668022e+00 9.191926435683650e+03 + 79200 9.921923681853101e-01 -6.066906159128821e+00 -6.019636137038110e+00 3.328163013577709e+00 4.599594795434848e+00 9.277443305901108e+03 + 79220 9.862049653849216e-01 -6.071625437979191e+00 -5.989908855589705e+00 3.341828607592565e+00 4.811057869273252e+00 9.186122238372905e+03 + 79240 9.306235220428800e-01 -5.999125961340726e+00 -6.044789960055729e+00 3.700988318142798e+00 4.438778571040285e+00 9.355053231425367e+03 + 79260 9.589629413367583e-01 -6.046224955906822e+00 -6.019065989180349e+00 3.406947773015941e+00 4.562898762795867e+00 9.275677671331601e+03 + 79280 9.595196581274834e-01 -6.048244259439383e+00 -6.030818493424709e+00 3.413428615115200e+00 4.513490060200033e+00 9.311891654543091e+03 + 79300 8.952387423203870e-01 -5.950500260629876e+00 -6.050300929690748e+00 3.922360906396322e+00 4.349290020545174e+00 9.372099766257763e+03 + 79320 9.956690213581377e-01 -6.093825854364747e+00 -5.989998018352688e+00 3.229345426648499e+00 4.825540928335434e+00 9.186359282861100e+03 + 79340 9.453222731746629e-01 -6.008015081781671e+00 -6.007742814689832e+00 3.694970934431101e+00 4.696534334205639e+00 9.240827163162217e+03 + 79360 9.422612152029742e-01 -5.987268120853800e+00 -6.024558769907834e+00 3.767374432947217e+00 4.553245755369661e+00 9.292586234921657e+03 + 79380 9.705144832288686e-01 -6.007845519056992e+00 -6.044050643127449e+00 3.623239496518131e+00 4.415344071380728e+00 9.352753501102710e+03 + 79400 9.764064812159740e-01 -5.993056183192470e+00 -5.964515679474910e+00 3.770704505345157e+00 4.934588494320066e+00 9.108432166291823e+03 + 79420 9.995662938005271e-01 -6.000435576227896e+00 -5.985457144450022e+00 3.738560421878058e+00 4.824568895051439e+00 9.172421662091130e+03 + 79440 9.774946319946323e-01 -5.936023080946880e+00 -6.059649770402508e+00 3.975415994600592e+00 4.265532412578008e+00 9.401075581334733e+03 + 79460 1.040666700708623e+00 -6.002604690484982e+00 -6.004831082142114e+00 3.673864766461619e+00 4.661080481033374e+00 9.231892682418078e+03 + 79480 9.637832161120380e-01 -5.866068025215973e+00 -6.000650551884299e+00 4.433261003931724e+00 4.660467309223500e+00 9.219057385786535e+03 + 79500 1.077214823249315e+00 -6.013177271419051e+00 -6.028254098450110e+00 3.625312698312519e+00 4.538739224368737e+00 9.303986105161433e+03 + 79520 1.052711047504761e+00 -5.963100550037455e+00 -5.991324134985586e+00 3.921142717210432e+00 4.759078524852609e+00 9.190406266832431e+03 + 79540 1.021354527330367e+00 -5.908605877420546e+00 -6.009051397536357e+00 4.169295232950930e+00 4.592521512551939e+00 9.244836810343091e+03 + 79560 1.096226664016190e+00 -6.015433960272047e+00 -6.002037267466036e+00 3.607595185069786e+00 4.684521068293415e+00 9.223286085006308e+03 + 79580 1.064245855906995e+00 -5.969268792070979e+00 -6.029122077216962e+00 3.827926427958697e+00 4.484239602384521e+00 9.306677768741232e+03 + 79600 1.003499502899127e+00 -5.888123818580556e+00 -6.054317103121496e+00 4.262769895303282e+00 4.308462337141539e+00 9.384546528756066e+03 + 79620 1.064809178017311e+00 -5.999038060160107e+00 -6.001619904533060e+00 3.678894622960706e+00 4.664069273032084e+00 9.222000426559915e+03 + 79640 9.877173187762055e-01 -5.911497761250411e+00 -6.002963567027717e+00 4.155609457668405e+00 4.630398646607413e+00 9.226127831034701e+03 + 79660 9.852382359490183e-01 -5.941360703207859e+00 -6.013246242452160e+00 4.004987737681130e+00 4.592209847089107e+00 9.257749902507167e+03 + 79680 9.939942998932763e-01 -5.999508769907811e+00 -6.024586127723809e+00 3.616648045999105e+00 4.472649976711066e+00 9.292582044842904e+03 + 79700 9.637614969008178e-01 -6.001786483017087e+00 -5.929274555850238e+00 3.734650161543867e+00 5.151024868520377e+00 9.001201648249598e+03 + 79720 9.407338276555868e-01 -6.005320715260617e+00 -5.988953697364212e+00 3.648915111905061e+00 4.742897061454052e+00 9.183164777338403e+03 + 79740 9.709731459904474e-01 -6.079583019285436e+00 -5.984275981036768e+00 3.286585792120399e+00 4.833853554460755e+00 9.168869075737641e+03 + 79760 9.325677434475586e-01 -6.042795988785289e+00 -6.032028380941854e+00 3.467948037595739e+00 4.529777308114667e+00 9.315633429764390e+03 + 79780 9.240363800334991e-01 -6.039962831195194e+00 -5.989540885375548e+00 3.517547077489255e+00 4.807077693156561e+00 9.184974748497798e+03 + 79800 9.076214887800623e-01 -6.017846629183991e+00 -6.015104129449033e+00 3.613188873951509e+00 4.628936731830101e+00 9.263465934474720e+03 + 79820 9.148004830786736e-01 -6.023555502456211e+00 -5.991199799061269e+00 3.536928556284388e+00 4.722720012207068e+00 9.190060882125381e+03 + 79840 1.003276045520737e+00 -6.143483104619577e+00 -5.986359992497601e+00 2.863317542376134e+00 4.765542766903541e+00 9.175236724547416e+03 + 79860 9.311505090750651e-01 -6.024912465883136e+00 -6.006804331693696e+00 3.577492525247938e+00 4.681472233988409e+00 9.237961438708477e+03 + 79880 1.007102443784402e+00 -6.124752048473201e+00 -5.992352891390007e+00 3.023103175949877e+00 4.783359624624916e+00 9.193604061899778e+03 + 79900 9.288749603926837e-01 -5.993582502641173e+00 -6.045098621374047e+00 3.687153003981361e+00 4.391339478123589e+00 9.356009695512674e+03 + 79920 1.013468818583371e+00 -6.103411831721618e+00 -5.971150467325057e+00 3.156237046518667e+00 4.915702268263713e+00 9.128700634827090e+03 + 79940 9.249619277342788e-01 -5.952829499322999e+00 -6.049300172742184e+00 3.921393815847391e+00 4.367444280285968e+00 9.368987612881707e+03 + 79960 1.017806098949270e+00 -6.071529968378758e+00 -5.989422847065706e+00 3.312290670286356e+00 4.783762466901862e+00 9.184615414263824e+03 + 79980 9.726882956039568e-01 -5.987296761532740e+00 -6.021699503801274e+00 3.733345807914835e+00 4.535799938001746e+00 9.283783941442605e+03 + 80000 9.366239342432657e-01 -5.916542959325585e+00 -6.049069225485999e+00 4.104096918150409e+00 4.343110589483905e+00 9.368288602878134e+03 + 80020 1.022562156099422e+00 -6.028402590945284e+00 -5.965334982792205e+00 3.629449698397726e+00 4.991593664093521e+00 9.110930307936145e+03 + 80040 1.073006760161844e+00 -6.085723510921007e+00 -6.010984433782476e+00 3.278500855276069e+00 4.707664202040325e+00 9.250802248721324e+03 + 80060 1.000923032111309e+00 -5.964486778323271e+00 -6.000547876188676e+00 3.922840426039583e+00 4.715772021659564e+00 9.218737482223594e+03 + 80080 1.054789334973315e+00 -6.032466785682548e+00 -6.006878069879154e+00 3.505020528193227e+00 4.651954894177283e+00 9.238210025759370e+03 + 80100 1.079020134353119e+00 -6.061725250931890e+00 -6.018056015711058e+00 3.343909008216640e+00 4.594664514646965e+00 9.272592485769901e+03 + 80120 9.910760768741169e-01 -5.928646802222105e+00 -6.032968242951397e+00 4.015718079355172e+00 4.416688222996799e+00 9.318528387495733e+03 + 80140 1.012729698022931e+00 -5.960248454716059e+00 -5.994495355014786e+00 3.906741370071966e+00 4.710090368865988e+00 9.200151966363617e+03 + 80160 1.017073259977118e+00 -5.968382964472666e+00 -6.002711794354492e+00 3.900394643998811e+00 4.703273190448110e+00 9.225361722372822e+03 + 80180 1.009754466357514e+00 -5.961809005841932e+00 -6.048992414638651e+00 3.882999433049620e+00 4.382378808149952e+00 9.368063603673143e+03 + 80200 9.840641303668226e-01 -5.934551503560703e+00 -6.001546954233500e+00 4.041362868054193e+00 4.656664622778509e+00 9.221806147869038e+03 + 80220 1.020150107437041e+00 -6.005484971021632e+00 -6.012640717247824e+00 3.643883985996792e+00 4.602794583817848e+00 9.255894537591532e+03 + 80240 1.027808346007375e+00 -6.047297739592243e+00 -6.003989339968561e+00 3.452332751028595e+00 4.701016283620962e+00 9.229307477366827e+03 + 80260 9.710938719639687e-01 -6.009794834081909e+00 -6.015303424276796e+00 3.674976165677223e+00 4.643344988326604e+00 9.264102343213766e+03 + 80280 1.005308968292563e+00 -6.113177771759589e+00 -5.972408966459526e+00 3.107568226515959e+00 4.915884490451136e+00 9.132564403632909e+03 + 80300 9.389401309332899e-01 -6.060540564445474e+00 -6.048666000201535e+00 3.363890162958627e+00 4.432075748430205e+00 9.367039241100510e+03 + 80320 9.241062467503227e-01 -6.073454606534898e+00 -6.001425456154335e+00 3.356852032887244e+00 4.770454560847432e+00 9.221446396061525e+03 + 80340 8.833462273966666e-01 -6.035957833763788e+00 -6.034255921889043e+00 3.486456701765138e+00 4.496229343119937e+00 9.322504708063156e+03 + 80360 9.493122671748692e-01 -6.144817403545582e+00 -5.950978995559146e+00 2.949503367647100e+00 5.062553502701908e+00 9.067192449584752e+03 + 80380 9.163274466862645e-01 -6.096696677189597e+00 -5.974461534733840e+00 3.146109329971375e+00 4.848002433779497e+00 9.138816627758773e+03 + 80400 8.501628562375787e-01 -5.989703312936279e+00 -5.994164609337531e+00 3.722680586705049e+00 4.697063132385672e+00 9.199170347053829e+03 + 80420 9.338276758610530e-01 -6.094974390350162e+00 -6.003289512521252e+00 3.164037086336537e+00 4.690505843019126e+00 9.227159029375613e+03 + 80440 9.574498239769434e-01 -6.103702368495416e+00 -5.998833861138986e+00 3.135777019426153e+00 4.737948217015838e+00 9.213484470195814e+03 + 80460 9.855587276769316e-01 -6.116517641838018e+00 -6.003043944517124e+00 3.022594823916026e+00 4.674178353930509e+00 9.226418386047864e+03 + 80480 9.714783139240762e-01 -6.064368621315294e+00 -6.020704893342796e+00 3.325704364288514e+00 4.576428247246664e+00 9.280709651108018e+03 + 80500 9.379706375302218e-01 -5.982795020295552e+00 -5.986756310739745e+00 3.800289455735065e+00 4.777543112996799e+00 9.176440618945833e+03 + 80520 1.009036777861350e+00 -6.058046724237927e+00 -5.980974854070714e+00 3.440361455603704e+00 4.882920060937201e+00 9.158737359902861e+03 + 80540 9.870359009581027e-01 -5.999625329492440e+00 -6.044037125569371e+00 3.706739379193622e+00 4.451719973416652e+00 9.352721527911088e+03 + 80560 9.623530713359646e-01 -5.943040791810138e+00 -6.055129887893505e+00 3.987915303353470e+00 4.344282367911212e+00 9.387069918433835e+03 + 80580 1.031561597103923e+00 -6.032757617342055e+00 -5.993572189343842e+00 3.594056965044876e+00 4.819065756536000e+00 9.197317755113076e+03 + 80600 1.019562032654253e+00 -6.004401316920705e+00 -6.008283534235638e+00 3.669408290920511e+00 4.647115998326985e+00 9.242492430894137e+03 + 80620 9.367886552658038e-01 -5.872710417976832e+00 -6.067768540961339e+00 4.350329380928301e+00 4.230275453604287e+00 9.426266944879830e+03 + 80640 1.076395709720129e+00 -6.073852671880659e+00 -6.000877965558938e+00 3.327555401816166e+00 4.746587458314798e+00 9.219756153192788e+03 + 80660 1.019102983032667e+00 -5.986716026194557e+00 -6.034654751003762e+00 3.752482539298216e+00 4.477210962950069e+00 9.323726966663880e+03 + 80680 9.978764706079299e-01 -5.956785991007037e+00 -6.005859447290690e+00 3.946860320113310e+00 4.665072940039761e+00 9.235047954506415e+03 + 80700 1.013170555733291e+00 -5.980566064884793e+00 -6.013223205259580e+00 3.756964538195416e+00 4.569442184487253e+00 9.257694894995091e+03 + 80720 1.051045572187355e+00 -6.040667787672361e+00 -5.990315620016016e+00 3.526214851666324e+00 4.815344790321822e+00 9.187341179678519e+03 + 80740 1.018723735111449e+00 -5.998373942147798e+00 -6.011348875066314e+00 3.671713562513529e+00 4.597209489831029e+00 9.251907305857234e+03 + 80760 9.388896651013440e-01 -5.888021158640180e+00 -6.025353762316770e+00 4.271214323644519e+00 4.482629261181807e+00 9.295029343700997e+03 + 80780 9.913057477415382e-01 -5.975762338683044e+00 -5.999744266697094e+00 3.819462363494888e+00 4.681754421646844e+00 9.216252403003507e+03 + 80800 9.970842564945607e-01 -5.994862949978187e+00 -5.964498244650276e+00 3.760072319566222e+00 4.934431156482054e+00 9.108407533359547e+03 + 80820 1.066741115716560e+00 -6.111376102653941e+00 -6.001338880983326e+00 3.082363251204188e+00 4.714214006241885e+00 9.221167300849755e+03 + 80840 9.676113626873384e-01 -5.984858071142508e+00 -6.025691290882198e+00 3.812873613105807e+00 4.578402946440170e+00 9.296096041970153e+03 + 80860 9.787856153928439e-01 -6.031312880323497e+00 -6.014127640927860e+00 3.493805978474848e+00 4.592486282491798e+00 9.260482064191039e+03 + 80880 9.418771088223991e-01 -6.014824561717117e+00 -6.012829791467682e+00 3.678012679589869e+00 4.689466959051821e+00 9.256473845489218e+03 + 80900 9.675145015215378e-01 -6.091994146765102e+00 -5.992931133901148e+00 3.233504474453409e+00 4.802339624269928e+00 9.195372933330171e+03 + 80920 9.267750612309956e-01 -6.067490114839657e+00 -6.019000456061543e+00 3.281640202195465e+00 4.560075326649841e+00 9.275465113029946e+03 + 80940 9.481390598626093e-01 -6.126033019168437e+00 -5.988648088079658e+00 3.011374777829801e+00 4.800260312390948e+00 9.182242213242160e+03 + 80960 9.209411551406300e-01 -6.104439181185229e+00 -6.002271980117134e+00 3.133056609421621e+00 4.719716488277889e+00 9.224017543994136e+03 + 80980 8.830569647304123e-01 -6.057829103122396e+00 -5.978194044144404e+00 3.422691191393242e+00 4.879968023530418e+00 9.150233431167460e+03 + 81000 9.355533444389885e-01 -6.135942220504278e+00 -5.957328833224663e+00 3.012808307466556e+00 5.038434017558458e+00 9.086510006066192e+03 + 81020 8.830401509847313e-01 -6.046247691807124e+00 -6.005873854221210e+00 3.476738946050195e+00 4.708571769299687e+00 9.235093668422922e+03 + 81040 9.043462411016543e-01 -6.055312932565846e+00 -6.034717998617226e+00 3.403161973008423e+00 4.521421270797127e+00 9.323955447128938e+03 + 81060 9.015406876028933e-01 -6.023525922276758e+00 -6.038521946276705e+00 3.524879263439936e+00 4.438769773005024e+00 9.335685242561058e+03 + 81080 9.472460703928099e-01 -6.056179177689908e+00 -5.992290763042902e+00 3.420287497938613e+00 4.787144661541939e+00 9.193408703315539e+03 + 81100 9.615995417920067e-01 -6.038896939556994e+00 -6.020151107347472e+00 3.487485889974587e+00 4.595127359429828e+00 9.279021613406852e+03 + 81120 9.293075439340029e-01 -5.956989134386344e+00 -6.025964776540755e+00 3.918083183946968e+00 4.522014372750212e+00 9.296917925207892e+03 + 81140 9.702116481332475e-01 -5.990929138589618e+00 -6.004308464387154e+00 3.751068036875005e+00 4.674241877701573e+00 9.230269139572902e+03 + 81160 1.007811473703813e+00 -6.025182184063778e+00 -5.996242929562227e+00 3.572196869647291e+00 4.738370547330359e+00 9.205527839882789e+03 + 81180 1.016525618284013e+00 -6.024081465605152e+00 -5.987595358589862e+00 3.556329323594932e+00 4.765838196283541e+00 9.179027117547490e+03 + 81200 1.027224228153547e+00 -6.030021502765069e+00 -6.001647629067506e+00 3.572181103424383e+00 4.735108277038559e+00 9.222098694443555e+03 + 81220 9.904447680763622e-01 -5.969102687106306e+00 -5.965844383466072e+00 3.906534432956736e+00 4.925244116679815e+00 9.112456408849332e+03 + 81240 9.742049547334861e-01 -5.937461349674664e+00 -5.988827551493365e+00 4.103811691734906e+00 4.808859011997884e+00 9.182757154064100e+03 + 81260 1.071884573786312e+00 -6.075986600275069e+00 -6.007670413182030e+00 3.261579618508831e+00 4.653861736692846e+00 9.240623969403696e+03 + 81280 1.016163395514787e+00 -5.990331352893845e+00 -6.015608982490580e+00 3.759986444079833e+00 4.614838383234846e+00 9.265038412097279e+03 + 81300 1.012453047292900e+00 -5.984244092607574e+00 -5.973274928839892e+00 3.817309438026586e+00 4.880296073853218e+00 9.135159786269614e+03 + 81320 1.005687875221196e+00 -5.973031969248426e+00 -5.972904147607499e+00 3.849410935330150e+00 4.850144906972689e+00 9.134035825996556e+03 + 81340 1.035224570037387e+00 -6.017764647068367e+00 -5.936167837337880e+00 3.616412371414219e+00 5.084953879952169e+00 9.022114973947471e+03 + 81360 9.889713515010981e-01 -5.949553842469646e+00 -5.957855704024574e+00 4.004322247601471e+00 4.956651673844148e+00 9.088103233937512e+03 + 81380 9.309860811148067e-01 -5.863012355389993e+00 -6.052985259386458e+00 4.361630232409222e+00 4.270776419449641e+00 9.380323661049530e+03 + 81400 1.028914998747282e+00 -6.005683474244733e+00 -5.981550761973759e+00 3.651203239970426e+00 4.789777008355512e+00 9.160493957952887e+03 + 81420 1.048624124233346e+00 -6.034231486290285e+00 -6.010441461514860e+00 3.461536526600151e+00 4.598142530355080e+00 9.249116704159978e+03 + 81440 1.007608228698051e+00 -5.975592474812316e+00 -5.999812456342292e+00 3.800106391773873e+00 4.661031509798724e+00 9.216480597539468e+03 + 81460 9.983733675528411e-01 -5.966721998910436e+00 -6.022753099227367e+00 3.827570964981477e+00 4.505831716176908e+00 9.287035377354134e+03 + 81480 1.030630791774342e+00 -6.024347801108495e+00 -5.994720571365262e+00 3.557630548097550e+00 4.727754686082175e+00 9.200871163892465e+03 + 81500 1.001363231370770e+00 -5.996020514451788e+00 -6.009800782234871e+00 3.694053400859966e+00 4.614924970759960e+00 9.247154770608253e+03 + 81520 9.579853852605930e-01 -5.949480397373034e+00 -5.985283083692940e+00 4.029234590561018e+00 4.823650025264318e+00 9.171895959557856e+03 + 81540 9.947561644170929e-01 -6.022723766632827e+00 -5.986394348645819e+00 3.583941854424206e+00 4.792550994464873e+00 9.175326370471519e+03 + 81560 9.965107360183662e-01 -6.046267418031679e+00 -6.017566459718894e+00 3.439537451260096e+00 4.604342795351055e+00 9.271051745720584e+03 + 81580 9.831745904071457e-01 -6.051996004081508e+00 -5.983544643670847e+00 3.413247534346811e+00 4.806305838638619e+00 9.166622510698429e+03 + 81600 9.378187898646321e-01 -6.008009829871551e+00 -6.008004043138206e+00 3.618604380654046e+00 4.618637608972406e+00 9.241635297444838e+03 + 81620 9.566746583061461e-01 -6.058071026274408e+00 -5.989401261739907e+00 3.353838449095325e+00 4.748150863664147e+00 9.184536235032860e+03 + 81640 9.182911175658350e-01 -6.017413609352020e+00 -5.997249481806551e+00 3.568625621070960e+00 4.684411161825695e+00 9.208604973555040e+03 + 81660 9.482135488956011e-01 -6.072697876831310e+00 -6.001808548844648e+00 3.283748986176788e+00 4.690806477564250e+00 9.222591027499609e+03 + 81680 9.270388970890595e-01 -6.046969583323061e+00 -6.014656294789603e+00 3.366777008425369e+00 4.552324911649727e+00 9.262121170961431e+03 + 81700 9.529880999343767e-01 -6.086426882141552e+00 -6.006155763088550e+00 3.180629289780866e+00 4.641558477298728e+00 9.235980126459752e+03 + 81720 9.829182875102052e-01 -6.126620737043145e+00 -5.967748624530690e+00 3.018150919976269e+00 4.930419175402739e+00 9.118315350430348e+03 + 81740 8.873610894800430e-01 -5.972767014222449e+00 -5.948448888309578e+00 3.878858804969892e+00 5.018497247179424e+00 9.059471656376427e+03 + 81760 8.892950216302022e-01 -5.953234114348783e+00 -5.998947080579775e+00 3.944645398164917e+00 4.682154472007897e+00 9.213770698125241e+03 + 81780 9.511005142952208e-01 -6.007148231213190e+00 -6.006563499052527e+00 3.615658506797077e+00 4.619016129350610e+00 9.237209502101865e+03 + 81800 9.587155141345721e-01 -5.971155968453890e+00 -5.997747791038860e+00 3.849774196874663e+00 4.697079836520522e+00 9.210123401353727e+03 + 81820 1.007624251852019e+00 -6.000168150844220e+00 -5.933322585519431e+00 3.733257215438007e+00 5.117094795850749e+00 9.013501457340248e+03 + 81840 1.095662509292515e+00 -6.091024415814846e+00 -5.991261161366028e+00 3.231285716319813e+00 4.804141761678659e+00 9.190227771114402e+03 + 81860 1.052814539549743e+00 -5.998414813402425e+00 -6.037022804379238e+00 3.695722052437331e+00 4.474028993681173e+00 9.331053317827293e+03 + 81880 1.052743309857432e+00 -5.982577001246544e+00 -6.010557323255792e+00 3.796839215575521e+00 4.636171876657579e+00 9.249491437038587e+03 + 81900 1.044561155409496e+00 -5.964051874848947e+00 -6.006500305000297e+00 3.851432774687825e+00 4.607687319885436e+00 9.237034009173385e+03 + 81920 1.066565011486684e+00 -5.993767076054903e+00 -6.036099554018426e+00 3.729824293801166e+00 4.486744654404826e+00 9.328221083676031e+03 + 81940 9.781942326748866e-01 -5.866975592394632e+00 -6.133369774424001e+00 4.335836703311036e+00 3.806160085731958e+00 9.631017846498356e+03 + 81960 9.546576542302276e-01 -5.844305082616827e+00 -6.055401817482812e+00 4.528576058445224e+00 4.316425939730597e+00 9.387918035656179e+03 + 81980 1.079093288975099e+00 -6.043014852330816e+00 -5.971952922889414e+00 3.439308451456089e+00 4.847357047106664e+00 9.131168989423179e+03 + 82000 9.950364651531486e-01 -5.932668675069110e+00 -6.036720900010192e+00 4.088636854102226e+00 4.491152876460765e+00 9.330103035311287e+03 + 82020 1.010193193755492e+00 -5.973356942231920e+00 -5.996116143394983e+00 3.867959060282742e+00 4.737272205229438e+00 9.205115218153809e+03 + 82040 9.866440015206859e-01 -5.956985377417691e+00 -6.009654359907052e+00 3.912805338963088e+00 4.610371891010480e+00 9.246702599130509e+03 + 82060 1.016461417745936e+00 -6.020970820596495e+00 -5.968079507370866e+00 3.544017347838592e+00 4.847727453284424e+00 9.119331910815017e+03 + 82080 9.781416540235782e-01 -5.982112663385376e+00 -5.982390724539182e+00 3.869048182141401e+00 4.867451511966422e+00 9.163064699742366e+03 + 82100 9.878939093035733e-01 -6.014388191760175e+00 -6.044669063463915e+00 3.574302443036682e+00 4.400424991764059e+00 9.354703286571699e+03 + 82120 1.014146062293742e+00 -6.071829209806236e+00 -5.983782412963150e+00 3.293602895329442e+00 4.799181228000215e+00 9.167339556070028e+03 + 82140 9.613023947546808e-01 -6.010113700107163e+00 -5.993143584751316e+00 3.664382187242785e+00 4.761827215732925e+00 9.196021081876095e+03 + 82160 9.506892056175561e-01 -6.008723150834880e+00 -6.000075526752517e+00 3.624253176100621e+00 4.673909171797054e+00 9.217284560667546e+03 + 82180 9.714550203897128e-01 -6.054518496551383e+00 -5.990367224324778e+00 3.426846660956418e+00 4.795213193458872e+00 9.187493989536340e+03 + 82200 9.195638119569862e-01 -5.991931517434797e+00 -5.986800306063178e+00 3.735324726277692e+00 4.764788936025925e+00 9.176547944154587e+03 + 82220 9.808616445570533e-01 -6.095527050912048e+00 -5.963366444070888e+00 3.169483072006205e+00 4.928369728275955e+00 9.104922583975449e+03 + 82240 1.008723539044255e+00 -6.146959592810569e+00 -5.962097705580422e+00 2.851049932534960e+00 4.912555496295063e+00 9.101072227654904e+03 + 82260 8.946842146449914e-01 -5.986841294087809e+00 -5.988900583564863e+00 3.836284449626482e+00 4.824459690775225e+00 9.182992323663215e+03 + 82280 9.578342911083773e-01 -6.088064487003384e+00 -5.970147784163970e+00 3.227181411287218e+00 4.904277366541924e+00 9.125641748360757e+03 + 82300 9.694911601387092e-01 -6.107636100867752e+00 -5.973575146507881e+00 3.140689931086897e+00 4.910488676886915e+00 9.136129007293137e+03 + 82320 9.658653057589675e-01 -6.098505698190633e+00 -5.989555519356621e+00 3.202140603642655e+00 4.827749390493233e+00 9.185028458005339e+03 + 82340 9.379661457161677e-01 -6.047355213615767e+00 -6.016183252845675e+00 3.425539322666628e+00 4.604533545253837e+00 9.266802020251327e+03 + 82360 9.017394625799171e-01 -5.976424684432196e+00 -6.019947298880256e+00 3.782287142528470e+00 4.532373555264893e+00 9.278386416320462e+03 + 82380 9.730334381823149e-01 -6.056542553334780e+00 -5.995071188036888e+00 3.419568213155279e+00 4.772546305358814e+00 9.201928942361483e+03 + 82400 1.000803295488731e+00 -6.065152113757646e+00 -5.976119617770720e+00 3.398613681745325e+00 4.909852051436485e+00 9.143915153560623e+03 + 82420 9.728550401060606e-01 -5.989238385836188e+00 -6.031617298358183e+00 3.750048760156479e+00 4.506702486339665e+00 9.314368536515045e+03 + 82440 1.022564193625020e+00 -6.031763789987382e+00 -5.972284410436522e+00 3.513185556318443e+00 4.854725358103719e+00 9.132181457348595e+03 + 82460 9.761058637674128e-01 -5.931202883776870e+00 -6.039199807483305e+00 4.105989933415652e+00 4.485854885023369e+00 9.337790161793037e+03 + 82480 1.009789381686426e+00 -5.953810860302744e+00 -6.068442816127712e+00 3.904333014949665e+00 4.246098585364861e+00 9.428365404201744e+03 + 82500 1.028860711868931e+00 -5.962210599404283e+00 -5.997096425277109e+00 3.943631585253610e+00 4.743311774527743e+00 9.208129474730817e+03 + 82520 1.035062679872798e+00 -5.955329562456322e+00 -6.010748773176162e+00 3.954460980636004e+00 4.636235296587543e+00 9.250093249800075e+03 + 82540 1.054238226283539e+00 -5.973149471758526e+00 -6.042461879420514e+00 3.869580135041574e+00 4.471577564186021e+00 9.347872505137933e+03 + 82560 1.076932959179133e+00 -6.004273731519637e+00 -6.014114164871184e+00 3.649967011491726e+00 4.593461720385001e+00 9.260437948949771e+03 + 82580 1.011798123086409e+00 -5.911863027530152e+00 -5.997078553128691e+00 4.178123286961598e+00 4.688802551914814e+00 9.208047998437622e+03 + 82600 9.756076113288988e-01 -5.863513315498023e+00 -6.035408156944672e+00 4.394265203087627e+00 4.407218422860224e+00 9.326021830551015e+03 + 82620 1.048090987492292e+00 -5.979603885986118e+00 -6.001782916867038e+00 3.787018994691517e+00 4.659663567179340e+00 9.222519693155738e+03 + 82640 1.058728748828612e+00 -6.009245492367103e+00 -5.982931731302895e+00 3.698700342018598e+00 4.849798030090643e+00 9.164721432375725e+03 + 82660 1.028783642254434e+00 -5.986736475224807e+00 -5.969056462566000e+00 3.781310377964014e+00 4.882831746623999e+00 9.122288217869169e+03 + 82680 9.740672120237286e-01 -5.933137836329871e+00 -6.006871183667267e+00 4.091950707736221e+00 4.668562417126275e+00 9.238150446249676e+03 + 82700 9.837642372788657e-01 -5.979795352579099e+00 -5.995637825518246e+00 3.877088894846950e+00 4.786118963615603e+00 9.203640011978872e+03 + 82720 1.019370980901442e+00 -6.068002710135505e+00 -5.988050040575091e+00 3.343858308727194e+00 4.802958909978720e+00 9.180406179178553e+03 + 82740 9.582663682090585e-01 -6.012752916012633e+00 -6.015844089146303e+00 3.593990146607807e+00 4.576240152116775e+00 9.265747549733378e+03 + 82760 9.323966239193940e-01 -6.002991409893570e+00 -5.990647109338253e+00 3.728262691408681e+00 4.799145575471653e+00 9.188351693655675e+03 + 82780 9.955522658155039e-01 -6.121325651624503e+00 -5.957553731112955e+00 3.058050951226798e+00 4.998454662426903e+00 9.087193180582461e+03 + 82800 9.184627415617511e-01 -6.023721808391528e+00 -5.986348880995259e+00 3.540733978786725e+00 4.755335111337923e+00 9.175191162482495e+03 + 82820 9.735778803216142e-01 -6.115083982382918e+00 -5.992856563008321e+00 3.065959373345444e+00 4.767808130026401e+00 9.195135965955400e+03 + 82840 9.093557947545571e-01 -6.022330108012725e+00 -6.016110243383233e+00 3.572888913458059e+00 4.608604338681547e+00 9.266564045551109e+03 + 82860 9.277762549416532e-01 -6.046576696491860e+00 -5.989734116681646e+00 3.457447412629272e+00 4.783846302260315e+00 9.185558144933704e+03 + 82880 9.371037680591293e-01 -6.048637096445340e+00 -5.993366607048959e+00 3.458069258560763e+00 4.775440961755375e+00 9.196678154515012e+03 + 82900 1.024665905194715e+00 -6.162332866224692e+00 -5.979690097112136e+00 2.823073911619610e+00 4.871836955741085e+00 9.154828399714999e+03 + 82920 9.539038758915600e-01 -6.039942164867638e+00 -6.013273589437826e+00 3.445978589870300e+00 4.599113676936987e+00 9.257855391061325e+03 + 82940 9.724788231981104e-01 -6.049373574147997e+00 -5.986822971880763e+00 3.507855874368619e+00 4.867031112261494e+00 9.176648997133854e+03 + 82960 9.460939879618978e-01 -5.993999422683074e+00 -6.025080402886542e+00 3.703744923849428e+00 4.525273125754974e+00 9.294205080696967e+03 + 82980 9.887826415764448e-01 -6.043982829180702e+00 -5.995794208641036e+00 3.408352692195487e+00 4.685059208499176e+00 9.204129309972195e+03 + 83000 1.019617483988462e+00 -6.077848124836872e+00 -5.937536188897327e+00 3.304831859209812e+00 5.110524708576593e+00 9.026293008502615e+03 + 83020 9.960061147329781e-01 -6.033566786076968e+00 -6.005142498497038e+00 3.398768636085479e+00 4.561985294013731e+00 9.232842920166499e+03 + 83040 1.016045129092751e+00 -6.055350006717245e+00 -5.961917754303376e+00 3.419162458483446e+00 4.955664910438220e+00 9.100524852823795e+03 + 83060 1.014741293368914e+00 -6.047103051384099e+00 -5.938208355994676e+00 3.463780286346741e+00 5.089070478672456e+00 9.028342901093671e+03 + 83080 9.879491280658900e-01 -6.000787394535168e+00 -5.976730488074433e+00 3.680046697488698e+00 4.818185177180480e+00 9.145749936936871e+03 + 83100 1.000544870522238e+00 -6.011101244864054e+00 -6.013548361954304e+00 3.607549317793009e+00 4.593497592770652e+00 9.258698107162572e+03 + 83120 9.992312217060532e-01 -6.000539426992757e+00 -6.012349950640109e+00 3.687613473385762e+00 4.619795618930039e+00 9.254995429602508e+03 + 83140 9.910500090997214e-01 -5.980178434461548e+00 -5.994835136480335e+00 3.796914728822300e+00 4.712753677713120e+00 9.201194131088181e+03 + 83160 1.020567561879328e+00 -6.016373158321231e+00 -5.987234275614540e+00 3.599940733228034e+00 4.767260706957378e+00 9.177905779294051e+03 + 83180 1.008252736125395e+00 -5.989504670544965e+00 -6.017869197992520e+00 3.723158281029275e+00 4.560284775028980e+00 9.272008464445185e+03 + 83200 1.044702125853623e+00 -6.038003187475111e+00 -5.994002978724806e+00 3.504691436289792e+00 4.757347443944341e+00 9.198649545415356e+03 + 83220 1.014766158826204e+00 -5.989551977536405e+00 -6.003520644516099e+00 3.709282543473920e+00 4.629072296032287e+00 9.227876056548037e+03 + 83240 1.018346792526051e+00 -5.990782142697840e+00 -6.004885192513239e+00 3.750348225475986e+00 4.669366330996064e+00 9.232038947299005e+03 + 83260 1.015571821192288e+00 -5.981933779793769e+00 -5.996906924147795e+00 3.749803079314772e+00 4.663824967347356e+00 9.207568813295635e+03 + 83280 9.943961569784933e-01 -5.945717494592668e+00 -6.052502029840040e+00 3.954573104165176e+00 4.341399777921341e+00 9.378924718400589e+03 + 83300 1.043885155428620e+00 -6.017722407752172e+00 -6.035092894039782e+00 3.594212292435290e+00 4.494468272097770e+00 9.325095841248085e+03 + 83320 1.037014053333739e+00 -6.011075400488394e+00 -6.030515364624465e+00 3.588544718010921e+00 4.476917435616874e+00 9.310965887118535e+03 + 83340 1.029529637881501e+00 -6.009944070411532e+00 -5.997248126161251e+00 3.593564848813588e+00 4.666466925389724e+00 9.208589489633314e+03 + 83360 9.591201553998010e-01 -5.919485944033962e+00 -5.985337865888630e+00 4.087354010232805e+00 4.709222084391331e+00 9.172075084993483e+03 + 83380 9.766581225209140e-01 -5.961946950640565e+00 -5.958339663656905e+00 3.923084955603569e+00 4.943798555689600e+00 9.089565265744966e+03 + 83400 9.050127981097149e-01 -5.871690921835113e+00 -5.967297999309450e+00 4.388641168024956e+00 4.839650534019895e+00 9.116903250644124e+03 + 83420 9.848251829693634e-01 -6.005056569825634e+00 -5.977494642937002e+00 3.680223517531469e+00 4.838488366920391e+00 9.148084583993277e+03 + 83440 1.016800402521320e+00 -6.068936098848679e+00 -6.019120903282239e+00 3.262149330341355e+00 4.548195892160454e+00 9.275859764394107e+03 + 83460 1.019841436712444e+00 -6.093917670016561e+00 -6.012138071065612e+00 3.176889930081356e+00 4.646481042609736e+00 9.254367185931698e+03 + 83480 1.003217383286779e+00 -6.092085435277543e+00 -6.012574432058622e+00 3.213061279453906e+00 4.669625764224936e+00 9.255705666724227e+03 + 83500 9.712140943410815e-01 -6.068724918203396e+00 -5.978783004821642e+00 3.365808941211628e+00 4.882269326315773e+00 9.152035845497425e+03 + 83520 9.351480405057435e-01 -6.034498724117337e+00 -5.942652900435311e+00 3.565565107703276e+00 5.092958040380745e+00 9.041820389784802e+03 + 83540 9.520760133223785e-01 -6.073432005486771e+00 -5.970423468370412e+00 3.313647321633618e+00 4.905138282275351e+00 9.126453974903852e+03 + 83560 9.587634495166762e-01 -6.090437245940383e+00 -5.969542327879497e+00 3.195499162256489e+00 4.889696490190206e+00 9.123805148684696e+03 + 83580 9.453853684187936e-01 -6.072023563847937e+00 -5.973611591882420e+00 3.294349963721530e+00 4.859446735950973e+00 9.136248375061734e+03 + 83600 9.756426668302093e-01 -6.110807216968216e+00 -6.011334169689279e+00 3.092480856488386e+00 4.663670487368362e+00 9.251897575630841e+03 + 83620 9.479774549645172e-01 -6.059176054584704e+00 -6.031703544688195e+00 3.387070582732158e+00 4.544821985915076e+00 9.314648548461924e+03 + 83640 9.558524319208359e-01 -6.054644397050641e+00 -5.990848510322888e+00 3.426127526154075e+00 4.792453380126402e+00 9.188991474480565e+03 + 83660 9.996958752000751e-01 -6.090582422911696e+00 -6.020620179466914e+00 3.223403911124014e+00 4.625137939606135e+00 9.280463089091365e+03 + 83680 9.556055636515890e-01 -5.986225752764834e+00 -6.056544789639936e+00 3.720282393126126e+00 4.316499601553497e+00 9.391437248171100e+03 + 83700 1.004270147491593e+00 -6.015118799122514e+00 -6.008143564792480e+00 3.617013343908596e+00 4.657066218845680e+00 9.242076094225447e+03 + 83720 9.509790594218741e-01 -5.895179902246756e+00 -6.018604063240325e+00 4.245418430554174e+00 4.536697798301915e+00 9.274218715130617e+03 + 83740 9.990221976277095e-01 -5.930881406378872e+00 -5.981191908474198e+00 4.060807542088274e+00 4.771916853531878e+00 9.159365631033959e+03 + 83760 1.084288441071522e+00 -6.027211076451009e+00 -5.979305219404575e+00 3.523837482610969e+00 4.798920327179009e+00 9.153602479009949e+03 + 83780 1.024696249423569e+00 -5.919523380043979e+00 -6.004723155350313e+00 4.144548120656857e+00 4.655317826225271e+00 9.231519564709692e+03 + 83800 1.038327445677467e+00 -5.930470731987985e+00 -5.971570496267838e+00 4.101433989575588e+00 4.865432782912702e+00 9.129965879446505e+03 + 83820 1.058953966306702e+00 -5.956589960259331e+00 -5.948642250851357e+00 3.876615710347072e+00 4.922252687671715e+00 9.060019062186528e+03 + 83840 1.085130281325625e+00 -5.994645971336067e+00 -5.954809060682066e+00 3.710885294797575e+00 4.939635000514853e+00 9.078813900342915e+03 + 83860 9.505496123761860e-01 -5.797725186350079e+00 -6.031124250959805e+00 4.749844011375724e+00 4.409630463998160e+00 9.312811221200598e+03 + 83880 1.072353207199692e+00 -5.985641787520367e+00 -5.960386131782522e+00 3.777966719288048e+00 4.922988602834852e+00 9.095816834907035e+03 + 83900 1.081197750843141e+00 -6.008457305377542e+00 -5.990969671092563e+00 3.662127235831262e+00 4.762543938098270e+00 9.189343607931487e+03 + 83920 1.048181938080227e+00 -5.975639785599963e+00 -6.024377732711780e+00 3.847223285000534e+00 4.567362450511546e+00 9.292036989119279e+03 + 83940 9.974070766158065e-01 -5.921653994890525e+00 -6.028522190460560e+00 4.098904479766022e+00 4.485250763003060e+00 9.304811549187571e+03 + 83960 1.024565318307581e+00 -5.984335895569356e+00 -5.993707275696535e+00 3.793276926435241e+00 4.739465011528592e+00 9.197733120148190e+03 + 83980 1.017865506007781e+00 -5.996211530564809e+00 -6.003502524950385e+00 3.719023011394895e+00 4.677156993355183e+00 9.227815525551292e+03 + 84000 1.063023473089425e+00 -6.085401331103303e+00 -5.967995005351979e+00 3.295559973191711e+00 4.969725264226009e+00 9.119075273742701e+03 + 84020 9.626480567481749e-01 -5.959266524291955e+00 -6.040353312555385e+00 3.900191108186294e+00 4.434578221837750e+00 9.341321532034326e+03 + 84040 9.740875659371052e-01 -5.994988167987064e+00 -5.996930071223980e+00 3.694373973546555e+00 4.683223264651628e+00 9.207625124835218e+03 + 84060 9.859363850000875e-01 -6.028656148211839e+00 -6.001996548011524e+00 3.522713626221400e+00 4.675797176131406e+00 9.223172313891573e+03 + 84080 9.863605046776409e-01 -6.039437475193036e+00 -5.985956899618871e+00 3.464218810156083e+00 4.771312551195267e+00 9.173987158340749e+03 + 84100 1.012004730622638e+00 -6.082300939317780e+00 -5.984241515360643e+00 3.273563994066553e+00 4.836636381075250e+00 9.168744857989273e+03 + 84120 9.441818332748819e-01 -5.983927778044958e+00 -6.020740314371048e+00 3.783207696829967e+00 4.571824416523967e+00 9.280816078285647e+03 + 84140 1.003735579161963e+00 -6.072891129443262e+00 -5.953182250356521e+00 3.286290688466424e+00 4.973677597071654e+00 9.073891964410162e+03 + 84160 1.014102044223502e+00 -6.084287447544094e+00 -5.973728111176798e+00 3.289706781501494e+00 4.924555599924517e+00 9.136554417122343e+03 + 84180 1.030667087450818e+00 -6.104118217255365e+00 -5.957883531159842e+00 3.138287071451464e+00 4.977989268756496e+00 9.088242342759379e+03 + 84200 9.635870860559802e-01 -5.999864047929025e+00 -5.993663154250734e+00 3.716336874339766e+00 4.751943365425710e+00 9.197605645241667e+03 + 84220 9.756476251707782e-01 -6.012079911487096e+00 -5.998769136796401e+00 3.626825188761676e+00 4.703257716871369e+00 9.213281132239492e+03 + 84240 9.311007579445192e-01 -5.939391573686821e+00 -6.052878013655013e+00 3.945568685009747e+00 4.293911984742564e+00 9.380101204330451e+03 + 84260 9.421539869031614e-01 -5.950239057997283e+00 -5.994744204386438e+00 3.985111583828730e+00 4.729556146113056e+00 9.200910452239141e+03 + 84280 1.002659459250448e+00 -6.033340607988116e+00 -5.949710859198843e+00 3.491172989930198e+00 4.971387949140002e+00 9.063313645989736e+03 + 84300 1.028882939297666e+00 -6.061268061824960e+00 -5.973139035199505e+00 3.385702106753686e+00 4.891752615559841e+00 9.134764599736671e+03 + 84320 1.050556841409569e+00 -6.082754158083442e+00 -5.980699056337042e+00 3.267541952101660e+00 4.853558139305442e+00 9.157886728592446e+03 + 84340 9.488794747833637e-01 -5.921530994269777e+00 -6.014419044387854e+00 4.158165408761873e+00 4.624787850604577e+00 9.261351371018713e+03 + 84360 1.038200494760108e+00 -6.044506540190827e+00 -5.982980751004765e+00 3.451289980154667e+00 4.804580582746139e+00 9.164884011670158e+03 + 84380 1.015874987914531e+00 -6.000999761359258e+00 -5.976493103950714e+00 3.694994977470465e+00 4.835715996703296e+00 9.145028074575834e+03 + 84400 1.021455527831266e+00 -5.999277917145500e+00 -6.009530888450911e+00 3.653680194684402e+00 4.594806046806551e+00 9.246336841982358e+03 + 84420 1.011249625420927e+00 -5.974766528531382e+00 -6.009996701026735e+00 3.788172313853365e+00 4.585875211533477e+00 9.247748722970166e+03 + 84440 9.885488638284456e-01 -5.931224966320283e+00 -5.992945245050993e+00 4.102130768448835e+00 4.747723376794828e+00 9.195369814926698e+03 + 84460 1.013868591842864e+00 -5.955685417076170e+00 -6.043720124581638e+00 3.929108447523185e+00 4.423599533699830e+00 9.351738839543588e+03 + 84480 1.023178145254378e+00 -5.958569108421551e+00 -6.003145292313922e+00 3.935349021691608e+00 4.679385675639447e+00 9.226712453284414e+03 + 84500 1.033680571412560e+00 -5.963276928221003e+00 -6.006046923398692e+00 3.897035522606297e+00 4.651443591660639e+00 9.235612491930568e+03 + 84520 1.107613302758993e+00 -6.060227902750468e+00 -5.963274513928152e+00 3.396207309414449e+00 4.952928671520624e+00 9.104644329489218e+03 + 84540 1.115552755307359e+00 -6.059512397370105e+00 -5.978545363924956e+00 3.386308152801442e+00 4.851233388451421e+00 9.151283707217137e+03 + 84560 1.053060369095397e+00 -5.956808412135927e+00 -5.946038283757595e+00 3.945569091247287e+00 5.007412835067652e+00 9.052120651322619e+03 + 84580 9.833364925292210e-01 -5.843588597209396e+00 -5.979623428320504e+00 4.480689307555427e+00 4.699556255993371e+00 9.154530564177525e+03 + 84600 1.046990905042889e+00 -5.927968927179419e+00 -5.955934127636914e+00 4.040980744992873e+00 4.880400236365154e+00 9.082190122393538e+03 + 84620 1.094798652826411e+00 -5.989544201868482e+00 -5.933490700978428e+00 3.792751150030084e+00 5.114619026392004e+00 9.013969341971235e+03 + 84640 1.080848303878804e+00 -5.963795496740542e+00 -6.021003549144867e+00 3.793982961739441e+00 4.465485471916311e+00 9.281608944297730e+03 + 84660 1.047801247677787e+00 -5.917733155158873e+00 -5.996001484514320e+00 4.116194183006462e+00 4.666765323862669e+00 9.204754545772752e+03 + 84680 1.036958011131287e+00 -5.910869812602576e+00 -5.999753469962777e+00 4.155734861590705e+00 4.645351146326908e+00 9.216277133189240e+03 + 84700 1.063312566410562e+00 -5.967176374055030e+00 -6.007163273227895e+00 3.886335985647815e+00 4.656725022644576e+00 9.239031157810254e+03 + 84720 1.078939717618497e+00 -6.015721765907712e+00 -5.977914124883577e+00 3.652475726773897e+00 4.869573052248025e+00 9.149365832682635e+03 + 84740 1.011509517041024e+00 -5.946472969283246e+00 -6.005300594431811e+00 3.989647330601052e+00 4.651850003452417e+00 9.233347507168537e+03 + 84760 1.011400443152279e+00 -5.982921794410605e+00 -6.040714025272359e+00 3.763503146352312e+00 4.431651213425301e+00 9.342470234948243e+03 + 84780 1.003232673078363e+00 -6.007642137740804e+00 -6.031016747453735e+00 3.649779345233395e+00 4.515558719052587e+00 9.312492751827898e+03 + 84800 1.006380634367237e+00 -6.047255009435099e+00 -5.997239780097142e+00 3.432214638175145e+00 4.719409824865417e+00 9.208575871173738e+03 + 84820 9.821203757111072e-01 -6.040239702459711e+00 -5.933706141608698e+00 3.429973256398806e+00 5.041705448820581e+00 9.014652711029765e+03 + 84840 9.076120870306131e-01 -5.947169588226523e+00 -5.983372642556154e+00 3.980835552847954e+00 4.772952012482663e+00 9.166030929046821e+03 + 84860 9.784903389837658e-01 -6.062465844607673e+00 -5.983517674246301e+00 3.355674514538745e+00 4.809007125943626e+00 9.166510163039353e+03 + 84880 8.970553255090351e-01 -5.945773316902605e+00 -6.011071970248167e+00 3.978655721942389e+00 4.603700749498228e+00 9.251070889548220e+03 + 84900 9.327425249704981e-01 -5.998716635399487e+00 -6.001688346147189e+00 3.681252141219871e+00 4.664188118235813e+00 9.222227245503094e+03 + 84920 9.968843820319946e-01 -6.089448113487530e+00 -5.991879211991392e+00 3.183812443781767e+00 4.744068174911293e+00 9.192145826358030e+03 + 84940 9.925325040995808e-01 -6.076997804422980e+00 -5.950960262695428e+00 3.279385423811021e+00 5.003112492657172e+00 9.067109208753658e+03 + 84960 9.247646788477312e-01 -5.964268496852905e+00 -5.980385589722500e+00 3.889856409506395e+00 4.797309568137118e+00 9.156924339451922e+03 + 84980 1.040332951259129e+00 -6.114904153252266e+00 -5.999899764676422e+00 3.100406665970607e+00 4.760779662044722e+00 9.216754805603863e+03 + 85000 9.828995903922781e-01 -6.006652692534014e+00 -6.060176068087305e+00 3.586020387852435e+00 4.278680882709841e+00 9.402711802372669e+03 + 85020 9.825352926294716e-01 -5.981944301955520e+00 -6.019857316036861e+00 3.830406521192918e+00 4.612704127317892e+00 9.278093086625277e+03 + 85040 9.614071608802945e-01 -5.923977434466204e+00 -6.041745807208662e+00 4.046377829079951e+00 4.370133608195974e+00 9.345633764835229e+03 + 85060 1.037002772868444e+00 -6.006578002910302e+00 -5.980730300628804e+00 3.668040689543218e+00 4.816462195962581e+00 9.157979377937500e+03 + 85080 1.064511873617721e+00 -6.015821357766881e+00 -5.966826075840783e+00 3.664517333616874e+00 4.945855824431904e+00 9.115487212727474e+03 + 85100 1.034572992152146e+00 -5.936612261577809e+00 -6.044261201054148e+00 4.016732229111636e+00 4.398595360018950e+00 9.353416605843284e+03 + 85120 1.109621039117556e+00 -6.015152543787456e+00 -6.049337120672351e+00 3.601508771632120e+00 4.405215641112881e+00 9.369152675671798e+03 + 85140 1.044439554948636e+00 -5.894913518180918e+00 -6.022026340336833e+00 4.260747622555732e+00 4.530846127090813e+00 9.284795178680470e+03 + 85160 1.054154000198377e+00 -5.894232927324143e+00 -5.985227189672960e+00 4.268574026671506e+00 4.746070890948004e+00 9.171744921772555e+03 + 85180 1.082415621933125e+00 -5.922360400656340e+00 -6.049933229960412e+00 4.063325439096360e+00 4.330782511400850e+00 9.370991125204522e+03 + 85200 1.062324129292481e+00 -5.889618039057884e+00 -6.094331761158963e+00 4.202756608709528e+00 4.027258737059020e+00 9.508912775431865e+03 + 85220 1.054530618829150e+00 -5.889400060294108e+00 -6.026267504765381e+00 4.291112817969164e+00 4.505198771646532e+00 9.297855174025597e+03 + 85240 1.091453609218204e+00 -5.973861807053139e+00 -5.988717662033776e+00 3.826974347739303e+00 4.741669729504362e+00 9.182444066597107e+03 + 85260 1.030568064822196e+00 -5.940882714685558e+00 -6.042657048255553e+00 3.967956350484019e+00 4.383552377597891e+00 9.348462839314976e+03 + 85280 1.050457991648738e+00 -6.045507416897305e+00 -6.002992154019678e+00 3.500030942467963e+00 4.744160161126965e+00 9.226233380537873e+03 + 85300 9.853197970386394e-01 -6.014915818602343e+00 -6.006875808687411e+00 3.573982386677999e+00 4.620149367797048e+00 9.238170596655258e+03 + 85320 9.347668572239625e-01 -5.979049617427647e+00 -5.994026806740697e+00 3.800757267403786e+00 4.714755928655691e+00 9.198715517263152e+03 + 85340 9.221780353967184e-01 -5.982824224429404e+00 -5.982227095735458e+00 3.820219882876930e+00 4.823648688242936e+00 9.162582927053634e+03 + 85360 9.764486559168234e-01 -6.076717936255564e+00 -5.976330806329412e+00 3.339140783788716e+00 4.915579218682831e+00 9.144552571687462e+03 + 85380 9.401920848170242e-01 -6.032168723991283e+00 -6.027273372986587e+00 3.517207217180409e+00 4.545317080202496e+00 9.300974850680916e+03 + 85400 9.612960574008276e-01 -6.067946528902161e+00 -5.997291199165343e+00 3.342145774911700e+00 4.747859612137448e+00 9.208762989549179e+03 + 85420 9.377866397214502e-01 -6.031852136567582e+00 -6.030997901092457e+00 3.570814742153285e+00 4.575719894443965e+00 9.312452679188582e+03 + 85440 9.799813923517667e-01 -6.089505335114237e+00 -6.011498771067555e+00 3.228574213486147e+00 4.676499975718967e+00 9.252372608952413e+03 + 85460 9.622601828817088e-01 -6.054199967062465e+00 -5.999086638120253e+00 3.432888329967233e+00 4.749357593513507e+00 9.214253698999037e+03 + 85480 9.600289242558570e-01 -6.036745659129167e+00 -5.999232664870951e+00 3.503645190843773e+00 4.719050608991548e+00 9.214681745766729e+03 + 85500 9.844343791866615e-01 -6.053429121091479e+00 -5.989910577674925e+00 3.461235270945828e+00 4.825968576706503e+00 9.186108538637585e+03 + 85520 9.257659381545152e-01 -5.941086115737090e+00 -6.011351189942568e+00 4.009304932778993e+00 4.605832003206044e+00 9.251914021077599e+03 + 85540 1.009506250378244e+00 -6.037926234448069e+00 -5.963980054476973e+00 3.519125789402117e+00 4.943736197930514e+00 9.106807738479763e+03 + 85560 9.859800201403579e-01 -5.972116901362870e+00 -5.981448730430325e+00 3.874708529775036e+00 4.821123723173827e+00 9.160190884891501e+03 + 85580 1.052143637412863e+00 -6.039895898123552e+00 -5.994148644886725e+00 3.497048182492496e+00 4.759735989942915e+00 9.199087099901362e+03 + 85600 1.058768015398657e+00 -6.024244761555505e+00 -6.019642780508754e+00 3.502547912748343e+00 4.528973200073058e+00 9.277440436016745e+03 + 85620 1.009920271100476e+00 -5.931097261715783e+00 -5.994238868221135e+00 4.076340710664077e+00 4.713771834978318e+00 9.199356855586142e+03 + 85640 1.041399862817973e+00 -5.959636945117298e+00 -5.995379939850435e+00 3.871154947261358e+00 4.665913140293130e+00 9.202888310664857e+03 + 85660 1.017829787777435e+00 -5.911510876937125e+00 -6.009357780039622e+00 4.164938250268161e+00 4.603086190894301e+00 9.245784414975436e+03 + 85680 1.094147395880270e+00 -6.019483625254833e+00 -6.009677509785117e+00 3.547576231689391e+00 4.603884464207963e+00 9.246760709267426e+03 + 85700 9.709542438746669e-01 -5.836899025098720e+00 -6.027183605239897e+00 4.562068923454702e+00 4.469425417840454e+00 9.300652415819204e+03 + 85720 1.002961370673075e+00 -5.888890485806784e+00 -5.972440469876924e+00 4.364824887072399e+00 4.885067949223406e+00 9.132606226731294e+03 + 85740 1.044607807165134e+00 -5.956533849061823e+00 -5.949731854778598e+00 3.922973690313882e+00 4.962031794093375e+00 9.063379992253811e+03 + 85760 1.067385769092559e+00 -5.997717218182710e+00 -6.025393095298249e+00 3.674270328182148e+00 4.515351158956582e+00 9.295154675213043e+03 + 85780 1.027066451763875e+00 -5.956551080368008e+00 -6.044368445857954e+00 3.909713481401495e+00 4.405452579064834e+00 9.353756871823278e+03 + 85800 9.967904996587238e-01 -5.943730600551415e+00 -6.032147811274672e+00 3.922231136510339e+00 4.414525830018258e+00 9.316002506691826e+03 + 85820 9.506852219983875e-01 -5.917362100605700e+00 -6.035634187671103e+00 4.140701947867655e+00 4.461565321391787e+00 9.326757759666032e+03 + 85840 9.822477038803291e-01 -6.012738532940872e+00 -5.958785845472708e+00 3.711287230078281e+00 5.021091910671880e+00 9.090951803466263e+03 + 85860 9.792343353101105e-01 -6.053074860897378e+00 -5.967397484349865e+00 3.408768711489549e+00 4.900741466156537e+00 9.117225683190703e+03 + 85880 9.507024694708170e-01 -6.044372398184112e+00 -5.991505215916998e+00 3.455049839506120e+00 4.758621381253905e+00 9.190985941813682e+03 + 85900 9.095976824642882e-01 -6.007440790071660e+00 -6.024269566182666e+00 3.635221256742097e+00 4.538587820068017e+00 9.291714986115618e+03 + 85920 9.403146901392347e-01 -6.066331653738342e+00 -5.982950075719838e+00 3.331471633353629e+00 4.810261557593380e+00 9.164797554351633e+03 + 85940 9.286568894617255e-01 -6.051532697457348e+00 -5.991186291288416e+00 3.419942222206747e+00 4.766460625004931e+00 9.190027284232045e+03 + 85960 9.258456306193770e-01 -6.044875835797646e+00 -6.003934163406067e+00 3.462163400219690e+00 4.697256818795472e+00 9.229149786838512e+03 + 85980 9.233124071239158e-01 -6.034354795058297e+00 -5.993234079993287e+00 3.470445547107038e+00 4.706567056420417e+00 9.196311526134632e+03 + 86000 9.901823890011726e-01 -6.122134951389052e+00 -5.976031571837702e+00 3.047889016994294e+00 4.886837231803066e+00 9.143626868601103e+03 + 86020 9.324193332483318e-01 -6.020814132479530e+00 -6.026343156954042e+00 3.557794720265452e+00 4.526046206119034e+00 9.298113832517398e+03 + 86040 9.811158844857231e-01 -6.075011661955508e+00 -5.990942201501694e+00 3.339388596664093e+00 4.822128448296856e+00 9.189267030954768e+03 + 86060 1.009158927515387e+00 -6.097284072883913e+00 -6.021864191258642e+00 3.169911277606867e+00 4.602983909088141e+00 9.284301325366194e+03 + 86080 9.447266107967174e-01 -5.984345511589408e+00 -6.037150306126332e+00 3.783429547075847e+00 4.480216245329284e+00 9.331463326678228e+03 + 86100 1.001140021333597e+00 -6.052574072969052e+00 -5.976969752714588e+00 3.449967293427956e+00 4.884099000059833e+00 9.146495045813270e+03 + 86120 1.026793659482529e+00 -6.074568575323879e+00 -6.016104030820616e+00 3.272976213695189e+00 4.608688675591947e+00 9.266537635400178e+03 + 86140 1.007712141419936e+00 -6.029472745528380e+00 -6.012213620481358e+00 3.527201169182663e+00 4.626305736043629e+00 9.254587376063651e+03 + 86160 9.970866488795793e-01 -6.000262530249512e+00 -5.985544497986535e+00 3.714730833387569e+00 4.799244052249719e+00 9.172717098246720e+03 + 86180 9.627700827113690e-01 -5.936386784476974e+00 -6.007382149949372e+00 4.018973895589079e+00 4.611307520549269e+00 9.239703685461185e+03 + 86200 9.851736955909310e-01 -5.958245830799830e+00 -5.964980344830656e+00 3.893210393567562e+00 4.854539771839876e+00 9.109865244998557e+03 + 86220 9.838220290279112e-01 -5.944170664992822e+00 -6.015716707328028e+00 3.948634494488279e+00 4.537806047685260e+00 9.265345298441100e+03 + 86240 9.300764776991710e-01 -5.851954469688395e+00 -6.053044317482088e+00 4.466560114740895e+00 4.311871090156131e+00 9.380581578071953e+03 + 86260 1.048231720162885e+00 -6.017516715127877e+00 -6.000770443682439e+00 3.605701636072709e+00 4.701861318189545e+00 9.219386647092133e+03 + 86280 1.025878046960969e+00 -5.978143006356822e+00 -5.992094524925574e+00 3.816578223259520e+00 4.736466444647225e+00 9.192768551323279e+03 + 86300 1.035129427962068e+00 -5.988285753344441e+00 -5.984142314255219e+00 3.786980079155581e+00 4.810772347601024e+00 9.168418848412133e+03 + 86320 1.010418922445231e+00 -5.950414692766503e+00 -6.019689546406857e+00 3.953441180988162e+00 4.555654251136296e+00 9.277570185623292e+03 + 86340 9.794766581585499e-01 -5.905870141531375e+00 -6.021134133528297e+00 4.161771850171155e+00 4.499908171079718e+00 9.282015507754164e+03 + 86360 9.810062605206112e-01 -5.909291926039430e+00 -6.023998440422223e+00 4.161882189894559e+00 4.503219633532829e+00 9.290873613289519e+03 + 86380 1.098105620575937e+00 -6.087882471804434e+00 -6.004815896089561e+00 3.198247032461117e+00 4.675228164726967e+00 9.231853120089714e+03 + 86400 1.048336914352166e+00 -6.029648733284600e+00 -5.953110982188559e+00 3.610260420485484e+00 5.049752031457656e+00 9.073660314263341e+03 + 86420 1.012538946768838e+00 -6.005726585200223e+00 -5.987220150044053e+00 3.690143526610705e+00 4.796410341139020e+00 9.177840139522690e+03 + 86440 1.002621240991645e+00 -6.038224016795718e+00 -5.984332400837464e+00 3.523231084789116e+00 4.832685083322028e+00 9.169013131679436e+03 + 86460 1.000529008602647e+00 -6.093210732685285e+00 -5.981258498451524e+00 3.241281504031420e+00 4.884128557553931e+00 9.159625012400855e+03 + 86480 9.723607039197102e-01 -6.102630023928666e+00 -5.981595957062354e+00 3.128014093070997e+00 4.823010434978672e+00 9.160661845306495e+03 + 86500 9.503430146730145e-01 -6.108577705901904e+00 -5.991581359532315e+00 3.079823719503519e+00 4.751634845483791e+00 9.191249698307061e+03 + 86520 9.441325124027693e-01 -6.125279977027744e+00 -5.973901548502222e+00 3.008451574496290e+00 4.877689936825943e+00 9.137125274417156e+03 + 86540 9.475814530674008e-01 -6.144338066568928e+00 -5.962506936914583e+00 2.903099851485722e+00 4.947202336237345e+00 9.102317201707972e+03 + 86560 8.609993414277525e-01 -6.017393622644499e+00 -5.986321509585845e+00 3.643760247061969e+00 4.822181128638716e+00 9.175083840360357e+03 + 86580 9.341647751689643e-01 -6.117176932288999e+00 -5.971336486534417e+00 3.110781208791667e+00 4.948219617050514e+00 9.129278463691720e+03 + 86600 9.723429390489077e-01 -6.155459086719645e+00 -6.000039669205791e+00 2.856651623784922e+00 4.749093970226604e+00 9.217188414150622e+03 + 86620 9.511157908261799e-01 -6.099726757317611e+00 -5.988051415451066e+00 3.170138635299740e+00 4.811395730000742e+00 9.180425878340931e+03 + 86640 9.563994875475419e-01 -6.080442959965525e+00 -5.980579724334798e+00 3.335560465298761e+00 4.908990618076169e+00 9.157521832691118e+03 + 86660 9.522584205080881e-01 -6.040131731837635e+00 -6.024724880212442e+00 3.481926551774818e+00 4.570395078009260e+00 9.293095459050255e+03 + 86680 9.777711737250201e-01 -6.045006457417828e+00 -5.944640682983342e+00 3.483293884277828e+00 5.059609692634041e+00 9.047886045117921e+03 + 86700 9.507642716965754e-01 -5.972621374764476e+00 -5.969374826022224e+00 3.782822337996854e+00 4.801464523276655e+00 9.123268553680429e+03 + 86720 9.378947495534252e-01 -5.923209118693119e+00 -5.969720308003746e+00 4.093048217980206e+00 4.825973771375308e+00 9.124303108253707e+03 + 86740 9.300525171645357e-01 -5.884558462569068e+00 -5.996670914335820e+00 4.294257700101445e+00 4.650490652710912e+00 9.206809031030540e+03 + 86760 9.948575900907847e-01 -5.957337027373883e+00 -6.024449657060884e+00 3.905224831872771e+00 4.519853726564135e+00 9.292215647006642e+03 + 86780 1.017906282021607e+00 -5.973441698192220e+00 -5.985815188937838e+00 3.801822708018534e+00 4.730772209365686e+00 9.173570849787326e+03 + 86800 1.020585852263640e+00 -5.964153940052054e+00 -5.998443576406018e+00 3.922754277664653e+00 4.725857879416118e+00 9.212276872849114e+03 + 86820 1.051463283449119e+00 -6.002302504671576e+00 -5.964164334119651e+00 3.713836833297539e+00 4.932832110469510e+00 9.107366381470671e+03 + 86840 9.835398451248292e-01 -5.897408799694920e+00 -6.009397412806873e+00 4.242524231830249e+00 4.599468285159546e+00 9.245925698073286e+03 + 86860 1.009201434053627e+00 -5.933143278023069e+00 -6.027530944891758e+00 4.009492030919544e+00 4.467503441315290e+00 9.301765187583274e+03 + 86880 9.930727082850628e-01 -5.911495649528096e+00 -6.040557853625314e+00 4.171624891049028e+00 4.430529742811265e+00 9.341960086467818e+03 + 86900 9.782995908540587e-01 -5.895438113976540e+00 -6.039429351501269e+00 4.287858262558817e+00 4.461038294119832e+00 9.338442240696626e+03 + 86920 1.051454359101160e+00 -6.011244807038396e+00 -5.978079271750777e+00 3.604712341393579e+00 4.795153977365088e+00 9.149887473535518e+03 + 86940 1.035537816964454e+00 -5.997686581281909e+00 -5.982131052929835e+00 3.725045186179885e+00 4.814367437187722e+00 9.162273779951787e+03 + 86960 9.934353907898176e-01 -5.950419205137097e+00 -5.989086585111171e+00 3.974466513127480e+00 4.752432433558630e+00 9.183586032699397e+03 + 86980 1.010843066517213e+00 -5.994079481948472e+00 -5.989448526979586e+00 3.716020308210997e+00 4.742611968280305e+00 9.184701879340662e+03 + 87000 1.028179011090804e+00 -6.044421267517758e+00 -6.002385802602853e+00 3.473452633436020e+00 4.714826777944578e+00 9.224387437240021e+03 + 87020 9.772546124236521e-01 -5.999858301159904e+00 -6.055815168180567e+00 3.655973335012374e+00 4.334660345282541e+00 9.389183810980048e+03 + 87040 9.810912147955352e-01 -6.044940375612524e+00 -6.029157319645355e+00 3.443214727675336e+00 4.533843477458836e+00 9.306796734856734e+03 + 87060 9.336640837498928e-01 -6.015276728937685e+00 -6.046081139140911e+00 3.613855481714273e+00 4.436971791360277e+00 9.359065783129228e+03 + 87080 9.610635011873477e-01 -6.096249005205204e+00 -5.984590775297091e+00 3.148106231488717e+00 4.789265066676332e+00 9.169830326625959e+03 + 87100 9.190918508981027e-01 -6.065445250568673e+00 -5.979417307473307e+00 3.360901242330631e+00 4.854887004365390e+00 9.153969321197232e+03 + 87120 9.590932301035952e-01 -6.143192546092624e+00 -5.981155394668838e+00 2.897835325944201e+00 4.828277724587727e+00 9.159280196509071e+03 + 87140 9.129054277642863e-01 -6.083115279295972e+00 -6.000668811305125e+00 3.218882557446016e+00 4.692302935199143e+00 9.219127426786567e+03 + 87160 9.517076453840643e-01 -6.140760202437679e+00 -5.972469485140557e+00 2.975491332208631e+00 4.941842673833040e+00 9.132742771803876e+03 + 87180 9.083911346789949e-01 -6.069865298816334e+00 -5.996414868670912e+00 3.333957879320586e+00 4.755721615632932e+00 9.206050527195493e+03 + 87200 8.694811121963143e-01 -5.998976877815699e+00 -6.007044219850076e+00 3.675673937988148e+00 4.629350011609607e+00 9.238696623454296e+03 + 87220 9.657907789254421e-01 -6.123697331982244e+00 -5.966564554842357e+00 3.041286939519468e+00 4.943567662075376e+00 9.114684911534630e+03 + 87240 8.659808640343858e-01 -5.955356372344164e+00 -5.974151024037845e+00 3.959485213528181e+00 4.851563415040117e+00 9.137849180848829e+03 + 87260 9.460300507880154e-01 -6.050513645709183e+00 -6.009162930655269e+00 3.447603632698397e+00 4.685045837540443e+00 9.245195680682584e+03 + 87280 9.743365869069814e-01 -6.072164706622786e+00 -5.949231685209868e+00 3.327454701595865e+00 5.033355134372423e+00 9.061856778454079e+03 + 87300 9.421470225058499e-01 -6.007720219230656e+00 -5.961063570639872e+00 3.632177800129543e+00 4.900087496430860e+00 9.097910676633544e+03 + 87320 9.266191138506514e-01 -5.967053306226990e+00 -5.994851069427507e+00 3.880090331351311e+00 4.720471273363994e+00 9.201248249212116e+03 + 87340 9.819886307166142e-01 -6.032745924777306e+00 -6.014429864507569e+00 3.497045871032811e+00 4.602219523502804e+00 9.261374577228895e+03 + 87360 9.355005914293185e-01 -5.947998242835679e+00 -6.014916387193238e+00 3.977699421223885e+00 4.593445080773411e+00 9.262887026383245e+03 + 87380 1.003769362865478e+00 -6.034100921243784e+00 -6.006401730510238e+00 3.481822082536973e+00 4.640875122164910e+00 9.236718786241656e+03 + 87400 1.047856298596177e+00 -6.085101875734653e+00 -5.989471843975928e+00 3.278743308635994e+00 4.827865749694176e+00 9.184779455274718e+03 + 87420 1.015590305461614e+00 -6.025281894808702e+00 -5.969724533323554e+00 3.589120918655451e+00 4.908139885777082e+00 9.124355298365852e+03 + 87440 9.645413660219903e-01 -5.938319286779325e+00 -5.999114385190316e+00 4.054108408066362e+00 4.705013544979380e+00 9.214304790045649e+03 + 87460 1.007431973336879e+00 -5.988595512711586e+00 -5.994441524241253e+00 3.732862539624038e+00 4.699293836753328e+00 9.200014637446189e+03 + 87480 1.060333034128461e+00 -6.053322148294674e+00 -5.993223076495699e+00 3.450486554814337e+00 4.795584725385357e+00 9.196254799086022e+03 + 87500 1.057545037113472e+00 -6.037262292184003e+00 -5.993159564067867e+00 3.539066007991693e+00 4.792310697709670e+00 9.196065558901540e+03 + 87520 1.047278599180063e+00 -6.013321106364791e+00 -5.990323104024559e+00 3.679711026791906e+00 4.811769115158881e+00 9.187381753743681e+03 + 87540 1.088303633761622e+00 -6.067226969868288e+00 -5.992433332978033e+00 3.356099121527001e+00 4.785575758828745e+00 9.193843191334947e+03 + 87560 1.035595061541619e+00 -5.986970224129592e+00 -5.992898921229306e+00 3.792146877850747e+00 4.758103381641280e+00 9.195265562469473e+03 + 87580 9.797519045405076e-01 -5.904666345334410e+00 -6.062482200923472e+00 4.180285809051187e+00 4.274082744334067e+00 9.409836773212881e+03 + 87600 9.774144848170856e-01 -5.903643347603737e+00 -6.030933539186170e+00 4.243811504441731e+00 4.512891526281915e+00 9.312258660018852e+03 + 87620 9.867231566808101e-01 -5.924698131069157e+00 -5.996529359464201e+00 4.145359535332410e+00 4.732893506041398e+00 9.206363597705726e+03 + 87640 1.019477183472570e+00 -5.983553732907146e+00 -6.008282288193833e+00 3.723092486204243e+00 4.581097295016523e+00 9.242488428942981e+03 + 87660 1.019826568155523e+00 -6.001413590389120e+00 -5.970743280038472e+00 3.726996164876529e+00 4.903109833125140e+00 9.127448375816581e+03 + 87680 9.877081879888713e-01 -5.978156311523732e+00 -5.984813288465212e+00 3.765257863533420e+00 4.727032471771590e+00 9.170486849050903e+03 + 87700 1.011649638114211e+00 -6.043869195862638e+00 -5.986859012474381e+00 3.456275970100892e+00 4.783637265413628e+00 9.176724369387690e+03 + 87720 9.716818513192693e-01 -6.019122274954227e+00 -6.000538220162465e+00 3.588956429022489e+00 4.695668947509970e+00 9.218688664364376e+03 + 87740 9.479561206102147e-01 -6.015055336807865e+00 -6.004252959401319e+00 3.626665005214346e+00 4.688693927945237e+00 9.230065131778609e+03 + 87760 8.976716892220502e-01 -5.968456780034160e+00 -6.007302375530991e+00 3.859760309005633e+00 4.636702888326353e+00 9.239480844404150e+03 + 87780 9.379119102661597e-01 -6.049674040422585e+00 -5.971826808497644e+00 3.439340444845787e+00 4.886351297379007e+00 9.130761711466712e+03 + 87800 8.998355324421516e-01 -6.006759100234714e+00 -5.991389624415831e+00 3.662519921909108e+00 4.750773830479835e+00 9.190638278196766e+03 + 87820 9.375292563606198e-01 -6.068956657467351e+00 -5.989896409512418e+00 3.283205541336976e+00 4.737181719628035e+00 9.186058100125234e+03 + 87840 9.164034092509135e-01 -6.036344705777927e+00 -6.032670241999687e+00 3.478898811113268e+00 4.499998150749356e+00 9.317604079653694e+03 + 87860 9.821728884476075e-01 -6.126836046230142e+00 -5.991955461795866e+00 3.037047839383811e+00 4.811553027908404e+00 9.192393674894165e+03 + 87880 9.845279846120530e-01 -6.117218810761668e+00 -5.984651578876313e+00 3.072673683279847e+00 4.833895243478388e+00 9.170009891233740e+03 + 87900 9.680502137562979e-01 -6.072649224996309e+00 -5.991722830860368e+00 3.307570835592183e+00 4.772262714039775e+00 9.191673561325759e+03 + 87920 8.901706883363506e-01 -5.929195483000423e+00 -6.025137652823442e+00 4.039619717269023e+00 4.488704931142447e+00 9.294394070338809e+03 + 87940 1.053627785711828e+00 -6.132224004877521e+00 -6.000858460839430e+00 2.975720905826274e+00 4.730042188445234e+00 9.219714956200476e+03 + 87960 1.063882602942604e+00 -6.104615371265594e+00 -5.995823434548062e+00 3.176910154155445e+00 4.801610290285311e+00 9.204231529961498e+03 + 87980 1.009996573159096e+00 -5.987294857969151e+00 -5.986832462907298e+00 3.804089942703784e+00 4.806745086704349e+00 9.176676959946179e+03 + 88000 1.031208830412600e+00 -5.987289221284250e+00 -6.025258154438593e+00 3.769899513910123e+00 4.551876024064477e+00 9.294764286497431e+03 + 88020 1.020766585640555e+00 -5.949837510193895e+00 -6.059001491794567e+00 3.923552728423933e+00 4.296716253001315e+00 9.399071406785341e+03 + 88040 1.058608729907162e+00 -5.994697730438595e+00 -5.999891741604735e+00 3.733519544084634e+00 4.703694728198033e+00 9.216713203154586e+03 + 88060 1.028486550791528e+00 -5.946233621117347e+00 -5.983732471903285e+00 4.049785802329854e+00 4.834461598188595e+00 9.167139584368921e+03 + 88080 9.941298439024534e-01 -5.893437209518575e+00 -6.028692378972854e+00 4.287243010841905e+00 4.510586897165601e+00 9.305320701406890e+03 + 88100 9.945391307556721e-01 -5.894737386681252e+00 -6.055677896557765e+00 4.255960815445293e+00 4.331815502270943e+00 9.388752843167909e+03 + 88120 1.015625554483936e+00 -5.932713848922593e+00 -6.028569735392219e+00 4.064953247198217e+00 4.514533913439135e+00 9.304953434640212e+03 + 88140 1.004169022836957e+00 -5.924222252371581e+00 -6.012905876679588e+00 4.029332508246375e+00 4.520097413723289e+00 9.256703268950205e+03 + 88160 9.611141392888729e-01 -5.870318562890746e+00 -6.009761029060462e+00 4.394889235246561e+00 4.594189015848154e+00 9.247018801057542e+03 + 88180 1.044675319360136e+00 -6.005210755720507e+00 -5.973507809139254e+00 3.700457341619718e+00 4.882500566904398e+00 9.135908073806027e+03 + 88200 1.048064623908918e+00 -6.022690536288949e+00 -6.007399809147927e+00 3.571932936607478e+00 4.659734658083606e+00 9.239785632571467e+03 + 88220 1.024749269164748e+00 -6.003276617824223e+00 -6.013673590349065e+00 3.636755339696260e+00 4.577054314532316e+00 9.259071198455418e+03 + 88240 1.025859135692201e+00 -6.021346488322578e+00 -5.977225288064906e+00 3.578164721098011e+00 4.831515480711236e+00 9.147274771093316e+03 + 88260 9.620873763051131e-01 -5.943272608912184e+00 -6.021754837854949e+00 3.988317306558572e+00 4.537660202883541e+00 9.283947634053524e+03 + 88280 1.041394302005658e+00 -6.076129339306515e+00 -5.975800522085114e+00 3.309618932283958e+00 4.885722526603532e+00 9.142914976780701e+03 + 88300 1.026357732246263e+00 -6.068704697187347e+00 -5.982752751776253e+00 3.338383838892372e+00 4.831933210463442e+00 9.164183784828743e+03 + 88320 9.786321596486209e-01 -6.013142321670273e+00 -5.986988262763026e+00 3.621804993342937e+00 4.771985646915886e+00 9.177145074339131e+03 + 88340 9.922623331856517e-01 -6.046989333495447e+00 -5.993670777934438e+00 3.389974100496179e+00 4.696137497547305e+00 9.197642137419371e+03 + 88360 9.771858819237923e-01 -6.038530383610703e+00 -6.025640588550237e+00 3.440864440930647e+00 4.514879638857182e+00 9.295947421119197e+03 + 88380 1.023151082816274e+00 -6.121751959096362e+00 -5.963451689859408e+00 3.088794231575835e+00 4.997778874421919e+00 9.105203626402679e+03 + 88400 9.054183207084602e-01 -5.961517981239626e+00 -6.026217933914992e+00 3.935689234093978e+00 4.564172093546709e+00 9.297701534764175e+03 + 88420 9.772573050833140e-01 -6.085723836382913e+00 -6.017019429067936e+00 3.265186423224134e+00 4.659697761999403e+00 9.269349446593335e+03 + 88440 9.330567041886971e-01 -6.042752678567165e+00 -5.996453375367334e+00 3.448117340900954e+00 4.713975104668401e+00 9.206169719018635e+03 + 88460 9.514808916381501e-01 -6.097902067799129e+00 -6.019810649821789e+00 3.129981990597250e+00 4.578394997231013e+00 9.277970578917304e+03 + 88480 9.160147034463306e-01 -6.077015839004092e+00 -6.039868801682477e+00 3.226000555437470e+00 4.439304592223628e+00 9.339851082068279e+03 + 88500 9.092749090985396e-01 -6.097231968760007e+00 -5.996968930809714e+00 3.143501406254739e+00 4.719227285820297e+00 9.207751529639496e+03 + 88520 8.889781440781960e-01 -6.090103941391010e+00 -5.968768174475036e+00 3.263429618068091e+00 4.960158368348857e+00 9.121420725059768e+03 + 88540 9.127909703196988e-01 -6.139016089637335e+00 -5.972914696426336e+00 2.945220696816531e+00 4.899000600741610e+00 9.134103772237313e+03 + 88560 8.877803294197115e-01 -6.105714212880700e+00 -5.973392048410016e+00 3.140640008920569e+00 4.900454354100011e+00 9.135561995166554e+03 + 88580 8.778128455967099e-01 -6.084311967322473e+00 -5.976115550132464e+00 3.201317098549175e+00 4.822597669395659e+00 9.143884457630256e+03 + 88600 8.894518612174224e-01 -6.081637181901126e+00 -5.952349669705846e+00 3.206033111273057e+00 4.948422013476204e+00 9.071370238644886e+03 + 88620 9.249443655129866e-01 -6.099455250478443e+00 -5.979026492555028e+00 3.188281928567509e+00 4.879802492853816e+00 9.152770657170870e+03 + 88640 9.371024781649533e-01 -6.074666712945807e+00 -5.983423212413014e+00 3.298719418318991e+00 4.822653718264363e+00 9.166238394446105e+03 + 88660 1.014841050819118e+00 -6.146913622719190e+00 -5.961094417719136e+00 2.924475650811190e+00 4.991478281350541e+00 9.098017904811479e+03 + 88680 1.001229110470209e+00 -6.088944488939696e+00 -6.007233544446546e+00 3.217549375709646e+00 4.686746263717111e+00 9.239272130973863e+03 + 88700 9.516826087773159e-01 -5.985052613734860e+00 -6.023010564599581e+00 3.738238923376366e+00 4.520278495537227e+00 9.287818673264686e+03 + 88720 9.937741089808717e-01 -6.025150864487736e+00 -5.960353334422396e+00 3.583656608058491e+00 4.955734053079039e+00 9.095733557056474e+03 + 88740 9.913812824392139e-01 -5.999647004335644e+00 -6.005893360106677e+00 3.714316273240482e+00 4.678448731782780e+00 9.235131944843841e+03 + 88760 1.040405816525180e+00 -6.053510133618762e+00 -5.991697439346081e+00 3.413784254468234e+00 4.768722310465493e+00 9.191565905015541e+03 + 88780 9.629324168643597e-01 -5.923142539098103e+00 -6.021838979874664e+00 4.114933912352464e+00 4.548203676188606e+00 9.284202315456612e+03 + 88800 1.022142824396557e+00 -5.998749538606490e+00 -6.026458820647983e+00 3.649289085334886e+00 4.490178099855097e+00 9.298458320946382e+03 + 88820 1.031313743329312e+00 -6.003078925716706e+00 -5.997894933210134e+00 3.678401196746057e+00 4.708168483939042e+00 9.210570553796168e+03 + 88840 1.003528379976617e+00 -5.954265385455339e+00 -5.985452560845258e+00 3.988093114182294e+00 4.809011526893586e+00 9.172441110512602e+03 + 88860 1.008206544153851e+00 -5.953238856503750e+00 -6.008170663998642e+00 3.941463692743266e+00 4.626036753437866e+00 9.242156921619640e+03 + 88880 1.054516573573500e+00 -6.015573791797429e+00 -5.983121525226958e+00 3.623726591424894e+00 4.810072528044563e+00 9.165317842963359e+03 + 88900 1.038006053671899e+00 -5.987407165709443e+00 -5.978935248585669e+00 3.846321430090962e+00 4.894968489240608e+00 9.152504440961218e+03 + 88920 1.014424133005227e+00 -5.953127661645553e+00 -6.028881092982384e+00 3.915208636218025e+00 4.480220710676331e+00 9.305911976705849e+03 + 88940 1.024815199859206e+00 -5.973535711245635e+00 -6.008160100595526e+00 3.852426916831321e+00 4.653608315077312e+00 9.242095554031668e+03 + 88960 1.039900886754309e+00 -6.004101267904953e+00 -5.985875556032923e+00 3.659545170093172e+00 4.764200028082167e+00 9.173727868428194e+03 + 88980 1.003800980513256e+00 -5.962083765805920e+00 -6.014694299478510e+00 3.903476758469875e+00 4.601378932668089e+00 9.262215148076304e+03 + 89000 1.003345627153875e+00 -5.979274120867061e+00 -6.026109007077953e+00 3.735125958982781e+00 4.466192794684616e+00 9.297351369949498e+03 + 89020 9.688185098935996e-01 -5.951269556776326e+00 -6.000233393741544e+00 3.951478051781292e+00 4.670320122797733e+00 9.217759896874761e+03 + 89040 9.858627433054334e-01 -6.004800184789176e+00 -5.982015966008410e+00 3.734374752713193e+00 4.865205262798817e+00 9.161922619308532e+03 + 89060 1.053278082969985e+00 -6.137493658610869e+00 -5.931386152343289e+00 3.043373995373682e+00 5.226875191395640e+00 9.007633853532210e+03 + 89080 9.245791198893709e-01 -5.981890719107919e+00 -6.016649032870578e+00 3.755791004881187e+00 4.556203388424327e+00 9.268225434918069e+03 + 89100 9.586426065516375e-01 -6.063110484670775e+00 -5.979654487937639e+00 3.353486150142232e+00 4.832703398157656e+00 9.154696177705442e+03 + 89120 9.323669825072488e-01 -6.049659178510559e+00 -6.003835970819046e+00 3.386207037094189e+00 4.649330986777330e+00 9.228837280353562e+03 + 89140 9.779359966358703e-01 -6.136857211154803e+00 -5.975069069333118e+00 2.957217006622544e+00 4.886229553596692e+00 9.140693406407850e+03 + 89160 9.070375871776774e-01 -6.044605421481983e+00 -5.993373706498935e+00 3.456784572660287e+00 4.750965008175220e+00 9.196715597235569e+03 + 89180 9.040369073203212e-01 -6.045325342399186e+00 -5.967265482580721e+00 3.413606363085883e+00 4.861838157887775e+00 9.116824913395136e+03 + 89200 9.046321178408135e-01 -6.042126665631038e+00 -5.983273059720310e+00 3.479956052002634e+00 4.817902564708113e+00 9.165745058922925e+03 + 89220 9.363914560012292e-01 -6.076054424723391e+00 -5.979589099655591e+00 3.250763184902861e+00 4.804682009402974e+00 9.154513107776416e+03 + 89240 9.501873216059669e-01 -6.072636565014899e+00 -5.964335804879910e+00 3.278396380907554e+00 4.900276105091125e+00 9.107887968984407e+03 + 89260 9.353052210131921e-01 -6.016189342186157e+00 -5.973941237577979e+00 3.621352720999603e+00 4.863947875532823e+00 9.137225692580265e+03 + 89280 1.043136735133966e+00 -6.131244084949285e+00 -5.972528649804417e+00 2.996561478428053e+00 4.907930068164092e+00 9.132922285489305e+03 + 89300 1.026117704221436e+00 -6.058978793775714e+00 -5.998701344035079e+00 3.362232305567566e+00 4.708354749883493e+00 9.213080908998983e+03 + 89320 1.000640639700927e+00 -5.983694340095309e+00 -6.031027340878283e+00 3.711730660933211e+00 4.439937245679179e+00 9.312552353756560e+03 + 89340 1.048895374045542e+00 -6.030180469916131e+00 -5.988191969683041e+00 3.550310255466541e+00 4.791414721504355e+00 9.180836980985254e+03 + 89360 1.082788746659865e+00 -6.066426774002735e+00 -5.977692054829641e+00 3.365729174899637e+00 4.875257664044950e+00 9.148699706537462e+03 + 89380 9.329928299188820e-01 -5.837461935383454e+00 -6.058745866687050e+00 4.549209634328773e+00 4.278563057205829e+00 9.398258686147925e+03 + 89400 1.031893225816197e+00 -5.982383545865353e+00 -6.016977745442300e+00 3.737770196597678e+00 4.539124949191768e+00 9.269244341092806e+03 + 89420 1.032687114280286e+00 -5.984860194135133e+00 -5.989616202633520e+00 3.750626563198680e+00 4.723316826411008e+00 9.185180463630579e+03 + 89440 9.422909917061277e-01 -5.853690288415820e+00 -6.016945381209421e+00 4.459980587752131e+00 4.522544581287307e+00 9.269113660898307e+03 + 89460 9.431167723206733e-01 -5.858695205018088e+00 -5.999445646274077e+00 4.470761556942512e+00 4.662550742190231e+00 9.215246701455131e+03 + 89480 1.025074646030021e+00 -5.982365408674911e+00 -5.990247771059710e+00 3.804283848083211e+00 4.759022103478058e+00 9.187107972393191e+03 + 89500 1.092961955488760e+00 -6.085600850558023e+00 -6.013283679967551e+00 3.248071790455250e+00 4.663328175031723e+00 9.257869810447197e+03 + 89520 1.005155828348626e+00 -5.964470622237902e+00 -6.019026099872705e+00 3.975265860382148e+00 4.661999865370234e+00 9.275540114348518e+03 + 89540 1.048817420977191e+00 -6.044144117777384e+00 -5.997305265807888e+00 3.465511696764498e+00 4.734467633062259e+00 9.208781872523890e+03 + 89560 9.534510072109293e-01 -5.919603076839124e+00 -6.014181753994586e+00 4.156760449652657e+00 4.613675049423009e+00 9.260615906519390e+03 + 89580 9.513120116736070e-01 -5.933491857578895e+00 -5.985760781948285e+00 4.097696726057238e+00 4.797560473738298e+00 9.173373651032851e+03 + 89600 9.917902819743665e-01 -6.011376550784409e+00 -5.991207983842441e+00 3.637667335024309e+00 4.753478367480735e+00 9.190055212645148e+03 + 89620 9.496585266755952e-01 -5.964940294286245e+00 -6.010330013475879e+00 3.850823646868842e+00 4.590188855245618e+00 9.248778494363796e+03 + 89640 9.719356698005875e-01 -6.014945778701155e+00 -6.005932378190620e+00 3.611548686523224e+00 4.663305027073942e+00 9.235249572994906e+03 + 89660 8.988098423345408e-01 -5.924660415781875e+00 -6.037937799971939e+00 4.086612031577254e+00 4.436155761939356e+00 9.333833971661461e+03 + 89680 1.003717607496102e+00 -6.099177532643650e+00 -5.979413680700002e+00 3.155558781508242e+00 4.843261352764859e+00 9.153945551001132e+03 + 89700 8.995636940872132e-01 -5.960851664092569e+00 -6.000731733233051e+00 3.932075326529547e+00 4.703077798104146e+00 9.219289722748530e+03 + 89720 9.086597555823709e-01 -5.989336516067295e+00 -6.006565640788387e+00 3.709639092029354e+00 4.610706791682411e+00 9.237209021194656e+03 + 89740 9.490173640937255e-01 -6.062223223695243e+00 -5.993328260279084e+00 3.357879413654802e+00 4.753484955051518e+00 9.196597122762994e+03 + 89760 9.971813729213872e-01 -6.144392207718965e+00 -6.004702386102547e+00 2.882662823916294e+00 4.684783396567795e+00 9.231505601116962e+03 + 89780 9.191921395916522e-01 -6.037685177238625e+00 -5.997979936989212e+00 3.542592715892396e+00 4.770586349770596e+00 9.210852702758455e+03 + 89800 9.165309842597930e-01 -6.039851819487186e+00 -6.002447992625497e+00 3.515197233253136e+00 4.729975795316459e+00 9.224565118732260e+03 + 89820 9.256969499510513e-01 -6.053798956146555e+00 -6.001230266130225e+00 3.438426970953917e+00 4.740284524006173e+00 9.220811882724460e+03 + 89840 9.308674471916136e-01 -6.054546422890816e+00 -5.991240627519842e+00 3.408165536278739e+00 4.771677209839046e+00 9.190175167448826e+03 + 89860 9.615269171723647e-01 -6.083549061590590e+00 -5.969740512018785e+00 3.274154072123113e+00 4.927660375580548e+00 9.124375201929375e+03 + 89880 9.551653022277738e-01 -6.045874585781847e+00 -5.978139864506148e+00 3.456983513985499e+00 4.845926765464801e+00 9.150050099248981e+03 + 89900 9.961949579757611e-01 -6.068824456674899e+00 -5.967507194025314e+00 3.292564855290098e+00 4.874344256219734e+00 9.117570583351575e+03 + 89920 9.497438451701601e-01 -5.956790062993470e+00 -6.000862618905698e+00 3.899693907953644e+00 4.646622471699647e+00 9.219684332534054e+03 + 89940 1.043074237688136e+00 -6.055406879998739e+00 -5.987113534589753e+00 3.383780924912854e+00 4.775931882612300e+00 9.177528452870951e+03 + 89960 1.006024217703055e+00 -5.966909629127543e+00 -5.999169016905221e+00 3.879682620192498e+00 4.694444223448945e+00 9.214484416014820e+03 + 89980 9.532048251225204e-01 -5.861673261168003e+00 -6.021763228364946e+00 4.428346630573344e+00 4.509085265086140e+00 9.283966887190381e+03 + 90000 1.015525214675431e+00 -5.933120449331093e+00 -6.022097833437072e+00 4.058635981456383e+00 4.547714072714164e+00 9.284986996214904e+03 + 90020 1.065506994964185e+00 -5.990571560554081e+00 -6.001474453679120e+00 3.780553572110544e+00 4.717947472569316e+00 9.221563422898023e+03 + 90040 1.077246056511955e+00 -5.999827819564325e+00 -6.004678402799932e+00 3.670325876304934e+00 4.642473076740748e+00 9.231404672661036e+03 + 90060 1.022795043666366e+00 -5.917415348876180e+00 -6.021668165241481e+00 4.119190210727448e+00 4.520554406086693e+00 9.283668375711304e+03 + 90080 9.890657067829292e-01 -5.871081991110764e+00 -5.977892282333162e+00 4.414359929144009e+00 4.801038708105854e+00 9.149293187725247e+03 + 90100 1.052280115763825e+00 -5.969734178206576e+00 -5.974393800944616e+00 3.860680194038443e+00 4.833923919202328e+00 9.138597977496993e+03 + 90120 1.001146413408308e+00 -5.902939164348861e+00 -5.971464452095062e+00 4.181787116772119e+00 4.788304310279426e+00 9.129630168462905e+03 + 90140 1.076741436769008e+00 -6.025883012607737e+00 -5.975004412858010e+00 3.544704506095365e+00 4.836857299296160e+00 9.140479167432331e+03 + 90160 1.061229413842794e+00 -6.020742653745723e+00 -6.027526626784756e+00 3.564118653306600e+00 4.525164030300035e+00 9.301753035980490e+03 + 90180 1.014652803214469e+00 -5.978641210677645e+00 -6.018759540962622e+00 3.826851894267096e+00 4.596486233479214e+00 9.274725704479402e+03 + 90200 1.014465856226911e+00 -6.010476439228469e+00 -5.996850408073815e+00 3.682641238215042e+00 4.760884017726572e+00 9.207388880616554e+03 + 90220 9.847153561573705e-01 -6.001700058483343e+00 -6.023762317137913e+00 3.689374621899657e+00 4.562689718581625e+00 9.290149970927794e+03 + 90240 9.920237226796763e-01 -6.050936581156005e+00 -5.979330003931285e+00 3.437721098230750e+00 4.848897145737109e+00 9.153717408745284e+03 + 90260 9.595273559686467e-01 -6.036776639741477e+00 -5.986613812209792e+00 3.512216511030744e+00 4.800259229390153e+00 9.175998860271007e+03 + 90280 8.736860192904680e-01 -5.932951181949848e+00 -6.025646073141882e+00 4.115158454309164e+00 4.582890044596455e+00 9.295939578286481e+03 + 90300 9.857882816538537e-01 -6.114542380219270e+00 -5.975393116728304e+00 3.110230745977143e+00 4.909247350221200e+00 9.141675121913306e+03 + 90320 9.527922218669030e-01 -6.074197900286209e+00 -5.958728272275986e+00 3.337892814566385e+00 5.000937287468272e+00 9.090776964117773e+03 + 90340 9.579817859577995e-01 -6.082283183887720e+00 -5.965824770239896e+00 3.279931255302519e+00 4.948653488349592e+00 9.112410045834142e+03 + 90360 9.585416473781758e-01 -6.077505596686079e+00 -5.981548726862692e+00 3.307412947970064e+00 4.858412143773566e+00 9.160488923283152e+03 + 90380 9.308329610826589e-01 -6.026698221125326e+00 -5.997222421438376e+00 3.540085736868388e+00 4.709340340036114e+00 9.208519428186451e+03 + 90400 1.026443585458951e+00 -6.156223514409019e+00 -5.964560298605078e+00 2.835650205969555e+00 4.936210050902576e+00 9.108577234351773e+03 + 90420 9.611710647378977e-01 -6.046657432469367e+00 -5.952195549456406e+00 3.513843417658106e+00 5.056258167847679e+00 9.070891888661970e+03 + 90440 9.392971724258149e-01 -6.001278958318267e+00 -6.012386908571036e+00 3.675138586512166e+00 4.611355017211015e+00 9.255124360920188e+03 + 90460 1.020014014673853e+00 -6.107166297958133e+00 -5.971189126596940e+00 3.119972736260773e+00 4.900774696616006e+00 9.128826649782726e+03 + 90480 9.430966403029909e-01 -5.980626855315546e+00 -6.024272945130757e+00 3.821521617479445e+00 4.570899015549937e+00 9.291703172447786e+03 + 90500 1.028772738547751e+00 -6.095762519767596e+00 -5.996115313834304e+00 3.137679316413835e+00 4.709868993238081e+00 9.205135031789638e+03 + 90520 9.179205546981368e-01 -5.920137216813536e+00 -6.037783241313399e+00 4.131048959484556e+00 4.455507281142893e+00 9.333385143967314e+03 + 90540 1.049310058879352e+00 -6.102547513615965e+00 -5.943568151166408e+00 3.190151085431167e+00 5.103035186593352e+00 9.044623684787695e+03 + 90560 9.946021899499028e-01 -6.009466288715161e+00 -5.993896115821315e+00 3.694111071237408e+00 4.783517413470339e+00 9.198257794363941e+03 + 90580 9.983051052917969e-01 -6.003098543643557e+00 -5.988019990086439e+00 3.659468697634746e+00 4.746052085558343e+00 9.180310415899106e+03 + 90600 9.981079140423113e-01 -5.990424798692567e+00 -5.997668767441670e+00 3.771690923429568e+00 4.730094933871677e+00 9.209886879363441e+03 + 90620 9.941806559074878e-01 -5.971896903703829e+00 -5.997072143644015e+00 3.858643994282564e+00 4.714083870690225e+00 9.208072583911415e+03 + 90640 1.042657326220928e+00 -6.031071174677218e+00 -5.974204390049662e+00 3.546052014768722e+00 4.872589892206632e+00 9.138045156781183e+03 + 90660 9.709387721744742e-01 -5.913898313215785e+00 -5.996336582019689e+00 4.176554130257375e+00 4.703180833504493e+00 9.205810171692761e+03 + 90680 1.071583179835870e+00 -6.053381367463934e+00 -6.000121800021109e+00 3.390153904181969e+00 4.695978582330097e+00 9.217427775567701e+03 + 90700 9.597901276255719e-01 -5.879345899677598e+00 -6.037270343008111e+00 4.333592216873237e+00 4.426765624540807e+00 9.331790064520241e+03 + 90720 1.044456446144139e+00 -5.997086941036258e+00 -6.000366387005961e+00 3.699006308222609e+00 4.680175221971952e+00 9.218151614315479e+03 + 90740 9.998699175354113e-01 -5.925483352472693e+00 -6.022221744422813e+00 4.068853194744369e+00 4.513366377949006e+00 9.285378044484742e+03 + 90760 9.420959057549776e-01 -5.838141108244647e+00 -6.049475036987692e+00 4.552538121126080e+00 4.339025998463740e+00 9.369526246489157e+03 + 90780 1.007727699188709e+00 -5.934001077838484e+00 -6.042943582518939e+00 3.972537545747542e+00 4.346972825074255e+00 9.349311779552567e+03 + 90800 1.000798645476324e+00 -5.922346605074116e+00 -6.019969358775882e+00 4.099850201925008e+00 4.539285243097160e+00 9.278443805490278e+03 + 90820 9.993253559859417e-01 -5.923466449028192e+00 -6.020865821947615e+00 4.117587633545843e+00 4.558305361738269e+00 9.281208432204452e+03 + 90840 1.007200505664126e+00 -5.945067424257755e+00 -6.026064790190077e+00 3.988253686976418e+00 4.523154277491159e+00 9.297215353960037e+03 + 90860 9.914780448311771e-01 -5.938252796520446e+00 -5.986946129918909e+00 4.003601279588083e+00 4.723996623945117e+00 9.176995334684994e+03 + 90880 9.524931485558684e-01 -5.898748145579706e+00 -6.004750420466019e+00 4.247683031373628e+00 4.639001565177392e+00 9.231612850745720e+03 + 90900 1.013252730892950e+00 -6.008994089787417e+00 -6.009903302911170e+00 3.580265241408291e+00 4.575044398951423e+00 9.247497388515614e+03 + 90920 9.946399199078487e-01 -6.004955218884769e+00 -6.019148096522600e+00 3.635980892143488e+00 4.554483192406343e+00 9.275932949618173e+03 + 90940 9.751633928386126e-01 -6.001217571173766e+00 -5.999305626861283e+00 3.716706328712937e+00 4.727685008827640e+00 9.214917461244038e+03 + 90960 1.051289063961637e+00 -6.139728299919894e+00 -5.956617889276140e+00 2.944622398381418e+00 4.996070712542322e+00 9.084374399774599e+03 + 90980 9.341984508912023e-01 -5.986612100912313e+00 -6.007118911760227e+00 3.752997031375246e+00 4.635243750067806e+00 9.238925635922211e+03 + 91000 9.988888908410025e-01 -6.101424707898858e+00 -5.980281463988439e+00 3.195635407807942e+00 4.891258661197978e+00 9.156617577492556e+03 + 91020 9.040673077035576e-01 -5.976308028414016e+00 -5.975089568045691e+00 3.840074504716747e+00 4.847071092707806e+00 9.140732897506612e+03 + 91040 9.652329394414887e-01 -6.075087871501165e+00 -5.965774702519901e+00 3.302392650726312e+00 4.930085783174956e+00 9.112274042501864e+03 + 91060 9.245722523508927e-01 -6.015947207051626e+00 -5.990750481265810e+00 3.595574607634791e+00 4.740258106277660e+00 9.188660983147169e+03 + 91080 9.639004152992124e-01 -6.070300947819990e+00 -5.979028840193379e+00 3.380527266217551e+00 4.904625832522557e+00 9.152773533411388e+03 + 91100 9.901266641483418e-01 -6.098203766266397e+00 -5.979042302446231e+00 3.180793619443620e+00 4.865037184875943e+00 9.152804232932287e+03 + 91120 9.833430338384906e-01 -6.073216142871380e+00 -5.925634144184750e+00 3.336869185737465e+00 5.184307860436584e+00 8.990164595324690e+03 + 91140 9.033595814883488e-01 -5.930964014915924e+00 -5.973926112824348e+00 4.126542237452760e+00 4.879847222899426e+00 9.137138491514721e+03 + 91160 1.027466038629875e+00 -6.079207285101411e+00 -6.007545332584083e+00 3.231138947887750e+00 4.642632968893556e+00 9.240232093133918e+03 + 91180 9.836530472190592e-01 -5.972534155322508e+00 -6.022821069606733e+00 3.894929365775412e+00 4.606174122080557e+00 9.287244598370815e+03 + 91200 1.034288791734034e+00 -6.011257377083134e+00 -6.010948610649745e+00 3.651577485582313e+00 4.653350470224285e+00 9.250693265141179e+03 + 91220 1.068314274333455e+00 -6.029424317300419e+00 -6.012139820362630e+00 3.608267473016916e+00 4.707517729200960e+00 9.254356046370867e+03 + 91240 1.071033302424923e+00 -6.012603916949923e+00 -5.986126189845902e+00 3.662250771808017e+00 4.814289978254335e+00 9.174509985550818e+03 + 91260 1.031050439297823e+00 -5.940115781522131e+00 -6.015028584332229e+00 3.984610392423695e+00 4.554449485969345e+00 9.263262817257830e+03 + 91280 1.040219872663347e+00 -5.945830660984037e+00 -6.025795036416900e+00 3.992577362354788e+00 4.533409544172184e+00 9.296398596148074e+03 + 91300 1.076369215611291e+00 -5.997051519302405e+00 -5.992566785282205e+00 3.729814863648519e+00 4.755566900402860e+00 9.194254731191864e+03 + 91320 1.057736271696878e+00 -5.973159478260164e+00 -6.068772041323474e+00 3.737676666705704e+00 4.188654533599864e+00 9.429396672016062e+03 + 91340 1.045195912275040e+00 -5.965754081404414e+00 -6.029113985775551e+00 3.856907300472836e+00 4.493084924660256e+00 9.306626585720447e+03 + 91360 9.455357909955038e-01 -5.832110073105351e+00 -6.035774723343862e+00 4.570808761384921e+00 4.401334822712625e+00 9.327174595983230e+03 + 91380 1.020412938546745e+00 -5.956838913800142e+00 -6.034061450335118e+00 3.973845651357209e+00 4.530421896424469e+00 9.321894445039961e+03 + 91400 1.029686078599941e+00 -5.986564161876955e+00 -6.041977184982188e+00 3.742981619589984e+00 4.424791465782124e+00 9.346360338217564e+03 + 91420 9.465624464099498e-01 -5.879473478092417e+00 -6.030081609808972e+00 4.364177914043715e+00 4.499362715194195e+00 9.309599073084468e+03 + 91440 1.059917132916434e+00 -6.061831399008779e+00 -5.944912016461762e+00 3.370389069893799e+00 5.041758257694742e+00 9.048716227758126e+03 + 91460 9.870916646128796e-01 -5.964946856903919e+00 -5.977647597650968e+00 3.882158680276892e+00 4.809229061474054e+00 9.148554506217266e+03 + 91480 1.038402835410739e+00 -6.050207558887988e+00 -6.013842365699590e+00 3.360941664275159e+00 4.569756231058400e+00 9.259580737225218e+03 + 91500 9.554853951441951e-01 -5.935219766991504e+00 -6.067204140165945e+00 3.989754105902203e+00 4.231879410618827e+00 9.424466922437308e+03 + 91520 9.515881094689967e-01 -5.938322911089619e+00 -6.029692446322017e+00 4.014402820305257e+00 4.489744809610951e+00 9.308393894938501e+03 + 91540 9.608428847090277e-01 -5.958781742091363e+00 -5.995957151342961e+00 3.882609018970457e+00 4.669142066171788e+00 9.204598234061119e+03 + 91560 9.972993699317566e-01 -6.013930632949211e+00 -5.974905991261720e+00 3.574285050666326e+00 4.798370582279690e+00 9.140164837365375e+03 + 91580 1.026630686158436e+00 -6.056971238495659e+00 -6.011202823707333e+00 3.391624242362649e+00 4.654433562716511e+00 9.251487030139155e+03 + 91600 9.964634501445047e-01 -6.013020642160168e+00 -6.001032177444396e+00 3.614981885676685e+00 4.683821505283568e+00 9.220235000348785e+03 + 91620 9.423942319649549e-01 -5.933875652776468e+00 -6.046491525690345e+00 3.990226653071538e+00 4.343568883550043e+00 9.360309423217339e+03 + 91640 1.023432725669494e+00 -6.053948776099207e+00 -6.009721836470018e+00 3.389567275299719e+00 4.643525206747317e+00 9.246925886947929e+03 + 91660 9.646856809463791e-01 -5.966503739638371e+00 -6.019736898408741e+00 3.910846536994430e+00 4.605173501530268e+00 9.277740923076328e+03 + 91680 9.653432939404197e-01 -5.968257585369055e+00 -6.019067960131906e+00 3.794670777571624e+00 4.502909742803253e+00 9.275683122122551e+03 + 91700 1.000849178190713e+00 -6.019965202001417e+00 -5.969556077419325e+00 3.576035065000227e+00 4.865492059137421e+00 9.123815632879801e+03 + 91720 1.005731068781705e+00 -6.023517715814787e+00 -5.977079410727914e+00 3.536005487407260e+00 4.802661421520571e+00 9.146816636846450e+03 + 91740 1.002929402526722e+00 -6.016503567640603e+00 -5.947312202648198e+00 3.641823210678309e+00 5.039130735793828e+00 9.056007226934067e+03 + 91760 1.032662447582763e+00 -6.057228252354748e+00 -5.944895456115659e+00 3.431813840423112e+00 5.076846139871998e+00 9.048635123796757e+03 + 91780 9.919792147486702e-01 -5.991036227335263e+00 -5.992058098899449e+00 3.756199554248204e+00 4.750331809592537e+00 9.192656908820063e+03 + 91800 9.953215556737985e-01 -5.989040665034300e+00 -5.981891604049508e+00 3.788823065848969e+00 4.829874080337255e+00 9.161527806065895e+03 + 91820 9.952214618048111e-01 -5.981479731895280e+00 -5.996008707895268e+00 3.791787704549599e+00 4.708360076005902e+00 9.204811339276703e+03 + 91840 1.017839905376232e+00 -6.008517932693572e+00 -6.028735187746029e+00 3.633587440498918e+00 4.517496833377605e+00 9.305471264839402e+03 + 91860 1.003121240471240e+00 -5.982126754990892e+00 -6.032765157520940e+00 3.735679644476415e+00 4.444906100881415e+00 9.317908207917404e+03 + 91880 9.905822744190905e-01 -5.960004364236238e+00 -6.041516072379213e+00 3.839880706214705e+00 4.371827864161677e+00 9.344951927765665e+03 + 91900 9.843627291208699e-01 -5.949567682769651e+00 -6.024125283664455e+00 3.952583554486667e+00 4.524462272397251e+00 9.291240240686842e+03 + 91920 1.030237255426225e+00 -6.016581009149775e+00 -6.024967027097318e+00 3.596609855368648e+00 4.548456042581769e+00 9.293872854634992e+03 + 91940 9.899447253774338e-01 -5.957466035577689e+00 -6.033042290327494e+00 3.927799248354059e+00 4.493828698193060e+00 9.318776036235200e+03 + 91960 9.822926769538427e-01 -5.950124247734498e+00 -6.037007291998162e+00 3.924197203294980e+00 4.425301318025372e+00 9.331011816813696e+03 + 91980 1.006100411387033e+00 -5.994133615713660e+00 -6.049248446324792e+00 3.673910862519874e+00 4.357432976158285e+00 9.368857983203421e+03 + 92000 1.010900588960694e+00 -6.018224344495864e+00 -6.030389514662566e+00 3.553213806441698e+00 4.483359516790494e+00 9.310595421462909e+03 + 92020 9.890027675174210e-01 -6.009139371886627e+00 -5.996361692573205e+00 3.616862010963902e+00 4.690233422921050e+00 9.205885886408954e+03 + 92040 9.688819061044173e-01 -6.002362814238278e+00 -5.999908162812299e+00 3.677172437094205e+00 4.691267425438259e+00 9.216755560957523e+03 + 92060 9.610154434892753e-01 -6.012699842872334e+00 -6.044621746847262e+00 3.606250149992277e+00 4.422949637469567e+00 9.354558255715190e+03 + 92080 9.718109457199213e-01 -6.052735707574848e+00 -6.051701580629252e+00 3.386296006141179e+00 4.392234123093421e+00 9.376448891260490e+03 + 92100 9.520023869840795e-01 -6.046044245681657e+00 -5.989406824574102e+00 3.466765780288617e+00 4.791986616900786e+00 9.184562060961507e+03 + 92120 9.573153541350301e-01 -6.070026933501809e+00 -5.973186995233010e+00 3.328303675179439e+00 4.884373586650896e+00 9.134909045490715e+03 + 92140 9.758073411255317e-01 -6.107010282088451e+00 -5.948589750730035e+00 3.165039951936228e+00 5.074715158494252e+00 9.059909259509808e+03 + 92160 9.504224733908879e-01 -6.072855794682445e+00 -5.965364914217933e+00 3.292794460802797e+00 4.910023730590015e+00 9.111035680602665e+03 + 92180 9.520359810120744e-01 -6.071733785232041e+00 -5.951391871856043e+00 3.339017313247474e+00 5.030039202703362e+00 9.068438010719930e+03 + 92200 9.799392833876657e-01 -6.102227090418967e+00 -5.972641969321316e+00 3.170563407884349e+00 4.914661226459740e+00 9.133262485147472e+03 + 92220 9.842771089681361e-01 -6.092740100275113e+00 -5.974745322916188e+00 3.177091302943135e+00 4.854635574170866e+00 9.139699500680616e+03 + 92240 9.148052632309247e-01 -5.966810246945827e+00 -6.008003268608390e+00 3.933110084695734e+00 4.696573379709797e+00 9.241607385710033e+03 + 92260 1.010786893824097e+00 -6.080650545839234e+00 -5.980462347050146e+00 3.259774119842492e+00 4.835070261363089e+00 9.157174517260582e+03 + 92280 1.023707442867941e+00 -6.064741193049048e+00 -5.992728181286305e+00 3.364650904029827e+00 4.778160761549057e+00 9.194768581798111e+03 + 92300 1.005345829524636e+00 -6.006289757664199e+00 -5.993021874852108e+00 3.665539683457507e+00 4.741725919762763e+00 9.195641220426953e+03 + 92320 9.583461671662269e-01 -5.908432870441562e+00 -6.020362430099569e+00 4.177261616304031e+00 4.534544763704379e+00 9.279661574232032e+03 + 92340 1.068998676091077e+00 -6.046008870878883e+00 -5.989239625254302e+00 3.530141016721070e+00 4.856118810109785e+00 9.184033910560105e+03 + 92360 9.973643390921406e-01 -5.919515726814877e+00 -6.022654269303411e+00 4.126547166869917e+00 4.534309695262889e+00 9.286722242793785e+03 + 92380 1.052305443809838e+00 -5.987844775441395e+00 -5.952254214240100e+00 3.763245480899226e+00 4.967611990938611e+00 9.071059577377260e+03 + 92400 1.009554259056044e+00 -5.913943252087926e+00 -5.964031273672455e+00 4.174518648092534e+00 4.886905477057883e+00 9.106933236623652e+03 + 92420 1.072316633828783e+00 -5.998169937071998e+00 -5.967237905791027e+00 3.688905075094072e+00 4.866521585425774e+00 9.116724645219794e+03 + 92440 1.016409688817053e+00 -5.908841146490147e+00 -6.020991448484965e+00 4.184217408592140e+00 4.540233019334753e+00 9.281581443574525e+03 + 92460 1.049466995741277e+00 -5.956877632736725e+00 -6.022528570356407e+00 3.898134496676197e+00 4.521156653414223e+00 9.286332057409900e+03 + 92480 1.052174318688774e+00 -5.967548639670395e+00 -5.951178702797510e+00 3.851925381788181e+00 4.945924092551834e+00 9.067792886191935e+03 + 92500 1.028430033580563e+00 -5.942234958478628e+00 -5.974972858379205e+00 4.020975696838104e+00 4.832989609435354e+00 9.140365849262849e+03 + 92520 1.072841383558196e+00 -6.021887373217473e+00 -5.982977625964514e+00 3.519833743494744e+00 4.743259533485166e+00 9.164861064747853e+03 + 92540 1.009601918244036e+00 -5.949667480674852e+00 -6.026963241611281e+00 3.943552455004142e+00 4.499708234226815e+00 9.300004974416839e+03 + 92560 1.044910280083122e+00 -6.035539046237331e+00 -5.988501398110229e+00 3.519668431188584e+00 4.789765885786929e+00 9.181798599340558e+03 + 92580 9.806986044500791e-01 -5.985327702000668e+00 -6.050120667516158e+00 3.751488611406585e+00 4.379437376737633e+00 9.371566453109961e+03 + 92600 9.603164027696457e-01 -6.009700548409076e+00 -5.999442070614180e+00 3.644248317867358e+00 4.703154084859959e+00 9.215315244256237e+03 + 92620 9.123608443701907e-01 -5.986033838486925e+00 -5.987058268081388e+00 3.750627731614772e+00 4.744745298353397e+00 9.177349567127952e+03 + 92640 9.693737853768104e-01 -6.104923093038237e+00 -5.954006969068850e+00 3.100337675932058e+00 4.966921413958984e+00 9.076397484315825e+03 + 92660 9.685733721309905e-01 -6.120755932019788e+00 -5.958926505074204e+00 3.060858785842734e+00 4.990108398387167e+00 9.091386793527914e+03 + 92680 9.168913925057434e-01 -6.049984448193428e+00 -6.003098866739107e+00 3.433086989901467e+00 4.702311254132459e+00 9.226568824073742e+03 + 92700 9.372976710721153e-01 -6.080608498443852e+00 -5.995308418909813e+00 3.253266412780978e+00 4.743072669610077e+00 9.202642913534812e+03 + 92720 9.072516097524811e-01 -6.030281472072612e+00 -5.929577406726683e+00 3.532494556298832e+00 5.110752883418902e+00 9.002124000460153e+03 + 92740 9.381256385296273e-01 -6.061906010950734e+00 -5.914725048175066e+00 3.414853921375832e+00 5.259989785814101e+00 8.957112857892402e+03 + 92760 9.238923198867027e-01 -6.021063018691799e+00 -5.994690460673923e+00 3.546011481083911e+00 4.697446790362720e+00 9.200735396330121e+03 + 92780 9.314699270002779e-01 -6.008395597851394e+00 -6.013263293721306e+00 3.631656831397357e+00 4.603705768438823e+00 9.257807142774758e+03 + 92800 1.008599814700428e+00 -6.098809421086679e+00 -5.983243633860296e+00 3.163064862429596e+00 4.826661496431264e+00 9.165694223477316e+03 + 92820 9.436635092028784e-01 -5.977646317949976e+00 -6.021620148734943e+00 3.868400333499715e+00 4.615895792204111e+00 9.283536794473232e+03 + 92840 1.000285077489808e+00 -6.041525929150849e+00 -5.989496545543767e+00 3.406887033774043e+00 4.705647805966997e+00 9.184837871043990e+03 + 92860 9.746140936571742e-01 -5.981735513601664e+00 -5.986848975936510e+00 3.855208482189755e+00 4.825846190157325e+00 9.176719852085424e+03 + 92880 1.001370884465483e+00 -6.000470996872350e+00 -6.025359712217724e+00 3.647185182512474e+00 4.504270327483084e+00 9.295087193826890e+03 + 92900 1.003485485692020e+00 -5.986836750706074e+00 -5.984698139946032e+00 3.786550883896313e+00 4.798831117829424e+00 9.170146129710563e+03 + 92920 1.100011876580059e+00 -6.115727212014576e+00 -5.981732437981941e+00 3.027720184964660e+00 4.797138913084321e+00 9.161073780535517e+03 + 92940 9.572167015410662e-01 -5.893077594681028e+00 -6.040659467748990e+00 4.235536667688436e+00 4.388098714311148e+00 9.342280155333743e+03 + 92960 1.009789899522207e+00 -5.962257477355764e+00 -5.975097131733445e+00 3.982698575299220e+00 4.908971292932479e+00 9.140727692865221e+03 + 92980 1.067642709659546e+00 -6.040837569272728e+00 -5.969667790297125e+00 3.493338430183918e+00 4.902006314549533e+00 9.124151521951764e+03 + 93000 1.028558921899013e+00 -5.978399690839425e+00 -5.982777368743179e+00 3.809598886926332e+00 4.784461582959517e+00 9.164245998684999e+03 + 93020 9.531461529812316e-01 -5.863809187631457e+00 -6.029085262768795e+00 4.382165639256477e+00 4.433124839427912e+00 9.306509102703963e+03 + 93040 1.056890816966651e+00 -6.016462201036746e+00 -5.975154447001737e+00 3.601958929666540e+00 4.839154445689841e+00 9.140937712267722e+03 + 93060 1.005532235416631e+00 -5.941182225295004e+00 -5.972289563444016e+00 4.016455491331429e+00 4.837832341834784e+00 9.132085971952896e+03 + 93080 1.036904757287008e+00 -5.988282518319290e+00 -5.971329906085779e+00 3.822962222915282e+00 4.920306745768372e+00 9.129225853771639e+03 + 93100 1.051015708453725e+00 -6.012767658914488e+00 -5.994719695523393e+00 3.605468237889761e+00 4.709102436594730e+00 9.200845660885005e+03 + 93120 9.337346019269741e-01 -5.848728498635131e+00 -6.060579883014610e+00 4.454543473766731e+00 4.238060040763981e+00 9.403937637403025e+03 + 93140 1.030030902016519e+00 -6.010644994107730e+00 -5.993233923643608e+00 3.620595809453794e+00 4.720572870413229e+00 9.196288424481945e+03 + 93160 1.057837725331392e+00 -6.080219448148757e+00 -5.998663051280260e+00 3.233777672444303e+00 4.702087124074840e+00 9.212960392522851e+03 + 93180 9.376903018963904e-01 -5.941592480450124e+00 -5.996080217189768e+00 4.028088364012851e+00 4.715211347703803e+00 9.205029995547176e+03 + 93200 9.427026289467044e-01 -5.990054823693479e+00 -6.040505709325814e+00 3.724540576251935e+00 4.434843783701755e+00 9.341814705987832e+03 + 93220 1.013233046792462e+00 -6.133190750576562e+00 -5.971300642720000e+00 2.964980511163235e+00 4.894578562888836e+00 9.129165200766976e+03 + 93240 8.934490975349725e-01 -5.985786090220083e+00 -6.029604947259248e+00 3.765765537065746e+00 4.514150879000653e+00 9.308151959767356e+03 + 93260 9.800436514323376e-01 -6.136235032295470e+00 -6.004949668780902e+00 2.946644260122939e+00 4.700505133767937e+00 9.232260046399693e+03 + 93280 9.646697139876947e-01 -6.129735948842610e+00 -5.956938129346762e+00 3.016267168055702e+00 5.008498987977010e+00 9.085344639190527e+03 + 93300 8.874427893340724e-01 -6.021860141531219e+00 -5.969011571954354e+00 3.627305435147085e+00 4.930770099947155e+00 9.122160849220310e+03 + 93320 9.325243612217277e-01 -6.084675755497639e+00 -6.005691156449628e+00 3.178595141044794e+00 4.632136931605668e+00 9.234529004805938e+03 + 93340 9.009092587411992e-01 -6.026556292229439e+00 -6.041442668648252e+00 3.502043067869769e+00 4.416563190813639e+00 9.344711435964631e+03 + 93360 9.841350127735562e-01 -6.132304821524253e+00 -6.021371526099509e+00 2.928113986312415e+00 4.565110135513278e+00 9.282798665816825e+03 + 93380 9.385807246643262e-01 -6.040846738837826e+00 -6.017771740622493e+00 3.440614660971338e+00 4.573114871568214e+00 9.271706770429551e+03 + 93400 8.807208265174612e-01 -5.928660370465323e+00 -6.042809229633868e+00 3.998913786280840e+00 4.343453372456189e+00 9.348938736197631e+03 + 93420 9.896361620414179e-01 -6.055415162761354e+00 -6.023641022959520e+00 3.385651690664246e+00 4.568103718438620e+00 9.289765016505211e+03 + 93440 9.631922047584699e-01 -5.980722577785181e+00 -6.037539971319533e+00 3.771627440855607e+00 4.445373174718121e+00 9.332662714589154e+03 + 93460 1.025763091642005e+00 -6.042275368587633e+00 -6.001923174483368e+00 3.440317578158959e+00 4.672026121187507e+00 9.222950259173882e+03 + 93480 1.033381868659976e+00 -6.029629026776412e+00 -5.972505670976630e+00 3.551988084206076e+00 4.879999233019168e+00 9.132837819902230e+03 + 93500 1.033254172985017e+00 -6.011962924292745e+00 -5.955937589458908e+00 3.642224120604169e+00 4.963930263112609e+00 9.082278032132499e+03 + 93520 9.883646116751856e-01 -5.931981829539673e+00 -5.995598784253384e+00 4.048996119244813e+00 4.683697720586760e+00 9.203524313342221e+03 + 93540 9.784616802303986e-01 -5.907513140549610e+00 -5.974670121582267e+00 4.167534549694230e+00 4.781908772095488e+00 9.139450776037895e+03 + 93560 1.059612153165929e+00 -6.020639695095587e+00 -5.975316585587861e+00 3.569780337745006e+00 4.830032646266899e+00 9.141423591328725e+03 + 93580 1.007376275376154e+00 -5.939974093164111e+00 -6.011284091225516e+00 3.970039643113140e+00 4.560566599058016e+00 9.251729141788226e+03 + 93600 1.000643871863482e+00 -5.930206226105319e+00 -5.995144827990976e+00 4.099197943223079e+00 4.726310441979473e+00 9.202162687384256e+03 + 93620 9.953493980126841e-01 -5.925033375617418e+00 -6.025524359174819e+00 4.080345152288544e+00 4.503310373772504e+00 9.295569534157989e+03 + 93640 1.064913549723367e+00 -6.033609184741526e+00 -5.988718946350775e+00 3.521044207624584e+00 4.778810903206217e+00 9.182442000113155e+03 + 93660 1.032362135473018e+00 -5.992270130790513e+00 -6.005280834051839e+00 3.776962007398535e+00 4.702252535872177e+00 9.233265093100666e+03 + 93680 1.035197740094568e+00 -6.007013599225484e+00 -5.994543831208215e+00 3.645473538910315e+00 4.717076876555839e+00 9.200310070257183e+03 + 93700 1.041214636537405e+00 -6.028716247025527e+00 -5.962467320652049e+00 3.580515858649267e+00 4.960927445874001e+00 9.102174559412397e+03 + 93720 1.016390428986946e+00 -6.005648104028441e+00 -6.015939275518408e+00 3.642109204093400e+00 4.583015704844366e+00 9.266032362528114e+03 + 93740 1.014749278266371e+00 -6.018133577011636e+00 -6.010553929890744e+00 3.546358747120229e+00 4.589882253834997e+00 9.249472384182725e+03 + 93760 1.028734728324503e+00 -6.055495656574205e+00 -5.974276307048829e+00 3.433539964694126e+00 4.899914038322555e+00 9.138262372436948e+03 + 93780 9.957474282021727e-01 -6.023761910627298e+00 -6.011055666967334e+00 3.587377919064549e+00 4.660339136444920e+00 9.251016635038286e+03 + 93800 9.858205063858017e-01 -6.031570827340636e+00 -6.032672336632356e+00 3.536090656421268e+00 4.529765619610206e+00 9.317617167852070e+03 + 93820 9.199329037089282e-01 -5.960695716703579e+00 -6.005406834739899e+00 3.890634452975001e+00 4.633896294187298e+00 9.233667054380230e+03 + 93840 9.644976390140015e-01 -6.057658701609730e+00 -6.009589028063054e+00 3.389296193797505e+00 4.665319698060463e+00 9.246509309950654e+03 + 93860 9.829653713372970e-01 -6.123873470327216e+00 -5.954486821918110e+00 3.084889006408699e+00 5.057533354072914e+00 9.077875470424107e+03 + 93880 9.439727856330419e-01 -6.107292039536254e+00 -5.950507094739788e+00 3.173976287786973e+00 5.074259703200077e+00 9.065756179654887e+03 + 93900 9.255990130050203e-01 -6.120004952747221e+00 -5.966366293613188e+00 3.115038436565535e+00 4.997255392818818e+00 9.114096726750182e+03 + 93920 8.427387754489267e-01 -6.030439350078264e+00 -6.006720922838523e+00 3.517544574739641e+00 4.653739454364988e+00 9.237682555406534e+03 + 93940 9.333399106880507e-01 -6.187177361176544e+00 -5.962807315707908e+00 2.695233188623299e+00 4.983600710856528e+00 9.103251421573483e+03 + 93960 8.352140068879473e-01 -6.053140747454613e+00 -5.994813895620208e+00 3.388712219549476e+00 4.723634028833779e+00 9.201150059149833e+03 + 93980 9.101130088736247e-01 -6.162723313519563e+00 -5.965041074708683e+00 2.856739015593896e+00 4.991861022073561e+00 9.110059835482014e+03 + 94000 9.219878977377274e-01 -6.167262630705228e+00 -5.985524230942518e+00 2.790932690477775e+00 4.834502705841724e+00 9.172676511843023e+03 + 94020 8.565663573115526e-01 -6.047142603868017e+00 -6.005135275976323e+00 3.415494087583965e+00 4.656706664951058e+00 9.232812281880641e+03 + 94040 8.598031356150282e-01 -6.014900012509350e+00 -5.953512326487363e+00 3.626933174413893e+00 4.979430767265848e+00 9.074872313916998e+03 + 94060 9.172644569259599e-01 -6.049049172464232e+00 -6.018633752899497e+00 3.413391824378816e+00 4.588041870290493e+00 9.274331553324901e+03 + 94080 9.603271487720929e-01 -6.063272423156502e+00 -6.026859884214838e+00 3.282939583966269e+00 4.492026017391496e+00 9.299708106562335e+03 + 94100 9.430354987819062e-01 -6.007613077843463e+00 -5.985049150114367e+00 3.654911415896582e+00 4.784476980673579e+00 9.171216064505685e+03 + 94120 9.023835793791308e-01 -5.928068614315489e+00 -5.977805156996920e+00 4.122451954596821e+00 4.836857029814937e+00 9.149048851608704e+03 + 94140 9.903826310028637e-01 -6.041691525536578e+00 -6.034633784495830e+00 3.455083799584075e+00 4.495610440821943e+00 9.323690798623775e+03 + 94160 1.037161583404263e+00 -6.097431691523498e+00 -5.996628794389118e+00 3.237636005108668e+00 4.816461839652193e+00 9.206706980156685e+03 + 94180 9.087868051326436e-01 -5.896479847965462e+00 -6.023124796535016e+00 4.239300154282507e+00 4.512085261353675e+00 9.288170362481120e+03 + 94200 9.812685541587761e-01 -5.991425009643056e+00 -5.996501736995487e+00 3.757128887157152e+00 4.727977533078471e+00 9.206290926002494e+03 + 94220 1.046056204846449e+00 -6.072557312486155e+00 -5.966891005791136e+00 3.304329247869947e+00 4.911081532720861e+00 9.115710373932909e+03 + 94240 1.004982817913677e+00 -5.998294909633646e+00 -6.017509449407452e+00 3.684418894192112e+00 4.574086033370497e+00 9.270862650844600e+03 + 94260 1.014388137485901e+00 -5.996720059006901e+00 -6.010974171384073e+00 3.735037108105575e+00 4.653187789019088e+00 9.250766561353445e+03 + 94280 9.768766593952090e-01 -5.924821712462682e+00 -6.071394423056050e+00 4.032153890739501e+00 4.190510704458720e+00 9.437542281484111e+03 + 94300 1.004143252054956e+00 -5.953855390674719e+00 -6.021302334683414e+00 3.914808501384805e+00 4.527517711506029e+00 9.282570917618468e+03 + 94320 1.000550485074426e+00 -5.938594079016808e+00 -6.020499970528772e+00 3.999140916524417e+00 4.528824612566972e+00 9.280081895976049e+03 + 94340 9.592776640604833e-01 -5.869441056124731e+00 -6.008271547376529e+00 4.364101334244232e+00 4.566915169527320e+00 9.242454586238318e+03 + 94360 1.052893441674532e+00 -6.000969049581993e+00 -5.999817537971719e+00 3.659625600278341e+00 4.666237758140385e+00 9.216475080989228e+03 + 94380 1.024829670564327e+00 -5.953804232535115e+00 -6.011826201391147e+00 3.959026202118567e+00 4.625855078076572e+00 9.253384792886536e+03 + 94400 9.920089842000683e-01 -5.900482816454371e+00 -6.032655444711682e+00 4.279834100127156e+00 4.520878415025558e+00 9.317540344688270e+03 + 94420 1.075654972856715e+00 -6.023679138029183e+00 -6.003467567373416e+00 3.581027523855521e+00 4.697085490291387e+00 9.227700565645491e+03 + 94440 1.028778702351383e+00 -5.960652373320967e+00 -6.001461723376734e+00 3.960992100231613e+00 4.726658496984892e+00 9.221518987812582e+03 + 94460 9.929047660666727e-01 -5.919286553192048e+00 -6.042428276340521e+00 4.078592764715665e+00 4.371493934277065e+00 9.347749097793805e+03 + 94480 1.028594018147993e+00 -5.987768144992869e+00 -6.027802168121504e+00 3.803440951534185e+00 4.573559395484509e+00 9.302592782553376e+03 + 94500 1.025743264731821e+00 -6.006457850783084e+00 -6.010732886393869e+00 3.622093039316844e+00 4.597545123280090e+00 9.250052503505840e+03 + 94520 1.029117393396721e+00 -6.039029105277233e+00 -5.987878407503574e+00 3.490737379837413e+00 4.784452601998665e+00 9.179892558249367e+03 + 94540 9.956185557872157e-01 -6.021378459419370e+00 -6.001063782689154e+00 3.629009175074239e+00 4.745659192545202e+00 9.220324889085827e+03 + 94560 1.038862249820165e+00 -6.119522493183204e+00 -6.001506653971469e+00 3.029934304911610e+00 4.707599516557485e+00 9.221691509625185e+03 + 94580 9.799803280389342e-01 -6.065682244446433e+00 -5.991550894063900e+00 3.367111209370673e+00 4.792784895056569e+00 9.191137641431686e+03 + 94600 8.553292249563450e-01 -5.907024690378362e+00 -6.007771304408273e+00 4.233373065091190e+00 4.654870416843307e+00 9.240898896911791e+03 + 94620 9.737030447344890e-01 -6.100442138544905e+00 -6.023613068605949e+00 3.102745433790073e+00 4.543909842639705e+00 9.289672349176348e+03 + 94640 8.830153988127762e-01 -5.978155213946994e+00 -6.040000821161965e+00 3.807323062244560e+00 4.452196015039407e+00 9.340230683672073e+03 + 94660 9.449169102578151e-01 -6.075460405635059e+00 -5.984669013959854e+00 3.261397388750873e+00 4.782735609672350e+00 9.170070670252057e+03 + 94680 9.769776749157604e-01 -6.121545164846050e+00 -5.974925776658918e+00 3.032676949172019e+00 4.874588165419521e+00 9.140251701021791e+03 + 94700 1.020593881751412e+00 -6.179367541083741e+00 -5.959195963305854e+00 2.758809793936601e+00 5.023069064978773e+00 9.092216920775505e+03 + 94720 9.016373699568452e-01 -5.990038590541530e+00 -6.019008512707730e+00 3.772879824149218e+00 4.606530047989926e+00 9.275479512731046e+03 + 94740 9.911982309132864e-01 -6.102634324396875e+00 -5.990180255977284e+00 3.096953208541824e+00 4.742681871617962e+00 9.186925833370498e+03 + 94760 9.391611655436257e-01 -5.997609801841262e+00 -6.000905137147389e+00 3.760662687139738e+00 4.741740361860462e+00 9.219798494691498e+03 + 94780 1.006109515289531e+00 -6.061500133477270e+00 -5.993461692488776e+00 3.364894499626489e+00 4.755581756697136e+00 9.196986067295953e+03 + 94800 9.806220635953549e-01 -5.984286339786313e+00 -5.973961980171657e+00 3.819397714940515e+00 4.878681785537355e+00 9.137286528433091e+03 + 94820 1.009010188142077e+00 -5.986198299572623e+00 -6.010054451452831e+00 3.802784913637598e+00 4.665799197813867e+00 9.247937182393478e+03 + 94840 1.000346563317788e+00 -5.939097925279751e+00 -6.078003850935052e+00 3.956635270105404e+00 4.159015949370138e+00 9.458068202104883e+03 + 94860 1.037295835669813e+00 -5.974793191453345e+00 -6.010999412910149e+00 3.799254167964006e+00 4.591352441464374e+00 9.250851373565962e+03 + 94880 9.976901085157588e-01 -5.907635665001663e+00 -5.976410450749055e+00 4.178524510897162e+00 4.783609048271933e+00 9.144761753177954e+03 + 94900 9.658175943341680e-01 -5.856044626617686e+00 -5.997065233459568e+00 4.426403967678579e+00 4.616641820324108e+00 9.208045140861503e+03 + 94920 1.017302293185459e+00 -5.931822031227415e+00 -6.042837423141791e+00 4.000953158984965e+00 4.363485599036239e+00 9.349003727203481e+03 + 94940 9.698714727173007e-01 -5.864796531580102e+00 -5.999574293216920e+00 4.437937778134579e+00 4.664023014024764e+00 9.215708367882666e+03 + 94960 1.031119647727532e+00 -5.957468654519881e+00 -5.993078079493547e+00 3.945434652420791e+00 4.740959823681290e+00 9.195785345969052e+03 + 94980 1.008167231964538e+00 -5.928844640327234e+00 -6.034945139944816e+00 4.024505947699401e+00 4.415260459895991e+00 9.324644358123605e+03 + 95000 1.026281809141785e+00 -5.966481919660632e+00 -6.011358895815677e+00 3.854361673504163e+00 4.596671131732280e+00 9.251939846085541e+03 + 95020 9.976630096264398e-01 -5.938526898105757e+00 -5.989972848305277e+00 3.952535585383399e+00 4.657124978102689e+00 9.186323897037637e+03 + 95040 9.903369133529597e-01 -5.943430702737667e+00 -6.011488437257345e+00 3.990800758110267e+00 4.600002714597900e+00 9.252345682824460e+03 + 95060 9.796229377826041e-01 -5.944633734729479e+00 -5.975062532742219e+00 3.982511733488347e+00 4.807784866457920e+00 9.140640857971084e+03 + 95080 1.009045107114247e+00 -6.002984097214718e+00 -5.976443552897360e+00 3.692352739004185e+00 4.844752651610413e+00 9.144883745399362e+03 + 95100 9.935190020486889e-01 -5.995594690980003e+00 -6.077930916697068e+00 3.748467419161414e+00 4.275680069604276e+00 9.457815554912739e+03 + 95120 9.914586622388470e-01 -6.013691383888232e+00 -6.041945818688934e+00 3.588487887946941e+00 4.426246550961658e+00 9.346290245612150e+03 + 95140 9.504231928433325e-01 -5.976270979896865e+00 -6.046552728813741e+00 3.835971506391897e+00 4.432402828045698e+00 9.360498968595060e+03 + 95160 9.804492291455735e-01 -6.041003109393825e+00 -6.011789595042327e+00 3.534996981273852e+00 4.702745501456890e+00 9.253283539784681e+03 + 95180 9.749837239196405e-01 -6.052245292189327e+00 -6.025783206396939e+00 3.392734732058423e+00 4.544684123672854e+00 9.296379721246536e+03 + 95200 9.670109719503991e-01 -6.058039462528069e+00 -6.036465676304895e+00 3.397754260083931e+00 4.521634279110021e+00 9.329341441569139e+03 + 95220 9.624333702289875e-01 -6.069003909504825e+00 -6.049215472039305e+00 3.320805483646473e+00 4.434433753824290e+00 9.368745484397343e+03 + 95240 9.532401056259716e-01 -6.072451209124635e+00 -5.997266352643951e+00 3.306856717970496e+00 4.738579798701519e+00 9.208671955712132e+03 + 95260 9.845016636459654e-01 -6.131391103549574e+00 -5.991735594113335e+00 2.964074731297003e+00 4.765998278100129e+00 9.191711052536000e+03 + 95280 9.060309976500294e-01 -6.025604763648489e+00 -5.980035659241802e+00 3.619174818174552e+00 4.880839667473865e+00 9.155869665853383e+03 + 95300 9.184498066890725e-01 -6.049567906711621e+00 -5.990413903533570e+00 3.455572540954434e+00 4.795243981255208e+00 9.187631802180606e+03 + 95320 9.439745183578174e-01 -6.084785233708757e+00 -5.978830288754804e+00 3.286486891979812e+00 4.894896582380150e+00 9.152178860398391e+03 + 95340 9.736913886241206e-01 -6.114622006594506e+00 -5.949805022255585e+00 3.105697070235057e+00 5.052101699655037e+00 9.063594777855404e+03 + 95360 9.327140110297205e-01 -6.025579816040525e+00 -5.997259096405820e+00 3.569665236158490e+00 4.732287190918169e+00 9.208645450750419e+03 + 95380 9.819898849375112e-01 -6.054560699943782e+00 -6.006133374367264e+00 3.386234199165888e+00 4.664311396730667e+00 9.235903878039448e+03 + 95400 9.910255764459250e-01 -6.018414553026550e+00 -5.990665491505911e+00 3.638492032831150e+00 4.797831438236054e+00 9.188373918597279e+03 + 95420 9.617581531967009e-01 -5.925639279040673e+00 -6.035454875281984e+00 4.085585563049582e+00 4.455007415523375e+00 9.326194637046043e+03 + 95440 1.006226747223286e+00 -5.950396060784550e+00 -6.012316333554942e+00 4.024804565713380e+00 4.669248777334547e+00 9.254897645864330e+03 + 95460 1.030358658649033e+00 -5.956879695268370e+00 -6.026836124467660e+00 3.911538510230798e+00 4.509837868046043e+00 9.299609526484026e+03 + 95480 1.090220490240386e+00 -6.025577030717097e+00 -6.028857324445020e+00 3.546960878949121e+00 4.528124924739571e+00 9.305876621309128e+03 + 95500 1.109192396057043e+00 -6.045395197216797e+00 -6.018795217650608e+00 3.425391213113024e+00 4.578132412115619e+00 9.274859813492150e+03 + 95520 9.928999664002216e-01 -5.873524571906970e+00 -6.023663274108280e+00 4.360446256517251e+00 4.498326594588250e+00 9.289805936482902e+03 + 95540 9.772746411792442e-01 -5.853372364353572e+00 -6.012393094488770e+00 4.538342622374205e+00 4.625220981559445e+00 9.255087647248356e+03 + 95560 1.037652760840065e+00 -5.948507915133175e+00 -5.993255568250525e+00 3.965878046165973e+00 4.708930097289206e+00 9.196267853506561e+03 + 95580 1.002539444629045e+00 -5.904553286470214e+00 -5.997346827205158e+00 4.195967562271685e+00 4.663132691617615e+00 9.208887895525228e+03 + 95600 1.037817796391123e+00 -5.969439863681574e+00 -5.985727672866933e+00 3.870532530728908e+00 4.777005409856254e+00 9.173286770940877e+03 + 95620 9.795420005610300e-01 -5.899849297552656e+00 -6.019774121803854e+00 4.173149100099962e+00 4.484522200943009e+00 9.277864054505111e+03 + 95640 1.048596226270975e+00 -6.024533302159186e+00 -6.007262049212427e+00 3.551202795151471e+00 4.650377002289516e+00 9.239336437401354e+03 + 95660 9.883789046665934e-01 -5.959820705208630e+00 -6.022017355413285e+00 3.860247306125108e+00 4.503104515749471e+00 9.284748387472686e+03 + 95680 1.009438176942720e+00 -6.019519322395571e+00 -5.954823076345161e+00 3.609083993448194e+00 4.980579849981371e+00 9.078865697442307e+03 + 95700 9.648995799909704e-01 -5.979673357366833e+00 -5.964438699092693e+00 3.773944673088690e+00 4.861424438454553e+00 9.108179893096296e+03 + 95720 1.024605163207389e+00 -6.091979333754413e+00 -5.989328556123897e+00 3.189730857850850e+00 4.779167508161772e+00 9.184318720046165e+03 + 95740 8.784424563297207e-01 -5.897543305038710e+00 -6.015444635487267e+00 4.256641266164163e+00 4.579633581556628e+00 9.264521701197833e+03 + 95760 9.143045390577533e-01 -5.968362849737898e+00 -6.010046189614317e+00 3.790975719845538e+00 4.551623531799140e+00 9.247944621003673e+03 + 95780 9.845429105904092e-01 -6.085550277675749e+00 -6.035931054304919e+00 3.230766793167618e+00 4.515688052312917e+00 9.327694022641901e+03 + 95800 9.937207734011191e-01 -6.112012802236822e+00 -5.967429930856783e+00 3.134538933845319e+00 4.964756155436540e+00 9.117344811003271e+03 + 95820 9.435483920180487e-01 -6.047227149090185e+00 -5.984856605591721e+00 3.410719319806712e+00 4.768860632385305e+00 9.170641458952761e+03 + 95840 9.777634868068209e-01 -6.103295440741928e+00 -5.974901378184962e+00 3.181136134293052e+00 4.918394710412120e+00 9.140172245744503e+03 + 95860 8.989120290937723e-01 -5.986949456712046e+00 -6.020063585582036e+00 3.776137270200059e+00 4.585990817833697e+00 9.278740249780389e+03 + 95880 9.216401269819307e-01 -6.015085362737524e+00 -6.027070173197583e+00 3.578924659994488e+00 4.510106023689408e+00 9.300339241951917e+03 + 95900 9.794363088435865e-01 -6.082758463359166e+00 -6.005881063033618e+00 3.239859492638620e+00 4.681301422047168e+00 9.235112007415240e+03 + 95920 9.686400403768717e-01 -6.032955919164269e+00 -6.007553200805039e+00 3.547248867929405e+00 4.693115207806061e+00 9.240264941849331e+03 + 95940 1.027247532129516e+00 -6.073705795616404e+00 -5.999199130446444e+00 3.288243242471132e+00 4.716072043746219e+00 9.214599135256754e+03 + 95960 9.794509031816385e-01 -5.950952689417671e+00 -6.016317760106690e+00 3.989338599997680e+00 4.614002248889332e+00 9.267202159840424e+03 + 95980 1.075930991705041e+00 -6.048247290170844e+00 -5.986767180896875e+00 3.472000988239155e+00 4.825029289706452e+00 9.176482643722396e+03 + 96000 9.782102174421234e-01 -5.867932548088808e+00 -6.067162706839676e+00 4.428237380874463e+00 4.284226978559547e+00 9.424374916441146e+03 + 96020 9.898558604591594e-01 -5.861222214302768e+00 -6.040514115306667e+00 4.419402641284387e+00 4.389880800387986e+00 9.341826562052440e+03 + 96040 1.015395099424125e+00 -5.883911845574032e+00 -5.999223565930539e+00 4.328578390663519e+00 4.666440647945403e+00 9.214651808067498e+03 + 96060 1.046001534240224e+00 -5.919862784751841e+00 -5.986433272547225e+00 4.179822741181201e+00 4.797564698510420e+00 9.175428402704185e+03 + 96080 1.049847677785737e+00 -5.920802446958024e+00 -6.013267025695900e+00 4.100900377140960e+00 4.569954457180761e+00 9.257810063267023e+03 + 96100 1.079204320652980e+00 -5.964165404076594e+00 -6.003779598880807e+00 3.894224041212488e+00 4.666753204369863e+00 9.228642572730489e+03 + 96120 1.068232668514922e+00 -5.956779257561318e+00 -6.032197957562008e+00 3.882234977467997e+00 4.449169131057928e+00 9.316168948695842e+03 + 96140 1.028401940710397e+00 -5.914841821752476e+00 -6.026186419986133e+00 4.188001697932197e+00 4.548643784353647e+00 9.297604586163785e+03 + 96160 1.012301036257794e+00 -5.915251194813584e+00 -6.064600221142466e+00 4.146416093849590e+00 4.288830872982018e+00 9.416430384492265e+03 + 96180 1.040766357610498e+00 -5.990274938888741e+00 -6.026250357103574e+00 3.688941768102832e+00 4.482365349535286e+00 9.297809935780180e+03 + 96200 1.010040172563128e+00 -5.977917893067936e+00 -6.014193743690896e+00 3.780708848334309e+00 4.572407300387527e+00 9.260677542039102e+03 + 96220 9.808320863978355e-01 -5.970148335695297e+00 -6.042251289555839e+00 3.770581092599445e+00 4.356554773636164e+00 9.347212581596996e+03 + 96240 9.305644506224656e-01 -5.927686420207044e+00 -5.976591156734094e+00 4.114829534379347e+00 4.834010969257505e+00 9.145316626682190e+03 + 96260 9.779458583257721e-01 -6.019348837028149e+00 -5.956107315339368e+00 3.557631372951578e+00 4.920773977082412e+00 9.082805591382292e+03 + 96280 9.904350115244523e-01 -6.052647998068558e+00 -5.973897109278077e+00 3.408223428454515e+00 4.860423218550109e+00 9.137091635122370e+03 + 96300 9.061963907376336e-01 -5.936994304888803e+00 -6.022184979575575e+00 4.017967085145298e+00 4.528789047879554e+00 9.285261441457153e+03 + 96320 1.026378895663077e+00 -6.119130067916058e+00 -5.958926351171058e+00 3.046916061830948e+00 4.966830594825778e+00 9.091412141599763e+03 + 96340 9.349912673619580e-01 -5.984056428802109e+00 -6.037651774967523e+00 3.702659373002223e+00 4.394906601467399e+00 9.333007398350066e+03 + 96360 9.796074430731135e-01 -6.049350503235654e+00 -6.015495952100532e+00 3.387720646266563e+00 4.582118717859291e+00 9.264699155245737e+03 + 96380 9.191893129130537e-01 -5.955800893106983e+00 -6.043984528465451e+00 3.916985533991129e+00 4.410621453389338e+00 9.352561406627157e+03 + 96400 9.575730111432178e-01 -6.006038037310796e+00 -5.985777894241363e+00 3.670259340051515e+00 4.786596216803204e+00 9.173446264305772e+03 + 96420 9.776551206045434e-01 -6.025959675715023e+00 -5.993060360306980e+00 3.548082728438794e+00 4.736995688664385e+00 9.195763714108836e+03 + 96440 9.629890897848359e-01 -5.991389528804721e+00 -6.020242317845025e+00 3.739432554802946e+00 4.573755375178850e+00 9.279299728795033e+03 + 96460 9.859374962593189e-01 -6.013060487439079e+00 -5.998276085294908e+00 3.659395790131505e+00 4.744290115122176e+00 9.211755235588287e+03 + 96480 1.024832450077476e+00 -6.057016505233285e+00 -6.026733209427803e+00 3.389051057285843e+00 4.562942428125803e+00 9.299283519239252e+03 + 96500 1.038184253802000e+00 -6.062423073081374e+00 -6.000977877393126e+00 3.357881289648440e+00 4.710709111903661e+00 9.220071888668113e+03 + 96520 1.000239030262752e+00 -5.991106816055823e+00 -6.071051151247307e+00 3.763450779883189e+00 4.304398035867800e+00 9.436453138672317e+03 + 96540 1.024306725317957e+00 -6.013409103837817e+00 -6.028105739733802e+00 3.625244485293641e+00 4.540854127681839e+00 9.303545633380123e+03 + 96560 1.081190828245497e+00 -6.089234989482030e+00 -5.987312138321705e+00 3.245065448765537e+00 4.830322232638366e+00 9.178154186556243e+03 + 96580 1.001965598109065e+00 -5.962530408124425e+00 -6.015313387672569e+00 3.875607062505841e+00 4.572519025800712e+00 9.264140796522373e+03 + 96600 1.056461673834690e+00 -6.034601897315613e+00 -5.988048937002086e+00 3.571582849092704e+00 4.838897151260305e+00 9.180392238048547e+03 + 96620 1.033590145894872e+00 -5.989249374218269e+00 -5.990489087491635e+00 3.732010873578715e+00 4.724892248118040e+00 9.187872078932269e+03 + 96640 9.954887757250682e-01 -5.912756043191632e+00 -5.998425194342862e+00 4.195248228130655e+00 4.703322704961995e+00 9.212194075577394e+03 + 96660 9.856715404617307e-01 -5.865346157334296e+00 -5.998011245083950e+00 4.387220453426883e+00 4.625436989712387e+00 9.210930874749927e+03 + 96680 1.071410035857962e+00 -5.950049388314482e+00 -6.023872834962559e+00 3.949157513348507e+00 4.525251858553802e+00 9.290463034685121e+03 + 96700 1.059035062760754e+00 -5.891393963739584e+00 -6.027771242187386e+00 4.287298511877939e+00 4.504199074715030e+00 9.302500035698960e+03 + 96720 1.082846042599960e+00 -5.895073875414120e+00 -6.044201574824681e+00 4.163620886408799e+00 4.307306558956455e+00 9.353257908962103e+03 + 96740 1.121230195260634e+00 -5.932288509924627e+00 -6.040899378555701e+00 4.023863340263500e+00 4.400202925106272e+00 9.343041060892130e+03 + 96760 1.070346857394463e+00 -5.849683432529357e+00 -6.048404429933732e+00 4.508896310281326e+00 4.367809591210442e+00 9.366237112852627e+03 + 96780 1.102352346258210e+00 -5.903379286086159e+00 -6.035396448207109e+00 4.192583150257438e+00 4.434520175769128e+00 9.325997502514410e+03 + 96800 1.115486174034992e+00 -5.940114461423031e+00 -5.994923447008214e+00 3.998449410339222e+00 4.683727733445992e+00 9.201473968002478e+03 + 96820 1.098304269992147e+00 -5.943684032118396e+00 -6.042337070644308e+00 3.953004744933044e+00 4.386523731208884e+00 9.347481915571343e+03 + 96840 1.072473166323507e+00 -5.945380976591960e+00 -6.006609382962785e+00 3.987583721712886e+00 4.636000737266345e+00 9.237348822832508e+03 + 96860 1.067434157703514e+00 -5.983355766038104e+00 -6.007832761222678e+00 3.769127516169860e+00 4.628576822017269e+00 9.241106798467234e+03 + 96880 1.049772030855263e+00 -5.999607399855426e+00 -5.978209254737830e+00 3.701627673777467e+00 4.824499134394961e+00 9.150290504180217e+03 + 96900 1.011285196760997e+00 -5.980739364573425e+00 -5.977966441105847e+00 3.782209964489039e+00 4.798132520148392e+00 9.149524744298771e+03 + 96920 9.788670986155742e-01 -5.960444370028313e+00 -5.980868243056859e+00 3.943648702970092e+00 4.826371663456039e+00 9.158395714525464e+03 + 96940 1.031552351952172e+00 -6.059330418817584e+00 -5.964836143035809e+00 3.401730789105440e+00 4.944331543586315e+00 9.109431341233359e+03 + 96960 9.734820600316595e-01 -5.990701922455864e+00 -6.002407998815282e+00 3.734592331952483e+00 4.667374229987243e+00 9.224430347819660e+03 + 96980 1.018752333068075e+00 -6.072425857247036e+00 -5.946296674499523e+00 3.336643858836761e+00 5.060897144600927e+00 9.052924790604755e+03 + 97000 9.012727234692852e-01 -5.908987703121392e+00 -5.989089599405458e+00 4.189454433879547e+00 4.729496949688050e+00 9.183561423806304e+03 + 97020 9.892722264648188e-01 -6.043755558580065e+00 -5.967806276271409e+00 3.451349472872462e+00 4.887462005002218e+00 9.118480263758116e+03 + 97040 1.017899293452533e+00 -6.087319559259154e+00 -5.968513512123562e+00 3.270384239220085e+00 4.952586947049031e+00 9.120641496545803e+03 + 97060 9.651246324392031e-01 -6.008319405545039e+00 -5.956930498421503e+00 3.710059397127934e+00 5.005142454238950e+00 9.085281154607854e+03 + 97080 9.736263386275996e-01 -6.016881201493080e+00 -5.929512078253887e+00 3.620490064303216e+00 5.122177090270785e+00 9.001925701758397e+03 + 97100 9.693747566584656e-01 -5.999511371516800e+00 -6.019933481646365e+00 3.732403587873361e+00 4.615136671198074e+00 9.278314271624742e+03 + 97120 9.506363678876203e-01 -5.958548920397047e+00 -6.022644969318065e+00 3.927137440801193e+00 4.559088009065194e+00 9.286693873433840e+03 + 97140 1.002550918984612e+00 -6.019162423972995e+00 -5.988037729696235e+00 3.601548901139066e+00 4.780271712207095e+00 9.180369513158998e+03 + 97160 9.936297308768781e-01 -5.983830899467006e+00 -5.966318118702315e+00 3.831159469459880e+00 4.931720566704801e+00 9.113932161552508e+03 + 97180 1.033904601222158e+00 -6.014458483862352e+00 -6.019759821321122e+00 3.645967045122098e+00 4.615525945054521e+00 9.277787435713240e+03 + 97200 9.866632951878325e-01 -5.912823122369054e+00 -6.090250588211653e+00 4.122388216337010e+00 4.103572250657204e+00 9.496175130241936e+03 + 97220 1.066534366803594e+00 -6.002186255902025e+00 -5.990523654992304e+00 3.731450786241079e+00 4.798419245446360e+00 9.187974205315491e+03 + 97240 9.932357688996131e-01 -5.863443686440395e+00 -6.012640312628903e+00 4.423517340000805e+00 4.566807224323114e+00 9.255866643687274e+03 + 97260 1.099056267910019e+00 -5.990642957554204e+00 -5.993139264454959e+00 3.799166787616824e+00 4.784832607090451e+00 9.195987263248628e+03 + 97280 1.034916394059455e+00 -5.870036261389747e+00 -5.992792568783102e+00 4.395363905635372e+00 4.690478192105549e+00 9.194936991393350e+03 + 97300 1.151310719523483e+00 -6.022905396441576e+00 -6.018166368838057e+00 3.617839670425753e+00 4.645051900287313e+00 9.272880954517443e+03 + 97320 9.967403886471896e-01 -5.781774382565998e+00 -6.095848613460610e+00 4.842390202478471e+00 4.038927365851460e+00 9.513606917020783e+03 + 97340 1.138498546532178e+00 -5.990883737241616e+00 -6.002383819022256e+00 3.722492222056077e+00 4.656456972839735e+00 9.224371462119618e+03 + 97360 1.108466744141072e+00 -5.954835220093056e+00 -6.029126545009205e+00 3.953422842399278e+00 4.526830558185378e+00 9.306674598484891e+03 + 97380 1.066165938469033e+00 -5.918466830374133e+00 -6.019518931416155e+00 4.148930261932064e+00 4.568673459986676e+00 9.277055739782383e+03 + 97400 1.028269905920360e+00 -5.910384079432938e+00 -5.999114613152256e+00 4.235594066093884e+00 4.726089610471845e+00 9.214292495458798e+03 + 97420 1.020910885745876e+00 -5.960985520492295e+00 -6.010843551936127e+00 3.904743354462764e+00 4.618450822406855e+00 9.250358330502588e+03 + 97440 1.003219674570014e+00 -5.998774580850043e+00 -6.025500723762576e+00 3.761502742423359e+00 4.608037093962344e+00 9.295492738205687e+03 + 97460 1.019695765119460e+00 -6.071493083307756e+00 -5.986283394895963e+00 3.357985859802994e+00 4.847273076820176e+00 9.174987434752429e+03 + 97480 9.968901620457375e-01 -6.067366133343240e+00 -5.978507703942025e+00 3.346697159038586e+00 4.856936011457870e+00 9.151164403017727e+03 + 97500 9.515616245085153e-01 -6.017025050408511e+00 -5.977458173508964e+00 3.597195161492405e+00 4.824394291604013e+00 9.147926567595849e+03 + 97520 9.536629250504800e-01 -6.026660850754853e+00 -5.977844005573809e+00 3.499175276566767e+00 4.779489155978698e+00 9.149148769954760e+03 + 97540 9.508420558835518e-01 -6.022486805333151e+00 -5.966792501666234e+00 3.570400736103321e+00 4.890206046424396e+00 9.115382352800085e+03 + 97560 9.771466718457020e-01 -6.056378516066914e+00 -5.982914987229796e+00 3.423503472409176e+00 4.845342423436256e+00 9.164669746784562e+03 + 97580 9.739626463895094e-01 -6.043765123066057e+00 -6.001681667974627e+00 3.458723006372638e+00 4.700372717901257e+00 9.222213269587475e+03 + 97600 9.596766770006505e-01 -6.011793745335624e+00 -6.012201991731238e+00 3.608721760774409e+00 4.606377546794870e+00 9.254545985419149e+03 + 97620 9.711141543929402e-01 -6.015579360946731e+00 -6.014845834938097e+00 3.551981712227445e+00 4.556193732081809e+00 9.262685916693255e+03 + 97640 9.723177367828872e-01 -5.999128269248606e+00 -6.028176634288247e+00 3.629747453601560e+00 4.462947246323980e+00 9.303746644996760e+03 + 97660 1.041240777692210e+00 -6.079721497695693e+00 -6.032433632942888e+00 3.217011857066135e+00 4.488546094250161e+00 9.316879611433764e+03 + 97680 1.050795699171073e+00 -6.074752574352083e+00 -5.965028444530246e+00 3.339392562745019e+00 4.969445495936228e+00 9.110017342581821e+03 + 97700 1.018476819105022e+00 -6.007803104733897e+00 -5.968052451361999e+00 3.643071963280672e+00 4.871326366335838e+00 9.119236365439572e+03 + 97720 1.090912960088806e+00 -6.094330032326338e+00 -5.924363755190130e+00 3.226153227385514e+00 5.202125892898007e+00 8.986319063273862e+03 + 97740 1.030634658597051e+00 -5.981410695390556e+00 -6.003115958438837e+00 3.793123168321940e+00 4.668488189020110e+00 9.226618477018312e+03 + 97760 1.068440179991526e+00 -6.015824731637972e+00 -6.013890139115846e+00 3.625948871064862e+00 4.637057600704132e+00 9.259717470447526e+03 + 97780 1.070785448612070e+00 -6.004099716239545e+00 -5.969302670582555e+00 3.678737721731255e+00 4.878547742719106e+00 9.123050552965768e+03 + 97800 1.064153862480760e+00 -5.979455453922583e+00 -6.003953758577199e+00 3.860788312932967e+00 4.720115256505768e+00 9.229170534316339e+03 + 97820 1.046536518760774e+00 -5.939831587757830e+00 -6.030352915852538e+00 4.019573230637285e+00 4.499785756587221e+00 9.310470001233716e+03 + 97840 1.062856216168492e+00 -5.959650810743873e+00 -6.008750081440034e+00 3.948914026752421e+00 4.666978416327478e+00 9.243868438341202e+03 + 97860 1.009417922243893e+00 -5.880899336583753e+00 -6.028082876680978e+00 4.373045512325685e+00 4.527894848508205e+00 9.303403595750395e+03 + 97880 1.066410623416811e+00 -5.972472773516566e+00 -5.997495266774521e+00 3.845995281001156e+00 4.702312252495658e+00 9.209361839199140e+03 + 97900 1.073040471259626e+00 -5.998107036149563e+00 -6.012313651080237e+00 3.720579197352112e+00 4.639002615953627e+00 9.254888776103387e+03 + 97920 1.016002708924734e+00 -5.944221851262356e+00 -6.012549489644128e+00 3.989679106537038e+00 4.597331233281040e+00 9.255605665877896e+03 + 97940 9.890779385127970e-01 -5.947685043919394e+00 -5.986434899376484e+00 4.020906637592893e+00 4.798398971037531e+00 9.175447579280246e+03 + 97960 9.637488911032882e-01 -5.961245500618162e+00 -5.994857249652021e+00 3.887715157412335e+00 4.694711293058564e+00 9.201257985309605e+03 + 97980 1.018190281979560e+00 -6.088691931634571e+00 -6.008744708785245e+00 3.208316158038675e+00 4.667385483432260e+00 9.243922189998202e+03 + 98000 9.456061505170157e-01 -6.020005544842085e+00 -5.991594422428325e+00 3.556842208651664e+00 4.719983270158452e+00 9.191258113724403e+03 + 98020 9.790583381926249e-01 -6.093260098169450e+00 -5.929314523822483e+00 3.185908246591074e+00 5.127309104986995e+00 9.001327143729490e+03 + 98040 9.653126093580920e-01 -6.087384404687521e+00 -5.967038275232672e+00 3.266095715536868e+00 4.957141814369958e+00 9.116120242440582e+03 + 98060 9.186625878998076e-01 -6.025167757709228e+00 -5.940833441577778e+00 3.564083137267088e+00 5.048343831187117e+00 9.036307150671750e+03 + 98080 9.592318898723974e-01 -6.083001923021514e+00 -5.952457659442945e+00 3.266792604748299e+00 5.016397967875942e+00 9.071658471441275e+03 + 98100 9.653510114086814e-01 -6.082299740633631e+00 -5.960271038234644e+00 3.256783760393797e+00 4.957491453449443e+00 9.095444269836924e+03 + 98120 9.367539629053514e-01 -6.024769313257536e+00 -5.966907520997850e+00 3.557324626663110e+00 4.889575991901641e+00 9.115728540799360e+03 + 98140 8.977329547394215e-01 -5.944715462727112e+00 -6.009532230413763e+00 4.009896047914615e+00 4.637708137495486e+00 9.246342671897331e+03 + 98160 9.575158876715945e-01 -6.007685756473959e+00 -6.018474479242944e+00 3.693177012208797e+00 4.631226496519833e+00 9.273843891590319e+03 + 98180 9.537792234066046e-01 -5.975675584475098e+00 -5.976126994029470e+00 3.861561414021498e+00 4.858969350504887e+00 9.143905739021960e+03 + 98200 1.006110715332192e+00 -6.024997238131742e+00 -5.985112042572241e+00 3.612903636559713e+00 4.841930601676431e+00 9.171388678993835e+03 + 98220 9.859110574751722e-01 -5.969796029794251e+00 -6.013954627995331e+00 3.876661724781145e+00 4.623096220389558e+00 9.259929484462600e+03 + 98240 1.020795827949005e+00 -5.999557862555808e+00 -6.011956560979626e+00 3.685037236101359e+00 4.613841991059419e+00 9.253810651589736e+03 + 98260 1.006767280453908e+00 -5.961218888088555e+00 -6.038984230971925e+00 3.875690644667386e+00 4.429150011683161e+00 9.337120255786482e+03 + 98280 9.961676491791430e-01 -5.935183582131528e+00 -5.998173628103480e+00 4.028462695144126e+00 4.666764103495071e+00 9.211452450807967e+03 + 98300 1.068594830815186e+00 -6.034559721172622e+00 -6.014429179932758e+00 3.487384410910086e+00 4.602977093900569e+00 9.261404996734393e+03 + 98320 1.045344550333632e+00 -5.997580510692358e+00 -6.028953251025173e+00 3.684306059659174e+00 4.504158929752276e+00 9.306159372303751e+03 + 98340 9.253874430854880e-01 -5.824048214950957e+00 -5.995653790796213e+00 4.581083826190456e+00 4.595698053809959e+00 9.203673373988742e+03 + 98360 9.518322540029426e-01 -5.864053980410961e+00 -5.970379139036634e+00 4.427397015172627e+00 4.816861500578888e+00 9.126299016687624e+03 + 98380 1.074418334177479e+00 -6.044981836656286e+00 -5.969723998397030e+00 3.451963228152273e+00 4.884105381549757e+00 9.124352034831898e+03 + 98400 1.016397118215661e+00 -5.961527654022233e+00 -6.051351625338919e+00 3.866246160075988e+00 4.350463016560941e+00 9.375366826727386e+03 + 98420 9.526157379839175e-01 -5.874482682924340e+00 -6.045231273769962e+00 4.367830957353481e+00 4.387366125458885e+00 9.356394633768092e+03 + 98440 1.013358051546990e+00 -5.972015401921674e+00 -5.980061527359134e+00 3.839167215811080e+00 4.792965118415300e+00 9.155938402310388e+03 + 98460 1.079081938964172e+00 -6.076827294555764e+00 -5.963431072462558e+00 3.301847065618189e+00 4.952985720886032e+00 9.105123412529585e+03 + 98480 1.000445652577293e+00 -5.968420419845759e+00 -5.963513817824699e+00 3.885448836222538e+00 4.913623304321669e+00 9.105360282322383e+03 + 98500 1.055991460458535e+00 -6.057883744648123e+00 -5.959264676613879e+00 3.348198749239141e+00 4.914484699143230e+00 9.092420856367102e+03 + 98520 1.007265813766592e+00 -5.992286517175636e+00 -6.007291735530336e+00 3.730278337168364e+00 4.644116051325639e+00 9.239313755772726e+03 + 98540 9.823571272701844e-01 -5.960458258253268e+00 -5.987548101892298e+00 3.862293103094006e+00 4.706739028778944e+00 9.178848039440347e+03 + 98560 9.682857415376852e-01 -5.942567309962636e+00 -6.010570211848000e+00 3.982339507049791e+00 4.591856321008974e+00 9.249498438088993e+03 + 98580 1.020978183956529e+00 -6.022745421039753e+00 -5.978059346561902e+00 3.576219760970429e+00 4.832814115769928e+00 9.149826422143668e+03 + 98600 9.365492806621833e-01 -5.899469137095376e+00 -6.037524266805685e+00 4.217140741339115e+00 4.424406822580247e+00 9.332589271380435e+03 + 98620 1.019565462554853e+00 -6.024265938861051e+00 -6.001736797850881e+00 3.518276458685270e+00 4.647642272738970e+00 9.222381048570824e+03 + 98640 9.618078078923936e-01 -5.940162798699045e+00 -5.997479217718062e+00 3.992719299090200e+00 4.663599551395821e+00 9.209308335290219e+03 + 98660 9.292765957557093e-01 -5.891452592375990e+00 -6.026780621509671e+00 4.246469091389678e+00 4.469394606159256e+00 9.299427862893612e+03 + 98680 9.959691451590806e-01 -5.989550573480208e+00 -5.971019480103821e+00 3.796293223953200e+00 4.902701629797845e+00 9.128296243595130e+03 + 98700 1.032463195418915e+00 -6.041903706218962e+00 -5.991568924680539e+00 3.495977121027370e+00 4.785007225903263e+00 9.191201367531934e+03 + 98720 9.696848431376902e-01 -5.949202099096667e+00 -6.011541528472108e+00 3.947096864492964e+00 4.589134214023664e+00 9.252514824363159e+03 + 98740 1.041345011397321e+00 -6.056753824341979e+00 -5.971489591326963e+00 3.390678850800432e+00 4.880279271370076e+00 9.129736824908408e+03 + 98760 9.875248843169359e-01 -5.976829202612000e+00 -6.034942756310860e+00 3.797988318763041e+00 4.464291300380815e+00 9.324603954745005e+03 + 98780 1.040029377061699e+00 -6.055735417809715e+00 -5.975714599360746e+00 3.424237018932851e+00 4.883728941648466e+00 9.142647154935707e+03 + 98800 9.978785727952371e-01 -5.993344285794173e+00 -5.989836508111287e+00 3.747915632792079e+00 4.768057835074051e+00 9.185881833372807e+03 + 98820 1.059227390345708e+00 -6.084329779056633e+00 -5.993439608931741e+00 3.236858480949510e+00 4.758763903015007e+00 9.196938927594572e+03 + 98840 9.760358544525087e-01 -5.962388131838336e+00 -6.059484166738013e+00 3.881049497616675e+00 4.323509039659891e+00 9.400552777440855e+03 + 98860 1.036528845541447e+00 -6.057726505900732e+00 -5.999413435183365e+00 3.363076934777406e+00 4.697919610755050e+00 9.215231574967545e+03 + 98880 1.009682081245163e+00 -6.022110368367223e+00 -5.982315601558843e+00 3.577616355575064e+00 4.806124064809050e+00 9.162834399190393e+03 + 98900 9.246569659140856e-01 -5.901339138123910e+00 -6.017039800709948e+00 4.198148698422790e+00 4.533777589234092e+00 9.269422591653618e+03 + 98920 9.742243185300661e-01 -5.979922047154438e+00 -6.004896883356059e+00 3.860733207100340e+00 4.717323832787219e+00 9.232051074567265e+03 + 98940 1.032654649582665e+00 -6.070992759923433e+00 -5.995053483782224e+00 3.314270556742737e+00 4.750325631910563e+00 9.201857217923640e+03 + 98960 9.929390720461628e-01 -6.016695884128415e+00 -6.018987324771190e+00 3.552097297672073e+00 4.538939490901967e+00 9.275434473066340e+03 + 98980 9.709092529389053e-01 -5.990961669551081e+00 -5.998130589203472e+00 3.774045680360024e+00 4.732880634329266e+00 9.211326914225698e+03 + 99000 9.365500910194682e-01 -5.950478384528167e+00 -6.034420556297377e+00 3.955126344495008e+00 4.473117404187107e+00 9.323008778537187e+03 + 99020 9.459222852644640e-01 -5.976440394723326e+00 -5.997531043196726e+00 3.849415558121755e+00 4.728309790820193e+00 9.209451664787430e+03 + 99040 9.803909251860337e-01 -6.037105982810894e+00 -5.970798131049840e+00 3.523436514670867e+00 4.904186460589742e+00 9.127621570254016e+03 + 99060 9.809531492270223e-01 -6.045901666502336e+00 -5.974250273436386e+00 3.508414190997686e+00 4.919847577999612e+00 9.138177119009462e+03 + 99080 1.013332227530993e+00 -6.100638011066140e+00 -5.955606291509411e+00 3.198156688226805e+00 5.030951265507611e+00 9.081272181402701e+03 + 99100 9.827982767602627e-01 -6.057907945769045e+00 -5.996359784278547e+00 3.415111728666065e+00 4.768530796491713e+00 9.205864836324616e+03 + 99120 9.518794766546720e-01 -6.013082182970832e+00 -5.973323500447864e+00 3.662719176077185e+00 4.891019683760305e+00 9.135319430321017e+03 + 99140 9.256701233990275e-01 -5.971087422481658e+00 -6.015355093890022e+00 3.810731818740582e+00 4.556539999113751e+00 9.264230509932298e+03 + 99160 1.000469415581789e+00 -6.072916411105292e+00 -5.976433699395782e+00 3.345835814091693e+00 4.899854475379081e+00 9.144849207927373e+03 + 99180 9.645694367827347e-01 -6.005763857184898e+00 -5.992103527061799e+00 3.662502716728523e+00 4.740942446224617e+00 9.192826106575139e+03 + 99200 1.008839558163677e+00 -6.051677555622939e+00 -5.995964218484494e+00 3.387896227878562e+00 4.707810831338572e+00 9.204678286010712e+03 + 99220 1.016656036707396e+00 -6.040469973893788e+00 -5.970824551796322e+00 3.492398872258671e+00 4.892313663536556e+00 9.127705814897497e+03 + 99240 1.027609493237614e+00 -6.031742527370802e+00 -5.963970560683904e+00 3.539221240266667e+00 4.928378360660780e+00 9.106783206470776e+03 + 99260 1.030761522860958e+00 -6.010211126193219e+00 -5.962948233586419e+00 3.676647449494065e+00 4.948038292751305e+00 9.103646846351850e+03 + 99280 1.003800942537356e+00 -5.943964767236245e+00 -5.991111735125897e+00 4.079400519550433e+00 4.808675333958346e+00 9.189738704214476e+03 + 99300 1.017278598363005e+00 -5.939412221164731e+00 -5.991942665144542e+00 3.975688958661057e+00 4.674051020269050e+00 9.192321169780622e+03 + 99320 1.071672435669186e+00 -5.994839663925203e+00 -6.010121982937882e+00 3.709289090181319e+00 4.621535649479286e+00 9.248133282940318e+03 + 99340 1.021781321655529e+00 -5.903686412389189e+00 -5.981118140015836e+00 4.223965665893259e+00 4.779340703339926e+00 9.159162028616201e+03 + 99360 1.014877149644284e+00 -5.880987928594554e+00 -5.993435868354492e+00 4.291947996303518e+00 4.646254524939518e+00 9.196876630587949e+03 + 99380 1.108875138200988e+00 -6.010802387484850e+00 -5.995333946871572e+00 3.593744565926189e+00 4.682566745661083e+00 9.202743501468720e+03 + 99400 1.049942118830350e+00 -5.921021700364034e+00 -6.068694484745020e+00 4.064056651039168e+00 4.216096670834020e+00 9.429137220876717e+03 + 99420 1.077339463585007e+00 -5.969946474623904e+00 -6.013222846713504e+00 3.834677238935047e+00 4.586177613399625e+00 9.257690906878563e+03 + 99440 1.002725670266326e+00 -5.875544093100286e+00 -5.989095307679391e+00 4.376200667399265e+00 4.724172021292380e+00 9.183578404872043e+03 + 99460 1.029516988667473e+00 -5.942020990370630e+00 -5.971686150637525e+00 3.960147444928258e+00 4.789805504007034e+00 9.130296312127672e+03 + 99480 9.679070365275639e-01 -5.882227550341687e+00 -5.979031163153371e+00 4.336255237630254e+00 4.780393912554900e+00 9.152766707296667e+03 + 99500 1.065941767094467e+00 -6.071266198834588e+00 -5.957766628277525e+00 3.357032401563716e+00 5.008764499704149e+00 9.087844845210326e+03 + 99520 1.022811256488946e+00 -6.058380185994737e+00 -5.976271655693859e+00 3.391877690072056e+00 4.863357577313694e+00 9.144359315136237e+03 + 99540 1.058794123017727e+00 -6.159636361861791e+00 -5.981296502980628e+00 2.874425799984172e+00 4.898480867683776e+00 9.159722506619599e+03 + 99560 9.822253284577154e-01 -6.085470398965114e+00 -5.994745342824838e+00 3.228796032211246e+00 4.749753344225775e+00 9.200940203816426e+03 + 99580 9.509492960713234e-01 -6.063082083590608e+00 -5.996327075789321e+00 3.351883183645151e+00 4.735200768744209e+00 9.205772327681318e+03 + 99600 9.225550646667746e-01 -6.032053639471701e+00 -6.011262540082271e+00 3.469860741386978e+00 4.589246451493315e+00 9.251654844020924e+03 + 99620 9.555262564836323e-01 -6.083343758170188e+00 -6.011785462304154e+00 3.250803003095390e+00 4.661701811568657e+00 9.253285879405550e+03 + 99640 8.747339933189782e-01 -5.960029034051134e+00 -6.035060266652488e+00 3.910279677916371e+00 4.479438729273676e+00 9.324999535487863e+03 + 99660 9.140978552864858e-01 -6.011553560159665e+00 -5.986796094725240e+00 3.663509170421389e+00 4.805670368151249e+00 9.176558240515365e+03 + 99680 9.451952833962797e-01 -6.045293498920298e+00 -5.963886067517295e+00 3.470759787612819e+00 4.938213856488158e+00 9.106522991413745e+03 + 99700 8.951558676135717e-01 -5.952641539953055e+00 -6.005778189682211e+00 3.925127348924073e+00 4.620008483309289e+00 9.234782768611209e+03 + 99720 1.018993897734596e+00 -6.116250312379456e+00 -5.962311217516648e+00 3.087636405157611e+00 4.971578509857796e+00 9.101715282390742e+03 + 99740 9.996216697365274e-01 -6.063360504359143e+00 -5.988605391729380e+00 3.352144517893611e+00 4.781399942930001e+00 9.182094096269750e+03 + 99760 9.607605003200517e-01 -5.981921229750936e+00 -5.956452959633287e+00 3.823627993309679e+00 4.969870741527285e+00 9.083838626519924e+03 + 99780 1.010376746870079e+00 -6.031253406050175e+00 -5.975283572151315e+00 3.524421227577470e+00 4.845808675128531e+00 9.141304820451775e+03 + 99800 9.803598248244347e-01 -5.963105616323153e+00 -6.007870934334797e+00 3.870292048076623e+00 4.613242664643193e+00 9.241217147433468e+03 + 99820 9.689118593309668e-01 -5.924117294360082e+00 -6.018012706591394e+00 4.137776924066238e+00 4.598614936765959e+00 9.272392822750337e+03 + 99840 1.026286565318514e+00 -5.991681472423668e+00 -5.980241637296657e+00 3.741017693518206e+00 4.806706997126271e+00 9.156463966561420e+03 + 99860 9.851550759894512e-01 -5.914199180180428e+00 -5.991047780453469e+00 4.178069447166468e+00 4.736792892116210e+00 9.189580859456793e+03 + 99880 1.046499096001062e+00 -5.992393817584341e+00 -6.024136688015793e+00 3.728347748705048e+00 4.546075274494324e+00 9.291298937488946e+03 + 99900 1.068954806511512e+00 -6.018981448854779e+00 -6.028681349010178e+00 3.533137895437664e+00 4.477439567690666e+00 9.305317209912950e+03 + 99920 1.094336014170752e+00 -6.056651201203143e+00 -6.012614343397243e+00 3.336385369392854e+00 4.589251821596051e+00 9.255815818356592e+03 + 99940 9.956681335670017e-01 -5.914800942870066e+00 -6.003531095855219e+00 4.164067363147243e+00 4.654565093759699e+00 9.227896199353645e+03 + 99960 1.003083438737440e+00 -5.930992612643508e+00 -6.070495390739425e+00 4.037344646770880e+00 4.236298106958984e+00 9.434707749602467e+03 + 99980 1.012934465883673e+00 -5.954959992992038e+00 -6.047095663015638e+00 3.924023946415882e+00 4.394966671191520e+00 9.362216377839693e+03 + 100000 1.062972901652005e+00 -6.044390689604734e+00 -5.996657400225641e+00 3.490339401527035e+00 4.764431335844447e+00 9.206787131907888e+03 + 100020 9.780183035487618e-01 -5.935605934935336e+00 -6.032377839627401e+00 4.026339373668633e+00 4.470660121522944e+00 9.316708197645956e+03 + 100040 1.034997992414912e+00 -6.040277127697238e+00 -6.024645020695599e+00 3.431678744360573e+00 4.521440721824728e+00 9.292874662229531e+03 + 100060 1.010365873372486e+00 -6.027716979883165e+00 -6.013081772465735e+00 3.535952067903067e+00 4.619989693684977e+00 9.257263845448655e+03 + 100080 9.492473111768482e-01 -5.965014880085065e+00 -5.990030472170651e+00 3.894482250357007e+00 4.750838849451208e+00 9.186458651363813e+03 + 100100 1.019481043984073e+00 -6.098361323460715e+00 -5.964602926717816e+00 3.162333129848807e+00 4.930394542991534e+00 9.108720997503182e+03 + 100120 9.641101838560518e-01 -6.047695682394565e+00 -6.000150319293153e+00 3.432187001095770e+00 4.705199833645237e+00 9.217536992816005e+03 + 100140 9.806102378523326e-01 -6.112919263920397e+00 -5.996944740338340e+00 3.086537297478054e+00 4.752480958885748e+00 9.207686688025133e+03 + 100160 9.255156940489184e-01 -6.078872407825847e+00 -5.986473118121066e+00 3.257918160499668e+00 4.788489180728395e+00 9.175574592481331e+03 + 100180 8.767278334528232e-01 -6.054073487966105e+00 -6.019906817187721e+00 3.393977756194249e+00 4.590168067078949e+00 9.278262253206571e+03 + 100200 9.442305151794494e-01 -6.199495193704019e+00 -5.964179017143159e+00 2.679077508852492e+00 5.030299409725586e+00 9.107430128307667e+03 + 100220 8.572874875612883e-01 -6.101960972229872e+00 -5.969728726180640e+00 3.182037763367895e+00 4.941335783056526e+00 9.124369594949940e+03 + 100240 8.833285435977111e-01 -6.154377213967479e+00 -5.955329994330199e+00 2.902429677238932e+00 5.045389614853877e+00 9.080434526404186e+03 + 100260 8.532637575387513e-01 -6.107982359714260e+00 -6.020202565859297e+00 3.140012347506718e+00 4.644057507701113e+00 9.279178989210624e+03 + 100280 8.593242923469000e-01 -6.106486250678866e+00 -6.030366878195771e+00 3.110991183301837e+00 4.548080399534595e+00 9.310509240679545e+03 + 100300 8.660085698553831e-01 -6.100373630161558e+00 -5.994550636387740e+00 3.186121646811874e+00 4.793773653116498e+00 9.200333232884090e+03 + 100320 9.069261671425608e-01 -6.140838465205085e+00 -5.989875799562621e+00 2.929218513359653e+00 4.796069500875689e+00 9.186011009382817e+03 + 100340 9.393740320344086e-01 -6.168036928163246e+00 -5.994440320434852e+00 2.815969390177889e+00 4.812787975742550e+00 9.200003785749032e+03 + 100360 9.060580313734133e-01 -6.097772706163690e+00 -5.972869546733383e+00 3.204539782447073e+00 4.921753052597351e+00 9.133970940818375e+03 + 100380 9.377925985262099e-01 -6.120868320687856e+00 -5.954298022639589e+00 3.122445119340713e+00 5.078917547404179e+00 9.077287330549330e+03 + 100400 9.047871351241796e-01 -6.042531150221211e+00 -6.022185711653732e+00 3.456266132801576e+00 4.573092789502486e+00 9.285262171819095e+03 + 100420 9.533624670846478e-01 -6.084174405660979e+00 -6.021888717856658e+00 3.181178394983661e+00 4.538832453035113e+00 9.284375573143105e+03 + 100440 9.789284036689726e-01 -6.090519191535884e+00 -5.993369294251552e+00 3.252356550101631e+00 4.810206294206278e+00 9.196716513911831e+03 + 100460 1.015163842256240e+00 -6.112483658720968e+00 -5.981638299240600e+00 3.110914720033351e+00 4.862249022423564e+00 9.160789803461006e+03 + 100480 9.137136936695620e-01 -5.934028729419394e+00 -6.016839632222270e+00 4.055240436173072e+00 4.579727417333164e+00 9.268801913402584e+03 + 100500 9.984968666909527e-01 -6.032985466422749e+00 -6.002698409689364e+00 3.556257106040528e+00 4.730170072710509e+00 9.225321724169677e+03 + 100520 9.774127467092016e-01 -5.973843070416264e+00 -5.986647613550137e+00 3.837536583709315e+00 4.764010915537969e+00 9.176104014627150e+03 + 100540 9.602483478850309e-01 -5.924929722496405e+00 -6.018961063831163e+00 4.067970473907312e+00 4.528027960660086e+00 9.275331356651404e+03 + 100560 1.049784168371287e+00 -6.034166685358835e+00 -6.025867035968425e+00 3.492710352196414e+00 4.540368223362742e+00 9.296653040245232e+03 + 100580 9.868640247497810e-01 -5.921728186512888e+00 -6.069287058763448e+00 4.115040745624032e+00 4.267734866499628e+00 9.430962482544479e+03 + 100600 1.035881680106078e+00 -5.982818410307177e+00 -6.012639016238605e+00 3.772036075934060e+00 4.600801541951944e+00 9.255887620920523e+03 + 100620 1.015377042959121e+00 -5.943194898282735e+00 -5.976030029100277e+00 4.005427929241881e+00 4.816883526867480e+00 9.143623098295284e+03 + 100640 1.087151555760555e+00 -6.043649554964161e+00 -5.953475612120508e+00 3.509200044145582e+00 5.026992778326393e+00 9.074768238159428e+03 + 100660 9.638277359349815e-01 -5.856825200435729e+00 -6.040086277234727e+00 4.426740967251023e+00 4.374427504711195e+00 9.340492166701464e+03 + 100680 1.006675899751647e+00 -5.918879723934095e+00 -6.031883488116287e+00 4.104550627091498e+00 4.455665525881368e+00 9.315180002178417e+03 + 100700 1.017813001005820e+00 -5.936562656025433e+00 -6.051335375085548e+00 4.012628410105408e+00 4.353585696241354e+00 9.375305535650477e+03 + 100720 1.060193858176878e+00 -6.005479800804906e+00 -5.985352192009938e+00 3.651251330826768e+00 4.766827175264866e+00 9.172145240523674e+03 + 100740 1.055671757827548e+00 -6.013221657023240e+00 -5.995837637289329e+00 3.605689575628191e+00 4.705511307108671e+00 9.204272887399851e+03 + 100760 1.019310288572452e+00 -5.981817723218516e+00 -5.998984582013918e+00 3.783560591378623e+00 4.684985831612606e+00 9.213921836147894e+03 + 100780 9.631077538416098e-01 -5.927197838046984e+00 -5.992615981466082e+00 4.047839303520298e+00 4.672198200582866e+00 9.194368661634262e+03 + 100800 9.857933378945777e-01 -5.991397319528757e+00 -5.973398745472402e+00 3.730535461793361e+00 4.833886059295287e+00 9.135549284454331e+03 + 100820 1.036655997236422e+00 -6.100653719614871e+00 -5.985275835310269e+00 3.190540234238702e+00 4.853057900585622e+00 9.171916299375427e+03 + 100840 9.750349435615300e-01 -6.047714877556496e+00 -6.039618699574707e+00 3.382906902951635e+00 4.429396409802560e+00 9.339093552358841e+03 + 100860 8.839410117889959e-01 -5.949838549771998e+00 -6.048137019762769e+00 3.921831303387532e+00 4.357386277061457e+00 9.365427602448244e+03 + 100880 9.937362187952904e-01 -6.142192353142942e+00 -5.971703613445995e+00 2.933154025055857e+00 4.912126751442930e+00 9.130407200453566e+03 + 100900 9.226994266063544e-01 -6.056721915512626e+00 -5.974467643858817e+00 3.373274291431223e+00 4.845591048074799e+00 9.138843800849829e+03 + 100920 9.093961564665842e-01 -6.046309015530457e+00 -5.953849754721837e+00 3.482541244636556e+00 5.013456628224022e+00 9.075902538380918e+03 + 100940 9.572969621982892e-01 -6.116066491803966e+00 -5.981968076353875e+00 3.043971463168673e+00 4.813985316345826e+00 9.161802198627049e+03 + 100960 9.353459686906812e-01 -6.076186430988813e+00 -6.011161264279182e+00 3.264534682702675e+00 4.637919252561407e+00 9.251362290671912e+03 + 100980 8.945625098448653e-01 -6.002891590562407e+00 -6.040151393749893e+00 3.672352833672827e+00 4.458401277834374e+00 9.340720771391449e+03 + 101000 1.007097240898692e+00 -6.152357210632755e+00 -6.012726023836732e+00 2.865806356562070e+00 4.667590239001153e+00 9.256180843405014e+03 + 101020 9.682424783515066e-01 -6.077427670344536e+00 -6.018653996995497e+00 3.287808420723439e+00 4.625295948290173e+00 9.274421727432837e+03 + 101040 9.109863786029121e-01 -5.975653725391035e+00 -5.999773142860222e+00 3.832656028165771e+00 4.694158600589907e+00 9.216328671461768e+03 + 101060 9.899715085524814e-01 -6.074204104603679e+00 -5.914470629549521e+00 3.326602188468748e+00 5.243816520905099e+00 8.956316983048988e+03 + 101080 9.578817069469188e-01 -6.006899361952392e+00 -5.952292892643311e+00 3.638223517738996e+00 4.951782314835554e+00 9.071157296019177e+03 + 101100 9.816775007827090e-01 -6.023616786181672e+00 -5.936282999614134e+00 3.596558663148980e+00 5.098042780479576e+00 9.022465328503416e+03 + 101120 1.001682557954440e+00 -6.037188853853555e+00 -5.948704492932523e+00 3.549611297527648e+00 5.057702190846816e+00 9.060231266656479e+03 + 101140 1.020975968148115e+00 -6.052483583097100e+00 -5.982212052644795e+00 3.392462880628071e+00 4.795972882969400e+00 9.162522168841808e+03 + 101160 1.036021145125109e+00 -6.065440190988513e+00 -5.967099598892997e+00 3.356176021890783e+00 4.920862919860683e+00 9.116326563810067e+03 + 101180 9.843811456170581e-01 -5.980425150559148e+00 -6.002946509380022e+00 3.762970013326112e+00 4.633648885807637e+00 9.226083492841661e+03 + 101200 1.029258256681424e+00 -6.039303126750229e+00 -5.972034157629869e+00 3.526360417488218e+00 4.912629248016654e+00 9.131398619461372e+03 + 101220 9.774984046485601e-01 -5.955089344204183e+00 -6.045448527475577e+00 3.882181905740665e+00 4.363325492357903e+00 9.357097848228639e+03 + 101240 1.038793997328380e+00 -6.041919734214170e+00 -5.999217687659444e+00 3.489469498378042e+00 4.734671257815627e+00 9.214645990126655e+03 + 101260 1.007121655932749e+00 -5.990703629041919e+00 -6.001748647182947e+00 3.744801907686079e+00 4.681379704309261e+00 9.222398329655942e+03 + 101280 9.891871087673209e-01 -5.961471812782212e+00 -6.004799128948194e+00 3.909244774832827e+00 4.660452620527250e+00 9.231784050477716e+03 + 101300 9.883338423665716e-01 -5.956024934790515e+00 -6.033916880429415e+00 3.884018820873763e+00 4.436751215275569e+00 9.321477534182899e+03 + 101320 9.659041863583564e-01 -5.923058214239525e+00 -6.048243109143741e+00 4.105724543028662e+00 4.386893504188776e+00 9.365734108144170e+03 + 101340 1.029394385414468e+00 -6.017859229235836e+00 -6.011421091882060e+00 3.590142313315520e+00 4.627111094299442e+00 9.252117930160901e+03 + 101360 1.028960242331709e+00 -6.019277947742731e+00 -5.974780977654635e+00 3.587697631218004e+00 4.843206119347720e+00 9.139787842762191e+03 + 101380 9.366773310655057e-01 -5.884536170075807e+00 -6.007117824025785e+00 4.337566156951249e+00 4.633683330520838e+00 9.238902274039394e+03 + 101400 1.057640004402490e+00 -6.067140100820897e+00 -5.997592968108460e+00 3.328631095328262e+00 4.727981493747075e+00 9.209667606592535e+03 + 101420 1.013317151952374e+00 -6.008842044897172e+00 -6.013934024710197e+00 3.677700148198430e+00 4.648461212130706e+00 9.259877071005771e+03 + 101440 9.914279234521434e-01 -5.988450627275144e+00 -5.995839084296926e+00 3.735315486652009e+00 4.692889823072907e+00 9.204262401129097e+03 + 101460 9.604415831123704e-01 -5.956414237933885e+00 -5.981959153946685e+00 3.951436075798327e+00 4.804753214989846e+00 9.161735523205531e+03 + 101480 9.826549488757179e-01 -6.006111446344230e+00 -5.986821967309617e+00 3.686041491640268e+00 4.796804665294244e+00 9.176625794224279e+03 + 101500 9.185605066259660e-01 -5.929891768503246e+00 -6.015573726971649e+00 4.051194913295744e+00 4.559195848529958e+00 9.264917275112177e+03 + 101520 1.007474660754397e+00 -6.082216961590505e+00 -5.968559742223727e+00 3.269491393831699e+00 4.922128735833590e+00 9.120783914220039e+03 + 101540 9.739264263153941e-01 -6.053071761563012e+00 -5.998876716461096e+00 3.369984525086207e+00 4.681180860717532e+00 9.213588547091762e+03 + 101560 9.739561689759898e-01 -6.071857068057283e+00 -5.957182262464443e+00 3.329813896350699e+00 4.988294375933596e+00 9.086044997147723e+03 + 101580 9.082922123164494e-01 -5.988186510096731e+00 -5.975300973175617e+00 3.808612947054959e+00 4.882603694086386e+00 9.141375894465195e+03 + 101600 1.008716079166220e+00 -6.147424834500163e+00 -5.961916549689809e+00 2.918363597304027e+00 4.983580875999381e+00 9.100510643689204e+03 + 101620 9.027510530867555e-01 -5.995214330999248e+00 -6.001572382789266e+00 3.721053530977616e+00 4.684544613694005e+00 9.221867232898334e+03 + 101640 8.990105207723826e-01 -5.988797140061149e+00 -6.001308770140353e+00 3.761231773630077e+00 4.689388057546790e+00 9.221033933816976e+03 + 101660 9.837287594899669e-01 -6.106075708217997e+00 -5.942320551825516e+00 3.140328864400252e+00 5.080636313434434e+00 9.040829735355292e+03 + 101680 9.839964472507730e-01 -6.088501002137917e+00 -5.978564562061680e+00 3.257934814138749e+00 4.889206865665622e+00 9.151346079718078e+03 + 101700 8.998725954594972e-01 -5.937203787927618e+00 -5.991430673143959e+00 4.069256987677687e+00 4.757877821182096e+00 9.190734870959377e+03 + 101720 9.584507620791305e-01 -5.990080991235868e+00 -5.954570580544472e+00 3.776006365622526e+00 4.979912639030818e+00 9.078117233613768e+03 + 101740 1.074195628820944e+00 -6.118345332345856e+00 -5.996834634356460e+00 3.078714597090752e+00 4.776447828665612e+00 9.207346875714929e+03 + 101760 9.975630632982665e-01 -5.964452416696236e+00 -6.040247372924095e+00 3.890156926147666e+00 4.454930558255731e+00 9.341017239616556e+03 + 101780 1.030779053460655e+00 -5.983791771601370e+00 -5.986858405210491e+00 3.768457490131156e+00 4.750848405387567e+00 9.176747171420024e+03 + 101800 9.499203968184334e-01 -5.841046272572973e+00 -5.985796161677404e+00 4.538395155571345e+00 4.707218892360758e+00 9.173453767339599e+03 + 101820 1.022631625010143e+00 -5.930656606035607e+00 -5.956416697547983e+00 4.062287453239673e+00 4.914369021414336e+00 9.083713340291331e+03 + 101840 1.016083768945952e+00 -5.906994849259053e+00 -5.981610031344508e+00 4.164973608576418e+00 4.736521686379625e+00 9.160673332576644e+03 + 101860 1.006727395718670e+00 -5.883027716143106e+00 -6.004768953988706e+00 4.296854180447539e+00 4.597797153342432e+00 9.231657783925808e+03 + 101880 1.030957003240001e+00 -5.913847051863245e+00 -5.994618573319919e+00 4.138600944540732e+00 4.674798368983963e+00 9.200531139687391e+03 + 101900 1.032740515454383e+00 -5.918454485631105e+00 -6.001661671066220e+00 4.120488024336893e+00 4.642699489298129e+00 9.222150836129229e+03 + 101920 1.070990550168926e+00 -5.983130721955577e+00 -5.968813583460571e+00 3.850182094833615e+00 4.932393319641958e+00 9.121539066131550e+03 + 101940 1.082146564324805e+00 -6.010317052770758e+00 -5.995130148973187e+00 3.608595300407372e+00 4.695800852178793e+00 9.202091897591106e+03 + 101960 1.062019055313294e+00 -5.996622225244831e+00 -5.991270737274126e+00 3.672174562862318e+00 4.702903634930191e+00 9.190264297615813e+03 + 101980 1.037675104204773e+00 -5.980894194486095e+00 -5.943421403371779e+00 3.827790640461529e+00 5.042965205935616e+00 9.044171900144223e+03 + 102000 9.290465237472584e-01 -5.840053512714679e+00 -6.006616359799027e+00 4.551564860316942e+00 4.595135216841331e+00 9.237320467764912e+03 + 102020 1.061753800471555e+00 -6.055055527977044e+00 -5.971465632145693e+00 3.385717672055663e+00 4.865703789413850e+00 9.129660443336941e+03 + 102040 1.064687641763740e+00 -6.079261024351871e+00 -6.009796142891894e+00 3.248945291623373e+00 4.647823390622229e+00 9.247159486149183e+03 + 102060 1.003203182573880e+00 -6.008926689862084e+00 -6.014648360948494e+00 3.649211903838844e+00 4.616357183034942e+00 9.262040791635132e+03 + 102080 9.996257237518327e-01 -6.023527863795289e+00 -5.964532853051525e+00 3.627654313613738e+00 4.966412794752839e+00 9.108489154505236e+03 + 102100 9.798604551400375e-01 -6.011074436363378e+00 -5.989878483371088e+00 3.640379767508316e+00 4.762090209653170e+00 9.185996408221976e+03 + 102120 9.522672018460635e-01 -5.981360165408058e+00 -5.986843593093832e+00 3.791993250987612e+00 4.760506560658209e+00 9.176696139788115e+03 + 102140 9.717607147436272e-01 -6.016337879934411e+00 -5.972566483849876e+00 3.624907765051212e+00 4.876249894970261e+00 9.133024192733050e+03 + 102160 1.009680504449233e+00 -6.074812756287566e+00 -5.993002506875195e+00 3.252656963659511e+00 4.722424075880525e+00 9.195572883242698e+03 + 102180 1.002481113852266e+00 -6.065281686392694e+00 -5.954228754074725e+00 3.417386625643457e+00 5.055069748398971e+00 9.077057563568209e+03 + 102200 9.215813065338511e-01 -5.943575197912219e+00 -5.956254010024201e+00 4.029109106870445e+00 4.956305405683612e+00 9.083209035456430e+03 + 102220 9.771102168096590e-01 -6.020247367307710e+00 -5.958946963352268e+00 3.629440653641275e+00 4.981437059360276e+00 9.091424298496071e+03 + 102240 1.020747119838501e+00 -6.076541652954631e+00 -5.939134455750528e+00 3.307561947812924e+00 5.096575337853927e+00 9.031131220798519e+03 + 102260 9.846756968227426e-01 -6.013323537235996e+00 -5.969373371562321e+00 3.637400420244760e+00 4.889769072809155e+00 9.123256252973501e+03 + 102280 9.990269408611224e-01 -6.026534326048061e+00 -5.972729408143976e+00 3.565078151615403e+00 4.874034316504799e+00 9.133518342576930e+03 + 102300 1.036570020436729e+00 -6.073955133974354e+00 -6.012501877448903e+00 3.306316572650746e+00 4.659190681480597e+00 9.255454872840704e+03 + 102320 9.839686789133919e-01 -5.989027157010910e+00 -5.992793681877092e+00 3.742050558858453e+00 4.720422590208995e+00 9.194930273272295e+03 + 102340 9.680634481434230e-01 -5.956919895848667e+00 -6.004657540120808e+00 3.932279630783515e+00 4.658162689996304e+00 9.231358099451512e+03 + 102360 1.088366658990135e+00 -6.124841926596485e+00 -5.998506216919423e+00 3.053616244581426e+00 4.779055439935005e+00 9.212481357386307e+03 + 102380 1.032908287042935e+00 -6.035966268490765e+00 -6.045412888173992e+00 3.454515144187926e+00 4.400271192107166e+00 9.356978666131694e+03 + 102400 9.357164865696359e-01 -5.889202293764789e+00 -6.029845515814766e+00 4.300788055600375e+00 4.493192910121133e+00 9.308872703824496e+03 + 102420 1.023028764472847e+00 -6.014704542647066e+00 -5.956662339171401e+00 3.634723300352436e+00 4.968010614711664e+00 9.084473324300878e+03 + 102440 1.003945452372866e+00 -5.980831755584470e+00 -5.967796581104124e+00 3.856295710452611e+00 4.931145699505488e+00 9.118419724486017e+03 + 102460 1.024351873119819e+00 -6.005668068815700e+00 -5.934463089363012e+00 3.677315445322082e+00 5.086185456274375e+00 9.016924560118925e+03 + 102480 9.140269968461661e-01 -5.833281277050589e+00 -6.004867220162892e+00 4.667580899795203e+00 4.682307861605478e+00 9.231918801334199e+03 + 102500 1.054633486766537e+00 -6.028348643083262e+00 -5.909972155804767e+00 3.613602460233535e+00 5.293338568888855e+00 8.942658855595282e+03 + 102520 9.997339246463391e-01 -5.929253337825822e+00 -6.018585371036846e+00 4.095603998962992e+00 4.582645640177833e+00 9.274166998420587e+03 + 102540 1.097775429290218e+00 -6.055046339492148e+00 -5.960019441773714e+00 3.403347413231200e+00 4.949006565295349e+00 9.094742168597224e+03 + 102560 1.112741281684360e+00 -6.057800960619240e+00 -5.996198015093923e+00 3.393864035957239e+00 4.747597682188616e+00 9.205398330823287e+03 + 102580 1.061709555505745e+00 -5.965108843228836e+00 -6.036267839658858e+00 3.883302704302224e+00 4.474696734981928e+00 9.328721849516653e+03 + 102600 1.098873507068703e+00 -6.005556161104908e+00 -6.036726730587064e+00 3.626812214895079e+00 4.447825981298500e+00 9.330151093638462e+03 + 102620 9.920530420448126e-01 -5.839126066855249e+00 -6.047485832598425e+00 4.558412653959206e+00 4.361978635492346e+00 9.363401680979960e+03 + 102640 9.920273238403482e-01 -5.838073771808532e+00 -6.047597583023024e+00 4.556190885904817e+00 4.353072738206211e+00 9.363708618374740e+03 + 102660 1.018103693611234e+00 -5.880475544292482e+00 -6.004506602709692e+00 4.396015912981693e+00 4.683810381805816e+00 9.230899753263024e+03 + 102680 1.071902468627157e+00 -5.972062061971813e+00 -6.009699895224006e+00 3.830912895717311e+00 4.614790632747346e+00 9.246854180699143e+03 + 102700 1.026794913080226e+00 -5.927015568132211e+00 -6.017950692152267e+00 4.046206279096079e+00 4.524042724807956e+00 9.272227021387875e+03 + 102720 1.011763397166067e+00 -5.934299284154073e+00 -5.998767614455263e+00 4.036934364990429e+00 4.666747235959129e+00 9.213264734411996e+03 + 102740 9.824350501614538e-01 -5.926702612441244e+00 -6.026873056087711e+00 4.110714196794412e+00 4.535520008050344e+00 9.299738722098053e+03 + 102760 9.992873195294190e-01 -5.992536483632530e+00 -6.012667477233349e+00 3.764080629475511e+00 4.648485348958416e+00 9.255982399960631e+03 + 102780 9.819857026703240e-01 -6.004942688058772e+00 -5.985806777702638e+00 3.610113150657936e+00 4.719994509195416e+00 9.173541408721398e+03 + 102800 9.610345361265519e-01 -6.004742328254198e+00 -5.991380376126287e+00 3.674106363585933e+00 4.750832760459810e+00 9.190615366420170e+03 + 102820 9.492874336404654e-01 -6.011611293058272e+00 -5.996050062279035e+00 3.614022299033722e+00 4.703377294260784e+00 9.204934649494277e+03 + 102840 1.002617810658044e+00 -6.106949753631569e+00 -5.974084159706696e+00 3.069057364849980e+00 4.831992166050810e+00 9.137647777169968e+03 + 102860 9.355561186247258e-01 -6.016331266662639e+00 -5.961420089293017e+00 3.633734624933144e+00 4.949043102866746e+00 9.098988838351468e+03 + 102880 1.019758508338917e+00 -6.144669201944036e+00 -5.953745452553227e+00 2.906034753782976e+00 5.002348468139740e+00 9.075611174980882e+03 + 102900 9.108753363314325e-01 -5.981387965494305e+00 -5.942423633110744e+00 3.831800104745987e+00 5.055539331003342e+00 9.041148199279072e+03 + 102920 9.663728422997060e-01 -6.056113851731299e+00 -5.969149638461072e+00 3.405498377183684e+00 4.904860347449833e+00 9.122575083509802e+03 + 102940 9.906237393309343e-01 -6.078362554061020e+00 -5.952531407531639e+00 3.284831254999765e+00 5.007373170678461e+00 9.071895677210907e+03 + 102960 9.945157925458596e-01 -6.065990029626469e+00 -5.981725649415072e+00 3.374635102858494e+00 4.858494213903035e+00 9.161030999877923e+03 + 102980 1.026295831117905e+00 -6.090697291440361e+00 -5.956490743246134e+00 3.241204810944265e+00 5.011839579071735e+00 9.083973775283817e+03 + 103000 9.725499152414500e-01 -5.984571290341727e+00 -6.000072045497295e+00 3.798827103030711e+00 4.709819368193330e+00 9.217256920221454e+03 + 103020 9.719212474724186e-01 -5.955362041961366e+00 -6.033178792224249e+00 3.930545409531466e+00 4.483709587418804e+00 9.319191346672596e+03 + 103040 9.823254318652012e-01 -5.943111402582956e+00 -6.042397053406411e+00 3.991347660433152e+00 4.421234089000065e+00 9.347670937405186e+03 + 103060 1.028346330348965e+00 -5.986690504644678e+00 -6.021985133002151e+00 3.791562792748299e+00 4.588895574893602e+00 9.284664449102378e+03 + 103080 1.023895676385180e+00 -5.960652852573555e+00 -6.002837967186784e+00 3.892799824791755e+00 4.650566368557206e+00 9.225748041606814e+03 + 103100 1.032950664640704e+00 -5.957487946195279e+00 -6.017415591859657e+00 3.872238852464943e+00 4.528125037286890e+00 9.270588533747103e+03 + 103120 1.057721738926984e+00 -5.983731068070418e+00 -6.030700483420237e+00 3.783781742718155e+00 4.514076091285967e+00 9.311525636412061e+03 + 103140 1.028835362629499e+00 -5.936049527757817e+00 -6.008334418033138e+00 4.030634950178421e+00 4.615563924166904e+00 9.242634405186103e+03 + 103160 1.015900552152952e+00 -5.917170938706128e+00 -6.016197680186153e+00 4.105376437943431e+00 4.536749564026407e+00 9.266832514596956e+03 + 103180 9.926504085547385e-01 -5.886041832053923e+00 -6.022261712095927e+00 4.287804280238852e+00 4.505608649079358e+00 9.285534431033706e+03 + 103200 1.008630634025778e+00 -5.918023717264153e+00 -6.026750631333611e+00 4.106793770366767e+00 4.482467004344366e+00 9.299346909653610e+03 + 103220 1.066139281982735e+00 -6.011450254420664e+00 -5.977744912898782e+00 3.630112043417558e+00 4.823653330320951e+00 9.148851754807185e+03 + 103240 9.475554945175878e-01 -5.843118910069766e+00 -6.043158200007391e+00 4.495338456896492e+00 4.346681898094578e+00 9.349937008769350e+03 + 103260 1.014397881365901e+00 -5.947075958592428e+00 -5.990174001472512e+00 3.965204020399889e+00 4.717728388781864e+00 9.186878307713774e+03 + 103280 1.070296927975811e+00 -6.035518493287461e+00 -6.004142027099994e+00 3.515923163619697e+00 4.696091687960584e+00 9.229775031015499e+03 + 103300 1.001717353482652e+00 -5.943041829863142e+00 -6.049862702278404e+00 3.923702867323523e+00 4.310320887438506e+00 9.370763899424686e+03 + 103320 1.098273865990784e+00 -6.098777517768338e+00 -5.986135696074906e+00 3.141952993217807e+00 4.788759764647062e+00 9.174547356471514e+03 + 103340 9.447081691414296e-01 -5.882965400830144e+00 -5.975136925306215e+00 4.397336454963920e+00 4.868073297925008e+00 9.140862902680097e+03 + 103360 1.047841255098890e+00 -6.046568138596911e+00 -5.947440092976795e+00 3.462287352244073e+00 5.031495930210267e+00 9.056396107553719e+03 + 103380 1.023279324565084e+00 -6.020213145244178e+00 -5.934366911459962e+00 3.618633105185036e+00 5.111575464235741e+00 9.016659690898405e+03 + 103400 1.033517203842246e+00 -6.045646142398348e+00 -5.960558960312877e+00 3.464099683471211e+00 4.952683450204860e+00 9.096370496193813e+03 + 103420 9.864800333888757e-01 -5.987108977497422e+00 -6.008095184726175e+00 3.723205348878352e+00 4.602699299365778e+00 9.241900035838566e+03 + 103440 1.005477626004460e+00 -6.025827944013725e+00 -5.936774306163747e+00 3.593034989007278e+00 5.104394758547765e+00 9.023986357976610e+03 + 103460 9.700948607261248e-01 -5.980931548076952e+00 -6.009309666127127e+00 3.754392132193483e+00 4.591440586849806e+00 9.245632445383948e+03 + 103480 9.390563229819970e-01 -5.942461304128074e+00 -5.998000560522383e+00 3.971638764560991e+00 4.652723759672718e+00 9.210909704898704e+03 + 103500 1.013645385668224e+00 -6.060594408548798e+00 -5.976823242092190e+00 3.381153166630103e+00 4.862180167970058e+00 9.146041684533249e+03 + 103520 9.622424202860576e-01 -5.988684777611582e+00 -5.996734085477766e+00 3.750470848226372e+00 4.704250476832377e+00 9.207037231916005e+03 + 103540 9.693710217533541e-01 -6.002952804425790e+00 -6.023650780979890e+00 3.725780156545635e+00 4.606929172170471e+00 9.289788854227263e+03 + 103560 9.862142378748613e-01 -6.030790389171772e+00 -6.037934067100665e+00 3.506099275651178e+00 4.465079171502884e+00 9.333867406358258e+03 + 103580 9.750981345309618e-01 -6.015123344578337e+00 -6.013971334577112e+00 3.614599307248624e+00 4.621214326948630e+00 9.259994408531435e+03 + 103600 9.152849680456570e-01 -5.925379240326100e+00 -6.050650458178660e+00 4.085739528624049e+00 4.366412810056334e+00 9.373212787978413e+03 + 103620 9.633755419430937e-01 -5.997136064695538e+00 -6.006226979673117e+00 3.646732359830492e+00 4.594530919214690e+00 9.236212689404643e+03 + 103640 9.758691552968004e-01 -6.011604520741629e+00 -6.031801865404769e+00 3.570830495480875e+00 4.454854216896138e+00 9.314938601228791e+03 + 103660 9.624439714864539e-01 -5.983379267622171e+00 -6.007822256252192e+00 3.801911042670776e+00 4.661555619416928e+00 9.241075504622131e+03 + 103680 9.636246517979022e-01 -5.974179335409521e+00 -6.008562175633960e+00 3.882749739126072e+00 4.685318149830014e+00 9.243334530132095e+03 + 103700 1.082703717230432e+00 -6.135421518856424e+00 -5.954547093877345e+00 2.993018058568651e+00 5.031626997025326e+00 9.078058459809345e+03 + 103720 9.986899297910585e-01 -5.991822195755709e+00 -6.004331179177130e+00 3.757642283887143e+00 4.685813765322422e+00 9.230357452216220e+03 + 103740 1.041909064262124e+00 -6.034906623045894e+00 -5.987157107300193e+00 3.523395671513477e+00 4.797580780138976e+00 9.177670397223088e+03 + 103760 1.021254534752863e+00 -5.981693531352284e+00 -6.007341864281217e+00 3.754020372675727e+00 4.606743675931103e+00 9.239610973320312e+03 + 103780 1.037759304288606e+00 -5.983002775060128e+00 -6.029859116286691e+00 3.795252080701149e+00 4.526195718382855e+00 9.308939090163671e+03 + 103800 9.920143327540843e-01 -5.897717420232488e+00 -6.042513738984375e+00 4.236674454513137e+00 4.405231585081894e+00 9.348013086083402e+03 + 103820 1.030242372413415e+00 -5.938828834899090e+00 -6.032478920542021e+00 3.998589159147353e+00 4.460835875081733e+00 9.317018424776499e+03 + 103840 1.065639152735993e+00 -5.978327799657965e+00 -6.029824142124843e+00 3.825753320092641e+00 4.530053352614585e+00 9.308829763211987e+03 + 103860 1.065005816092460e+00 -5.971950904828680e+00 -5.997144889356831e+00 3.871706566042491e+00 4.727038808125343e+00 9.208280081579698e+03 + 103880 1.033747478372948e+00 -5.925460133378209e+00 -5.979278398810651e+00 4.113801420433663e+00 4.804768611970920e+00 9.153535157415545e+03 + 103900 1.031937850017791e+00 -5.927566912243503e+00 -5.986257423509677e+00 4.102170966068723e+00 4.765160968051084e+00 9.174876345096254e+03 + 103920 1.028953700003142e+00 -5.931670458948601e+00 -5.994536615399046e+00 4.047164988054305e+00 4.686177789209587e+00 9.200265498185414e+03 + 103940 9.822986061799203e-01 -5.875976325296216e+00 -6.044438232755414e+00 4.372059817196708e+00 4.404725475170063e+00 9.353943972485660e+03 + 103960 1.035013368919372e+00 -5.978680874094852e+00 -5.971532390620062e+00 3.839712239238970e+00 4.880759937575455e+00 9.129851971538166e+03 + 103980 1.000963240260506e+00 -5.960151381703207e+00 -5.991896613358709e+00 3.927845980289018e+00 4.745559947564405e+00 9.192171703084543e+03 + 104000 9.693198711987306e-01 -5.950982262641352e+00 -5.984112209555482e+00 3.954786347698112e+00 4.764549065674465e+00 9.168320658761953e+03 + 104020 9.910175466393640e-01 -6.022406185207772e+00 -5.982658269784457e+00 3.543854783082647e+00 4.772093464413354e+00 9.163904124747945e+03 + 104040 9.321241205351800e-01 -5.972894144082296e+00 -5.998900533178224e+00 3.790865967187886e+00 4.641533256523354e+00 9.213677166199643e+03 + 104060 9.835610255200857e-01 -6.076352638188885e+00 -5.963514737160571e+00 3.249721848383441e+00 4.897654537696774e+00 9.105362065212330e+03 + 104080 9.925166611541496e-01 -6.107614473469750e+00 -5.954581864699094e+00 3.121881070865594e+00 5.000617992146368e+00 9.078151849817394e+03 + 104100 9.655376638433285e-01 -6.079750662511536e+00 -5.954386137839942e+00 3.273301568128511e+00 4.993164068890298e+00 9.077561846506536e+03 + 104120 9.775975905544849e-01 -6.104111539236563e+00 -5.996124499991829e+00 3.094194036918030e+00 4.714272327201609e+00 9.205165471719885e+03 + 104140 9.353675310957967e-01 -6.042014549653300e+00 -5.998522078520279e+00 3.462225770691547e+00 4.711966270375512e+00 9.212507784069674e+03 + 104160 9.397603708757832e-01 -6.044109070382286e+00 -5.974586286802007e+00 3.425715175659484e+00 4.824925757593443e+00 9.139193186313223e+03 + 104180 9.586209805341478e-01 -6.060251136347024e+00 -5.989522995243556e+00 3.352610299709581e+00 4.758742231070160e+00 9.184925412295386e+03 + 104200 9.739897311753875e-01 -6.066040355596651e+00 -6.011849750547012e+00 3.315864667116921e+00 4.627035507280979e+00 9.253476116742144e+03 + 104220 9.807369395464633e-01 -6.056762606875711e+00 -6.021534490084642e+00 3.385007838978316e+00 4.587293137126094e+00 9.283276205606597e+03 + 104240 9.528147464393546e-01 -5.995087068814679e+00 -5.989802205383183e+00 3.720391855401656e+00 4.750738359055280e+00 9.185773172905450e+03 + 104260 9.926872168068060e-01 -6.031462019326611e+00 -5.977620601401347e+00 3.547411542283834e+00 4.856577295943195e+00 9.148478551738992e+03 + 104280 9.502287802096923e-01 -5.945336580724386e+00 -6.020380720619205e+00 3.932970831956793e+00 4.502055767637624e+00 9.279714728057412e+03 + 104300 9.751181068548407e-01 -5.961368585220277e+00 -5.991105909065865e+00 3.919080281764181e+00 4.748323966406820e+00 9.189747617922332e+03 + 104320 9.700454384546505e-01 -5.935057747931977e+00 -6.041112518160244e+00 4.042138667610700e+00 4.433155765037340e+00 9.343661398794542e+03 + 104340 1.003565493837550e+00 -5.971584185300197e+00 -6.012068389937415e+00 3.903561036581533e+00 4.671094468644205e+00 9.254132507489194e+03 + 104360 1.074798503256915e+00 -6.068876104094773e+00 -6.016719673467660e+00 3.322097436165564e+00 4.621587732008004e+00 9.268465952540371e+03 + 104380 9.868414236524773e-01 -5.937339008212841e+00 -6.062303937679824e+00 4.029029408833599e+00 4.311461445573845e+00 9.409306844069464e+03 + 104400 9.701227785632360e-01 -5.913966938762283e+00 -6.051862433404376e+00 4.147025951324292e+00 4.355208681830563e+00 9.376938087555123e+03 + 104420 9.852356516239719e-01 -5.938479950930378e+00 -6.032991740192526e+00 4.032851537148400e+00 4.490150217553029e+00 9.318597267496085e+03 + 104440 1.022252128369149e+00 -5.996899164854052e+00 -5.995451895774616e+00 3.702413021382420e+00 4.710723464400709e+00 9.203079411255898e+03 + 104460 1.029970841244083e+00 -6.012166747149455e+00 -6.019080811819874e+00 3.650401681822279e+00 4.610700052536682e+00 9.275725133893726e+03 + 104480 9.792568353452149e-01 -5.941983240225955e+00 -6.039784583030621e+00 4.043954126050126e+00 4.482363680956849e+00 9.339598107751079e+03 + 104500 1.044383215718332e+00 -6.046719403018159e+00 -6.018773820008676e+00 3.472631048440344e+00 4.633098910645788e+00 9.274767933591618e+03 + 104520 1.021392963953418e+00 -6.021841761341529e+00 -5.994875047574334e+00 3.596567435284445e+00 4.751414478821145e+00 9.201314042456797e+03 + 104540 1.046963928914459e+00 -6.070779587491327e+00 -5.974819993290101e+00 3.313057933597916e+00 4.864072773200562e+00 9.139897198949706e+03 + 104560 9.810945088870343e-01 -5.983760568970198e+00 -5.975577363999019e+00 3.806332712232163e+00 4.853321941523553e+00 9.142211067034239e+03 + 104580 9.616990179464294e-01 -5.965195429351770e+00 -6.006645616170596e+00 3.881843180941408e+00 4.643829793832026e+00 9.237442188400602e+03 + 104600 9.287748760778872e-01 -5.924991392757611e+00 -5.998063643355083e+00 4.178939850842912e+00 4.759347680017994e+00 9.211065207535758e+03 + 104620 9.789373109759779e-01 -6.006535266999374e+00 -6.018429282573143e+00 3.669293089543033e+00 4.600995811525493e+00 9.273725463128090e+03 + 104640 1.010322707866113e+00 -6.058883678364797e+00 -6.019364909226527e+00 3.371556066501091e+00 4.598478954402795e+00 9.276621679061651e+03 + 104660 1.021445768601109e+00 -6.084308979931423e+00 -6.000664628420290e+00 3.190592472257823e+00 4.670891282556314e+00 9.219105555142201e+03 + 104680 1.009091388732120e+00 -6.076980267951046e+00 -5.977936222200965e+00 3.303658535264448e+00 4.872384772977961e+00 9.149438589705616e+03 + 104700 9.499821414513164e-01 -6.000054038113481e+00 -5.950679107842310e+00 3.724302331017220e+00 5.007820821380051e+00 9.066250709186786e+03 + 104720 1.015792497429706e+00 -6.107058968434573e+00 -5.957842087700971e+00 3.090546029598101e+00 4.947372450008109e+00 9.088065485474552e+03 + 104740 9.534742693742431e-01 -6.022535116642287e+00 -5.973343282075408e+00 3.579737042030009e+00 4.862204168524826e+00 9.135361605355185e+03 + 104760 9.403061086538437e-01 -6.007544252203084e+00 -5.949504125120118e+00 3.624511773785113e+00 4.957787165176142e+00 9.062679624505292e+03 + 104780 9.997703511078769e-01 -6.094227485846776e+00 -5.960223082786667e+00 3.191513460777719e+00 4.960987480263219e+00 9.095340590338199e+03 + 104800 9.774692895726741e-01 -6.054946893238378e+00 -5.968868436637535e+00 3.367923564462575e+00 4.862199382862723e+00 9.121722879751947e+03 + 104820 9.438642503826055e-01 -5.992456948273869e+00 -5.980839395923763e+00 3.722046664468513e+00 4.788756447873242e+00 9.158320689525617e+03 + 104840 9.748431818374612e-01 -6.018767334445926e+00 -5.987373945687875e+00 3.672994640577422e+00 4.853260336937362e+00 9.178311974642762e+03 + 104860 1.044363293265304e+00 -6.093615132708488e+00 -5.997202303523409e+00 3.227520393225000e+00 4.781137778242824e+00 9.208463570763561e+03 + 104880 9.929823325170609e-01 -5.987277011486412e+00 -6.024831198219063e+00 3.745810642640010e+00 4.530168690929514e+00 9.293413977018743e+03 + 104900 9.797354792566706e-01 -5.938803602371681e+00 -6.006301036939892e+00 3.982438370393865e+00 4.594857655908957e+00 9.236402750864243e+03 + 104920 1.033044261832993e+00 -5.987904822764600e+00 -6.013294064004409e+00 3.736149124686946e+00 4.590360172515579e+00 9.257899278789913e+03 + 104940 1.044012340447547e+00 -5.976772735838678e+00 -6.027686498918094e+00 3.797092935666332e+00 4.504738229184949e+00 9.302204756283736e+03 + 104960 1.063859420530066e+00 -5.985261836863711e+00 -6.005240846665505e+00 3.771004015686898e+00 4.656281449663227e+00 9.233161781239660e+03 + 104980 1.011704070335151e+00 -5.893897281527964e+00 -6.018614186156508e+00 4.273350479209363e+00 4.557206712953641e+00 9.274267327624992e+03 + 105000 1.048864245622462e+00 -5.938589756453023e+00 -5.983078022421250e+00 3.984686454081249e+00 4.729227946354786e+00 9.165156372352545e+03 + 105020 1.110834173150663e+00 -6.025349093990920e+00 -5.964059634812256e+00 3.537108458262051e+00 4.889042017379098e+00 9.107016357845210e+03 + 105040 1.013165563575753e+00 -5.882555774735239e+00 -5.951256662829303e+00 4.362472737710746e+00 4.967981606846559e+00 9.067999090968746e+03 + 105060 9.836340351433762e-01 -5.842393340791964e+00 -6.027493250587754e+00 4.517207561159660e+00 4.454335234993766e+00 9.301625449274330e+03 + 105080 1.042859748114607e+00 -5.940055705352175e+00 -6.014840545785788e+00 3.988919490678016e+00 4.559493363991554e+00 9.262667100236680e+03 + 105100 1.019831075485643e+00 -5.924553203105154e+00 -6.028440196383031e+00 4.086626658500611e+00 4.490091466638789e+00 9.304540793458014e+03 + 105120 1.059670839523809e+00 -6.013465568542323e+00 -6.005086981298824e+00 3.606968843586419e+00 4.655079988120772e+00 9.232657438489121e+03 + 105140 1.065108617023550e+00 -6.061205855048824e+00 -5.930432326378098e+00 3.455162657974877e+00 5.206084496740347e+00 9.004710771129410e+03 + 105160 9.298066427172599e-01 -5.907562714077069e+00 -5.982992402961173e+00 4.206039306538768e+00 4.772910360259615e+00 9.164857494382257e+03 + 105180 1.019973943121698e+00 -6.085539896170922e+00 -5.943616287648943e+00 3.220874957796443e+00 5.035822280537086e+00 9.044754963536017e+03 + 105200 9.297530551113830e-01 -5.986133310350633e+00 -6.010556010431372e+00 3.752870939814227e+00 4.612632016550003e+00 9.249459464964324e+03 + 105220 9.074132389185702e-01 -5.978322811136857e+00 -5.995599622369889e+00 3.848876093816709e+00 4.749669970138740e+00 9.203526077648481e+03 + 105240 9.799376879572891e-01 -6.100206338110950e+00 -6.010841983405768e+00 3.145417676357328e+00 4.658561630163682e+00 9.250365155175568e+03 + 105260 9.669544943933586e-01 -6.087662715416231e+00 -6.006798931534360e+00 3.234070373398036e+00 4.698402734077852e+00 9.237940421005482e+03 + 105280 9.192073204966349e-01 -6.017596084653801e+00 -6.007220122773769e+00 3.559977937171517e+00 4.619558315961577e+00 9.239236640171917e+03 + 105300 9.742851275868439e-01 -6.095962759954296e+00 -5.980056796140831e+00 3.156571954011118e+00 4.822121934617964e+00 9.155937182330983e+03 + 105320 9.680140484531573e-01 -6.079502827669478e+00 -5.972484914720174e+00 3.281882478721355e+00 4.896395895844764e+00 9.132778722283108e+03 + 105340 9.474206314584649e-01 -6.036293239285905e+00 -5.979657348196294e+00 3.532546634205842e+00 4.857758685218210e+00 9.154720149597306e+03 + 105360 1.010364918527897e+00 -6.113401981456605e+00 -5.966293677400221e+00 3.069155959515674e+00 4.913874606343917e+00 9.113880369302085e+03 + 105380 1.005409619074669e+00 -6.089605375690125e+00 -5.965232546426056e+00 3.301365029800016e+00 5.015533062067428e+00 9.110615594720002e+03 + 105400 9.798278291006770e-01 -6.033734164737925e+00 -5.991441703664841e+00 3.489910756798639e+00 4.732760613017486e+00 9.190805774669545e+03 + 105420 9.617753053257266e-01 -5.989303438813139e+00 -6.031948175571883e+00 3.695710007943805e+00 4.450837330223414e+00 9.315381362144270e+03 + 105440 1.015367725963964e+00 -6.051910221943773e+00 -5.983574025375860e+00 3.400383910891057e+00 4.792780926576251e+00 9.166686221829063e+03 + 105460 1.013602011966773e+00 -6.031717760017447e+00 -5.972681321920987e+00 3.523906139509683e+00 4.862902502918824e+00 9.133373233477387e+03 + 105480 9.520242536433576e-01 -5.923288954276589e+00 -6.073950220808323e+00 4.105446290799744e+00 4.240325983618884e+00 9.445419073435698e+03 + 105500 1.011368636392722e+00 -5.998732276607039e+00 -5.995376515138705e+00 3.698418257216666e+00 4.717687558870249e+00 9.202874897463817e+03 + 105520 1.032363337633741e+00 -6.020459914809817e+00 -5.986850092740839e+00 3.644559512514301e+00 4.837552311937525e+00 9.176729921849239e+03 + 105540 9.736436639915813e-01 -5.926356906650140e+00 -6.026858902453435e+00 4.070250787810322e+00 4.493152775274218e+00 9.299700056959968e+03 + 105560 1.019057514650747e+00 -5.989236094512425e+00 -5.971799251368347e+00 3.725923552176927e+00 4.826048603852979e+00 9.130686160594167e+03 + 105580 9.528947996771479e-01 -5.887293628413572e+00 -6.031752914281413e+00 4.261668706357848e+00 4.432161131902460e+00 9.314752035596786e+03 + 105600 1.041573286604988e+00 -6.015013161384133e+00 -6.005545817022140e+00 3.586824915786775e+00 4.641187872180148e+00 9.234077158035436e+03 + 105620 1.004243397638627e+00 -5.960076232231530e+00 -5.967285994915208e+00 3.947560306160929e+00 4.906160733124082e+00 9.116868366802941e+03 + 105640 1.022506427492142e+00 -5.987636310353323e+00 -5.959792503187007e+00 3.760760680751677e+00 4.920644130315898e+00 9.094009340848997e+03 + 105660 1.029789620121534e+00 -5.998764874033219e+00 -5.970988418962532e+00 3.736787993959781e+00 4.896284697368198e+00 9.128181052485172e+03 + 105680 1.053961725100563e+00 -6.036332877933464e+00 -5.984582756555044e+00 3.504980285539741e+00 4.802137490800030e+00 9.169769832299187e+03 + 105700 1.040685560194637e+00 -6.020739159812908e+00 -6.020400030508256e+00 3.528986061426465e+00 4.530933394373866e+00 9.279772174723888e+03 + 105720 1.022784278373889e+00 -5.999159861589860e+00 -6.032170578400263e+00 3.654431440642054e+00 4.464878796324804e+00 9.316058601885063e+03 + 105740 1.028099779390137e+00 -6.013069780452668e+00 -5.978046398999295e+00 3.643356242157934e+00 4.844465918313966e+00 9.149787863657071e+03 + 105760 9.930703030581690e-01 -5.966160360102219e+00 -5.975788395725336e+00 3.914741022184485e+00 4.859455351702849e+00 9.142876714259646e+03 + 105780 1.053364405619904e+00 -6.058721948758882e+00 -6.010105177678916e+00 3.420135336653936e+00 4.699300359616115e+00 9.248091705910028e+03 + 105800 1.031157656200048e+00 -6.030254643660642e+00 -5.992269885084324e+00 3.577761107061305e+00 4.795875468928918e+00 9.193345141334792e+03 + 105820 1.025626297817375e+00 -6.027665537154200e+00 -5.946009790443187e+00 3.556289426650671e+00 5.025169360451276e+00 9.052022467228582e+03 + 105840 1.023304092883361e+00 -6.025188389317370e+00 -5.962708671899954e+00 3.582976281055838e+00 4.941744487171666e+00 9.102913035612937e+03 + 105860 9.574569616592294e-01 -5.927546851528268e+00 -6.031751263841569e+00 4.115183228322439e+00 4.516825367238773e+00 9.314769091639721e+03 + 105880 1.081952132407776e+00 -6.113561619425293e+00 -5.966749946150235e+00 3.089884511913907e+00 4.932899858892307e+00 9.115281244404265e+03 + 105900 9.768611111532405e-01 -5.959228170911796e+00 -6.012257628730955e+00 3.886217000957104e+00 4.581713647877415e+00 9.254724219544254e+03 + 105920 9.618311540205203e-01 -5.938525812157089e+00 -6.034686816553030e+00 4.026143333926502e+00 4.473971965817667e+00 9.323841805252732e+03 + 105940 1.005256509796268e+00 -6.004771366631494e+00 -6.019425523985012e+00 3.656821798436134e+00 4.572675359188713e+00 9.276784511354979e+03 + 105960 1.051081755164710e+00 -6.075565015369823e+00 -5.953190345340344e+00 3.290048222010037e+00 4.992742514738286e+00 9.073897104723092e+03 + 105980 9.814223398954012e-01 -5.973715040369110e+00 -5.973577324931123e+00 3.811988676928520e+00 4.812779460284839e+00 9.136090233345500e+03 + 106000 9.517403558871805e-01 -5.930215202094815e+00 -6.012074225185203e+00 4.072174067246714e+00 4.602126889018824e+00 9.254147385920167e+03 + 106020 1.036470204866981e+00 -6.055888512823547e+00 -5.953032807909951e+00 3.420022608240283e+00 5.010635982723047e+00 9.073421533368173e+03 + 106040 9.876027144470996e-01 -5.982553759755107e+00 -5.978835585089493e+00 3.797775195741898e+00 4.819125530057525e+00 9.152177449540031e+03 + 106060 1.006627757877112e+00 -6.007602740015203e+00 -6.053254756479192e+00 3.598247305163668e+00 4.336106362000728e+00 9.381197354408683e+03 + 106080 1.014595036208636e+00 -6.015969021415833e+00 -5.968177289904363e+00 3.668455483743803e+00 4.942883001829212e+00 9.119620843721950e+03 + 106100 9.579312377507713e-01 -5.929914078467802e+00 -6.002342488423781e+00 4.023850821317997e+00 4.607955683090549e+00 9.224219886672861e+03 + 106120 9.747630544213577e-01 -5.950493512794709e+00 -5.973425996623621e+00 3.984388825519509e+00 4.852706954583492e+00 9.135648659997283e+03 + 106140 1.034836408158587e+00 -6.028923969260328e+00 -6.018579496811221e+00 3.532515787698647e+00 4.591915349303362e+00 9.274169441533359e+03 + 106160 1.056747373239916e+00 -6.049497760317792e+00 -6.008918461179066e+00 3.416071584252408e+00 4.649084199533220e+00 9.244455084515588e+03 + 106180 9.886513653691075e-01 -5.937770140760671e+00 -6.038664530076505e+00 4.007068974819852e+00 4.427717778012047e+00 9.336132458129940e+03 + 106200 9.805340525909000e-01 -5.914543900655577e+00 -6.009989267012552e+00 4.162686454606213e+00 4.614624390861758e+00 9.247739323264321e+03 + 106220 1.000973508509644e+00 -5.932482165695836e+00 -6.011485134197835e+00 4.061947033389238e+00 4.608299762580892e+00 9.252350543164030e+03 + 106240 1.099477804216275e+00 -6.068344720563396e+00 -5.991392340996491e+00 3.347705589596008e+00 4.789578061411429e+00 9.190653140477709e+03 + 106260 9.817309425238466e-01 -5.886709534572112e+00 -6.010764956554358e+00 4.407729832308563e+00 4.695384401771996e+00 9.250081283683603e+03 + 106280 1.080399480922048e+00 -6.028375517662067e+00 -5.949095556801142e+00 3.578830357159455e+00 5.034068160957180e+00 9.061422531360038e+03 + 106300 1.004495752406809e+00 -5.912349338804317e+00 -5.981316562546132e+00 4.177994123627386e+00 4.781973652258502e+00 9.159740920965627e+03 + 106320 9.574213200212893e-01 -5.841242196946911e+00 -6.012159648823311e+00 4.503141442578856e+00 4.521706984514366e+00 9.254370966423083e+03 + 106340 1.017003814298037e+00 -5.929556249530058e+00 -5.996851214287775e+00 4.045130902045099e+00 4.658712800544150e+00 9.207331225173639e+03 + 106360 1.000323491489600e+00 -5.908035978058246e+00 -6.027880613780974e+00 4.168167066239224e+00 4.480000622021882e+00 9.302830647739671e+03 + 106380 1.099692558107775e+00 -6.064504847833308e+00 -5.995719646847336e+00 3.360620737001310e+00 4.755596005538216e+00 9.203921001261197e+03 + 106400 1.018741810708129e+00 -5.960982782847296e+00 -6.013786411028732e+00 3.903909380340809e+00 4.600702775987948e+00 9.259430955694646e+03 + 106420 9.960929918803061e-01 -5.950914067813625e+00 -6.000998144026840e+00 3.991378023248719e+00 4.703787507146691e+00 9.220086539635999e+03 + 106440 9.951776503857219e-01 -5.976266187861974e+00 -6.004216954543550e+00 3.798745290460036e+00 4.638247662807263e+00 9.229985477600831e+03 + 106460 1.014168006604222e+00 -6.033711733975982e+00 -5.966472571015309e+00 3.500038341202592e+00 4.886136020149615e+00 9.114400641217915e+03 + 106480 9.219378388600086e-01 -5.925156666687804e+00 -6.011488971190176e+00 4.097525919950419e+00 4.601792467616856e+00 9.252319590841102e+03 + 106500 9.315582535002030e-01 -5.964075144604301e+00 -5.962719726808801e+00 3.908816105554686e+00 4.916599124286676e+00 9.102963734672707e+03 + 106520 9.197455744389260e-01 -5.965877622604387e+00 -6.032731833403562e+00 3.906212693366754e+00 4.522325469302208e+00 9.317794242136057e+03 + 106540 9.328777874255200e-01 -6.002134968512064e+00 -6.049540799054512e+00 3.699215549030641e+00 4.427003934027339e+00 9.369756461810823e+03 + 106560 9.816279550814646e-01 -6.089162334927154e+00 -6.019996855209783e+00 3.193440358211693e+00 4.590599246072228e+00 9.278567858523042e+03 + 106580 9.362034553502320e-01 -6.033394628574899e+00 -6.000162951443884e+00 3.542104282948767e+00 4.732925715620471e+00 9.217568579773471e+03 + 106600 9.531663688312749e-01 -6.066506105723457e+00 -5.987454258532392e+00 3.344638904377249e+00 4.798566844182163e+00 9.178583732351199e+03 + 106620 9.085484805453523e-01 -6.001575943053993e+00 -5.974513134056619e+00 3.716007840363719e+00 4.871406677582797e+00 9.138966906179581e+03 + 106640 9.965917805155191e-01 -6.124717185660998e+00 -5.959962687766232e+00 3.020579958356647e+00 4.966625780944543e+00 9.094552638896163e+03 + 106660 9.745666292338361e-01 -6.075727449155544e+00 -5.968355851361495e+00 3.347743966669550e+00 4.964288296904041e+00 9.120164656728615e+03 + 106680 1.005602826952666e+00 -6.093073800298061e+00 -5.982576040883171e+00 3.159489085215513e+00 4.793984319248818e+00 9.163636057383923e+03 + 106700 9.419305913742143e-01 -5.957666432617559e+00 -5.972641662802367e+00 3.921453091918120e+00 4.835463002787572e+00 9.133240316871985e+03 + 106720 9.411250027764670e-01 -5.900519770763479e+00 -5.994196624843613e+00 4.239192450140639e+00 4.701285457566190e+00 9.199251461260015e+03 + 106740 1.017251155313295e+00 -5.956261248836221e+00 -5.997455371046279e+00 3.902653424003169e+00 4.666110399503207e+00 9.209223112377151e+03 + 106760 1.027999396199909e+00 -5.928888995783600e+00 -5.994895914455084e+00 4.074108966804059e+00 4.695087025254746e+00 9.201363900920001e+03 + 106780 1.023671017428234e+00 -5.895389635436733e+00 -5.983821601722628e+00 4.278067941387405e+00 4.770277906171239e+00 9.167389214974275e+03 + 106800 1.063370518251372e+00 -5.938825043595225e+00 -6.040278749157486e+00 3.972831204060830e+00 4.390268326812130e+00 9.341101942116768e+03 + 106820 9.933091850089931e-01 -5.829277294172231e+00 -6.023198833214610e+00 4.674508834132249e+00 4.560981347689729e+00 9.288341931922771e+03 + 106840 1.068695331542206e+00 -5.943643439051375e+00 -6.002213778075681e+00 3.989144409407911e+00 4.652824458999677e+00 9.223810861222531e+03 + 106860 1.080201377918969e+00 -5.966966170665622e+00 -5.999897563112439e+00 3.845396223991817e+00 4.656299072445684e+00 9.216732157873832e+03 + 106880 1.081211612856492e+00 -5.981462397936142e+00 -6.042856418341460e+00 3.796636348544040e+00 4.444102382682753e+00 9.349096640293292e+03 + 106900 1.036519717739681e+00 -5.937700126651976e+00 -6.062592442682446e+00 4.002609824302688e+00 4.285458818632282e+00 9.410187139904428e+03 + 106920 1.063632070211790e+00 -6.005868794207068e+00 -5.998800526891152e+00 3.662995489394131e+00 4.703582574132952e+00 9.213360681057718e+03 + 106940 1.070216467612981e+00 -6.047270722087692e+00 -6.019756986915811e+00 3.390157901351967e+00 4.548146026445662e+00 9.277799402708328e+03 + 106960 9.973279213432032e-01 -5.971636611404179e+00 -5.987792708905163e+00 3.880620965097727e+00 4.787850153099067e+00 9.179607477186981e+03 + 106980 9.960897270013463e-01 -5.996518235592978e+00 -5.990139618307969e+00 3.728431701155718e+00 4.765058708694074e+00 9.186780903054567e+03 + 107000 1.091480078112921e+00 -6.162083420700586e+00 -5.956960727145157e+00 2.875067054914906e+00 5.052913303944422e+00 9.085413326716496e+03 + 107020 9.334176182282091e-01 -5.945262140286588e+00 -6.012381344710564e+00 4.027148112660582e+00 4.641739254194801e+00 9.255090639686185e+03 + 107040 9.893706451769266e-01 -6.041593407988587e+00 -6.030125271801602e+00 3.423369171377276e+00 4.489220984051286e+00 9.309768960803487e+03 + 107060 8.956921923816729e-01 -5.913512302806556e+00 -6.048360564440324e+00 4.115791119793720e+00 4.341471533791571e+00 9.366120273994551e+03 + 107080 1.014568518492241e+00 -6.097222958764431e+00 -5.979854029142997e+00 3.168499691858472e+00 4.842450248527906e+00 9.155313596886732e+03 + 107100 1.035141127832272e+00 -6.131896671699758e+00 -5.965389545165465e+00 2.972565390432282e+00 4.928675077886751e+00 9.111124368627907e+03 + 107120 9.589152452895245e-01 -6.020490507470245e+00 -5.954341039750212e+00 3.597254740272414e+00 4.977095220517889e+00 9.077405064062938e+03 + 107140 9.747869551062297e-01 -6.040281800103179e+00 -5.976856561146040e+00 3.426948047506857e+00 4.791145584622765e+00 9.146131142547514e+03 + 107160 1.022532204744173e+00 -6.102907087728408e+00 -5.944467338938619e+00 3.116679819919016e+00 5.026465375941870e+00 9.047381198894020e+03 + 107180 9.537027249169767e-01 -5.988059938624118e+00 -5.984920694161377e+00 3.748241098497489e+00 4.766267125999058e+00 9.170816522573945e+03 + 107200 9.818286328918161e-01 -6.013145581348835e+00 -5.988471321569333e+00 3.606528282519704e+00 4.748211700502971e+00 9.181662881766486e+03 + 107220 9.638649777582777e-01 -5.963817448158141e+00 -6.025670553031548e+00 3.808551938322428e+00 4.453381838402275e+00 9.296017940819487e+03 + 107240 1.013150429575588e+00 -6.010016926538483e+00 -6.013931742915700e+00 3.595547323006672e+00 4.573067841552815e+00 9.259873057419500e+03 + 107260 9.786341437994822e-01 -5.927788019293728e+00 -6.016337260394074e+00 4.091676025955620e+00 4.583212580606660e+00 9.267247381447047e+03 + 107280 1.003774047609609e+00 -5.924746945056934e+00 -6.026002682326444e+00 4.043936170079983e+00 4.462510057403756e+00 9.297058224356018e+03 + 107300 9.935596803415440e-01 -5.862941368662274e+00 -6.065661293515388e+00 4.335638014455830e+00 4.171588835142269e+00 9.419714195341272e+03 + 107320 1.076936398191485e+00 -5.938185717253442e+00 -6.020544900406197e+00 4.036403039010020e+00 4.563483864304502e+00 9.280205162727721e+03 + 107340 1.060868298485076e+00 -5.866815063145264e+00 -6.016526083599312e+00 4.440844220062749e+00 4.581180372910065e+00 9.267833316892373e+03 + 107360 1.166685637846369e+00 -5.992032980247102e+00 -6.016956968966996e+00 3.741702484481671e+00 4.598585084277255e+00 9.269193262704744e+03 + 107380 1.156070270995346e+00 -5.960463364025639e+00 -6.021807144112628e+00 3.885893229649185e+00 4.533647751470403e+00 9.284143381081256e+03 + 107400 1.120264906308816e+00 -5.910876971573249e+00 -5.975619959055015e+00 4.182429485904760e+00 4.810665232839530e+00 9.142342768991168e+03 + 107420 1.034653795029537e+00 -5.793687247060754e+00 -5.966073427879692e+00 4.800338837396922e+00 4.810470710459315e+00 9.113150843554979e+03 + 107440 1.068404714285877e+00 -5.856486757580247e+00 -6.025649962592572e+00 4.408115919988164e+00 4.436754618886019e+00 9.295925302328633e+03 + 107460 1.083486976078189e+00 -5.896262753495077e+00 -6.028044129831173e+00 4.169189118036603e+00 4.412480062012659e+00 9.303346970973949e+03 + 107480 1.021888401692707e+00 -5.824316013354433e+00 -6.026162880615948e+00 4.620839038332319e+00 4.461803090814946e+00 9.297530265019874e+03 + 107500 1.100250809195455e+00 -5.959937216163540e+00 -6.006227946956358e+00 3.912753394379323e+00 4.646944854699529e+00 9.236175365965028e+03 + 107520 1.083191392924486e+00 -5.956160049319586e+00 -6.074264804668620e+00 3.935188133076827e+00 4.257012351210856e+00 9.446422918603446e+03 + 107540 1.041043070099352e+00 -5.922918507413494e+00 -6.065572923265792e+00 4.056423530159119e+00 4.237279798635718e+00 9.419445632413290e+03 + 107560 9.883915065059991e-01 -5.873877341970246e+00 -6.027240516354921e+00 4.376646542048743e+00 4.496011461857409e+00 9.300857450502635e+03 + 107580 1.094827329378895e+00 -6.059750682019232e+00 -5.989444511014343e+00 3.354783159269712e+00 4.758492073024583e+00 9.184678214461461e+03 + 107600 1.049431088619426e+00 -6.022946953545170e+00 -5.990431556241718e+00 3.555270637405665e+00 4.741979080463560e+00 9.187695727713277e+03 + 107620 1.010406469704170e+00 -5.990631503106416e+00 -5.992126473260774e+00 3.728306325982232e+00 4.719721976010019e+00 9.192892406938281e+03 + 107640 9.646644875437898e-01 -5.946832348674482e+00 -6.014233115661220e+00 3.999784326280516e+00 4.612758692007682e+00 9.260774492159677e+03 + 107660 1.012891262175276e+00 -6.039105592043181e+00 -5.994815045421126e+00 3.465151505747127e+00 4.719474678390903e+00 9.201125923778925e+03 + 107680 9.920191782473126e-01 -6.026392576951298e+00 -5.976879112395320e+00 3.560891559584689e+00 4.845205535248991e+00 9.146204358698034e+03 + 107700 9.629302818179348e-01 -5.998033168646276e+00 -5.960017588711475e+00 3.755612958579468e+00 4.973904301457079e+00 9.094707931627696e+03 + 107720 9.743256926755899e-01 -6.025744743556214e+00 -6.013118838713573e+00 3.531475517022991e+00 4.603975416481900e+00 9.257333676349095e+03 + 107740 9.843536300052306e-01 -6.048045630490732e+00 -6.011877970576766e+00 3.399589115514061e+00 4.607269415667339e+00 9.253558380128936e+03 + 107760 9.870103607214662e-01 -6.058132264531766e+00 -5.979003552872307e+00 3.386105696271062e+00 4.840475003748232e+00 9.152712514640298e+03 + 107780 9.880727976511489e-01 -6.061902980302930e+00 -5.940489865546859e+00 3.474968395945530e+00 5.172141289493676e+00 9.035268490074210e+03 + 107800 9.934363380380949e-01 -6.066221439977816e+00 -5.988436137493715e+00 3.307911193865003e+00 4.754566437965371e+00 9.181592390874392e+03 + 107820 9.941222238259179e-01 -6.061157274982905e+00 -6.005740319051945e+00 3.387191829149858e+00 4.705404565851641e+00 9.234669880036236e+03 + 107840 9.802711755186846e-01 -6.031962661242682e+00 -5.972197194710828e+00 3.528039066123626e+00 4.871221623625584e+00 9.131903074737453e+03 + 107860 9.737836998087152e-01 -6.006532366041084e+00 -5.989109268957429e+00 3.677119096276647e+00 4.777165215946555e+00 9.183645934083359e+03 + 107880 9.990776872213606e-01 -6.021171733993945e+00 -5.972021231595545e+00 3.606952324883891e+00 4.889182115671163e+00 9.131360454948132e+03 + 107900 9.621491648172464e-01 -5.936971328752231e+00 -5.949348013003055e+00 4.038356892697905e+00 4.967288056443978e+00 9.062199076408415e+03 + 107920 1.015021487249577e+00 -5.972331211826770e+00 -5.959059745545060e+00 3.901221194300628e+00 4.977428007442975e+00 9.091787121374791e+03 + 107940 1.084780237755569e+00 -6.024691205974166e+00 -6.010794881635205e+00 3.517763169042444e+00 4.597558013845994e+00 9.250237775283598e+03 + 107960 1.054203414846473e+00 -5.936365887669200e+00 -6.035347090494796e+00 4.010637691369978e+00 4.442272307453769e+00 9.325880074572389e+03 + 107980 1.053521546659673e+00 -5.909954976591237e+00 -5.998799133369886e+00 4.221508023905686e+00 4.711351127093857e+00 9.213320405882903e+03 + 108000 1.039572208917378e+00 -5.871860370726271e+00 -6.023429481683597e+00 4.407605606512296e+00 4.537272316151213e+00 9.289080853752117e+03 + 108020 1.074137242603411e+00 -5.915719881252234e+00 -5.992090244400467e+00 4.182847822553282e+00 4.744317379080624e+00 9.192777612740869e+03 + 108040 1.062737816324989e+00 -5.899433269969242e+00 -6.007586830290133e+00 4.205741372022769e+00 4.584706891950842e+00 9.240325482529890e+03 + 108060 1.075041951887930e+00 -5.925107194838648e+00 -6.002757562852939e+00 4.093953287006163e+00 4.648072857512488e+00 9.225499950036372e+03 + 108080 1.088380250092350e+00 -5.959242808274414e+00 -6.034170674578027e+00 3.999187682688607e+00 4.568940279323428e+00 9.322243954859903e+03 + 108100 1.113715042597850e+00 -6.022971543491155e+00 -6.032311133386394e+00 3.588166938298107e+00 4.534537567822781e+00 9.316507178080856e+03 + 108120 1.023537800871556e+00 -5.920319455141232e+00 -5.993233261800748e+00 4.110506379261539e+00 4.691824018047488e+00 9.196258875854641e+03 + 108140 9.980410773184784e-01 -5.909817993069390e+00 -5.949564029902841e+00 4.209126426803954e+00 4.980898532626957e+00 9.062821895626783e+03 + 108160 1.015613200229184e+00 -5.957734116411175e+00 -5.942365421137865e+00 3.896006588878882e+00 4.984256015436136e+00 9.040936387462518e+03 + 108180 1.012196642450348e+00 -5.967608887570485e+00 -5.978755456825464e+00 3.858217647821433e+00 4.794212322233322e+00 9.151912704568538e+03 + 108200 9.741769502196318e-01 -5.925526691123276e+00 -6.005749391432316e+00 4.044388511053363e+00 4.583737351456106e+00 9.234691966481303e+03 + 108220 9.687114128244643e-01 -5.928724985779531e+00 -5.955326182847923e+00 4.087564662161350e+00 4.934816472072698e+00 9.080395360601287e+03 + 108240 1.005166577086568e+00 -5.990235717786807e+00 -5.986930693100444e+00 3.731780417406966e+00 4.750758380606985e+00 9.176934997796623e+03 + 108260 1.010016370502997e+00 -6.002224998525467e+00 -5.950490652744848e+00 3.757186535442605e+00 5.054253154779056e+00 9.065681509965854e+03 + 108280 1.004404093359719e+00 -5.998232262909251e+00 -6.025325482260378e+00 3.704748655158797e+00 4.549175196982484e+00 9.294920823874812e+03 + 108300 9.915783221759463e-01 -5.983909713209440e+00 -5.981713437636225e+00 3.764436182207665e+00 4.777047536421610e+00 9.160977118090765e+03 + 108320 9.577143021635933e-01 -5.936558417704182e+00 -5.993366096541505e+00 4.055546824183006e+00 4.729348341339207e+00 9.196672309316877e+03 + 108340 9.873057496685874e-01 -5.981530567227935e+00 -5.980196830726648e+00 3.841769016392532e+00 4.849427537777983e+00 9.156309616924682e+03 + 108360 9.820677538233421e-01 -5.971071943175634e+00 -6.041223494110471e+00 3.867204885490600e+00 4.464383824105342e+00 9.344036215726748e+03 + 108380 1.020466553004970e+00 -6.026487393392054e+00 -6.083794476410086e+00 3.506608508790643e+00 4.177542369858671e+00 9.476088023334511e+03 + 108400 9.218425656843257e-01 -5.884336754468325e+00 -6.012802347728387e+00 4.363506307371148e+00 4.625836990885568e+00 9.256384620686618e+03 + 108420 1.019868274710582e+00 -6.035226735395079e+00 -5.961791355007750e+00 3.491491166690344e+00 4.913168484962775e+00 9.100125696866366e+03 + 108440 1.020746629340604e+00 -6.037938765544196e+00 -5.982261369592243e+00 3.480162556982721e+00 4.799870780588009e+00 9.162668931352207e+03 + 108460 9.648008454713850e-01 -5.954432499808748e+00 -6.052043376599707e+00 3.900787227195333e+00 4.340290467427280e+00 9.377491986999563e+03 + 108480 1.012825676977712e+00 -6.026486918168974e+00 -6.017756959880090e+00 3.586680666986021e+00 4.636809438437467e+00 9.271638219440774e+03 + 108500 1.071298070913189e+00 -6.113973966161216e+00 -5.981727338553323e+00 3.139346616554546e+00 4.898727217378555e+00 9.161037725997532e+03 + 108520 9.995398540864457e-01 -6.010742216332344e+00 -5.947270110706411e+00 3.689366296198835e+00 5.053832948979541e+00 9.055878528059937e+03 + 108540 1.014014069238396e+00 -6.034917107261979e+00 -5.966716737985542e+00 3.528944353298466e+00 4.920561427656803e+00 9.115160611939304e+03 + 108560 9.706622251815615e-01 -5.972630998059905e+00 -6.004653953747580e+00 3.801162390696355e+00 4.617281623601352e+00 9.231343927526259e+03 + 108580 9.781396761780351e-01 -5.984972613202496e+00 -6.033337765997054e+00 3.757113997335720e+00 4.479393805506165e+00 9.319647570064051e+03 + 108600 9.810013935294777e-01 -5.989267209276985e+00 -6.030921475823246e+00 3.778244937494896e+00 4.539059693009349e+00 9.312234084753991e+03 + 108620 1.002855736973533e+00 -6.023335464328249e+00 -6.023203149035391e+00 3.549377153009078e+00 4.550136927896395e+00 9.288434224418064e+03 + 108640 9.990366732869943e-01 -6.018726915652055e+00 -6.006344009917990e+00 3.586730299701548e+00 4.657834860675013e+00 9.236552383283415e+03 + 108660 1.026451071462047e+00 -6.059646397951886e+00 -6.002346625028880e+00 3.378859304413723e+00 4.707883467648820e+00 9.224258923522311e+03 + 108680 1.001074936334381e+00 -6.023430415030750e+00 -6.011235416778378e+00 3.602897833062329e+00 4.672923400197327e+00 9.251553194441129e+03 + 108700 9.580907785112820e-01 -5.961588777494660e+00 -5.975053601237232e+00 3.914403615744963e+00 4.837086514140369e+00 9.140603494491470e+03 + 108720 1.035506263936890e+00 -6.073315663746171e+00 -5.952660770082201e+00 3.302388415442210e+00 4.995207486145179e+00 9.072300041338567e+03 + 108740 9.854562550349116e-01 -5.991926143752989e+00 -6.009704792776455e+00 3.793399606537483e+00 4.691311852607696e+00 9.246869274965558e+03 + 108760 1.004531630700905e+00 -6.012857172403439e+00 -6.038390542484620e+00 3.584570280416954e+00 4.437953718134562e+00 9.335312780198099e+03 + 108780 1.052626868421286e+00 -6.080585705118037e+00 -5.971054779385264e+00 3.260442078516939e+00 4.889385603930501e+00 9.128422729464799e+03 + 108800 9.698915026857554e-01 -5.952400338423944e+00 -6.027353940799638e+00 3.933236462440590e+00 4.502841278566873e+00 9.301198058515394e+03 + 108820 1.020770136999852e+00 -6.020657019922772e+00 -6.003899666163582e+00 3.540945124311440e+00 4.637168442788825e+00 9.229024145049407e+03 + 108840 9.829787790242049e-01 -5.956593348644343e+00 -5.999233486724071e+00 3.957575947621837e+00 4.712729676227990e+00 9.214685944414696e+03 + 108860 1.037003982250690e+00 -6.026083889798857e+00 -6.015075292743703e+00 3.551550406269117e+00 4.614763474134696e+00 9.263372575520842e+03 + 108880 9.855407204743436e-01 -5.941130524919171e+00 -6.018564249978476e+00 3.973332656220415e+00 4.528696224099664e+00 9.274125139475673e+03 + 108900 1.040610497486178e+00 -6.014791222215638e+00 -5.973922552138872e+00 3.650996453198965e+00 4.885670681186006e+00 9.137152023481056e+03 + 108920 1.010746571020814e+00 -5.961381718837112e+00 -5.990652967532657e+00 3.848918042167713e+00 4.680838002446795e+00 9.188390678286707e+03 + 108940 9.758234313041554e-01 -5.899670693065586e+00 -6.039865139454703e+00 4.167864100064081e+00 4.362845893877307e+00 9.339844197490111e+03 + 108960 1.025693016310956e+00 -5.963408993778376e+00 -6.017185314277204e+00 3.907753836017132e+00 4.598961881854164e+00 9.269877029171623e+03 + 108980 1.073478006563008e+00 -6.025745906913911e+00 -6.031132448017474e+00 3.510887909824355e+00 4.479957557243154e+00 9.312876685180361e+03 + 109000 1.094042784350798e+00 -6.051414417241750e+00 -6.019309392802377e+00 3.394913413045250e+00 4.579265431612605e+00 9.276425973408888e+03 + 109020 1.067410045668167e+00 -6.013164161234901e+00 -5.999062055389572e+00 3.679624572747204e+00 4.760601046804909e+00 9.214162649406788e+03 + 109040 1.032131989915082e+00 -5.967722225318855e+00 -6.027877485928482e+00 3.890420382456902e+00 4.544999567039929e+00 9.302806872854382e+03 + 109060 1.053278460218680e+00 -6.011306642486284e+00 -6.011138911408402e+00 3.637471914552072e+00 4.638435052357575e+00 9.251268198576317e+03 + 109080 1.002315948589589e+00 -5.954199384352671e+00 -6.005768141362122e+00 3.898643684305822e+00 4.602527901318196e+00 9.234778875689419e+03 + 109100 1.047434391335358e+00 -6.046068223478323e+00 -5.980569840217163e+00 3.484834329135774e+00 4.860936181663405e+00 9.157507983948248e+03 + 109120 1.010799278984670e+00 -6.023459422120209e+00 -6.002643957730511e+00 3.548314728394327e+00 4.667840346102680e+00 9.225111062823362e+03 + 109140 9.805715256154648e-01 -6.012226654669088e+00 -5.991507227372066e+00 3.617714221701695e+00 4.736688379562208e+00 9.190967535203141e+03 + 109160 9.875922910271535e-01 -6.052291155898865e+00 -5.972232210622071e+00 3.490183291096962e+00 4.949894143958057e+00 9.132003573817899e+03 + 109180 1.053384674590968e+00 -6.177809197021253e+00 -6.004534700036508e+00 2.730878974123281e+00 4.725847949951437e+00 9.230992253130638e+03 + 109200 9.594850952680400e-01 -6.063251633257293e+00 -5.985606018303364e+00 3.406150655209129e+00 4.852003791894672e+00 9.172909592258051e+03 + 109220 9.462080787733916e-01 -6.062056116043646e+00 -5.947742680446437e+00 3.427184299767921e+00 5.083589736914085e+00 9.057324271325253e+03 + 109240 8.983851810711755e-01 -6.001502108684121e+00 -5.965501018049855e+00 3.749654956959702e+00 4.956378790532431e+00 9.111411842264019e+03 + 109260 9.887329666025924e-01 -6.136057787683523e+00 -5.961544229656384e+00 2.952766647335732e+00 4.954850503413391e+00 9.099373850484015e+03 + 109280 9.545839564806871e-01 -6.080590225330678e+00 -5.997087634723282e+00 3.258382310457273e+00 4.737867107709075e+00 9.208099018656241e+03 + 109300 9.497865636814274e-01 -6.064317741328719e+00 -5.941156713317082e+00 3.326376470578297e+00 5.033586152528606e+00 9.037291468523226e+03 + 109320 9.242128979765879e-01 -6.007329807587109e+00 -5.966504595207354e+00 3.682670129677166e+00 4.917094816842913e+00 9.114513531278337e+03 + 109340 9.560905510207155e-01 -6.023994489326089e+00 -6.011646464336136e+00 3.550991137135337e+00 4.621895407478339e+00 9.252859154133272e+03 + 109360 9.453624125603036e-01 -5.971995439210477e+00 -6.017399660843208e+00 3.839719793170644e+00 4.579001726274914e+00 9.270535534674005e+03 + 109380 9.921265982129118e-01 -6.001276584062145e+00 -6.013157630058791e+00 3.692343575938161e+00 4.624120771239491e+00 9.257475770663152e+03 + 109400 9.855920953321784e-01 -5.955355158831755e+00 -5.992472306171823e+00 3.907728165879531e+00 4.694595761992874e+00 9.193940908898418e+03 + 109420 1.006969176944831e+00 -5.954240446351060e+00 -5.980729774751390e+00 3.981305994710346e+00 4.829200171825327e+00 9.157981798141069e+03 + 109440 1.090609972369272e+00 -6.055263903709355e+00 -5.982438425814895e+00 3.365229833305907e+00 4.783404997082178e+00 9.163213274275438e+03 + 109460 1.045888505020370e+00 -5.976706491805553e+00 -6.065665267853577e+00 3.746302256822128e+00 4.235487198428276e+00 9.419746065321016e+03 + 109480 1.043687966727833e+00 -5.971868505276107e+00 -6.005442599275773e+00 3.861177013532939e+00 4.668389370212606e+00 9.233744134288718e+03 + 109500 1.005182548833443e+00 -5.917061849015028e+00 -5.972686343594315e+00 4.149105291498605e+00 4.829700835761622e+00 9.133370725142826e+03 + 109520 1.058151051715412e+00 -5.999765998552968e+00 -5.936486920183147e+00 3.720152608150502e+00 5.083510868555745e+00 9.023058845459847e+03 + 109540 1.023670810048727e+00 -5.951868090375650e+00 -5.943152087454159e+00 4.010521711223944e+00 5.060570348796238e+00 9.043328437982134e+03 + 109560 1.026289148690923e+00 -5.959919913487415e+00 -5.997970128487184e+00 3.893643568992297e+00 4.675153346211880e+00 9.210799383746875e+03 + 109580 1.021706887436896e+00 -5.959990971486249e+00 -6.021373046768340e+00 3.890243926731836e+00 4.537778551616618e+00 9.282763987196964e+03 + 109600 1.005062039983134e+00 -5.943651662215859e+00 -6.028956982408861e+00 4.017863396093531e+00 4.528027046589678e+00 9.306128973448767e+03 + 109620 1.051311904639596e+00 -6.024998417287838e+00 -6.022270007133868e+00 3.624432046037923e+00 4.640098999362126e+00 9.285545776747427e+03 + 109640 1.076610182754893e+00 -6.082164605854845e+00 -5.973735919328480e+00 3.293633959735433e+00 4.916248257054836e+00 9.136606002531638e+03 + 109660 9.425324479560375e-01 -5.903888588086559e+00 -6.009153481145221e+00 4.207276130248198e+00 4.602828824615806e+00 9.245157559553678e+03 + 109680 9.744119016378936e-01 -5.972017557252527e+00 -6.021800865689528e+00 3.801527414798057e+00 4.515663953810714e+00 9.284082009987362e+03 + 109700 9.636896458029039e-01 -5.974790334990272e+00 -6.006607206900667e+00 3.856164244583022e+00 4.673466842428519e+00 9.237320253525853e+03 + 109720 1.047523426136800e+00 -6.117518842611685e+00 -5.951418817672415e+00 3.122315203702985e+00 5.076087250800058e+00 9.068523008979058e+03 + 109740 9.529605246415017e-01 -5.994352364456859e+00 -6.042581256069575e+00 3.751051463787598e+00 4.474113704750534e+00 9.348232432907851e+03 + 109760 9.694198998467379e-01 -6.037268639465704e+00 -6.017825698572676e+00 3.552101546049369e+00 4.663745921442512e+00 9.271852996978670e+03 + 109780 1.008503040709809e+00 -6.111797103606383e+00 -6.001612300529800e+00 3.101615147933606e+00 4.734313338242515e+00 9.221999921783801e+03 + 109800 9.234817085578430e-01 -6.002010663599777e+00 -6.021667949230995e+00 3.708473530017098e+00 4.595598353967523e+00 9.283691880754999e+03 + 109820 9.898506289323936e-01 -6.116372974742874e+00 -5.951906603888724e+00 3.113859828214673e+00 5.058251180747837e+00 9.070021367908645e+03 + 109840 9.216813200064577e-01 -6.026820603827560e+00 -6.026751968063200e+00 3.608589486396424e+00 4.608983603576732e+00 9.299346769578786e+03 + 109860 9.683275848286996e-01 -6.108359047928173e+00 -6.001829727779143e+00 3.117727212012201e+00 4.729435053666943e+00 9.222677274755089e+03 + 109880 9.367424382017991e-01 -6.071785973205475e+00 -5.997068543699930e+00 3.274857157402724e+00 4.703896200108409e+00 9.208062457674054e+03 + 109900 8.973868999383569e-01 -6.019377602880527e+00 -6.016016277401363e+00 3.609627186915418e+00 4.628928437980219e+00 9.266282680458475e+03 + 109920 9.390230776667619e-01 -6.082756457915149e+00 -5.984324690630572e+00 3.290308839787277e+00 4.855519279802073e+00 9.168992365183849e+03 + 109940 9.460682861839445e-01 -6.087098144211586e+00 -5.982820916982378e+00 3.249119933426698e+00 4.847895909025569e+00 9.164343363692175e+03 + 109960 9.534160335316748e-01 -6.080411172313257e+00 -5.998459578499917e+00 3.274168402529377e+00 4.744747136173729e+00 9.212309290434358e+03 + 109980 9.561788934174436e-01 -6.056698918893106e+00 -5.992226457542107e+00 3.424260950272141e+00 4.794471800430731e+00 9.193223214912250e+03 + 110000 9.286228454560304e-01 -5.982868574483808e+00 -5.992054166938184e+00 3.824330295094624e+00 4.771585201755761e+00 9.192661058492396e+03 + 110020 9.322600495554356e-01 -5.947871015472542e+00 -6.032271125889105e+00 3.906910716234783e+00 4.422272221348004e+00 9.316389343825336e+03 + 110040 1.051327875793133e+00 -6.083116288863671e+00 -6.000528909917403e+00 3.241680769009303e+00 4.715910279274365e+00 9.218692797862925e+03 + 110060 1.082265875826372e+00 -6.094920791514028e+00 -5.969191874713209e+00 3.142925841119350e+00 4.864880737876646e+00 9.122716612234366e+03 + 110080 9.663780031418719e-01 -5.899122018087247e+00 -5.996054623314863e+00 4.203293158647594e+00 4.646691139158441e+00 9.204909362427068e+03 + 110100 9.835200157609779e-01 -5.902355548099267e+00 -6.000348869649619e+00 4.240806488402336e+00 4.678113671642718e+00 9.218098169790581e+03 + 110120 1.022656946713998e+00 -5.941496786037618e+00 -6.003985564644452e+00 4.057399661709102e+00 4.698579424841423e+00 9.229265719018886e+03 + 110140 1.039873747108141e+00 -5.951128343276463e+00 -6.004630771421411e+00 3.970663874928885e+00 4.663444653046595e+00 9.231255401452736e+03 + 110160 1.018745863519354e+00 -5.909579058191441e+00 -6.037880857949373e+00 4.166770980642767e+00 4.430042191793373e+00 9.333687659382565e+03 + 110180 1.049243293294678e+00 -5.950878442676631e+00 -6.008768075574378e+00 4.029754061019126e+00 4.697342830528524e+00 9.243984340849825e+03 + 110200 1.029631986180195e+00 -5.923064053169250e+00 -6.010838150259236e+00 4.156322943622634e+00 4.652310495134310e+00 9.250339358117104e+03 + 110220 1.033153602173843e+00 -5.934835409290177e+00 -6.031952810793861e+00 4.045539682951310e+00 4.487876534647841e+00 9.315393423306779e+03 + 110240 1.056069413482368e+00 -5.982593501681246e+00 -6.010070693080213e+00 3.759763120745616e+00 4.601984835651120e+00 9.248013958698835e+03 + 110260 1.070226161415560e+00 -6.022733772374420e+00 -6.019580513617202e+00 3.570605503924027e+00 4.588712003673194e+00 9.277244352823955e+03 + 110280 9.779256112615989e-01 -5.913520038861624e+00 -6.023532391387066e+00 4.173184838351547e+00 4.541476885793925e+00 9.289434063652681e+03 + 110300 1.052494966785776e+00 -6.057853140517452e+00 -5.985822661934281e+00 3.438436177178112e+00 4.852046331883218e+00 9.173595293013988e+03 + 110320 1.011529149249278e+00 -6.035933050556491e+00 -6.003930528676086e+00 3.482519192173048e+00 4.666282625184588e+00 9.229137022084225e+03 + 110340 9.708646058262266e-01 -6.010454070040975e+00 -6.004324896129530e+00 3.626798702835793e+00 4.661993367921904e+00 9.230333937859687e+03 + 110360 9.359848173099466e-01 -5.988566648946828e+00 -6.023844906360605e+00 3.755682671183464e+00 4.553109457820868e+00 9.290396756951262e+03 + 110380 9.811049548622823e-01 -6.079921267765222e+00 -5.984130994268012e+00 3.320966150547508e+00 4.871008724465403e+00 9.168407592035644e+03 + 110400 9.212425011848773e-01 -6.006329760718172e+00 -5.998592779699349e+00 3.709766413636288e+00 4.754193355940314e+00 9.212730532387617e+03 + 110420 9.804643084144998e-01 -6.100510625044591e+00 -5.989308772179535e+00 3.131322709596815e+00 4.769860957179084e+00 9.184272782955193e+03 + 110440 9.996785355283355e-01 -6.129438083081175e+00 -5.996362655814160e+00 2.989472003843865e+00 4.753611700566882e+00 9.205904218233467e+03 + 110460 9.875315664849790e-01 -6.108961279276206e+00 -6.010224187743059e+00 3.130711515299299e+00 4.697675174398157e+00 9.248479835216387e+03 + 110480 9.921601085555617e-01 -6.111018579800302e+00 -6.004417747577416e+00 3.097223452041951e+00 4.709341927091238e+00 9.230628253333118e+03 + 110500 9.481593009655233e-01 -6.037550208075061e+00 -5.989511582762105e+00 3.531631314938295e+00 4.807476535438525e+00 9.184894747712648e+03 + 110520 9.300941896809759e-01 -6.000228224003878e+00 -6.031965419298801e+00 3.649506611481406e+00 4.467266724782859e+00 9.315441042377706e+03 + 110540 9.934444835877562e-01 -6.082515418038583e+00 -5.987869629531684e+00 3.228326190341762e+00 4.771796954336819e+00 9.179853757144438e+03 + 110560 9.425088416099272e-01 -5.994087337490480e+00 -5.985640773273747e+00 3.745569360457019e+00 4.794070839291083e+00 9.173012697336795e+03 + 110580 9.474086280856785e-01 -5.987529883502685e+00 -5.994302483408548e+00 3.755411088685092e+00 4.716521771969177e+00 9.199552841547560e+03 + 110600 1.082175460248784e+00 -6.171160756571253e+00 -5.951793723694032e+00 2.779141480616332e+00 5.038780930335964e+00 9.069674820805674e+03 + 110620 1.010730194554325e+00 -6.052143856533896e+00 -6.016529788390564e+00 3.450134600907703e+00 4.654636091445952e+00 9.267869291956948e+03 + 110640 1.031805215598244e+00 -6.073702042617732e+00 -6.014303868935618e+00 3.279095580236304e+00 4.620169085356672e+00 9.261028325589306e+03 + 110660 9.508062475787832e-01 -5.945552094020330e+00 -6.012869623445438e+00 3.992504598386562e+00 4.605956927073581e+00 9.256570918327147e+03 + 110680 9.595026159332820e-01 -5.950488365425490e+00 -5.982368671350679e+00 3.974250735768617e+00 4.791189085684785e+00 9.162982887976223e+03 + 110700 1.001453199827921e+00 -6.003431680378736e+00 -5.977911206622367e+00 3.696113456639870e+00 4.842655966229489e+00 9.149332271111291e+03 + 110720 9.658870745627729e-01 -5.938841010483362e+00 -6.017821883471862e+00 3.970364672112552e+00 4.516844277161992e+00 9.271822413006292e+03 + 110740 1.026436461109748e+00 -6.017586257216919e+00 -5.978952614825177e+00 3.637809720528817e+00 4.859650073679033e+00 9.152540188395787e+03 + 110760 1.017556018721842e+00 -5.996406452838357e+00 -5.981039069259174e+00 3.711546654974805e+00 4.799788549581397e+00 9.158934445275740e+03 + 110780 1.010858827641146e+00 -5.980683619751089e+00 -6.004179946252954e+00 3.759197088463409e+00 4.624277545644926e+00 9.229892446835385e+03 + 110800 9.689372337704188e-01 -5.914200582566381e+00 -5.996430240768480e+00 4.120687660804618e+00 4.648512238409686e+00 9.206088330180100e+03 + 110820 9.771077488855594e-01 -5.922371536386454e+00 -5.973703922731883e+00 4.106522232920517e+00 4.811763726863944e+00 9.136477062482161e+03 + 110840 1.029057318277087e+00 -5.993233153975304e+00 -5.988387808900963e+00 3.683122830784319e+00 4.710945552015909e+00 9.181426665871040e+03 + 110860 1.052856637779002e+00 -6.023680132429977e+00 -5.954420101826750e+00 3.573419414659027e+00 4.971121228337855e+00 9.077629907030780e+03 + 110880 9.935032302785025e-01 -5.932071185884737e+00 -5.977116655254434e+00 4.034640766151276e+00 4.775982710266622e+00 9.146903785714010e+03 + 110900 9.682863018089735e-01 -5.890509370320800e+00 -5.985262086731094e+00 4.319184537153581e+00 4.775099776590200e+00 9.171821508278499e+03 + 110920 1.069878140287784e+00 -6.034404830613564e+00 -5.954406882439587e+00 3.487369180509094e+00 4.946729778566541e+00 9.077608990553976e+03 + 110940 1.049541721033236e+00 -5.994416771630478e+00 -6.012098365047850e+00 3.741638591622209e+00 4.640108146001921e+00 9.254214131886341e+03 + 110960 1.027501671195375e+00 -5.951873905931321e+00 -6.037344404540329e+00 3.933101412312666e+00 4.442316582782825e+00 9.332039106082710e+03 + 110980 1.030918474025120e+00 -5.949436853321159e+00 -5.978218377951757e+00 4.029921225087845e+00 4.864653256732410e+00 9.150296896796699e+03 + 111000 1.045665672962105e+00 -5.963196290822335e+00 -5.983461380501097e+00 3.887093623675416e+00 4.770728342727475e+00 9.166344934087050e+03 + 111020 1.010436152146698e+00 -5.905420479303333e+00 -6.022489283787945e+00 4.173740539306135e+00 4.501513347616547e+00 9.286197488941209e+03 + 111040 1.037631681104065e+00 -5.944642672066583e+00 -6.035530229015361e+00 3.939236095514004e+00 4.417345678710140e+00 9.326445574624624e+03 + 111060 1.009670064137955e+00 -5.908762201580893e+00 -6.031940133792171e+00 4.156371834436221e+00 4.449065085955656e+00 9.315366298207058e+03 + 111080 1.048800838140544e+00 -5.977284388178622e+00 -5.993652855485705e+00 3.820101850431631e+00 4.726111578142228e+00 9.197551724132283e+03 + 111100 1.031191935986498e+00 -5.966493753947737e+00 -6.021743574359066e+00 3.838147327272266e+00 4.520894308588336e+00 9.283895453959811e+03 + 111120 1.004103555314783e+00 -5.945673672358472e+00 -5.998884435648916e+00 4.009127662067989e+00 4.703583224915254e+00 9.213610812065273e+03 + 111140 1.066473776201106e+00 -6.060432615401361e+00 -5.978320714394387e+00 3.373378724253937e+00 4.844877966611593e+00 9.150612090525488e+03 + 111160 9.602690636643264e-01 -5.928424659794904e+00 -6.022453774104839e+00 4.055340083913604e+00 4.515410358587544e+00 9.286091684490717e+03 + 111180 1.016177119751200e+00 -6.036325914314632e+00 -5.985354149752393e+00 3.454128570943415e+00 4.746816330914863e+00 9.172147763521998e+03 + 111200 9.783156488197153e-01 -6.005567932259768e+00 -6.006479107549392e+00 3.666738782607635e+00 4.661506673090692e+00 9.236940913713159e+03 + 111220 9.181222845285862e-01 -5.938101585128927e+00 -5.992923384833532e+00 4.027513437199206e+00 4.712718179649278e+00 9.195342093144875e+03 + 111240 1.055189226094499e+00 -6.160434440854589e+00 -5.938973797666539e+00 2.860750230163276e+00 5.132411514272833e+00 9.030665290268356e+03 + 111260 9.939873840837822e-01 -6.085397504881648e+00 -5.989006037103252e+00 3.198727797964836e+00 4.752222522479816e+00 9.183336323775602e+03 + 111280 9.922302180708334e-01 -6.093578990058133e+00 -5.970659345371847e+00 3.196572662644885e+00 4.902396284187081e+00 9.127215704886079e+03 + 111300 9.975016575991168e-01 -6.110003702093761e+00 -5.997694583738388e+00 3.107178286027738e+00 4.752074623404186e+00 9.209968203572816e+03 + 111320 9.858404488471383e-01 -6.097399325853936e+00 -5.967008522660524e+00 3.172077300258467e+00 4.920801470106625e+00 9.116057831092041e+03 + 111340 8.937047523539449e-01 -5.960955633179434e+00 -5.976103394022425e+00 3.973044841375450e+00 4.886064054506583e+00 9.143841157089402e+03 + 111360 9.345930370709843e-01 -6.014846398485147e+00 -5.993273033293162e+00 3.607468002693266e+00 4.731345604093116e+00 9.196406853469070e+03 + 111380 9.521015634277409e-01 -6.027317244914769e+00 -6.009915940983170e+00 3.526811936776090e+00 4.626732916794415e+00 9.247497130018810e+03 + 111400 9.444295435439848e-01 -5.992360209202766e+00 -6.000844458964826e+00 3.713257459930913e+00 4.664539584863757e+00 9.219664146890742e+03 + 111420 9.643482513485202e-01 -5.988915210575982e+00 -6.023522878623160e+00 3.739510589914594e+00 4.540788004468376e+00 9.289415881345927e+03 + 111440 1.039504716686269e+00 -6.058618273162059e+00 -6.008343730949672e+00 3.371075052139666e+00 4.659759253483458e+00 9.242683781657561e+03 + 111460 1.047896619849942e+00 -6.026840106503495e+00 -5.985610583256140e+00 3.541385660226431e+00 4.778131962960845e+00 9.172944351384149e+03 + 111480 9.701543287210241e-01 -5.872532859233743e+00 -6.006632318932620e+00 4.382733270682891e+00 4.612713421267623e+00 9.237400225784750e+03 + 111500 1.061083407054791e+00 -5.975134273675539e+00 -5.939173958108073e+00 3.872146387863249e+00 5.078636084692489e+00 9.031241801945966e+03 + 111520 1.039485777219276e+00 -5.918606712648376e+00 -6.004185565999315e+00 4.108690990387281e+00 4.617283971161438e+00 9.229894287400131e+03 + 111540 1.107517426780466e+00 -6.005395457177568e+00 -6.006153635084738e+00 3.726917361565975e+00 4.722563786695354e+00 9.235949725726510e+03 + 111560 1.101627473574728e+00 -5.992690650609672e+00 -6.028964406101128e+00 3.720078255896747e+00 4.511788738519282e+00 9.306178288973704e+03 + 111580 9.857659765130373e-01 -5.826106772232249e+00 -6.033497805900936e+00 4.665435346269978e+00 4.474563937285642e+00 9.320169667796639e+03 + 111600 1.111285494103226e+00 -6.020646909397804e+00 -6.030585305953753e+00 3.545150437071742e+00 4.488082626085586e+00 9.311186504551011e+03 + 111620 1.058771636532120e+00 -5.959142631049523e+00 -6.020674490123155e+00 3.935391892792472e+00 4.582066435967256e+00 9.280638493041863e+03 + 111640 1.043434973045050e+00 -5.956501479154894e+00 -5.990665095297387e+00 3.940518058077556e+00 4.744345287384851e+00 9.188429806491069e+03 + 111660 9.984394584470870e-01 -5.909608704296278e+00 -5.996116991726510e+00 4.217111904268965e+00 4.720367930730356e+00 9.205121390904345e+03 + 111680 1.049876049036680e+00 -6.005772721718293e+00 -5.983630090876565e+00 3.706467827976851e+00 4.833614240831100e+00 9.166843227957525e+03 + 111700 9.806974178439940e-01 -5.919821212285073e+00 -5.975595958443669e+00 4.206761238923346e+00 4.886494015366616e+00 9.142260976349111e+03 + 111720 9.813604101523604e-01 -5.933462982325751e+00 -6.006642808129040e+00 4.069848783962958e+00 4.649638899659030e+00 9.237447113889462e+03 + 111740 1.073805007676233e+00 -6.082661015580848e+00 -6.024920013212152e+00 3.174601220463178e+00 4.506158991455472e+00 9.293728383696200e+03 + 111760 9.482265325865137e-01 -5.910512277042267e+00 -6.037083566278443e+00 4.174210310311450e+00 4.447418380673622e+00 9.331248486415872e+03 + 111780 1.023679590095926e+00 -6.036594546643461e+00 -6.002961212197041e+00 3.489621149234639e+00 4.682748960367668e+00 9.226137770676005e+03 + 111800 9.841086484805363e-01 -5.989603784701198e+00 -5.991835231666723e+00 3.736600567026359e+00 4.723787253235010e+00 9.191994836874475e+03 + 111820 9.734878626708389e-01 -5.982285661913116e+00 -5.994231888242911e+00 3.763389458101385e+00 4.694792377843147e+00 9.199337437610056e+03 + 111840 9.770625753244400e-01 -5.992041971495479e+00 -6.012777186406056e+00 3.686582482247180e+00 4.567517669466510e+00 9.256298126508629e+03 + 111860 1.004596017401001e+00 -6.035938785135500e+00 -6.007851569537477e+00 3.458308655396451e+00 4.619589793842865e+00 9.241170037027769e+03 + 111880 9.313120053160255e-01 -5.929876485774042e+00 -6.019447140597779e+00 4.063103671624955e+00 4.548775110613019e+00 9.276866041846290e+03 + 111900 1.017806396240722e+00 -6.058964406949322e+00 -5.982245130403562e+00 3.390398642528663e+00 4.830932600724090e+00 9.162635031916396e+03 + 111920 9.460214591981132e-01 -5.951483996798249e+00 -6.023243205895675e+00 3.897844565494837e+00 4.485792082155703e+00 9.288556302344510e+03 + 111940 1.026796276654055e+00 -6.070120339547088e+00 -5.990444252630297e+00 3.322666753001584e+00 4.780179173912401e+00 9.187739841325780e+03 + 111960 1.019824781738202e+00 -6.057163413659826e+00 -5.975738360776909e+00 3.417599978496777e+00 4.885155232636697e+00 9.142716070591070e+03 + 111980 9.893405509936312e-01 -6.006747445465161e+00 -5.998897254121099e+00 3.640915067087164e+00 4.685992080597957e+00 9.213674527775023e+03 + 112000 1.029801462068605e+00 -6.061093497559658e+00 -6.015887862945173e+00 3.382825426985163e+00 4.642403176490883e+00 9.265882795447988e+03 + 112020 1.013891882605652e+00 -6.031724954082367e+00 -5.987893065030248e+00 3.556809122500562e+00 4.808498612400735e+00 9.179925012016374e+03 + 112040 9.441295887970530e-01 -5.919166393749313e+00 -6.021275230192233e+00 4.133768835502072e+00 4.547444095355455e+00 9.282466717806450e+03 + 112060 9.782307499912646e-01 -5.953573848412131e+00 -5.990341986020471e+00 3.897388923562600e+00 4.686260587564609e+00 9.187405018771748e+03 + 112080 1.021895570391615e+00 -5.988985007037840e+00 -5.955934037736656e+00 3.719641313409356e+00 4.909425093757726e+00 9.082268945251126e+03 + 112100 9.726628506030949e-01 -5.868137315120887e+00 -6.050162744633055e+00 4.376340363230061e+00 4.331122178627012e+00 9.371641703939247e+03 + 112120 1.039983761963153e+00 -5.916553935808989e+00 -6.008074272884080e+00 4.221542218271228e+00 4.696018280059661e+00 9.241797779237866e+03 + 112140 1.093970690365973e+00 -5.950351419042191e+00 -5.992127252901698e+00 4.015033529771657e+00 4.775150226960967e+00 9.192876585663680e+03 + 112160 1.117233274510646e+00 -5.951918136847778e+00 -6.003026156084546e+00 3.927002023609317e+00 4.633531868211378e+00 9.226329642928677e+03 + 112180 1.142221890582489e+00 -5.968804373149219e+00 -6.031058203100200e+00 3.840362138154210e+00 4.482891012826629e+00 9.312638135246281e+03 + 112200 1.012323696306997e+00 -5.771619776094927e+00 -6.017996031419013e+00 4.924452856219661e+00 4.509722271546467e+00 9.272367211949888e+03 + 112220 1.114858153951045e+00 -5.931804759785768e+00 -5.939876290796046e+00 4.096092062384701e+00 5.049744082258299e+00 9.033369823765770e+03 + 112240 1.063264101129018e+00 -5.868562712121157e+00 -5.954957656903862e+00 4.382275459309321e+00 4.886182316792529e+00 9.079272850531905e+03 + 112260 1.072255703587938e+00 -5.902364608679283e+00 -6.016869291164967e+00 4.225234248692203e+00 4.567730642317057e+00 9.268867501101500e+03 + 112280 1.032427631215861e+00 -5.873933553140099e+00 -6.030548519736200e+00 4.342850609960531e+00 4.443543235677963e+00 9.311061316137582e+03 + 112300 1.056795404824008e+00 -5.947507293202518e+00 -6.013471156274208e+00 4.023193881658536e+00 4.644419172026075e+00 9.258443153267175e+03 + 112320 1.047209040150620e+00 -5.975751400031753e+00 -6.016668285107681e+00 3.827873675055265e+00 4.592922589081788e+00 9.268288653349489e+03 + 112340 1.001260321361975e+00 -5.947078366924009e+00 -6.044742148893015e+00 3.945870648550144e+00 4.385070099062698e+00 9.354903095537165e+03 + 112360 9.544192412749180e-01 -5.911314017682950e+00 -6.017588959512472e+00 4.153382069776783e+00 4.543134907797570e+00 9.271121278065202e+03 + 112380 1.032777884651742e+00 -6.051378469205162e+00 -5.978393410059456e+00 3.449191470216566e+00 4.868282974232612e+00 9.150836207474431e+03 + 112400 9.738356801680723e-01 -5.983476856030845e+00 -6.025204058708162e+00 3.760786340528559e+00 4.521182285491656e+00 9.294577660645440e+03 + 112420 9.028365843422189e-01 -5.891615774347817e+00 -6.051507190046572e+00 4.264103848047638e+00 4.345982595988771e+00 9.375840159828111e+03 + 112440 1.022262327714030e+00 -6.078301438381282e+00 -6.022091961421074e+00 3.254489506418229e+00 4.577253021512193e+00 9.285024106604636e+03 + 112460 9.570519654278702e-01 -5.991525568739491e+00 -6.007907464694703e+00 3.732394653439310e+00 4.638327271774273e+00 9.241351728217667e+03 + 112480 9.728793577360111e-01 -6.021165919431777e+00 -5.964217160941988e+00 3.619697788273157e+00 4.946706372313415e+00 9.107500697588519e+03 + 112500 9.472610752983668e-01 -5.983055858056479e+00 -6.011871375680914e+00 3.766298959726162e+00 4.600835798339717e+00 9.253515253510195e+03 + 112520 9.683680695839346e-01 -6.012078326354022e+00 -6.031057450717303e+00 3.608581020153336e+00 4.499599951049372e+00 9.312643181611564e+03 + 112540 9.286410803126433e-01 -5.949956065693167e+00 -6.016884042632134e+00 3.981028016207337e+00 4.596717215552833e+00 9.268906746195840e+03 + 112560 9.880114599969321e-01 -6.031045229374580e+00 -6.004247482297878e+00 3.529544332998773e+00 4.683421143651152e+00 9.230071120742916e+03 + 112580 1.033566902913825e+00 -6.088407727935910e+00 -5.956830823595413e+00 3.241836669694032e+00 4.997371615877306e+00 9.085000863855206e+03 + 112600 1.026499153719529e+00 -6.062625777883843e+00 -5.989264561641019e+00 3.381429494027660e+00 4.802680950305485e+00 9.184135402990934e+03 + 112620 9.787822126333490e-01 -5.972108597185451e+00 -6.033555700576012e+00 3.828184700893133e+00 4.475345924316010e+00 9.320368607133381e+03 + 112640 1.010365009387511e+00 -5.995069760483652e+00 -6.002490933088361e+00 3.706583774803454e+00 4.663970253284464e+00 9.224714699784223e+03 + 112660 1.035760779966444e+00 -6.002250379137616e+00 -5.979033865765347e+00 3.726646934808283e+00 4.859959747335681e+00 9.152797152690471e+03 + 112680 1.060715195483406e+00 -6.003945310973230e+00 -6.008690448792052e+00 3.634917633965542e+00 4.607670318302161e+00 9.243754089977700e+03 + 112700 9.841917910101614e-01 -5.852184329555497e+00 -6.033786659675354e+00 4.467308339587380e+00 4.424519657169401e+00 9.321051771123113e+03 + 112720 1.104639564783796e+00 -5.991269594685749e+00 -6.018015873874688e+00 3.735273613528165e+00 4.581692339451948e+00 9.272435752443089e+03 + 112740 1.039991506425092e+00 -5.863744358161580e+00 -6.063085872271873e+00 4.419863744563146e+00 4.275213922542231e+00 9.411699943425419e+03 + 112760 1.096825801494530e+00 -5.923129536680826e+00 -6.050920629883802e+00 4.138623525554966e+00 4.404827292775722e+00 9.374012398218158e+03 + 112780 1.101991631569371e+00 -5.917355392845526e+00 -6.033706716956830e+00 4.157702282965710e+00 4.489594974609392e+00 9.320784516298112e+03 + 112800 1.073605973412022e+00 -5.874368400455048e+00 -6.009999607655142e+00 4.302588398894682e+00 4.523773018290265e+00 9.247754377911269e+03 + 112820 1.021494132956437e+00 -5.805427312556081e+00 -5.992989607764832e+00 4.766420209984341e+00 4.689408485724316e+00 9.195518420894983e+03 + 112840 1.086270501776049e+00 -5.918723823934997e+00 -5.970107864302296e+00 4.144759026316798e+00 4.849703914873215e+00 9.125507338767253e+03 + 112860 1.102694435851142e+00 -5.972893292202882e+00 -6.017925467336310e+00 3.764997980216253e+00 4.506416261893532e+00 9.272143254730523e+03 + 112880 1.036232309405085e+00 -5.922596337429281e+00 -6.021375478045726e+00 4.145438918103546e+00 4.578233806661314e+00 9.282776690737612e+03 + 112900 1.023503582434142e+00 -5.966807125155170e+00 -6.034573335786801e+00 3.904974035438164e+00 4.515849967204138e+00 9.323483931288612e+03 + 112920 1.011186990960679e+00 -6.011044671223917e+00 -6.006752911633685e+00 3.625282771954137e+00 4.649926719668900e+00 9.237806395953048e+03 + 112940 1.001289053044683e+00 -6.037731418891625e+00 -6.000495492667651e+00 3.462255195442999e+00 4.676069646062018e+00 9.218594676722127e+03 + 112960 1.008775356213988e+00 -6.071726304753554e+00 -5.990345243550217e+00 3.296260999429061e+00 4.763563646537142e+00 9.187442953608745e+03 + 112980 9.526629348352041e-01 -5.998557720422706e+00 -5.997967681879594e+00 3.691455655024016e+00 4.694843747646738e+00 9.210811211060080e+03 + 113000 9.554828700084781e-01 -6.007309760084733e+00 -5.991770217609819e+00 3.675483466219661e+00 4.764713923847049e+00 9.191816672704685e+03 + 113020 9.797326210612155e-01 -6.043784957044888e+00 -5.995665141972500e+00 3.480835332444785e+00 4.757146757107755e+00 9.203761768012422e+03 + 113040 9.520094179280255e-01 -6.000775349012436e+00 -6.056143694416001e+00 3.667632472893179e+00 4.349698865362146e+00 9.390212029247985e+03 + 113060 1.030924653086844e+00 -6.114912249686742e+00 -5.982633037174955e+00 3.084816800435485e+00 4.844384508820145e+00 9.163829477925674e+03 + 113080 9.092384190293057e-01 -5.929686176614419e+00 -6.001626336376643e+00 4.077125215643143e+00 4.664033685584713e+00 9.222028381919681e+03 + 113100 9.662443448407803e-01 -6.006029271160831e+00 -6.004899222190875e+00 3.604461287413153e+00 4.610950203473147e+00 9.232077653661605e+03 + 113120 1.033164169265315e+00 -6.091095419794104e+00 -5.977082070017034e+00 3.211030038660478e+00 4.865712336589267e+00 9.146835676731971e+03 + 113140 9.131351899904186e-01 -5.897298950860867e+00 -6.013893381773849e+00 4.237310525608184e+00 4.567807260375967e+00 9.259751920694109e+03 + 113160 1.013375361729576e+00 -6.029093799889345e+00 -6.004926951447247e+00 3.527146795917496e+00 4.665916579479733e+00 9.232170232674449e+03 + 113180 1.030704204832548e+00 -6.035286287984006e+00 -5.972676845093771e+00 3.506526422305494e+00 4.866039532161200e+00 9.133350279996721e+03 + 113200 9.875932130617632e-01 -5.949753366996313e+00 -5.970101753158358e+00 3.964169563726837e+00 4.847325981481792e+00 9.125454959479053e+03 + 113220 9.510169905781202e-01 -5.871570792428457e+00 -6.019402628725497e+00 4.366759279132028e+00 4.517885998211693e+00 9.276704909503804e+03 + 113240 1.077476891150832e+00 -6.034883298138407e+00 -5.982987886882397e+00 3.525048183102412e+00 4.823039665323355e+00 9.164910266137058e+03 + 113260 1.027897530824558e+00 -5.940250023781255e+00 -5.993106859960003e+00 4.006870058391183e+00 4.703357925483852e+00 9.195922781189589e+03 + 113280 1.076262370081546e+00 -5.994895708950537e+00 -6.000897749981492e+00 3.676421212907137e+00 4.641956564494544e+00 9.219822326479885e+03 + 113300 9.701373657215846e-01 -5.825652122738456e+00 -6.028793601422917e+00 4.650481159842307e+00 4.484011353193900e+00 9.305624317524333e+03 + 113320 1.054669056995143e+00 -5.942618294056290e+00 -6.020552121898811e+00 3.957082457596592e+00 4.509574357903950e+00 9.280224627942498e+03 + 113340 1.016782563212612e+00 -5.882035593971959e+00 -6.000343693030219e+00 4.302713270510464e+00 4.623369857598774e+00 9.218085605935799e+03 + 113360 1.078824021448599e+00 -5.974874840094940e+00 -5.990771558958288e+00 3.855144651496955e+00 4.763863231774318e+00 9.188727764965499e+03 + 113380 1.033719208847871e+00 -5.914977638474406e+00 -6.052290668171545e+00 4.110204723353224e+00 4.321732057709582e+00 9.378265747337004e+03 + 113400 1.045094516395950e+00 -5.950313142057055e+00 -6.009480354958228e+00 3.964492944592078e+00 4.624745652016933e+00 9.246173678746440e+03 + 113420 1.077459782396304e+00 -6.031124883337768e+00 -6.016096399977622e+00 3.504560422417837e+00 4.590856299522082e+00 9.266517289748233e+03 + 113440 1.014573734781699e+00 -5.986643936120537e+00 -5.988716017665541e+00 3.791124906424821e+00 4.779226693539822e+00 9.182449793893447e+03 + 113460 9.699543594450900e-01 -5.972677358844041e+00 -5.967225303644832e+00 3.875052409097890e+00 4.906358953754564e+00 9.116702899989559e+03 + 113480 1.007995918393916e+00 -6.074510348345209e+00 -5.977228052368504e+00 3.321417898756263e+00 4.880027896641145e+00 9.147272906595867e+03 + 113500 9.465936560258704e-01 -6.018046368565143e+00 -5.999683225642820e+00 3.587715546625480e+00 4.693159554972642e+00 9.216072989680511e+03 + 113520 9.765161548561365e-01 -6.083408604135547e+00 -5.969022009393258e+00 3.222409194546709e+00 4.879234722825258e+00 9.122191299702190e+03 + 113540 9.550632445626812e-01 -6.062469186559603e+00 -5.971897173359440e+00 3.383392880745893e+00 4.903471396514970e+00 9.130974209036232e+03 + 113560 9.580071778564068e-01 -6.071084510136440e+00 -5.971197661314061e+00 3.357357348336250e+00 4.930923091714245e+00 9.128843541282820e+03 + 113580 9.585002691973682e-01 -6.070862372648827e+00 -5.968978229651892e+00 3.338004867571080e+00 4.923039383179654e+00 9.122047974077705e+03 + 113600 9.428661625332835e-01 -6.040425483797128e+00 -5.983053672782269e+00 3.516068546360648e+00 4.845506363467027e+00 9.165108545142863e+03 + 113620 9.733918922064689e-01 -6.072677020419745e+00 -5.992175778771664e+00 3.357858280309440e+00 4.820108867379604e+00 9.193033241767318e+03 + 113640 9.732593649783844e-01 -6.057148647421263e+00 -5.987460685311481e+00 3.366971130950846e+00 4.767130193562497e+00 9.178596713166997e+03 + 113660 9.593182499716776e-01 -6.016261732715918e+00 -5.968824471763391e+00 3.602473225265421e+00 4.874865318547243e+00 9.121614053576681e+03 + 113680 9.565719129233565e-01 -5.986905981890414e+00 -5.997695104696803e+00 3.757040475575460e+00 4.695087662809813e+00 9.209963229043891e+03 + 113700 9.974237650737166e-01 -6.020806454879279e+00 -5.985036018362759e+00 3.576888931044472e+00 4.782288312979492e+00 9.171185938372961e+03 + 113720 1.032111779857968e+00 -6.045832960442330e+00 -6.007841131455322e+00 3.374538036229640e+00 4.592692997489573e+00 9.241135564216249e+03 + 113740 9.370960152366516e-01 -5.881807388137046e+00 -6.003767009137555e+00 4.318257517615905e+00 4.617946500640626e+00 9.228636759513505e+03 + 113760 9.987285852893487e-01 -5.952030189254684e+00 -5.991043032303238e+00 3.959702631462265e+00 4.735684849459516e+00 9.189588225068594e+03 + 113780 1.034851077895147e+00 -5.987793492752577e+00 -6.018466162408034e+00 3.759168756987673e+00 4.583041541245755e+00 9.273853988620740e+03 + 113800 1.031402255129489e+00 -5.970781351669201e+00 -6.027566879450599e+00 3.812824822440794e+00 4.486753534387985e+00 9.301888227314988e+03 + 113820 9.912195830760997e-01 -5.907685476749060e+00 -5.990690118964459e+00 4.215173462619264e+00 4.738547962091570e+00 9.188481314124841e+03 + 113840 9.895887901706492e-01 -5.903434694432494e+00 -6.005479618149522e+00 4.260868319500625e+00 4.674910576116546e+00 9.233875152328470e+03 + 113860 1.048966657230630e+00 -5.990749914934770e+00 -6.032066354551847e+00 3.796463011992338e+00 4.559217622012713e+00 9.315745028844925e+03 + 113880 1.062813217444219e+00 -6.016250267686625e+00 -6.013531085179030e+00 3.624901237923049e+00 4.640515204673799e+00 9.258642322234353e+03 + 113900 1.064297881995743e+00 -6.027402136134818e+00 -5.994982802194350e+00 3.564899433865659e+00 4.751056266227535e+00 9.201644420571547e+03 + 113920 9.761201307631696e-01 -5.907371845776227e+00 -5.986126829497518e+00 4.212961810534922e+00 4.760738506712925e+00 9.174492515017480e+03 + 113940 1.039544062081106e+00 -6.009140901023782e+00 -5.942429233748474e+00 3.637408045404457e+00 5.020476762496428e+00 9.041143964566912e+03 + 113960 9.484686145912248e-01 -5.878978124037797e+00 -5.991558331540006e+00 4.336901459456993e+00 4.690448486248504e+00 9.191104857731812e+03 + 113980 1.029676243336075e+00 -6.002540007402444e+00 -5.988748661124262e+00 3.698245865745814e+00 4.777437910279071e+00 9.182548691917405e+03 + 114000 1.066307883086707e+00 -6.061825222391717e+00 -5.998154762467087e+00 3.429188673200099e+00 4.794794307059157e+00 9.211384432175719e+03 + 114020 1.012170639523084e+00 -5.987630761835677e+00 -6.006718790502893e+00 3.785567560416475e+00 4.675961145946433e+00 9.237670007925622e+03 + 114040 1.012237078285955e+00 -5.994303093949665e+00 -5.983109754365438e+00 3.746055180284045e+00 4.810329068340382e+00 9.165258430533475e+03 + 114060 9.350144896449656e-01 -5.886060327460289e+00 -5.977441102339642e+00 4.278759599296638e+00 4.754037048810178e+00 9.147911617177664e+03 + 114080 9.719676908691326e-01 -5.944628647863579e+00 -6.019507937752971e+00 3.979791900302450e+00 4.549823430224899e+00 9.277008756236615e+03 + 114100 1.013583477229469e+00 -6.008344761341019e+00 -6.048638400126632e+00 3.613311324749450e+00 4.381939015422009e+00 9.366962074901199e+03 + 114120 9.901444731932068e-01 -5.977666291252664e+00 -6.016113971587893e+00 3.832718189986429e+00 4.611945659742240e+00 9.266589798265566e+03 + 114140 1.032235740658200e+00 -6.046020510097127e+00 -5.991301816891938e+00 3.428112534107370e+00 4.742315738181970e+00 9.190362936041553e+03 + 114160 9.948893748952021e-01 -5.995203567197650e+00 -6.001309732131205e+00 3.680069525422533e+00 4.645006981448095e+00 9.221067897810097e+03 + 114180 1.019823091815238e+00 -6.037055497355435e+00 -6.003675659067570e+00 3.493200989618420e+00 4.684873186580623e+00 9.228354277821763e+03 + 114200 9.927523472731969e-01 -6.001886555768004e+00 -6.000871301956449e+00 3.699601495269073e+00 4.705431239765042e+00 9.219714799005984e+03 + 114220 9.881518014720707e-01 -5.999105537834663e+00 -6.014353490289971e+00 3.755373017441222e+00 4.667816914829828e+00 9.261144848628839e+03 + 114240 1.016040647686079e+00 -6.046078688703781e+00 -6.008284648340958e+00 3.484530939291102e+00 4.701550167663281e+00 9.242502889609605e+03 + 114260 9.751781568006535e-01 -5.993839546920234e+00 -6.034718446173386e+00 3.723275215074354e+00 4.488542249573539e+00 9.323945008990200e+03 + 114280 9.876600887134892e-01 -6.024058286045167e+00 -5.977606912714770e+00 3.591292811880153e+00 4.858023785870085e+00 9.148434469057462e+03 + 114300 9.279943874681172e-01 -5.949338161157915e+00 -6.033965396574587e+00 3.928322246600904e+00 4.442379564816020e+00 9.321594125027259e+03 + 114320 9.734212108341603e-01 -6.035755212052912e+00 -6.006358676607336e+00 3.479917681203690e+00 4.648717136831348e+00 9.236592121378399e+03 + 114340 9.361629312182546e-01 -6.005357420508593e+00 -6.016701253394597e+00 3.689740859460033e+00 4.624602815576132e+00 9.268381435668309e+03 + 114360 9.984797514065338e-01 -6.127002908136752e+00 -5.967393734568075e+00 3.021427430113635e+00 4.937928004184760e+00 9.117228372103360e+03 + 114380 9.241082874120187e-01 -6.041427376074948e+00 -6.001426924993354e+00 3.478574403426562e+00 4.708263183586870e+00 9.221445869778096e+03 + 114400 9.166734349945528e-01 -6.050490302696779e+00 -6.034686669706339e+00 3.425736104776600e+00 4.516483011012005e+00 9.323852760134369e+03 + 114420 9.540753625386068e-01 -6.121269248603554e+00 -6.024926797350015e+00 3.038316389226277e+00 4.591529653270244e+00 9.293748780272050e+03 + 114440 9.275624211784377e-01 -6.092232810000117e+00 -6.026063710235309e+00 3.190692915351534e+00 4.570646125836160e+00 9.297254529045198e+03 + 114460 9.089872402155654e-01 -6.069989882224721e+00 -6.026233653209098e+00 3.300682754539985e+00 4.551937792802253e+00 9.297745867675678e+03 + 114480 8.986883009650131e-01 -6.053128694530239e+00 -5.976536028998446e+00 3.438382181513641e+00 4.878189119673883e+00 9.145157543924655e+03 + 114500 9.208940798698924e-01 -6.072316822626412e+00 -5.973278380182093e+00 3.327350133968140e+00 4.896044196632853e+00 9.135197785179555e+03 + 114520 8.966062093835646e-01 -6.011746921298261e+00 -6.014028565573266e+00 3.627664831660042e+00 4.614563277149652e+00 9.260167896828483e+03 + 114540 9.608892047363230e-01 -6.074252966389166e+00 -5.964157827691939e+00 3.280149357758829e+00 4.912332681325958e+00 9.107351316924469e+03 + 114560 9.502408319328034e-01 -6.019586317047469e+00 -5.981799294730994e+00 3.571566052818150e+00 4.788544982482157e+00 9.161271532158804e+03 + 114580 9.455923257909551e-01 -5.972871550717184e+00 -6.001773832772233e+00 3.784723636583835e+00 4.618762260410051e+00 9.222476638644670e+03 + 114600 9.563933309029268e-01 -5.954140615221743e+00 -5.963092404350133e+00 3.935051155489298e+00 4.883648597029187e+00 9.104071673938362e+03 + 114620 1.017672937587490e+00 -6.013948626769524e+00 -5.946937230028477e+00 3.593030502860635e+00 4.977820312927859e+00 9.054869654368993e+03 + 114640 1.020235026499452e+00 -5.991650175413183e+00 -5.968294192919729e+00 3.733348544285944e+00 4.867462210089965e+00 9.119963191635075e+03 + 114660 1.053808936372456e+00 -6.022246529393220e+00 -5.983637615854693e+00 3.545676205649335e+00 4.767374561897613e+00 9.166877814024618e+03 + 114680 1.015713838451005e+00 -5.953462432481670e+00 -6.014695285795971e+00 3.876994835515561e+00 4.525386316031418e+00 9.262214763477059e+03 + 114700 1.030059648388689e+00 -5.968048713459213e+00 -5.973874180755219e+00 3.857110172618556e+00 4.823659437916739e+00 9.137015870492929e+03 + 114720 9.793141107051818e-01 -5.887369780889277e+00 -5.985430306145205e+00 4.313098656409311e+00 4.750019945572535e+00 9.172343807741343e+03 + 114740 1.108499395985057e+00 -6.075114843697733e+00 -6.000093925244825e+00 3.241162047854659e+00 4.671943771060866e+00 9.217346836853631e+03 + 114760 1.016146324555306e+00 -5.941145857503872e+00 -5.996700443007210e+00 4.028234058808827e+00 4.709231031804336e+00 9.206909578845509e+03 + 114780 9.826309191595709e-01 -5.896904889810783e+00 -5.986800985240579e+00 4.250689870221032e+00 4.734492578887337e+00 9.176543234676079e+03 + 114800 1.048980383213334e+00 -6.002343103405348e+00 -5.971510380634568e+00 3.656315587054283e+00 4.833361852552533e+00 9.129787268068190e+03 + 114820 1.038078191314808e+00 -5.995695368089716e+00 -5.973904551433509e+00 3.755913319357080e+00 4.881039560715004e+00 9.137103612939394e+03 + 114840 9.527878269645629e-01 -5.883972673083365e+00 -6.061480518915112e+00 4.304650666189980e+00 4.285373146173723e+00 9.406732078788484e+03 + 114860 9.960626330410667e-01 -5.967178513457945e+00 -6.011921673176140e+00 3.896209909328360e+00 4.639287762244897e+00 9.253670673006614e+03 + 114880 1.081120659509301e+00 -6.117591968362975e+00 -6.005213271947661e+00 3.032217089614806e+00 4.677512954978603e+00 9.233065521601533e+03 + 114900 9.787758914184822e-01 -5.997655224115322e+00 -5.980676598491577e+00 3.691303212385530e+00 4.788797108150893e+00 9.157836634988545e+03 + 114920 9.283767101323317e-01 -5.955261289235311e+00 -6.016348124292989e+00 3.918761611169657e+00 4.567991551111302e+00 9.267295803962159e+03 + 114940 1.026345801929841e+00 -6.135135516809947e+00 -5.972802142744204e+00 2.946834584639856e+00 4.878977939533806e+00 9.133763103588177e+03 + 114960 9.400767821929477e-01 -6.040557753068327e+00 -5.997109876116139e+00 3.497528286514969e+00 4.747012719511666e+00 9.208174389404181e+03 + 114980 9.885010925280846e-01 -6.141749569187684e+00 -5.958227129747263e+00 2.988387556371792e+00 5.042201803644407e+00 9.089263192756645e+03 + 115000 8.834215323562676e-01 -6.006872864851879e+00 -6.005780643701705e+00 3.715614382371887e+00 4.721886085236863e+00 9.234809068378914e+03 + 115020 9.549549783641625e-01 -6.127537038855931e+00 -5.982618982135310e+00 2.994285912555485e+00 4.826427820242092e+00 9.163784564085996e+03 + 115040 8.592618916115573e-01 -5.991862065445921e+00 -5.995848805626343e+00 3.793482348338149e+00 4.770589869276118e+00 9.204302220281879e+03 + 115060 9.320080535905721e-01 -6.095908460763058e+00 -6.001881851657872e+00 3.172232490280393e+00 4.712147830333098e+00 9.222841070180863e+03 + 115080 9.567206984977937e-01 -6.120077684817631e+00 -5.957980262893769e+00 3.085914238070239e+00 5.016702719252031e+00 9.088511216839581e+03 + 115100 9.471872311000249e-01 -6.085016008971603e+00 -5.953698216399283e+00 3.297917516958683e+00 5.051964603271676e+00 9.075461551603878e+03 + 115120 9.482362598984952e-01 -6.052592713485577e+00 -5.992649242470472e+00 3.409724154409125e+00 4.753928841200019e+00 9.194495313695998e+03 + 115140 9.743372325427673e-01 -6.043686264906296e+00 -5.983352708417082e+00 3.469170878217244e+00 4.815615496166003e+00 9.166018229652835e+03 + 115160 9.583947730061112e-01 -5.961692337913502e+00 -6.037234255746737e+00 3.918898432801710e+00 4.485125050529268e+00 9.331685233030992e+03 + 115180 1.064147524816131e+00 -6.071077005043684e+00 -5.996073644946865e+00 3.326504991298957e+00 4.757185891707352e+00 9.205021238707595e+03 + 115200 1.014640459285939e+00 -5.969012410925837e+00 -6.055921823832534e+00 3.858692366973360e+00 4.359645068874919e+00 9.389523599801134e+03 + 115220 1.047107614766458e+00 -6.007391141822769e+00 -6.004867718296127e+00 3.642953627330929e+00 4.657443515719432e+00 9.232012587299621e+03 + 115240 9.857833348907560e-01 -5.912062633728815e+00 -6.039547021018042e+00 4.146567079692435e+00 4.414531999732517e+00 9.338830670771045e+03 + 115260 9.591776272920423e-01 -5.870192902755024e+00 -6.056994734140273e+00 4.363384560334058e+00 4.290739537029980e+00 9.392800240077355e+03 + 115280 1.021707102147088e+00 -5.963514348278387e+00 -6.034667604770119e+00 3.914971939090261e+00 4.506398929383883e+00 9.323760258369812e+03 + 115300 1.037676506747221e+00 -5.992867576270299e+00 -5.984848299384214e+00 3.680310804249008e+00 4.726358733107992e+00 9.170580429817463e+03 + 115320 9.438804585287131e-01 -5.860159340862808e+00 -6.010139820088994e+00 4.457289598588893e+00 4.596078477467983e+00 9.248148779375824e+03 + 115340 1.050431760987665e+00 -6.025257773167056e+00 -5.987941719070170e+00 3.553958695176375e+00 4.768233252441403e+00 9.180054852839552e+03 + 115360 1.008541291486394e+00 -5.971656023748833e+00 -5.987165607302178e+00 3.870278953164454e+00 4.781220524300849e+00 9.177697531446167e+03 + 115380 1.015738559087593e+00 -5.993322767808143e+00 -6.022625843679510e+00 3.713344778081967e+00 4.545081981792244e+00 9.286644337549245e+03 + 115400 1.015246062446513e+00 -6.007329937363013e+00 -5.990639000783538e+00 3.695789259446718e+00 4.791631200200152e+00 9.188314129706625e+03 + 115420 9.841562442887188e-01 -5.976137400752878e+00 -5.984919251867787e+00 3.750829832183318e+00 4.700403084094444e+00 9.170801773195339e+03 + 115440 9.880231411850198e-01 -5.996630605481924e+00 -5.976635420343206e+00 3.673838711002735e+00 4.788654158314150e+00 9.145466849722154e+03 + 115460 9.752524880071806e-01 -5.993058197850645e+00 -6.010190639472415e+00 3.738381426797157e+00 4.640004295768178e+00 9.248351295833612e+03 + 115480 9.436185103465057e-01 -5.962555171852312e+00 -6.016121708828805e+00 3.840893553730930e+00 4.533306209017103e+00 9.266604602444208e+03 + 115500 9.804783019172608e-01 -6.031567085509149e+00 -5.956503363857028e+00 3.491328736146496e+00 4.922356241946362e+00 9.084000041968580e+03 + 115520 9.530795407708276e-01 -6.000702609419029e+00 -5.987602615052773e+00 3.672332783482519e+00 4.747554978351141e+00 9.179019315910158e+03 + 115540 9.540717821534227e-01 -6.010568525848295e+00 -5.965844467687583e+00 3.670920331787683e+00 4.927732794772123e+00 9.112465492530175e+03 + 115560 9.949636579114209e-01 -6.075100980480340e+00 -5.940154363781765e+00 3.325671634574419e+00 5.100555990579073e+00 9.034244913495635e+03 + 115580 9.297839995398247e-01 -5.978027671462576e+00 -6.007196339566519e+00 3.792812273463076e+00 4.625321267373435e+00 9.239142776757682e+03 + 115600 9.639335458411719e-01 -6.023247159630619e+00 -5.984988450917092e+00 3.649683618375769e+00 4.869371044324883e+00 9.171008814161987e+03 + 115620 9.480967712461127e-01 -5.988543217298493e+00 -6.022464986277821e+00 3.708166852017379e+00 4.513382805161293e+00 9.286123919874937e+03 + 115640 1.042438018655239e+00 -6.109874242786559e+00 -5.991821774739281e+00 3.144994398002097e+00 4.822869938089960e+00 9.191960403872252e+03 + 115660 1.018887999443309e+00 -6.050610105719376e+00 -5.967598656566055e+00 3.453854449535156e+00 4.930519036553761e+00 9.117823109267441e+03 + 115680 9.487654957513630e-01 -5.917013053151931e+00 -6.007032329143553e+00 4.164626401546617e+00 4.647721788364783e+00 9.238628725889652e+03 + 115700 1.040901516783207e+00 -6.016174830560059e+00 -6.001227972569668e+00 3.655180409127131e+00 4.741007580726753e+00 9.220814342989204e+03 + 115720 9.606821142364232e-01 -5.855274460834777e+00 -6.044010338293592e+00 4.446254864560195e+00 4.362504249409036e+00 9.352634635265116e+03 + 115740 1.029437107508960e+00 -5.925006379131222e+00 -5.987520424766698e+00 4.146357103235551e+00 4.787391779179353e+00 9.178731503562047e+03 + 115760 1.014149354863711e+00 -5.874227885726721e+00 -6.009785167258727e+00 4.366167358575662e+00 4.587776470597362e+00 9.247045896079777e+03 + 115780 1.017116764201322e+00 -5.856876060510993e+00 -6.007404757166368e+00 4.419007075188560e+00 4.554648004752872e+00 9.239777791416844e+03 + 115800 1.012735111060968e+00 -5.835870580121798e+00 -6.012399074623852e+00 4.535660097907845e+00 4.522006164780817e+00 9.255133692615505e+03 + 115820 1.170518950811654e+00 -6.064140041024768e+00 -5.983058672898705e+00 3.378763620691427e+00 4.844345383772446e+00 9.165096517481221e+03 + 115840 1.034656926129742e+00 -5.864922979611455e+00 -6.070061330043547e+00 4.372211779724497e+00 4.194275626486290e+00 9.433375545928182e+03 + 115860 1.095003936590017e+00 -5.969061918365272e+00 -6.030963749230336e+00 3.865432657867212e+00 4.509982765762647e+00 9.312341018041341e+03 + 115880 1.078070748096137e+00 -5.967023903467777e+00 -6.008720893669721e+00 3.866926565920028e+00 4.627495995592089e+00 9.243827286178506e+03 + 115900 1.011272421882629e+00 -5.894759840516242e+00 -6.044648988686859e+00 4.248145875205964e+00 4.387459191139569e+00 9.354632598468424e+03 + 115920 1.043937370141305e+00 -5.974455494652282e+00 -6.004310164289635e+00 3.873747378903924e+00 4.702317245851049e+00 9.230301892447762e+03 + 115940 1.067011174816118e+00 -6.041320566213418e+00 -5.999701838839933e+00 3.458441320306593e+00 4.697422493362390e+00 9.216142520064024e+03 + 115960 9.643450360660034e-01 -5.917743413688360e+00 -6.029097557743211e+00 4.115985746488250e+00 4.476573019327193e+00 9.306582907655260e+03 + 115980 1.088064829723041e+00 -6.123466501493525e+00 -5.991126345086427e+00 3.034643513922958e+00 4.794561171585528e+00 9.189844968956248e+03 + 116000 1.033387675375136e+00 -6.059786536920257e+00 -5.994549048114811e+00 3.328204709877401e+00 4.702808466067040e+00 9.200341580300283e+03 + 116020 9.785946186880802e-01 -5.989097244366237e+00 -5.976450910693567e+00 3.814164029902732e+00 4.886781234865019e+00 9.144887726618370e+03 + 116040 9.514850458164700e-01 -5.953463954575531e+00 -5.976331008370617e+00 4.000089061374666e+00 4.868782899818141e+00 9.144523579477236e+03 + 116060 1.039764590501407e+00 -6.085239567253772e+00 -5.975966672743402e+00 3.239007489959272e+00 4.866469360163590e+00 9.143415497383236e+03 + 116080 9.960802880312504e-01 -6.020254613423849e+00 -5.982006594211126e+00 3.606220298940502e+00 4.825846344121803e+00 9.161896507628362e+03 + 116100 9.714445294071716e-01 -5.982960629040862e+00 -6.018037095958313e+00 3.764085936746340e+00 4.562671435640628e+00 9.272478633490437e+03 + 116120 1.009492528157944e+00 -6.038352479995139e+00 -5.988820358988263e+00 3.523304505141495e+00 4.807725609033933e+00 9.182742282289497e+03 + 116140 9.676618566306859e-01 -5.973027191594312e+00 -6.006269204677215e+00 3.889496322863025e+00 4.698615539556093e+00 9.236290220950219e+03 + 116160 1.008695896085540e+00 -6.029795834669740e+00 -6.040308472037577e+00 3.492444963619524e+00 4.432079773028031e+00 9.341190307462442e+03 + 116180 9.517834145329869e-01 -5.942363835215330e+00 -6.006813196306891e+00 3.986368747846018e+00 4.616290542951878e+00 9.237989739064065e+03 + 116200 1.017708202102336e+00 -6.036094392343434e+00 -5.980887343483572e+00 3.508817440041750e+00 4.825824857858273e+00 9.158447362315630e+03 + 116220 1.028367491090283e+00 -6.043791639845765e+00 -5.970683941349794e+00 3.479553343285197e+00 4.899349061428843e+00 9.127262665324412e+03 + 116240 1.043722768071879e+00 -6.056331016278384e+00 -6.025564856140670e+00 3.365019678567140e+00 4.541683731125787e+00 9.295703571246560e+03 + 116260 1.012807112838662e+00 -6.003091514198823e+00 -5.978276695835172e+00 3.747321122738541e+00 4.889811649863353e+00 9.150460588867063e+03 + 116280 9.942655052574523e-01 -5.967694490598584e+00 -5.989176997226503e+00 3.834617936570754e+00 4.711262059106088e+00 9.183828177359288e+03 + 116300 1.031924077008616e+00 -6.012643917196432e+00 -5.965322626480939e+00 3.655530726104838e+00 4.927256900339271e+00 9.110875830043617e+03 + 116320 1.008041245142796e+00 -5.961067517537677e+00 -5.986786804728370e+00 3.853502691148699e+00 4.705818564052913e+00 9.176523956134368e+03 + 116340 9.409537124398405e-01 -5.841789678070485e+00 -6.006412624391139e+00 4.538914107145677e+00 4.593623674053873e+00 9.236719549013169e+03 + 116360 1.072476661301755e+00 -6.010719768889916e+00 -5.988281293954523e+00 3.605005539921596e+00 4.733850735343401e+00 9.181072713690097e+03 + 116380 1.044022024029085e+00 -5.940270506448853e+00 -6.041101195005786e+00 4.003063979782132e+00 4.424078562589602e+00 9.343629202915774e+03 + 116400 1.049265217517751e+00 -5.921917352007418e+00 -6.039049243625064e+00 4.132116731780901e+00 4.459527284010733e+00 9.337304196021254e+03 + 116420 1.073192888191340e+00 -5.936214248138818e+00 -6.003412514717658e+00 4.038918661175243e+00 4.653055815581404e+00 9.227510205491260e+03 + 116440 1.019625005980592e+00 -5.839386146790162e+00 -6.006789052219171e+00 4.556159924264040e+00 4.594906535774784e+00 9.237890506867518e+03 + 116460 1.103386191196567e+00 -5.950861143794795e+00 -5.982606380164641e+00 3.919127152267765e+00 4.736841092472662e+00 9.163716221106220e+03 + 116480 1.072060002622780e+00 -5.899754782717357e+00 -6.017077005636457e+00 4.188389815437967e+00 4.514707455881173e+00 9.269524702456865e+03 + 116500 1.045461037023100e+00 -5.865693579045712e+00 -5.997981784582144e+00 4.362778816712489e+00 4.603159468988648e+00 9.210850823800354e+03 + 116520 1.053469254254188e+00 -5.892053156929113e+00 -6.043468726457377e+00 4.240671971794660e+00 4.371220340079712e+00 9.350942831996854e+03 + 116540 1.053728489177857e+00 -5.922057817436824e+00 -6.034457593784229e+00 4.012197383312949e+00 4.366780473716976e+00 9.323142037918074e+03 + 116560 1.032456421984583e+00 -5.931264470763884e+00 -5.994003877829137e+00 4.113892781999703e+00 4.753633397739157e+00 9.198637555699508e+03 + 116580 1.039541768468787e+00 -5.988975660631413e+00 -6.001078883795102e+00 3.730651353645138e+00 4.661152773271503e+00 9.220374363680794e+03 + 116600 9.873156677098063e-01 -5.960662256739040e+00 -6.025647405518265e+00 3.958257733925044e+00 4.585102953215459e+00 9.295949957579354e+03 + 116620 9.657077365528421e-01 -5.970051732053412e+00 -6.022912402982556e+00 3.822717793143451e+00 4.519183640505923e+00 9.287532836591818e+03 + 116640 9.933835587044351e-01 -6.040054547296645e+00 -5.956861346036595e+00 3.470432025287518e+00 4.948140261029015e+00 9.085096767830335e+03 + 116660 9.761389564745441e-01 -6.031789821300817e+00 -5.964131132956225e+00 3.526495909376592e+00 4.915002567999422e+00 9.107262551670538e+03 + 116680 9.572114461779270e-01 -6.012079808945248e+00 -5.975894482414008e+00 3.645067506182837e+00 4.852849250786399e+00 9.143201584551931e+03 + 116700 9.944324333378241e-01 -6.070948890846939e+00 -5.968703456808879e+00 3.277534693158460e+00 4.864643797834782e+00 9.121230306062438e+03 + 116720 9.995939724219163e-01 -6.079566992873889e+00 -5.975785148917851e+00 3.254294732511103e+00 4.850226140695121e+00 9.142862943271792e+03 + 116740 8.897255409531052e-01 -5.913516551247483e+00 -5.992532654803013e+00 4.172935632087674e+00 4.719212937769313e+00 9.194131787429304e+03 + 116760 9.972398235502927e-01 -6.066703627336899e+00 -5.967969125921997e+00 3.320589703803895e+00 4.887538490042978e+00 9.118976419451099e+03 + 116780 9.926142643944144e-01 -6.048877030190331e+00 -5.949253770330269e+00 3.473045286096995e+00 5.045097460863105e+00 9.061892486319231e+03 + 116800 9.810225745183545e-01 -6.015669608224197e+00 -5.938028205725429e+00 3.652496752053394e+00 5.098325700169529e+00 9.027737930149335e+03 + 116820 9.987788759341455e-01 -6.020928360764763e+00 -5.951962282530255e+00 3.575056235103392e+00 4.971070128792050e+00 9.070123967211910e+03 + 116840 1.017132390619726e+00 -6.022944509761514e+00 -5.980529269197053e+00 3.579493423145672e+00 4.823048298204074e+00 9.157389247902756e+03 + 116860 1.019093091182523e+00 -6.000061576498825e+00 -6.017640683168911e+00 3.725501839385647e+00 4.624559888528049e+00 9.271290929026731e+03 + 116880 1.040255247646033e+00 -6.009315323031635e+00 -5.992611256473393e+00 3.634449041917962e+00 4.730366377041334e+00 9.194392827096890e+03 + 116900 9.966962228056524e-01 -5.923598459634197e+00 -6.027835830085975e+00 4.129273227301198e+00 4.530726115486141e+00 9.302692716551694e+03 + 116920 1.048492985579146e+00 -5.981457433527139e+00 -6.026763010649043e+00 3.759413446389986e+00 4.499261811540610e+00 9.299406260659001e+03 + 116940 1.060771373283035e+00 -5.984673722303466e+00 -6.027610086071554e+00 3.797513063021247e+00 4.550965817884061e+00 9.302006012155904e+03 + 116960 1.046453271770854e+00 -5.952496011435958e+00 -6.031370198622566e+00 3.922561525182890e+00 4.469653736616363e+00 9.313612025122464e+03 + 116980 9.437828899778862e-01 -5.794223206093804e+00 -6.081873845677235e+00 4.758476319167107e+00 4.106741832886434e+00 9.470076965038646e+03 + 117000 1.064323711925915e+00 -5.971468638942650e+00 -6.006503079820772e+00 3.886332647672225e+00 4.685159466587844e+00 9.237018870591975e+03 + 117020 1.048440641917193e+00 -5.952869544003237e+00 -5.963512550723605e+00 3.992544186514411e+00 4.931430394926092e+00 9.105363386071334e+03 + 117040 1.037307114113973e+00 -5.950139792788513e+00 -5.961962114944413e+00 4.002137849545965e+00 4.934252246228346e+00 9.100626497206735e+03 + 117060 1.075589953794093e+00 -6.031835480687388e+00 -5.975442931186504e+00 3.514171837915462e+00 4.837986583868368e+00 9.141781909330641e+03 + 117080 1.032723977845200e+00 -6.010302590798491e+00 -5.976475099132177e+00 3.639766542094327e+00 4.834009234029722e+00 9.144958778617451e+03 + 117100 1.034516294208371e+00 -6.064843640002308e+00 -5.951161771162434e+00 3.333325957024317e+00 4.986104840115218e+00 9.067734814175739e+03 + 117120 9.389449826201208e-01 -5.970916782393086e+00 -5.950240400431293e+00 3.846638358098454e+00 4.965365342982836e+00 9.064913765668685e+03 + 117140 9.252591261914351e-01 -5.982741604506430e+00 -6.000075621963742e+00 3.798946936802576e+00 4.699412326132157e+00 9.217269213525144e+03 + 117160 9.783289335963294e-01 -6.087680099740122e+00 -6.035780094834145e+00 3.236166318026546e+00 4.534184177696467e+00 9.327230626498222e+03 + 117180 1.006024876656017e+00 -6.149647124956381e+00 -5.989587252934861e+00 2.910120561063373e+00 4.829209115396090e+00 9.185130484999625e+03 + 117200 9.510072191629886e-01 -6.083551184042386e+00 -5.968680047924352e+00 3.286142423982519e+00 4.945750263823132e+00 9.121165927475135e+03 + 117220 9.231876776640099e-01 -6.048800666127390e+00 -5.992309863223957e+00 3.432285947302958e+00 4.756664879497967e+00 9.193455877459695e+03 + 117240 9.306826347135327e-01 -6.059353123097426e+00 -5.963016724789786e+00 3.399058673484963e+00 4.952237180576891e+00 9.103843181156324e+03 + 117260 9.317587411377446e-01 -6.051682800861915e+00 -6.002380698259870e+00 3.392130099304423e+00 4.675230401921088e+00 9.224357902873744e+03 + 117280 9.716585658561268e-01 -6.093542693728925e+00 -6.005205099713335e+00 3.194746344887100e+00 4.701994479923110e+00 9.233043402584408e+03 + 117300 9.386762536310346e-01 -6.022973055408730e+00 -6.018619286218368e+00 3.541843331951211e+00 4.566843348385877e+00 9.274287318385477e+03 + 117320 9.452315975015501e-01 -6.006239178941293e+00 -6.020770465533737e+00 3.685746936664436e+00 4.602306040341293e+00 9.280901784527985e+03 + 117340 1.024442064970245e+00 -6.091657846651398e+00 -6.017060202034472e+00 3.159823407967154e+00 4.588174627305739e+00 9.269513655303006e+03 + 117360 1.016964144511234e+00 -6.047732546082608e+00 -6.004847528206733e+00 3.415386057379463e+00 4.661638466457806e+00 9.231967363334776e+03 + 117380 9.398945371167075e-01 -5.904617860472987e+00 -6.073826141337795e+00 4.174099117258984e+00 4.202478983636420e+00 9.445074916063286e+03 + 117400 1.016754500209377e+00 -5.994719983483062e+00 -5.997076731501375e+00 3.744706726765082e+00 4.731173914938353e+00 9.208086269475451e+03 + 117420 1.018526404776933e+00 -5.978651156659331e+00 -5.972969655283704e+00 3.854130344721075e+00 4.886754404829420e+00 9.134212261129929e+03 + 117440 9.777422815375661e-01 -5.901617076967483e+00 -5.977013528594640e+00 4.234629738442059e+00 4.801691645635746e+00 9.146590919615559e+03 + 117460 1.062373462573286e+00 -6.011946939451743e+00 -5.984909226120572e+00 3.671922619137598e+00 4.827177353157796e+00 9.170748572651444e+03 + 117480 1.028045525452645e+00 -5.952607979437065e+00 -6.036181860466220e+00 3.937572714511551e+00 4.457678556625855e+00 9.328477696994143e+03 + 117500 1.046946236957465e+00 -5.978830262183782e+00 -6.007608523747901e+00 3.774524351042687e+00 4.609275119719928e+00 9.240433098433372e+03 + 117520 1.081616552028150e+00 -6.033559666345199e+00 -5.988393843304515e+00 3.504501441680991e+00 4.763850586969125e+00 9.181450749771073e+03 + 117540 1.023708216985228e+00 -5.954455911899202e+00 -6.008638354901791e+00 3.962900514502889e+00 4.651776542076063e+00 9.243580287689605e+03 + 117560 9.817004510367817e-01 -5.900033705991992e+00 -6.022835605630370e+00 4.223762434397046e+00 4.518614923140926e+00 9.287276762095184e+03 + 117580 1.030530025756691e+00 -5.982368292555132e+00 -6.024442365794817e+00 3.793726953011785e+00 4.552131113527722e+00 9.292225608177207e+03 + 117600 1.021521196859552e+00 -5.980761381499108e+00 -5.953884259549032e+00 3.795842913070880e+00 4.950175506529400e+00 9.076021143810143e+03 + 117620 1.008182969678753e+00 -5.970735068951048e+00 -6.033773024222120e+00 3.820683848396321e+00 4.458710154137771e+00 9.320990385984995e+03 + 117640 1.023934992188604e+00 -6.004661560747802e+00 -6.045549848029722e+00 3.632697947143834e+00 4.397911074129039e+00 9.357415417429695e+03 + 117660 9.906564477966516e-01 -5.967191575835892e+00 -6.025929667172853e+00 3.846294334557137e+00 4.509011124410054e+00 9.296823636274286e+03 + 117680 1.016313157343738e+00 -6.014422600071851e+00 -5.998861282768441e+00 3.659292646319325e+00 4.748648138381570e+00 9.213545904880622e+03 + 117700 1.004825514032385e+00 -6.005360586164500e+00 -6.017813307054229e+00 3.664274783253284e+00 4.592769332852125e+00 9.271847414452574e+03 + 117720 9.848351487743031e-01 -5.984369224012574e+00 -6.015102455928935e+00 3.811956500841412e+00 4.635481527225397e+00 9.263473756097141e+03 + 117740 1.009824820968522e+00 -6.028107975927067e+00 -5.976571283766972e+00 3.550739939129321e+00 4.846671600789921e+00 9.145267668154174e+03 + 117760 9.770503092455800e-01 -5.982573411563711e+00 -5.944771886714035e+00 3.744526744753105e+00 4.961588950207013e+00 9.048293094906574e+03 + 117780 1.022674488990937e+00 -6.050832085431693e+00 -5.981365382693046e+00 3.416860950728271e+00 4.815749507791086e+00 9.159922976172418e+03 + 117800 9.605882420328691e-01 -5.957637749050926e+00 -5.979320860381005e+00 3.954198538658612e+00 4.829690757950667e+00 9.153679054153059e+03 + 117820 9.905880406339654e-01 -6.000154443202830e+00 -5.982308235724791e+00 3.679470821404652e+00 4.781946506435231e+00 9.162812116796073e+03 + 117840 1.023903637669987e+00 -6.045591941369020e+00 -6.025575427372086e+00 3.449435745588645e+00 4.564373666504570e+00 9.295742103776434e+03 + 117860 1.063399245010372e+00 -6.103496711821144e+00 -5.988922211480329e+00 3.161751138354283e+00 4.819655649657872e+00 9.183086599769513e+03 + 117880 9.700071611769269e-01 -5.965011227788874e+00 -6.066753187116138e+00 3.823525542987692e+00 4.239307468013219e+00 9.423107221767648e+03 + 117900 9.891980383558744e-01 -5.994297152182673e+00 -6.043311024116164e+00 3.696339942346094e+00 4.414894704831818e+00 9.350495899902320e+03 + 117920 9.973663288291963e-01 -6.008580709612805e+00 -5.997414744684149e+00 3.718706904855870e+00 4.782823603403701e+00 9.209113906287968e+03 + 117940 1.069098733835710e+00 -6.116149043951585e+00 -5.958959637332848e+00 3.067878792682626e+00 4.970484690469473e+00 9.091499092324408e+03 + 117960 9.946673407547539e-01 -6.005886811375037e+00 -5.990249309115637e+00 3.688001162547017e+00 4.777794120416145e+00 9.187152720206697e+03 + 117980 1.005801962017413e+00 -6.022445290705143e+00 -5.998737730783256e+00 3.618609329902131e+00 4.754741807706642e+00 9.213165806416162e+03 + 118000 9.644869017462095e-01 -5.961993208338587e+00 -6.004837475538467e+00 3.903680560474244e+00 4.657662148083615e+00 9.231877029215009e+03 + 118020 1.053881009480344e+00 -6.092679350248816e+00 -5.962278383260800e+00 3.212584763985268e+00 4.961367295914876e+00 9.101602551952741e+03 + 118040 1.005852498057892e+00 -6.018676798494393e+00 -5.956065678634719e+00 3.582466795855784e+00 4.941989535129517e+00 9.082679794803493e+03 + 118060 9.751281235783067e-01 -5.967767205572165e+00 -5.989321303566666e+00 3.846958153375676e+00 4.723191187205364e+00 9.184271293336313e+03 + 118080 9.974309641935319e-01 -5.990644469980932e+00 -5.973583634292758e+00 3.777706222121703e+00 4.875672180798989e+00 9.136134759009492e+03 + 118100 1.090947504128428e+00 -6.110873337958210e+00 -5.962983735383422e+00 3.130797434489181e+00 4.980002418315646e+00 9.103776634812151e+03 + 118120 9.785537472955326e-01 -5.916149544140516e+00 -6.026480701012447e+00 4.160847733201043e+00 4.527309156751063e+00 9.298524341281332e+03 + 118140 1.043335798399435e+00 -5.974961412902997e+00 -6.011816604206745e+00 3.839614781149243e+00 4.627986569360697e+00 9.253369962259601e+03 + 118160 1.021372262003668e+00 -5.901431797961940e+00 -6.039725734082755e+00 4.157121457636136e+00 4.363016275512964e+00 9.339400139918887e+03 + 118180 1.084980600560377e+00 -5.954112370256652e+00 -6.024837402483422e+00 3.946646835121381e+00 4.540532755411899e+00 9.293445045875289e+03 + 118200 1.053339239431311e+00 -5.874638062457914e+00 -6.023543355459802e+00 4.354923760806028e+00 4.499886525369571e+00 9.289428060904611e+03 + 118220 1.038059513186960e+00 -5.827582260573252e+00 -6.045953188414441e+00 4.634437723044173e+00 4.380518062588197e+00 9.358619119869134e+03 + 118240 1.077868981135081e+00 -5.872531120676185e+00 -6.010202795009147e+00 4.359289471476361e+00 4.568757412833743e+00 9.248383145830470e+03 + 118260 1.082258392370619e+00 -5.876333103027513e+00 -6.027436030939117e+00 4.352149003949836e+00 4.484492608778884e+00 9.301443237223250e+03 + 118280 1.093984639201599e+00 -5.902300365247637e+00 -6.048988156136660e+00 4.199744376029367e+00 4.357440380882321e+00 9.368033513403001e+03 + 118300 1.119420010381261e+00 -5.961197110514972e+00 -6.046084068171831e+00 3.887326543704382e+00 4.399892496624450e+00 9.359065307264975e+03 + 118320 1.035577054050773e+00 -5.872796825887748e+00 -6.029017660401832e+00 4.336859630819101e+00 4.439815423943219e+00 9.306338217944796e+03 + 118340 1.070370816184554e+00 -5.966587115711421e+00 -5.997520761844828e+00 3.840999602950135e+00 4.663373819885845e+00 9.209445644793284e+03 + 118360 1.063043451433431e+00 -5.998952553479958e+00 -5.990675729710825e+00 3.759450553158497e+00 4.806977356075203e+00 9.188435609378637e+03 + 118380 1.082782818579330e+00 -6.066952214046174e+00 -5.971346132868490e+00 3.391836538467955e+00 4.940821451583464e+00 9.129305760935295e+03 + 118400 1.019721695188557e+00 -6.005589098364631e+00 -6.015713678046762e+00 3.637107013308367e+00 4.578970109999929e+00 9.265343824615929e+03 + 118420 9.612278062434214e-01 -5.942906881488238e+00 -5.975698543208297e+00 4.027594541187806e+00 4.839299745097978e+00 9.142564907459300e+03 + 118440 9.500334787377748e-01 -5.939597084485795e+00 -5.960916705114828e+00 4.019560210343140e+00 4.897139649490605e+00 9.097415930998406e+03 + 118460 9.598236961028992e-01 -5.960587487794002e+00 -5.999564925716527e+00 3.895789700073314e+00 4.671975219783153e+00 9.215691713397713e+03 + 118480 9.821689481661605e-01 -5.997146122014480e+00 -6.032593655378914e+00 3.685372518201096e+00 4.481827296134459e+00 9.317372490287435e+03 + 118500 1.017659075833954e+00 -6.053073511285338e+00 -5.974795958249002e+00 3.429495182077789e+00 4.878977005024615e+00 9.139819300789299e+03 + 118520 9.789319162224951e-01 -5.997662107465493e+00 -6.002288997906848e+00 3.676920852716196e+00 4.650352531792956e+00 9.224074075815050e+03 + 118540 9.441252543553389e-01 -5.946898429481081e+00 -6.002763887471695e+00 3.948953551291559e+00 4.628165446357769e+00 9.225546383423358e+03 + 118560 9.444197941896267e-01 -5.946423776776107e+00 -5.998974571402130e+00 3.969351943415451e+00 4.667597148463639e+00 9.213903616156613e+03 + 118580 9.230215215408252e-01 -5.910757139503366e+00 -6.039794504462388e+00 4.120091482064391e+00 4.379138964001992e+00 9.339580513349309e+03 + 118600 9.766415970172142e-01 -5.983461592674682e+00 -6.028858892394627e+00 3.747835802683749e+00 4.487157482482397e+00 9.305843856232210e+03 + 118620 9.618630342645450e-01 -5.953927971748611e+00 -5.996246835478627e+00 3.940855434154698e+00 4.697853969793949e+00 9.205531662701836e+03 + 118640 1.061055517528551e+00 -6.090344130780484e+00 -5.953599499650275e+00 3.205345973524770e+00 4.990554806637707e+00 9.075159765913408e+03 + 118660 9.813143517955251e-01 -5.957609041930416e+00 -6.009066575762202e+00 3.900080340047009e+00 4.604603217757270e+00 9.244890716647775e+03 + 118680 9.774807857140498e-01 -5.933154525523556e+00 -6.056552226957201e+00 4.016989407770036e+00 4.308420710405463e+00 9.391470818362141e+03 + 118700 1.012181975804859e+00 -5.963966904261444e+00 -6.016698532986031e+00 3.928272819949670e+00 4.625479647619916e+00 9.268382255066042e+03 + 118720 1.048467644196004e+00 -5.994792144485714e+00 -5.963919295339781e+00 3.755575098479476e+00 4.932851775833387e+00 9.106607296851336e+03 + 118740 9.621601254253962e-01 -5.838861466673560e+00 -6.054171021996164e+00 4.490167316957418e+00 4.253826531249022e+00 9.384076259229963e+03 + 118760 1.022663345686638e+00 -5.896445365466867e+00 -6.005596897378934e+00 4.219882252454172e+00 4.593117265070108e+00 9.234245405908194e+03 + 118780 1.091905294434476e+00 -5.967450714184237e+00 -5.995667399133255e+00 3.851120005614004e+00 4.689095434118858e+00 9.203753511436422e+03 + 118800 1.105894341726343e+00 -5.960400050441329e+00 -5.973169685580629e+00 3.907455244593421e+00 4.834130023528912e+00 9.134871253778794e+03 + 118820 1.033995382787784e+00 -5.830496278708402e+00 -5.978438603059751e+00 4.624427496552306e+00 4.774919776126156e+00 9.150948894231547e+03 + 118840 1.029531929933350e+00 -5.808015894148141e+00 -5.999381901622986e+00 4.720284037788677e+00 4.621430809074166e+00 9.215057353470878e+03 + 118860 1.022627998416774e+00 -5.787503977981503e+00 -6.034077989898704e+00 4.807406336348601e+00 4.391540202715006e+00 9.321913526674654e+03 + 118880 1.067706350577648e+00 -5.852887367700749e+00 -6.018746855234044e+00 4.474999475595049e+00 4.522608631506126e+00 9.274671329961711e+03 + 118900 1.094482487644117e+00 -5.901829217858737e+00 -6.015619349722012e+00 4.201674656199865e+00 4.548274110074948e+00 9.265063356841934e+03 + 118920 1.046215537030257e+00 -5.855847717068345e+00 -6.057716748548330e+00 4.397715121131274e+00 4.238551903241536e+00 9.395056461226939e+03 + 118940 1.051801485549865e+00 -5.904649308924698e+00 -6.011287973707836e+00 4.270415774627068e+00 4.658080059162250e+00 9.251702457469401e+03 + 118960 1.051537164666735e+00 -5.963079011361590e+00 -6.042911089334742e+00 3.905250347711958e+00 4.446842202015985e+00 9.349236598436273e+03 + 118980 1.101372786360149e+00 -6.099418561863858e+00 -5.993866325046751e+00 3.172384101537966e+00 4.778481379497653e+00 9.198228404359643e+03 + 119000 9.787017947532939e-01 -5.965887984527672e+00 -5.990482330256977e+00 3.890341952053427e+00 4.749117412913054e+00 9.187833930393792e+03 + 119020 9.718739350630375e-01 -5.982878895035639e+00 -5.979455873459942e+00 3.800222155344980e+00 4.819877674943506e+00 9.154094072148553e+03 + 119040 9.959476988947367e-01 -6.035818943180775e+00 -6.015451037576483e+00 3.459914015820754e+00 4.576869681723808e+00 9.264540403101189e+03 + 119060 9.441735486967399e-01 -5.971306339032348e+00 -6.025378192094603e+00 3.867915987191986e+00 4.557427039316297e+00 9.295106667670014e+03 + 119080 9.646111681234880e-01 -6.009348330778705e+00 -5.987410726850596e+00 3.634781436179135e+00 4.760750552767571e+00 9.178429129691185e+03 + 119100 9.687033226158710e-01 -6.018206608228263e+00 -5.986877981631500e+00 3.603441031344647e+00 4.783334853352552e+00 9.176812410284261e+03 + 119120 9.913277437143768e-01 -6.051223456661309e+00 -6.007927435200540e+00 3.381200081635337e+00 4.629812536900740e+00 9.241406151544445e+03 + 119140 9.744375273015720e-01 -6.022566518401194e+00 -5.995028335741658e+00 3.598477582279503e+00 4.756606088630554e+00 9.201787067141842e+03 + 119160 9.672882875773989e-01 -6.004713542761245e+00 -6.069061620250451e+00 3.595588970766932e+00 4.226092351991110e+00 9.430289291387066e+03 + 119180 9.640402228800465e-01 -5.994653019978194e+00 -6.020054534787910e+00 3.743353924420115e+00 4.597494495511011e+00 9.278727963303209e+03 + 119200 9.701028690226848e-01 -5.996103944082622e+00 -5.989743771242654e+00 3.687337672677878e+00 4.723858769358532e+00 9.185604427267479e+03 + 119220 9.071425906576737e-01 -5.889851523297735e+00 -6.011005911236879e+00 4.325688906067585e+00 4.630001661940081e+00 9.250834757771538e+03 + 119240 1.022591914700804e+00 -6.043133774327776e+00 -6.001301171734392e+00 3.503763959907413e+00 4.743973237572956e+00 9.221045736920498e+03 + 119260 1.032606150698166e+00 -6.036364900963767e+00 -6.006401776625513e+00 3.500290232551062e+00 4.672343129279827e+00 9.236707469055640e+03 + 119280 9.653283936596306e-01 -5.916661696388465e+00 -5.979892800663007e+00 4.139057313569285e+00 4.775974527843100e+00 9.155427021797033e+03 + 119300 1.079395425118725e+00 -6.062511429907402e+00 -5.989268986263320e+00 3.355340468590154e+00 4.775909914225998e+00 9.184118259596942e+03 + 119320 9.872464355997044e-01 -5.900069166567526e+00 -6.015759911123266e+00 4.259667613541680e+00 4.595353455217766e+00 9.265493146463197e+03 + 119340 1.084171954331391e+00 -6.017969263118533e+00 -6.024623044167509e+00 3.543096398197562e+00 4.504889357745052e+00 9.292788388176126e+03 + 119360 1.063759262406174e+00 -5.965665670442225e+00 -6.052372244564682e+00 3.881331379319267e+00 4.383448812909137e+00 9.378529729092466e+03 + 119380 1.116788057069645e+00 -6.029946478481005e+00 -6.011552909362325e+00 3.543838389896971e+00 4.649457110172053e+00 9.252560654948011e+03 + 119400 1.037643777673767e+00 -5.906314693853555e+00 -6.003901649512922e+00 4.245359039142414e+00 4.684999638213750e+00 9.228996621882899e+03 + 119420 1.080847764843264e+00 -5.971028339871708e+00 -5.941195269439361e+00 3.858917321078762e+00 5.030223428154029e+00 9.037374208539630e+03 + 119440 9.870118822056915e-01 -5.835357450642802e+00 -6.040259392016525e+00 4.526363709569697e+00 4.349785053728830e+00 9.340962311206427e+03 + 119460 1.042786889570578e+00 -5.927649884700450e+00 -5.953191819831469e+00 4.078196120856106e+00 4.931530376732107e+00 9.073866012150969e+03 + 119480 1.026599424468261e+00 -5.921569780302893e+00 -5.966352484880490e+00 4.091868122139671e+00 4.834718902353975e+00 9.113999893755850e+03 + 119500 9.569837240377982e-01 -5.845010669075805e+00 -5.997797050821444e+00 4.532154286485468e+00 4.654831238885843e+00 9.210260379999998e+03 + 119520 1.071707400843175e+00 -6.055550780890086e+00 -5.971560553930040e+00 3.399392453762259e+00 4.881677334412460e+00 9.129950415869476e+03 + 119540 1.034603326382984e+00 -6.049291676778807e+00 -5.987059917557144e+00 3.426659156265187e+00 4.784003548049594e+00 9.177367625970008e+03 + 119560 1.039435587849333e+00 -6.106904154921867e+00 -5.960764400737176e+00 3.126964338796666e+00 4.966121422379029e+00 9.097010269778570e+03 + 119580 9.186834907786946e-01 -5.966240927256661e+00 -5.971852973273962e+00 3.876351982458772e+00 4.844126745766115e+00 9.130827615999240e+03 + 119600 9.516214678031822e-01 -6.038279226429039e+00 -5.997130331492022e+00 3.454014088978249e+00 4.690297411477514e+00 9.208244337541095e+03 + 119620 9.533282442780864e-01 -6.057677872737974e+00 -5.960033985688069e+00 3.390940233854670e+00 4.951626543637915e+00 9.094773029220714e+03 + 119640 9.340604119670763e-01 -6.037243888588662e+00 -5.972422399122156e+00 3.499364143441820e+00 4.871579167051578e+00 9.132565825170957e+03 + 119660 9.332383659666506e-01 -6.035667349856229e+00 -5.987463463198733e+00 3.450711742121357e+00 4.727505918836049e+00 9.178599435867916e+03 + 119680 9.722574476386580e-01 -6.086674113362768e+00 -5.980255162163377e+00 3.264743921056758e+00 4.875818007123137e+00 9.156527158298239e+03 + 119700 9.644946817263906e-01 -6.065124913494199e+00 -5.976071784950615e+00 3.376708226888579e+00 4.888065071912947e+00 9.143735165190466e+03 + 119720 9.452947300092963e-01 -6.021598185744242e+00 -5.982693143142795e+00 3.653789107845278e+00 4.877187882998673e+00 9.164000847960475e+03 + 119740 9.286865210447891e-01 -5.976130817060755e+00 -5.996158088828032e+00 3.853719109261211e+00 4.738719415563210e+00 9.205259361903290e+03 + 119760 1.026750338458988e+00 -6.094277749377155e+00 -5.991310676564066e+00 3.165593166233076e+00 4.756846032428856e+00 9.190409662160573e+03 + 119780 9.433319473421097e-01 -5.942237948267610e+00 -6.041647633223969e+00 4.002719193368208e+00 4.431893398749760e+00 9.345349016804083e+03 + 119800 1.029553916338080e+00 -6.041010300583704e+00 -5.983886552195558e+00 3.546880524946843e+00 4.874893928063070e+00 9.167655830289208e+03 + 119820 9.998449298000777e-01 -5.973157289684110e+00 -5.988521958518264e+00 3.885599913891675e+00 4.797373607771147e+00 9.181817474249739e+03 + 119840 1.028425037961815e+00 -5.993324172039302e+00 -5.977768631821403e+00 3.729943732554985e+00 4.819266051698227e+00 9.148929023892417e+03 + 119860 1.019681955737980e+00 -5.961956924624882e+00 -6.002070410819171e+00 3.912728599639219e+00 4.682390754369683e+00 9.223402347840543e+03 + 119880 1.019620097589512e+00 -5.946931272631250e+00 -6.072351170601808e+00 3.892132790292442e+00 4.171952327479014e+00 9.440487073573415e+03 + 119900 1.080867481641072e+00 -6.029775973139915e+00 -6.002583958418650e+00 3.506689688077596e+00 4.662830444557780e+00 9.224992495596378e+03 + 119920 1.011930788777754e+00 -5.925552627926635e+00 -6.004644371845103e+00 4.108672806593836e+00 4.654515773606179e+00 9.231290406620314e+03 + 119940 1.010394797919729e+00 -5.924611184613004e+00 -6.013618201254626e+00 4.128742249231935e+00 4.617650185884432e+00 9.258910548292684e+03 + 119960 1.016752479360705e+00 -5.937674379768598e+00 -6.026702602414995e+00 4.044887600454279e+00 4.533673768945743e+00 9.299201963982663e+03 + 119980 1.056418618246733e+00 -6.003380113598146e+00 -6.054733355273852e+00 3.637403057068112e+00 4.342524796477742e+00 9.385836446920352e+03 + 120000 1.061145894286282e+00 -6.021211892256906e+00 -6.027635012716027e+00 3.585706120868671e+00 4.548823569217719e+00 9.302077590636698e+03 + 120020 9.718393941288797e-01 -5.902017132672810e+00 -6.043451100732105e+00 4.233014922892757e+00 4.420879191460470e+00 9.350900271771692e+03 + 120040 1.036681820644818e+00 -6.007624605744282e+00 -5.990226116227096e+00 3.700331506169276e+00 4.800236325384507e+00 9.187078927992241e+03 + 120060 1.032339290511590e+00 -6.012109291993151e+00 -5.986143488851176e+00 3.640292308030857e+00 4.789391967867129e+00 9.174549055176401e+03 + 120080 1.036132689615751e+00 -6.026374651726817e+00 -5.987722085588594e+00 3.596222510037728e+00 4.818171526268689e+00 9.179359358262443e+03 + 120100 9.869082146382139e-01 -5.960130265148583e+00 -5.990832837534317e+00 3.982196673244721e+00 4.805897751398120e+00 9.188925292057307e+03 + 120120 1.054594877165521e+00 -6.064997046378637e+00 -5.996377399131909e+00 3.340638761472694e+00 4.734663394819502e+00 9.205941601275590e+03 + 120140 9.939705249284559e-01 -5.978739269097393e+00 -6.045496233000370e+00 3.764267925670636e+00 4.380939108332967e+00 9.357248629518725e+03 + 120160 1.051619280866423e+00 -6.071165561484470e+00 -5.985613484735180e+00 3.317247612588286e+00 4.808500876423802e+00 9.172937188141990e+03 + 120180 1.022785297569426e+00 -6.034614532986149e+00 -5.989639092064422e+00 3.538784369929821e+00 4.797040311629363e+00 9.185249504432721e+03 + 120200 1.026046010597426e+00 -6.045252186066615e+00 -5.961212658808037e+00 3.451357729693519e+00 4.933925700287087e+00 9.098361917122489e+03 + 120220 1.033142047429315e+00 -6.061417933922354e+00 -5.959271090579731e+00 3.422484172692685e+00 5.009027154338952e+00 9.092439324147072e+03 + 120240 9.907394914430907e-01 -6.003127731790135e+00 -5.946094548031420e+00 3.716982716505523e+00 5.044476083504730e+00 9.052296121669917e+03 + 120260 1.005086672343924e+00 -6.025588326476243e+00 -5.961920006434356e+00 3.543597998848259e+00 4.909191345169461e+00 9.100482086266802e+03 + 120280 1.005916266017044e+00 -6.024530261176513e+00 -5.987684665334061e+00 3.558622969527266e+00 4.770196082692157e+00 9.179265336293727e+03 + 120300 1.032925326401713e+00 -6.062731391629439e+00 -5.967209840283362e+00 3.395176866606157e+00 4.943676396347628e+00 9.116656533851705e+03 + 120320 1.045329971439544e+00 -6.077405176738569e+00 -5.994037571923845e+00 3.312627978546439e+00 4.791337666487740e+00 9.198767268472993e+03 + 120340 1.008724619077021e+00 -6.019273026278289e+00 -5.977101078825129e+00 3.620506355617850e+00 4.862664203981670e+00 9.146892436467066e+03 + 120360 1.040577743219039e+00 -6.061184516084039e+00 -5.988870767815207e+00 3.365539760884878e+00 4.780776493960885e+00 9.182904565377781e+03 + 120380 9.514837188159329e-01 -5.920839628552655e+00 -6.045191872968318e+00 4.114103617693081e+00 4.400053786810714e+00 9.356277683302562e+03 + 120400 1.033629076715754e+00 -6.029704590006063e+00 -6.006301804977585e+00 3.553924035582949e+00 4.688306448785751e+00 9.236401618260170e+03 + 120420 1.023744151782429e+00 -5.998600194098437e+00 -6.019897239415956e+00 3.696743809648427e+00 4.574452879728125e+00 9.278248753999895e+03 + 120440 9.594683760693846e-01 -5.886448313536311e+00 -6.032094100634072e+00 4.294838547829102e+00 4.458517899701048e+00 9.315739227226753e+03 + 120460 9.998187776516587e-01 -5.926600438910474e+00 -5.995722129580439e+00 4.133980178930925e+00 4.737072734556918e+00 9.203903685241985e+03 + 120480 1.037693081960927e+00 -5.959831358402443e+00 -5.992579741750708e+00 3.907660960960592e+00 4.719614675978908e+00 9.194266581095508e+03 + 120500 1.081917433218320e+00 -6.003321572033852e+00 -5.993388153805121e+00 3.667334590002668e+00 4.724373814663544e+00 9.196738583836395e+03 + 120520 1.051614000328919e+00 -5.939662748055732e+00 -6.009430231181861e+00 4.051606812961471e+00 4.650991128368120e+00 9.246004767999859e+03 + 120540 1.105116883185558e+00 -6.004476261017515e+00 -5.997024527843392e+00 3.713193214444964e+00 4.755982219482758e+00 9.207916944080895e+03 + 120560 1.077358422984455e+00 -5.956110987285872e+00 -5.991821206662424e+00 3.983727622302391e+00 4.778674016503640e+00 9.191975663686253e+03 + 120580 1.115459215511916e+00 -6.013783485291789e+00 -6.028457232882693e+00 3.627303601730307e+00 4.543044672308236e+00 9.304625940223772e+03 + 120600 1.010211918349410e+00 -5.868250329081106e+00 -6.038009132607670e+00 4.501798952437506e+00 4.527017632498030e+00 9.334086080443292e+03 + 120620 1.007730303791919e+00 -5.883652510936998e+00 -6.039349599161183e+00 4.327214549127589e+00 4.433177774497789e+00 9.338254099057845e+03 + 120640 1.130012261954703e+00 -6.091511685438985e+00 -5.994148139829725e+00 3.182044610856576e+00 4.741121156704938e+00 9.199111939184178e+03 + 120660 1.019422469496537e+00 -5.967649386822658e+00 -6.018571653925105e+00 3.838230417596816e+00 4.545826879699201e+00 9.274129240625181e+03 + 120680 9.354144984946680e-01 -5.881746230977337e+00 -5.998216467777072e+00 4.297200943836724e+00 4.628410820421752e+00 9.211547528814319e+03 + 120700 9.763545721244279e-01 -5.974598364794389e+00 -6.028424922528604e+00 3.788790452159040e+00 4.479710028016285e+00 9.304517910499917e+03 + 120720 9.423000717290816e-01 -5.952875187263401e+00 -6.031858344754938e+00 3.892567827108499e+00 4.439034314187973e+00 9.315123321282956e+03 + 120740 9.543731635473370e-01 -5.992309196456991e+00 -5.988663131068482e+00 3.776239509446321e+00 4.797175781133934e+00 9.182282695848484e+03 + 120760 8.946358465997292e-01 -5.917471931920558e+00 -6.004546741283720e+00 4.151308620681904e+00 4.651311590535431e+00 9.231001794073816e+03 + 120780 9.900648205824396e-01 -6.067035709972298e+00 -5.992338058013967e+00 3.290315656485183e+00 4.719241133454207e+00 9.193539979184394e+03 + 120800 9.659633638280964e-01 -6.036339442155185e+00 -5.996312604398667e+00 3.516235732668915e+00 4.746076029199968e+00 9.205746949615253e+03 + 120820 9.389255175658887e-01 -5.998654009757570e+00 -6.014177559433469e+00 3.671458695339337e+00 4.582320070838779e+00 9.260649248736241e+03 + 120840 9.632002975658992e-01 -6.033113301793421e+00 -5.990767861190847e+00 3.488593751966532e+00 4.731747824842265e+00 9.188725272604835e+03 + 120860 9.433735494342107e-01 -5.995268878860853e+00 -5.973324718572456e+00 3.694217770093614e+00 4.820224534317422e+00 9.135346034443975e+03 + 120880 1.025533051391349e+00 -6.104954114932750e+00 -5.978976682536636e+00 3.140265930654051e+00 4.863647842417191e+00 9.152646817331228e+03 + 120900 9.547440436534869e-01 -5.986811593762392e+00 -6.053349693473651e+00 3.717925308382485e+00 4.335853243102784e+00 9.381567623065604e+03 + 120920 9.916155010189877e-01 -6.026156822650287e+00 -6.003710847209986e+00 3.537673646083995e+00 4.666561910565676e+00 9.228458836023932e+03 + 120940 9.951828388598919e-01 -6.013567192986904e+00 -5.994371418713266e+00 3.632071027721412e+00 4.742296134137109e+00 9.199779995537183e+03 + 120960 9.564688431380814e-01 -5.935768144825196e+00 -5.993669858661309e+00 4.039829523434801e+00 4.707348922326582e+00 9.197624726804530e+03 + 120980 9.763209551619872e-01 -5.942069414290973e+00 -5.979923844054045e+00 4.036879761891212e+00 4.819513768237581e+00 9.155498440038944e+03 + 121000 1.068843487258577e+00 -6.050278042246346e+00 -5.987688564135468e+00 3.388650347437494e+00 4.748048816440594e+00 9.179299716560481e+03 + 121020 9.978038644293263e-01 -5.913431209358587e+00 -6.006418091451395e+00 4.156666885984088e+00 4.622721819333690e+00 9.236760651239076e+03 + 121040 1.075905436365311e+00 -5.990737806260648e+00 -6.009030916036770e+00 3.764131085558872e+00 4.659089218374790e+00 9.244792689008551e+03 + 121060 1.031789097045825e+00 -5.878690742752047e+00 -6.039830840888150e+00 4.349500641153036e+00 4.424209261305937e+00 9.339713769421787e+03 + 121080 1.056549264160637e+00 -5.865815747851979e+00 -6.031058841740066e+00 4.488919345483805e+00 4.540067929092275e+00 9.312590192290299e+03 + 121100 1.099446348721314e+00 -5.883105670771874e+00 -6.046710455928039e+00 4.325067026593067e+00 4.385623032467689e+00 9.360994838123948e+03 + 121120 1.125176352100889e+00 -5.883579114690234e+00 -6.071853605824058e+00 4.340610619480435e+00 4.259509356006677e+00 9.438929497251514e+03 + 121140 1.150399661885583e+00 -5.899614274545621e+00 -6.036501329376753e+00 4.254894478399377e+00 4.468867826355740e+00 9.329431358692162e+03 + 121160 1.094627502379573e+00 -5.812241793530719e+00 -6.079797683002661e+00 4.678032341184537e+00 4.141685019696560e+00 9.463636421741105e+03 + 121180 1.120493695869488e+00 -5.863369746691971e+00 -6.024683802873893e+00 4.422825966331979e+00 4.496535692465864e+00 9.292965864321717e+03 + 121200 1.078932537300321e+00 -5.829248242008878e+00 -6.029406868750112e+00 4.590237946534479e+00 4.440896137338929e+00 9.307535372475157e+03 + 121220 1.053671150165725e+00 -5.842773504629686e+00 -6.024354195187978e+00 4.564628979805457e+00 4.521964555098689e+00 9.291971292470245e+03 + 121240 1.095780007297987e+00 -5.978556261228650e+00 -6.059116429027206e+00 3.770321451161590e+00 4.307732501016609e+00 9.399424328148361e+03 + 121260 1.064836475815794e+00 -6.003567599247364e+00 -6.027574861584730e+00 3.617605873670985e+00 4.479752458217991e+00 9.301891627366504e+03 + 121280 1.025693199413907e+00 -5.986485537529640e+00 -6.014954981804349e+00 3.788127158041800e+00 4.624651203384158e+00 9.263031489927744e+03 + 121300 1.019127093315375e+00 -5.998177929796270e+00 -6.012769489826296e+00 3.690017024242262e+00 4.606230028513239e+00 9.256304300129823e+03 + 121320 1.041561857094738e+00 -6.046712582364448e+00 -5.988106134759940e+00 3.451229391845482e+00 4.787756683309022e+00 9.180573257910042e+03 + 121340 1.007740438144754e+00 -6.009102092921800e+00 -6.009455447277591e+00 3.675352804253930e+00 4.673323788861565e+00 9.246056790814362e+03 + 121360 9.672171850045752e-01 -5.958135591822367e+00 -5.973946750658824e+00 3.981299286539332e+00 4.890509165731475e+00 9.137244101095916e+03 + 121380 9.935177709587653e-01 -6.003625719893237e+00 -6.007558385870614e+00 3.693922173090204e+00 4.671340196470013e+00 9.240269400726540e+03 + 121400 1.019796810355305e+00 -6.049255658387051e+00 -5.991286319100182e+00 3.457134077138714e+00 4.790002994050177e+00 9.190306073336487e+03 + 121420 1.010719710280107e+00 -6.044395961250208e+00 -5.982601983854225e+00 3.437948609262025e+00 4.792779190056856e+00 9.163750732211613e+03 + 121440 9.888899483569709e-01 -6.020673513261531e+00 -5.994064921985097e+00 3.581278650288157e+00 4.734069299063636e+00 9.198833719768227e+03 + 121460 9.154661088232632e-01 -5.918402366111876e+00 -6.023119914485376e+00 4.118315315924913e+00 4.517010948176037e+00 9.288150566293960e+03 + 121480 9.123147074912249e-01 -5.916755726781715e+00 -6.040932361652200e+00 4.126386194383956e+00 4.413344740685489e+00 9.343091863419644e+03 + 121500 1.025324364226233e+00 -6.084892040294999e+00 -5.983354393085188e+00 3.165314542013964e+00 4.748359425192823e+00 9.166009130292590e+03 + 121520 9.479900331084421e-01 -5.965735647533178e+00 -6.006159181765631e+00 3.880816216158846e+00 4.648698027074393e+00 9.235944666792700e+03 + 121540 9.642270620373837e-01 -5.984513247835343e+00 -6.009960121897665e+00 3.724558795887160e+00 4.578438907130277e+00 9.247632749412625e+03 + 121560 9.820204202450386e-01 -6.002170726972052e+00 -6.025783914741895e+00 3.655022179950450e+00 4.519431601647012e+00 9.296383051797875e+03 + 121580 1.012099742657681e+00 -6.038133519976705e+00 -6.011800472347093e+00 3.533699381453941e+00 4.684907815969126e+00 9.253297203436814e+03 + 121600 9.459961816394682e-01 -5.928506148538029e+00 -6.045892284160914e+00 4.106239609308198e+00 4.432190253115814e+00 9.358455193763601e+03 + 121620 1.011254042159579e+00 -6.011608094643019e+00 -6.014927006704755e+00 3.642821580795439e+00 4.623763874136972e+00 9.262918253044209e+03 + 121640 1.049417125476201e+00 -6.056109084950049e+00 -5.985500283258091e+00 3.406609953425119e+00 4.812056619417095e+00 9.172589099373849e+03 + 121660 9.821493577901522e-01 -5.943743716471760e+00 -5.993081542944143e+00 4.009376265223694e+00 4.726070830615297e+00 9.195802739559394e+03 + 121680 9.092949856173714e-01 -5.820289727640036e+00 -6.067336614048265e+00 4.614269988904027e+00 4.195688536765863e+00 9.424897281504815e+03 + 121700 1.088223544097771e+00 -6.069738517062521e+00 -6.001422410947127e+00 3.277455207086930e+00 4.669736860284781e+00 9.221426182835046e+03 + 121720 1.095232098584737e+00 -6.067775397688449e+00 -5.954997923077664e+00 3.411399348659769e+00 5.058985060132693e+00 9.079415127506092e+03 + 121740 1.088171557917545e+00 -6.048039462062470e+00 -6.009812604712321e+00 3.408046152572408e+00 4.627550683064022e+00 9.247181967418643e+03 + 121760 9.890665961287527e-01 -5.894349279083472e+00 -6.006963770162155e+00 4.209670873089593e+00 4.563021038279619e+00 9.238412279495251e+03 + 121780 1.043499077747611e+00 -5.969481090027255e+00 -6.006002280219752e+00 3.863242026778372e+00 4.653531701057140e+00 9.235455910008011e+03 + 121800 1.076867129777996e+00 -6.016414672052348e+00 -5.959280820558289e+00 3.668270260489963e+00 4.996341677203798e+00 9.092468566783786e+03 + 121820 1.057474341165644e+00 -5.988948125808213e+00 -5.992431544420544e+00 3.731891202173869e+00 4.711888873444578e+00 9.193834295962906e+03 + 121840 1.027915309576489e+00 -5.953514989118382e+00 -5.993266194485868e+00 3.930801891326165e+00 4.702544318626913e+00 9.196340446902817e+03 + 121860 1.009875854874057e+00 -5.938759770501213e+00 -6.004490812529411e+00 4.025813163333832e+00 4.648375348162042e+00 9.230738884117127e+03 + 121880 1.016497426899852e+00 -5.966234422217219e+00 -5.963751885955925e+00 3.917117459695402e+00 4.931372567078994e+00 9.106078178863789e+03 + 121900 1.000589942274414e+00 -5.965506233785544e+00 -5.969112358384749e+00 3.871443422207337e+00 4.850736496712724e+00 9.122485667990690e+03 + 121920 9.535938444465633e-01 -5.925420445477659e+00 -6.035811674618802e+00 4.118881610870888e+00 4.484998090154940e+00 9.327288982876733e+03 + 121940 9.322463967338616e-01 -5.925629085949499e+00 -6.039934065784456e+00 4.054372359528232e+00 4.398015476677448e+00 9.340071961015135e+03 + 121960 1.022388781918760e+00 -6.092936230838693e+00 -5.979221509943984e+00 3.191715986592782e+00 4.844683511266389e+00 9.153385272214708e+03 + 121980 9.885529639368891e-01 -6.074779341790144e+00 -5.971385685169479e+00 3.327317176909301e+00 4.921019553341812e+00 9.129424595716457e+03 + 122000 8.789865750614481e-01 -5.936644668064941e+00 -6.025850421625547e+00 4.064822357709361e+00 4.552589116218614e+00 9.296559074547540e+03 + 122020 9.993187655645374e-01 -6.134858044955732e+00 -5.993246839711056e+00 2.948360358506144e+00 4.761513813284258e+00 9.196342816422035e+03 + 122040 9.285714604828201e-01 -6.044076330868791e+00 -5.986458608790151e+00 3.467205473053854e+00 4.798055349543082e+00 9.175532469238226e+03 + 122060 9.563675928716706e-01 -6.090916806960377e+00 -5.980893888715716e+00 3.236174547420667e+00 4.867943169973081e+00 9.158495255304686e+03 + 122080 9.369846916005025e-01 -6.060008008835741e+00 -6.034665236588676e+00 3.378319800602559e+00 4.523841920626538e+00 9.323774912910743e+03 + 122100 9.477967050858879e-01 -6.070790284130617e+00 -5.992852181595550e+00 3.392537832270329e+00 4.840070477909071e+00 9.195100295555801e+03 + 122120 9.257296775423668e-01 -6.025185159025574e+00 -5.983419544069068e+00 3.568878534279345e+00 4.808703158567631e+00 9.166244662536175e+03 + 122140 9.760501296476184e-01 -6.078009334127781e+00 -5.991592212837741e+00 3.289237763724441e+00 4.785458247178151e+00 9.191278687877682e+03 + 122160 9.567872459337702e-01 -6.020539676678470e+00 -5.996136299000518e+00 3.607133970537719e+00 4.747261941575006e+00 9.205182912274407e+03 + 122180 9.864474940147704e-01 -6.026341704525295e+00 -5.948338285065007e+00 3.614120742287385e+00 5.062028447818511e+00 9.059134334877437e+03 + 122200 1.050021449410696e+00 -6.073426728782909e+00 -5.964971005498520e+00 3.320578272603646e+00 4.943347819171544e+00 9.109833620338715e+03 + 122220 1.046146528182950e+00 -6.020673386594951e+00 -5.987700579004970e+00 3.590861718421248e+00 4.780196682128398e+00 9.179323918134212e+03 + 122240 1.064902876111197e+00 -6.014489230060621e+00 -5.994304293036757e+00 3.607580687830394e+00 4.723485719830331e+00 9.199572666637889e+03 + 122260 1.006412101348283e+00 -5.906369802016615e+00 -6.018335012137827e+00 4.219961900134256e+00 4.577040337057983e+00 9.273421467649914e+03 + 122280 1.072796086810875e+00 -5.995384852291707e+00 -6.009055069129228e+00 3.676983630625643e+00 4.598487130085382e+00 9.244870446363942e+03 + 122300 1.013834400797831e+00 -5.906089866546187e+00 -6.073648307609880e+00 4.158999054909924e+00 4.196852556737242e+00 9.444511600255852e+03 + 122320 1.041107328374048e+00 -5.949731773645686e+00 -6.056821347616345e+00 3.904037180158016e+00 4.289112274360480e+00 9.392330936806820e+03 + 122340 1.065236311669154e+00 -5.996167759441147e+00 -6.010957490231847e+00 3.694041349232836e+00 4.609116426329193e+00 9.250731824508028e+03 + 122360 1.020057341712105e+00 -5.942100012675675e+00 -6.019724939484485e+00 3.969672216491367e+00 4.523937874336578e+00 9.277687804276624e+03 + 122380 1.057449148248190e+00 -6.012512163218804e+00 -5.999920316031853e+00 3.580861605661933e+00 4.653165940791465e+00 9.216801945131599e+03 + 122400 9.640159292561817e-01 -5.890811945568827e+00 -6.049281803302288e+00 4.272849351299104e+00 4.362890905062342e+00 9.368938775786703e+03 + 122420 1.047228523064277e+00 -6.031796336508355e+00 -6.001375727079881e+00 3.508409319993527e+00 4.683089166905921e+00 9.221282731379111e+03 + 122440 9.292806614484829e-01 -5.876548400324518e+00 -6.011423731817072e+00 4.351979606742520e+00 4.577504581422182e+00 9.252157838353352e+03 + 122460 1.030641181438959e+00 -6.045566294908516e+00 -5.994638409740646e+00 3.397598331204608e+00 4.690034128903280e+00 9.200611320380918e+03 + 122480 1.043062705449388e+00 -6.083240835903879e+00 -5.995461186677291e+00 3.271545953001358e+00 4.775590282717238e+00 9.203110728562424e+03 + 122500 9.386936019802217e-01 -5.947894230486130e+00 -6.017160404551564e+00 3.937974113113099e+00 4.540237022723576e+00 9.269822327936567e+03 + 122520 9.938455745909147e-01 -6.045659610206654e+00 -6.012847505573569e+00 3.408464270286371e+00 4.596876452746328e+00 9.256536251314366e+03 + 122540 1.002999121451895e+00 -6.073553655873885e+00 -5.967527520141510e+00 3.339154272316373e+00 4.947972751183146e+00 9.117650774064847e+03 + 122560 1.003447323409266e+00 -6.087766886488987e+00 -5.969923127471836e+00 3.208902422416540e+00 4.885579522955794e+00 9.124946753478966e+03 + 122580 9.416234901122646e-01 -6.008087265455671e+00 -5.984826099902172e+00 3.694697776840285e+00 4.828266989102210e+00 9.170510978068820e+03 + 122600 9.438183265091453e-01 -6.018642472855062e+00 -5.986894841186514e+00 3.617841450915397e+00 4.800141264886329e+00 9.176819798775516e+03 + 122620 9.693643153718524e-01 -6.059404770238755e+00 -5.953936391867413e+00 3.412370506465099e+00 5.017986256252154e+00 9.076179606519388e+03 + 122640 9.623822968381476e-01 -6.046144363167623e+00 -5.996185053453386e+00 3.431317738222189e+00 4.718191825779531e+00 9.205357833475548e+03 + 122660 9.707998563378933e-01 -6.047467129671227e+00 -6.039524471364833e+00 3.455196824431110e+00 4.500804797548827e+00 9.338801813066129e+03 + 122680 9.239780172564870e-01 -5.959171537151987e+00 -6.070983852815636e+00 3.915138580658934e+00 4.273094961218334e+00 9.436245005317005e+03 + 122700 9.709776181501767e-01 -6.002378080635148e+00 -5.996533704498964e+00 3.703867992712310e+00 4.737427304900561e+00 9.206421595513213e+03 + 122720 9.637878965941783e-01 -5.950352699839319e+00 -6.034781994243518e+00 3.987032568024854e+00 4.502226494164859e+00 9.324125651128046e+03 + 122740 1.010815038669133e+00 -5.974854618923963e+00 -6.001809257264895e+00 3.889205416111694e+00 4.734427711541263e+00 9.222583176498343e+03 + 122760 9.811674752021313e-01 -5.885569933318791e+00 -5.999907734011133e+00 4.311805526089220e+00 4.655260180796323e+00 9.216735241809996e+03 + 122780 1.028923565545511e+00 -5.917545752877508e+00 -5.962513254589275e+00 4.218804043908222e+00 4.960593690380851e+00 9.102317117631832e+03 + 122800 1.124335882902598e+00 -6.028333263711251e+00 -5.989460223684716e+00 3.564223088275525e+00 4.787438099691389e+00 9.184722319449800e+03 + 122820 1.062678376278233e+00 -5.920439492733944e+00 -6.005506839431118e+00 4.092288659609190e+00 4.603818790744662e+00 9.233955358010326e+03 + 122840 1.011664316556222e+00 -5.837057124097495e+00 -6.040685362917541e+00 4.571111103293043e+00 4.401846244620217e+00 9.342352864493725e+03 + 122860 1.100272720862411e+00 -5.967639203569795e+00 -5.999069602364922e+00 3.871470200547264e+00 4.690991986827151e+00 9.214193121300263e+03 + 122880 1.037310974871203e+00 -5.884477610944193e+00 -6.025700134142681e+00 4.266424447304944e+00 4.455502864984383e+00 9.296097014997742e+03 + 122900 1.043453196462220e+00 -5.909257329549933e+00 -6.004112736779348e+00 4.189931112426043e+00 4.645256685287914e+00 9.229648557115983e+03 + 122920 1.072511666442063e+00 -5.972924969515268e+00 -5.998693874919379e+00 3.772937404783986e+00 4.624968362228358e+00 9.213033696499117e+03 + 122940 1.041578250255228e+00 -5.953442716446868e+00 -6.007826232290856e+00 3.933337787121249e+00 4.621059223323188e+00 9.241079367586261e+03 + 122960 1.033297963531500e+00 -5.973421855162428e+00 -6.006560463248404e+00 3.844363661290658e+00 4.654076645477955e+00 9.237182633035432e+03 + 122980 9.613929666220137e-01 -5.900179904231156e+00 -6.057847580457410e+00 4.157476883741304e+00 4.252124687856115e+00 9.395474587677409e+03 + 123000 9.847080599178164e-01 -5.966862856084152e+00 -5.992470811934850e+00 3.883768796887022e+00 4.736723951573953e+00 9.193947241787975e+03 + 123020 9.776356536799536e-01 -5.982789663159479e+00 -6.003257517788345e+00 3.739159031673632e+00 4.621629443004416e+00 9.227068805674024e+03 + 123040 9.785738714083889e-01 -6.003878077193728e+00 -6.008864121376529e+00 3.667423610779903e+00 4.638792973494413e+00 9.244262730768147e+03 + 123060 1.017907258637640e+00 -6.075573705076893e+00 -5.959358196499521e+00 3.298000786753659e+00 4.965328221296756e+00 9.092711401310215e+03 + 123080 1.036456515447104e+00 -6.111445778731325e+00 -5.972382433223887e+00 3.051516523692862e+00 4.850039773579736e+00 9.132479679381748e+03 + 123100 9.928683104676677e-01 -6.052443438557395e+00 -5.990079099758160e+00 3.464908937463645e+00 4.823014621699094e+00 9.186616732318967e+03 + 123120 1.001798524840767e+00 -6.068660545413881e+00 -5.982560654056172e+00 3.376023226049152e+00 4.870422126140239e+00 9.163584841375789e+03 + 123140 9.729840391654312e-01 -6.024743067186481e+00 -5.967956238078693e+00 3.590137905676422e+00 4.916216666146748e+00 9.118947649108120e+03 + 123160 9.699555158520093e-01 -6.015830125467891e+00 -6.002255110129755e+00 3.599428443314428e+00 4.677378282112842e+00 9.223969801019390e+03 + 123180 1.038155164871066e+00 -6.111709240193035e+00 -5.996327793623625e+00 3.066139572462734e+00 4.728677693885441e+00 9.205794011301048e+03 + 123200 9.760012579923073e-01 -6.013558558444949e+00 -6.011299979553652e+00 3.631218131134414e+00 4.644187240642193e+00 9.251762776618350e+03 + 123220 9.207028267581148e-01 -5.924249131614145e+00 -6.035112873503418e+00 4.095602992064832e+00 4.459006230028018e+00 9.325138409705105e+03 + 123240 1.030627009676178e+00 -6.078430762639743e+00 -5.945121619683016e+00 3.280833195075152e+00 5.046314923455881e+00 9.049333574872235e+03 + 123260 9.210372379414149e-01 -5.905646078787322e+00 -6.019512090575311e+00 4.222736184421782e+00 4.568899924026774e+00 9.277015761603043e+03 + 123280 9.656366045512024e-01 -5.957355365792517e+00 -6.019626746789593e+00 3.979117214969910e+00 4.621545308819638e+00 9.277384787563704e+03 + 123300 1.035584687366873e+00 -6.047466257792698e+00 -6.000621920078137e+00 3.481184291839897e+00 4.750171728134744e+00 9.218961990807999e+03 + 123320 9.667947220105408e-01 -5.932338305941492e+00 -6.039721934103854e+00 4.046973110914749e+00 4.430359700443717e+00 9.339375723125404e+03 + 123340 1.053474143741022e+00 -6.047524152541055e+00 -5.997338121356494e+00 3.454590746610780e+00 4.742766703935754e+00 9.208863929721190e+03 + 123360 1.032755141387830e+00 -6.003055470922941e+00 -5.996188601741617e+00 3.646696546111243e+00 4.686127171594984e+00 9.205366431411119e+03 + 123380 9.850916802674634e-01 -5.919771410691591e+00 -5.993803015551622e+00 4.118869151947790e+00 4.693768220487663e+00 9.198014975932096e+03 + 123400 1.061505519769170e+00 -6.016784094982769e+00 -5.988375026182153e+00 3.597313723833707e+00 4.760442993176031e+00 9.181400225790967e+03 + 123420 1.053713748020837e+00 -5.981692518932657e+00 -6.010856263866240e+00 3.818096499315776e+00 4.650633762832195e+00 9.250411748314104e+03 + 123440 1.105108042184527e+00 -6.024691613170656e+00 -6.002889930695853e+00 3.583310461453789e+00 4.708499096023569e+00 9.225906116550468e+03 + 123460 1.115359843444440e+00 -5.995300146185701e+00 -5.970179150414416e+00 3.781445029556090e+00 4.925693674736341e+00 9.125739506695949e+03 + 123480 1.083141712636847e+00 -5.900491064085047e+00 -5.997631622844692e+00 4.274078055388006e+00 4.716281934537245e+00 9.209782585400939e+03 + 123500 1.062635314310250e+00 -5.828833597038188e+00 -6.039491816074184e+00 4.602936130105607e+00 4.393304037146877e+00 9.338650392730502e+03 + 123520 1.058350718724940e+00 -5.792240854992991e+00 -6.037893402219527e+00 4.769707583312682e+00 4.359132642529084e+00 9.333730961456478e+03 + 123540 1.074662333811224e+00 -5.797759435643455e+00 -6.040007419031478e+00 4.806112886763899e+00 4.415087478395597e+00 9.340261792830985e+03 + 123560 1.167763510594975e+00 -5.930959759070772e+00 -6.022892428979931e+00 4.089154451717158e+00 4.561262834564073e+00 9.287447590322658e+03 + 123580 1.060144576412683e+00 -5.783664646296696e+00 -6.099110910831912e+00 4.836613656532942e+00 4.025272390420059e+00 9.523783628772289e+03 + 123600 1.115760526321844e+00 -5.896118405742393e+00 -6.041918712270576e+00 4.236605717017573e+00 4.399397794408229e+00 9.346178471965290e+03 + 123620 1.054928746952519e+00 -5.850497076758369e+00 -6.018223233833195e+00 4.550076941549805e+00 4.586967392087234e+00 9.273060480954480e+03 + 123640 1.021969048970661e+00 -5.850105876879089e+00 -6.038021772143650e+00 4.472886454363865e+00 4.393844303863944e+00 9.334119589245322e+03 + 123660 1.137074751487440e+00 -6.066386818101090e+00 -5.945300774525718e+00 3.316300491961921e+00 5.011595292176397e+00 9.049889662178355e+03 + 123680 1.009418480570350e+00 -5.912765165452886e+00 -6.019371465436952e+00 4.104819147731722e+00 4.492669275951612e+00 9.276574698606424e+03 + 123700 1.028215867901988e+00 -5.970773325245623e+00 -5.965563961779009e+00 3.895583721515486e+00 4.925496692687172e+00 9.111631882553560e+03 + 123720 1.046017048533841e+00 -6.020182913405061e+00 -5.950881358160806e+00 3.685103588739236e+00 5.083043843332765e+00 9.066854792936376e+03 + 123740 1.031407942754202e+00 -6.015259962719412e+00 -5.946621394495140e+00 3.661099723150422e+00 5.055233003678297e+00 9.053907587476668e+03 + 123760 9.738106105827206e-01 -5.943652001181007e+00 -6.010957544655556e+00 4.023908261453795e+00 4.637429415323747e+00 9.250705289284273e+03 + 123780 1.039645761215241e+00 -6.053111340940633e+00 -5.991755877196627e+00 3.373893606968829e+00 4.726206174514245e+00 9.191774278954585e+03 + 123800 9.816838821731989e-01 -5.978971074475639e+00 -6.029724840234711e+00 3.828542079668765e+00 4.537106102560306e+00 9.308527470388675e+03 + 123820 1.012446531389368e+00 -6.037003909087220e+00 -6.021445326087385e+00 3.489914935997509e+00 4.579254727265504e+00 9.283008172302119e+03 + 123840 1.000031098220121e+00 -6.030965653205588e+00 -6.038290410758296e+00 3.542550441907426e+00 4.500490550537211e+00 9.334958474964991e+03 + 123860 9.379179404186142e-01 -5.950933035640495e+00 -6.039767481735309e+00 3.959816975622285e+00 4.449715839059758e+00 9.339542177201964e+03 + 123880 9.446563453234521e-01 -5.973134061946038e+00 -6.047473237696754e+00 3.822852925878514e+00 4.395985874767637e+00 9.363374635720598e+03 + 123900 1.041321043596115e+00 -6.127734549216084e+00 -5.987225109953616e+00 2.959166791889249e+00 4.765993735899794e+00 9.177912720709210e+03 + 123920 9.262293368216908e-01 -5.967747952414613e+00 -6.047347910750719e+00 3.837871088300012e+00 4.380795809480350e+00 9.362967010373804e+03 + 123940 9.169329682796719e-01 -5.962653621862809e+00 -5.983689311195718e+00 3.962880713278981e+00 4.842090529867013e+00 9.167038555136227e+03 + 123960 9.889745510432812e-01 -6.073556581322491e+00 -6.011927320838195e+00 3.250653504552226e+00 4.604538255350296e+00 9.253703759454023e+03 + 123980 9.945246789880008e-01 -6.081617711331124e+00 -6.013871674076999e+00 3.285527174586911e+00 4.674535404165481e+00 9.259701423569832e+03 + 124000 9.562471296764359e-01 -6.022954129220868e+00 -6.041099852328090e+00 3.573778611560566e+00 4.469583061437325e+00 9.343678612434031e+03 + 124020 9.716100708362748e-01 -6.042669569400140e+00 -5.977428677352216e+00 3.506953575328114e+00 4.881576873462712e+00 9.147882389895876e+03 + 124040 9.626552110757149e-01 -6.020040653818582e+00 -5.988617326366091e+00 3.540875339647946e+00 4.721312948624357e+00 9.182127896805297e+03 + 124060 9.624521304262400e-01 -6.001194655268712e+00 -5.982934180016793e+00 3.678509351127529e+00 4.783363825823464e+00 9.164725898088418e+03 + 124080 9.500288359511254e-01 -5.955728351379023e+00 -5.997030072407077e+00 3.956991463216989e+00 4.719830589653229e+00 9.207909695073033e+03 + 124100 9.772983013478915e-01 -5.959231590635858e+00 -5.991724278903491e+00 3.918007539342801e+00 4.731429495082795e+00 9.191646373899197e+03 + 124120 1.032863926705671e+00 -6.000035641469773e+00 -6.004665078474539e+00 3.683704984612385e+00 4.657122040927957e+00 9.231339573759096e+03 + 124140 1.053564804590002e+00 -5.990240620582084e+00 -5.993284436603942e+00 3.734686912152797e+00 4.717208849526287e+00 9.196434479635313e+03 + 124160 1.057504395976131e+00 -5.963220734117355e+00 -6.023945591845781e+00 3.950383536026821e+00 4.601692005808838e+00 9.290689663788537e+03 + 124180 1.022085240778716e+00 -5.886984954428578e+00 -6.080072845553905e+00 4.290355491627478e+00 4.181614940531268e+00 9.464493819783940e+03 + 124200 1.076548076516832e+00 -5.955016245757723e+00 -6.053679966415271e+00 3.900082403330526e+00 4.333540051153458e+00 9.382575378427337e+03 + 124220 1.029370404617580e+00 -5.881913828216268e+00 -6.050565781086606e+00 4.350482863069715e+00 4.382057250882879e+00 9.372912553971943e+03 + 124240 1.039013022950192e+00 -5.900541833373640e+00 -6.056967635502517e+00 4.164037900108069e+00 4.265816737469414e+00 9.392753732165689e+03 + 124260 1.102918822015277e+00 -6.009153364812903e+00 -6.022239956276213e+00 3.648813948115818e+00 4.573668714790006e+00 9.285458958440779e+03 + 124280 9.864000050800108e-01 -5.857387699509981e+00 -6.047825150514474e+00 4.430047593679594e+00 4.336526279911493e+00 9.364437405585946e+03 + 124300 9.928670327457007e-01 -5.891777398416153e+00 -6.063893653435580e+00 4.229356225201593e+00 4.241038053975657e+00 9.414214334216662e+03 + 124320 1.019276511129890e+00 -5.959569040717325e+00 -6.030267432267020e+00 3.912225252446661e+00 4.506264147627577e+00 9.310204481655626e+03 + 124340 9.849010707917484e-01 -5.941382740049206e+00 -6.056358684486967e+00 4.020645876009462e+00 4.360436210577942e+00 9.390824761677011e+03 + 124360 9.936119554714553e-01 -5.984295297562930e+00 -5.974644468225821e+00 3.784822409889345e+00 4.840238965404036e+00 9.139366108646251e+03 + 124380 9.521810481744990e-01 -5.948306362913390e+00 -6.004076505764259e+00 3.996279809153776e+00 4.676039018502367e+00 9.229557815562634e+03 + 124400 1.021256627557130e+00 -6.068190661188632e+00 -5.976614672496319e+00 3.323000650880716e+00 4.848844149290434e+00 9.145408802067057e+03 + 124420 9.805285482686998e-01 -6.020497681049144e+00 -5.970286489232691e+00 3.599689504897944e+00 4.888009938464839e+00 9.126068961576357e+03 + 124440 9.953273512825224e-01 -6.049852233740272e+00 -6.001019530504298e+00 3.428155243253404e+00 4.708560182070774e+00 9.220180474962612e+03 + 124460 9.688095877344318e-01 -6.015644063151668e+00 -6.015316986396023e+00 3.541725156329762e+00 4.543603281675638e+00 9.264121302044176e+03 + 124480 9.438574556083021e-01 -5.978675833919882e+00 -5.981737324252702e+00 3.803910988265295e+00 4.786331437010142e+00 9.161076209700852e+03 + 124500 9.934280085304421e-01 -6.048198808280079e+00 -5.968350049268471e+00 3.460971979931236e+00 4.919475910731406e+00 9.120171018833062e+03 + 124520 9.976307312659172e-01 -6.048811378439297e+00 -6.038506186305963e+00 3.461110370082799e+00 4.520284378035738e+00 9.335643067102361e+03 + 124540 9.788165967783727e-01 -6.017343813998051e+00 -6.034900560525130e+00 3.612219161567187e+00 4.511405606110955e+00 9.324501398418859e+03 + 124560 1.010638723084755e+00 -6.059654450993423e+00 -5.996860639041419e+00 3.425964106642052e+00 4.786535892181458e+00 9.207414293517286e+03 + 124580 9.634870621920757e-01 -5.984455212899630e+00 -6.027549985349109e+00 3.750210810603378e+00 4.502753958303988e+00 9.301813936010663e+03 + 124600 9.538691115313704e-01 -5.964246069903154e+00 -5.997330651905732e+00 3.894419943252285e+00 4.704443153570963e+00 9.208848835671608e+03 + 124620 1.026818788854478e+00 -6.063019579441131e+00 -6.004953337282126e+00 3.351038782364345e+00 4.684464130563283e+00 9.232272478052682e+03 + 124640 1.096095045361376e+00 -6.158207896467936e+00 -5.961255987896131e+00 2.819401374502304e+00 4.950329711730960e+00 9.098522202853364e+03 + 124660 1.008056314503567e+00 -6.021767831902137e+00 -5.962881447980240e+00 3.580127673125622e+00 4.918262402243615e+00 9.103446730582746e+03 + 124680 9.487275653392980e-01 -5.925594326924035e+00 -5.990706823366391e+00 4.087331857069260e+00 4.713445826370990e+00 9.188538187575297e+03 + 124700 9.951428767363758e-01 -5.983252157872843e+00 -5.997183576266233e+00 3.729640456209375e+00 4.649644095914504e+00 9.208388306210205e+03 + 124720 9.784908592813066e-01 -5.944913135414964e+00 -5.997383347103162e+00 3.953852466414040e+00 4.652560391161391e+00 9.209029510042026e+03 + 124740 1.029675926912981e+00 -6.005507643623237e+00 -5.971631063871685e+00 3.638911839833348e+00 4.833436403150534e+00 9.130144233065144e+03 + 124760 9.367334679591502e-01 -5.848671581895034e+00 -5.987318856063932e+00 4.525579524670642e+00 4.729445420796495e+00 9.178139656534366e+03 + 124780 1.041453475774045e+00 -5.975885062787889e+00 -5.998669173173054e+00 3.841429287501372e+00 4.710599399840063e+00 9.212944639466390e+03 + 124800 1.080023554068696e+00 -5.989950269649686e+00 -6.009166307011530e+00 3.756326159010453e+00 4.645984698806571e+00 9.245220160558532e+03 + 124820 1.093444291565670e+00 -5.963842640750606e+00 -6.005372343852482e+00 3.915477074972804e+00 4.677007093061050e+00 9.233561864365103e+03 + 124840 1.144222986784974e+00 -5.993090615490336e+00 -6.032008777508986e+00 3.726648653020365e+00 4.503174544143164e+00 9.315590924696884e+03 + 124860 1.086054648260782e+00 -5.871309281117801e+00 -6.051752144148576e+00 4.390728184777807e+00 4.354597341812286e+00 9.376585223465005e+03 + 124880 1.111063630345325e+00 -5.890117472014937e+00 -6.048129808236895e+00 4.210454539681720e+00 4.303123252765234e+00 9.365378271595657e+03 + 124900 1.086259190782446e+00 -5.848091862383444e+00 -6.060743882408267e+00 4.494285342529531e+00 4.273204535753250e+00 9.404333141292780e+03 + 124920 1.040744787486285e+00 -5.786455135856859e+00 -6.030671493801297e+00 4.786369359045255e+00 4.384041239369044e+00 9.311375497384399e+03 + 124940 1.119058657002233e+00 -5.919984455923280e+00 -5.940634054722505e+00 4.166028442968594e+00 5.047455251148356e+00 9.035618821458007e+03 + 124960 1.030004898505803e+00 -5.813848891812586e+00 -6.003171716737191e+00 4.674471294185738e+00 4.587350335856187e+00 9.226779404407313e+03 + 124980 1.096771767746705e+00 -5.955177650824586e+00 -6.045538747509625e+00 3.895855355726771e+00 4.376987955226755e+00 9.357384297104527e+03 + 125000 1.097620584849602e+00 -6.013459245377746e+00 -6.004527696557127e+00 3.634197793186590e+00 4.685484128667295e+00 9.230931249172103e+03 + 125020 1.039406293533638e+00 -5.979604697012762e+00 -6.004949605364288e+00 3.761830627605993e+00 4.616296241739641e+00 9.232230048684118e+03 + 125040 1.008201195709864e+00 -5.974890753548408e+00 -5.974658885247114e+00 3.848400209842324e+00 4.849731633509862e+00 9.139405048828548e+03 + 125060 1.000815264904330e+00 -5.987425798102696e+00 -6.009072635123370e+00 3.778231318187829e+00 4.653931830177918e+00 9.244914709629806e+03 + 125080 1.006195271644541e+00 -6.008918206070846e+00 -6.014514580420512e+00 3.639623872104803e+00 4.607488624552891e+00 9.261656412215254e+03 + 125100 9.919120621177697e-01 -5.996427921826531e+00 -6.008300450176950e+00 3.722721034204212e+00 4.654547139148282e+00 9.242558553017559e+03 + 125120 9.826954138447850e-01 -5.990141725117017e+00 -5.995575814270374e+00 3.797661745630173e+00 4.766458364789017e+00 9.203484803853133e+03 + 125140 1.031927886560280e+00 -6.069778139416736e+00 -5.999982576987956e+00 3.378925764162516e+00 4.779702684456950e+00 9.216993699636265e+03 + 125160 1.011618744821474e+00 -6.045405634582319e+00 -6.053622135845821e+00 3.402944343163574e+00 4.355763921409086e+00 9.382411170141566e+03 + 125180 9.481539069840340e-01 -5.958844562777684e+00 -6.031846432725819e+00 3.920888325027830e+00 4.501700290782779e+00 9.315098268803986e+03 + 125200 9.635801509796912e-01 -5.988930808991017e+00 -6.035262180553665e+00 3.712045848932476e+00 4.446003943663175e+00 9.325612031555751e+03 + 125220 9.740995815790641e-01 -6.009529920105448e+00 -5.965716069113188e+00 3.649102038210805e+00 4.900687950779888e+00 9.112103244027548e+03 + 125240 9.426075064835656e-01 -5.962571198064012e+00 -6.028349249155892e+00 3.861267552103097e+00 4.483559803613016e+00 9.304281985087167e+03 + 125260 1.020135407597811e+00 -6.077616627112765e+00 -5.990570677023661e+00 3.299711864367779e+00 4.799543180096659e+00 9.188134902130823e+03 + 125280 1.017033711444334e+00 -6.072639379242898e+00 -5.997580891331034e+00 3.264485867545605e+00 4.695483320398994e+00 9.209630142787824e+03 + 125300 9.334179511375577e-01 -5.948253042581875e+00 -5.966552341864610e+00 3.963796687509261e+00 4.858719279220384e+00 9.114615330726987e+03 + 125320 9.058860074723356e-01 -5.901348477473810e+00 -5.977346601126740e+00 4.182145793788626e+00 4.745752807101876e+00 9.147620208418193e+03 + 125340 9.969748559260597e-01 -6.023679304978067e+00 -5.972364473337065e+00 3.531610201012202e+00 4.826267905239368e+00 9.132404713016220e+03 + 125360 1.019399090899083e+00 -6.038084402483618e+00 -5.983977605561650e+00 3.478992212776802e+00 4.789681813702503e+00 9.167898524722605e+03 + 125380 1.021204313199955e+00 -6.018694869106962e+00 -5.991709877059316e+00 3.524577285572696e+00 4.679529285824303e+00 9.191592185891910e+03 + 125400 1.020678966138177e+00 -5.992203331433706e+00 -5.985485527456626e+00 3.747795509648807e+00 4.786370179662010e+00 9.172534382346297e+03 + 125420 1.010008783453193e+00 -5.947399276831139e+00 -6.050860947927063e+00 3.932883690286187e+00 4.338790764211532e+00 9.373843300089120e+03 + 125440 1.032819688356014e+00 -5.953591307373817e+00 -6.010377769655819e+00 3.916280243548987e+00 4.590203589449096e+00 9.248935788927951e+03 + 125460 1.074902084524316e+00 -5.990833451741444e+00 -5.957315320917294e+00 3.768398976641438e+00 4.960865270747687e+00 9.086446492988905e+03 + 125480 1.005275171964690e+00 -5.866110938443020e+00 -5.982136296990879e+00 4.420558252208743e+00 4.754322688560730e+00 9.162238996476748e+03 + 125500 1.049949797720821e+00 -5.912236491142219e+00 -5.988790534852830e+00 4.165467891516865e+00 4.725882725830557e+00 9.182613481481767e+03 + 125520 1.104715253590872e+00 -5.978110731707037e+00 -5.963916961902010e+00 3.832359092507432e+00 4.913861915206676e+00 9.106590717220904e+03 + 125540 1.081219951477477e+00 -5.932915861529744e+00 -5.978391310868883e+00 4.033340786985500e+00 4.772213719577123e+00 9.150828536161065e+03 + 125560 1.125449605056190e+00 -5.994371130196797e+00 -5.982512581338344e+00 3.718565944572181e+00 4.786659567221920e+00 9.163442612158698e+03 + 125580 1.186859722586394e+00 -6.090245463854491e+00 -5.972034131094916e+00 3.250605832692587e+00 4.929393598542692e+00 9.131389094805774e+03 + 125600 1.089030982738752e+00 -5.966654218185574e+00 -5.953042013799531e+00 3.870078484751655e+00 4.948241868818132e+00 9.073419893048242e+03 + 125620 1.021760289215146e+00 -5.902926662882873e+00 -5.940733849132510e+00 4.298208269097231e+00 5.081113555008651e+00 9.035945284070145e+03 + 125640 9.814839150866710e-01 -5.890602316239514e+00 -6.006404073144687e+00 4.250573417226613e+00 4.585621808813147e+00 9.236703207687464e+03 + 125660 1.037999285731651e+00 -6.030189571014499e+00 -5.974356348561984e+00 3.495813959226532e+00 4.816416962712123e+00 9.138488249677981e+03 + 125680 9.551825152910183e-01 -5.955910624108537e+00 -6.015787080314421e+00 3.902512084783592e+00 4.558692207397754e+00 9.265557956963570e+03 + 125700 9.726033814613453e-01 -6.016619267354353e+00 -5.985594547207881e+00 3.668126561071123e+00 4.846275305212096e+00 9.172881075348039e+03 + 125720 9.612809916496031e-01 -6.023804764931121e+00 -6.003229598832850e+00 3.588012232139724e+00 4.706158019872658e+00 9.226967665019087e+03 + 125740 1.035401968684546e+00 -6.149883215440727e+00 -5.950738302799014e+00 2.952616301728645e+00 5.096137207693001e+00 9.066455655232156e+03 + 125760 9.649353471912662e-01 -6.053391189519150e+00 -5.973996083018763e+00 3.443889883487218e+00 4.899788871365461e+00 9.137397824933234e+03 + 125780 9.390474983605321e-01 -6.017327882993260e+00 -5.993801342882723e+00 3.585897771034212e+00 4.720990805069230e+00 9.198021575105910e+03 + 125800 9.785108910638471e-01 -6.072959022851851e+00 -5.947337630185425e+00 3.313492744208733e+00 5.034830220747041e+00 9.056090725482029e+03 + 125820 9.436669535441604e-01 -6.013132036656266e+00 -6.003920962435579e+00 3.615909017208641e+00 4.668800430792957e+00 9.229075876438075e+03 + 125840 9.482587096932599e-01 -6.007129100036054e+00 -5.989979227711098e+00 3.662046269045141e+00 4.760523489869206e+00 9.186316354784814e+03 + 125860 9.608120790887555e-01 -6.007309771785031e+00 -6.033845045947523e+00 3.660458576694837e+00 4.508088926133400e+00 9.321250922584622e+03 + 125880 1.018350163597864e+00 -6.073820972137367e+00 -6.006473957740585e+00 3.294557162955924e+00 4.681274141539036e+00 9.236943432412018e+03 + 125900 9.887924360269364e-01 -6.011385898950010e+00 -6.015235858326106e+00 3.622217342662047e+00 4.600110280145216e+00 9.263878179905709e+03 + 125920 9.958588218604185e-01 -6.000045963391152e+00 -6.032538400868099e+00 3.668695314184196e+00 4.482118710003114e+00 9.317214819757693e+03 + 125940 1.065802825809796e+00 -6.081570500397539e+00 -5.979047406536282e+00 3.326508442270408e+00 4.915211912619249e+00 9.152850110536961e+03 + 125960 1.008204571873245e+00 -5.975380145696531e+00 -6.008671419392223e+00 3.833189039726022e+00 4.642025394357403e+00 9.243704173636637e+03 + 125980 1.002355300696404e+00 -5.947749671457522e+00 -6.039418859522347e+00 3.961072296845161e+00 4.434693633215928e+00 9.338442867238595e+03 + 126000 1.070322939067579e+00 -6.031495657248195e+00 -6.032683663250703e+00 3.551750193020037e+00 4.544928478710301e+00 9.317648243762374e+03 + 126020 1.080540821625192e+00 -6.031968710078305e+00 -5.976036830003016e+00 3.538057200359063e+00 4.859226711181842e+00 9.143646342701066e+03 + 126040 1.010352284103060e+00 -5.916394084110444e+00 -6.004248273339613e+00 4.126222750883993e+00 4.621750400938265e+00 9.230102133719836e+03 + 126060 9.936189891005375e-01 -5.883883684128283e+00 -6.048498909692882e+00 4.305395074142660e+00 4.360148974826902e+00 9.366519176931442e+03 + 126080 1.040572889425446e+00 -5.946971350999720e+00 -6.006768369252994e+00 4.006187514753634e+00 4.662823782384669e+00 9.237827222109252e+03 + 126100 1.074011697448616e+00 -5.991784204491791e+00 -5.988283534928775e+00 3.784203114995481e+00 4.804304501353180e+00 9.181104552559425e+03 + 126120 1.043327721086999e+00 -5.945054482126311e+00 -6.012197421405385e+00 3.947580599792178e+00 4.562035452115465e+00 9.254534157933602e+03 + 126140 1.012668938038879e+00 -5.903243631195958e+00 -6.051307201084065e+00 4.162498004475371e+00 4.312294073414475e+00 9.375240182504233e+03 + 126160 1.002049525542144e+00 -5.900897944640656e+00 -6.060419254521289e+00 4.260980819061892e+00 4.344984771884372e+00 9.403451506939511e+03 + 126180 1.016228764659691e+00 -5.949080547754446e+00 -6.027708361957030e+00 3.935181150061737e+00 4.483688073295577e+00 9.302306393301245e+03 + 126200 9.509187055770033e-01 -5.882620165532265e+00 -6.018753728238430e+00 4.357023151209265e+00 4.575323167549727e+00 9.274682676843489e+03 + 126220 9.905810802037659e-01 -5.973778162934403e+00 -6.015128200951174e+00 3.819486748142676e+00 4.582048430952675e+00 9.263531149392687e+03 + 126240 1.005605625605479e+00 -6.028714346709177e+00 -6.026092277101925e+00 3.544752401062634e+00 4.559808730511438e+00 9.297333157722274e+03 + 126260 9.855504242150177e-01 -6.032575286364621e+00 -6.033084407069212e+00 3.501919481936280e+00 4.498996032064346e+00 9.318905572537606e+03 + 126280 9.937509334446325e-01 -6.074649752246600e+00 -5.998001638091472e+00 3.280258171833364e+00 4.720383504569437e+00 9.210915850892492e+03 + 126300 9.537760273899872e-01 -6.039142211896226e+00 -5.981865381401023e+00 3.515696297823333e+00 4.844588722087663e+00 9.161459614690737e+03 + 126320 9.197020517765120e-01 -6.004050984677195e+00 -5.999051742814778e+00 3.702824828180694e+00 4.731531248584871e+00 9.214132796782798e+03 + 126340 1.004366728210673e+00 -6.139408835534846e+00 -5.994898324300915e+00 2.967722293970978e+00 4.797524012405553e+00 9.201403897981107e+03 + 126360 8.977370940620636e-01 -5.986476439726847e+00 -6.023305647426478e+00 3.761502207369202e+00 4.550023197456446e+00 9.288754880927771e+03 + 126380 9.581579661004165e-01 -6.075697823099003e+00 -6.029091458639776e+00 3.253159530306156e+00 4.520780487342630e+00 9.306584482010676e+03 + 126400 9.624464653476996e-01 -6.077063210382438e+00 -6.024113985995219e+00 3.258913968945238e+00 4.562956609242648e+00 9.291237424314984e+03 + 126420 9.666972274368565e-01 -6.075285128439799e+00 -5.979160675062667e+00 3.292234596709955e+00 4.844196083212530e+00 9.153183733083746e+03 + 126440 9.257702313964982e-01 -5.998727766568924e+00 -5.978563604528541e+00 3.729071059227829e+00 4.844856798057696e+00 9.151365055620172e+03 + 126460 9.867738893445132e-01 -6.064142543476539e+00 -5.969523226111564e+00 3.368293054211472e+00 4.911611816813197e+00 9.123740907981231e+03 + 126480 1.014982861392889e+00 -6.073478191542316e+00 -5.992641700760260e+00 3.322167382758571e+00 4.786343022235656e+00 9.194492422247118e+03 + 126500 1.052503233619153e+00 -6.091795075750636e+00 -5.998669845250659e+00 3.268037918551459e+00 4.802777403165171e+00 9.212977867146185e+03 + 126520 9.732106957277720e-01 -5.940699960549144e+00 -6.042203034598334e+00 3.977345471274317e+00 4.394499112533927e+00 9.347064651271494e+03 + 126540 1.027188861095846e+00 -5.990617722013163e+00 -5.999985066710535e+00 3.757638494582419e+00 4.703849751738204e+00 9.217002700837736e+03 + 126560 1.003445895595316e+00 -5.929888103308469e+00 -5.998187642103611e+00 4.050191288272151e+00 4.658004767190979e+00 9.211466667628623e+03 + 126580 1.032442380135101e+00 -5.953391376722640e+00 -5.985992781631492e+00 3.912441165935438e+00 4.725238853897705e+00 9.174108841103156e+03 + 126600 1.041525910018534e+00 -5.951973384666887e+00 -6.047424941596542e+00 3.952105078046879e+00 4.404007467076109e+00 9.363204449572999e+03 + 126620 1.025861650244323e+00 -5.923388752323168e+00 -6.018902158208336e+00 4.053463979988038e+00 4.505011222743612e+00 9.275174320393746e+03 + 126640 1.071931169848964e+00 -5.990147089516754e+00 -6.008489231203121e+00 3.757589748224180e+00 4.652266332223813e+00 9.243124398802214e+03 + 126660 1.012097017604710e+00 -5.905990885039561e+00 -6.047271170209743e+00 4.200350739670460e+00 4.389097479169801e+00 9.362732538907863e+03 + 126680 1.051451057047113e+00 -5.974892065310292e+00 -6.001117808300541e+00 3.816702072754249e+00 4.666109798083628e+00 9.220469066878813e+03 + 126700 1.015475203316565e+00 -5.931852527227987e+00 -6.029616478590155e+00 4.049058814949927e+00 4.487683077305777e+00 9.308169303801764e+03 + 126720 9.985391090683801e-01 -5.918418609230604e+00 -6.067769588855175e+00 4.127167663191647e+00 4.269571226197960e+00 9.426245582270356e+03 + 126740 1.010381504880904e+00 -5.949519893748811e+00 -6.046887099837126e+00 3.974586169876065e+00 4.415488604990516e+00 9.361536864098702e+03 + 126760 9.877567096521568e-01 -5.928734124705440e+00 -6.023807014159334e+00 4.071555057335239e+00 4.525631813608887e+00 9.290273332465742e+03 + 126780 1.048494801770816e+00 -6.032740332262077e+00 -6.003277326571490e+00 3.477461238143713e+00 4.646642376204460e+00 9.227102706975897e+03 + 126800 1.029802673025638e+00 -6.018790550510474e+00 -5.969002894977253e+00 3.611901572839508e+00 4.897789995526057e+00 9.122118753151226e+03 + 126820 1.007661856281030e+00 -5.995929921436116e+00 -5.987858495783819e+00 3.748992844288883e+00 4.795340219433457e+00 9.179790478808596e+03 + 126840 9.994073434041534e-01 -5.991707206086002e+00 -5.990763289598833e+00 3.746613814806365e+00 4.752033929346297e+00 9.188714909451566e+03 + 126860 1.071852687540978e+00 -6.104624386163079e+00 -5.969122690991814e+00 3.125358512342136e+00 4.903430214835099e+00 9.122519369061189e+03 + 126880 1.020774821089471e+00 -6.033737110009005e+00 -6.006603928173111e+00 3.538201828214290e+00 4.694004757162313e+00 9.237309560236492e+03 + 126900 9.597981384505995e-01 -5.947105264013785e+00 -6.030672607714600e+00 3.992597164544192e+00 4.512740545009467e+00 9.311440407292059e+03 + 126920 1.057083226994604e+00 -6.095967897546941e+00 -5.970918347877355e+00 3.204514206793671e+00 4.922568072351704e+00 9.127996632826671e+03 + 126940 9.297765619612924e-01 -5.911640495032261e+00 -6.038843500697634e+00 4.126712680630426e+00 4.396293337498348e+00 9.336670990923150e+03 + 126960 9.852217117654888e-01 -5.997010517103025e+00 -6.012065876898925e+00 3.702565551546328e+00 4.616115345788876e+00 9.254105152751907e+03 + 126980 9.858341561308115e-01 -5.998067400448159e+00 -5.978723185418414e+00 3.676290832699344e+00 4.787368308907743e+00 9.151861772388538e+03 + 127000 9.879359794822126e-01 -5.998797942917931e+00 -6.049483424413829e+00 3.710157472443961e+00 4.419113594141603e+00 9.369552639916028e+03 + 127020 9.526110090733547e-01 -5.945157457546740e+00 -6.018552386325988e+00 4.091347230350085e+00 4.669902191471126e+00 9.274093726943685e+03 + 127040 9.767921039317932e-01 -5.979848179448197e+00 -5.980785234980231e+00 3.802734486050912e+00 4.797353768177099e+00 9.158153924167924e+03 + 127060 1.010681262935819e+00 -6.026158587143191e+00 -5.977507359766596e+00 3.600625769313951e+00 4.879988645663459e+00 9.148128117551991e+03 + 127080 1.007655219694128e+00 -6.015747926938898e+00 -6.003903675471872e+00 3.638861077890150e+00 4.706872602705804e+00 9.229058094347096e+03 + 127100 1.015822739429654e+00 -6.021706263918435e+00 -6.023601327861203e+00 3.581069271526913e+00 4.570187521107338e+00 9.289636362595553e+03 + 127120 1.039947431421970e+00 -6.049271525994542e+00 -5.970759876777067e+00 3.451904333093588e+00 4.902730372538782e+00 9.127501192303063e+03 + 127140 1.029450304533891e+00 -6.020426513565474e+00 -5.993070491502103e+00 3.565370362425317e+00 4.722452874443926e+00 9.195766604225701e+03 + 127160 9.595297056093001e-01 -5.897569930412183e+00 -6.011784697635629e+00 4.204698564292221e+00 4.548859696217086e+00 9.253227425875866e+03 + 127180 1.032471472195369e+00 -5.975520427184144e+00 -5.984893337520771e+00 3.870077576006935e+00 4.816256874400841e+00 9.170719129699613e+03 + 127200 1.027881685995342e+00 -5.930542404970062e+00 -6.019241770645679e+00 4.045388510713384e+00 4.536063026821515e+00 9.276214400387367e+03 + 127220 1.079888643148452e+00 -5.968161008773680e+00 -6.023747493244224e+00 3.835615470816537e+00 4.516429275005997e+00 9.290096495824264e+03 + 127240 1.007006080992803e+00 -5.829570705031059e+00 -6.068442222455127e+00 4.525750167750919e+00 4.154112949454063e+00 9.428330330049228e+03 + 127260 9.857639023709340e-01 -5.777230894464740e+00 -6.048993836220127e+00 4.861893092358580e+00 4.301388225619826e+00 9.368041759356160e+03 + 127280 1.085940612239046e+00 -5.912470231746411e+00 -6.048234340494655e+00 4.085440772268099e+00 4.305862250407753e+00 9.365705710476548e+03 + 127300 1.061257141174926e+00 -5.872014577333476e+00 -5.985480676800453e+00 4.414978259951712e+00 4.763438357990185e+00 9.172538210268684e+03 + 127320 1.100522132757640e+00 -5.934154242610391e+00 -6.028971446816051e+00 4.053640956774854e+00 4.509185897311023e+00 9.306204453506001e+03 + 127340 1.066597477286030e+00 -5.903687977244488e+00 -6.020895317185328e+00 4.187235301993772e+00 4.514212618276232e+00 9.281298674126341e+03 + 127360 1.087694465066298e+00 -5.964211575103045e+00 -5.990184570086203e+00 3.911291143294357e+00 4.762150186793080e+00 9.186907025657551e+03 + 127380 1.049356762687138e+00 -5.943295228145061e+00 -5.988686956621363e+00 3.992225530941398e+00 4.731579201683192e+00 9.182355369031997e+03 + 127400 9.725052840397832e-01 -5.867161045153154e+00 -6.042014372846904e+00 4.421300123752491e+00 4.417265257669968e+00 9.346442416527016e+03 + 127420 1.051022758899312e+00 -6.020963599377749e+00 -6.024090727246411e+00 3.575263977985044e+00 4.557307525841715e+00 9.291146796927440e+03 + 127440 1.007921520592668e+00 -5.990965013958167e+00 -6.026125361283382e+00 3.733654595173410e+00 4.531758439785862e+00 9.297453832424057e+03 + 127460 9.871330663387800e-01 -5.991136612016938e+00 -6.043495566398008e+00 3.692982856533308e+00 4.392329637955199e+00 9.351076381245724e+03 + 127480 1.037162025836960e+00 -6.090363892875780e+00 -5.987196418533715e+00 3.246428597155899e+00 4.838832199943097e+00 9.177794745736765e+03 + 127500 8.865150670664946e-01 -5.883536993723847e+00 -6.009084914183722e+00 4.362707444823544e+00 4.641791857065040e+00 9.244931359400351e+03 + 127520 1.003102155548931e+00 -6.064778683411097e+00 -5.963062459480788e+00 3.344528368702449e+00 4.928598667045066e+00 9.104001853516766e+03 + 127540 9.974974078522862e-01 -6.060364985122694e+00 -5.989770386140426e+00 3.349757030262414e+00 4.755122142097484e+00 9.185681802488753e+03 + 127560 9.545369493599074e-01 -5.999908842649927e+00 -5.975654016704667e+00 3.704504056497043e+00 4.843779020496914e+00 9.142464796739479e+03 + 127580 9.731547490642515e-01 -6.025163416753940e+00 -5.997567275081018e+00 3.543580969361009e+00 4.702042285336050e+00 9.209582768427324e+03 + 127600 1.035800585997533e+00 -6.114078271638102e+00 -5.964431027030997e+00 3.086288590286762e+00 4.945586226657023e+00 9.108190642618472e+03 + 127620 9.536787599374443e-01 -5.987459311570670e+00 -5.989096135218199e+00 3.779227336171892e+00 4.769828441490139e+00 9.183553554581349e+03 + 127640 9.587521051586863e-01 -5.986145643381080e+00 -5.989833155993152e+00 3.794784762527958e+00 4.773610494468714e+00 9.185826914571700e+03 + 127660 9.990134475016830e-01 -6.030932508174542e+00 -5.983635896308229e+00 3.532736784181894e+00 4.804321248645292e+00 9.166863053195304e+03 + 127680 1.011978521356086e+00 -6.032720736916890e+00 -5.952275479381816e+00 3.521235156445239e+00 4.983164274075005e+00 9.071109558019261e+03 + 127700 9.927662620928909e-01 -5.981674781346862e+00 -5.972265092542253e+00 3.809848225388653e+00 4.863880114649350e+00 9.132094187462446e+03 + 127720 1.042692533133877e+00 -6.029769082116383e+00 -5.980523989501355e+00 3.515083357926245e+00 4.797856300375188e+00 9.157355350970132e+03 + 127740 1.025884990650385e+00 -5.974929785046936e+00 -5.990635677287614e+00 3.862333233192249e+00 4.772147569467313e+00 9.188311577644314e+03 + 127760 1.005302005156088e+00 -5.911996567052520e+00 -6.005296968167061e+00 4.198609583528446e+00 4.662864242138345e+00 9.233260945505821e+03 + 127780 1.023770807705223e+00 -5.906453327680439e+00 -6.006862678030421e+00 4.222531347903925e+00 4.645965319897578e+00 9.238111329522006e+03 + 127800 1.082690144564573e+00 -5.959887744261756e+00 -5.980157452104243e+00 3.968822936936748e+00 4.852431137778039e+00 9.156205439297637e+03 + 127820 1.065286821440856e+00 -5.902278781020101e+00 -6.006421553767138e+00 4.206379941902524e+00 4.608376024747037e+00 9.236709429114058e+03 + 127840 1.037986464659272e+00 -5.834088254570290e+00 -6.015941441064063e+00 4.553313773678932e+00 4.509084635142023e+00 9.266011827084203e+03 + 127860 1.052751947384366e+00 -5.832699184527084e+00 -6.053215640459521e+00 4.572934037202550e+00 4.306694422427231e+00 9.381126935088652e+03 + 127880 1.146389685621485e+00 -5.953099524813645e+00 -6.054024597100646e+00 3.949559898478701e+00 4.370032515302280e+00 9.383622937091883e+03 + 127900 1.121928591464230e+00 -5.911772056053179e+00 -6.034429473481056e+00 4.196050506812249e+00 4.491732634767381e+00 9.323037140985296e+03 + 127920 1.109173562730930e+00 -5.905324783393100e+00 -6.016923231155616e+00 4.170321702591446e+00 4.529506145735102e+00 9.269041408721067e+03 + 127940 1.065335256081995e+00 -5.874855302430412e+00 -5.962661185509113e+00 4.313054934713614e+00 4.808859966159223e+00 9.102757922780882e+03 + 127960 1.068344447928427e+00 -5.937152803151026e+00 -5.981005008228821e+00 4.016268955939189e+00 4.764462808275689e+00 9.158780250916772e+03 + 127980 1.018759429566964e+00 -5.934803740719032e+00 -5.995192243726732e+00 4.027103396521558e+00 4.680343267160706e+00 9.202300047932895e+03 + 128000 9.387072094197848e-01 -5.876573989395136e+00 -6.047764247648476e+00 4.347974461675557e+00 4.364973507178033e+00 9.364247071835691e+03 + 128020 1.000451242637367e+00 -6.007812424870898e+00 -5.990631275921212e+00 3.685437974887076e+00 4.784094790930380e+00 9.188292406885394e+03 + 128040 1.032553655181270e+00 -6.083940746947192e+00 -6.005037701599145e+00 3.236978267604957e+00 4.690051764200253e+00 9.232526881566817e+03 + 128060 1.006423967350842e+00 -6.068702389053529e+00 -5.998745738701910e+00 3.291405172896365e+00 4.693107084972020e+00 9.213185230403278e+03 + 128080 9.289077634255066e-01 -5.971379357648027e+00 -5.943475598958027e+00 3.832082901012491e+00 4.992310601503171e+00 9.044313146059681e+03 + 128100 9.463319589579593e-01 -6.004990136312212e+00 -5.894829915301774e+00 3.691906639726086e+00 5.324463676007134e+00 8.897010192367785e+03 + 128120 9.798802837569099e-01 -6.054000389621859e+00 -5.955997861773470e+00 3.394062929827252e+00 4.956808610574867e+00 9.082464277852458e+03 + 128140 1.004070998564655e+00 -6.085740123895430e+00 -5.985691103719994e+00 3.225646955236049e+00 4.800143911619238e+00 9.173151844094180e+03 + 128160 9.925650330039432e-01 -6.062932006962921e+00 -5.943600078308990e+00 3.355262059210232e+00 5.040484460097380e+00 9.044715773936745e+03 + 128180 1.028158427389251e+00 -6.105286494714720e+00 -5.969786130840967e+00 3.126482140723247e+00 4.904546198699881e+00 9.124514958583961e+03 + 128200 9.595227390759470e-01 -5.987249614035392e+00 -6.002469492335815e+00 3.746147410172869e+00 4.658752513703281e+00 9.224619228767000e+03 + 128220 9.682999439818541e-01 -5.981636961125142e+00 -5.960532414900518e+00 3.803546487181629e+00 4.924732057521396e+00 9.096281726946736e+03 + 128240 8.647145057747702e-01 -5.805451555606286e+00 -6.071903273829191e+00 4.668911684370788e+00 4.138904685064735e+00 9.439089824538987e+03 + 128260 1.052106403536501e+00 -6.057350290796379e+00 -6.007578886570073e+00 3.376003633220704e+00 4.661798738388065e+00 9.240308026791652e+03 + 128280 9.954038855501277e-01 -5.948336843958561e+00 -5.988248245125536e+00 3.998431285850210e+00 4.769253844080068e+00 9.181005224641054e+03 + 128300 1.045287568301547e+00 -5.998746049165963e+00 -6.010804880863547e+00 3.681371373690255e+00 4.612127695984556e+00 9.250223248416178e+03 + 128320 1.047977424011754e+00 -5.979793056458488e+00 -6.013319276615354e+00 3.848339925452775e+00 4.655827181146247e+00 9.257980657188600e+03 + 128340 1.050073647864767e+00 -5.965802460527244e+00 -6.023159455791997e+00 3.857681368563514e+00 4.528328625786971e+00 9.288281828705563e+03 + 128360 1.051525452285047e+00 -5.956582164653073e+00 -6.013906338077664e+00 3.888414627054256e+00 4.559250352363084e+00 9.259798917355236e+03 + 128380 1.056110961703002e+00 -5.957188253962125e+00 -6.020845660736772e+00 3.919315357124751e+00 4.553784676472868e+00 9.281154634545570e+03 + 128400 1.045569647423122e+00 -5.940500875818298e+00 -6.001151609421267e+00 4.006312801738305e+00 4.658046903719362e+00 9.220570108375496e+03 + 128420 9.832475297539028e-01 -5.853449167501552e+00 -5.976994019070416e+00 4.522621067826034e+00 4.813207411613623e+00 9.146520316509967e+03 + 128440 1.097252497085282e+00 -6.031253649927362e+00 -5.990953372154626e+00 3.527456484757242e+00 4.758866916176120e+00 9.189276031103309e+03 + 128460 9.975150703572050e-01 -5.899287254841412e+00 -6.055128630205241e+00 4.225299938637596e+00 4.330434644923597e+00 9.387039326713433e+03 + 128480 1.068793385743430e+00 -6.035038015236009e+00 -6.011855602791601e+00 3.463604640439933e+00 4.596721640162452e+00 9.253471641181304e+03 + 128500 1.023290096933179e+00 -6.012896584697229e+00 -5.968015394406229e+00 3.640587989385077e+00 4.898302729377752e+00 9.119121095380660e+03 + 128520 9.439574297988668e-01 -5.947390848902583e+00 -6.003578142947180e+00 4.014217686441378e+00 4.691581549081646e+00 9.228024226228026e+03 + 128540 9.554439910681820e-01 -6.012856206422853e+00 -5.973999208016886e+00 3.654479685419697e+00 4.877602583367828e+00 9.137379718878901e+03 + 128560 9.475195204901365e-01 -6.035507830840991e+00 -5.958071488832198e+00 3.530763039655073e+00 4.975414498704756e+00 9.088771086038116e+03 + 128580 9.455431384238935e-01 -6.053308580034300e+00 -5.951835703882524e+00 3.478782508293704e+00 5.061455466034039e+00 9.069770334124851e+03 + 128600 9.656796039485217e-01 -6.093955981370375e+00 -5.976153046703790e+00 3.199370542212150e+00 4.875813223012907e+00 9.143998462795233e+03 + 128620 8.505157921866495e-01 -5.924542686665331e+00 -6.022015459557739e+00 4.099069739885319e+00 4.539365994074259e+00 9.284766717530827e+03 + 128640 9.698506302999883e-01 -6.096824070366317e+00 -5.992162803712375e+00 3.151378121021208e+00 4.752359310426812e+00 9.193013020229248e+03 + 128660 9.604679393152528e-01 -6.074121629584546e+00 -5.998404164414745e+00 3.307386846400697e+00 4.742168248645562e+00 9.212169762923990e+03 + 128680 9.879656359653279e-01 -6.102296028933983e+00 -5.979575573255415e+00 3.186310212308688e+00 4.890990059744163e+00 9.154467768829905e+03 + 128700 9.202843401766456e-01 -5.985519874063225e+00 -5.987468245535381e+00 3.799003659936934e+00 4.787815809434305e+00 9.178623681600811e+03 + 128720 9.851702106098040e-01 -6.061180316987536e+00 -5.999900703624086e+00 3.336730233537585e+00 4.688607256460033e+00 9.216758858808484e+03 + 128740 9.663434045177725e-01 -6.010018647814018e+00 -6.008139109325924e+00 3.667138418519277e+00 4.677931019375550e+00 9.242051055287788e+03 + 128760 1.015568734502812e+00 -6.060139969355067e+00 -5.975042096299700e+00 3.343338637162192e+00 4.831983793099406e+00 9.140587174674181e+03 + 128780 1.028875969339291e+00 -6.055912219203117e+00 -5.962299449734457e+00 3.402281514686474e+00 4.939820523504777e+00 9.101680644472521e+03 + 128800 9.757179717818161e-01 -5.955764500472258e+00 -6.002445331639901e+00 3.934223835951568e+00 4.666175279551684e+00 9.224551750772871e+03 + 128820 1.034385775352941e+00 -6.024761355050257e+00 -5.978302506480723e+00 3.569346660804829e+00 4.836120558774677e+00 9.150551930815616e+03 + 128840 1.060909702100942e+00 -6.048502449440511e+00 -5.993207740114505e+00 3.489202828814317e+00 4.806713606592860e+00 9.196198157205057e+03 + 128860 1.051692460075836e+00 -6.023960057677946e+00 -5.999768479243894e+00 3.581777562768899e+00 4.720689349771888e+00 9.216344939062039e+03 + 128880 1.033252329188637e+00 -5.990825881819732e+00 -6.004901333175344e+00 3.749818843053057e+00 4.668995423200078e+00 9.232108956426706e+03 + 128900 1.016075023949411e+00 -5.964010508843751e+00 -5.989342786176423e+00 3.904147360761310e+00 4.758685504159859e+00 9.184364900553275e+03 + 128920 1.058581716127306e+00 -6.027517033939924e+00 -5.968801569234006e+00 3.566802144033834e+00 4.903955428564015e+00 9.121493742782790e+03 + 128940 9.759260074279310e-01 -5.906978997447178e+00 -6.023036620597526e+00 4.211758278561425e+00 4.545337446572987e+00 9.287886643799811e+03 + 128960 1.002313103294546e+00 -5.949324937377976e+00 -6.010868823610426e+00 3.969503554832230e+00 4.616109036199888e+00 9.250437437293522e+03 + 128980 1.044345472213966e+00 -6.015296303033006e+00 -6.002338487918886e+00 3.605939565102536e+00 4.680345344703222e+00 9.224248971286674e+03 + 129000 1.048738092576143e+00 -6.029642180566197e+00 -6.003983459012173e+00 3.560149878972292e+00 4.707486228809825e+00 9.229286111759126e+03 + 129020 9.727673165620796e-01 -5.924350637877566e+00 -6.033033343283979e+00 4.136018309537236e+00 4.511945396499310e+00 9.318708532168152e+03 + 129040 9.502613736836092e-01 -5.897493625092650e+00 -6.014201873221145e+00 4.295142476440171e+00 4.624985655143328e+00 9.260673677525067e+03 + 129060 1.020526873253962e+00 -6.005610557264253e+00 -5.974632776850246e+00 3.695651274405251e+00 4.873530483338506e+00 9.139337899452343e+03 + 129080 1.055514338312259e+00 -6.062792128115350e+00 -5.977677433964948e+00 3.363235836459920e+00 4.851977581727880e+00 9.148658774957310e+03 + 129100 9.229781647320041e-01 -5.870502255378035e+00 -6.043581041663495e+00 4.345521513944307e+00 4.351676339237576e+00 9.351321695135710e+03 + 129120 1.079864516932587e+00 -6.106398734894460e+00 -5.960961931063164e+00 3.137425685932840e+00 4.972546319804795e+00 9.097611756743001e+03 + 129140 1.004987044183094e+00 -6.000315949639446e+00 -5.989135098041931e+00 3.689807385292234e+00 4.754009565396357e+00 9.183728962679308e+03 + 129160 9.770102792761569e-01 -5.964690788915311e+00 -5.986999528636860e+00 3.812539558485320e+00 4.684439322737872e+00 9.177173003940377e+03 + 129180 9.325572406222066e-01 -5.901570630066749e+00 -5.963911306831359e+00 4.203371107119482e+00 4.845401293948544e+00 9.106568023171707e+03 + 129200 9.545276732589868e-01 -5.932505892076356e+00 -6.005431489696488e+00 4.027427861623725e+00 4.608677794889163e+00 9.233709569360031e+03 + 129220 1.006893725446736e+00 -6.006635350703687e+00 -5.982182605496312e+00 3.666738613436068e+00 4.807150060466909e+00 9.162418746545918e+03 + 129240 1.015208461534815e+00 -6.016495962379730e+00 -5.986557432272103e+00 3.565955615928415e+00 4.737867288778974e+00 9.175823231988918e+03 + 129260 1.046717135637673e+00 -6.060911551639271e+00 -5.982163393657437e+00 3.335702222990688e+00 4.787886332360441e+00 9.162365551202738e+03 + 129280 1.010383501473100e+00 -6.006489009792996e+00 -6.007219433767167e+00 3.630877457038610e+00 4.626683249546176e+00 9.239207278051275e+03 + 129300 9.922836962293752e-01 -5.980550126982769e+00 -5.999212704896792e+00 3.799934805598405e+00 4.692771395191484e+00 9.214613255065758e+03 + 129320 9.694310687226775e-01 -5.944275016358281e+00 -6.005203863464919e+00 3.940275300135311e+00 4.590412431340381e+00 9.233049580482906e+03 + 129340 9.936257037949381e-01 -5.979255205618803e+00 -6.023645928117546e+00 3.775598105289140e+00 4.520699707259258e+00 9.289789670069071e+03 + 129360 1.020403333289133e+00 -6.020397623111294e+00 -6.004299511015038e+00 3.611446642070187e+00 4.703884492901686e+00 9.230240800264670e+03 + 129380 9.907142361799818e-01 -5.976940386754113e+00 -5.993869769594108e+00 3.910117175668594e+00 4.812906039587819e+00 9.198224491073790e+03 + 129400 9.946641828799671e-01 -5.982129936549329e+00 -6.015764973751194e+00 3.828466067948489e+00 4.635328479330197e+00 9.265514493055351e+03 + 129420 1.076064266214556e+00 -6.104942850561373e+00 -5.974908955661144e+00 3.130300397024480e+00 4.876975144221795e+00 9.140197338899059e+03 + 129440 9.823927067437052e-01 -5.969617214907251e+00 -6.056125175198895e+00 3.841662923628983e+00 4.344920828570769e+00 9.390141258505906e+03 + 129460 1.017941905181488e+00 -6.032328517798633e+00 -6.009777050574376e+00 3.551141436801058e+00 4.680635451431013e+00 9.247097204924296e+03 + 129480 9.959151026773121e-01 -6.017031689896564e+00 -5.965013669014875e+00 3.657591933963023e+00 4.956287459628402e+00 9.109952269142183e+03 + 129500 9.731663921552207e-01 -6.005612391473320e+00 -5.959352128450965e+00 3.766084916384413e+00 5.031718505411341e+00 9.092660077333405e+03 + 129520 9.029051394701073e-01 -5.921803349507596e+00 -5.987880792580370e+00 4.104547826342279e+00 4.725120922767144e+00 9.179875883815697e+03 + 129540 9.482890567362423e-01 -6.007096064932270e+00 -5.997172603792926e+00 3.629739434826967e+00 4.686721484339730e+00 9.208376762257290e+03 + 129560 9.600456959124766e-01 -6.040016487476182e+00 -5.998349599527732e+00 3.532384700877478e+00 4.771642419407552e+00 9.211972781171287e+03 + 129580 9.776220570354500e-01 -6.078498325142204e+00 -6.017523136257008e+00 3.353626463205465e+00 4.703755433664247e+00 9.270918140923710e+03 + 129600 9.034900101022930e-01 -5.978232854312960e+00 -6.023802624344478e+00 3.839109305385481e+00 4.577440633965381e+00 9.290248271526114e+03 + 129620 9.562344850865300e-01 -6.061728257677846e+00 -5.939708780447196e+00 3.421550797603354e+00 5.122205518314823e+00 9.032907197370518e+03 + 129640 9.033621199933575e-01 -5.979869879511972e+00 -6.000276395162891e+00 3.872268246494183e+00 4.755090875728511e+00 9.217881766406143e+03 + 129660 1.052373973756105e+00 -6.191384891903369e+00 -5.959566991643456e+00 2.730620287546738e+00 5.061754544543286e+00 9.093358300320138e+03 + 129680 9.616629357566057e-01 -6.045040165367610e+00 -5.981283359414459e+00 3.456166720132436e+00 4.822268166249258e+00 9.159676365739697e+03 + 129700 9.695868950169850e-01 -6.039252332060416e+00 -5.969990815929365e+00 3.506734683317018e+00 4.904445027126493e+00 9.125157130010992e+03 + 129720 1.009120616043809e+00 -6.072515418737348e+00 -5.991060227056860e+00 3.331208982160830e+00 4.798937297940367e+00 9.189630841143100e+03 + 129740 1.006173006029847e+00 -6.040854511393437e+00 -6.020959441523466e+00 3.400343853638968e+00 4.514584423584457e+00 9.281498872566202e+03 + 129760 1.046404590331147e+00 -6.070650586562063e+00 -5.998378947755061e+00 3.283852827703206e+00 4.698847761732974e+00 9.212086736764017e+03 + 129780 9.883877901615780e-01 -5.957045006032190e+00 -6.032444945101710e+00 3.905387073796957e+00 4.472428955556914e+00 9.316908322713509e+03 + 129800 1.003533052271296e+00 -5.955618091562554e+00 -6.000273726777280e+00 3.881459348858640e+00 4.625039781018470e+00 9.217897549190282e+03 + 129820 9.832070289474178e-01 -5.903764182484596e+00 -5.971649966342071e+00 4.242272837326565e+00 4.852462161125843e+00 9.130213332301517e+03 + 129840 1.010187188159006e+00 -5.923893870619227e+00 -5.971393107398547e+00 4.135025048305565e+00 4.862277080235575e+00 9.129419611066607e+03 + 129860 1.013614863634049e+00 -5.910417592514338e+00 -5.991697745171674e+00 4.254859324924979e+00 4.788136110303586e+00 9.191565130420984e+03 + 129880 1.067925335110951e+00 -5.976313005616007e+00 -6.075367340785015e+00 3.760066930175666e+00 4.191281609026396e+00 9.449857056188530e+03 + 129900 1.117967033321007e+00 -6.046554551978498e+00 -5.983880714234401e+00 3.414203909916396e+00 4.774086784988046e+00 9.167642150304247e+03 + 129920 1.005401900635174e+00 -5.882831416601722e+00 -5.978893197357828e+00 4.393403178479215e+00 4.841801567865128e+00 9.152331031994041e+03 + 129940 1.010753057391384e+00 -5.895054613244981e+00 -6.015282077484189e+00 4.228494083010274e+00 4.538129378208779e+00 9.263995717515687e+03 + 129960 1.093399613155166e+00 -6.025124407169180e+00 -6.023069244013273e+00 3.538907412855640e+00 4.550708477732329e+00 9.287986099360787e+03 + 129980 1.009150668472008e+00 -5.919702858404034e+00 -5.998578261076164e+00 4.166678067422347e+00 4.713763299349867e+00 9.212680768841359e+03 + 130000 1.037751547993773e+00 -5.992110109889762e+00 -6.009552526758010e+00 3.770345127426452e+00 4.670188070563684e+00 9.246374161426193e+03 + 130020 9.908145180159973e-01 -5.963389106192283e+00 -5.970904010438749e+00 3.949870438530954e+00 4.906718695420067e+00 9.127933531448667e+03 + 130040 9.280155673539134e-01 -5.917251256727734e+00 -5.992916074230699e+00 4.137286513966719e+00 4.702807422772028e+00 9.195297499187283e+03 + 130060 9.595524704139696e-01 -6.010133675779773e+00 -6.010161600911466e+00 3.614478586075526e+00 4.614318235647945e+00 9.248201819458518e+03 + 130080 9.314203886347654e-01 -6.005599831183238e+00 -6.041816938093032e+00 3.600835918355036e+00 4.392871685899816e+00 9.345861501453346e+03 + 130100 9.517344424367696e-01 -6.062809667729904e+00 -5.973967359265375e+00 3.355062546495795e+00 4.865208830001926e+00 9.137330379887740e+03 + 130120 8.813290888018622e-01 -5.972700300468483e+00 -6.024697729710567e+00 3.817509323701857e+00 4.518932038417640e+00 9.293006708426925e+03 + 130140 1.033412690909530e+00 -6.204167456474518e+00 -5.937667491788797e+00 2.639062937546925e+00 5.169346975508583e+00 9.026710583435230e+03 + 130160 9.582197545886285e-01 -6.091905911710287e+00 -5.967676985779068e+00 3.157458047688994e+00 4.870799764750204e+00 9.118103773112454e+03 + 130180 8.632549572159915e-01 -5.943696291556827e+00 -5.999447959981097e+00 3.968616885561908e+00 4.648482177926941e+00 9.215338450618285e+03 + 130200 1.013752135444461e+00 -6.153646426214869e+00 -5.967040219925130e+00 2.878883730670323e+00 4.950405444403106e+00 9.116154243543957e+03 + 130220 9.612794038489771e-01 -6.061639873288725e+00 -5.963935317415885e+00 3.371638577316571e+00 4.932673256869575e+00 9.106645607708262e+03 + 130240 9.239330646508690e-01 -5.988488246858412e+00 -5.973162002563834e+00 3.723997271473501e+00 4.812002937941611e+00 9.134840893456889e+03 + 130260 9.710014946844866e-01 -6.036736936302495e+00 -6.000051202350139e+00 3.468767235512081e+00 4.679422396965490e+00 9.217213491892917e+03 + 130280 9.743768838340293e-01 -6.020368948625114e+00 -6.036476538172151e+00 3.531478065859158e+00 4.438985794038647e+00 9.329391992365876e+03 + 130300 9.279046530605765e-01 -5.933439282487546e+00 -6.017622512484666e+00 4.046722058525956e+00 4.563328924569759e+00 9.271217885321294e+03 + 130320 1.018396314722176e+00 -6.048873719129234e+00 -5.988657926507931e+00 3.379420993875897e+00 4.725189393471213e+00 9.182280662231853e+03 + 130340 1.047347152683664e+00 -6.074403459039202e+00 -5.940334266318025e+00 3.313904845048186e+00 5.083750896793706e+00 9.034791519423512e+03 + 130360 9.485508560498295e-01 -5.910397020820428e+00 -6.051217172546302e+00 4.158477263490039e+00 4.349866160432021e+00 9.374933608940177e+03 + 130380 1.069775604446337e+00 -6.075299827264171e+00 -5.985059801567441e+00 3.355384050684886e+00 4.873556242834353e+00 9.171247966702915e+03 + 130400 9.606198868153359e-01 -5.902847464718493e+00 -6.015385317223734e+00 4.185904485691843e+00 4.539694721430360e+00 9.264336105971588e+03 + 130420 1.002803889277898e+00 -5.958516965497759e+00 -5.966661317655273e+00 3.885574351828278e+00 4.838808221405405e+00 9.114995915702782e+03 + 130440 9.822701979978311e-01 -5.921607600915568e+00 -5.993168748091777e+00 4.144306707036171e+00 4.733391525898644e+00 9.196001144659876e+03 + 130460 9.891693959316625e-01 -5.924901303532156e+00 -5.981960606810342e+00 4.146202828905038e+00 4.818559479583048e+00 9.161704090523775e+03 + 130480 9.808002622514090e-01 -5.906011284052338e+00 -5.979751610289825e+00 4.161662736705834e+00 4.738234372171575e+00 9.154967991838661e+03 + 130500 9.892647259064381e-01 -5.911841127004600e+00 -6.003225121047725e+00 4.156213417315598e+00 4.631472381892598e+00 9.226961854874482e+03 + 130520 1.142076245454957e+00 -6.134164498241263e+00 -6.006113986570374e+00 2.959248364311468e+00 4.694534218078349e+00 9.235848541561476e+03 + 130540 1.007313198739957e+00 -5.938236094929297e+00 -6.020044121234127e+00 3.999470327844580e+00 4.529715981051088e+00 9.278698740380993e+03 + 130560 9.857476702324003e-01 -5.916242687883362e+00 -6.003884296458702e+00 4.119824482261775e+00 4.616572803327076e+00 9.228953761291472e+03 + 130580 1.069192919484169e+00 -6.054065597455280e+00 -5.942416334624140e+00 3.441551813059276e+00 5.082659157903265e+00 9.041101041490014e+03 + 130600 1.040974700502877e+00 -6.034759215719706e+00 -5.962142455425467e+00 3.526301293488378e+00 4.943277968505236e+00 9.101201862531399e+03 + 130620 1.045799231330264e+00 -6.081023764086412e+00 -5.977143752890905e+00 3.226442500187407e+00 4.822937599851789e+00 9.147024541023015e+03 + 130640 9.304060353517893e-01 -5.966932838631656e+00 -6.028648823922307e+00 3.865453756780490e+00 4.511071018723718e+00 9.305173647295003e+03 + 130660 8.550211192301715e-01 -5.909412888423455e+00 -6.010028320260917e+00 4.163961333099687e+00 4.586211953301222e+00 9.247785990933997e+03 + 130680 9.262755517295742e-01 -6.053803198453267e+00 -5.926903075509967e+00 3.428762114986681e+00 5.157442258657669e+00 8.994004034778938e+03 + 130700 9.354913654966395e-01 -6.089392531243090e+00 -5.931575679845718e+00 3.251121289560703e+00 5.157330072363235e+00 9.008192084560962e+03 + 130720 9.722619306150498e-01 -6.154287362840794e+00 -5.940171820469064e+00 2.887360183935924e+00 5.116844762507495e+00 9.034306822792556e+03 + 130740 9.423412200013547e-01 -6.111743270916906e+00 -5.992542425097653e+00 3.059791105448741e+00 4.744260808414170e+00 9.194186470369792e+03 + 130760 9.659805696672976e-01 -6.142265180158485e+00 -5.952509813387426e+00 2.927528771105917e+00 5.017133451653443e+00 9.071830954138479e+03 + 130780 9.121436220960939e-01 -6.050412802404012e+00 -5.976736273749574e+00 3.453742208852684e+00 4.876804237792429e+00 9.145751706947749e+03 + 130800 9.414142955578697e-01 -6.072396093511701e+00 -6.007273627473042e+00 3.290954133774420e+00 4.664897411437448e+00 9.239401964831506e+03 + 130820 9.889452751547436e-01 -6.115165001573543e+00 -6.012108747558173e+00 3.047350127117402e+00 4.639115085577424e+00 9.254261314994992e+03 + 130840 9.766422297006558e-01 -6.067513788862502e+00 -5.950258765151728e+00 3.424944083845583e+00 5.098240575149127e+00 9.064961659876841e+03 + 130860 9.667361955223737e-01 -6.021008990835047e+00 -5.946726516335534e+00 3.592644043008533e+00 5.019185506760513e+00 9.054215409885062e+03 + 130880 9.688117497582549e-01 -5.989193093281153e+00 -6.022877994566516e+00 3.712402473748630e+00 4.518978557846452e+00 9.287405288106858e+03 + 130900 1.046459896835408e+00 -6.076140588835923e+00 -5.987113254923373e+00 3.247110466957905e+00 4.758319195219165e+00 9.177543766486402e+03 + 130920 1.001241489815685e+00 -5.989045455665241e+00 -5.968776205861732e+00 3.770247258697248e+00 4.886636427725263e+00 9.121412079303464e+03 + 130940 1.015102110166460e+00 -5.992534699109218e+00 -5.949756933957074e+00 3.769193566819293e+00 5.014830114160667e+00 9.063413737140219e+03 + 130960 9.895406944753474e-01 -5.938949854768244e+00 -6.001256413191301e+00 3.982812723351691e+00 4.625038822977740e+00 9.220875819324372e+03 + 130980 1.024924967857476e+00 -5.980513514908746e+00 -5.999532966668895e+00 3.824700254427073e+00 4.715487619169647e+00 9.215604102110889e+03 + 131000 9.929163763065123e-01 -5.926794761807104e+00 -5.997169610423101e+00 4.098320438248973e+00 4.694217167023292e+00 9.208328024754333e+03 + 131020 9.863343497304644e-01 -5.912742605038970e+00 -5.978251132230994e+00 4.157213581423814e+00 4.781053480875389e+00 9.150373700035954e+03 + 131040 1.026502958096067e+00 -5.967305256129757e+00 -6.027907334722565e+00 3.836388092233951e+00 4.488401578812697e+00 9.302917269914193e+03 + 131060 1.048728847154973e+00 -6.001265657101656e+00 -6.024028623973661e+00 3.697615969164134e+00 4.566907490827341e+00 9.290940025232332e+03 + 131080 9.889393355206663e-01 -5.916955856332093e+00 -6.027425685694053e+00 4.106189286219957e+00 4.471854430872741e+00 9.301412968914718e+03 + 131100 1.037865634614798e+00 -5.996542675796617e+00 -5.980228381991186e+00 3.702519611123512e+00 4.796198810783103e+00 9.156423992949243e+03 + 131120 1.011618693635208e+00 -5.967221218051940e+00 -5.974245703828467e+00 3.924061195994286e+00 4.883725511629811e+00 9.138087361382166e+03 + 131140 1.017253049302407e+00 -5.986517651424045e+00 -5.948268421049749e+00 3.777779408601776e+00 4.997412408460251e+00 9.058924788909679e+03 + 131160 9.906888968076047e-01 -5.959679220404807e+00 -5.983547071829328e+00 3.897478719481563e+00 4.760425823063891e+00 9.166615315697958e+03 + 131180 9.861525112325507e-01 -5.968643110620259e+00 -6.001685332156196e+00 3.822142440107700e+00 4.632408890781095e+00 9.222200612043398e+03 + 131200 1.010150883399419e+00 -6.025241010784542e+00 -5.978735826122769e+00 3.572012249211560e+00 4.839052216193533e+00 9.151898345215264e+03 + 131220 9.634617858393478e-01 -5.984821763032730e+00 -6.017442792059971e+00 3.728999726099529e+00 4.541684729337179e+00 9.270669775951050e+03 + 131240 9.320903174748767e-01 -5.974629355676563e+00 -6.000781176958316e+00 3.879240122827778e+00 4.729072318046684e+00 9.219415154012926e+03 + 131260 9.596288892019618e-01 -6.059521589906135e+00 -5.986798750884664e+00 3.336896738437006e+00 4.754482533921259e+00 9.176571474889493e+03 + 131280 9.294171967612899e-01 -6.057506572535013e+00 -5.957698384004682e+00 3.422803160593937e+00 4.995917224402358e+00 9.087648543448455e+03 + 131300 9.368816737505392e-01 -6.101624095436714e+00 -5.958225120938673e+00 3.197086444157960e+00 5.020505546645293e+00 9.089262942157644e+03 + 131320 9.081809979090329e-01 -6.083203468796682e+00 -5.978506973984281e+00 3.252938344002955e+00 4.854121818945969e+00 9.151208929746004e+03 + 131340 9.140272377536326e-01 -6.105442739682275e+00 -5.952867864457081e+00 3.153928646885507e+00 5.030037191314197e+00 9.072929480964880e+03 + 131360 9.299782707210749e-01 -6.130074877849971e+00 -5.991326764342759e+00 2.939790434936322e+00 4.736503573895909e+00 9.190430008882078e+03 + 131380 9.292113359768130e-01 -6.120717577154668e+00 -5.951982823932367e+00 3.062532384021016e+00 5.031433448642144e+00 9.070246205063650e+03 + 131400 9.349050247908286e-01 -6.113052788629876e+00 -5.950550616089913e+00 3.103484355982219e+00 5.036596977836615e+00 9.065877646211531e+03 + 131420 8.944669324281120e-01 -6.029789336002717e+00 -5.991800640952964e+00 3.466551196806023e+00 4.684688162513266e+00 9.191871498008848e+03 + 131440 9.490785488211793e-01 -6.081372453595723e+00 -6.006901960210344e+00 3.254568527731753e+00 4.682189625022205e+00 9.238238950854175e+03 + 131460 9.441050074310288e-01 -6.040035811745318e+00 -5.988798056465310e+00 3.503967332268256e+00 4.798182452103064e+00 9.182710197619665e+03 + 131480 9.749943669524669e-01 -6.057908060253988e+00 -5.993426248170112e+00 3.376102544417253e+00 4.746367087931038e+00 9.196863186049690e+03 + 131500 9.480390910346277e-01 -5.994460582188390e+00 -6.043368852780913e+00 3.668339467528291e+00 4.387500609255614e+00 9.350630778454890e+03 + 131520 9.936554483390485e-01 -6.046281577999659e+00 -5.975775925999860e+00 3.455411305914447e+00 4.860265670411684e+00 9.142843783513661e+03 + 131540 9.974825880941089e-01 -6.038992918219156e+00 -5.986541282890313e+00 3.499324859726110e+00 4.800510266648666e+00 9.175788028419514e+03 + 131560 9.650634451688612e-01 -5.980158139206812e+00 -6.006599884049781e+00 3.826482366919605e+00 4.674649776184486e+00 9.237336502890559e+03 + 131580 9.844847597104974e-01 -5.998758182610353e+00 -6.020253187343963e+00 3.733795230133574e+00 4.610367586611955e+00 9.279309162893407e+03 + 131600 9.799845160853959e-01 -5.982355256986222e+00 -5.992591675016119e+00 3.816435554686437e+00 4.757656458278200e+00 9.194285020398986e+03 + 131620 1.074841989902992e+00 -6.111719734982337e+00 -5.990156589158974e+00 3.058032333011454e+00 4.756066728165226e+00 9.186841134894026e+03 + 131640 1.021566653898261e+00 -6.023496184101069e+00 -5.993923254252505e+00 3.577783793828215e+00 4.747596133414774e+00 9.198411150782498e+03 + 131660 9.988572878305120e-01 -5.982151115710368e+00 -6.021800198779461e+00 3.881532872872973e+00 4.653861702214468e+00 9.284075450314220e+03 + 131680 9.542998200077226e-01 -5.909095586032468e+00 -6.033044022740478e+00 4.195608689986646e+00 4.483877585450658e+00 9.318768752115076e+03 + 131700 9.948097351992861e-01 -5.963174628537422e+00 -6.008388483880959e+00 3.897634048252030e+00 4.638009094047936e+00 9.242816096675942e+03 + 131720 1.075774746962939e+00 -6.075864832384100e+00 -5.988895039556573e+00 3.294036738213971e+00 4.793430747161572e+00 9.182982886669404e+03 + 131740 1.026925605605125e+00 -5.998468945904522e+00 -5.987007033044060e+00 3.690584499054940e+00 4.756400576424991e+00 9.177231476320199e+03 + 131760 9.645541551530786e-01 -5.902902799090524e+00 -6.024738732508280e+00 4.184743427848777e+00 4.485142644114258e+00 9.293142928399158e+03 + 131780 1.037863459748161e+00 -6.008605433160512e+00 -6.008056798237897e+00 3.598390864015848e+00 4.601541210642486e+00 9.241789888565552e+03 + 131800 1.011416269782353e+00 -5.967293489743165e+00 -6.059025524296016e+00 3.822058748004886e+00 4.295319210115950e+00 9.399148034215455e+03 + 131820 1.045796583306019e+00 -6.020139756320925e+00 -6.039961113370834e+00 3.601762412770950e+00 4.487945113245279e+00 9.340151835226810e+03 + 131840 1.051363344620901e+00 -6.039196307859006e+00 -5.990917538023098e+00 3.460445651992833e+00 4.737669819506110e+00 9.189210823942260e+03 + 131860 9.516715597445816e-01 -5.904967216667557e+00 -6.065313356850689e+00 4.130147895400962e+00 4.209415544984414e+00 9.418622800076517e+03 + 131880 9.902121535581838e-01 -5.980996661991100e+00 -6.050556673666457e+00 3.764238278315116e+00 4.364813926898200e+00 9.372906231824405e+03 + 131900 9.992305102776153e-01 -6.021816236990613e+00 -5.988479971077663e+00 3.600440377003318e+00 4.791862374645959e+00 9.181737095208926e+03 + 131920 9.327371018627784e-01 -5.952708545753907e+00 -6.005590371468488e+00 3.971055616467836e+00 4.667399989778635e+00 9.234191892896813e+03 + 131940 1.032300505622860e+00 -6.128504056250518e+00 -5.946579398961126e+00 3.000283671674647e+00 5.044923206580066e+00 9.053791157802332e+03 + 131960 9.374364038543318e-01 -6.014774148843005e+00 -6.009737451162145e+00 3.609257693002378e+00 4.638179190512319e+00 9.246970149427940e+03 + 131980 9.129694426202657e-01 -6.000902233426792e+00 -6.005901240877793e+00 3.709424754795825e+00 4.680719680418271e+00 9.235175153588976e+03 + 132000 9.347293138641727e-01 -6.049746180086279e+00 -5.997036926212532e+00 3.437882529116709e+00 4.740547221590439e+00 9.207964693286849e+03 + 132020 1.007661819316109e+00 -6.170508154556785e+00 -5.956316367553574e+00 2.804409132700806e+00 5.034331519745159e+00 9.083459269847934e+03 + 132040 9.039688068028412e-01 -6.023529920764026e+00 -5.962135497007073e+00 3.599759514843564e+00 4.952295796812361e+00 9.101189557782816e+03 + 132060 9.400815177663824e-01 -6.074949342272023e+00 -5.972214207283267e+00 3.300029016741138e+00 4.889950060057336e+00 9.131939973745764e+03 + 132080 9.231809280595583e-01 -6.040181642798435e+00 -5.972836175167368e+00 3.444837087314707e+00 4.831545184129729e+00 9.133849333610633e+03 + 132100 9.695647251093127e-01 -6.089113839505469e+00 -5.952054161621563e+00 3.300871198579139e+00 5.087889078905132e+00 9.070430979363424e+03 + 132120 9.525130223641367e-01 -6.033570486809437e+00 -5.965448935213486e+00 3.522655227181482e+00 4.913819718221480e+00 9.111273689621772e+03 + 132140 9.771733932976668e-01 -6.027928095293650e+00 -6.002414123585487e+00 3.543863643345686e+00 4.690368817168316e+00 9.224442063120772e+03 + 132160 1.003578404677515e+00 -6.018580521538330e+00 -5.999421722668743e+00 3.570508556747712e+00 4.680521344671424e+00 9.215274792354157e+03 + 132180 1.011293119525269e+00 -5.986060594329639e+00 -6.021136768733252e+00 3.812304777450680e+00 4.610891956004686e+00 9.282042377343676e+03 + 132200 1.018135932628273e+00 -5.964094403222354e+00 -6.008527813606719e+00 3.863956697252700e+00 4.608813178777639e+00 9.243244327161114e+03 + 132220 1.063043309216911e+00 -6.011348753054513e+00 -5.988758609997705e+00 3.617856279972256e+00 4.747572377217785e+00 9.182575410881669e+03 + 132240 9.898005315034716e-01 -5.892438065206695e+00 -6.005795544835182e+00 4.265478755394578e+00 4.614562565354528e+00 9.234846334763384e+03 + 132260 1.044542916627904e+00 -5.968052329680044e+00 -5.970768013412160e+00 3.916196396641733e+00 4.900602520401227e+00 9.127497522490574e+03 + 132280 1.031013434802440e+00 -5.945085978811416e+00 -5.997198483695152e+00 3.985447837981947e+00 4.686209770555469e+00 9.208462015954326e+03 + 132300 1.093292219793546e+00 -6.039578747751402e+00 -5.971120346051375e+00 3.501366907392073e+00 4.894465643857054e+00 9.128611770211861e+03 + 132320 1.046878657813880e+00 -5.975744318052128e+00 -6.047352546606565e+00 3.831975036690973e+00 4.420789506993841e+00 9.362977908327457e+03 + 132340 1.017586913122717e+00 -5.944015916946937e+00 -6.089664932376402e+00 3.949621473696559e+00 4.113282287988282e+00 9.494357606616781e+03 + 132360 1.077201681012495e+00 -6.051323862438799e+00 -6.038255942188954e+00 3.393033173111758e+00 4.468071193440498e+00 9.334867023567695e+03 + 132380 9.798402200486902e-01 -5.930065130377508e+00 -6.014772151093011e+00 4.081213180798415e+00 4.594812359480906e+00 9.262440318157855e+03 + 132400 9.264576628612249e-01 -5.872373371951564e+00 -6.019868955074758e+00 4.374576035414259e+00 4.527633572253163e+00 9.278114457341262e+03 + 132420 1.017043944967979e+00 -6.026827155223682e+00 -6.020814255898976e+00 3.534211269140794e+00 4.568738267556419e+00 9.281069693823008e+03 + 132440 9.744611570973639e-01 -5.986325542135468e+00 -6.019297335435391e+00 3.771415403647459e+00 4.582086264150774e+00 9.276389218091392e+03 + 132460 9.682602421343692e-01 -5.996289221156561e+00 -5.968907980358157e+00 3.694306785428529e+00 4.851534107326282e+00 9.121853924028270e+03 + 132480 9.290149427906982e-01 -5.951414015927163e+00 -5.989759699909190e+00 3.971470330390357e+00 4.751283478990146e+00 9.185618583848838e+03 + 132500 9.888872647459694e-01 -6.051015779978992e+00 -5.984123752859995e+00 3.409912001318687e+00 4.794016372543711e+00 9.168368044482755e+03 + 132520 9.509488262933156e-01 -6.002694231811184e+00 -6.026368524944291e+00 3.636586312049884e+00 4.500644857294562e+00 9.298153432449239e+03 + 132540 9.560836947895920e-01 -6.014968944158200e+00 -5.990599159592692e+00 3.591779910691897e+00 4.731714984879019e+00 9.188226574017381e+03 + 132560 9.528414488255458e-01 -6.012013598426408e+00 -6.007363953044258e+00 3.661434986962404e+00 4.688133970277003e+00 9.239653722245464e+03 + 132580 9.358202002294473e-01 -5.985933302024173e+00 -6.017846781099994e+00 3.751494129074389e+00 4.568241993626100e+00 9.271917645942476e+03 + 132600 1.035282204292405e+00 -6.126375735626592e+00 -6.012820510653172e+00 3.005837121236166e+00 4.657888795647819e+00 9.256465769006414e+03 + 132620 9.897186654287189e-01 -6.046423895200101e+00 -5.965635748422404e+00 3.471295682838554e+00 4.935193723561401e+00 9.111860235476490e+03 + 132640 9.460957873826957e-01 -5.959603211254621e+00 -5.931301408366930e+00 3.926473541534465e+00 5.088986873405432e+00 9.007311335197883e+03 + 132660 9.550922147091240e-01 -5.932103677076007e+00 -5.990916435454871e+00 4.073721288275228e+00 4.736009328418851e+00 9.189105119089043e+03 + 132680 1.057332381040988e+00 -6.029300428746118e+00 -5.984547270704942e+00 3.523129168061642e+00 4.780108727062897e+00 9.169670575962644e+03 + 132700 1.067428882361025e+00 -5.994401644400253e+00 -6.009808063705728e+00 3.681934031867175e+00 4.593467988079456e+00 9.247193871405367e+03 + 132720 9.690843264902743e-01 -5.812274099455540e+00 -6.073705480512018e+00 4.661964521319256e+00 4.160785074917491e+00 9.444662645450529e+03 + 132740 1.087629623995797e+00 -5.962921465309778e+00 -5.986631454330087e+00 3.884913297521206e+00 4.748766871457644e+00 9.176051633925643e+03 + 132760 1.111538498502393e+00 -5.980405898243865e+00 -5.962965163390331e+00 3.786848249351743e+00 4.886995647825734e+00 9.103704079814637e+03 + 132780 1.012368286894607e+00 -5.826084043493803e+00 -6.029442503510468e+00 4.646848129988535e+00 4.479132382952860e+00 9.307593175990376e+03 + 132800 1.052117824663129e+00 -5.884539865298575e+00 -5.985633371522004e+00 4.380535862563187e+00 4.800041305658727e+00 9.172969541470107e+03 + 132820 1.058025069890496e+00 -5.900839605791115e+00 -6.046345869225844e+00 4.218263317521907e+00 4.382743835858201e+00 9.359831194970886e+03 + 132840 9.892617036796453e-01 -5.813619731926292e+00 -5.998418422667670e+00 4.687533571612733e+00 4.626390891870774e+00 9.212176087127535e+03 + 132860 1.103436888433949e+00 -6.003410801104486e+00 -5.963770713611007e+00 3.704209041982881e+00 4.931828558654155e+00 9.106161718214880e+03 + 132880 1.118458240786627e+00 -6.054642404660227e+00 -5.991659992332066e+00 3.406247629641486e+00 4.767902387726595e+00 9.191452565926047e+03 + 132900 9.894167809493012e-01 -5.900801601354317e+00 -6.021441810523565e+00 4.190516615528435e+00 4.497781865466579e+00 9.282994868843331e+03 + 132920 1.049373904602768e+00 -6.027960370963112e+00 -5.964758024942666e+00 3.557667827239699e+00 4.920585478620536e+00 9.109185617933894e+03 + 132940 9.554385372963414e-01 -5.922091721842826e+00 -6.033322747839472e+00 4.094484021717309e+00 4.455778257498928e+00 9.319614787961344e+03 + 132960 1.077661555616522e+00 -6.131846920219488e+00 -5.958249256305716e+00 3.014499532697393e+00 5.011324183041943e+00 9.089317663578186e+03 + 132980 9.032096803725701e-01 -5.893377712875572e+00 -6.019602455183914e+00 4.231566065247208e+00 4.506764061696967e+00 9.277318867958178e+03 + 133000 1.018892730904459e+00 -6.079021070755577e+00 -5.976073160414867e+00 3.236919611671228e+00 4.828062443985228e+00 9.143736615169895e+03 + 133020 9.597095045426429e-01 -6.000794092692508e+00 -5.995301196991814e+00 3.673304065847680e+00 4.704845122983922e+00 9.202628259018546e+03 + 133040 9.738906187119155e-01 -6.027153946256729e+00 -5.978893243453346e+00 3.512246334748288e+00 4.789366758564937e+00 9.152381075279800e+03 + 133060 1.002556346841729e+00 -6.072158383461296e+00 -5.950634553252388e+00 3.305325113692537e+00 5.003133752504032e+00 9.066137791965641e+03 + 133080 1.000041676689338e+00 -6.065314641759104e+00 -5.963903348016336e+00 3.327900964473084e+00 4.910220306491047e+00 9.106561519253615e+03 + 133100 1.090713838932731e+00 -6.194364986364813e+00 -5.931575797561210e+00 2.666807409457852e+00 5.175783598063682e+00 9.008194823380709e+03 + 133120 9.894103553529071e-01 -6.036763091375734e+00 -5.960185308646391e+00 3.542301977233442e+00 4.982023456038911e+00 9.095236418709199e+03 + 133140 9.747643500189752e-01 -6.005973686253450e+00 -5.987524954686227e+00 3.618204486905385e+00 4.724139958496363e+00 9.178783347563502e+03 + 133160 9.756533189193919e-01 -5.995550093188819e+00 -5.923846182138532e+00 3.753103932865281e+00 5.164838886260405e+00 8.984731778435911e+03 + 133180 9.830597773318667e-01 -5.989973418089081e+00 -5.931307020934613e+00 3.744170210964956e+00 5.081041742021528e+00 9.007358721633655e+03 + 133200 1.020882264567463e+00 -6.023157302598637e+00 -5.983698011808997e+00 3.556070673824130e+00 4.782652027843763e+00 9.167049438819036e+03 + 133220 1.018840358724251e+00 -5.995022374989894e+00 -6.002661172309677e+00 3.737345724281863e+00 4.693482567971600e+00 9.225219361749476e+03 + 133240 1.019953059269000e+00 -5.971954873944162e+00 -6.014655122285640e+00 3.834352128210367e+00 4.589160694391526e+00 9.262068309474518e+03 + 133260 1.050031712446987e+00 -5.992328494898086e+00 -6.018848304826233e+00 3.747927606435564e+00 4.595646753900819e+00 9.275002485990664e+03 + 133280 1.082523498300699e+00 -6.014728070150849e+00 -6.012944681860009e+00 3.644031139957632e+00 4.654271631502080e+00 9.256839952121694e+03 + 133300 1.021617946640478e+00 -5.902474790596842e+00 -6.002666822004547e+00 4.204325719357309e+00 4.629007570347518e+00 9.225224429346159e+03 + 133320 1.027829483666674e+00 -5.890476437140644e+00 -6.013130640090641e+00 4.255172363272292e+00 4.550872949256845e+00 9.257348356487049e+03 + 133340 1.038007465712548e+00 -5.875393809000679e+00 -6.033049371113693e+00 4.345564259375092e+00 4.440281624602778e+00 9.318708502186004e+03 + 133360 1.018145030398882e+00 -5.806954696024283e+00 -6.083378120205639e+00 4.732888678985878e+00 4.145622600949888e+00 9.474738648012293e+03 + 133380 1.089380217846973e+00 -5.867019713100437e+00 -6.050405472579200e+00 4.390074757579108e+00 4.337045347797489e+00 9.372441855684629e+03 + 133400 1.130175408386272e+00 -5.883112654987854e+00 -6.016006332549606e+00 4.287984715839110e+00 4.524888654049389e+00 9.266247318962127e+03 + 133420 1.106340526512883e+00 -5.811623075504751e+00 -6.028000348893598e+00 4.667863345565354e+00 4.425391557491754e+00 9.303162950999373e+03 + 133440 1.137486322389834e+00 -5.834447867959518e+00 -6.009287650849941e+00 4.554012965081299e+00 4.550055875355533e+00 9.245568702034776e+03 + 133460 1.114654053237710e+00 -5.791522652539895e+00 -6.032313537602834e+00 4.778117757891700e+00 4.395459233591267e+00 9.316475405446266e+03 + 133480 1.144189770740905e+00 -5.842287138593331e+00 -6.033416826775372e+00 4.521639637876286e+00 4.424143391111354e+00 9.319905825721064e+03 + 133500 1.155186948778318e+00 -5.888772764506853e+00 -6.030058061747318e+00 4.276844427277136e+00 4.465562386693297e+00 9.309549172544648e+03 + 133520 1.101386974645630e+00 -5.859717523752370e+00 -5.997402999074414e+00 4.415065750163376e+00 4.624454444105752e+00 9.209053852424204e+03 + 133540 1.116841468459481e+00 -5.942084074690961e+00 -5.947169633274848e+00 4.026563504979896e+00 4.997361440603570e+00 9.055573861794684e+03 + 133560 1.076079905993702e+00 -5.935630134230188e+00 -6.026322214354354e+00 4.015968814039235e+00 4.495200855412231e+00 9.298017696062920e+03 + 133580 1.002963331690393e+00 -5.868172263751732e+00 -6.024693365084151e+00 4.369971008269935e+00 4.471202622857039e+00 9.293006735491605e+03 + 133600 1.039726531454948e+00 -5.952286399327838e+00 -6.005198546699418e+00 3.935667059516359e+00 4.631837321180402e+00 9.232989799353061e+03 + 133620 9.766356947567814e-01 -5.881931788684558e+00 -5.998675436908354e+00 4.381583786801539e+00 4.711223692679327e+00 9.212973140630240e+03 + 133640 1.096352567750887e+00 -6.080260206907969e+00 -6.013103189859272e+00 3.228966663781072e+00 4.614592648189491e+00 9.257325101462086e+03 + 133660 1.036073533383709e+00 -6.013224178648735e+00 -6.005455385910909e+00 3.651971064293993e+00 4.696580674411380e+00 9.233813247605463e+03 + 133680 9.734803857278230e-01 -5.942349096318710e+00 -6.013327865513344e+00 4.014766824324896e+00 4.607195747680271e+00 9.257987636114505e+03 + 133700 9.589553834113960e-01 -5.940386244156954e+00 -6.024599219874849e+00 3.994531697502196e+00 4.510967759014167e+00 9.292697571453800e+03 + 133720 1.004064488869004e+00 -6.024857434018790e+00 -6.002785347497909e+00 3.573511614142422e+00 4.700252950589670e+00 9.225598678366552e+03 + 133740 9.811425078790368e-01 -6.009275403273760e+00 -5.999766029815087e+00 3.703254248697334e+00 4.757858542667821e+00 9.216318739736784e+03 + 133760 9.666935284375827e-01 -6.002849758035861e+00 -6.018725692054337e+00 3.646431374846782e+00 4.555269304919843e+00 9.274629198278590e+03 + 133780 1.009402742003225e+00 -6.081525466970535e+00 -5.983964423878405e+00 3.271059490987016e+00 4.831270097944657e+00 9.167889073779115e+03 + 133800 9.296551303803440e-01 -5.974436684601466e+00 -5.986899731640028e+00 3.812327106717365e+00 4.740762361971649e+00 9.176874430628342e+03 + 133820 9.776313371392075e-01 -6.051303798383044e+00 -5.960791954033628e+00 3.471226281600511e+00 4.990959298517502e+00 9.097060783479068e+03 + 133840 9.279583110519684e-01 -5.979851179327287e+00 -6.008840303640524e+00 3.783534088513053e+00 4.617074050653962e+00 9.244211802893366e+03 + 133860 9.596130567028447e-01 -6.025848982398222e+00 -5.976552107252985e+00 3.586454708911353e+00 4.869524994662079e+00 9.145197551020789e+03 + 133880 9.259735342370835e-01 -5.969451801294080e+00 -6.015005776667810e+00 3.822284698009367e+00 4.560706721958508e+00 9.263174167815238e+03 + 133900 9.493164582818275e-01 -5.991982407044678e+00 -5.998561939176538e+00 3.779294562092747e+00 4.741513870412302e+00 9.212664139394186e+03 + 133920 1.068871581583520e+00 -6.149951221251842e+00 -5.988653406904929e+00 2.893984448276026e+00 4.820181459012106e+00 9.182259874323596e+03 + 133940 9.730930166466757e-01 -5.985776028781488e+00 -6.007283298682657e+00 3.806039178537932e+00 4.682541106526156e+00 9.239412492177731e+03 + 133960 1.009437225467250e+00 -6.012918805102241e+00 -5.974152390772919e+00 3.594125330400421e+00 4.816728080562619e+00 9.137859616569109e+03 + 133980 1.023182298001809e+00 -5.999359300667509e+00 -5.982477622856862e+00 3.667758624823749e+00 4.764695831243682e+00 9.163342591304678e+03 + 134000 9.858613721122188e-01 -5.904692852366039e+00 -6.039863812682755e+00 4.184921274400962e+00 4.408748702623872e+00 9.339835985653064e+03 + 134020 1.059135222310033e+00 -5.977033857344186e+00 -6.050606485402792e+00 3.812294897210398e+00 4.389829481570487e+00 9.373067140275338e+03 + 134040 1.003699869380266e+00 -5.866974560970858e+00 -6.091546285036553e+00 4.364556703005432e+00 4.075031111058228e+00 9.500227589418802e+03 + 134060 1.050772380389617e+00 -5.920305773221518e+00 -6.002669550542830e+00 4.144134529201153e+00 4.671188974068832e+00 9.225218501478043e+03 + 134080 1.039656832784916e+00 -5.893157927906180e+00 -6.003464918060904e+00 4.287508261596047e+00 4.654108454176064e+00 9.227657390697055e+03 + 134100 1.074410205847596e+00 -5.941969376072200e+00 -6.032663565970035e+00 3.976877288918897e+00 4.456097215645006e+00 9.317573276509796e+03 + 134120 1.005631767362321e+00 -5.843803181197550e+00 -6.040637757037181e+00 4.525392402445797e+00 4.395137807922468e+00 9.342210232379295e+03 + 134140 9.831284532961762e-01 -5.822838552744112e+00 -6.012119532486430e+00 4.642383785316948e+00 4.555503108499606e+00 9.254268555568557e+03 + 134160 1.025937099383842e+00 -5.903575896722969e+00 -5.974493758678848e+00 4.170678988789269e+00 4.763457650934941e+00 9.138882182506488e+03 + 134180 9.598349098303757e-01 -5.824814714184150e+00 -6.037243599351265e+00 4.576812978489613e+00 4.357013446596302e+00 9.331721278486990e+03 + 134200 1.080390570313716e+00 -6.031055948577317e+00 -6.002947279640057e+00 3.502819564233627e+00 4.664223891073837e+00 9.226099978569964e+03 + 134220 9.995059480570477e-01 -5.948959734476075e+00 -5.999968799803662e+00 4.047120295886062e+00 4.754218349147708e+00 9.216949207325337e+03 + 134240 1.019884770919002e+00 -6.021236791535046e+00 -5.958120754469650e+00 3.620430904737307e+00 4.982852956741978e+00 9.088922550363783e+03 + 134260 9.419472642201560e-01 -5.947038963739085e+00 -5.987305567016255e+00 3.951981121353943e+00 4.720764054099710e+00 9.178121845575417e+03 + 134280 9.772040641981496e-01 -6.035772607272571e+00 -5.977543816455685e+00 3.488097953097186e+00 4.822456680844003e+00 9.148261464361985e+03 + 134300 9.294882160528173e-01 -5.990756075603794e+00 -6.022513597279155e+00 3.731587788724782e+00 4.549231184804260e+00 9.286290936500187e+03 + 134320 9.470032720241938e-01 -6.029682379517280e+00 -5.995097946025600e+00 3.588400241566733e+00 4.786989410599748e+00 9.202015870044845e+03 + 134340 1.011866836606955e+00 -6.129789676969929e+00 -5.986900867596871e+00 3.012733280982367e+00 4.833222936374254e+00 9.176891467381527e+03 + 134360 9.449088369218303e-01 -6.030401569631795e+00 -6.018721066851030e+00 3.531358755229423e+00 4.598430009748544e+00 9.274627630719429e+03 + 134380 9.459389797747382e-01 -6.028703189378939e+00 -6.001899896015249e+00 3.605292130094433e+00 4.759200788384987e+00 9.222884445393336e+03 + 134400 9.816914304627492e-01 -6.075212222020898e+00 -5.958918248046218e+00 3.320616896426916e+00 4.988394891423839e+00 9.091400039982460e+03 + 134420 9.869428240175663e-01 -6.074045433585310e+00 -5.990078351298068e+00 3.314624948975847e+00 4.796776929333179e+00 9.186606032774233e+03 + 134440 9.823566449570301e-01 -6.054830340416393e+00 -5.977129367847033e+00 3.438247856248839e+00 4.884418864928745e+00 9.146971834037709e+03 + 134460 9.263728658960075e-01 -5.954627162100530e+00 -6.073725057595644e+00 3.961751879988959e+00 4.277873333716248e+00 9.444746382053394e+03 + 134480 1.003597198866873e+00 -6.050356466045384e+00 -6.023783875264179e+00 3.467543625730574e+00 4.620127554091390e+00 9.290235224142132e+03 + 134500 9.746741752540558e-01 -5.989409602138267e+00 -6.048825193756155e+00 3.777628246196014e+00 4.436454724593010e+00 9.367545440838903e+03 + 134520 1.027266492072433e+00 -6.051040140865791e+00 -6.001194401365625e+00 3.467012276142820e+00 4.753234225956034e+00 9.220732358601666e+03 + 134540 9.856461148531146e-01 -5.971095197139918e+00 -5.978678927903553e+00 3.926763667398380e+00 4.883216711775046e+00 9.151718415385507e+03 + 134560 9.644411399860825e-01 -5.919993881431087e+00 -6.056412166047499e+00 4.138975114164350e+00 4.355640213235591e+00 9.391013527944002e+03 + 134580 1.063278490524800e+00 -6.047461541711574e+00 -5.989160427081453e+00 3.547736565481578e+00 4.882510587756066e+00 9.183795717818281e+03 + 134600 1.050006779686611e+00 -6.009555340407124e+00 -6.047899342178744e+00 3.695286548185112e+00 4.475109356297374e+00 9.364686559243783e+03 + 134620 1.024874560416465e+00 -5.958827134572831e+00 -6.007924108516463e+00 3.910725776709358e+00 4.628803354592863e+00 9.241403028489849e+03 + 134640 1.052903185703804e+00 -5.989633720334964e+00 -6.035147690707177e+00 3.799409347974955e+00 4.538061086833552e+00 9.325251997223955e+03 + 134660 1.038716377003139e+00 -5.962062966824954e+00 -6.040965777540663e+00 3.914523394687461e+00 4.461451245387361e+00 9.343231833136182e+03 + 134680 1.040635491292013e+00 -5.965529693640684e+00 -6.001743234602738e+00 3.827178688274536e+00 4.619234932043069e+00 9.222371656542789e+03 + 134700 1.023084418980424e+00 -5.942235028512269e+00 -5.980426840149466e+00 3.999023790172495e+00 4.779720497587961e+00 9.157024907008054e+03 + 134720 1.019878902839303e+00 -5.943436111654466e+00 -5.955663229673636e+00 4.045067778231846e+00 4.974857774425379e+00 9.081423134153125e+03 + 134740 1.042956392240052e+00 -5.987651062761967e+00 -6.001914340262939e+00 3.743655956668146e+00 4.661754010022506e+00 9.222916287120424e+03 + 134760 1.064262272716257e+00 -6.036356135917834e+00 -5.957079542037752e+00 3.558616165423888e+00 5.013834635496576e+00 9.085763632132401e+03 + 134780 9.989695854654153e-01 -5.969287150084233e+00 -6.010871260520834e+00 3.882743360226338e+00 4.643960962979086e+00 9.250432892743096e+03 + 134800 9.333295579881140e-01 -5.908220355122953e+00 -6.007630430428890e+00 4.256314528304178e+00 4.685486492238055e+00 9.240447542802114e+03 + 134820 9.417151948783967e-01 -5.958032533276013e+00 -6.022957742814737e+00 3.883431515851653e+00 4.510620915536597e+00 9.287591200896701e+03 + 134840 1.013126947813049e+00 -6.101189279972104e+00 -5.995551870020187e+00 3.134843770972060e+00 4.741430126252325e+00 9.203413217321078e+03 + 134860 9.133624247616636e-01 -5.986115498535090e+00 -6.051478236185190e+00 3.678681536060306e+00 4.303358581622472e+00 9.375757915477987e+03 + 134880 9.196273216162918e-01 -6.021815845417403e+00 -6.031232661928714e+00 3.558542558272500e+00 4.504469740616911e+00 9.313165721490719e+03 + 134900 9.318965656920375e-01 -6.057815660767115e+00 -6.009628816812649e+00 3.337179968251744e+00 4.613876283128288e+00 9.246633772495341e+03 + 134920 9.141198839606671e-01 -6.040755920928273e+00 -5.983049678686143e+00 3.478834505930171e+00 4.810192678896606e+00 9.165096802360849e+03 + 134940 9.528913364269224e-01 -6.099428825131133e+00 -5.977414141014231e+00 3.180487816519425e+00 4.881115014430022e+00 9.147848531204858e+03 + 134960 1.002235110654620e+00 -6.167602373082999e+00 -5.996149630326142e+00 2.766578928912667e+00 4.751087110048730e+00 9.205228616499482e+03 + 134980 9.466319279021105e-01 -6.073495096556471e+00 -6.003153426493285e+00 3.330364365477528e+00 4.734277120318602e+00 9.226741622647623e+03 + 135000 9.571762784994100e-01 -6.074549670120779e+00 -5.984863161784038e+00 3.273725405807897e+00 4.788719215619770e+00 9.170649047737881e+03 + 135020 9.130235229373171e-01 -5.985818953357634e+00 -6.027586716471056e+00 3.778318826863310e+00 4.538481867525589e+00 9.301920584586709e+03 + 135040 9.605890036763339e-01 -6.026152210061887e+00 -6.014011195667989e+00 3.524714000837212e+00 4.594429584302878e+00 9.260108841478599e+03 + 135060 9.883069197164831e-01 -6.035362702794888e+00 -5.959212146365365e+00 3.566879552724979e+00 5.004147832003822e+00 9.092251669796151e+03 + 135080 9.801874220534152e-01 -5.988093148975336e+00 -6.000551520357858e+00 3.734153542650177e+00 4.662615646244995e+00 9.218724601916478e+03 + 135100 1.000552636577304e+00 -5.987579873907001e+00 -5.952393499315027e+00 3.766861728405494e+00 4.968907336386477e+00 9.071481782815363e+03 + 135120 9.463795194433802e-01 -5.878713330403205e+00 -6.026174648628905e+00 4.258006280103482e+00 4.411260571286264e+00 9.297557673837387e+03 + 135140 9.597082898267109e-01 -5.880184719122284e+00 -5.983806296260662e+00 4.372405465882292e+00 4.777394334566488e+00 9.167401650529273e+03 + 135160 1.040194334521365e+00 -5.988011341470250e+00 -5.991647422922926e+00 3.814330408514854e+00 4.793451466131803e+00 9.191406903692447e+03 + 135180 9.984503345131772e-01 -5.920686269929726e+00 -6.056765749108756e+00 4.072299491082410e+00 4.290910063405076e+00 9.392120975528063e+03 + 135200 1.059088676214036e+00 -6.011579206389208e+00 -5.995994328421039e+00 3.618305633428323e+00 4.707796414473623e+00 9.204766605283934e+03 + 135220 9.790047459842667e-01 -5.896093238448845e+00 -6.027078879273479e+00 4.290173560091363e+00 4.538033740513908e+00 9.300336811601697e+03 + 135240 9.853905519353029e-01 -5.911085646066945e+00 -6.013701581103376e+00 4.135502550598698e+00 4.546265971854885e+00 9.259152174922649e+03 + 135260 1.058157138969695e+00 -6.026369488659261e+00 -5.989014553646052e+00 3.534940552540305e+00 4.749438370043668e+00 9.183351103431303e+03 + 135280 9.441446008150856e-01 -5.867048779426600e+00 -6.008262551533792e+00 4.382419904767675e+00 4.571548572567571e+00 9.242399513778761e+03 + 135300 9.732259314481506e-01 -5.918801855566161e+00 -5.996205862394802e+00 4.092514160117722e+00 4.648048374676324e+00 9.205384881114183e+03 + 135320 1.052526715944636e+00 -6.044191344572246e+00 -5.979654234675381e+00 3.478488288241250e+00 4.849070360354526e+00 9.154702696511533e+03 + 135340 1.033851448917769e+00 -6.027699492130966e+00 -5.996396984661200e+00 3.536584123927170e+00 4.716327965865942e+00 9.206000631716646e+03 + 135360 9.848716899682420e-01 -5.968533166636531e+00 -5.980852009971139e+00 3.868189831456749e+00 4.797453126694585e+00 9.158369840399526e+03 + 135380 9.735000558391735e-01 -5.966350176019034e+00 -5.995701311963382e+00 3.895985918202272e+00 4.727447153536223e+00 9.203852500055136e+03 + 135400 9.956195234311751e-01 -6.013279396591430e+00 -5.998556173453064e+00 3.629614468969003e+00 4.714157494640913e+00 9.212596747525455e+03 + 135420 9.119275232026064e-01 -5.903356334710947e+00 -6.049446597769656e+00 4.218500456575013e+00 4.379627558696768e+00 9.369440611026392e+03 + 135440 9.631719147840894e-01 -5.994624002603187e+00 -5.993231085175509e+00 3.712852765983250e+00 4.720851113406249e+00 9.196278479216529e+03 + 135460 9.672594038354716e-01 -6.015910564363018e+00 -5.988944957780524e+00 3.624445253305839e+00 4.779285939216648e+00 9.183152241676135e+03 + 135480 9.500803181278987e-01 -6.006679146504524e+00 -6.057275935641376e+00 3.612012996891015e+00 4.321478403839399e+00 9.393713608936747e+03 + 135500 9.250496499750086e-01 -5.988808450447669e+00 -6.011463015994167e+00 3.761966531095441e+00 4.631880509944761e+00 9.252270977996519e+03 + 135520 9.787499883316908e-01 -6.090600807551785e+00 -5.991138329156836e+00 3.195487905980785e+00 4.766616848693370e+00 9.189864939828922e+03 + 135540 9.383503652217786e-01 -6.054250109136849e+00 -5.984461643148334e+00 3.379474275058590e+00 4.780210446494846e+00 9.169421256586862e+03 + 135560 9.512744765817412e-01 -6.094545685920740e+00 -5.988851627548462e+00 3.181679700390669e+00 4.788591339666965e+00 9.182858526889202e+03 + 135580 9.478256192321670e-01 -6.107861062970107e+00 -5.954856373654694e+00 3.145878309031883e+00 5.024454912480132e+00 9.079003650594013e+03 + 135600 9.395283946517236e-01 -6.109932630363132e+00 -5.996348312832080e+00 3.067705317207674e+00 4.719924045587309e+00 9.205859466044169e+03 + 135620 9.274733863802501e-01 -6.100494375679824e+00 -5.999318330467783e+00 3.152577777199450e+00 4.733546285749389e+00 9.214973927439351e+03 + 135640 8.934158376964244e-01 -6.051551952656523e+00 -6.037714506170492e+00 3.436360902598644e+00 4.515817661659365e+00 9.333216449193396e+03 + 135660 9.055227518385351e-01 -6.064336691344595e+00 -6.042805511603471e+00 3.339619713741479e+00 4.463255079754306e+00 9.348938754823754e+03 + 135680 9.466900547130490e-01 -6.110470583098967e+00 -6.014822500974977e+00 3.111890832217205e+00 4.661116921266028e+00 9.262611848665494e+03 + 135700 9.495219156427653e-01 -6.089406726365332e+00 -5.983190616712649e+00 3.250727173113972e+00 4.860636511629521e+00 9.165522073679958e+03 + 135720 9.363870616317906e-01 -6.034203682810155e+00 -6.011381700295392e+00 3.534447524090897e+00 4.665494879381050e+00 9.252007890957046e+03 + 135740 1.028989964342726e+00 -6.126255988161900e+00 -5.954364518462497e+00 3.001462206440264e+00 4.988489625573207e+00 9.077496192701356e+03 + 135760 1.005495650099243e+00 -6.046498093973088e+00 -5.958559369550157e+00 3.473383897213222e+00 4.978341661323313e+00 9.090258298507910e+03 + 135780 9.325872095524308e-01 -5.900015800884305e+00 -5.978940398310254e+00 4.236007978864603e+00 4.782810726902829e+00 9.152510755678974e+03 + 135800 1.037863821759400e+00 -6.024325500024887e+00 -5.971064930560333e+00 3.564128210475352e+00 4.869958642387314e+00 9.128436738805845e+03 + 135820 1.071859642277600e+00 -6.050436016601926e+00 -6.008121845806842e+00 3.419075513964524e+00 4.662050030766663e+00 9.242002167084340e+03 + 135840 1.016588112159255e+00 -5.954941401437411e+00 -6.001521174631887e+00 3.974780906830415e+00 4.707312640951129e+00 9.221734200245020e+03 + 135860 1.093033897928049e+00 -6.058203787195690e+00 -6.005832593885587e+00 3.439704134266367e+00 4.740427630668950e+00 9.234963548421763e+03 + 135880 1.009898768516946e+00 -5.932448289128472e+00 -6.016623148064784e+00 4.014222333513546e+00 4.530877267483924e+00 9.268150610136328e+03 + 135900 9.962408376908223e-01 -5.913096941790967e+00 -5.988001688723744e+00 4.167691975014372e+00 4.737577326654240e+00 9.180242722220735e+03 + 135920 1.028831140878599e+00 -5.963207927191141e+00 -6.013086619592904e+00 3.867710513650030e+00 4.581299343176404e+00 9.257269458026789e+03 + 135940 1.031007472934491e+00 -5.971296922714788e+00 -6.036711443883789e+00 3.854594666353730e+00 4.478974362936890e+00 9.330080233562498e+03 + 135960 1.039675392635592e+00 -5.995700506959935e+00 -6.012312276047803e+00 3.661527709678475e+00 4.566140360912976e+00 9.254858473422364e+03 + 135980 9.897255825049621e-01 -5.935153845434289e+00 -5.976504992147627e+00 4.037328742137434e+00 4.799884058640180e+00 9.145053116929234e+03 + 136000 1.037593879499317e+00 -6.020722705865604e+00 -6.001775463633496e+00 3.594135114842759e+00 4.702933111815781e+00 9.222463586667754e+03 + 136020 1.013357998073092e+00 -6.004289198812436e+00 -6.019221339265800e+00 3.620705553695097e+00 4.534962892470610e+00 9.276134372020048e+03 + 136040 1.023734106303207e+00 -6.045878702918042e+00 -5.958941965308181e+00 3.466564713095694e+00 4.965768913868184e+00 9.091440353228556e+03 + 136060 9.840547811084670e-01 -6.012171789587595e+00 -6.000469601326169e+00 3.629330488162919e+00 4.696526264067808e+00 9.218485174213669e+03 + 136080 1.042666060877388e+00 -6.126040949756003e+00 -5.966447118494462e+00 3.022771262410380e+00 4.939183738579722e+00 9.114356361761173e+03 + 136100 9.359937928866793e-01 -5.996427824265233e+00 -6.006664133687508e+00 3.704932866624054e+00 4.646154393857584e+00 9.237524440655254e+03 + 136120 9.583398103203221e-01 -6.057002087321176e+00 -6.004641528268717e+00 3.398316822216874e+00 4.698979255066422e+00 9.231300667792219e+03 + 136140 9.564943876536821e-01 -6.080473127589936e+00 -5.985157636379267e+00 3.265627530454709e+00 4.812943831010966e+00 9.171570305450896e+03 + 136160 9.305603169477679e-01 -6.064628017570847e+00 -5.991842680477818e+00 3.378301239291124e+00 4.796245908373809e+00 9.192002942056777e+03 + 136180 9.062794151335378e-01 -6.045335220490970e+00 -5.975230323223969e+00 3.395349400907540e+00 4.797902569712450e+00 9.141174620540722e+03 + 136200 9.791972021243399e-01 -6.162918217034816e+00 -5.962885522731370e+00 2.766767423033085e+00 4.915386108682876e+00 9.103470344354115e+03 + 136220 9.200713799160744e-01 -6.078810247777878e+00 -5.968796318786429e+00 3.201682176183832e+00 4.833399181053224e+00 9.121500342979256e+03 + 136240 9.632787726130622e-01 -6.138244426437604e+00 -5.957259900353699e+00 2.982972545102170e+00 5.022213701140849e+00 9.086330467775440e+03 + 136260 9.743121592146419e-01 -6.136486500872513e+00 -5.989046440064151e+00 2.942151658828287e+00 4.788775304265570e+00 9.183473749902290e+03 + 136280 9.772346707865833e-01 -6.104651322978453e+00 -5.961400758386205e+00 3.120986120084920e+00 4.943553029926841e+00 9.098933225694200e+03 + 136300 9.456871402539769e-01 -6.002527207992213e+00 -5.941724615545806e+00 3.703931969166291e+00 5.053069864164335e+00 9.039009001227012e+03 + 136320 9.631114554221329e-01 -5.964401463733210e+00 -5.947139716691353e+00 3.889763731235079e+00 4.988883353996138e+00 9.055478716987793e+03 + 136340 9.494281114387692e-01 -5.890296848271961e+00 -5.981022792656803e+00 4.317219266902637e+00 4.796256854450360e+00 9.158863682057834e+03 + 136360 1.025171969900139e+00 -5.965587678324015e+00 -5.998068741368490e+00 3.864698681199001e+00 4.678187390769363e+00 9.211124308572527e+03 + 136380 1.039687806370140e+00 -5.963412417080840e+00 -6.039949303090938e+00 3.898618362200356e+00 4.459131718685539e+00 9.340097885093426e+03 + 136400 1.021534443805195e+00 -5.922638002597600e+00 -6.026203438834006e+00 4.123849461906191e+00 4.529160700337282e+00 9.297659894337326e+03 + 136420 9.966405985792444e-01 -5.876540300281909e+00 -6.065270727170967e+00 4.369426968996668e+00 4.285707651860524e+00 9.418504701582702e+03 + 136440 1.024858116833225e+00 -5.916596684763168e+00 -6.032716038729217e+00 4.172438445358093e+00 4.505663145473088e+00 9.317753501669669e+03 + 136460 1.104220351269706e+00 -6.040580163139600e+00 -5.987727025504983e+00 3.455899223447061e+00 4.759390118741646e+00 9.179447815500971e+03 + 136480 1.078806205450137e+00 -6.013409171425020e+00 -5.982141067338023e+00 3.646107604866684e+00 4.825653897257695e+00 9.162292272530303e+03 + 136500 1.019440311000324e+00 -5.941601979632280e+00 -6.017162800310581e+00 4.008342985307594e+00 4.574461059973578e+00 9.269807521264231e+03 + 136520 1.017556397456032e+00 -5.959716913590314e+00 -5.944739843724784e+00 3.996701248088452e+00 5.082701900950399e+00 9.048174016933684e+03 + 136540 9.967468604856634e-01 -5.950123328306790e+00 -5.943064230426839e+00 3.971617897221062e+00 5.012152329639610e+00 9.043051140664264e+03 + 136560 1.022074785604144e+00 -6.008394473236206e+00 -5.950954024335338e+00 3.634637023876509e+00 4.964468970346031e+00 9.067105181661862e+03 + 136580 1.031871782525669e+00 -6.045796563989980e+00 -5.993689984651320e+00 3.513679544749860e+00 4.812883586779535e+00 9.197669783738178e+03 + 136600 1.010782552117179e+00 -6.037584750662904e+00 -6.001081811778616e+00 3.584130203217148e+00 4.793735727102266e+00 9.220366584570658e+03 + 136620 1.023526691377179e+00 -6.078551619028613e+00 -5.966475159690832e+00 3.301074312050217e+00 4.944634685343788e+00 9.114434928535151e+03 + 136640 9.804759043246185e-01 -6.034774518424010e+00 -6.006785677868463e+00 3.536257538738072e+00 4.696973792467098e+00 9.237908316113222e+03 + 136660 9.656780558263287e-01 -6.034386018140115e+00 -6.019980730474765e+00 3.555524407802929e+00 4.638241798788428e+00 9.278482247052432e+03 + 136680 8.995686325015138e-01 -5.954335537446400e+00 -6.002346583972857e+00 3.968496679637064e+00 4.692809820796708e+00 9.224239160377849e+03 + 136700 9.487318370343446e-01 -6.038905503902854e+00 -5.961506516412198e+00 3.564106526629049e+00 5.008543490255003e+00 9.099242111902953e+03 + 136720 9.594075628803598e-01 -6.060085070502563e+00 -5.991461252048939e+00 3.361613631329182e+00 4.755662216391471e+00 9.190848025412299e+03 + 136740 9.480186597101476e-01 -6.043617454323411e+00 -5.980052834778506e+00 3.494520793464525e+00 4.859518675484452e+00 9.155906716183315e+03 + 136760 9.829127929005205e-01 -6.090805137297817e+00 -5.995254363269053e+00 3.211381114380755e+00 4.760048445288410e+00 9.202478329634318e+03 + 136780 9.744118672214118e-01 -6.068578207436629e+00 -5.967995278713599e+00 3.310638060272464e+00 4.888200802158019e+00 9.119063985702685e+03 + 136800 9.102091559313986e-01 -5.954516976103472e+00 -5.988105699718813e+00 3.946581503209697e+00 4.753709854372230e+00 9.180558842180810e+03 + 136820 9.613855083737486e-01 -5.995098923215774e+00 -6.048125814200313e+00 3.682148463335854e+00 4.377659849417772e+00 9.365354910513019e+03 + 136840 1.002793060607315e+00 -6.006083685879660e+00 -6.050528419454475e+00 3.610693845456199e+00 4.355485307469321e+00 9.372809310830013e+03 + 136860 1.050149271004926e+00 -6.021197756338491e+00 -6.009789161078379e+00 3.613404944066690e+00 4.678914863524665e+00 9.247112598838261e+03 + 136880 1.000143671864594e+00 -5.900627031167239e+00 -6.004907924518540e+00 4.230053385463376e+00 4.631256358424110e+00 9.232117213628118e+03 + 136900 1.072524514663445e+00 -5.973856783421995e+00 -6.017467082991518e+00 3.816292669421231e+00 4.565875580620985e+00 9.270734871770921e+03 + 136920 9.982038497653651e-01 -5.842135949013566e+00 -6.020019768194419e+00 4.537089524222160e+00 4.515653107053651e+00 9.278625258448612e+03 + 136940 1.057353088718384e+00 -5.919800417112991e+00 -6.023598220850578e+00 4.127718831327956e+00 4.531695779608516e+00 9.289642880848245e+03 + 136960 1.078141716191301e+00 -5.948976458350585e+00 -6.030538709391260e+00 3.885721000578256e+00 4.417377933385144e+00 9.311052840290515e+03 + 136980 1.023901902430471e+00 -5.875872616531152e+00 -6.034659270288973e+00 4.333088174618467e+00 4.421310636585799e+00 9.323741953429444e+03 + 137000 1.012464989779936e+00 -5.870186886037450e+00 -6.038856282108121e+00 4.373743489224471e+00 4.405217715481995e+00 9.336718840399153e+03 + 137020 1.063233037058750e+00 -5.963575421541605e+00 -5.998769684666682e+00 3.876112203737310e+00 4.674021298578500e+00 9.213269520683902e+03 + 137040 1.018139297257336e+00 -5.918345418320995e+00 -6.009782499102691e+00 4.106289700378225e+00 4.581243832687207e+00 9.247092025872435e+03 + 137060 1.009901425670117e+00 -5.930186805122561e+00 -6.011510660237845e+00 4.067393113736728e+00 4.600418952838862e+00 9.252386221644068e+03 + 137080 9.945417868107201e-01 -5.932127500347875e+00 -6.002307777187433e+00 4.045896139301417e+00 4.642910129325934e+00 9.224129479369358e+03 + 137100 1.001641387357770e+00 -5.967131899508441e+00 -5.994247674311263e+00 3.888489330857972e+00 4.732786355787576e+00 9.199382241523155e+03 + 137120 1.016921907045996e+00 -6.012316404410054e+00 -6.000320560687909e+00 3.604368994133819e+00 4.673250985137194e+00 9.218024824928276e+03 + 137140 1.036813967019353e+00 -6.060963240735469e+00 -5.972160042037775e+00 3.360982757946812e+00 4.870904467119556e+00 9.131798220544419e+03 + 137160 1.015402059963044e+00 -6.046368935208895e+00 -5.973658644859833e+00 3.464226658547091e+00 4.881740397612479e+00 9.136351979056830e+03 + 137180 9.416316643378648e-01 -5.950409761369603e+00 -5.992932050776025e+00 3.928067441202085e+00 4.683897875127387e+00 9.195353826195955e+03 + 137200 9.239137920658220e-01 -5.932842643915375e+00 -5.973105977207839e+00 4.080598036930838e+00 4.849399746434821e+00 9.134657723104914e+03 + 137220 9.901819193354732e-01 -6.033870990867659e+00 -5.997671510436552e+00 3.514219722412338e+00 4.722082740899252e+00 9.209894129616423e+03 + 137240 9.072669168653890e-01 -5.911022975695995e+00 -6.034259712236657e+00 4.143254942633204e+00 4.435610530593380e+00 9.322520853569693e+03 + 137260 9.843444578718793e-01 -6.023421346863490e+00 -6.013568796219347e+00 3.557511620961704e+00 4.614086491437660e+00 9.258760790326067e+03 + 137280 1.011833394538406e+00 -6.061760001221346e+00 -6.000108153926498e+00 3.368836805173542e+00 4.722851252933095e+00 9.217394111215721e+03 + 137300 9.346715402732279e-01 -5.943912467580183e+00 -6.013163898901597e+00 4.000094557169736e+00 4.602442121897814e+00 9.257484174379770e+03 + 137320 1.021444253557838e+00 -6.068201739233340e+00 -6.002866494844940e+00 3.343143223308961e+00 4.718308307183547e+00 9.225832504952754e+03 + 137340 1.022330791956295e+00 -6.064942748172038e+00 -5.987505372293434e+00 3.371672576355269e+00 4.816329972045406e+00 9.178754262880318e+03 + 137360 9.927736277090350e-01 -6.016535275306505e+00 -5.987334925322633e+00 3.625104574566155e+00 4.792777502913104e+00 9.178202346747526e+03 + 137380 9.829766713082625e-01 -5.997009231707835e+00 -6.007858150866774e+00 3.747344787479722e+00 4.685048614804284e+00 9.241183182391707e+03 + 137400 9.664729873516762e-01 -5.967461873395636e+00 -6.036847621264778e+00 3.852535819800640e+00 4.454112118126246e+00 9.330500687642450e+03 + 137420 1.015431317475433e+00 -6.034928475547911e+00 -5.996915946234536e+00 3.561842632854277e+00 4.780116458591577e+00 9.207595413670348e+03 + 137440 1.040029224792005e+00 -6.068493496020699e+00 -6.006042588706274e+00 3.360664796484613e+00 4.719267570530718e+00 9.235612568980470e+03 + 137460 1.056352028402261e+00 -6.092259731492568e+00 -5.948620214227113e+00 3.232373159408168e+00 5.057173495689868e+00 9.060000627055006e+03 + 137480 9.718833846259068e-01 -5.965922747828423e+00 -5.964694440702376e+00 3.881704092956981e+00 4.888757222554658e+00 9.108971206878403e+03 + 137500 9.732864154060633e-01 -5.964184880186464e+00 -5.997087520200697e+00 3.850602532663809e+00 4.661670482034991e+00 9.208102205090587e+03 + 137520 1.005050407038914e+00 -6.007724730201320e+00 -5.979868098057105e+00 3.642194969207489e+00 4.802152061779465e+00 9.155341309937538e+03 + 137540 9.729329612104511e-01 -5.956340974721136e+00 -5.976255613641362e+00 3.914742968961170e+00 4.800390030500819e+00 9.144303511307975e+03 + 137560 9.088841126187257e-01 -5.858725555057402e+00 -5.986882543872690e+00 4.441194107280273e+00 4.705296845272964e+00 9.176788698748816e+03 + 137580 1.005288915296697e+00 -5.994176605217332e+00 -5.992919689690481e+00 3.747138376270349e+00 4.754355779732573e+00 9.195304219752141e+03 + 137600 1.037718533838830e+00 -6.035833942007568e+00 -5.994528340810444e+00 3.506340168345965e+00 4.743523322440982e+00 9.200245436122106e+03 + 137620 9.005030220426302e-01 -5.828392665303555e+00 -6.007021775572426e+00 4.628910033170536e+00 4.603194039241203e+00 9.238603118565177e+03 + 137640 1.128921927234210e+00 -6.162945823685927e+00 -5.948321719358416e+00 2.803548010082690e+00 5.035952830104060e+00 9.059082386659058e+03 + 137660 1.024274626564225e+00 -6.004043870053597e+00 -6.025156706217859e+00 3.648600670787803e+00 4.527367498331774e+00 9.294440781171341e+03 + 137680 9.604806318576965e-01 -5.910046351082734e+00 -6.052151448175001e+00 4.192338543529126e+00 4.376349085332621e+00 9.377824253162884e+03 + 137700 9.743683639582091e-01 -5.931607784303832e+00 -6.012664863558120e+00 4.092939031651140e+00 4.627496739030544e+00 9.255961720701143e+03 + 137720 1.053120377330919e+00 -6.049710251510602e+00 -5.998831698885812e+00 3.409940384551474e+00 4.702092907153590e+00 9.213454860283660e+03 + 137740 1.064817583341400e+00 -6.072068511807633e+00 -5.952525961045242e+00 3.376638331797884e+00 5.063070157425475e+00 9.071901287894614e+03 + 137760 9.998552542153553e-01 -5.984975966133562e+00 -6.004075880521907e+00 3.770697303669575e+00 4.661022639549497e+00 9.229568104810882e+03 + 137780 9.802487484360189e-01 -5.968702545624265e+00 -5.991102256901586e+00 3.913521571851728e+00 4.784898963353236e+00 9.189746295177629e+03 + 137800 1.036311151176444e+00 -6.070645399734217e+00 -5.997717372294908e+00 3.320027410917262e+00 4.738791430049544e+00 9.210047184407716e+03 + 137820 9.641708182851719e-01 -5.990103128503461e+00 -5.979598095668065e+00 3.812652825214563e+00 4.872974349403988e+00 9.154505319531165e+03 + 137840 9.310043674974007e-01 -5.972431932526561e+00 -6.054066581620352e+00 3.782940321213935e+00 4.314181533196265e+00 9.383752777786643e+03 + 137860 9.193048711964390e-01 -5.990771075850223e+00 -6.010298838015057e+00 3.748927894733416e+00 4.636796462471507e+00 9.248679575574708e+03 + 137880 8.832901870793762e-01 -5.969122970284520e+00 -5.950049148035757e+00 3.943404052981692e+00 5.052928891998545e+00 9.064297629114137e+03 + 137900 9.081768740775518e-01 -6.026723238091853e+00 -5.947608560300200e+00 3.559607673610210e+00 5.013896396446704e+00 9.056912781994908e+03 + 137920 9.530276042743180e-01 -6.105634275268501e+00 -5.955022901651839e+00 3.172658571882572e+00 5.037492386224184e+00 9.079494514646725e+03 + 137940 9.475362142088493e-01 -6.103746634435463e+00 -5.973909413035321e+00 3.123916549714733e+00 4.869461967239423e+00 9.137138021475577e+03 + 137960 9.612121926278543e-01 -6.122904521071193e+00 -5.978297801355075e+00 3.054229962843313e+00 4.884584125270820e+00 9.150561676202604e+03 + 137980 9.776101300215735e-01 -6.138650166094560e+00 -5.972080286408425e+00 2.954122459710894e+00 4.910592485474254e+00 9.131544548664338e+03 + 138000 9.311050732304994e-01 -6.052429536699198e+00 -6.025522972335062e+00 3.381475130807234e+00 4.535976787163484e+00 9.295568786884993e+03 + 138020 9.458412505721069e-01 -6.049141014638208e+00 -6.013962463343455e+00 3.470918558191820e+00 4.672919243589505e+00 9.259971385580349e+03 + 138040 9.839732395685518e-01 -6.072233300890555e+00 -6.008709779018644e+00 3.297854689544401e+00 4.662616582366153e+00 9.243818672499519e+03 + 138060 9.401260747078265e-01 -5.969225116179367e+00 -6.067026326390403e+00 3.850283381075027e+00 4.288693697354896e+00 9.423940899709633e+03 + 138080 1.012675653633621e+00 -6.037711801045720e+00 -5.995891879656672e+00 3.489688190526982e+00 4.729824650754816e+00 9.204450652575866e+03 + 138100 1.009723915116968e+00 -5.999912724609985e+00 -5.982855058450173e+00 3.713432365456412e+00 4.811380124211358e+00 9.164484156162120e+03 + 138120 1.001652559290768e+00 -5.961310910378699e+00 -6.010712933410170e+00 3.917882616122391e+00 4.634208554937322e+00 9.249953645892225e+03 + 138140 1.021453429615588e+00 -5.969887375883316e+00 -6.035113952625506e+00 3.855254580299941e+00 4.480713482866151e+00 9.325156074075612e+03 + 138160 9.978008333155075e-01 -5.921883753861304e+00 -6.033260410758280e+00 4.096135807912260e+00 4.456593808527874e+00 9.319430331119065e+03 + 138180 1.084012724153102e+00 -6.043768413143900e+00 -6.008200803346152e+00 3.498911002706261e+00 4.703145722234762e+00 9.242242436248598e+03 + 138200 9.763137644583971e-01 -5.883488414021358e+00 -6.046098285085146e+00 4.363670835795411e+00 4.429939792350919e+00 9.359110563267754e+03 + 138220 1.057944847918731e+00 -6.008719380621995e+00 -6.013113521562035e+00 3.623293724491831e+00 4.598061887223007e+00 9.257354997530818e+03 + 138240 1.070484441034636e+00 -6.034112232996077e+00 -5.971442511316504e+00 3.550435832764941e+00 4.910295072757132e+00 9.129600498942722e+03 + 138260 1.003367435529426e+00 -5.942585584388345e+00 -6.013374205297838e+00 3.984471266572675e+00 4.577992050806683e+00 9.258152993514532e+03 + 138280 1.013681612976540e+00 -5.968344154450977e+00 -6.022030659160606e+00 3.866380066746948e+00 4.558103848744500e+00 9.284806954441658e+03 + 138300 1.011111520848505e+00 -5.978014566632917e+00 -6.026755876365678e+00 3.786799168692537e+00 4.506919025513720e+00 9.299366080758293e+03 + 138320 1.010358865564650e+00 -5.992656637004787e+00 -5.995333969130792e+00 3.731587179469600e+00 4.716213524086269e+00 9.202699603147863e+03 + 138340 9.787234622026656e-01 -5.959244918562565e+00 -5.967448525198367e+00 3.941009208730470e+00 4.893902829923670e+00 9.117388156340994e+03 + 138360 9.898723746300674e-01 -5.988526765234776e+00 -6.031168256870761e+00 3.686386852856220e+00 4.441532809132891e+00 9.313002354188873e+03 + 138380 9.913384223114879e-01 -6.006646645816000e+00 -5.994408548928288e+00 3.621434520074277e+00 4.691707566242890e+00 9.199890473465146e+03 + 138400 1.001400783618390e+00 -6.037301885215082e+00 -5.977325973125797e+00 3.457739298910469e+00 4.802130267369543e+00 9.147534300780628e+03 + 138420 9.271068839744653e-01 -5.939446671071265e+00 -5.975204807239305e+00 4.023634855477032e+00 4.818306104046459e+00 9.141054227871369e+03 + 138440 1.024359487447462e+00 -6.094159037710236e+00 -5.997006602104019e+00 3.182364806644818e+00 4.740229126186536e+00 9.207858474628529e+03 + 138460 9.570423884503114e-01 -6.006970476392199e+00 -6.024913795483031e+00 3.601785975923878e+00 4.498752660984668e+00 9.293694257064564e+03 + 138480 9.477992067006203e-01 -6.009919301686984e+00 -5.998396205252693e+00 3.656627862186565e+00 4.722795265105677e+00 9.212125676769278e+03 + 138500 9.847944978787669e-01 -6.084457530274685e+00 -5.972066331959811e+00 3.261497699397572e+00 4.906865352603311e+00 9.131496043330131e+03 + 138520 9.706689309525659e-01 -6.089414159612098e+00 -5.997079702304273e+00 3.172973291747465e+00 4.703172034320086e+00 9.208109871698032e+03 + 138540 8.938144564929298e-01 -6.005612339595828e+00 -6.011202737475839e+00 3.664377379878792e+00 4.632276450140488e+00 9.251462144846168e+03 + 138560 9.119655749123964e-01 -6.064119683939368e+00 -6.003506476429036e+00 3.340054700219241e+00 4.688105117607115e+00 9.227807308772251e+03 + 138580 8.937422036937729e-01 -6.062987145285517e+00 -5.943941323257175e+00 3.376663567818189e+00 5.060243100186351e+00 9.045763265215894e+03 + 138600 8.313419859652454e-01 -5.987656279770697e+00 -5.953720289148482e+00 3.799763859140054e+00 4.994629568870387e+00 9.075488171624080e+03 + 138620 9.029140772367072e-01 -6.098272604662832e+00 -5.936631395453849e+00 3.211791485439436e+00 5.139960322613700e+00 9.023521357787975e+03 + 138640 9.730555829965329e-01 -6.194811958089947e+00 -5.940155122101740e+00 2.671943879747125e+00 5.134222840009414e+00 9.034265793398821e+03 + 138660 8.746798797859010e-01 -6.031661142059957e+00 -5.979773431522378e+00 3.515035657215149e+00 4.812982920719188e+00 9.155082731482853e+03 + 138680 9.796938129378228e-01 -6.161162249209812e+00 -5.940604163377152e+00 2.853953781698894e+00 5.120432441803500e+00 9.035620267273667e+03 + 138700 9.045036566280092e-01 -6.013263132043956e+00 -6.017470897686593e+00 3.558275164828187e+00 4.534113523358537e+00 9.270744269792729e+03 + 138720 1.006830518744168e+00 -6.121876672244494e+00 -5.972784108165799e+00 3.063673703331085e+00 4.919786278270679e+00 9.133698113601124e+03 + 138740 9.790964646284650e-01 -6.039315208767661e+00 -6.011564202844463e+00 3.490754559639826e+00 4.650105130105119e+00 9.252584203801976e+03 + 138760 8.906121762309963e-01 -5.874770544707589e+00 -6.019695018487620e+00 4.386423057323400e+00 4.554244301888629e+00 9.277569626473067e+03 + 138780 9.614649442157768e-01 -5.952858059194433e+00 -5.979390957273729e+00 3.941394314206933e+00 4.789038307482912e+00 9.153872958751237e+03 + 138800 9.980756984231722e-01 -5.984796938510010e+00 -5.988536752814010e+00 3.758549820069069e+00 4.737075227601110e+00 9.181894098136705e+03 + 138820 1.027205926728344e+00 -6.010223842825346e+00 -6.011589903290423e+00 3.641459349710522e+00 4.633615219122875e+00 9.252649237311534e+03 + 138840 1.042484912732457e+00 -6.020561223567104e+00 -5.999928791509024e+00 3.581207917847162e+00 4.699682535583198e+00 9.216817898297608e+03 + 138860 1.016864113563817e+00 -5.974845092630594e+00 -5.983979586573733e+00 3.764725872209722e+00 4.712274194429849e+00 9.167943752748713e+03 + 138880 1.010135971637415e+00 -5.959868827931151e+00 -5.994756100853274e+00 3.920790849782156e+00 4.720462729875290e+00 9.200933952388423e+03 + 138900 1.046664558950832e+00 -6.009333570595302e+00 -5.993723074146880e+00 3.634660251886134e+00 4.724298138209494e+00 9.197781767003269e+03 + 138920 1.010993530080897e+00 -5.954210104764313e+00 -5.966946009634162e+00 3.928174925303499e+00 4.855043388665912e+00 9.115833593962880e+03 + 138940 9.924294145143523e-01 -5.924753252347107e+00 -6.009918080958659e+00 4.126874071128037e+00 4.637844446025869e+00 9.247486684687939e+03 + 138960 1.054138938999807e+00 -6.014249152744109e+00 -5.988070277360423e+00 3.622333318559379e+00 4.772656472180376e+00 9.180457210945651e+03 + 138980 1.091916021523929e+00 -6.074589206648665e+00 -5.961398194291441e+00 3.260680337913804e+00 4.910640647121539e+00 9.098944956723913e+03 + 139000 9.784731303560069e-01 -5.914442185343897e+00 -5.972922490871821e+00 4.152886318348943e+00 4.817083354209569e+00 9.134106246987569e+03 + 139020 9.877251518939310e-01 -5.938213579487480e+00 -5.972416239482725e+00 4.000482681700767e+00 4.804085715163541e+00 9.132549204234649e+03 + 139040 1.022014123677860e+00 -5.999948599535696e+00 -5.959530374757204e+00 3.732623744062813e+00 4.964711445440985e+00 9.093231784024492e+03 + 139060 1.000159910573599e+00 -5.983600987090513e+00 -5.992974599411858e+00 3.769956745570819e+00 4.716132013059839e+00 9.195479892922767e+03 + 139080 9.718675324572668e-01 -5.963132596865949e+00 -5.992689981694489e+00 3.869925465537261e+00 4.700202387861263e+00 9.194611207981799e+03 + 139100 1.019755124935249e+00 -6.060015870725190e+00 -5.977046769048123e+00 3.322927223159451e+00 4.799348644416161e+00 9.146731589559658e+03 + 139120 9.975895886273581e-01 -6.057867091841376e+00 -5.972819376990802e+00 3.411723799607203e+00 4.900080939370534e+00 9.133774644911986e+03 + 139140 9.328465403205430e-01 -5.993961533544408e+00 -5.976571004889374e+00 3.725073636619342e+00 4.824932743332162e+00 9.145276035299072e+03 + 139160 9.479897595675055e-01 -6.047344966767739e+00 -6.017129249202492e+00 3.389763177648953e+00 4.563266503775776e+00 9.269718227110969e+03 + 139180 1.011959880373875e+00 -6.169819555886181e+00 -6.000175261480236e+00 2.783675629356377e+00 4.757799420205028e+00 9.217604753683912e+03 + 139200 9.154892308229345e-01 -6.051123462354822e+00 -5.988442786417762e+00 3.428768653972667e+00 4.788690795006516e+00 9.181619986936554e+03 + 139220 8.922454826453519e-01 -6.031170711024370e+00 -6.001831110391138e+00 3.522219522644110e+00 4.690692049768650e+00 9.222678329229055e+03 + 139240 8.761362034777506e-01 -6.012964409818143e+00 -6.057610958259385e+00 3.629318271694795e+00 4.372950881514144e+00 9.394753229811638e+03 + 139260 9.594046775456335e-01 -6.137721500636301e+00 -5.988636955762511e+00 2.947788135238627e+00 4.803854662662687e+00 9.182206038913773e+03 + 139280 9.512584835125947e-01 -6.117988402011913e+00 -5.976983797866439e+00 3.101210667359676e+00 4.910880924754958e+00 9.146532761520442e+03 + 139300 8.990495077398326e-01 -6.022390777149372e+00 -6.008914647597315e+00 3.574351727661690e+00 4.651733748973908e+00 9.244459523094181e+03 + 139320 1.001069693714184e+00 -6.146611205067710e+00 -5.957999026501625e+00 2.953656473913619e+00 5.036696790880383e+00 9.088559262280169e+03 + 139340 9.223555717611884e-01 -5.987872893432346e+00 -5.978999947615875e+00 3.746316338116642e+00 4.797266166078749e+00 9.152683710566191e+03 + 139360 9.443143130353924e-01 -5.970937566588930e+00 -5.932034676334697e+00 3.892854247663522e+00 5.116240663706135e+00 9.009569879566690e+03 + 139380 1.008871858860810e+00 -6.013370731109384e+00 -5.983046980701359e+00 3.636001715780814e+00 4.810125383208904e+00 9.165046057288451e+03 + 139400 1.041565271945755e+00 -6.022235653032827e+00 -5.981015604693980e+00 3.566330359703636e+00 4.803022256047164e+00 9.158866378015169e+03 + 139420 1.027836273921348e+00 -5.978122205441046e+00 -5.998472019214912e+00 3.797965562478400e+00 4.681113782665360e+00 9.212353343914412e+03 + 139440 1.009466535640037e+00 -5.939831146571914e+00 -5.997292424834126e+00 4.033332030045790e+00 4.703380478160099e+00 9.208709353659535e+03 + 139460 1.041206282675019e+00 -5.981756719168831e+00 -5.951782619529029e+00 3.826414964552618e+00 4.998530883161290e+00 9.069620015771638e+03 + 139480 1.007287025848718e+00 -5.928424013532305e+00 -5.989067162805219e+00 4.108610171889035e+00 4.760387824266940e+00 9.183520895470047e+03 + 139500 1.008982270719107e+00 -5.930587308172487e+00 -6.023111579792949e+00 4.075124124379039e+00 4.543835438649588e+00 9.288120030085545e+03 + 139520 1.031816982894506e+00 -5.968671314911522e+00 -6.024701023844102e+00 3.848204136739869e+00 4.526472877479562e+00 9.293002679199097e+03 + 139540 9.816026197301152e-01 -5.900843334584536e+00 -6.012302312500795e+00 4.176162858369779e+00 4.536148158953533e+00 9.254810638877512e+03 + 139560 1.048676741247871e+00 -6.008026713053574e+00 -5.993070832944642e+00 3.632758557624120e+00 4.718637535624570e+00 9.195775267534515e+03 + 139580 9.540366376147698e-01 -5.879824188056143e+00 -6.001984753459471e+00 4.326754787408502e+00 4.625289916576196e+00 9.223119296224577e+03 + 139600 1.021101261734541e+00 -5.992667410212600e+00 -5.987560975834699e+00 3.712305633727105e+00 4.741627570143175e+00 9.178889341040549e+03 + 139620 1.052432659058221e+00 -6.055037096053687e+00 -5.981180530722419e+00 3.425616248053733e+00 4.849712075452422e+00 9.159357667261595e+03 + 139640 9.177540726698735e-01 -5.874716062550161e+00 -5.995246444173249e+00 4.421752296396759e+00 4.729648193100710e+00 9.202432119519841e+03 + 139660 9.674341688513884e-01 -5.966576439080006e+00 -5.967237545243836e+00 3.914160822781624e+00 4.910364648883067e+00 9.116729422325068e+03 + 139680 9.996974498008849e-01 -6.030181140432274e+00 -5.955385577729390e+00 3.550095392135828e+00 4.979583087751705e+00 9.080572489813530e+03 + 139700 9.778611582283996e-01 -6.011700437458074e+00 -5.980357068776532e+00 3.624717050856529e+00 4.804695524196572e+00 9.156843599254829e+03 + 139720 1.002968606691855e+00 -6.065780958974684e+00 -6.015774281764803e+00 3.398710455775635e+00 4.685856534823062e+00 9.265502554859284e+03 + 139740 9.475353577337424e-01 -6.000399377827796e+00 -6.010992099680951e+00 3.694355543584535e+00 4.633530495485306e+00 9.250814456954708e+03 + 139760 9.837034200351007e-01 -6.069921041974932e+00 -5.969699151886783e+00 3.388004031820512e+00 4.963493633994035e+00 9.124266621802150e+03 + 139780 9.397638419537712e-01 -6.019850032637533e+00 -6.011249418515288e+00 3.603289536974414e+00 4.652675594205081e+00 9.251601560560146e+03 + 139800 9.274986035560753e-01 -6.016718879275818e+00 -5.947497587597029e+00 3.683777025818660e+00 5.081256394598535e+00 9.056567374901910e+03 + 139820 9.942138806225652e-01 -6.125556420011560e+00 -5.936118982336342e+00 3.034252557610459e+00 5.122031640090299e+00 9.021986265636609e+03 + 139840 9.154067809120243e-01 -6.013345097197727e+00 -5.975374112415577e+00 3.639276348400105e+00 4.857311619010117e+00 9.141610350291263e+03 + 139860 9.999805687638214e-01 -6.136773617034367e+00 -5.961041968042384e+00 2.980832779579394e+00 4.989911102476155e+00 9.097848958390865e+03 + 139880 1.000504414837675e+00 -6.130935729492550e+00 -5.964480283818151e+00 3.007665998046823e+00 4.963478926006188e+00 9.108355186333056e+03 + 139900 9.493958496280287e-01 -6.042435087515318e+00 -5.970253135352642e+00 3.495162447633007e+00 4.909642387072088e+00 9.125950512318645e+03 + 139920 9.335646826355021e-01 -5.995164987091253e+00 -5.973433861323950e+00 3.706809623257722e+00 4.831593110294422e+00 9.135660059288541e+03 + 139940 9.190353143275196e-01 -5.937343831768461e+00 -5.992490034522826e+00 4.029856009682089e+00 4.713197979619236e+00 9.193993017132780e+03 + 139960 1.082281947355622e+00 -6.134826964421048e+00 -5.933610321381832e+00 3.022688759555270e+00 5.178105862061328e+00 9.014360291081459e+03 + 139980 9.607710634993710e-01 -5.910898796417311e+00 -5.987669740174283e+00 4.267497327304602e+00 4.826666687986915e+00 9.179178896137977e+03 + 140000 1.039271965810176e+00 -5.990710146032883e+00 -5.996522244560563e+00 3.763777603042372e+00 4.730403633877088e+00 9.206359845461311e+03 + 140020 1.050559443552058e+00 -5.977212919504155e+00 -6.040764329919098e+00 3.790417362747454e+00 4.425495329595874e+00 9.342611193030794e+03 + 140040 1.088665831452289e+00 -6.014886321571232e+00 -6.011952008518938e+00 3.640558896634439e+00 4.657408176264182e+00 9.253787904044530e+03 + 140060 1.016833262413255e+00 -5.900447118288691e+00 -5.999870601960446e+00 4.303629088926229e+00 4.732724059948636e+00 9.216639227786196e+03 + 140080 1.042974697905954e+00 -5.936622368270984e+00 -6.030484976617540e+00 4.070735021349927e+00 4.531761399032308e+00 9.310860346156245e+03 + 140100 1.050948497478095e+00 -5.951160413499231e+00 -6.025755202745302e+00 3.969569609527926e+00 4.541234786170661e+00 9.296283753095908e+03 + 140120 1.103570541716088e+00 -6.038646247068137e+00 -5.989689614034788e+00 3.506304328699291e+00 4.787420891591265e+00 9.185447317129157e+03 + 140140 1.036414773888680e+00 -5.951695983547252e+00 -6.035146456058167e+00 3.950805779606819e+00 4.471620252530254e+00 9.325270139484175e+03 + 140160 1.065552503557105e+00 -6.017221693290765e+00 -6.004486137491869e+00 3.621384923377552e+00 4.694514455595706e+00 9.230841398119057e+03 + 140180 9.687431013003498e-01 -5.902566215031082e+00 -6.043851134160708e+00 4.272038335444653e+00 4.460758466031765e+00 9.352117257182197e+03 + 140200 9.835881766359523e-01 -5.953926016081099e+00 -5.990469940593682e+00 3.930318063609425e+00 4.720477193904134e+00 9.187797485481271e+03 + 140220 9.603287170207961e-01 -5.946275185406952e+00 -6.008753273525434e+00 3.916866430187317e+00 4.558107579758105e+00 9.243928213124656e+03 + 140240 1.003279568124133e+00 -6.034308122364427e+00 -5.964936208195249e+00 3.510232558347034e+00 4.908576824775479e+00 9.109720194156564e+03 + 140260 9.654094690770644e-01 -5.997810758409150e+00 -6.004888233020129e+00 3.731925060856548e+00 4.691285106404652e+00 9.232059913991478e+03 + 140280 9.945089940865300e-01 -6.057118329348220e+00 -6.000379423198772e+00 3.367487847439791e+00 4.693291426867273e+00 9.218212511212603e+03 + 140300 9.251676508640740e-01 -5.965904902066947e+00 -6.022868002305589e+00 3.835610842946036e+00 4.508519906364480e+00 9.287401483356078e+03 + 140320 9.751119130746871e-01 -6.050655435415186e+00 -5.988249141639406e+00 3.399652354974614e+00 4.757998951177893e+00 9.180993673788742e+03 + 140340 9.986779791683572e-01 -6.091131293055185e+00 -5.936310432326446e+00 3.219694444772151e+00 5.108699785527341e+00 9.022579318837066e+03 + 140360 9.248158492794594e-01 -5.980708733131189e+00 -6.014214151950415e+00 3.825642983887902e+00 4.633249684081097e+00 9.260726872562387e+03 + 140380 1.023852726813619e+00 -6.122196323624539e+00 -6.019284575389955e+00 2.971623172948092e+00 4.562558356852646e+00 9.276363442569453e+03 + 140400 9.603081427770820e-01 -6.022374272200974e+00 -6.033550464560696e+00 3.569588617318943e+00 4.505413191279241e+00 9.320345597233534e+03 + 140420 9.480806730104098e-01 -5.996902238293199e+00 -5.979127329620321e+00 3.750669414885718e+00 4.852735691143608e+00 9.153089297135541e+03 + 140440 9.750510415190047e-01 -6.025343950116312e+00 -5.946650333616828e+00 3.590734068160008e+00 5.042604991897842e+00 9.053988195520804e+03 + 140460 9.438519032522503e-01 -5.957673317462424e+00 -5.967326379361531e+00 3.919875540138139e+00 4.864446164906967e+00 9.117007614822234e+03 + 140480 1.039784637261428e+00 -6.061322307816333e+00 -5.983191125700571e+00 3.387552695303959e+00 4.836194033774019e+00 9.165518718433950e+03 + 140500 1.048946611528068e+00 -6.009537320196844e+00 -5.984471385867566e+00 3.680132734536541e+00 4.824065208396055e+00 9.169443472033599e+03 + 140520 1.047635065637033e+00 -5.931385968990310e+00 -6.019541016808548e+00 4.033297373389896e+00 4.527097446868012e+00 9.277138402448652e+03 + 140540 1.020421937679271e+00 -5.830507622662965e+00 -6.021171748973224e+00 4.666819675216939e+00 4.571996756765239e+00 9.282120037589350e+03 + 140560 1.036145561350414e+00 -5.820174278765174e+00 -6.030994495583753e+00 4.694113185317637e+00 4.483550876022242e+00 9.312403948056164e+03 + 140580 1.075222011742712e+00 -5.863212395232648e+00 -6.048042740088586e+00 4.421119613070854e+00 4.359795170504634e+00 9.365119382631123e+03 + 140600 1.117282991803117e+00 -5.927082821840458e+00 -6.047661570229141e+00 4.067252996236016e+00 4.374871163487192e+00 9.363918182723160e+03 + 140620 1.088775179302568e+00 -5.899455398355466e+00 -6.024868738480991e+00 4.238433739506362e+00 4.518290932853937e+00 9.293545241013813e+03 + 140640 1.051443054233381e+00 -5.865510618605229e+00 -6.026949572688205e+00 4.418455413955881e+00 4.491447957014031e+00 9.299968417289820e+03 + 140660 9.927627461601770e-01 -5.805080722834630e+00 -6.056344060210467e+00 4.738100044713173e+00 4.295307078625318e+00 9.390831867119829e+03 + 140680 1.130830834163895e+00 -6.042527462371108e+00 -6.022082596857853e+00 3.472898471174906e+00 4.590296052784730e+00 9.284951355406463e+03 + 140700 1.045421639331238e+00 -5.952905769220010e+00 -6.038482680384203e+00 3.942574423934081e+00 4.451178557045077e+00 9.335551615186174e+03 + 140720 1.052078873074801e+00 -6.003243100488001e+00 -5.996044786792337e+00 3.663328206599048e+00 4.704662037774996e+00 9.204904624115301e+03 + 140740 1.048075509295191e+00 -6.031359900790230e+00 -5.974147891400796e+00 3.514369792499370e+00 4.842890003943341e+00 9.137860574434528e+03 + 140760 9.866897509253569e-01 -5.969592081996824e+00 -6.021258229078704e+00 3.800718276947499e+00 4.504043265092923e+00 9.282400746387151e+03 + 140780 9.842859778632015e-01 -5.989258528342103e+00 -5.981360346766499e+00 3.780808746034306e+00 4.826161326881074e+00 9.159915684125603e+03 + 140800 1.025039625987521e+00 -6.068719006269219e+00 -5.952209507431798e+00 3.342413404122515e+00 5.011428976233660e+00 9.070929044921024e+03 + 140820 9.800267404338564e-01 -6.017324942433372e+00 -5.977325459509522e+00 3.574218876220778e+00 4.803902097069500e+00 9.147572645808463e+03 + 140840 9.649826952395790e-01 -6.006996154666909e+00 -5.983724091113316e+00 3.655614214026764e+00 4.789246004291693e+00 9.167141658103334e+03 + 140860 9.586687342000558e-01 -6.005604909571713e+00 -5.995785872904458e+00 3.671700691725548e+00 4.728083119759940e+00 9.204107862761723e+03 + 140880 1.010833751928174e+00 -6.087827565430208e+00 -5.956197721032634e+00 3.269319888157667e+00 5.025158824341126e+00 9.083077539047641e+03 + 140900 9.892234714487406e-01 -6.058046448985337e+00 -5.967098168846404e+00 3.408770980865002e+00 4.931010079623622e+00 9.116307242753910e+03 + 140920 9.229159332792360e-01 -5.958224400455188e+00 -5.964593114577438e+00 3.885299025836769e+00 4.848728883791480e+00 9.108657174966978e+03 + 140940 9.573584397267666e-01 -6.001651767664145e+00 -5.965607146938478e+00 3.644294143014509e+00 4.851267933108323e+00 9.111766693966527e+03 + 140960 9.499912818698969e-01 -5.976967541193374e+00 -5.983729341684115e+00 3.864423201486798e+00 4.825595896683719e+00 9.167152992677680e+03 + 140980 9.922585286993028e-01 -6.018920827465959e+00 -5.985631540579971e+00 3.556686798719530e+00 4.747839035519375e+00 9.173008227980257e+03 + 141000 1.016913080694127e+00 -6.027524622042455e+00 -6.006347799438236e+00 3.543745743904143e+00 4.665346336400278e+00 9.236558632446387e+03 + 141020 1.013757276565669e+00 -5.991294657543470e+00 -6.014316740519579e+00 3.717202544883464e+00 4.585006181778823e+00 9.261057411848966e+03 + 141040 1.036306636860578e+00 -5.990995461232297e+00 -6.004677484120759e+00 3.745810070954739e+00 4.667245778242993e+00 9.231406779728941e+03 + 141060 9.906825620558238e-01 -5.888731793953895e+00 -6.035655961202778e+00 4.269866885806182e+00 4.426205581021697e+00 9.326812336287958e+03 + 141080 1.047029676374936e+00 -5.940746316214888e+00 -6.012024556094582e+00 4.054878905138589e+00 4.645588221477409e+00 9.253966315788433e+03 + 141100 1.056556062184258e+00 -5.926210914889553e+00 -6.042121443779635e+00 4.060554069940636e+00 4.394977875957411e+00 9.346817524220820e+03 + 141120 1.069469150772407e+00 -5.926204044216679e+00 -6.034721077503134e+00 4.116279487443436e+00 4.493157889355987e+00 9.323934844436917e+03 + 141140 1.076978439284562e+00 -5.926763677401696e+00 -6.036924690747941e+00 4.090830640684237e+00 4.458269054688375e+00 9.330746633977484e+03 + 141160 1.113610639852611e+00 -5.979865021248573e+00 -6.032270212766877e+00 3.786546290298159e+00 4.485627570922877e+00 9.316383650121212e+03 + 141180 1.052430801443373e+00 -5.899444033338169e+00 -6.037422598073735e+00 4.201724928437632e+00 4.409430657612124e+00 9.332285454490506e+03 + 141200 1.001018954341893e+00 -5.843125103742261e+00 -6.001884713109192e+00 4.527133307993854e+00 4.615511063038791e+00 9.222830438803330e+03 + 141220 1.053441738936672e+00 -5.948775767670416e+00 -6.015071550364129e+00 4.013842541996681e+00 4.633161898530165e+00 9.263350203692316e+03 + 141240 1.018067213021564e+00 -5.941343355380109e+00 -6.019307989400730e+00 4.018124200323829e+00 4.570439206789301e+00 9.276415008488106e+03 + 141260 1.027009139694642e+00 -6.017865138168945e+00 -5.995497183275175e+00 3.559955656297009e+00 4.688395914726870e+00 9.203241187698095e+03 + 141280 9.897616396595379e-01 -6.023688523504218e+00 -5.980294227882100e+00 3.564800203792193e+00 4.813976964499939e+00 9.156654980107143e+03 + 141300 9.086248656873380e-01 -5.945568484552505e+00 -5.968699793542388e+00 4.010778748767713e+00 4.877955192989306e+00 9.121214103500190e+03 + 141320 9.679540741507150e-01 -6.053025479046577e+00 -5.949100488347890e+00 3.435367851875107e+00 5.032121230807300e+00 9.061446992055955e+03 + 141340 9.348910010922554e-01 -6.010019018875368e+00 -5.939561502359917e+00 3.690238511309681e+00 5.094816474406848e+00 9.032403370057227e+03 + 141360 9.896239785717778e-01 -6.089382365685028e+00 -5.957394265423803e+00 3.241510053754324e+00 4.999406150546781e+00 9.086712245697947e+03 + 141380 1.008036501142923e+00 -6.110628783072852e+00 -5.984542928817083e+00 3.069688259274591e+00 4.793692746134103e+00 9.169673717245327e+03 + 141400 9.713977190107396e-01 -6.050072347018994e+00 -6.014102599784207e+00 3.422552385997402e+00 4.629096240919940e+00 9.260383458849070e+03 + 141420 9.550728498929767e-01 -6.018318488867928e+00 -5.981082948293168e+00 3.606385052543970e+00 4.820197288705525e+00 9.159075791338442e+03 + 141440 9.449788370344295e-01 -5.989714602602669e+00 -6.011731015708292e+00 3.715226743915180e+00 4.588805092833777e+00 9.253072291942075e+03 + 141460 9.805588996264102e-01 -6.024033979299195e+00 -5.986754415650509e+00 3.582636339948993e+00 4.796701363413580e+00 9.176424509320697e+03 + 141480 1.013886731163816e+00 -6.052787804913662e+00 -5.970695542554855e+00 3.472948580001892e+00 4.944335054202704e+00 9.127294189133056e+03 + 141500 9.933681814621980e-01 -5.999144250062352e+00 -5.975103919385933e+00 3.701878434970018e+00 4.839921733943164e+00 9.140787526593922e+03 + 141520 9.925299714279370e-01 -5.974395686371683e+00 -6.002522419891299e+00 3.856125508978948e+00 4.694617452511373e+00 9.224798201875723e+03 + 141540 1.036909269935660e+00 -6.017075671685485e+00 -5.990634680904791e+00 3.645260771323949e+00 4.797089032116792e+00 9.188284979091130e+03 + 141560 1.030690774940583e+00 -5.984831026700464e+00 -6.000340183297270e+00 3.800659174723563e+00 4.711603197510472e+00 9.218086075113455e+03 + 141580 1.059356054481615e+00 -6.005358697595692e+00 -5.991209588195392e+00 3.678898142549591e+00 4.760144518293718e+00 9.190098571916709e+03 + 141600 1.025645813404789e+00 -5.939074375925124e+00 -5.990193097014016e+00 4.038262241441797e+00 4.744730634352856e+00 9.186959093315003e+03 + 141620 1.039102411569125e+00 -5.946573621461797e+00 -5.988061105249170e+00 4.005040078059525e+00 4.766812525985059e+00 9.180421855936946e+03 + 141640 1.015120950508631e+00 -5.902396342089075e+00 -6.043802599857450e+00 4.240662777741850e+00 4.428686163088174e+00 9.351966418212562e+03 + 141660 1.066289876538435e+00 -5.972924596185608e+00 -6.000622338383415e+00 3.881830891392726e+00 4.722786169481166e+00 9.218947278669320e+03 + 141680 1.050162373513105e+00 -5.948633817778926e+00 -6.063978554700931e+00 3.925769166493604e+00 4.263441837547104e+00 9.414496899009284e+03 + 141700 1.097744846988975e+00 -6.027959018068579e+00 -6.007425223298219e+00 3.542778947865839e+00 4.660687175031722e+00 9.239859753243667e+03 + 141720 1.015237205472077e+00 -5.922859089579497e+00 -6.040794875845186e+00 4.088652850800382e+00 4.411447315558855e+00 9.342692385535702e+03 + 141740 9.992999645226122e-01 -5.928450082214295e+00 -6.029938383530901e+00 4.031843490703297e+00 4.449081959279472e+00 9.309193244153425e+03 + 141760 1.005131453707304e+00 -5.979713273610386e+00 -5.997301665373799e+00 3.840827532112661e+00 4.739832264812318e+00 9.208772083242846e+03 + 141780 9.709160760615200e-01 -5.977794776201065e+00 -5.997990144347645e+00 3.866348730574209e+00 4.750383801453431e+00 9.210864588474331e+03 + 141800 9.803282639840547e-01 -6.039401266714443e+00 -6.000514034924663e+00 3.468238955243815e+00 4.691535457960405e+00 9.218606743545753e+03 + 141820 9.594156893267792e-01 -6.044415806484250e+00 -5.990626035941355e+00 3.434116237046788e+00 4.742985423444180e+00 9.188280744423204e+03 + 141840 9.647820290851310e-01 -6.076293939486161e+00 -6.023714161085698e+00 3.254644597503205e+00 4.556565821773074e+00 9.290003512394658e+03 + 141860 9.799331312897980e-01 -6.113530485927313e+00 -5.998207400971348e+00 3.088131490808723e+00 4.750334490815597e+00 9.211573102008309e+03 + 141880 9.791081092658948e-01 -6.121076411869053e+00 -5.994893726920822e+00 3.036269424687936e+00 4.760829928368070e+00 9.201404690172802e+03 + 141900 9.515235828014684e-01 -6.082358922162840e+00 -5.947038450224087e+00 3.279275326583140e+00 5.056306417230809e+00 9.055182317099874e+03 + 141920 8.836008570368252e-01 -5.975894933191378e+00 -5.945254142544695e+00 3.880072658151716e+00 5.056016819692001e+00 9.049754751835062e+03 + 141940 9.887244418249830e-01 -6.118377479073247e+00 -5.980695602983013e+00 3.049275634380639e+00 4.839866273092227e+00 9.157897631382149e+03 + 141960 9.668707091460165e-01 -6.068474017846654e+00 -6.011750519622595e+00 3.290458534623567e+00 4.616173639359096e+00 9.253170962469703e+03 + 141980 9.566425949516885e-01 -6.034813768600785e+00 -6.033036487519474e+00 3.507626369121915e+00 4.517831792124163e+00 9.318721682580426e+03 + 142000 1.004038576293480e+00 -6.084854991872959e+00 -5.981932706317867e+00 3.290092941929614e+00 4.881088632759166e+00 9.161660138357083e+03 + 142020 9.704113181751642e-01 -6.014270128656978e+00 -6.018011265880400e+00 3.621785149464350e+00 4.600302960588347e+00 9.272436866332000e+03 + 142040 1.020891498542913e+00 -6.068189293192276e+00 -6.030928457284438e+00 3.323109819221826e+00 4.537067305100354e+00 9.312258064387395e+03 + 142060 9.313846037419831e-01 -5.917956828884531e+00 -6.046468392225896e+00 4.170614632911557e+00 4.432681349105282e+00 9.360255764750656e+03 + 142080 9.876974470414244e-01 -5.986451151550558e+00 -6.010089991112716e+00 3.797085042413510e+00 4.661347167549000e+00 9.248058941784357e+03 + 142100 9.865588666130629e-01 -5.970843521640624e+00 -6.025893716498795e+00 3.836442290607359e+00 4.520335552741619e+00 9.296695781538567e+03 + 142120 9.978659225860754e-01 -5.975398535187557e+00 -5.993845507911345e+00 3.846927948965512e+00 4.741002576925712e+00 9.198139236066301e+03 + 142140 1.037418055071861e+00 -6.023656846879240e+00 -6.000921870730969e+00 3.587292319357650e+00 4.717840070627207e+00 9.219872018843118e+03 + 142160 9.814662358905988e-01 -5.933682733356086e+00 -5.955855410199995e+00 4.116290267641162e+00 4.988971325992786e+00 9.081998819400756e+03 + 142180 1.006290156889981e+00 -5.963976383038128e+00 -5.965372446521361e+00 3.852855995398918e+00 4.844839582838071e+00 9.111046410698093e+03 + 142200 1.047481148587131e+00 -6.018159330222583e+00 -5.962094939593655e+00 3.637263022041024e+00 4.959193428968744e+00 9.101048206122257e+03 + 142220 1.002273604933187e+00 -5.945937719405025e+00 -6.025765521854280e+00 3.954513594072913e+00 4.496129999096786e+00 9.296307185705766e+03 + 142240 1.045227449738763e+00 -6.008909018792191e+00 -6.004701200417505e+00 3.628634441373239e+00 4.652796385638479e+00 9.231487180750861e+03 + 142260 9.651797363616643e-01 -5.890481511811447e+00 -6.014161941286962e+00 4.267500682853779e+00 4.557308517320767e+00 9.260567480552654e+03 + 142280 1.043674373017887e+00 -6.009105819122472e+00 -5.988451812499212e+00 3.657056096916740e+00 4.775654599144696e+00 9.181623133001667e+03 + 142300 9.957376999981321e-01 -5.942344122685166e+00 -6.012914112802759e+00 3.960694666338446e+00 4.555470862412552e+00 9.256749772207137e+03 + 142320 1.040491920658572e+00 -6.015825299354069e+00 -5.983017559727877e+00 3.605839949018201e+00 4.794227066933098e+00 9.165010587232664e+03 + 142340 9.994088039570280e-01 -5.962430628539248e+00 -6.047037654014417e+00 3.837915649477888e+00 4.352089016304587e+00 9.361996244329765e+03 + 142360 1.026048782868298e+00 -6.010174758766356e+00 -6.040371211065406e+00 3.588133209479083e+00 4.414740507492050e+00 9.341385467273240e+03 + 142380 9.797001662907349e-01 -5.950474383779784e+00 -5.990698910418029e+00 3.943832485948611e+00 4.712857029266427e+00 9.188494684421121e+03 + 142400 9.590207729503555e-01 -5.924647544477073e+00 -5.961541643643755e+00 4.053980227020626e+00 4.842128600262144e+00 9.099355827855039e+03 + 142420 9.804165291732100e-01 -5.956797828481124e+00 -5.980226154222117e+00 3.888945055677298e+00 4.754415983750826e+00 9.156426823061702e+03 + 142440 1.061792405652693e+00 -6.078118683002723e+00 -5.984927216068314e+00 3.249408647038246e+00 4.784528471508521e+00 9.170844225918227e+03 + 142460 1.008319781043202e+00 -6.001355686136633e+00 -6.009803490822836e+00 3.672198483593791e+00 4.623689881792062e+00 9.247148198485729e+03 + 142480 9.943110195989456e-01 -5.983349514416791e+00 -6.014296597215626e+00 3.786024132945642e+00 4.608321194469145e+00 9.260987927078939e+03 + 142500 9.871588584594029e-01 -5.975868273140073e+00 -6.004761059490677e+00 3.801850301914451e+00 4.635943451545051e+00 9.231650570621630e+03 + 142520 1.003939292353814e+00 -6.004674630457796e+00 -5.948635115724188e+00 3.676227253136757e+00 4.998014818824013e+00 9.060025585643347e+03 + 142540 9.551728641951208e-01 -5.931695374645167e+00 -5.993754856400939e+00 4.041825165960039e+00 4.685470018044630e+00 9.197875852471430e+03 + 142560 1.044411162991910e+00 -6.060757482765778e+00 -5.996595092300579e+00 3.360660391295902e+00 4.729090766444914e+00 9.206593631515339e+03 + 142580 1.013720237661714e+00 -6.014316315733987e+00 -5.994531397870748e+00 3.596867370783127e+00 4.710475430859991e+00 9.200244459893176e+03 + 142600 1.001867699947043e+00 -5.997203436262343e+00 -5.979732260188305e+00 3.704597714830002e+00 4.804919911502883e+00 9.154906089212809e+03 + 142620 9.524291568218852e-01 -5.924121288090693e+00 -5.971248287314713e+00 4.088085772487668e+00 4.817475250063779e+00 9.128951718890730e+03 + 142640 1.001735671513476e+00 -5.992777140860269e+00 -5.996487365217235e+00 3.725273223232161e+00 4.703968540819094e+00 9.206226443449201e+03 + 142660 9.613129495625525e-01 -5.925723920730281e+00 -6.020572125854264e+00 4.036914292293101e+00 4.492281220758882e+00 9.280289681546901e+03 + 142680 1.009609205265977e+00 -5.988913008827472e+00 -6.023403619024745e+00 3.756742228633366e+00 4.558691807475943e+00 9.289043965302762e+03 + 142700 1.029077512995640e+00 -6.010423685659596e+00 -6.003596085243901e+00 3.671636605832519e+00 4.710841743987193e+00 9.228088647114182e+03 + 142720 1.004498501131532e+00 -5.967054148859640e+00 -6.015950838642973e+00 3.859726852844140e+00 4.578954493369956e+00 9.266086482446683e+03 + 142740 1.016610058950480e+00 -5.978257286552350e+00 -5.984141750258368e+00 3.842952519795537e+00 4.809163018577767e+00 9.168401728827126e+03 + 142760 1.037010198897318e+00 -6.001106810445228e+00 -5.968040059890471e+00 3.729046914678434e+00 4.918921313426964e+00 9.119195411609782e+03 + 142780 1.043765490488644e+00 -6.001162120896964e+00 -5.999453320286821e+00 3.705922684995933e+00 4.715734882535417e+00 9.215359763799423e+03 + 142800 9.882945898864103e-01 -5.909028491285439e+00 -6.024177939603366e+00 4.200667557591085e+00 4.539461606030017e+00 9.291367650636803e+03 + 142820 1.042999778384037e+00 -5.982229274275739e+00 -6.014147336379139e+00 3.769029742196590e+00 4.585751290294722e+00 9.260513115487433e+03 + 142840 1.066330962877568e+00 -6.009682383830716e+00 -6.003407601451631e+00 3.604155857142057e+00 4.640186628582198e+00 9.227512182618684e+03 + 142860 1.074253757207893e+00 -6.017738210820341e+00 -5.961116739952267e+00 3.641291150711384e+00 4.966420398580166e+00 9.098062390963509e+03 + 142880 1.028458141666634e+00 -5.949073714007098e+00 -5.975618328637364e+00 3.971923759503286e+00 4.819500474530461e+00 9.142324029034984e+03 + 142900 9.962642227907526e-01 -5.904574686352394e+00 -6.032973496647770e+00 4.164658618159294e+00 4.427372779791568e+00 9.318530525606498e+03 + 142920 9.964125332380310e-01 -5.912081855520427e+00 -6.071961561969874e+00 4.139308120854674e+00 4.221254105117334e+00 9.439260689183357e+03 + 142940 9.782090630188435e-01 -5.897955346686912e+00 -6.034694719962548e+00 4.208027255902010e+00 4.422848614203676e+00 9.323851000463592e+03 + 142960 1.067403364824678e+00 -6.049200262546028e+00 -5.974986924073215e+00 3.422810958373380e+00 4.848955432361290e+00 9.140420884608367e+03 + 142980 9.927893057555371e-01 -5.962137003073414e+00 -5.956742057992380e+00 3.961090968765237e+00 4.992069578285587e+00 9.084720758714664e+03 + 143000 1.026019119867684e+00 -6.036055376448913e+00 -5.984680309537648e+00 3.450881712408640e+00 4.745885296879035e+00 9.170053386416050e+03 + 143020 9.647712210801486e-01 -5.971458341798068e+00 -6.004646947453050e+00 3.824764251827710e+00 4.634190142236677e+00 9.231317846897882e+03 + 143040 1.006043025003857e+00 -6.059548405177569e+00 -5.941751397893956e+00 3.385705542192978e+00 5.062114187043447e+00 9.039108052576381e+03 + 143060 9.834685013277533e-01 -6.048593253328431e+00 -5.958410427582512e+00 3.475043717105672e+00 4.992887458285916e+00 9.089821783521229e+03 + 143080 9.604258565669499e-01 -6.033373924363105e+00 -5.988692217645143e+00 3.500531396540684e+00 4.757100670986988e+00 9.182370460024833e+03 + 143100 9.767269123638138e-01 -6.073175703477518e+00 -6.021280549218176e+00 3.251190550799609e+00 4.549180557305919e+00 9.282503418707242e+03 + 143120 9.152276782151394e-01 -5.995081453708726e+00 -6.008599762588126e+00 3.714549007671534e+00 4.636924786134485e+00 9.243458511449135e+03 + 143140 9.913225686978538e-01 -6.114720242008745e+00 -5.959014249576824e+00 3.079549464007989e+00 4.973637367976536e+00 9.091670229858397e+03 + 143160 9.374464509799327e-01 -6.037297109677590e+00 -5.972196253806087e+00 3.543735693500602e+00 4.917554882239661e+00 9.131895939282223e+03 + 143180 1.015866879835405e+00 -6.150003579389574e+00 -5.961317527452905e+00 2.914545137766831e+00 4.998009647059360e+00 9.098690308320665e+03 + 143200 9.365780732945125e-01 -6.023435982530565e+00 -6.018803742586784e+00 3.522245175699686e+00 4.548844214293695e+00 9.274883101747489e+03 + 143220 9.300010627794899e-01 -5.994624371691734e+00 -6.006834158626491e+00 3.711770903991634e+00 4.641660417953839e+00 9.238066943241354e+03 + 143240 1.023246466176175e+00 -6.104002153902939e+00 -5.982219445089179e+00 3.117698160170527e+00 4.816993319992414e+00 9.162559474250294e+03 + 143260 9.721329519116175e-01 -5.985086341775935e+00 -6.009694401454455e+00 3.724921226537425e+00 4.583617939778431e+00 9.246854407973240e+03 + 143280 1.063641854297031e+00 -6.070495532818321e+00 -6.008954012090708e+00 3.314509536508950e+00 4.667890472046462e+00 9.244531757791163e+03 + 143300 1.010493805931066e+00 -5.941367724443690e+00 -6.026303035632594e+00 4.009641400944105e+00 4.521929700400486e+00 9.297981836653473e+03 + 143320 1.012729496248912e+00 -5.907177984936294e+00 -6.053822504389078e+00 4.132693106388690e+00 4.290637582524757e+00 9.383016451438394e+03 + 143340 1.061221067572097e+00 -5.952310669914858e+00 -6.028576148133952e+00 3.945692539033772e+00 4.507764361055123e+00 9.304996156273090e+03 + 143360 1.036282915545778e+00 -5.902754131994434e+00 -6.021870667020902e+00 4.255642052529083e+00 4.571656475182881e+00 9.284306240018786e+03 + 143380 9.879113787359696e-01 -5.826809187271335e+00 -6.041115557823209e+00 4.624213277181127e+00 4.393632933668609e+00 9.343672724734479e+03 + 143400 1.061538224418216e+00 -5.939497605841168e+00 -6.026822538860154e+00 4.047741778883918e+00 4.546308499999190e+00 9.299561292291912e+03 + 143420 1.001514964040311e+00 -5.858371172065785e+00 -6.073463418108338e+00 4.372124418156257e+00 4.137031455962418e+00 9.443942625760783e+03 + 143440 1.040184095872913e+00 -5.929083185951812e+00 -6.046890442153262e+00 4.016947331906178e+00 4.340479836183476e+00 9.361547554591014e+03 + 143460 1.058521401880514e+00 -5.975006626132298e+00 -5.980661051339097e+00 3.814182501465948e+00 4.781713916909037e+00 9.157769035170137e+03 + 143480 1.028226576102049e+00 -5.951336712703938e+00 -6.021527621822290e+00 3.901224011419464e+00 4.498176949253809e+00 9.283253846583002e+03 + 143500 1.048556297179285e+00 -6.006838180929597e+00 -5.983995968153402e+00 3.697261402318385e+00 4.828424922900298e+00 9.167979203645467e+03 + 143520 1.029890065906846e+00 -6.004892522430193e+00 -5.985943869576150e+00 3.659879668707164e+00 4.768685765689637e+00 9.173934523554297e+03 + 143540 9.538036474451987e-01 -5.913590389762581e+00 -6.009969469341366e+00 4.178104796631958e+00 4.624681207076218e+00 9.247675061024946e+03 + 143560 1.012715031401895e+00 -6.019034233876248e+00 -6.009694086543540e+00 3.594488709198890e+00 4.648121280566425e+00 9.246826513885047e+03 + 143580 9.733735499732030e-01 -5.979023600973283e+00 -6.008251802150051e+00 3.772054306763055e+00 4.604221452556541e+00 9.242371086229577e+03 + 143600 9.880315513425267e-01 -6.014021739554329e+00 -5.986260927109575e+00 3.620331079507977e+00 4.779737960537590e+00 9.174924635878944e+03 + 143620 9.313600886086034e-01 -5.938372174170290e+00 -6.026278103158965e+00 4.045760165831454e+00 4.540990718179937e+00 9.297887214277560e+03 + 143640 9.989173021684992e-01 -6.044704776968807e+00 -6.018079413397022e+00 3.457695797793874e+00 4.610582755684765e+00 9.272629529830709e+03 + 143660 9.641524096041182e-01 -5.997654430137785e+00 -6.015448881368094e+00 3.719616232865168e+00 4.617437740218303e+00 9.264533872674030e+03 + 143680 9.560633477564715e-01 -5.986498786776670e+00 -6.025915561312735e+00 3.762388360020151e+00 4.536051140907918e+00 9.296750133693036e+03 + 143700 9.895806141636594e-01 -6.036024120975520e+00 -5.999281280832203e+00 3.453368192570767e+00 4.664351266609829e+00 9.214860307347501e+03 + 143720 9.305391670892742e-01 -5.945524119680344e+00 -6.043139935169205e+00 3.970055040170172e+00 4.409529921634503e+00 9.349946439629472e+03 + 143740 1.061353110054638e+00 -6.136144326259783e+00 -5.991201493636836e+00 2.965842738445165e+00 4.798126913196986e+00 9.190073329597906e+03 + 143760 9.746022096756571e-01 -6.004583114890686e+00 -6.001638010846513e+00 3.670341449131880e+00 4.687252692306902e+00 9.222084502237043e+03 + 143780 9.617814547405216e-01 -5.979820307019961e+00 -6.033599877516112e+00 3.821633890556231e+00 4.512823274405692e+00 9.320476972602357e+03 + 143800 9.940299595643953e-01 -6.024105812233958e+00 -6.053652579246680e+00 3.541088593013546e+00 4.371426484479080e+00 9.382486029371168e+03 + 143820 9.934220929545590e-01 -6.020856150979756e+00 -5.986429219386841e+00 3.634865626452483e+00 4.832550395209445e+00 9.175447582747558e+03 + 143840 9.336235936238786e-01 -5.928569950435494e+00 -5.997170815986062e+00 4.089482899643536e+00 4.695566113702541e+00 9.208366924125321e+03 + 143860 9.579732958412619e-01 -5.958442086043971e+00 -6.020991249061446e+00 3.951048559317218e+00 4.591881585819186e+00 9.281606577962350e+03 + 143880 1.025746830866926e+00 -6.053502674050260e+00 -6.004290854731942e+00 3.361537535396411e+00 4.644119417426618e+00 9.230249752549575e+03 + 143900 1.012618008160733e+00 -6.030879602627622e+00 -6.005019792830430e+00 3.583605066745339e+00 4.732096096393448e+00 9.232454361630713e+03 + 143920 9.659397369825446e-01 -5.958651799654382e+00 -6.045498812339742e+00 3.941984066132457e+00 4.443295079761339e+00 9.357248161348914e+03 + 143940 9.499252733193427e-01 -5.932495142223002e+00 -6.068624006632215e+00 3.960479052772289e+00 4.178806047460901e+00 9.428888812345143e+03 + 143960 1.025897109771379e+00 -6.043656378010708e+00 -5.948933609144008e+00 3.476560964018336e+00 5.020473761152031e+00 9.060954174058699e+03 + 143980 9.902747496636225e-01 -5.987099795935081e+00 -5.942910302669016e+00 3.772094946401851e+00 5.025837855037580e+00 9.042618572532034e+03 + 144000 1.014369870409376e+00 -6.017886043817189e+00 -5.966386763768344e+00 3.611849037809804e+00 4.907565873338106e+00 9.114134677206197e+03 + 144020 1.060071315355936e+00 -6.080474905319726e+00 -5.981649062804132e+00 3.266070536674904e+00 4.833543817649153e+00 9.160801772162207e+03 + 144040 9.336360902447188e-01 -5.889752907444445e+00 -6.026994267898646e+00 4.234643815143498e+00 4.446582685383585e+00 9.300109285921108e+03 + 144060 1.016183759593726e+00 -6.010553227136117e+00 -5.953773299627930e+00 3.655515318849727e+00 4.981554449267125e+00 9.075681674259638e+03 + 144080 1.042448328337857e+00 -6.043492781098114e+00 -5.980600985419255e+00 3.482275370755247e+00 4.843409794017186e+00 9.157594006075678e+03 + 144100 1.055453035269398e+00 -6.057699008517859e+00 -5.981378146222158e+00 3.385918011167252e+00 4.824164213084437e+00 9.159986472115066e+03 + 144120 9.768278981413673e-01 -5.940238731333043e+00 -6.027516242246314e+00 3.924976298429452e+00 4.423815324614287e+00 9.301690925457126e+03 + 144140 9.834784577796795e-01 -5.948209082310563e+00 -5.988030026723845e+00 3.988810300836133e+00 4.760152275743841e+00 9.180292570493884e+03 + 144160 9.903699465857806e-01 -5.954424718797602e+00 -5.995278799276906e+00 3.923677068597578e+00 4.689086616336895e+00 9.202556877187741e+03 + 144180 1.029301056925180e+00 -6.006865177549577e+00 -6.043133211473513e+00 3.618377520503141e+00 4.410120857251790e+00 9.349936721829825e+03 + 144200 9.983792096944891e-01 -5.955916815061374e+00 -5.986795537831901e+00 3.948274998447801e+00 4.770964593832530e+00 9.176539094531541e+03 + 144220 9.289415100248983e-01 -5.846344166606392e+00 -6.038041599636792e+00 4.552108678056678e+00 4.451352352514238e+00 9.334155952656027e+03 + 144240 1.002379075372907e+00 -5.946351141638212e+00 -6.021007892291544e+00 4.008658598588260e+00 4.579967983242004e+00 9.281640685353375e+03 + 144260 1.071559996693637e+00 -6.039084711588035e+00 -6.008024287792261e+00 3.520806622139150e+00 4.699160382159530e+00 9.241708031452441e+03 + 144280 1.043137856430322e+00 -5.990468920749844e+00 -6.016281287919490e+00 3.753439233654996e+00 4.605220626915976e+00 9.267106504027775e+03 + 144300 9.956429338715099e-01 -5.918310251371743e+00 -5.987846446056897e+00 4.105747950252718e+00 4.706460359679213e+00 9.179781891319402e+03 + 144320 1.044458120710779e+00 -5.992211508343604e+00 -5.974984969084431e+00 3.750799579115562e+00 4.849717033340064e+00 9.140414285493685e+03 + 144340 1.010283980211606e+00 -5.943098365747236e+00 -6.039151294722764e+00 3.961705475150188e+00 4.410154692829986e+00 9.337616758301112e+03 + 144360 1.029353828808548e+00 -5.976700898708115e+00 -6.045631880626789e+00 3.822989003481549e+00 4.427176638269541e+00 9.357661160185173e+03 + 144380 1.028447427801659e+00 -5.987087893225515e+00 -6.023929241695418e+00 3.745776287906024e+00 4.534227563811589e+00 9.290652738800543e+03 + 144400 9.692081921801015e-01 -5.915445046845586e+00 -6.015530229527405e+00 4.179696153271037e+00 4.604991546180071e+00 9.264754808114811e+03 + 144420 1.020394386658607e+00 -6.008152185772259e+00 -6.018911213171092e+00 3.649951272140290e+00 4.588171271862080e+00 9.275204951680213e+03 + 144440 9.989798054457499e-01 -5.996896155462064e+00 -6.014284143787217e+00 3.717490107801686e+00 4.617645588056162e+00 9.260972418421827e+03 + 144460 9.828511786228347e-01 -5.996782425122694e+00 -5.988661207397268e+00 3.737312240817089e+00 4.783945529750866e+00 9.182274992167886e+03 + 144480 9.752927864206771e-01 -6.008401457709764e+00 -5.958385143491872e+00 3.699928789219178e+00 4.987130205457923e+00 9.089742022250099e+03 + 144500 9.922385590005608e-01 -6.052653920123117e+00 -5.976508644279844e+00 3.430651551632200e+00 4.867889508967630e+00 9.145068780262003e+03 + 144520 1.017123853915155e+00 -6.105353833576578e+00 -6.000964034910270e+00 3.168960690198380e+00 4.768383068409456e+00 9.220027864427217e+03 + 144540 9.487119707961863e-01 -6.021110358112641e+00 -6.040214741580036e+00 3.558576257006641e+00 4.448875930743070e+00 9.340921783235255e+03 + 144560 9.026028946012893e-01 -5.967611315871537e+00 -6.014737750710964e+00 3.891011627032643e+00 4.620404345392432e+00 9.262350971235863e+03 + 144580 9.874290768127768e-01 -6.103904521217029e+00 -5.966017526379519e+00 3.175748110241649e+00 4.967516572542120e+00 9.113028670455484e+03 + 144600 9.555772537023101e-01 -6.061856679975254e+00 -5.971977075575844e+00 3.415717682482437e+00 4.931820279767676e+00 9.131238649806804e+03 + 144620 1.002106564697661e+00 -6.130561389194900e+00 -5.985031245250846e+00 3.036175285229489e+00 4.871831892473244e+00 9.171153930086708e+03 + 144640 9.548740251438269e-01 -6.054844662563151e+00 -6.006140089569624e+00 3.443062668460361e+00 4.722731863597509e+00 9.235916270339654e+03 + 144660 9.574667831813201e-01 -6.047251958536547e+00 -6.009259667865623e+00 3.445729998679647e+00 4.663887611000070e+00 9.245494254957252e+03 + 144680 9.935237374302001e-01 -6.080875950127553e+00 -6.006597620359730e+00 3.240684340824690e+00 4.667202004885914e+00 9.237328254619470e+03 + 144700 1.003555442415166e+00 -6.063941102186172e+00 -6.074293645540260e+00 3.314050253789290e+00 4.254604347799207e+00 9.446480508453158e+03 + 144720 1.019025153726932e+00 -6.047493788361750e+00 -6.035105376172393e+00 3.477170211038755e+00 4.548306390930634e+00 9.325130596617020e+03 + 144740 1.045326163237689e+00 -6.042208336706166e+00 -5.979536431794300e+00 3.543691574839599e+00 4.903563351289472e+00 9.154327012092313e+03 + 144760 1.002403033047359e+00 -5.936714673399880e+00 -5.998580282713635e+00 4.038788379699493e+00 4.683546477347813e+00 9.212687675037250e+03 + 144780 1.057193355593690e+00 -5.981412378363301e+00 -5.972072272491848e+00 3.829673003025956e+00 4.883305336316552e+00 9.131496380463392e+03 + 144800 1.016129099115472e+00 -5.891847640501859e+00 -6.007914532800223e+00 4.251371163740721e+00 4.584897106869981e+00 9.241339381482812e+03 + 144820 1.101933598111601e+00 -6.000036924601751e+00 -6.005764575985403e+00 3.668584028255698e+00 4.635694967659583e+00 9.234769286642828e+03 + 144840 1.031770440545979e+00 -5.889102975343481e+00 -5.976460742222110e+00 4.303573959866751e+00 4.801952143878929e+00 9.144907823379370e+03 + 144860 1.041268232760532e+00 -5.902540212773613e+00 -5.986459236138743e+00 4.293879999035793e+00 4.812003980446323e+00 9.175461533667130e+03 + 144880 1.052883114936598e+00 -5.922056816640553e+00 -6.001944790626474e+00 4.068539209727355e+00 4.609810100476178e+00 9.223013979141930e+03 + 144900 1.042604009323368e+00 -5.915408320578691e+00 -6.052808209542293e+00 4.085292441540838e+00 4.296321016547741e+00 9.379879341855692e+03 + 144920 1.086754051780475e+00 -5.996094502526765e+00 -6.059591255788689e+00 3.672548908514755e+00 4.307940725193978e+00 9.400908868190780e+03 + 144940 1.093313426701941e+00 -6.030334237964823e+00 -5.996489856500554e+00 3.542656256573276e+00 4.736995932342215e+00 9.206285845821174e+03 + 144960 9.911581930978604e-01 -5.906002446741732e+00 -5.982194407467508e+00 4.229033849360227e+00 4.791527820205011e+00 9.162459639005017e+03 + 144980 1.041393271649913e+00 -6.005101414096837e+00 -5.959243074519414e+00 3.695479799738741e+00 4.958805482147418e+00 9.092323387662025e+03 + 145000 9.874712931500707e-01 -5.944512912253335e+00 -5.955143343358591e+00 4.065727153914446e+00 5.004685573454165e+00 9.079814552272344e+03 + 145020 1.013137349676630e+00 -5.997362055617272e+00 -5.986892836257746e+00 3.671249785856440e+00 4.731365663525300e+00 9.176870571800657e+03 + 145040 1.068891167059814e+00 -6.093898883652746e+00 -5.964241855106389e+00 3.161931138911403e+00 4.906441861184907e+00 9.107614224802788e+03 + 145060 1.011213912769952e+00 -6.021187766152206e+00 -5.999054622220345e+00 3.601250260699259e+00 4.728342198248963e+00 9.214160386902144e+03 + 145080 9.780658222858261e-01 -5.983171572996707e+00 -5.962530549829269e+00 3.815888348747477e+00 4.934412297962912e+00 9.102391661962129e+03 + 145100 9.720462998520066e-01 -5.979207050715813e+00 -5.947481446264239e+00 3.808697964843324e+00 4.990871295125682e+00 9.056518569064914e+03 + 145120 9.743391592880173e-01 -5.981651258752540e+00 -6.011709842264171e+00 3.798795591526098e+00 4.626194553451548e+00 9.253009881822180e+03 + 145140 1.014331013378868e+00 -6.040166132140115e+00 -5.994992635611113e+00 3.514027951964257e+00 4.773421159609784e+00 9.201672397612650e+03 + 145160 9.931208031175235e-01 -6.008158451416429e+00 -5.978686670691088e+00 3.656369979928587e+00 4.825601505596820e+00 9.151740401101335e+03 + 145180 9.475790624594267e-01 -5.939791933474814e+00 -5.968457432874230e+00 4.020263164275666e+00 4.855661430752526e+00 9.120490261249868e+03 + 145200 1.017955111748345e+00 -6.041677097053587e+00 -6.021295644252211e+00 3.408636012929029e+00 4.525669468934161e+00 9.282535257283180e+03 + 145220 9.526689823692729e-01 -5.940916992149564e+00 -6.073555036225358e+00 3.950682128342974e+00 4.189053953588783e+00 9.444211523126007e+03 + 145240 9.335041097603322e-01 -5.909850348770558e+00 -6.006239578738558e+00 4.200062725784658e+00 4.646580851123268e+00 9.236215468487306e+03 + 145260 1.019550575353238e+00 -6.034348261036230e+00 -5.995744101049172e+00 3.521406102546639e+00 4.743077163166782e+00 9.203959046572074e+03 + 145280 1.024980634756864e+00 -6.038258589462449e+00 -5.961112433282899e+00 3.521251883204492e+00 4.964237050316555e+00 9.098061313059632e+03 + 145300 1.003642712589381e+00 -6.000762666124282e+00 -6.010712942930789e+00 3.684758114869472e+00 4.627622085646147e+00 9.249973626649706e+03 + 145320 1.033744561389013e+00 -6.042117180773358e+00 -5.987979750018617e+00 3.437339936045349e+00 4.748205441179408e+00 9.180195905544217e+03 + 145340 1.011783451088057e+00 -6.007179067788475e+00 -6.017114465136246e+00 3.684469228350953e+00 4.627418639282282e+00 9.269642299866960e+03 + 145360 1.092967586923631e+00 -6.125171486909958e+00 -5.963355699245301e+00 3.053486864493879e+00 4.982658158176555e+00 9.104902940462320e+03 + 145380 9.682162726071293e-01 -5.937233548909616e+00 -6.010337406717683e+00 4.031860411286591e+00 4.612086746967239e+00 9.248772243024816e+03 + 145400 1.046575386064725e+00 -6.048581976902052e+00 -5.974643567375191e+00 3.460519971352876e+00 4.885085760788013e+00 9.139373433433399e+03 + 145420 1.007600647814133e+00 -5.983677442895872e+00 -6.035090240117079e+00 3.784176775495172e+00 4.488956537746344e+00 9.325079018630891e+03 + 145440 9.638571545998363e-01 -5.912179908565498e+00 -6.016799192743081e+00 4.165763605929975e+00 4.565023486400396e+00 9.268679395179701e+03 + 145460 1.019083456785201e+00 -5.984129771276293e+00 -5.984455688647537e+00 3.776236927355304e+00 4.774365459374071e+00 9.169371379845108e+03 + 145480 9.870894664988736e-01 -5.924503134147398e+00 -6.027877291741325e+00 4.092112362956762e+00 4.498521952953245e+00 9.302798620654576e+03 + 145500 9.816906500064776e-01 -5.903564928730553e+00 -6.048048205638713e+00 4.211895846254343e+00 4.382250511532852e+00 9.365114880320070e+03 + 145520 1.082824479996435e+00 -6.042077948874216e+00 -6.002867653342624e+00 3.505682477835420e+00 4.730834062551443e+00 9.225846495392634e+03 + 145540 1.040844646776641e+00 -5.971350013758226e+00 -6.041048592723508e+00 3.798125769831970e+00 4.397905743593085e+00 9.343500300733818e+03 + 145560 1.019804143585232e+00 -5.937787314132484e+00 -6.024253217652326e+00 4.003955200689191e+00 4.507454602122932e+00 9.291645145871644e+03 + 145580 1.031286474813202e+00 -5.955396363111252e+00 -6.007380786040503e+00 3.956640774048983e+00 4.658138173025774e+00 9.239707903333529e+03 + 145600 1.038987418999279e+00 -5.970476388547776e+00 -6.027586884532651e+00 3.807027830547201e+00 4.479090524781360e+00 9.301945639376803e+03 + 145620 1.035932158605705e+00 -5.978445654206726e+00 -6.012593903787412e+00 3.741923999718796e+00 4.545839466201954e+00 9.255745353414741e+03 + 145640 9.837738292308880e-01 -5.917204793739272e+00 -5.991695734867803e+00 4.145532617375531e+00 4.717794105979625e+00 9.191552627297691e+03 + 145660 9.836842500762703e-01 -5.933570776768774e+00 -6.011943450305389e+00 4.048867312462821e+00 4.598839292883548e+00 9.253746809324623e+03 + 145680 9.411711280831839e-01 -5.890774029861855e+00 -6.056745290991517e+00 4.225746766358314e+00 4.272714100982140e+00 9.392054781500821e+03 + 145700 9.743102419496299e-01 -5.961497024456220e+00 -5.999957224657376e+00 3.832623925733288e+00 4.611779504481505e+00 9.216928998132345e+03 + 145720 9.780982226129207e-01 -5.987629962371034e+00 -5.990705726878312e+00 3.790746271376127e+00 4.773084755602310e+00 9.188532038363888e+03 + 145740 9.948462064437332e-01 -6.033365698968798e+00 -5.980145974862686e+00 3.512994169408116e+00 4.818590060951104e+00 9.156220692000652e+03 + 145760 1.003769317725403e+00 -6.069465503627400e+00 -5.993995313530084e+00 3.298422195060307e+00 4.731783705573271e+00 9.198641005881693e+03 + 145780 9.506041316927898e-01 -6.011929612584299e+00 -6.000224096304006e+00 3.617254287763143e+00 4.684469173667376e+00 9.217715600310836e+03 + 145800 9.728668483253247e-01 -6.060877702061767e+00 -5.960825538542474e+00 3.413123589772861e+00 4.987638595722905e+00 9.097180685107685e+03 + 145820 9.556485520576307e-01 -6.048200430856607e+00 -5.937880548138871e+00 3.449067575245161e+00 5.082541413757077e+00 9.027339840821322e+03 + 145840 9.933183589544394e-01 -6.110236597500824e+00 -5.946467045893995e+00 3.096220199056275e+00 5.036610307638897e+00 9.053441679947524e+03 + 145860 9.784443209505010e-01 -6.088791789865550e+00 -6.007538757011688e+00 3.230790965284486e+00 4.697358453797559e+00 9.240210349957841e+03 + 145880 1.013295181059930e+00 -6.138126787434806e+00 -5.975460243441630e+00 2.959484756340250e+00 4.893541224515396e+00 9.141892186471507e+03 + 145900 9.082476550196908e-01 -5.975552723767165e+00 -6.006052397222250e+00 3.809120325564397e+00 4.633986480776086e+00 9.235651166895092e+03 + 145920 9.567834750865056e-01 -6.033224612110772e+00 -6.017202338090662e+00 3.484965509286502e+00 4.576967886148863e+00 9.269935291529953e+03 + 145940 9.722272138947428e-01 -6.030628082208806e+00 -5.990683533000507e+00 3.567683116084994e+00 4.797050899038059e+00 9.188470689165501e+03 + 145960 9.758023476667106e-01 -5.999971386669308e+00 -6.010560486265526e+00 3.702835033620540e+00 4.642030785081194e+00 9.249481798077104e+03 + 145980 1.069745781327832e+00 -6.091064445750801e+00 -5.967342563671442e+00 3.225776254763271e+00 4.936206447562325e+00 9.117067785313837e+03 + 146000 9.251665762046253e-01 -5.826788832623731e+00 -6.004874331934950e+00 4.629707718938314e+00 4.607113223251342e+00 9.231990515375182e+03 + 146020 1.035293612937146e+00 -5.948288511163669e+00 -5.985042876295799e+00 3.989739258162590e+00 4.778690005854278e+00 9.171115299340856e+03 + 146040 1.072172678696891e+00 -5.971231224333609e+00 -5.995723109845643e+00 3.821631382101134e+00 4.680995185384003e+00 9.203910461079264e+03 + 146060 1.047336673222628e+00 -5.913950015851645e+00 -6.013445493745230e+00 4.163646691520501e+00 4.592328260580096e+00 9.258356292769116e+03 + 146080 1.009824679823282e+00 -5.849770561908489e+00 -5.995524063887132e+00 4.463993538030841e+00 4.627054374387941e+00 9.203280867288271e+03 + 146100 1.012623781819700e+00 -5.852142707651311e+00 -5.967909878433217e+00 4.502499863371762e+00 4.837746853830280e+00 9.118761003599975e+03 + 146120 1.056437723715421e+00 -5.917973506924930e+00 -6.002152596297615e+00 4.159311457767623e+00 4.675942099917687e+00 9.223603410968901e+03 + 146140 9.785362630741612e-01 -5.810257216633323e+00 -5.983269566300072e+00 4.706128329318606e+00 4.712664643957552e+00 9.165745759444226e+03 + 146160 1.017852916723209e+00 -5.878143895691900e+00 -6.027114502958660e+00 4.329233448570450e+00 4.473821168517744e+00 9.300473109806604e+03 + 146180 1.043911539691283e+00 -5.931726183279805e+00 -6.066501171590415e+00 3.988029534308422e+00 4.214130695066862e+00 9.422320708805637e+03 + 146200 1.068630467382682e+00 -5.991433534256910e+00 -6.003386599902315e+00 3.725438602849283e+00 4.656802250182437e+00 9.227455040859490e+03 + 146220 9.706682045866865e-01 -5.875598124608504e+00 -6.033785671935535e+00 4.349922322986341e+00 4.441584946790698e+00 9.321047674975394e+03 + 146240 1.025752763487855e+00 -5.987449335652083e+00 -6.035811304565427e+00 3.708292086856450e+00 4.430590177365524e+00 9.327330773287156e+03 + 146260 9.760221841134513e-01 -5.945080395924111e+00 -6.058215597854169e+00 3.916146921969132e+00 4.266507084870826e+00 9.396646598824249e+03 + 146280 9.820599578321977e-01 -5.983821636002117e+00 -6.034006805040946e+00 3.693951863586483e+00 4.405780856835722e+00 9.321732186751113e+03 + 146300 9.672924023399080e-01 -5.983642404863553e+00 -5.999110772515513e+00 3.756187968685859e+00 4.667366207906150e+00 9.214338244217857e+03 + 146320 9.589785060529610e-01 -5.985967310669660e+00 -6.020875050021282e+00 3.749049620773948e+00 4.548603979461733e+00 9.281254517054740e+03 + 146340 9.873086177236396e-01 -6.038877223675098e+00 -6.019897966839235e+00 3.467992944668693e+00 4.576974774450723e+00 9.278240092842776e+03 + 146360 9.340283124348085e-01 -5.967537804492419e+00 -5.978954334658646e+00 3.809505384790684e+00 4.743949901873869e+00 9.152564637338362e+03 + 146380 9.110509170889752e-01 -5.935447770733778e+00 -6.003691380281552e+00 3.998732878990329e+00 4.606867512302562e+00 9.228387232167768e+03 + 146400 1.023094940497989e+00 -6.099267253070698e+00 -5.951705452829634e+00 3.161895200161204e+00 5.009217892260184e+00 9.069398951794274e+03 + 146420 9.286690377829251e-01 -5.953075348018171e+00 -6.018902724724329e+00 3.929392803744864e+00 4.551401819944476e+00 9.275129580140883e+03 + 146440 9.160482036479469e-01 -5.925906911346908e+00 -6.009187362928492e+00 4.077328129435224e+00 4.599118888845541e+00 9.245272354753830e+03 + 146460 1.042969284008299e+00 -6.103945097531083e+00 -6.021843402809422e+00 3.096239278416666e+00 4.567679914704639e+00 9.284229175214596e+03 + 146480 1.021580586362234e+00 -6.064026255802167e+00 -5.995276746521092e+00 3.364892774303999e+00 4.759663095548115e+00 9.202561358423933e+03 + 146500 9.556385460279209e-01 -5.959287959727708e+00 -5.994938856151905e+00 3.932743493993035e+00 4.728030529766901e+00 9.201506904906486e+03 + 146520 1.008429353603009e+00 -6.030112464408780e+00 -5.966493137683381e+00 3.567407081964698e+00 4.932719101080933e+00 9.114466623721262e+03 + 146540 9.250206928725512e-01 -5.896197801498803e+00 -6.002937727961774e+00 4.210321134397818e+00 4.597403958697202e+00 9.226064735884262e+03 + 146560 1.000673789919201e+00 -5.996705851811758e+00 -5.982678733719220e+00 3.706563813654161e+00 4.787109696431020e+00 9.163953245340035e+03 + 146580 1.004237239920166e+00 -5.988697354552752e+00 -6.009455737349420e+00 3.702354783448863e+00 4.583156937081041e+00 9.246093084109518e+03 + 146600 1.058442149939690e+00 -6.056281079330957e+00 -5.973841153378213e+00 3.411516705670893e+00 4.884899518028860e+00 9.136911727698009e+03 + 146620 1.017941810858311e+00 -5.982631517124894e+00 -6.023745262832973e+00 3.757687829868722e+00 4.521606339681343e+00 9.290079976926767e+03 + 146640 1.104401600637001e+00 -6.100834892636403e+00 -5.947590398192506e+00 3.142330378809889e+00 5.022283980415622e+00 9.056861249062618e+03 + 146660 1.049294493733776e+00 -6.012137192432932e+00 -5.932578876007909e+00 3.628587867926508e+00 5.085424032448667e+00 9.011222024217524e+03 + 146680 9.762856047130266e-01 -5.894009781371448e+00 -5.930699024052423e+00 4.238098986701860e+00 5.027423677585744e+00 9.005473179860466e+03 + 146700 9.760876525739138e-01 -5.876914480897402e+00 -5.945983963553270e+00 4.408047919013095e+00 5.011440261135205e+00 9.051886410902840e+03 + 146720 1.071797609864190e+00 -5.990442380330000e+00 -5.955067378952279e+00 3.720945152448857e+00 4.924073884623502e+00 9.079599849998383e+03 + 146740 1.054342552977845e+00 -5.921644513997920e+00 -6.016301435219500e+00 4.101684143451884e+00 4.558149453686357e+00 9.267148624379319e+03 + 146760 1.043080819974475e+00 -5.859266416964562e+00 -6.080653946465593e+00 4.473215974966584e+00 4.201974520962200e+00 9.466244079117751e+03 + 146780 1.124671624742567e+00 -5.941342218093446e+00 -6.015532635927275e+00 4.016269413051251e+00 4.590256552919353e+00 9.264805066701374e+03 + 146800 1.048265524614906e+00 -5.802247456472258e+00 -6.050446970314235e+00 4.748556918481068e+00 4.323356901249800e+00 9.372529361867582e+03 + 146820 1.076498034346658e+00 -5.830468102611465e+00 -6.067583489000038e+00 4.567356810917789e+00 4.205803568787149e+00 9.425669029723806e+03 + 146840 1.047895191580802e+00 -5.787475992918536e+00 -6.076126457849664e+00 4.815532379875410e+00 4.158056741725785e+00 9.452216874959806e+03 + 146860 1.105883037357892e+00 -5.887032313468720e+00 -5.981449891729126e+00 4.284469460704704e+00 4.742309115260438e+00 9.160188123523054e+03 + 146880 1.099400189763775e+00 -5.903260290880397e+00 -5.995107268078613e+00 4.176739651311514e+00 4.649340094965567e+00 9.202019212223211e+03 + 146900 1.093052661770129e+00 -5.932411821743210e+00 -6.004697533160536e+00 4.060018062912372e+00 4.644942321776394e+00 9.231470701827609e+03 + 146920 1.069590478226019e+00 -5.943336858653624e+00 -6.029621069746150e+00 4.031833156250342e+00 4.536375863718544e+00 9.308212880247866e+03 + 146940 1.034107791271901e+00 -5.939328425810491e+00 -6.072656962328280e+00 3.978612518119471e+00 4.213019428909984e+00 9.441436044499256e+03 + 146960 1.055704601453745e+00 -6.013828257489641e+00 -5.974760221882641e+00 3.605366851632642e+00 4.829701557847008e+00 9.139728405646985e+03 + 146980 9.954936705477722e-01 -5.955073004713624e+00 -5.981586404843047e+00 3.932435869147313e+00 4.780191822668755e+00 9.160587763415915e+03 + 147000 1.065992677677076e+00 -6.079600013465132e+00 -5.970007676389181e+00 3.275772969410748e+00 4.905069128260214e+00 9.125201823658899e+03 + 147020 1.034138211388486e+00 -6.046075767291795e+00 -6.061346376626426e+00 3.455735784265808e+00 4.368049582347198e+00 9.406325020637914e+03 + 147040 1.017894806478701e+00 -6.038279589225278e+00 -6.019335833811667e+00 3.502377558053666e+00 4.611155533175298e+00 9.276508114268974e+03 + 147060 9.140389479070199e-01 -5.897787672279407e+00 -6.031303026224789e+00 4.247216613353622e+00 4.480550789564990e+00 9.313377875563399e+03 + 147080 1.038753659428150e+00 -6.093657594470680e+00 -5.971790300702791e+00 3.273808098898868e+00 4.973588958616846e+00 9.130654035531490e+03 + 147100 9.792363989036936e-01 -6.013072801226800e+00 -6.041845073720065e+00 3.633086903050637e+00 4.467872061899528e+00 9.345947599181092e+03 + 147120 9.556511416136236e-01 -5.984987381118433e+00 -6.018902096396578e+00 3.786707992204814e+00 4.591964448792474e+00 9.275163612687753e+03 + 147140 9.601838346134909e-01 -5.996618341836211e+00 -6.013004290394294e+00 3.704343795792858e+00 4.610253143455003e+00 9.257018498254371e+03 + 147160 9.805840106623785e-01 -6.030026622576379e+00 -6.000852529990851e+00 3.567701708937618e+00 4.735223863239960e+00 9.219661799430263e+03 + 147180 1.017876948174219e+00 -6.086009114983499e+00 -5.979827854439384e+00 3.258638799469685e+00 4.868348029010958e+00 9.155199299334674e+03 + 147200 9.931146751533079e-01 -6.047372770191480e+00 -5.987036045557725e+00 3.422556116294870e+00 4.769018926219857e+00 9.177296091996648e+03 + 147220 9.761351903487938e-01 -6.017472302584705e+00 -5.986798612110976e+00 3.589617981230208e+00 4.765751058668614e+00 9.176579085160573e+03 + 147240 1.032488780080043e+00 -6.091641844916486e+00 -5.961526901640438e+00 3.226976875033535e+00 4.974117014547002e+00 9.099321877099337e+03 + 147260 9.909708783238195e-01 -6.014349514357239e+00 -6.044902934233122e+00 3.584324349972329e+00 4.408881884918562e+00 9.355395972583703e+03 + 147280 1.011578407048918e+00 -6.028951913937673e+00 -6.010138255871124e+00 3.553616628779026e+00 4.661647564801330e+00 9.248176599863758e+03 + 147300 1.060989239266021e+00 -6.077836545400511e+00 -6.000576073281101e+00 3.264078254404861e+00 4.707719841333931e+00 9.218850140017867e+03 + 147320 1.005432401689564e+00 -5.969353296531612e+00 -5.981168396740696e+00 3.854800221269902e+00 4.786956087488494e+00 9.159310999752950e+03 + 147340 9.798522393251657e-01 -5.902735569118247e+00 -5.975336193463681e+00 4.199498113336196e+00 4.782614093434400e+00 9.141454020429690e+03 + 147360 9.952254019792033e-01 -5.891200787687406e+00 -5.976083385637267e+00 4.237867196638620e+00 4.750458183670934e+00 9.143743559163686e+03 + 147380 1.074271987125533e+00 -5.971213706669562e+00 -5.990459857665112e+00 3.805037980986488e+00 4.694523603637799e+00 9.187757392642527e+03 + 147400 1.048078321189092e+00 -5.897593245797662e+00 -6.051995520056026e+00 4.190205636836806e+00 4.303603884370555e+00 9.377339840327310e+03 + 147420 1.054432252525174e+00 -5.884578972358971e+00 -5.960535862386383e+00 4.288725275374471e+00 4.852569058546333e+00 9.096292705925222e+03 + 147440 1.073986446131941e+00 -5.896932496134309e+00 -6.032840842282691e+00 4.267060482511271e+00 4.486653727178669e+00 9.318124278063069e+03 + 147460 1.045933927628602e+00 -5.849237400121832e+00 -6.043698701726120e+00 4.536082177585032e+00 4.419455290984042e+00 9.351641845311546e+03 + 147480 1.081836177180305e+00 -5.906387748958461e+00 -6.020666111552012e+00 4.249330832267600e+00 4.593126789735968e+00 9.280582772238167e+03 + 147500 1.024278078051951e+00 -5.833560299871292e+00 -6.052111917205425e+00 4.571145650730561e+00 4.316188443244488e+00 9.377709957721452e+03 + 147520 1.118189556494424e+00 -5.997549327457970e+00 -5.985281850560791e+00 3.739550089027719e+00 4.809991839757238e+00 9.171933352829941e+03 + 147540 1.051043548723476e+00 -5.934460959678087e+00 -6.028507489950787e+00 4.064094329544866e+00 4.524064599065496e+00 9.304752241937897e+03 + 147560 9.860461566661262e-01 -5.883190085707709e+00 -6.034198310402381e+00 4.393348116455520e+00 4.526235521811468e+00 9.322305605095815e+03 + 147580 1.049976860726056e+00 -6.025448960550658e+00 -6.010812265536082e+00 3.543525922280762e+00 4.627572090075692e+00 9.250285849841071e+03 + 147600 9.876855694138911e-01 -5.972696067453701e+00 -5.989948898715598e+00 3.926214282376555e+00 4.827145855403735e+00 9.186199601177173e+03 + 147620 9.596203932306527e-01 -5.956816185216270e+00 -5.993341940740624e+00 3.920411184145700e+00 4.710674643582460e+00 9.196615885108258e+03 + 147640 9.503098167818431e-01 -5.955413732439411e+00 -6.026744976883061e+00 3.882895613420072e+00 4.473300569350224e+00 9.299338457762800e+03 + 147660 9.792025788260712e-01 -6.005563932765724e+00 -6.037290165935348e+00 3.703570091056327e+00 4.521393150577628e+00 9.331884896480333e+03 + 147680 1.007749938878115e+00 -6.054358502061521e+00 -6.012042088275933e+00 3.396216264623196e+00 4.639203661023907e+00 9.254072254181929e+03 + 147700 9.428923191843426e-01 -5.962908622824595e+00 -6.002207535948232e+00 3.914391686149993e+00 4.688731245506918e+00 9.223832169728581e+03 + 147720 9.671960549566440e-01 -6.000061673855162e+00 -5.966962070227692e+00 3.770772817665166e+00 4.960835863841207e+00 9.115895950458764e+03 + 147740 9.591341406118271e-01 -5.983855142102416e+00 -5.995895485279360e+00 3.796242622522821e+00 4.727105108763727e+00 9.204437786090157e+03 + 147760 1.002782611483377e+00 -6.042157278596002e+00 -5.963491045382955e+00 3.488741326174172e+00 4.940455010843730e+00 9.105301505226988e+03 + 147780 9.757060023147547e-01 -5.992173036281534e+00 -5.988193637919881e+00 3.814930724336451e+00 4.837781045538970e+00 9.180825377287998e+03 + 147800 9.649849644021182e-01 -5.964111016263060e+00 -6.046593587333906e+00 3.862213128886248e+00 4.388585441660835e+00 9.360640503036137e+03 + 147820 1.017470981989786e+00 -6.030163560658141e+00 -6.030677656959172e+00 3.523876747052479e+00 4.520924726535814e+00 9.311461053081543e+03 + 147840 1.026237549083648e+00 -6.031091799070516e+00 -5.999781704464851e+00 3.544115464218673e+00 4.723902872665882e+00 9.216379698868077e+03 + 147860 1.005522021985366e+00 -5.986606229204186e+00 -6.001977094715025e+00 3.714160581855278e+00 4.625898693458291e+00 9.223127278310338e+03 + 147880 1.014329124580563e+00 -5.987292658819213e+00 -6.000820920704540e+00 3.737879751753013e+00 4.660198378515705e+00 9.219559780674294e+03 + 147900 9.829269821354291e-01 -5.926510306976234e+00 -6.005158785668315e+00 4.011114318903367e+00 4.559502583440694e+00 9.232887356290144e+03 + 147920 9.937424260503718e-01 -5.927227289508981e+00 -5.990095965363997e+00 4.081299984938861e+00 4.720298319283214e+00 9.186657173659509e+03 + 147940 1.028943977642344e+00 -5.961885399576211e+00 -5.984720209978049e+00 3.954655918488980e+00 4.823534903486134e+00 9.170191463397185e+03 + 147960 1.039691175905690e+00 -5.958487865882605e+00 -6.013337456368057e+00 3.955355795412998e+00 4.640400958898841e+00 9.258028650513819e+03 + 147980 1.052993506363975e+00 -5.960208423061725e+00 -6.044193865955648e+00 3.894368591860587e+00 4.412111182058393e+00 9.353228263780298e+03 + 148000 1.037844638160867e+00 -5.923650223914770e+00 -6.033313951152860e+00 4.066991581857732e+00 4.437285489649672e+00 9.319601172019884e+03 + 148020 1.016713527935738e+00 -5.880228166550846e+00 -6.012591264194786e+00 4.362790041504050e+00 4.602740651709388e+00 9.255727238965192e+03 + 148040 1.059464731878219e+00 -5.932819170006319e+00 -5.999894893160636e+00 4.066972643793424e+00 4.681813461506721e+00 9.216718647349062e+03 + 148060 1.020873373701872e+00 -5.868319547450537e+00 -6.078681540224218e+00 4.375806627205301e+00 4.167875511285653e+00 9.460150843666550e+03 + 148080 1.093477458354580e+00 -5.979994514895679e+00 -6.001861127193919e+00 3.850977994115438e+00 4.725416522451630e+00 9.222765573376746e+03 + 148100 1.048469530790213e+00 -5.927404548668319e+00 -5.989622795324542e+00 4.072417164778072e+00 4.715150364235487e+00 9.185172988537115e+03 + 148120 1.010561719535501e+00 -5.893386989675033e+00 -5.980191593971949e+00 4.261320897291439e+00 4.762875426449446e+00 9.156311655866253e+03 + 148140 1.009477591574436e+00 -5.921145943641752e+00 -5.993238971750428e+00 4.087810943819987e+00 4.673841620059919e+00 9.196298636957279e+03 + 148160 1.071815776840783e+00 -6.051876100443477e+00 -6.008621357440243e+00 3.384210343631415e+00 4.632585771605832e+00 9.243532657775057e+03 + 148180 9.992446589319506e-01 -5.987876599243604e+00 -5.995270310163996e+00 3.768625965465616e+00 4.726170133187658e+00 9.202539005389444e+03 + 148200 9.823963588612952e-01 -6.001933566777624e+00 -6.022712139827997e+00 3.636809966221827e+00 4.517496184292795e+00 9.286873264001473e+03 + 148220 9.669405379291510e-01 -6.011315598160169e+00 -5.988747176637188e+00 3.639464770093199e+00 4.769056138930098e+00 9.182537387176979e+03 + 148240 9.707408070311156e-01 -6.040425775450682e+00 -6.008020494168271e+00 3.469343917228231e+00 4.655420057052907e+00 9.241697087399272e+03 + 148260 1.035665193284576e+00 -6.154289405205023e+00 -5.946763961625512e+00 2.879130338440278e+00 5.070773549932433e+00 9.054364677815061e+03 + 148280 9.322460711401074e-01 -6.012039112926700e+00 -5.969594321874745e+00 3.660114884046313e+00 4.903839442576823e+00 9.123927180542354e+03 + 148300 9.723214690843799e-01 -6.076039871552551e+00 -5.948413390324299e+00 3.291610179941796e+00 5.024461185288553e+00 9.059371585573192e+03 + 148320 9.144314542076902e-01 -5.988968609133354e+00 -5.977142859541797e+00 3.711314469251220e+00 4.779219753434777e+00 9.147007417106825e+03 + 148340 8.935731426841854e-01 -5.949948092050392e+00 -6.031430585366335e+00 3.960722108977431e+00 4.492837022982197e+00 9.313769739493915e+03 + 148360 9.515095075674967e-01 -6.021118859705171e+00 -6.061963860269025e+00 3.553052072111833e+00 4.318513758130775e+00 9.408263786677378e+03 + 148380 1.023188399652470e+00 -6.110826104607579e+00 -6.004775775263755e+00 3.095189859317913e+00 4.704147261645579e+00 9.231728861009960e+03 + 148400 9.407457804954813e-01 -5.969995747760130e+00 -6.047634160491102e+00 3.821901665198411e+00 4.376089884791631e+00 9.363865517783128e+03 + 148420 9.748040223817566e-01 -5.999416818784296e+00 -6.020425516284509e+00 3.713418919028129e+00 4.592783726896474e+00 9.279862961688630e+03 + 148440 9.668702039318871e-01 -5.965552349896316e+00 -5.994828264505294e+00 3.856386793442029e+00 4.688279961324133e+00 9.201178264107370e+03 + 148460 1.049285860258161e+00 -6.061430636816282e+00 -5.992923938795249e+00 3.387451809300959e+00 4.780827870714985e+00 9.195312208086449e+03 + 148480 9.810158197886344e-01 -5.930604072492649e+00 -6.011303725330099e+00 4.029513584565181e+00 4.566123689741626e+00 9.251745270312767e+03 + 148500 1.045617725301525e+00 -5.997937299287655e+00 -5.949185706359288e+00 3.737923410747851e+00 5.017862601627152e+00 9.061681319381381e+03 + 148520 1.040176947167913e+00 -5.959170632280092e+00 -5.993343400319155e+00 3.835905114729825e+00 4.639679792430761e+00 9.196634851712159e+03 + 148540 1.045185820414581e+00 -5.938375215071079e+00 -6.010311574148719e+00 4.009339399202730e+00 4.596269693263331e+00 9.248725235567699e+03 + 148560 1.033678281157743e+00 -5.900003060165462e+00 -6.027050101342713e+00 4.223310966207553e+00 4.493787195301693e+00 9.300271513396028e+03 + 148580 1.097623023198674e+00 -5.978423912949175e+00 -5.996017957787000e+00 3.843967858206426e+00 4.742940130077997e+00 9.204821184668708e+03 + 148600 1.039978320760284e+00 -5.883278883874817e+00 -6.008621055668701e+00 4.337510300638531e+00 4.617776153559651e+00 9.243518549319018e+03 + 148620 1.054520060206707e+00 -5.902400618177001e+00 -6.037798217225731e+00 4.232435696301248e+00 4.454961729852702e+00 9.333419185118173e+03 + 148640 1.115851253827198e+00 -6.000320419253126e+00 -5.981912487827808e+00 3.729022284092280e+00 4.834723474954638e+00 9.161610597513662e+03 + 148660 1.028294169045532e+00 -5.892113103142711e+00 -6.043798910559989e+00 4.261194757664579e+00 4.390191378171738e+00 9.351971302715123e+03 + 148680 1.063687371177248e+00 -5.995280690933463e+00 -6.019100285918626e+00 3.731581511620093e+00 4.594805711144875e+00 9.275750424963348e+03 + 148700 1.072823550576143e+00 -6.087409642851145e+00 -5.946784701706004e+00 3.272802833314489e+00 5.080293007009194e+00 9.054389706902370e+03 + 148720 9.674030203615400e-01 -6.000648003358686e+00 -6.002137259285471e+00 3.661284322009833e+00 4.652732784016623e+00 9.223600354090438e+03 + 148740 9.596961167806284e-01 -6.033572019499799e+00 -6.009646072639419e+00 3.471912143543500e+00 4.609298632944110e+00 9.246694254694086e+03 + 148760 9.735577732677104e-01 -6.082877810935974e+00 -5.966801437354873e+00 3.266246124213491e+00 4.932774624076936e+00 9.115409807316104e+03 + 148780 9.114042096614414e-01 -6.007037815285586e+00 -5.988352337469872e+00 3.647955809972905e+00 4.755250715159081e+00 9.181297375522645e+03 + 148800 9.653249093118530e-01 -6.092863021163510e+00 -5.969005493623625e+00 3.186354777918500e+00 4.897563867942967e+00 9.122157302574069e+03 + 148820 9.360867831092657e-01 -6.048240659754943e+00 -6.022701146303866e+00 3.459523449847112e+00 4.606175288310125e+00 9.286881512180533e+03 + 148840 9.296835894333775e-01 -6.034656820689941e+00 -6.000666213089888e+00 3.501926787832102e+00 4.697106116701136e+00 9.219123010809752e+03 + 148860 9.387286991731654e-01 -6.038641610248070e+00 -6.021643393211842e+00 3.477435800240559e+00 4.575042192928167e+00 9.283617805687640e+03 + 148880 9.371735946827094e-01 -6.022089092689532e+00 -5.958880906174485e+00 3.634588780896290e+00 4.997539969300945e+00 9.091244228871992e+03 + 148900 9.628851934134424e-01 -6.038586799431149e+00 -5.974211392858101e+00 3.457684782422162e+00 4.827338329026575e+00 9.138011684075482e+03 + 148920 9.671657612421298e-01 -6.016729941885223e+00 -5.967266101290315e+00 3.572049339900338e+00 4.856078367100891e+00 9.116821589051793e+03 + 148940 9.910974443422421e-01 -6.018594582422983e+00 -5.978354903783978e+00 3.611518750405180e+00 4.842581212220493e+00 9.150710678172176e+03 + 148960 9.965543575983603e-01 -5.994412651333611e+00 -5.980848897073262e+00 3.690366951600623e+00 4.768252127547738e+00 9.158346971285351e+03 + 148980 9.911613949063609e-01 -5.957504842392112e+00 -5.977423252501223e+00 3.955328204423023e+00 4.840953611212499e+00 9.147840854367216e+03 + 149000 1.096188195311424e+00 -6.084687879232021e+00 -5.961800512235048e+00 3.204122333306647e+00 4.909760611361849e+00 9.100178088891196e+03 + 149020 1.106617647704829e+00 -6.076046103448572e+00 -5.992093027790265e+00 3.298630519753476e+00 4.780702071879949e+00 9.192805353652851e+03 + 149040 1.012147902498857e+00 -5.920939655720176e+00 -6.025646712943272e+00 4.099094169359862e+00 4.497850043420100e+00 9.295958765515763e+03 + 149060 1.024953533835675e+00 -5.931014902560691e+00 -6.021250537233001e+00 4.054177098243014e+00 4.536030120035274e+00 9.282410120670780e+03 + 149080 1.040362845918087e+00 -5.949395587618832e+00 -6.023247022340305e+00 3.994354679890840e+00 4.570288313247550e+00 9.288523237282736e+03 + 149100 1.017231410193722e+00 -5.915520430266268e+00 -6.030867027202559e+00 4.150416863362155e+00 4.488078853925786e+00 9.312034258455731e+03 + 149120 1.048133035371628e+00 -5.967450375527211e+00 -6.008666551842436e+00 3.823593595809303e+00 4.586923933224607e+00 9.243681816153889e+03 + 149140 1.042882584617541e+00 -5.971285644936812e+00 -5.981912148591155e+00 3.865547246533051e+00 4.804528218103691e+00 9.161583131570294e+03 + 149160 1.020316611151886e+00 -5.952314756652462e+00 -6.067826497433265e+00 3.916980056624818e+00 4.253693765677328e+00 9.426405182410697e+03 + 149180 1.059858456080144e+00 -6.032343747637514e+00 -6.028270894690387e+00 3.503541250690763e+00 4.526928202585121e+00 9.304057576906105e+03 + 149200 1.059593940880772e+00 -6.063905955611578e+00 -6.002797552033588e+00 3.382443527553797e+00 4.733337437393505e+00 9.225648126764341e+03 + 149220 1.021115452884911e+00 -6.045166922671984e+00 -6.003396158997912e+00 3.483486739646831e+00 4.723340928668140e+00 9.227481572258159e+03 + 149240 1.018458318987525e+00 -6.084758680091620e+00 -5.992817407331193e+00 3.282781016533777e+00 4.810722032590128e+00 9.195015841856368e+03 + 149260 9.227360996230455e-01 -5.981606225385570e+00 -6.016331166048795e+00 3.851471389287807e+00 4.652075406332364e+00 9.267236949185159e+03 + 149280 9.215886030002320e-01 -6.008380907595485e+00 -5.973456894336954e+00 3.642970651825597e+00 4.843509740429663e+00 9.135757775263357e+03 + 149300 1.018622970143336e+00 -6.167002374564963e+00 -5.974561866224058e+00 2.791285811119166e+00 4.896308990085062e+00 9.139140983699554e+03 + 149320 9.528019492473957e-01 -6.076233856804047e+00 -6.032527009528703e+00 3.268460436957420e+00 4.519431917625200e+00 9.317181210000415e+03 + 149340 9.468190235283297e-01 -6.070362788540357e+00 -6.023491164542353e+00 3.372791493947429e+00 4.641935612304337e+00 9.289292021585863e+03 + 149360 9.849219178056967e-01 -6.124710046372337e+00 -6.003413497673040e+00 3.008609749437810e+00 4.705113302649426e+00 9.227543632783560e+03 + 149380 9.373843069248727e-01 -6.048480039846679e+00 -6.022449230104545e+00 3.459500720473126e+00 4.608973658267250e+00 9.286092423586151e+03 + 149400 9.824083115556387e-01 -6.105904662879393e+00 -5.994663711215633e+00 3.130084146533054e+00 4.768846905467996e+00 9.200680694868573e+03 + 149420 9.634066652983554e-01 -6.065115966679685e+00 -6.014598609743746e+00 3.335275550440093e+00 4.625354031501976e+00 9.261928449734736e+03 + 149440 9.283876703378153e-01 -5.999043126881118e+00 -6.028197630478475e+00 3.662927835490395e+00 4.495518164189525e+00 9.303801796941987e+03 + 149460 9.736813109845882e-01 -6.050645234161428e+00 -5.988583294494513e+00 3.448146742840820e+00 4.804516004462376e+00 9.182042923562312e+03 + 149480 9.957145815454619e-01 -6.067043598743706e+00 -6.002426979277081e+00 3.279516659550906e+00 4.650555287917816e+00 9.224501519608206e+03 + 149500 9.796832656481813e-01 -6.027584651381940e+00 -5.988418425978116e+00 3.590955053132103e+00 4.815853580354656e+00 9.181524737303094e+03 + 149520 9.344002661537461e-01 -5.943219959809978e+00 -6.061694037735867e+00 3.942420695015516e+00 4.262124205760756e+00 9.407392638792064e+03 + 149540 1.009045240486583e+00 -6.036924696231344e+00 -6.006785802957721e+00 3.522086190476694e+00 4.695148379632499e+00 9.237886069432136e+03 + 149560 9.340532261769188e-01 -5.910736129731853e+00 -6.029749957909614e+00 4.131380954067493e+00 4.447985135340402e+00 9.308612334763460e+03 + 149580 1.018208148959573e+00 -6.021231933840252e+00 -5.996629543986348e+00 3.578944302635157e+00 4.720215032383799e+00 9.206708468871504e+03 + 149600 1.017792388228405e+00 -6.007337296140144e+00 -6.024663375868839e+00 3.646080524062210e+00 4.546591493057873e+00 9.292915783282600e+03 + 149620 1.044760954073430e+00 -6.037833125943477e+00 -6.011765151249055e+00 3.443446545579238e+00 4.593132890280660e+00 9.253215387966931e+03 + 149640 1.002929192699069e+00 -5.970293719647144e+00 -5.979647420260521e+00 3.863459392518133e+00 4.809748996115633e+00 9.154675739358778e+03 + 149660 9.839124563199826e-01 -5.937109767536231e+00 -5.955278213404253e+00 4.021054214762629e+00 4.916728187030530e+00 9.080256273685625e+03 + 149680 1.013783392358900e+00 -5.975080015888973e+00 -5.974069196723041e+00 3.821546661396524e+00 4.827350941471061e+00 9.137618100331541e+03 + 149700 9.708893972847361e-01 -5.904220188477254e+00 -6.033189294726482e+00 4.224988243853148e+00 4.484427677865386e+00 9.319218144336277e+03 + 149720 1.015390738107077e+00 -5.967166511206442e+00 -6.059709888637153e+00 3.841779269211397e+00 4.310380874962881e+00 9.401262335581490e+03 + 149740 1.021953421127690e+00 -5.977311468980105e+00 -6.033163730482904e+00 3.791413926772328e+00 4.470701598113719e+00 9.319154424346669e+03 + 149760 9.870737393122601e-01 -5.931671866181235e+00 -6.007864022540730e+00 4.035047531805528e+00 4.597540379291216e+00 9.241211028508807e+03 + 149780 1.014859726900752e+00 -5.982232950205913e+00 -5.994618423454178e+00 3.766366341800704e+00 4.695247037763380e+00 9.200538762478012e+03 + 149800 9.747806111225863e-01 -5.937804101835932e+00 -6.032726317088526e+00 3.937322836883411e+00 4.392264787737678e+00 9.317797872616869e+03 + 149820 9.662765851986340e-01 -5.952288627258438e+00 -6.024821681919087e+00 3.975776386274512e+00 4.559280361959135e+00 9.293400347746676e+03 + 149840 8.632469379255969e-01 -5.842964531120230e+00 -6.049665733675299e+00 4.502225004248849e+00 4.315314712269920e+00 9.370117745622576e+03 + 149860 9.875290521982237e-01 -6.078115556610828e+00 -5.980792188974798e+00 3.264481283789447e+00 4.823327121497998e+00 9.158196109320717e+03 + 149880 9.225497323211401e-01 -6.031228393563124e+00 -5.997756575143518e+00 3.572717016935457e+00 4.764917378047997e+00 9.210164152427380e+03 + 149900 9.316963760499051e-01 -6.082020848520450e+00 -6.012003727442896e+00 3.258238607225748e+00 4.660287751567532e+00 9.253934711503098e+03 + 149920 9.613321699146622e-01 -6.150838607426984e+00 -5.980545411690557e+00 2.885088108375474e+00 4.862937991080913e+00 9.157437264502747e+03 + 149940 9.892168127309307e-01 -6.206042995140859e+00 -5.987352742249969e+00 2.557410013226939e+00 4.813163287533692e+00 9.178292404109716e+03 + 149960 8.828202938057288e-01 -6.053479707199010e+00 -6.000047822407321e+00 3.416920862824926e+00 4.723735013856252e+00 9.217227322888964e+03 + 149980 9.387988409005733e-01 -6.133439438764023e+00 -5.982531475860911e+00 2.965811876610625e+00 4.832348752532077e+00 9.163522137512206e+03 + 150000 8.773533104870720e-01 -6.029848249464694e+00 -6.018857162379883e+00 3.524991508146165e+00 4.588104031052383e+00 9.275034662099568e+03 + 150020 9.289321335003504e-01 -6.084334420390995e+00 -5.991313613143171e+00 3.266793787659894e+00 4.800933657800299e+00 9.190410336577786e+03 + 150040 8.419763074105849e-01 -5.926324404908343e+00 -6.043969876362475e+00 4.065325314821750e+00 4.389786812154260e+00 9.352537226507156e+03 + 150060 9.561185106377023e-01 -6.061479005603272e+00 -6.013462996915885e+00 3.297772323287714e+00 4.573487675624022e+00 9.258431549530644e+03 + 150080 9.932488182492362e-01 -6.080801924718049e+00 -5.985687789738340e+00 3.236740285710431e+00 4.782900367628740e+00 9.173170518501653e+03 + 150100 9.598825592664251e-01 -5.997764405659390e+00 -5.998030642645632e+00 3.715606391759910e+00 4.714077617784867e+00 9.211008826165940e+03 + 150120 9.942292106453476e-01 -6.020674409324942e+00 -5.977343307035691e+00 3.593232820249548e+00 4.842046715060831e+00 9.147625648534042e+03 + 150140 9.607506765887810e-01 -5.948383647249267e+00 -5.972664047200150e+00 3.996085399918841e+00 4.856663586021127e+00 9.133304005552283e+03 + 150160 1.019333985721495e+00 -6.015137062101235e+00 -5.986104907092463e+00 3.582513100514222e+00 4.749220227286053e+00 9.174442777719923e+03 + 150180 9.927637948995944e-01 -5.960512738898636e+00 -5.991109367967271e+00 3.895148252771027e+00 4.719457673845884e+00 9.189785176742227e+03 + 150200 1.023511764524766e+00 -5.993816716226081e+00 -6.004460329818900e+00 3.734071992067279e+00 4.672954715723431e+00 9.230715265606261e+03 + 150220 1.060198046434023e+00 -6.038724989466267e+00 -6.008158223925647e+00 3.486915535642436e+00 4.662434633568359e+00 9.242103816205254e+03 + 150240 9.848638118726182e-01 -5.921904859953719e+00 -6.024118511054717e+00 4.072288474255436e+00 4.485361872122119e+00 9.291237899293639e+03 + 150260 1.028133659895182e+00 -5.983732832074012e+00 -5.999660091420660e+00 3.798978829378284e+00 4.707522041474413e+00 9.216016252697727e+03 + 150280 1.021456766331944e+00 -5.973563808355188e+00 -6.038168447756642e+00 3.836466134034373e+00 4.465496297055584e+00 9.334589666152433e+03 + 150300 9.915445232394130e-01 -5.932077797195295e+00 -6.049606584171595e+00 4.049183194623947e+00 4.374314712285025e+00 9.369976349495757e+03 + 150320 1.039461328091913e+00 -6.011206751955931e+00 -6.023905529973336e+00 3.658510340871607e+00 4.585591992366117e+00 9.290581042734677e+03 + 150340 9.746454285653234e-01 -5.925893286041009e+00 -6.035330107825645e+00 4.061980876868432e+00 4.433577710887608e+00 9.325812071087876e+03 + 150360 1.056174956252247e+00 -6.062340574563990e+00 -5.983980631667654e+00 3.353396750310526e+00 4.803351668583262e+00 9.167924468030569e+03 + 150380 9.527306757765671e-01 -5.927335389854666e+00 -5.960662628471865e+00 4.116376200448213e+00 4.925006038934749e+00 9.096673503921229e+03 + 150400 9.973850333784239e-01 -6.012180496926310e+00 -5.979766266652777e+00 3.579110940666666e+00 4.765238466983215e+00 9.155035590494108e+03 + 150420 9.459713632607548e-01 -5.957843061750874e+00 -6.018729734253497e+00 3.967934027123067e+00 4.618313331430891e+00 9.274632666153362e+03 + 150440 9.619378058965578e-01 -6.008876452242495e+00 -6.003036572622412e+00 3.628535754190940e+00 4.662069246687912e+00 9.226372963290802e+03 + 150460 9.677870245435928e-01 -6.051114696796739e+00 -6.012999008659961e+00 3.408255600757694e+00 4.627121780422755e+00 9.256989681637668e+03 + 150480 9.415356369057095e-01 -6.048267221669925e+00 -5.984904618868681e+00 3.424790597269871e+00 4.788628467885710e+00 9.170777973731023e+03 + 150500 9.374038095278562e-01 -6.075945083395894e+00 -5.991402903085043e+00 3.306309627671041e+00 4.791763909876067e+00 9.190673462104967e+03 + 150520 9.539955340314616e-01 -6.129605095403642e+00 -5.991447057325193e+00 3.023550935559805e+00 4.816875770093553e+00 9.190798213987859e+03 + 150540 8.940313886623629e-01 -6.063995128791780e+00 -5.962383696433268e+00 3.327637938828806e+00 4.911106507749720e+00 9.101946953438424e+03 + 150560 9.084140310803310e-01 -6.098125327512221e+00 -5.989685571742864e+00 3.159547806574701e+00 4.782225665200318e+00 9.185423203669785e+03 + 150580 8.878367627652330e-01 -6.071509962499022e+00 -6.013876460590240e+00 3.253182886485816e+00 4.584123373201636e+00 9.259710195205791e+03 + 150600 9.087060588340793e-01 -6.096770947525507e+00 -5.983170818955180e+00 3.182483382036725e+00 4.834792899850623e+00 9.165474729660546e+03 + 150620 9.234718489644897e-01 -6.102986914784077e+00 -6.003122099909126e+00 3.106348813433913e+00 4.679788034476042e+00 9.226632468606695e+03 + 150640 8.688467744595743e-01 -5.991935564270508e+00 -6.008745540012717e+00 3.702137232971948e+00 4.605611750924849e+00 9.243923061842683e+03 + 150660 8.832693643510025e-01 -5.966637009372232e+00 -6.020638689331130e+00 3.911733836567312e+00 4.601647833510358e+00 9.280528247987715e+03 + 150680 1.073117110661551e+00 -6.188014779940824e+00 -6.016806323937202e+00 2.665629303117458e+00 4.648734751913192e+00 9.268735726030436e+03 + 150700 9.816310940494757e-01 -6.003881294393033e+00 -6.042912153292324e+00 3.638919496792345e+00 4.414798264986721e+00 9.349261410826904e+03 + 150720 9.581149634529368e-01 -5.937825560560106e+00 -6.022934882044843e+00 4.092872249295437e+00 4.604161354705145e+00 9.287602122759416e+03 + 150740 1.095273691591849e+00 -6.123179355354659e+00 -5.982342817150593e+00 3.052832464632560e+00 4.861537661384158e+00 9.162918999138285e+03 + 150760 9.339548604721137e-01 -5.872339427512746e+00 -6.012153510854307e+00 4.373519479442733e+00 4.570685376736022e+00 9.254389755215028e+03 + 150780 1.021718467060454e+00 -5.992846371446692e+00 -6.008531041303730e+00 3.750129816798739e+00 4.660066015284810e+00 9.243262215669227e+03 + 150800 1.020821067758811e+00 -5.986064685071893e+00 -6.053197066832262e+00 3.704147778049007e+00 4.318663253278464e+00 9.381074741867240e+03 + 150820 9.692671086257949e-01 -5.908974282948363e+00 -6.014958324294692e+00 4.177365806799305e+00 4.568789040411296e+00 9.263018660193466e+03 + 150840 1.034022245569062e+00 -6.005436407859200e+00 -5.997166741905411e+00 3.725443191545096e+00 4.772928893178428e+00 9.208339793878968e+03 + 150860 1.009576847856824e+00 -5.969473489627489e+00 -5.987356756760285e+00 3.902160053696462e+00 4.799471566393300e+00 9.178273407156787e+03 + 150880 1.082558511121473e+00 -6.079592779551439e+00 -5.970434599788804e+00 3.329639284681543e+00 4.956442445052321e+00 9.126525325461302e+03 + 150900 1.013234181444743e+00 -5.982688851436196e+00 -6.003135626790179e+00 3.761875104075942e+00 4.644466555865109e+00 9.226668203241579e+03 + 150920 9.783288508787957e-01 -5.938784116057776e+00 -6.039999146979610e+00 3.991545663245798e+00 4.410353292717215e+00 9.340232821511836e+03 + 150940 1.056281567220214e+00 -6.064461777282776e+00 -6.010311807607811e+00 3.372235219005565e+00 4.683172724559939e+00 9.248754355026709e+03 + 150960 9.797588514600295e-01 -5.964911030375053e+00 -6.009964269721258e+00 3.907563673592855e+00 4.648861001300691e+00 9.247655626710870e+03 + 150980 1.033725984597089e+00 -6.061710552635518e+00 -5.948158634205329e+00 3.443476119663019e+00 5.095508807391748e+00 9.058570174488996e+03 + 151000 9.804216615056182e-01 -6.000248376998947e+00 -5.974583104654544e+00 3.715573966028643e+00 4.862947931518267e+00 9.139179196906896e+03 + 151020 9.860704884418690e-01 -6.028116232507712e+00 -5.933167968001682e+00 3.590944317569471e+00 5.136151945559536e+00 9.013006785218739e+03 + 151040 9.559084821690419e-01 -5.999531857991830e+00 -5.931141125532753e+00 3.694811142546817e+00 5.087521311758477e+00 9.006841471567232e+03 + 151060 9.539305224329071e-01 -6.007545895623976e+00 -5.965250938625566e+00 3.633102634693068e+00 4.875966822901384e+00 9.110657819587914e+03 + 151080 9.856274609330224e-01 -6.063794463166113e+00 -5.978345986879818e+00 3.299688405741642e+00 4.790346779686518e+00 9.150667520224411e+03 + 151100 9.303909834606774e-01 -5.988312093219127e+00 -5.967726812648809e+00 3.737107574142533e+00 4.855311440739169e+00 9.118248977836540e+03 + 151120 9.616874039440702e-01 -6.036852677738136e+00 -5.988462573874281e+00 3.449601032436915e+00 4.727464497167547e+00 9.181652998427980e+03 + 151140 9.785067504417249e-01 -6.060632728667542e+00 -5.997958842306435e+00 3.331100590556848e+00 4.690983744794894e+00 9.210804865262598e+03 + 151160 9.264877239537771e-01 -5.978701661913051e+00 -6.009919647295771e+00 3.814672373322037e+00 4.635413870286833e+00 9.247517258799780e+03 + 151180 9.577765071995964e-01 -6.014906354921859e+00 -5.982977370738742e+00 3.562549375195529e+00 4.745890543369319e+00 9.164839641366083e+03 + 151200 9.521994086116360e-01 -5.986769416941264e+00 -5.971148887319202e+00 3.747589569104230e+00 4.837285067463259e+00 9.128683767482315e+03 + 151220 9.740138448061736e-01 -5.988744227627172e+00 -5.974614353503411e+00 3.737957425331325e+00 4.819093349140913e+00 9.139274580429214e+03 + 151240 1.005925658295044e+00 -5.997956578600248e+00 -5.984814302557895e+00 3.681253644568615e+00 4.756718627364448e+00 9.170504772255656e+03 + 151260 1.009872827131000e+00 -5.962449973136058e+00 -6.037080873575629e+00 3.868748051212484e+00 4.440205871793952e+00 9.331212858126033e+03 + 151280 1.073244167001375e+00 -6.020876327872808e+00 -5.990865063168961e+00 3.565074690439205e+00 4.737404016596900e+00 9.189041829501741e+03 + 151300 1.039692089841699e+00 -5.943681822961341e+00 -6.015167847610062e+00 3.985004281949398e+00 4.574520465989876e+00 9.263667585855555e+03 + 151320 1.023731823154914e+00 -5.900321409915273e+00 -6.010119120881022e+00 4.234149556101451e+00 4.603674108595265e+00 9.248128272823189e+03 + 151340 1.072018850773465e+00 -5.958925288679311e+00 -6.014028277468061e+00 3.885131155078775e+00 4.568721266293818e+00 9.260158023337488e+03 + 151360 1.008015682531468e+00 -5.858973563515301e+00 -6.071577588533894e+00 4.426560381382772e+00 4.205755169359468e+00 9.438038268555507e+03 + 151380 1.022390159305904e+00 -5.882793648990144e+00 -6.016734435561163e+00 4.279296325563888e+00 4.510187601803366e+00 9.268450691768705e+03 + 151400 1.008224343271581e+00 -5.868837290555525e+00 -6.014116079064953e+00 4.479966479818367e+00 4.645753194377371e+00 9.260399609190876e+03 + 151420 1.054916404981742e+00 -5.950528044724011e+00 -6.028924041429839e+00 3.943063561061342e+00 4.492901616235194e+00 9.306042393612008e+03 + 151440 1.063884087622961e+00 -5.985547566512386e+00 -5.959838303523109e+00 3.856615285314353e+00 5.004241851894369e+00 9.094150327431711e+03 + 151460 9.681430709057014e-01 -5.870435384758603e+00 -5.983135607512210e+00 4.468469972691453e+00 4.821327853337135e+00 9.165309804379149e+03 + 151480 1.047060894687514e+00 -6.016467238812702e+00 -5.984922287915309e+00 3.626050491523698e+00 4.807186481141898e+00 9.170794708639874e+03 + 151500 1.030223143782326e+00 -6.026553885446074e+00 -5.996529269243444e+00 3.523172165716107e+00 4.695578158245949e+00 9.206403431760835e+03 + 151520 9.630495693371202e-01 -5.963115532846690e+00 -5.979854033688142e+00 3.894607031885916e+00 4.798491969779674e+00 9.155274120999275e+03 + 151540 9.576202327337099e-01 -5.983457745797613e+00 -6.009062275915690e+00 3.778571855733494e+00 4.631546681507258e+00 9.244876436539596e+03 + 151560 9.918334627799483e-01 -6.057013837531033e+00 -6.040377649428798e+00 3.375238969389359e+00 4.470766535914184e+00 9.341422868928641e+03 + 151580 9.303592964179678e-01 -5.987642258950951e+00 -6.027414253685720e+00 3.743458326258955e+00 4.515081377795620e+00 9.301392859575204e+03 + 151600 9.370606507245728e-01 -6.009274790109130e+00 -6.001034139615810e+00 3.664610918004958e+00 4.711930008374140e+00 9.220196731161759e+03 + 151620 1.005923512469055e+00 -6.114915451633760e+00 -5.978337710521302e+00 3.072512690482978e+00 4.856763215287841e+00 9.150670938959316e+03 + 151640 9.815152394079441e-01 -6.078282075657696e+00 -5.982590612192332e+00 3.265955368660587e+00 4.815430560084817e+00 9.163703026791452e+03 + 151660 8.853520877753709e-01 -5.931074351547274e+00 -6.020446008651648e+00 4.011626723605684e+00 4.498440838293128e+00 9.279906566311180e+03 + 151680 9.715879526308547e-01 -6.051698666551225e+00 -5.989575680231240e+00 3.390841335697622e+00 4.747561136648043e+00 9.185082385204074e+03 + 151700 9.712433531137389e-01 -6.042563489753583e+00 -6.021119525060909e+00 3.429328470242360e+00 4.552463033950504e+00 9.281992488378733e+03 + 151720 1.016535527391153e+00 -6.101649794882733e+00 -5.939755981345416e+00 3.195840580937303e+00 5.125459911255252e+00 9.033040642703965e+03 + 151740 9.575321000972211e-01 -6.003072399301122e+00 -5.985249025303032e+00 3.725378238613927e+00 4.827722810269175e+00 9.171691277167934e+03 + 151760 9.828078329456489e-01 -6.027124726835721e+00 -5.989025855677907e+00 3.576125221030973e+00 4.794894835000399e+00 9.183352838935720e+03 + 151780 1.044737469821037e+00 -6.104267121098460e+00 -5.979933082539068e+00 3.165414818564888e+00 4.879360108603205e+00 9.155536543719123e+03 + 151800 8.988750397840366e-01 -5.873125620899970e+00 -6.048185763519117e+00 4.329029257937939e+00 4.323806828549286e+00 9.365566493268152e+03 + 151820 9.835669982383161e-01 -5.982931956056682e+00 -6.042160813560942e+00 3.744865139705506e+00 4.404763874279967e+00 9.346939662628591e+03 + 151840 9.259984763818158e-01 -5.882221189169056e+00 -6.052255620353236e+00 4.289697625386172e+00 4.313333608783422e+00 9.378156446838357e+03 + 151860 1.025361168244824e+00 -6.013965479128006e+00 -6.020564443816038e+00 3.587510879856367e+00 4.549618603431210e+00 9.280302652742863e+03 + 151880 9.773980035022569e-01 -5.928479918812855e+00 -6.056095266141819e+00 4.073032959149810e+00 4.340245886375719e+00 9.390038724862903e+03 + 151900 1.082295238372089e+00 -6.071618694785818e+00 -5.974526780414257e+00 3.330163865049538e+00 4.887680662296235e+00 9.139025076284908e+03 + 151920 9.876885591413468e-01 -5.919723258125781e+00 -6.034748874609768e+00 4.075165414161352e+00 4.414670524153672e+00 9.324036353579080e+03 + 151940 1.030334289617298e+00 -5.973147627230021e+00 -6.024078016763076e+00 3.856409754996914e+00 4.563959576845804e+00 9.291107507194823e+03 + 151960 1.027825328229850e+00 -5.963007691079177e+00 -5.989432027622762e+00 3.835847975073889e+00 4.684115345487760e+00 9.184628295104792e+03 + 151980 1.001330806029908e+00 -5.920390493987311e+00 -5.998205899943780e+00 4.127218474266050e+00 4.680390371368849e+00 9.211516707596003e+03 + 152000 1.015355174945420e+00 -5.935442463173820e+00 -6.018574967232228e+00 4.070013990449988e+00 4.592654287433191e+00 9.274136468945466e+03 + 152020 1.081813467003885e+00 -6.029654134816251e+00 -6.014161044426606e+00 3.582904013860103e+00 4.671867736425437e+00 9.260582671327156e+03 + 152040 1.037953212335328e+00 -5.966347477335904e+00 -6.068227140814313e+00 3.876492615983507e+00 4.291483822463510e+00 9.427671495981609e+03 + 152060 1.042095738753555e+00 -5.982448839982646e+00 -6.007450852070577e+00 3.864374405047108e+00 4.720808982589341e+00 9.239932494047756e+03 + 152080 9.794305189039816e-01 -5.907004524235669e+00 -6.064864602938482e+00 4.203234571511945e+00 4.296777570832160e+00 9.417250112761336e+03 + 152100 1.021663222204000e+00 -5.996188384581353e+00 -6.022247892302862e+00 3.715129803864927e+00 4.565492077832233e+00 9.285475485894372e+03 + 152120 1.040839163497207e+00 -6.057657478328912e+00 -5.992201775178495e+00 3.383848341599931e+00 4.759705118326952e+00 9.193106887712018e+03 + 152140 1.000044606562817e+00 -6.030115557757036e+00 -5.959433690630225e+00 3.533266957785017e+00 4.939133176810760e+00 9.092923403764800e+03 + 152160 1.000880381887789e+00 -6.061078376329917e+00 -5.979474777488071e+00 3.448413554342193e+00 4.916994047008182e+00 9.154128108972969e+03 + 152180 9.712034851487680e-01 -6.043096442946593e+00 -5.964222751135901e+00 3.484632520097508e+00 4.937537464138856e+00 9.107535460703170e+03 + 152200 9.603007374470393e-01 -6.047671836745419e+00 -6.018037217215871e+00 3.423771937966564e+00 4.593938509247780e+00 9.272506898698419e+03 + 152220 9.370524167970798e-01 -6.030132613358297e+00 -5.990923113446842e+00 3.542188524449824e+00 4.767335540591898e+00 9.189203137627159e+03 + 152240 9.573493798364791e-01 -6.070803929099231e+00 -5.973892412232568e+00 3.320533064730031e+00 4.877013991587175e+00 9.137068212266357e+03 + 152260 9.523481610136985e-01 -6.067791195923206e+00 -5.940324780667311e+00 3.354390512954885e+00 5.086322394718250e+00 9.034756108495465e+03 + 152280 9.864782413382789e-01 -6.114254925493487e+00 -5.963668304682616e+00 3.098353197140499e+00 4.963044877040778e+00 9.105850966736412e+03 + 152300 9.773774086369922e-01 -6.089980655721680e+00 -5.980387616921889e+00 3.193648976765872e+00 4.822949165022218e+00 9.156947497431504e+03 + 152320 9.638526411570453e-01 -6.054686643516379e+00 -5.985352489018551e+00 3.371195864385506e+00 4.769323308937769e+00 9.172157197012124e+03 + 152340 9.691528967902641e-01 -6.040173225975279e+00 -5.986353691991471e+00 3.514947792239268e+00 4.823987884920259e+00 9.175206221658502e+03 + 152360 9.517683795231072e-01 -5.984674527507289e+00 -6.018418021492047e+00 3.765053783063300e+00 4.571293418814005e+00 9.273689087891498e+03 + 152380 9.857517840710753e-01 -5.999221694654436e+00 -6.035649638689151e+00 3.707334529059264e+00 4.498159637205812e+00 9.326798169050402e+03 + 152400 1.001255379129849e+00 -5.985954080450023e+00 -6.008238613528203e+00 3.795173110160781e+00 4.667211872705525e+00 9.242353457162309e+03 + 152420 9.860917047333877e-01 -5.930586569656579e+00 -6.054137637511012e+00 4.056503288656022e+00 4.347053937569910e+00 9.383974774732240e+03 + 152440 1.032156979254577e+00 -5.971027983236694e+00 -6.040551664364838e+00 3.870190660632621e+00 4.470974924839932e+00 9.341969681515313e+03 + 152460 1.073539670283112e+00 -6.014191584292018e+00 -6.018606990869822e+00 3.575893597387395e+00 4.550539649535686e+00 9.274282598233784e+03 + 152480 1.054752937150641e+00 -5.977079714251149e+00 -6.019800055081217e+00 3.820609406665752e+00 4.575302598668124e+00 9.277915650403069e+03 + 152500 1.050908941153667e+00 -5.967370213672618e+00 -5.973419625162750e+00 3.894287879353919e+00 4.859551222434183e+00 9.135620558263652e+03 + 152520 1.040968540786013e+00 -5.952142971830734e+00 -5.985397296160410e+00 3.941451062015685e+00 4.750499585624630e+00 9.172283084684434e+03 + 152540 1.024954192566925e+00 -5.932061695158469e+00 -6.010159924716710e+00 4.070582330331903e+00 4.622130210546524e+00 9.248259987511783e+03 + 152560 1.000227293617728e+00 -5.903879301634188e+00 -5.988143609018227e+00 4.198183265009614e+00 4.714324572151034e+00 9.180676165150888e+03 + 152580 9.876115562695748e-01 -5.892488653800219e+00 -5.994490256660736e+00 4.297302494384609e+00 4.711593506062491e+00 9.200125840671782e+03 + 152600 1.050421020675910e+00 -5.992504666241546e+00 -6.001227347422077e+00 3.763059729100105e+00 4.712972743930944e+00 9.220809001874206e+03 + 152620 1.014137077361775e+00 -5.948552526012344e+00 -6.022269238419342e+00 3.935680891902844e+00 4.512388121637489e+00 9.285547483828446e+03 + 152640 1.038796383240976e+00 -5.998477772226391e+00 -5.984128389589671e+00 3.737564334207746e+00 4.819960709867577e+00 9.168385496856494e+03 + 152660 9.869735669607721e-01 -5.932330099292184e+00 -6.029945406730527e+00 4.018663345993422e+00 4.458141144762448e+00 9.309194091121035e+03 + 152680 1.076054835242791e+00 -6.076265663758591e+00 -5.979191543845008e+00 3.326423352114141e+00 4.883837970829434e+00 9.153279074664359e+03 + 152700 9.589069949509454e-01 -5.912875144108061e+00 -6.015134784045298e+00 4.170643893376228e+00 4.583453216228476e+00 9.263549947360205e+03 + 152720 1.031658781988468e+00 -6.030201029613650e+00 -5.961455495691435e+00 3.572475940481894e+00 4.967223434600250e+00 9.099091279720553e+03 + 152740 1.033031667619511e+00 -6.039153330224023e+00 -6.000275687273328e+00 3.488212606324611e+00 4.711454048443304e+00 9.217883627263644e+03 + 152760 1.027884831121753e+00 -6.037827738280135e+00 -6.000084514037581e+00 3.474343738288650e+00 4.691071172634471e+00 9.217312255425126e+03 + 152780 9.889380109994573e-01 -5.987470837862720e+00 -6.002745168895943e+00 3.835529903003995e+00 4.747822330516133e+00 9.225472722484183e+03 + 152800 1.010643070218887e+00 -6.024734020767707e+00 -5.986782909610247e+00 3.612596512364478e+00 4.830517665546090e+00 9.176527689605848e+03 + 152820 9.909876627105110e-01 -5.999103417308512e+00 -6.020282969814867e+00 3.726691003607867e+00 4.605074735591215e+00 9.279438843452494e+03 + 152840 9.978607157796281e-01 -6.012214985140097e+00 -6.042423078315131e+00 3.635059288998320e+00 4.461599743299965e+00 9.347739563020819e+03 + 152860 9.999904024660496e-01 -6.019463100492636e+00 -6.000105765427922e+00 3.613561405079170e+00 4.724714218558672e+00 9.217371689191854e+03 + 152880 1.062025779116619e+00 -6.114555987182127e+00 -5.942588921107941e+00 3.098327152688484e+00 5.085788657903930e+00 9.041653874961674e+03 + 152900 9.563341480605191e-01 -5.960031296457307e+00 -5.978097824924878e+00 3.879322927885796e+00 4.775582125638759e+00 9.149934243844067e+03 + 152920 1.010118912642507e+00 -6.040885604728603e+00 -5.959455780873364e+00 3.495178406419227e+00 4.962761056220525e+00 9.093006930743597e+03 + 152940 9.473131694530033e-01 -5.944459304689596e+00 -5.994519481691917e+00 3.972254797953565e+00 4.684801514818889e+00 9.200210748084279e+03 + 152960 9.724403850721123e-01 -5.976117957523456e+00 -5.993088436338878e+00 3.833197038086845e+00 4.735749922555583e+00 9.195815586457788e+03 + 152980 1.020214655939091e+00 -6.040510469965291e+00 -5.991510425412859e+00 3.494712661858521e+00 4.776078500410973e+00 9.190973529994893e+03 + 153000 1.036208513022704e+00 -6.056937139204011e+00 -5.994601585996293e+00 3.377847630647137e+00 4.735788023561543e+00 9.200483600194679e+03 + 153020 1.005432042325397e+00 -6.006495203555549e+00 -6.025888226195338e+00 3.674321010947142e+00 4.562963273888923e+00 9.296701486592521e+03 + 153040 9.817217009391129e-01 -5.967779873149858e+00 -6.014253373316273e+00 3.873173013236408e+00 4.606314983529946e+00 9.260857832832948e+03 + 153060 1.045134922274149e+00 -6.059491960373935e+00 -5.984660889396656e+00 3.378600758307940e+00 4.808292347930290e+00 9.170023461272589e+03 + 153080 9.841610733559720e-01 -5.966959864027751e+00 -6.003596130659754e+00 3.865635617035342e+00 4.655264504590440e+00 9.228068751207287e+03 + 153100 1.011588263011098e+00 -6.006068397340584e+00 -5.967856703393823e+00 3.692577999550670e+00 4.911995459433493e+00 9.118601747728426e+03 + 153120 9.604399087472681e-01 -5.927041570140578e+00 -5.985635321437433e+00 4.131904280248286e+00 4.795449892948038e+00 9.172974449607886e+03 + 153140 9.994921451563397e-01 -5.979711958107544e+00 -5.990970227480188e+00 3.840343666496598e+00 4.775696941547314e+00 9.189339246094725e+03 + 153160 1.029755151423092e+00 -6.021815022036906e+00 -5.995820378722913e+00 3.553619448685116e+00 4.702884713252115e+00 9.204232800835862e+03 + 153180 1.008785376123178e+00 -5.991840981860378e+00 -5.956557867341031e+00 3.785405078761113e+00 4.988006182375529e+00 9.084166578796248e+03 + 153200 1.041430776479210e+00 -6.039017311073954e+00 -5.963638529906178e+00 3.551778589051776e+00 4.984615215345831e+00 9.105754736938788e+03 + 153220 9.924809992564678e-01 -5.965576228342496e+00 -6.010099023519222e+00 3.866525460170758e+00 4.610868680385707e+00 9.248093385596889e+03 + 153240 1.015216797484810e+00 -6.000813891056766e+00 -6.032402071057449e+00 3.641627650854867e+00 4.460243433035890e+00 9.316783622143643e+03 + 153260 9.609661311767491e-01 -5.923328935146872e+00 -6.003859629932724e+00 4.091258963669116e+00 4.628839252124010e+00 9.228898793606686e+03 + 153280 9.985982762031365e-01 -5.979767379599269e+00 -5.968068223205698e+00 3.867209384477118e+00 4.934387750927606e+00 9.119274682159141e+03 + 153300 1.076389353080526e+00 -6.094945620634140e+00 -5.987908791676844e+00 3.182536106422396e+00 4.797158142190934e+00 9.179968284644363e+03 + 153320 1.076586328014824e+00 -6.098111688109872e+00 -6.001849397094427e+00 3.172290553706237e+00 4.725043525258318e+00 9.222720917101580e+03 + 153340 9.927762874214089e-01 -5.980430863763656e+00 -6.013274909638803e+00 3.798689575640260e+00 4.610093981625495e+00 9.257826510823688e+03 + 153360 9.666837952282679e-01 -5.947078158254597e+00 -6.053402041733025e+00 3.966868506110016e+00 4.356340313609090e+00 9.381691747846204e+03 + 153380 9.631482864655275e-01 -5.947853564266724e+00 -6.022645295484957e+00 3.963640933651954e+00 4.534175239013861e+00 9.286705747666676e+03 + 153400 1.014427286364264e+00 -6.030631527040961e+00 -5.987913353289965e+00 3.522319945377023e+00 4.767614309671264e+00 9.179996354096897e+03 + 153420 9.340685669065637e-01 -5.918877450680126e+00 -6.013654735471023e+00 4.178151095164059e+00 4.633925259157311e+00 9.258995885542385e+03 + 153440 9.807819646158761e-01 -5.994889201052865e+00 -6.006613017960170e+00 3.710395799249074e+00 4.643075828312526e+00 9.237370468470430e+03 + 153460 1.026967331185860e+00 -6.070680330810350e+00 -5.987085322481212e+00 3.298253515491341e+00 4.778268989602980e+00 9.177445844123384e+03 + 153480 9.677969546783882e-01 -5.991023306128984e+00 -5.993473002966376e+00 3.751593625792819e+00 4.737527087463149e+00 9.196992055833793e+03 + 153500 9.871493374031156e-01 -6.024056524104576e+00 -5.986895008598643e+00 3.507942208806591e+00 4.721329381567601e+00 9.176856466689585e+03 + 153520 9.702727420678284e-01 -6.001941064799108e+00 -6.034820081623560e+00 3.664247077421193e+00 4.475450674803780e+00 9.324249344276872e+03 + 153540 9.687201100009538e-01 -6.004497623840043e+00 -5.983248322200403e+00 3.693569097263695e+00 4.815585875597312e+00 9.165698651493896e+03 + 153560 9.992654165071334e-01 -6.051343745146426e+00 -5.985503810566636e+00 3.440851893111725e+00 4.818914986165829e+00 9.172601683972123e+03 + 153580 1.001998014771537e+00 -6.054325555450640e+00 -6.009941513150544e+00 3.405597904069605e+00 4.660457943365106e+00 9.247597319865172e+03 + 153600 1.017681271815443e+00 -6.074972841205356e+00 -6.029819018655059e+00 3.274796754086502e+00 4.534076990701765e+00 9.308816357637232e+03 + 153620 1.027068376580897e+00 -6.086031925675162e+00 -5.967108622423098e+00 3.250904949782994e+00 4.933780960378046e+00 9.116352526268784e+03 + 153640 8.939361035895502e-01 -5.882454171864631e+00 -6.014859312011348e+00 4.389415601306393e+00 4.629124796954725e+00 9.262678467596124e+03 + 153660 9.907433298025076e-01 -6.013233662370320e+00 -6.035688474983740e+00 3.590577962861967e+00 4.461638953964687e+00 9.326940786957550e+03 + 153680 1.042359016160419e+00 -6.073193504609386e+00 -6.001180652384355e+00 3.334431854609424e+00 4.747940796038418e+00 9.220687668959170e+03 + 153700 1.034432099643915e+00 -6.042959654120679e+00 -6.029269754972689e+00 3.447670782721925e+00 4.526280302134733e+00 9.307112097156491e+03 + 153720 9.958678929352623e-01 -5.967220771498281e+00 -6.039410366388752e+00 3.876232231522560e+00 4.461708406357767e+00 9.338428940522075e+03 + 153740 1.008517056134427e+00 -5.965187922445955e+00 -6.060040630083936e+00 3.810435309180531e+00 4.265776383514171e+00 9.402283783208028e+03 + 153760 1.043815029446842e+00 -6.001079914927503e+00 -5.983060602316204e+00 3.758321013439192e+00 4.861790694932884e+00 9.165100237605748e+03 + 153780 9.498920919175092e-01 -5.843615219129063e+00 -6.069665697403050e+00 4.564653760630598e+00 4.266636933182910e+00 9.432115198538932e+03 + 153800 1.005852839702275e+00 -5.908668778688988e+00 -6.054282265600472e+00 4.155890092642502e+00 4.319754917182490e+00 9.384439499258631e+03 + 153820 1.028246798778961e+00 -5.926216877816223e+00 -6.033372952217380e+00 4.082308480003612e+00 4.467001718443249e+00 9.319794573471352e+03 + 153840 1.025886740603077e+00 -5.914083976639142e+00 -6.007981334781197e+00 4.209450200392478e+00 4.670277039371580e+00 9.241550226461119e+03 + 153860 9.894342334898864e-01 -5.853395161000053e+00 -6.018075217400717e+00 4.460533263280372e+00 4.514914895271392e+00 9.272605456292864e+03 + 153880 1.127465615427448e+00 -6.053047570224118e+00 -5.980257029132934e+00 3.425732062957253e+00 4.843706614202662e+00 9.156551235197074e+03 + 153900 1.096919088407365e+00 -6.012599324172547e+00 -5.997880923353799e+00 3.551942436567516e+00 4.636457771733935e+00 9.210538052072059e+03 + 153920 9.882435364956793e-01 -5.866038972200365e+00 -6.005936315195900e+00 4.470730834510415e+00 4.667418641986191e+00 9.235213491884149e+03 + 153940 1.029085349332307e+00 -5.946354259705553e+00 -5.949899424364361e+00 4.007171148586128e+00 4.986814264502790e+00 9.063852285545894e+03 + 153960 1.033409350619930e+00 -5.978201126557262e+00 -6.009340836269215e+00 3.789224665529933e+00 4.610415633509397e+00 9.245736635034857e+03 + 153980 1.062015878463885e+00 -6.056680988853945e+00 -6.000009007008988e+00 3.412207446282366e+00 4.737626735996960e+00 9.217076134531166e+03 + 154000 9.850169099327796e-01 -5.986117350006833e+00 -5.964066225190210e+00 3.805561807409364e+00 4.932182778506947e+00 9.107071848958814e+03 + 154020 9.208124639216702e-01 -5.930248285089446e+00 -5.997595277963068e+00 4.082920295246728e+00 4.696203440252925e+00 9.209634894189563e+03 + 154040 1.033522218589729e+00 -6.129715851892761e+00 -5.943192782625213e+00 3.016908304185804e+00 5.087952632271747e+00 9.043494983844079e+03 + 154060 9.309458124750325e-01 -6.002353442289832e+00 -5.974814770685613e+00 3.666367537300787e+00 4.824498851247871e+00 9.139900860296308e+03 + 154080 8.953715010162460e-01 -5.962575758714157e+00 -6.013662404539176e+00 3.913159411574628e+00 4.619811985614479e+00 9.259020048645274e+03 + 154100 9.957073912636289e-01 -6.118429693550341e+00 -5.988174169299165e+00 3.037381800215148e+00 4.785329177442635e+00 9.180803866144041e+03 + 154120 9.236181725258490e-01 -6.014363419250780e+00 -5.975074678048314e+00 3.602718611637942e+00 4.828320643535556e+00 9.140704654691230e+03 + 154140 9.823999916203963e-01 -6.097750326226784e+00 -5.995249057304035e+00 3.134932898633576e+00 4.723511046808105e+00 9.202472906666395e+03 + 154160 9.545416457318852e-01 -6.047962878662474e+00 -5.988661586300505e+00 3.457093086139773e+00 4.797610283727529e+00 9.182274707426657e+03 + 154180 9.376256404251384e-01 -6.011287662291399e+00 -5.968627144741612e+00 3.667577807554429e+00 4.912541101019061e+00 9.120999084489109e+03 + 154200 9.680098037483712e-01 -6.039318911557925e+00 -5.978425826819963e+00 3.515274890640665e+00 4.864932406380452e+00 9.150937265750268e+03 + 154220 9.484879047953447e-01 -5.988345014581715e+00 -6.000981283962727e+00 3.790674352320091e+00 4.718114938077952e+00 9.220031871982181e+03 + 154240 9.851962632780802e-01 -6.018294357771572e+00 -6.028355379525861e+00 3.557410040533713e+00 4.499638096682498e+00 9.304298367230240e+03 + 154260 1.009904287776747e+00 -6.028991253710687e+00 -6.027145155732479e+00 3.473008756204188e+00 4.483609336477795e+00 9.300581916918969e+03 + 154280 9.884318625487580e-01 -5.976419358485089e+00 -5.998833675090060e+00 3.813394308229257e+00 4.684687833679228e+00 9.213438077471679e+03 + 154300 9.966507303851484e-01 -5.969835710530723e+00 -5.945619780365019e+00 3.946445736743306e+00 5.085497355157857e+00 9.050843290803143e+03 + 154320 1.045411286575373e+00 -6.023124724732781e+00 -5.972425895304296e+00 3.609341383297788e+00 4.900461907494648e+00 9.132592133776805e+03 + 154340 9.600104306204874e-01 -5.883502824949063e+00 -6.037108952065433e+00 4.227521018192524e+00 4.345490865818982e+00 9.331323862523430e+03 + 154360 9.904815469406838e-01 -5.919931052252003e+00 -6.008501679263492e+00 4.096643029514631e+00 4.588056782954425e+00 9.243127631502795e+03 + 154380 1.011092591668110e+00 -5.945551674134736e+00 -6.035494431798631e+00 3.963052435278960e+00 4.446587202176108e+00 9.326301620548053e+03 + 154400 1.076168602534045e+00 -6.042101977565962e+00 -6.007041347435274e+00 3.491882603491789e+00 4.693206167317183e+00 9.238672218895561e+03 + 154420 1.023521418216818e+00 -5.968766319896369e+00 -6.049450340094695e+00 3.815844102093414e+00 4.352543972302854e+00 9.369468040922817e+03 + 154440 9.850803793732000e-01 -5.918484044203551e+00 -6.016556988554722e+00 4.183109992499388e+00 4.619959969295878e+00 9.267919780473501e+03 + 154460 1.013464110457321e+00 -5.967244561159388e+00 -5.972436762110178e+00 3.834214339824589e+00 4.804399918474656e+00 9.132588200129274e+03 + 154480 9.854344890204552e-01 -5.930350229681058e+00 -5.995273535390399e+00 4.131547012812470e+00 4.758747344580347e+00 9.202497400818802e+03 + 154500 1.036863097085982e+00 -6.011441115965360e+00 -5.983261773150928e+00 3.602381551443851e+00 4.764191698623526e+00 9.165723568785384e+03 + 154520 9.779362402804955e-01 -5.930126075860749e+00 -6.032807737643213e+00 4.026546708741896e+00 4.436932716851183e+00 9.318019286577368e+03 + 154540 1.032682119472608e+00 -6.019472199091743e+00 -6.015796869341544e+00 3.577839950723495e+00 4.598944262904580e+00 9.265599302602101e+03 + 154560 1.026620619009612e+00 -6.021414888315377e+00 -6.003217206623992e+00 3.604197350445244e+00 4.708691254799315e+00 9.226918425291309e+03 + 154580 9.955114622976984e-01 -5.987943471828876e+00 -6.038177593392995e+00 3.702288730774058e+00 4.413836631047696e+00 9.334618834260411e+03 + 154600 9.983784742615271e-01 -6.006699871905430e+00 -5.998082582820693e+00 3.607187103244213e+00 4.656668910689946e+00 9.211162387084338e+03 + 154620 9.277398522389051e-01 -5.915655225127380e+00 -6.000998356749846e+00 4.177361614808113e+00 4.687308146224979e+00 9.220127020316984e+03 + 154640 9.976902624728630e-01 -6.031254139825228e+00 -6.016392843007117e+00 3.513314835479047e+00 4.598650701586886e+00 9.267451949429736e+03 + 154660 1.002072924916289e+00 -6.054123058910775e+00 -6.016118324779574e+00 3.432948746307167e+00 4.651177810902119e+00 9.266603357289143e+03 + 154680 9.052463081658328e-01 -5.928436839978667e+00 -5.991731256312098e+00 4.144452087467972e+00 4.781005754102138e+00 9.191679158587767e+03 + 154700 9.836142285432771e-01 -6.061643126997803e+00 -5.973731624842715e+00 3.348591555417971e+00 4.853393005053482e+00 9.136585659986598e+03 + 154720 9.558571038288898e-01 -6.037191057035389e+00 -5.952252517892616e+00 3.549908398091495e+00 5.037638634045745e+00 9.071035924478747e+03 + 154740 9.326428215842683e-01 -6.017230477689758e+00 -5.990207482945389e+00 3.573836397638369e+00 4.729006615255455e+00 9.187005285921465e+03 + 154760 9.162728006253601e-01 -6.006614065904072e+00 -5.993220777670850e+00 3.658623800255772e+00 4.735530133895589e+00 9.196225455271006e+03 + 154780 9.350149696642575e-01 -6.046072701938997e+00 -5.979448217524883e+00 3.468023710724606e+00 4.850591810336090e+00 9.154058019389595e+03 + 154800 9.268405584094190e-01 -6.042027380934860e+00 -6.005491372507690e+00 3.454350422477895e+00 4.664145836795735e+00 9.233925675698372e+03 + 154820 9.694715189699855e-01 -6.110297751209170e+00 -5.990082739433813e+00 3.079912780888509e+00 4.770205981715558e+00 9.186650497737703e+03 + 154840 9.998689168767654e-01 -6.156460367588832e+00 -5.949961234815596e+00 2.845952898872887e+00 5.031702874894327e+00 9.064098425884094e+03 + 154860 9.047270042939991e-01 -6.009457784445012e+00 -5.963748961855847e+00 3.689200181418669e+00 4.951667314143091e+00 9.106093414768147e+03 + 154880 9.946047571247092e-01 -6.127276727618858e+00 -5.961093779293643e+00 2.996496467746932e+00 4.950744673758457e+00 9.097996766705457e+03 + 154900 9.987500232156385e-01 -6.107743847641848e+00 -5.954459210426859e+00 3.133087147744911e+00 5.013271255354327e+00 9.077767377743947e+03 + 154920 9.654989694846415e-01 -6.023662242053303e+00 -5.988085295848905e+00 3.584408879036476e+00 4.788697209656757e+00 9.180500837603295e+03 + 154940 1.010196036167359e+00 -6.048735010720269e+00 -6.007446956461974e+00 3.413008851584563e+00 4.650091248441439e+00 9.239946911490269e+03 + 154960 1.025516162266148e+00 -6.034023849151300e+00 -5.984564200090635e+00 3.530183542662047e+00 4.814188501424345e+00 9.169712825881648e+03 + 154980 1.028943051807332e+00 -6.008904523226491e+00 -5.978369075874078e+00 3.642677344767157e+00 4.818016608809916e+00 9.150748762294750e+03 + 155000 1.068531046414956e+00 -6.040038824930837e+00 -5.991216600434181e+00 3.412490487969162e+00 4.692835256243784e+00 9.190110197221496e+03 + 155020 1.015500077072386e+00 -5.939733281955551e+00 -6.052202485497428e+00 4.016746243334056e+00 4.370930672043598e+00 9.377977468094614e+03 + 155040 1.045569355140310e+00 -5.968694314360831e+00 -6.045151840617866e+00 3.805153976530528e+00 4.366123028998683e+00 9.356176401571369e+03 + 155060 1.017639018821679e+00 -5.920355251261887e+00 -5.994402120802588e+00 4.181709692122473e+00 4.756521108503738e+00 9.199834207521906e+03 + 155080 1.051342552465032e+00 -5.966333456487130e+00 -5.955333586615662e+00 3.890964223546198e+00 4.954127178572526e+00 9.080435472193236e+03 + 155100 1.037169784823303e+00 -5.945060838629262e+00 -5.987687819410057e+00 3.973767205780981e+00 4.728996485633694e+00 9.179263534127667e+03 + 155120 1.047753504752014e+00 -5.963329431268913e+00 -5.988249112839913e+00 3.837907672060185e+00 4.694815004171245e+00 9.181008942401078e+03 + 155140 1.038567424095626e+00 -5.956479984282568e+00 -5.989075822632151e+00 3.938691236886254e+00 4.751520888893272e+00 9.183522442467065e+03 + 155160 1.010893281588425e+00 -5.927926312784498e+00 -6.014397293803966e+00 4.020304815615504e+00 4.523775061260653e+00 9.261275967922713e+03 + 155180 9.845625122481979e-01 -5.905604784903248e+00 -5.982643136642935e+00 4.196222112572303e+00 4.753855975236616e+00 9.163831519630194e+03 + 155200 1.022562284903701e+00 -5.983283394788669e+00 -5.982138508016332e+00 3.797919755859774e+00 4.804493872877184e+00 9.162280393728337e+03 + 155220 1.080825014778091e+00 -6.097488988907767e+00 -5.970092297504354e+00 3.217020572765442e+00 4.948552089378124e+00 9.125466178917895e+03 + 155240 9.982265063962322e-01 -6.012211645687749e+00 -5.976195345809986e+00 3.647157795690730e+00 4.853968963093244e+00 9.144095980638182e+03 + 155260 9.742772940006780e-01 -6.016402938810502e+00 -5.949628717446572e+00 3.635170645885501e+00 5.018598558234547e+00 9.063043055847753e+03 + 155280 9.927140818299192e-01 -6.082721234091675e+00 -5.955839454633339e+00 3.275041615623382e+00 5.003616428165064e+00 9.081954188784453e+03 + 155300 9.708245987880417e-01 -6.082009758702881e+00 -5.935043673837592e+00 3.219543567608949e+00 5.063445569833569e+00 9.018720990022528e+03 + 155320 9.036434938499552e-01 -6.004019967156908e+00 -5.932731475804996e+00 3.692870062945815e+00 5.102219612146877e+00 9.011691419010420e+03 + 155340 9.220322885025901e-01 -6.041026200204699e+00 -5.949547496564502e+00 3.487593875348994e+00 5.012878747934641e+00 9.062808341396287e+03 + 155360 9.770031865924084e-01 -6.125901249815149e+00 -5.976098799981226e+00 3.023287739588787e+00 4.883476588389364e+00 9.143821894178624e+03 + 155380 9.765211869193547e-01 -6.122973387064694e+00 -5.961202536664681e+00 2.968230446687989e+00 4.897143703643060e+00 9.098343291163768e+03 + 155400 9.508739394937327e-01 -6.076726857373187e+00 -5.982140108587106e+00 3.309440213715260e+00 4.852571962497002e+00 9.162285637093579e+03 + 155420 9.188608965579500e-01 -6.016822438179955e+00 -5.963859781833828e+00 3.593411356169995e+00 4.897531124854035e+00 9.106442554807449e+03 + 155440 9.399851637450807e-01 -6.030818354562782e+00 -5.983611106774690e+00 3.594253961247608e+00 4.865325283344818e+00 9.166778213970429e+03 + 155460 9.767129791627324e-01 -6.066759519942504e+00 -5.960899200614990e+00 3.337853163261945e+00 4.945719498672000e+00 9.097410208999203e+03 + 155480 9.930339452156947e-01 -6.074495401045570e+00 -5.979594707792964e+00 3.249553596180457e+00 4.794488062671736e+00 9.154524049920432e+03 + 155500 9.386861552995084e-01 -5.980033555291146e+00 -6.024552457026761e+00 3.786893047385143e+00 4.531258624341463e+00 9.292577031850578e+03 + 155520 9.618294888604474e-01 -6.003148294855549e+00 -5.994736908670213e+00 3.680503242193001e+00 4.728802723327007e+00 9.200910481483734e+03 + 155540 9.594608622871416e-01 -5.988643835503059e+00 -5.980632096235697e+00 3.748431817365637e+00 4.794436464051479e+00 9.157689797689365e+03 + 155560 1.011985746744903e+00 -6.055982081015592e+00 -5.975360658671930e+00 3.412205220698084e+00 4.875145903920181e+00 9.141574683423793e+03 + 155580 1.018457559706363e+00 -6.054726981401814e+00 -5.958777681713413e+00 3.474332959814173e+00 5.025288686731107e+00 9.090928343204509e+03 + 155600 1.032214489754560e+00 -6.064127482822865e+00 -5.978950741344148e+00 3.421736755902710e+00 4.910834786531650e+00 9.152545982535501e+03 + 155620 9.981574075858994e-01 -6.002828112638390e+00 -6.031004138430933e+00 3.648859971089819e+00 4.487068870763139e+00 9.312479360349844e+03 + 155640 1.023712461323239e+00 -6.032604682127521e+00 -5.995621924643923e+00 3.544283677256875e+00 4.756644393790916e+00 9.203598319455725e+03 + 155660 9.150557953216502e-01 -5.863260870301786e+00 -6.010254319466276e+00 4.446521153848115e+00 4.602462021582869e+00 9.248545203482465e+03 + 155680 9.960983790250389e-01 -5.971954111501005e+00 -5.981989243562015e+00 3.904521382402756e+00 4.846898101176774e+00 9.161814266083662e+03 + 155700 9.920682976255403e-01 -5.951194210392703e+00 -6.031560794853807e+00 3.917307268716260e+00 4.455829904051855e+00 9.314197962072281e+03 + 155720 1.058700879442675e+00 -6.039794071148918e+00 -6.011148102063370e+00 3.479749289558792e+00 4.644238876997401e+00 9.251319398136764e+03 + 155740 1.028957806105577e+00 -5.986817902538230e+00 -6.007859895586226e+00 3.736385613575957e+00 4.615559233256462e+00 9.241190942897203e+03 + 155760 1.001954198415120e+00 -5.939796338594197e+00 -6.038484200147251e+00 4.003776477384212e+00 4.437095504449355e+00 9.335537026826649e+03 + 155780 1.039539106927784e+00 -5.988831940265251e+00 -5.968598191857904e+00 3.773077784582736e+00 4.889263099100166e+00 9.120885536347174e+03 + 155800 1.004289878555189e+00 -5.930802681263253e+00 -5.981316737331247e+00 4.020448513403998e+00 4.730388986436663e+00 9.159771362492911e+03 + 155820 1.051622559695882e+00 -5.995179785784154e+00 -5.990932386099844e+00 3.767496178177647e+00 4.791885404447932e+00 9.189200209551938e+03 + 155840 1.024444363694612e+00 -5.951296525697587e+00 -5.963983507803741e+00 3.984150199107573e+00 4.911299584549898e+00 9.106792958140664e+03 + 155860 9.975601811825657e-01 -5.908576768605900e+00 -5.974786431119791e+00 4.231800365671537e+00 4.851614237604612e+00 9.139787441422292e+03 + 155880 1.029421430888017e+00 -5.952747854047482e+00 -5.962151059806348e+00 3.971767024167147e+00 4.917772361558350e+00 9.101220366413541e+03 + 155900 1.052048403910336e+00 -5.985430162583285e+00 -5.960789981971791e+00 3.825243678440243e+00 4.966731408567068e+00 9.097048928102413e+03 + 155920 1.072491516788644e+00 -6.018365432759399e+00 -5.992888367330734e+00 3.525391288826692e+00 4.671684541081218e+00 9.195240602772274e+03 + 155940 9.742308242433042e-01 -5.879750392044881e+00 -5.979920705296006e+00 4.344939737074037e+00 4.769746297080199e+00 9.155496283746284e+03 + 155960 1.050134873247860e+00 -6.001372285482092e+00 -6.037111322629559e+00 3.639837143821892e+00 4.434618061923014e+00 9.331323631070760e+03 + 155980 1.060082950449662e+00 -6.033459347575737e+00 -5.994304799976108e+00 3.534915551718116e+00 4.759747023181845e+00 9.199524471311188e+03 + 156000 9.860247076454690e-01 -5.946801982586318e+00 -5.999593391004373e+00 3.968982212168462e+00 4.665845775587940e+00 9.215801864085384e+03 + 156020 9.600097702475310e-01 -5.935309069311873e+00 -5.967078572387117e+00 4.073924123262767e+00 4.891498720290002e+00 9.116225470527686e+03 + 156040 9.617904380326701e-01 -5.962560392087448e+00 -5.987879675534487e+00 3.855199788973863e+00 4.709812545274513e+00 9.179838636580747e+03 + 156060 9.648839634361004e-01 -5.988190069099558e+00 -5.969284636762753e+00 3.724679002229918e+00 4.833236920314050e+00 9.123000408865673e+03 + 156080 9.556958714776603e-01 -5.992484015964607e+00 -5.998820329189599e+00 3.749365655884403e+00 4.712981564805196e+00 9.213432996836458e+03 + 156100 1.021531438916179e+00 -6.106025155693918e+00 -5.990986930705665e+00 3.115238425285698e+00 4.775805715276029e+00 9.189435512501246e+03 + 156120 1.022105554112232e+00 -6.122562434831845e+00 -5.978867261986667e+00 3.059353433251884e+00 4.884473352485029e+00 9.152311852050241e+03 + 156140 1.012808430733923e+00 -6.124376248845142e+00 -5.977675514976339e+00 3.036276430908325e+00 4.878654746648186e+00 9.148658281099310e+03 + 156160 9.437004235933862e-01 -6.034428586584344e+00 -5.947448155445353e+00 3.506476434212221e+00 5.005931529990523e+00 9.056433399159350e+03 + 156180 9.528631257315973e-01 -6.054168581156506e+00 -5.939336332943128e+00 3.405401632989215e+00 5.064786172463413e+00 9.031758346043873e+03 + 156200 9.582074274813688e-01 -6.061234245706294e+00 -5.991144182665312e+00 3.358400839609688e+00 4.760868827993214e+00 9.189887699264604e+03 + 156220 9.422677755565344e-01 -6.029098014208721e+00 -6.012228826077340e+00 3.537998446233988e+00 4.634863934982803e+00 9.254607929685388e+03 + 156240 9.646967619765076e-01 -6.047194459603581e+00 -5.996695497845927e+00 3.466600680002949e+00 4.756573533104477e+00 9.206919763887547e+03 + 156260 9.941131336325121e-01 -6.066616934613710e+00 -6.020545162361872e+00 3.348850860072736e+00 4.613402105926506e+00 9.280242486919804e+03 + 156280 9.870474903696963e-01 -6.024880894070576e+00 -5.989593377560182e+00 3.604499983439220e+00 4.807126363967433e+00 9.185133628278058e+03 + 156300 9.784625895818214e-01 -5.971358800345510e+00 -6.015831927678462e+00 3.817923963535615e+00 4.562552384195593e+00 9.265710261370699e+03 + 156320 1.069548166122868e+00 -6.059955768957600e+00 -6.004656798004405e+00 3.358928208421295e+00 4.676463457122637e+00 9.231360585162553e+03 + 156340 1.030225709110215e+00 -5.959757426608255e+00 -5.996438922707100e+00 3.935752223198967e+00 4.725121396156229e+00 9.206115600902014e+03 + 156360 1.102136953249768e+00 -6.033351300813127e+00 -5.993818147604701e+00 3.564275486030331e+00 4.791280969488799e+00 9.198072234006971e+03 + 156380 1.081893475012560e+00 -5.980834758586768e+00 -6.002155783003046e+00 3.777947142839296e+00 4.655518521223168e+00 9.223683689452017e+03 + 156400 9.979176079572988e-01 -5.845701720244660e+00 -6.036109289521680e+00 4.519878477878393e+00 4.426528749613624e+00 9.328215056825451e+03 + 156420 1.038277649537138e+00 -5.901366749245051e+00 -5.982685165061580e+00 4.212486416903213e+00 4.745543489300531e+00 9.163952255201797e+03 + 156440 1.000649228397848e+00 -5.846493096746441e+00 -6.015452041192910e+00 4.512194200421500e+00 4.542005795097722e+00 9.264507716910946e+03 + 156460 1.084644710618589e+00 -5.977505074596809e+00 -5.975926420079889e+00 3.793393417134634e+00 4.802458295666787e+00 9.143317999361618e+03 + 156480 1.032345104090961e+00 -5.912732478623116e+00 -6.045618174573405e+00 4.155123258382257e+00 4.392073028240714e+00 9.357606713102501e+03 + 156500 1.026017308670078e+00 -5.920846352348364e+00 -6.002751329401363e+00 4.193796559162895e+00 4.723485506170340e+00 9.225482266233119e+03 + 156520 1.034022675889937e+00 -5.952467355795323e+00 -5.979868915174400e+00 3.994486848463894e+00 4.837142854131629e+00 9.155347758676544e+03 + 156540 9.547969581844103e-01 -5.855128419545848e+00 -6.023726613700354e+00 4.459968532796190e+00 4.491851611474789e+00 9.290018300695543e+03 + 156560 1.076425738549095e+00 -6.055261637512548e+00 -5.971905163567992e+00 3.365941474299682e+00 4.844587247061981e+00 9.131007729993786e+03 + 156580 9.231864605071064e-01 -5.845867159647654e+00 -6.061157215696396e+00 4.504309393805437e+00 4.268080575945066e+00 9.405721682328412e+03 + 156600 1.074947448131709e+00 -6.087931181736392e+00 -5.970443080222298e+00 3.194035327761268e+00 4.868670187880152e+00 9.126547447052104e+03 + 156620 9.806425214161109e-01 -5.964787460399743e+00 -5.998565397814652e+00 3.914070766918258e+00 4.720112623162931e+00 9.212653302176705e+03 + 156640 1.007666738455863e+00 -6.018177786544795e+00 -5.991973736414108e+00 3.622066713477596e+00 4.772534424391656e+00 9.192421462017228e+03 + 156660 9.654597818281411e-01 -5.964561117966589e+00 -5.964292798881128e+00 3.921222351430070e+00 4.922763081141031e+00 9.107754879154478e+03 + 156680 9.633779811067518e-01 -5.964887459985927e+00 -6.020784744964363e+00 3.874416731314403e+00 4.553445870891327e+00 9.280973030867974e+03 + 156700 1.012840925889855e+00 -6.040482024975684e+00 -6.016560779520383e+00 3.481370383650158e+00 4.618729876855269e+00 9.267954164161642e+03 + 156720 9.677035272798227e-01 -5.976682392089555e+00 -5.977785444228795e+00 3.794317794626969e+00 4.787983898546686e+00 9.148971114650494e+03 + 156740 9.687355631704844e-01 -5.977626270806263e+00 -6.016142254527434e+00 3.759994772572326e+00 4.538830033716144e+00 9.266647286083449e+03 + 156760 1.076874024490185e+00 -6.135779169810773e+00 -5.969732372447152e+00 3.002071425335534e+00 4.955537831456295e+00 9.124367312836290e+03 + 156780 9.598476311152302e-01 -5.961475471041683e+00 -5.997455095006664e+00 3.854326663191878e+00 4.647726094556138e+00 9.209227415165204e+03 + 156800 9.356992689522694e-01 -5.923879323000756e+00 -6.005618326530044e+00 4.067004702764974e+00 4.597646695429886e+00 9.234273611439630e+03 + 156820 1.006464080354083e+00 -6.023198418467491e+00 -5.990294885222333e+00 3.631990120494783e+00 4.820927300193794e+00 9.187220203193609e+03 + 156840 1.006313820236602e+00 -6.017384170532153e+00 -5.995214714344264e+00 3.609256797524332e+00 4.736557245667445e+00 9.202372546309023e+03 + 156860 1.040225434905872e+00 -6.062466630367660e+00 -6.004393478413311e+00 3.345252333975278e+00 4.678717359288369e+00 9.230559227038844e+03 + 156880 1.028299214899132e+00 -6.042389194884100e+00 -5.994025102421359e+00 3.472927937532903e+00 4.750642040773080e+00 9.198729719228102e+03 + 156900 9.702295857122382e-01 -5.954367727477870e+00 -5.989951026999348e+00 3.948904550582209e+00 4.744579738232078e+00 9.186232670252188e+03 + 156920 9.802250613706779e-01 -5.966719497582075e+00 -6.011603792782036e+00 3.852304673236276e+00 4.594572104375871e+00 9.252708621747352e+03 + 156940 9.944171493315874e-01 -5.985866031952818e+00 -5.986196770527361e+00 3.817816300460538e+00 4.815917148383881e+00 9.174705739285850e+03 + 156960 9.358989187910117e-01 -5.893441812058851e+00 -6.006913534912587e+00 4.299366046903787e+00 4.647793854585273e+00 9.238242625419982e+03 + 156980 1.039331128710779e+00 -6.040674966831532e+00 -6.002002817646383e+00 3.521330209029016e+00 4.743391674145891e+00 9.223190587714100e+03 + 157000 1.017548093378406e+00 -6.000641943828476e+00 -6.017697403175031e+00 3.689686645135702e+00 4.591751558243978e+00 9.271461914428572e+03 + 157020 1.026017147947780e+00 -6.005006201076732e+00 -6.001721630507582e+00 3.678310701895951e+00 4.697171214389661e+00 9.222342261020443e+03 + 157040 1.028231967148681e+00 -5.999441603056658e+00 -6.017853091611360e+00 3.679026765842158e+00 4.573305149392414e+00 9.271920489178330e+03 + 157060 9.839918803697235e-01 -5.922631868580491e+00 -6.020149055900939e+00 4.106604504899400e+00 4.546645724569424e+00 9.278944386963421e+03 + 157080 9.869184742964995e-01 -5.910727763724124e+00 -6.002044565902026e+00 4.189898688973567e+00 4.665543479638583e+00 9.223292073904880e+03 + 157100 1.012655102544502e+00 -5.926301425381177e+00 -5.988159448676408e+00 4.162074956602247e+00 4.806876614342862e+00 9.180719287128459e+03 + 157120 1.036049566939546e+00 -5.936768665598631e+00 -6.020478748302005e+00 4.044128452532119e+00 4.563452203555914e+00 9.279996179146941e+03 + 157140 1.053908925817445e+00 -5.941297625809114e+00 -6.065147164144323e+00 3.974946582961892e+00 4.263783368187010e+00 9.418114889616249e+03 + 157160 9.750414212429849e-01 -5.809542491302873e+00 -6.060090283869345e+00 4.748532965838596e+00 4.309848768776327e+00 9.402418313240802e+03 + 157180 1.048781512456741e+00 -5.910160074725588e+00 -5.999664617600480e+00 4.231437855425727e+00 4.717488919454849e+00 9.215982867349836e+03 + 157200 9.928923941495678e-01 -5.821509812758084e+00 -6.066234495696987e+00 4.625376681055300e+00 4.220129680597826e+00 9.421478091235691e+03 + 157220 1.079815886257194e+00 -5.953659681406927e+00 -6.044080107384148e+00 3.932101249126009e+00 4.412893170649108e+00 9.352860745084377e+03 + 157240 1.037527679606691e+00 -5.902959427509844e+00 -6.010995092694564e+00 4.214649602422707e+00 4.594292094466887e+00 9.250822892247057e+03 + 157260 1.072011977141883e+00 -5.972725150097947e+00 -5.962126066259625e+00 3.849680122990303e+00 4.910541702592872e+00 9.101150322614494e+03 + 157280 1.022747598099079e+00 -5.925456452795429e+00 -6.010232558280670e+00 4.163303432887970e+00 4.676505916131792e+00 9.248461270633137e+03 + 157300 1.089040452863974e+00 -6.059066667793214e+00 -5.941395084501927e+00 3.382572709654842e+00 5.058261150532074e+00 9.038028692139897e+03 + 157320 1.015896021398681e+00 -5.985456488308500e+00 -5.974281660925434e+00 3.753635332973337e+00 4.817802921105848e+00 9.138242605836880e+03 + 157340 1.007260623160975e+00 -6.003615493444865e+00 -5.978954247330535e+00 3.674129147478466e+00 4.815737838982452e+00 9.152549637128875e+03 + 157360 1.043932369280565e+00 -6.085527148918293e+00 -5.989062010467481e+00 3.203851167043168e+00 4.757768919959662e+00 9.183519064323607e+03 + 157380 9.573712824874293e-01 -5.982445730534573e+00 -6.005011568688016e+00 3.822222279154517e+00 4.692645744425272e+00 9.232454953505052e+03 + 157400 9.839637424950695e-01 -6.043069943521168e+00 -5.972768372634302e+00 3.498180573253349e+00 4.901863072418668e+00 9.133636926373707e+03 + 157420 9.540743091260190e-01 -6.012435733721757e+00 -6.009384306477507e+00 3.660626610023276e+00 4.678148377466601e+00 9.245873418446688e+03 + 157440 1.077639679555158e+00 -6.205804664552121e+00 -5.987821154854236e+00 2.602194536211034e+00 4.853889581735390e+00 9.179724451987891e+03 + 157460 8.899981551330978e-01 -5.935955771249519e+00 -6.052824950567125e+00 4.017433764283888e+00 4.346352851195145e+00 9.379931208362468e+03 + 157480 9.576739452411704e-01 -6.039875730555249e+00 -6.024083305919600e+00 3.441895782757318e+00 4.532578328885026e+00 9.291055238702582e+03 + 157500 9.894402996737462e-01 -6.086833609795920e+00 -5.984802531511067e+00 3.220371319719595e+00 4.806249560489555e+00 9.170442167060082e+03 + 157520 9.479556594767882e-01 -6.021518477706805e+00 -6.001705563715723e+00 3.524457824252995e+00 4.638226642428318e+00 9.222289314654796e+03 + 157540 9.648694443185758e-01 -6.037342363067489e+00 -5.988956538250148e+00 3.481539127233241e+00 4.759378021016601e+00 9.183176359397541e+03 + 157560 1.018166778743456e+00 -6.102182200616815e+00 -5.983880865630371e+00 3.091873955923233e+00 4.771178528487818e+00 9.167645599853971e+03 + 157580 9.097781716227297e-01 -5.921138160003744e+00 -6.019650713361212e+00 4.122660139216693e+00 4.556985813069750e+00 9.277445360228279e+03 + 157600 1.035988817329983e+00 -6.079897103190830e+00 -5.993268357531019e+00 3.278276502891600e+00 4.775712166225302e+00 9.196386148587460e+03 + 157620 1.025865356282052e+00 -6.023390769969561e+00 -6.020995216582435e+00 3.565586330679977e+00 4.579341968939543e+00 9.281630837518447e+03 + 157640 1.024259946820580e+00 -5.974090419001708e+00 -5.997244826530540e+00 3.853777543473623e+00 4.720821352310088e+00 9.208574088306130e+03 + 157660 1.052843634585507e+00 -5.967220512966490e+00 -5.953070328808468e+00 3.904378702382231e+00 4.985631249551517e+00 9.073527353632151e+03 + 157680 1.067079560968394e+00 -5.942578946526291e+00 -6.006710328297460e+00 3.985489829773305e+00 4.617237511344001e+00 9.237655160693188e+03 + 157700 1.054917018082333e+00 -5.894005171003320e+00 -6.043318056506330e+00 4.234791705497157e+00 4.377414010844515e+00 9.350508465364928e+03 + 157720 1.033160970159197e+00 -5.848342457523593e+00 -6.053335315690482e+00 4.494864736463324e+00 4.317764022326769e+00 9.381492122787678e+03 + 157740 1.036568401110942e+00 -5.852395095708044e+00 -6.048419968790159e+00 4.508327901727027e+00 4.382722745738447e+00 9.366260329780562e+03 + 157760 1.045312104395617e+00 -5.871273211900852e+00 -6.056506252529332e+00 4.348303713181680e+00 4.284666929172550e+00 9.391319389188986e+03 + 157780 1.028184359958844e+00 -5.857183991393851e+00 -6.062936238105408e+00 4.388464851381827e+00 4.207003610706791e+00 9.411262834732472e+03 + 157800 1.108768922892658e+00 -5.994453814567116e+00 -6.030267872128759e+00 3.645519331169023e+00 4.439869470442575e+00 9.310222049280042e+03 + 157820 1.013345660527794e+00 -5.876481899438243e+00 -6.008256425445802e+00 4.350435972272180e+00 4.593766251894778e+00 9.242405935903091e+03 + 157840 1.048654843193751e+00 -5.951974835943119e+00 -6.000269668826189e+00 3.910940957347285e+00 4.633624553331458e+00 9.217861568494558e+03 + 157860 9.963540951250582e-01 -5.898491106766225e+00 -6.011236964273984e+00 4.183421750212016e+00 4.536017589037408e+00 9.251555638955069e+03 + 157880 1.005109646549181e+00 -5.933411777526399e+00 -6.013061082062393e+00 4.011397809471971e+00 4.554039177136255e+00 9.257186078064578e+03 + 157900 1.021248499399027e+00 -5.978176608610720e+00 -6.039978087911785e+00 3.799362311100594e+00 4.444488653205863e+00 9.340163891422853e+03 + 157920 9.965161966291373e-01 -5.964145870551885e+00 -5.986576347186203e+00 3.883281378684169e+00 4.754482110744872e+00 9.175883271457771e+03 + 157940 1.018000184418513e+00 -6.014707316241329e+00 -5.985859231222199e+00 3.593357396543915e+00 4.759007564950485e+00 9.173698767307358e+03 + 157960 1.065459434486456e+00 -6.102584154278894e+00 -6.011491392058314e+00 3.198417922042519e+00 4.721486659272486e+00 9.252358066968996e+03 + 157980 9.347507301966350e-01 -5.926797120477151e+00 -6.057012773887620e+00 4.076188359163286e+00 4.328469926473135e+00 9.392901682043252e+03 + 158000 9.868709620221353e-01 -6.020605626830092e+00 -6.000296384489306e+00 3.629594540756258e+00 4.746213353122144e+00 9.217965562193229e+03 + 158020 1.008754455742515e+00 -6.066445700988504e+00 -5.968080385098313e+00 3.354172104897235e+00 4.919000970722151e+00 9.119318140259547e+03 + 158040 9.376172799096421e-01 -5.970748732061255e+00 -5.973555108497830e+00 3.880261878810615e+00 4.864147231026446e+00 9.136016093839240e+03 + 158060 9.502422782612084e-01 -5.992149090261105e+00 -6.010475080089077e+00 3.731364521255833e+00 4.626133851725855e+00 9.249244908543957e+03 + 158080 1.042480016935265e+00 -6.129808634445554e+00 -6.023356927415428e+00 2.959994537497852e+00 4.571256712613259e+00 9.288924132761060e+03 + 158100 9.122884967369705e-01 -5.937422501321481e+00 -6.038916328096906e+00 3.998495632197855e+00 4.415702372734431e+00 9.336927969439104e+03 + 158120 1.060321445466710e+00 -6.156236216057479e+00 -5.996192504580589e+00 2.823597409558066e+00 4.742593167542682e+00 9.205390005294772e+03 + 158140 9.295945463056196e-01 -5.960121881730548e+00 -5.985482166047563e+00 3.929875795580849e+00 4.784253118541240e+00 9.172511838900566e+03 + 158160 9.813003410638159e-01 -6.029467727589465e+00 -5.977821073534414e+00 3.525645030821957e+00 4.822208110699950e+00 9.149067682295907e+03 + 158180 9.885166606744838e-01 -6.021503759419323e+00 -5.958333188589033e+00 3.651211155431940e+00 5.013946348753707e+00 9.089566915767708e+03 + 158200 9.828642811058098e-01 -5.982305424104281e+00 -5.990842798105943e+00 3.828476696481462e+00 4.779453773809559e+00 9.188931572763122e+03 + 158220 9.744318212407846e-01 -5.922572515418604e+00 -6.022429605329130e+00 4.078750687459820e+00 4.505355824358858e+00 9.286020220083306e+03 + 158240 1.014119665254342e+00 -5.925313300262539e+00 -5.995703264795803e+00 4.064148857598341e+00 4.659958788436536e+00 9.203851418998374e+03 + 158260 1.103511123873385e+00 -6.007018274659313e+00 -5.946852700233981e+00 3.683068798071818e+00 5.028548837014624e+00 9.054619282829997e+03 + 158280 1.036127191249600e+00 -5.869749843054083e+00 -5.990198150096229e+00 4.353484082433136e+00 4.661851264081860e+00 9.186958945638922e+03 + 158300 1.063577748222445e+00 -5.886208559936533e+00 -6.019600987228854e+00 4.270082012749072e+00 4.504122052825154e+00 9.277263369948327e+03 + 158320 1.101796900561629e+00 -5.930788171744062e+00 -5.979261409985025e+00 4.081539161728755e+00 4.803198326539774e+00 9.153458341138003e+03 + 158340 1.112293415759407e+00 -5.944123323472500e+00 -5.986070795059899e+00 4.044636206421243e+00 4.803767333216153e+00 9.174295624758042e+03 + 158360 1.031922276148501e+00 -5.831506496053739e+00 -6.012935545088179e+00 4.601872451568337e+00 4.560078775957987e+00 9.256788724730704e+03 + 158380 1.096245281413277e+00 -5.942369743352601e+00 -6.010919226475634e+00 4.003828311483748e+00 4.610206571393062e+00 9.250605192098685e+03 + 158400 1.078775291601145e+00 -5.941065338743281e+00 -6.047026456352560e+00 4.014990291278437e+00 4.406545156535998e+00 9.361948908858931e+03 + 158420 1.030670938392361e+00 -5.901807245611191e+00 -6.041918469984020e+00 4.255714290768280e+00 4.451173958277596e+00 9.346137491848314e+03 + 158440 1.008198718546610e+00 -5.902855395038042e+00 -6.015818360294809e+00 4.205064702306332e+00 4.556413874839600e+00 9.265663494312483e+03 + 158460 1.021563074805141e+00 -5.958269043257469e+00 -6.011036209506779e+00 3.943060305211696e+00 4.640063070915573e+00 9.250963265499724e+03 + 158480 1.000041874029309e+00 -5.958794331111794e+00 -6.021809231443833e+00 3.930492771168349e+00 4.568651461937469e+00 9.284109106935693e+03 + 158500 1.051790393201695e+00 -6.058942807813466e+00 -6.009683626728179e+00 3.377336657659848e+00 4.660190498285207e+00 9.246784546311468e+03 + 158520 9.988765278997698e-01 -6.000202278782643e+00 -6.004156242322101e+00 3.715938741801903e+00 4.693234471284455e+00 9.229815308285382e+03 + 158540 1.007249863938297e+00 -6.029094024282705e+00 -5.979992295212773e+00 3.547325480290123e+00 4.829275207077693e+00 9.155726363277518e+03 + 158560 9.382983348117007e-01 -5.937124264915040e+00 -6.038879713439100e+00 4.023134997038739e+00 4.438839465008816e+00 9.336777949436671e+03 + 158580 9.602427303348809e-01 -5.977457853904292e+00 -6.011539981535550e+00 3.804297334034070e+00 4.608592482983182e+00 9.252509299834797e+03 + 158600 9.927640345234163e-01 -6.031012197013839e+00 -5.997572417295464e+00 3.538852143323626e+00 4.730868533255718e+00 9.209609394227591e+03 + 158620 9.503964363828763e-01 -5.970340141586703e+00 -6.003364648638845e+00 3.855866848471048e+00 4.666235018451699e+00 9.227397266742108e+03 + 158640 9.838576803815202e-01 -6.019030649449538e+00 -6.010504247415469e+00 3.604322975691887e+00 4.653282895627961e+00 9.249318450643583e+03 + 158660 9.961048591604530e-01 -6.035874071701697e+00 -6.035211684905775e+00 3.446819808486753e+00 4.450623335972962e+00 9.325460783563753e+03 + 158680 9.734031382292708e-01 -6.000568759756991e+00 -6.034760309015555e+00 3.680954884838088e+00 4.484621717870268e+00 9.324080933887069e+03 + 158700 1.019541886737426e+00 -6.066204348705783e+00 -5.999631091564462e+00 3.393804195363928e+00 4.776078140047643e+00 9.215933281531827e+03 + 158720 9.770116000496499e-01 -5.999649518905536e+00 -6.022055935802896e+00 3.713935474832594e+00 4.585274361626146e+00 9.284877816214650e+03 + 158740 1.034461528565342e+00 -6.079229684640679e+00 -5.974873495393145e+00 3.265935677775587e+00 4.865165065503023e+00 9.140074716689986e+03 + 158760 9.690838414855645e-01 -5.974868814659614e+00 -5.997076499068499e+00 3.816972219345662e+00 4.689452258841789e+00 9.208062347325362e+03 + 158780 9.712806306669008e-01 -5.964292862168566e+00 -6.018842928271001e+00 3.884633175443363e+00 4.571398254287735e+00 9.274968290424587e+03 + 158800 1.000936742962732e+00 -5.985019306328353e+00 -6.025745502264344e+00 3.735436035012129e+00 4.501579915589212e+00 9.296271782368880e+03 + 158820 1.058637606957790e+00 -6.040464222161960e+00 -6.023347752515702e+00 3.495767013673423e+00 4.594052431147353e+00 9.288876776015613e+03 + 158840 9.808939691911815e-01 -5.891650058734743e+00 -6.063935511722193e+00 4.249008624841290e+00 4.259718892699661e+00 9.414353539057578e+03 + 158860 9.999185984748633e-01 -5.882544616797418e+00 -6.048074099742590e+00 4.291882788101017e+00 4.341386881425137e+00 9.365194451352974e+03 + 158880 1.064804123115785e+00 -5.939799699070935e+00 -5.998435221288688e+00 4.010045181105628e+00 4.673350938713551e+00 9.212225161285758e+03 + 158900 1.078696289612449e+00 -5.925445760997094e+00 -6.041047775393562e+00 4.029952682920463e+00 4.366148026902033e+00 9.343504746903074e+03 + 158920 1.137243087169405e+00 -5.986331226856130e+00 -5.997362933149170e+00 3.766778094163539e+00 4.703432329477872e+00 9.208941778343156e+03 + 158940 1.094620580759152e+00 -5.909493933934400e+00 -6.002578281821872e+00 4.168410519049303e+00 4.633905788723160e+00 9.224956280089786e+03 + 158960 1.028753524124946e+00 -5.805932603792663e+00 -6.065645011493352e+00 4.731703597437365e+00 4.240394762054808e+00 9.419663513315605e+03 + 158980 1.136906018952045e+00 -5.974645067938932e+00 -6.015492430493897e+00 3.847318107980001e+00 4.612766231080462e+00 9.264688569213622e+03 + 159000 1.100171971239055e+00 -5.941286847841411e+00 -6.023452160597915e+00 4.022371383756390e+00 4.550565442867487e+00 9.289181752953307e+03 + 159020 1.051610996978976e+00 -5.904387680683501e+00 -6.009523751569358e+00 4.189002135295985e+00 4.585294546515006e+00 9.246286107992850e+03 + 159040 9.474613280854542e-01 -5.793834339823102e+00 -6.008706411702765e+00 4.759951341335533e+00 4.526122653256845e+00 9.243764051027567e+03 + 159060 1.011795340667918e+00 -5.927732720859541e+00 -5.969238260670335e+00 4.069471083058103e+00 4.831139850502995e+00 9.122804665723508e+03 + 159080 1.034418993505762e+00 -5.993426907236168e+00 -5.993521342400056e+00 3.683639026161596e+00 4.683096764836757e+00 9.197136887715007e+03 + 159100 1.000816189494112e+00 -5.970370146108327e+00 -6.041398435508201e+00 3.783250350645740e+00 4.375394921319404e+00 9.344565598049074e+03 + 159120 1.048143334253784e+00 -6.062751878426872e+00 -5.980808715850843e+00 3.343824752129183e+00 4.814355072304167e+00 9.158217386441329e+03 + 159140 9.481942082131043e-01 -5.927168537900184e+00 -5.991272338875397e+00 4.086621938441493e+00 4.718527993210679e+00 9.190254889029742e+03 + 159160 9.674502705608908e-01 -5.964626981256871e+00 -5.969564941559280e+00 3.933087024668994e+00 4.904732492465671e+00 9.123815436678509e+03 + 159180 1.038203007771875e+00 -6.073818954030989e+00 -5.977607902677767e+00 3.317571292670896e+00 4.870030038153173e+00 9.148441378946274e+03 + 159200 1.015096394237751e+00 -6.042734906609613e+00 -5.974918381115140e+00 3.454522121786077e+00 4.843935105748749e+00 9.140198580821701e+03 + 159220 9.560091868802948e-01 -5.956680357924192e+00 -6.003029013179180e+00 3.900981417566300e+00 4.634840266660940e+00 9.226335387455178e+03 + 159240 9.150455860828660e-01 -5.896574242317199e+00 -6.050105778161295e+00 4.226451896582518e+00 4.344850058837332e+00 9.371491318008601e+03 + 159260 1.000205847947655e+00 -6.022410173242243e+00 -5.989154362292501e+00 3.547882628569602e+00 4.738842641363135e+00 9.183792609248230e+03 + 159280 9.711993542221165e-01 -5.977222699851403e+00 -5.993445033203112e+00 3.826467069131730e+00 4.733315920628244e+00 9.196936452918293e+03 + 159300 9.818358822597771e-01 -5.988124951965341e+00 -6.039663512384980e+00 3.725171151352350e+00 4.429228761856339e+00 9.339217575466457e+03 + 159320 9.750292404795829e-01 -5.974153803546288e+00 -6.030807982588010e+00 3.783226023610088e+00 4.457908960346642e+00 9.311858488350774e+03 + 159340 1.025434900082332e+00 -6.043623583382672e+00 -5.983853387832904e+00 3.544382885800363e+00 4.887592598054999e+00 9.167519816410391e+03 + 159360 1.047825784104359e+00 -6.069171101480032e+00 -5.974924228883383e+00 3.264886598758522e+00 4.806066725864881e+00 9.140243515333865e+03 + 159380 9.533980555133019e-01 -5.918787905988847e+00 -6.015309504940378e+00 4.139806183775313e+00 4.585564225926460e+00 9.264066251810889e+03 + 159400 1.018637733524578e+00 -6.003917460170587e+00 -5.980829246962396e+00 3.732553334003841e+00 4.865129427134720e+00 9.158272774227498e+03 + 159420 1.034173301616139e+00 -6.010355963949451e+00 -6.038976120884514e+00 3.613304672606314e+00 4.448963302530217e+00 9.337085937188414e+03 + 159440 9.943493578756768e-01 -5.932827792631599e+00 -6.020966364571638e+00 4.063605864993107e+00 4.557500545513474e+00 9.281514115682674e+03 + 159460 1.024461371204370e+00 -5.955510228803456e+00 -5.989047884340971e+00 3.985871317654927e+00 4.793292909623095e+00 9.183452387765146e+03 + 159480 1.035748289266619e+00 -5.946173434302401e+00 -6.002442290059972e+00 4.054311167602497e+00 4.731206690265242e+00 9.224556277627080e+03 + 159500 1.031212292486131e+00 -5.911378736956396e+00 -6.031463114775706e+00 4.143046578077918e+00 4.453503497642036e+00 9.313901415793647e+03 + 159520 1.058805207813739e+00 -5.925997922008456e+00 -6.023768690451242e+00 4.097934277086076e+00 4.536519394710079e+00 9.290154304678097e+03 + 159540 1.119131363934976e+00 -5.994878013279849e+00 -6.005582956956259e+00 3.757365052212980e+00 4.695895609038359e+00 9.234185175585508e+03 + 159560 1.037350234491170e+00 -5.860492174372813e+00 -6.035886402496120e+00 4.427264658473533e+00 4.420123858420425e+00 9.327532169636152e+03 + 159580 1.079640552140489e+00 -5.916071925804431e+00 -6.033706106231257e+00 4.133965997305567e+00 4.458492329464140e+00 9.320811592453443e+03 + 159600 1.084501794897959e+00 -5.927180154867921e+00 -5.932603267784032e+00 4.120038205939981e+00 5.088897852351660e+00 9.011278945233740e+03 + 159620 1.027930786875877e+00 -5.853060717543073e+00 -5.971058223835776e+00 4.462785060257092e+00 4.785225119069307e+00 9.128386020438607e+03 + 159640 1.082983097112168e+00 -5.951664541646313e+00 -5.946137140979909e+00 4.045920746860257e+00 5.077659936849240e+00 9.052414074896391e+03 + 159660 1.052099447715315e+00 -5.935926992037361e+00 -6.029728556944718e+00 4.048451573885861e+00 4.509828472442561e+00 9.308508057896648e+03 + 159680 1.008622331887496e+00 -5.915257264047999e+00 -6.028868193333594e+00 4.165806247450648e+00 4.513434710258280e+00 9.305874677388445e+03 + 159700 1.012936687573398e+00 -5.969027952360778e+00 -5.999914072773715e+00 3.853731785094020e+00 4.676378902071248e+00 9.216768172349437e+03 + 159720 9.580423099643852e-01 -5.930673089248154e+00 -6.016050142756599e+00 4.077666445434643e+00 4.587418192132821e+00 9.266375596903588e+03 + 159740 1.019066363036946e+00 -6.056071612131017e+00 -6.015449188725151e+00 3.375015366463192e+00 4.608275607959381e+00 9.264537136552035e+03 + 159760 9.552800415534263e-01 -5.989578903561117e+00 -6.037383640961348e+00 3.717991636723654e+00 4.443489436812328e+00 9.332178212165500e+03 + 159780 9.668183874734675e-01 -6.024567629120570e+00 -6.026512803096705e+00 3.535812339052586e+00 4.524642849066920e+00 9.298622207778222e+03 + 159800 9.897765678315403e-01 -6.070397337579338e+00 -5.979611232101687e+00 3.373951709153029e+00 4.895259575910119e+00 9.154569797677621e+03 + 159820 9.372405471486146e-01 -5.998813573325064e+00 -5.997419172987730e+00 3.675076054915405e+00 4.683082917435136e+00 9.209146303935418e+03 + 159840 9.438370536512489e-01 -6.009928521330453e+00 -6.015424072261163e+00 3.585667604814778e+00 4.554111300936884e+00 9.264447564409673e+03 + 159860 9.306294217750053e-01 -5.988305485378703e+00 -5.956544619714080e+00 3.821995470516256e+00 5.004371276140599e+00 9.084109370507584e+03 + 159880 1.052946188671871e+00 -6.161957119427522e+00 -5.923744394843757e+00 2.810548992164053e+00 5.178403320024024e+00 8.984435109516147e+03 + 159900 9.728220541758182e-01 -6.029553126375461e+00 -5.944810219298901e+00 3.567807693000484e+00 5.054414579356582e+00 9.048387610657075e+03 + 159920 9.844970624430790e-01 -6.029525383371160e+00 -5.994957744402039e+00 3.512636911048601e+00 4.711129643334138e+00 9.201588432028382e+03 + 159940 9.801226784897152e-01 -6.003728265598066e+00 -6.004061174876538e+00 3.657306727493465e+00 4.655395110898931e+00 9.229516800387752e+03 + 159960 1.003513387507547e+00 -6.017294716602880e+00 -6.007453659200221e+00 3.539402201391014e+00 4.595911075895795e+00 9.239957630415327e+03 + 159980 1.007947823748043e+00 -6.002540425019272e+00 -5.998753481546204e+00 3.642954413999386e+00 4.664699629449355e+00 9.213211726145228e+03 + 160000 9.543539917104560e-01 -5.900261352826585e+00 -6.038222154854846e+00 4.239763823419176e+00 4.447571548807793e+00 9.334720106571405e+03 + 160020 1.037357033024850e+00 -6.000236300520401e+00 -5.980681545487596e+00 3.677935038480325e+00 4.790221467967249e+00 9.157819391201205e+03 + 160040 1.026583558431805e+00 -5.961638452563316e+00 -5.985112023044009e+00 3.909656178071586e+00 4.774867303848154e+00 9.171397153784097e+03 + 160060 1.045704740248333e+00 -5.968266470371322e+00 -5.996264075452608e+00 3.831462775588807e+00 4.670696194596680e+00 9.205578896734463e+03 + 160080 1.049404147500742e+00 -5.955743797417787e+00 -5.979619860793060e+00 3.977159845644473e+00 4.840059794934790e+00 9.154591284388594e+03 + 160100 1.043601010179561e+00 -5.931497631245326e+00 -6.028016871318217e+00 4.015256873430538e+00 4.461028460627870e+00 9.303255800401419e+03 + 160120 1.055438165176422e+00 -5.935598889123364e+00 -6.021384991831250e+00 4.050156240804776e+00 4.557559163699602e+00 9.282804378832494e+03 + 160140 1.067766959005933e+00 -5.945524210976529e+00 -6.011054992452717e+00 3.980459089576319e+00 4.604171201484383e+00 9.251013580487916e+03 + 160160 1.056972727789983e+00 -5.926064230600744e+00 -5.989708109239521e+00 4.093253054853432e+00 4.727800054851184e+00 9.185470465238870e+03 + 160180 1.064057455614660e+00 -5.938079343333508e+00 -6.001618011425073e+00 4.046076979279231e+00 4.681228114520358e+00 9.222007931817772e+03 + 160200 1.096865378765961e+00 -5.996945069430559e+00 -5.993303904829786e+00 3.788328372230572e+00 4.809236502836614e+00 9.196500735592123e+03 + 160220 1.034108045077602e+00 -5.929309618204704e+00 -6.002858287394838e+00 4.081195167291060e+00 4.658867327181538e+00 9.225806987634365e+03 + 160240 9.690652528380195e-01 -5.868633054986858e+00 -6.011065764215862e+00 4.430787857803531e+00 4.612917200020067e+00 9.251023831886685e+03 + 160260 1.032900863787162e+00 -6.003321296492603e+00 -5.973296261933551e+00 3.705207116566222e+00 4.877615511363378e+00 9.135253302512057e+03 + 160280 1.009421266313451e+00 -6.009729224364233e+00 -5.996863257888558e+00 3.655306832178884e+00 4.729185202684092e+00 9.207413959393434e+03 + 160300 9.898118209843599e-01 -6.017056448600211e+00 -5.974920045504571e+00 3.605856874313787e+00 4.847810621476260e+00 9.140226160652444e+03 + 160320 9.865873670624269e-01 -6.043927894060685e+00 -6.001409975745514e+00 3.457988852588452e+00 4.702133319180756e+00 9.221365570554926e+03 + 160340 9.972764357017723e-01 -6.085613172472881e+00 -5.972072737509894e+00 3.221852994565400e+00 4.873819742448394e+00 9.131514498507227e+03 + 160360 9.625410277080177e-01 -6.054277830916212e+00 -5.910044171312459e+00 3.454905498381671e+00 5.283117491913114e+00 8.942955835836963e+03 + 160380 9.386798611680151e-01 -6.028729755141118e+00 -5.974627975276070e+00 3.565482966246116e+00 4.876143758454599e+00 9.139306228599671e+03 + 160400 9.412621422743230e-01 -6.036043694446783e+00 -5.975777580171305e+00 3.499266153911383e+00 4.845323508232222e+00 9.142838809521978e+03 + 160420 8.901954151449177e-01 -5.958544529686002e+00 -5.983429510312073e+00 3.891254020978171e+00 4.748360611284968e+00 9.166224071270773e+03 + 160440 9.540440279095108e-01 -6.045022557774733e+00 -5.964623702011779e+00 3.397088367044824e+00 4.858751038518428e+00 9.108755604963011e+03 + 160460 9.717326106687892e-01 -6.054274443241994e+00 -5.992345348350361e+00 3.403760462432396e+00 4.759366908796612e+00 9.193558794984960e+03 + 160480 9.841133773759392e-01 -6.050458687910786e+00 -6.008658588829266e+00 3.384959235382650e+00 4.624981872853165e+00 9.243656092332581e+03 + 160500 9.857170965525551e-01 -6.027538402958273e+00 -6.007632686627839e+00 3.555173318537368e+00 4.669475022106365e+00 9.240495970752519e+03 + 160520 9.504548608150292e-01 -5.948634311602605e+00 -6.004835591059705e+00 3.976196247495960e+00 4.653479803733405e+00 9.231883721066608e+03 + 160540 1.025772983123868e+00 -6.030375952437197e+00 -5.993747031623313e+00 3.524860101517636e+00 4.735189033138139e+00 9.197863177757654e+03 + 160560 1.000728380618666e+00 -5.962549678341017e+00 -6.011620542734482e+00 3.902179875678359e+00 4.620407378639363e+00 9.252761589101543e+03 + 160580 1.005717704235259e+00 -5.944086481030424e+00 -6.042090990889849e+00 3.977818870114446e+00 4.415061808352740e+00 9.346704161397722e+03 + 160600 1.077847471288511e+00 -6.029565772986225e+00 -6.046199186084481e+00 3.479160333964883e+00 4.383648701942342e+00 9.359420737771030e+03 + 160620 1.048252225599818e+00 -5.971456961838726e+00 -5.999696464499304e+00 3.861916807231214e+00 4.699761212905262e+00 9.216128718056727e+03 + 160640 9.610462916011152e-01 -5.834330632420808e+00 -6.044968014621085e+00 4.588619796144879e+00 4.379107351521339e+00 9.355599290331964e+03 + 160660 1.024613967875829e+00 -5.923538819381980e+00 -6.063178348026995e+00 4.069431953128927e+00 4.267600170502030e+00 9.412001974198305e+03 + 160680 1.053636107874291e+00 -5.968247058049092e+00 -6.040706656546415e+00 3.834363385155803e+00 4.418289157497547e+00 9.342425048616595e+03 + 160700 1.018286238269592e+00 -5.923814963911751e+00 -6.051965720508552e+00 4.054285371787454e+00 4.318423896143138e+00 9.377277705762193e+03 + 160720 1.059594829726587e+00 -5.998903463655076e+00 -6.003953583729110e+00 3.719464743563103e+00 4.690466172594443e+00 9.229198406020749e+03 + 160740 1.052393942943580e+00 -6.008292726760556e+00 -5.996881706169074e+00 3.703316167885994e+00 4.768840013972017e+00 9.207482280370616e+03 + 160760 1.022482097402826e+00 -5.989466385673874e+00 -6.030674670305198e+00 3.676409211805256e+00 4.439784864490757e+00 9.311462315478340e+03 + 160780 1.108649189565062e+00 -6.149531842300692e+00 -5.955251521763142e+00 2.904125542703263e+00 5.019713208012318e+00 9.080195550316439e+03 + 160800 9.629498461824223e-01 -5.973851642815937e+00 -5.982714019707520e+00 3.892009100698209e+00 4.841119961138350e+00 9.164055548405855e+03 + 160820 8.928878392252760e-01 -5.912579343842498e+00 -5.946018323410957e+00 4.181841444687677e+00 4.989829649340219e+00 9.052059150105721e+03 + 160840 8.977440436836467e-01 -5.953887530137131e+00 -6.007716111957810e+00 3.843146879173263e+00 4.534054832412808e+00 9.240734752360866e+03 + 160860 9.328680901094688e-01 -6.034701165803861e+00 -5.964242630111632e+00 3.515301113848696e+00 4.919884929216640e+00 9.107614328145522e+03 + 160880 9.721897161861465e-01 -6.111994922023370e+00 -5.975615134649156e+00 3.073784958512974e+00 4.856898802319598e+00 9.142349179195591e+03 + 160900 9.896340875941932e-01 -6.148504369293977e+00 -5.976428073598414e+00 2.897305233414045e+00 4.885393952018668e+00 9.144843040933920e+03 + 160920 9.321217545434516e-01 -6.065364051685483e+00 -5.947947632313242e+00 3.427224662009677e+00 5.101447912177262e+00 9.057954697797748e+03 + 160940 9.342985802039493e-01 -6.063782937291748e+00 -5.993726373034649e+00 3.346332106491121e+00 4.748607739673664e+00 9.197796279986298e+03 + 160960 9.843442540391312e-01 -6.130039329454951e+00 -5.952914113698474e+00 3.006942187438287e+00 5.024022586350528e+00 9.073080674535744e+03 + 160980 9.241315234708865e-01 -6.030606467553297e+00 -5.985754963506786e+00 3.558131158551515e+00 4.815675435534398e+00 9.173366568004292e+03 + 161000 9.895675138219547e-01 -6.115456744857433e+00 -5.968390239476424e+00 3.101899387254441e+00 4.946378019620347e+00 9.120262155367234e+03 + 161020 9.484283017247078e-01 -6.039371488429274e+00 -6.000836826311267e+00 3.501239361970288e+00 4.722511355071572e+00 9.219625439609994e+03 + 161040 9.378461028125493e-01 -6.006628779479262e+00 -6.010670577839912e+00 3.636436234150310e+00 4.613227602497182e+00 9.249841072910251e+03 + 161060 9.751397111636719e-01 -6.042248158738417e+00 -6.022947477578064e+00 3.480515484711070e+00 4.591342982704571e+00 9.287621840135949e+03 + 161080 9.526603356935284e-01 -5.988469957403186e+00 -6.012803722631137e+00 3.743660200131113e+00 4.603931954554224e+00 9.256402375927779e+03 + 161100 1.014057667809752e+00 -6.057817090462603e+00 -5.960768761228445e+00 3.393329874986283e+00 4.950596399629228e+00 9.097022318188392e+03 + 161120 1.020164419314882e+00 -6.043060673935757e+00 -6.005260528589705e+00 3.445198437626893e+00 4.662252721757507e+00 9.233190280953428e+03 + 161140 9.973283688029509e-01 -5.987442077490051e+00 -6.016812303752008e+00 3.727850997300435e+00 4.559202613076456e+00 9.268679820290001e+03 + 161160 9.693092690836458e-01 -5.925371244015134e+00 -5.958860041094356e+00 4.153573728045362e+00 4.961275872841876e+00 9.091178255123514e+03 + 161180 1.093899142035211e+00 -6.085998859504999e+00 -5.974671160997230e+00 3.216047101332310e+00 4.855307974069586e+00 9.139443491781911e+03 + 161200 1.064426123811495e+00 -6.021919898102770e+00 -5.973835342614594e+00 3.587132707129706e+00 4.863241665803725e+00 9.136896142548490e+03 + 161220 1.009955988437702e+00 -5.924368384314026e+00 -6.007060245066347e+00 4.067295901571217e+00 4.592466440607295e+00 9.238741240377889e+03 + 161240 1.086097448374550e+00 -6.024406830315661e+00 -5.983686213813101e+00 3.573388559155656e+00 4.807212640608394e+00 9.167027795240174e+03 + 161260 1.019618788514871e+00 -5.917844391594989e+00 -6.030064332701378e+00 4.091250340985165e+00 4.446866073172518e+00 9.309572621804036e+03 + 161280 1.033691115413999e+00 -5.937170957093135e+00 -5.976175260504660e+00 4.063615338596769e+00 4.839646592511344e+00 9.144036144805503e+03 + 161300 1.005882225940329e+00 -5.895702095128709e+00 -6.029941291196819e+00 4.252120459799505e+00 4.481298222527967e+00 9.309201340570153e+03 + 161320 1.078734638251447e+00 -6.008933509390550e+00 -6.036029380839561e+00 3.605003671107842e+00 4.449414984175068e+00 9.327971688714657e+03 + 161340 1.048605035059098e+00 -5.979060326142059e+00 -6.015070541887778e+00 3.821522418231038e+00 4.614746186856244e+00 9.263361507677848e+03 + 161360 9.515518029595686e-01 -5.859089460003956e+00 -6.060679799397777e+00 4.524339358876682e+00 4.366776434073160e+00 9.404248594394612e+03 + 161380 1.025523261669167e+00 -6.004617178858203e+00 -6.006921421792669e+00 3.667895601826619e+00 4.654664282316474e+00 9.238303600004194e+03 + 161400 9.895475119328700e-01 -5.997393818129471e+00 -6.005796487645971e+00 3.718216496115731e+00 4.669967067443085e+00 9.234840289342235e+03 + 161420 9.489099046790658e-01 -5.981680302672672e+00 -5.972045809092243e+00 3.800196074815875e+00 4.855518827887764e+00 9.131445177279282e+03 + 161440 9.824302010935702e-01 -6.069707568709373e+00 -6.019160721392371e+00 3.321708194898907e+00 4.611956014292476e+00 9.275984644478491e+03 + 161460 1.022792577551239e+00 -6.162385411534211e+00 -5.981028412278707e+00 2.872001870536002e+00 4.913381825166039e+00 9.158910389111221e+03 + 161480 9.697303842343118e-01 -6.108263709606693e+00 -5.986622584890484e+00 3.160905603845100e+00 4.859387765868789e+00 9.176043107054831e+03 + 161500 8.711132766710158e-01 -5.973175964813201e+00 -6.021574276639499e+00 3.858909382612777e+00 4.580998786491624e+00 9.283389227556463e+03 + 161520 9.514720950745312e-01 -6.094132184882064e+00 -5.971001776161700e+00 3.179551502515614e+00 4.886585363757110e+00 9.128251928208205e+03 + 161540 9.682115820061473e-01 -6.113333207809963e+00 -5.969154071776005e+00 3.111362170909172e+00 4.939261081665349e+00 9.122582227023777e+03 + 161560 9.391717382794473e-01 -6.058897432527799e+00 -5.979061748222227e+00 3.428338482137149e+00 4.886767335951963e+00 9.152904649896742e+03 + 161580 9.801968985478771e-01 -6.105267930585431e+00 -5.993009208827653e+00 3.158910141688762e+00 4.803517094002979e+00 9.195606395694052e+03 + 161600 8.928627566610730e-01 -5.959282257922852e+00 -6.013929428598797e+00 3.932512752692222e+00 4.618720242048614e+00 9.259848712747371e+03 + 161620 9.736687337846565e-01 -6.060885870622824e+00 -5.999126649962388e+00 3.402878186152601e+00 4.757509188393337e+00 9.214365697766449e+03 + 161640 9.663412620908324e-01 -6.029121513976166e+00 -5.979624146524955e+00 3.589708385813489e+00 4.873929929411195e+00 9.154603136040037e+03 + 161660 9.957287156539052e-01 -6.051556623797238e+00 -5.956198553517322e+00 3.434466593766025e+00 4.982027389926987e+00 9.083078031839552e+03 + 161680 1.012569056726924e+00 -6.053941882193143e+00 -6.030757113884825e+00 3.404172043054397e+00 4.537302570512059e+00 9.311726992608450e+03 + 161700 9.922643539980914e-01 -6.005784353359027e+00 -6.034561769448311e+00 3.668253064831352e+00 4.503008688355931e+00 9.323472907060286e+03 + 161720 9.292812169000150e-01 -5.899570549236382e+00 -6.024191340249188e+00 4.238830046775821e+00 4.523238179775209e+00 9.291472970537761e+03 + 161740 1.070674486573604e+00 -6.097856627760721e+00 -5.977040481546186e+00 3.236309657969971e+00 4.930054665772037e+00 9.146695247507294e+03 + 161760 1.014383953930517e+00 -6.006056172793192e+00 -5.984598135486674e+00 3.655718238704871e+00 4.778933609539438e+00 9.169828163077431e+03 + 161780 1.009062092671237e+00 -5.990904165192948e+00 -5.978169323882467e+00 3.734572826843716e+00 4.807698256358817e+00 9.150160430638423e+03 + 161800 1.028810270868253e+00 -6.012832004605261e+00 -6.001375635292638e+00 3.651195140298952e+00 4.716979385759458e+00 9.221276033019090e+03 + 161820 1.036196998924080e+00 -6.019876702551514e+00 -6.015545314166622e+00 3.604008395943712e+00 4.628879898329947e+00 9.264853254497964e+03 + 161840 1.037283042260460e+00 -6.021128194842947e+00 -6.025194315872060e+00 3.586646370424517e+00 4.563298074245159e+00 9.294552666315698e+03 + 161860 1.108700722609341e+00 -6.129227278529602e+00 -5.987569223578369e+00 3.047881307958539e+00 4.861303781001675e+00 9.178932797790869e+03 + 161880 9.939644425126315e-01 -5.964342200457356e+00 -6.026897679214423e+00 3.926565475405612e+00 4.567362235953478e+00 9.299805436016386e+03 + 161900 9.937327236543428e-01 -5.970679875573376e+00 -6.003489252415774e+00 3.895437691564763e+00 4.707041172501057e+00 9.227764453679720e+03 + 161920 9.727462996333139e-01 -5.946229891437940e+00 -6.025634186171143e+00 4.013385096453662e+00 4.557433348320719e+00 9.295906080135830e+03 + 161940 1.021199693183249e+00 -6.025954736506009e+00 -5.975981704101654e+00 3.560279033965541e+00 4.847231919333117e+00 9.143466923403259e+03 + 161960 9.449240212159047e-01 -5.920753570349351e+00 -6.054464795605219e+00 4.113215856921818e+00 4.345425309757387e+00 9.384995559344998e+03 + 161980 1.022340738626015e+00 -6.045671810814951e+00 -6.021758341060657e+00 3.450301353399193e+00 4.587616197325833e+00 9.283975771685886e+03 + 162000 9.696475607892012e-01 -5.981805618909952e+00 -6.023636557831040e+00 3.795399586468786e+00 4.555199861867022e+00 9.289759410353270e+03 + 162020 9.620830467883295e-01 -5.992361507397943e+00 -6.000616617962190e+00 3.744951916829950e+00 4.697549794495812e+00 9.218951175343944e+03 + 162040 1.048443032182123e+00 -6.155970426410600e+00 -6.015734711618873e+00 2.844728817588674e+00 4.649983993329498e+00 9.265425158011036e+03 + 162060 9.283078851211289e-01 -6.027320028868655e+00 -5.968524643361570e+00 3.559995099804065e+00 4.897607301942256e+00 9.120693403725800e+03 + 162080 8.198153346019057e-01 -5.912188963709472e+00 -6.039196350417110e+00 4.132664063454428e+00 4.403367994649597e+00 9.337768197060705e+03 + 162100 9.248710568636554e-01 -6.106353457205143e+00 -5.955432071881397e+00 3.180481701692716e+00 5.047095651230570e+00 9.080743218991662e+03 + 162120 9.449895670255876e-01 -6.158998837940627e+00 -5.955323531166824e+00 2.844157054295350e+00 5.013692184442381e+00 9.080409182660045e+03 + 162140 9.062080220858205e-01 -6.112521033052403e+00 -5.995792828385763e+00 3.058964756092311e+00 4.729236170919451e+00 9.204142059693064e+03 + 162160 8.713974382900049e-01 -6.062046908413455e+00 -5.994930158865159e+00 3.299554395615973e+00 4.684949157805715e+00 9.201502597039753e+03 + 162180 8.862678923255833e-01 -6.075122136014830e+00 -5.957038028047088e+00 3.291171611610900e+00 4.969228833018324e+00 9.085643585870150e+03 + 162200 9.096464549298351e-01 -6.090203467259455e+00 -5.970988303225447e+00 3.247221104979081e+00 4.931773025349365e+00 9.128202578096285e+03 + 162220 9.349409140836442e-01 -6.098318043961849e+00 -5.953401340529544e+00 3.181697209131612e+00 5.013831346027292e+00 9.074561124917460e+03 + 162240 9.370106122085293e-01 -6.065584912137465e+00 -5.969372439890490e+00 3.368594433848986e+00 4.921061338323081e+00 9.123267713359925e+03 + 162260 9.235452364979483e-01 -6.007959594723721e+00 -5.966384512223540e+00 3.634155693710341e+00 4.872886251149606e+00 9.114146170394381e+03 + 162280 9.961794431043668e-01 -6.080671767458593e+00 -5.960757802077831e+00 3.271158032443318e+00 4.959722578285824e+00 9.096971427553250e+03 + 162300 9.523189383031305e-01 -5.984741306053694e+00 -5.985599298878906e+00 3.788324897945702e+00 4.783398170369374e+00 9.172907905128632e+03 + 162320 1.001688483654537e+00 -6.033842553690658e+00 -6.030344450276324e+00 3.522912723797856e+00 4.542999374932715e+00 9.310416677535124e+03 + 162340 1.025904574764254e+00 -6.051988829280266e+00 -6.000656104700768e+00 3.419363171790314e+00 4.714123620039246e+00 9.219063130052336e+03 + 162360 1.046949091851151e+00 -6.068119541812703e+00 -5.985251988532794e+00 3.360980256718325e+00 4.836818571363991e+00 9.171844527729147e+03 + 162380 1.002845851537773e+00 -5.993126776374245e+00 -6.040598170754031e+00 3.696040299086607e+00 4.423452206383333e+00 9.342102248056308e+03 + 162400 9.839033823356719e-01 -5.959418560043376e+00 -6.015667921373240e+00 3.948192840406903e+00 4.625200303090285e+00 9.265198908223951e+03 + 162420 9.694366514663193e-01 -5.931272109618615e+00 -6.033644749744761e+00 3.986069312161163e+00 4.398229770441969e+00 9.320618278212931e+03 + 162440 1.012396050152234e+00 -5.988677874700462e+00 -6.017640161745479e+00 3.693393522149830e+00 4.527087588037904e+00 9.271277809029927e+03 + 162460 9.269441997739926e-01 -5.856799240311759e+00 -6.045570148259269e+00 4.464923569540539e+00 4.380971803902340e+00 9.357458936632758e+03 + 162480 1.063807442660780e+00 -6.055161347760672e+00 -5.989683645397223e+00 3.388782847974966e+00 4.764765947587579e+00 9.185410615485931e+03 + 162500 1.022911038661207e+00 -5.992387309901241e+00 -5.992108158768743e+00 3.696551561715313e+00 4.698154490716611e+00 9.192850761181518e+03 + 162520 1.054264656346463e+00 -6.039251239762955e+00 -5.988840903365375e+00 3.466422865502104e+00 4.755886818071348e+00 9.182828538086427e+03 + 162540 9.733280258555498e-01 -5.922190016133668e+00 -6.012741480136524e+00 4.059863205134388e+00 4.539902686036221e+00 9.256180924187152e+03 + 162560 9.855309860453070e-01 -5.942965222057665e+00 -6.059015181050457e+00 3.956813778797434e+00 4.290436955587710e+00 9.399055603873489e+03 + 162580 1.055864136735847e+00 -6.054253378276689e+00 -6.002564195630312e+00 3.398990272399224e+00 4.695797558029888e+00 9.224909438256465e+03 + 162600 9.800519700727006e-01 -5.953890902191777e+00 -5.979372999607837e+00 3.941576459866597e+00 4.795254313161748e+00 9.153816831732185e+03 + 162620 1.026595125570893e+00 -6.035291639269955e+00 -5.945470429665647e+00 3.527910908405805e+00 5.043678193741003e+00 9.050391231469672e+03 + 162640 1.022777697899419e+00 -6.045646652750457e+00 -5.981541170689617e+00 3.453266706664487e+00 4.821370304949116e+00 9.160469680342272e+03 + 162660 9.691566401379849e-01 -5.988053158801816e+00 -6.000386808779509e+00 3.752534393813119e+00 4.681712667015042e+00 9.218234804273327e+03 + 162680 1.020888598559480e+00 -6.089587827024706e+00 -5.989985286143323e+00 3.202182691365159e+00 4.774115894549451e+00 9.186339673988603e+03 + 162700 9.209466687283280e-01 -5.967267091345172e+00 -6.063462686540923e+00 3.815939486270949e+00 4.263569492436698e+00 9.412899221202115e+03 + 162720 9.991051786144821e-01 -6.111701599888931e+00 -5.996452793559635e+00 3.123898325108478e+00 4.785674805746435e+00 9.206172135098061e+03 + 162740 9.378060719269914e-01 -6.047652349487604e+00 -5.972033632305697e+00 3.451451605681474e+00 4.885665981698649e+00 9.131416272764287e+03 + 162760 9.390916994810455e-01 -6.070251961734650e+00 -5.964480419050129e+00 3.343613317952257e+00 4.950969884140109e+00 9.108322794983344e+03 + 162780 9.429474163981074e-01 -6.088238306529440e+00 -5.971086393494917e+00 3.197097851562317e+00 4.869802265406499e+00 9.128499018426706e+03 + 162800 9.576233233807784e-01 -6.114839447618790e+00 -6.025373488448162e+00 3.052566139172280e+00 4.566293521542461e+00 9.295118135538882e+03 + 162820 9.010569478704680e-01 -6.032367981292797e+00 -6.050756995162489e+00 3.494428974789758e+00 4.388836411459287e+00 9.373516627036663e+03 + 162840 9.382529723707786e-01 -6.082626891485834e+00 -5.934656618325058e+00 3.299441733603180e+00 5.149109940418123e+00 9.017556740700780e+03 + 162860 9.143661984321241e-01 -6.030937489706036e+00 -5.947368076621897e+00 3.522395097059893e+00 5.002263599313898e+00 9.056192283944229e+03 + 162880 9.363812377383377e-01 -6.035054696544214e+00 -5.996314936840706e+00 3.521187990412149e+00 4.743637685588130e+00 9.205729658004293e+03 + 162900 1.000539660454986e+00 -6.087428456700951e+00 -6.012139535258074e+00 3.200181028910081e+00 4.632501666758020e+00 9.254364091563433e+03 + 162920 1.005459746283917e+00 -6.048809320752847e+00 -5.968419014086199e+00 3.423626285255204e+00 4.885239866494851e+00 9.120351933383501e+03 + 162940 9.600468609334076e-01 -5.939150632349780e+00 -6.012866528171288e+00 4.076717777449703e+00 4.653429696144594e+00 9.256546665421571e+03 + 162960 1.034357349442555e+00 -6.013040491943967e+00 -5.980608310397456e+00 3.652103839853257e+00 4.838334445157193e+00 9.157613350819131e+03 + 162980 9.918071667963645e-01 -5.923608133823135e+00 -6.006367611756969e+00 4.144572934215768e+00 4.669355204931879e+00 9.236593957260600e+03 + 163000 1.057547532451302e+00 -6.005600497920716e+00 -5.992798797076263e+00 3.659295723641008e+00 4.732805070946656e+00 9.194938819356741e+03 + 163020 1.049525876087730e+00 -5.985092196358900e+00 -6.006085651888492e+00 3.740330276864253e+00 4.619782606486588e+00 9.235737014481039e+03 + 163040 1.084150747148902e+00 -6.033847492948065e+00 -5.982462700505708e+00 3.511065893577483e+00 4.806125323552430e+00 9.163296245555146e+03 + 163060 9.769507699404325e-01 -5.876105973424720e+00 -6.062898957961186e+00 4.404432454451126e+00 4.331838231121800e+00 9.411131193994179e+03 + 163080 1.041935449461572e+00 -5.979462172971780e+00 -5.992436744100774e+00 3.817171466414679e+00 4.742669471183607e+00 9.193838005601370e+03 + 163100 1.053567022511191e+00 -6.005452398138313e+00 -6.016400487970577e+00 3.675148119509009e+00 4.612282493480720e+00 9.267457209693708e+03 + 163120 1.003124997396243e+00 -5.942344114675308e+00 -6.050274556599367e+00 3.964113173676785e+00 4.344359873966930e+00 9.372031864187542e+03 + 163140 9.859355520507637e-01 -5.932898854065787e+00 -6.040286983702394e+00 4.065003202818840e+00 4.448363944186091e+00 9.341132738052167e+03 + 163160 1.045364875233624e+00 -6.040755024395786e+00 -6.005278105583509e+00 3.497389210431373e+00 4.701103168286909e+00 9.233267172097298e+03 + 163180 9.707677058002973e-01 -5.949661919303883e+00 -6.070282348684652e+00 3.906930153431946e+00 4.214308981976444e+00 9.434081499659260e+03 + 163200 9.735907385019225e-01 -5.975376847421571e+00 -6.074568679294881e+00 3.782190287348731e+00 4.212615438845810e+00 9.447392045821274e+03 + 163220 9.374662585397168e-01 -5.945562929214664e+00 -6.063187489759457e+00 4.000501850346781e+00 4.325083421356665e+00 9.412049765328986e+03 + 163240 1.002374933859561e+00 -6.066482125813056e+00 -6.041852407751598e+00 3.275163884324605e+00 4.416591536870048e+00 9.345985463868914e+03 + 163260 9.150862993151127e-01 -5.961225509418843e+00 -5.992097675239622e+00 3.883097582967046e+00 4.705824829371914e+00 9.192820539198161e+03 + 163280 9.399988505559478e-01 -6.016559770145100e+00 -6.041771166384676e+00 3.568629771018210e+00 4.423862032359606e+00 9.345716012276354e+03 + 163300 9.704780112688778e-01 -6.076931293233277e+00 -6.007508134581642e+00 3.296999976120679e+00 4.695638496297445e+00 9.240120248895115e+03 + 163320 9.408809394221747e-01 -6.043668691567787e+00 -6.009872590076376e+00 3.456330926751075e+00 4.650393371444562e+00 9.247389884493257e+03 + 163340 9.625997541240725e-01 -6.083925465322570e+00 -6.004540475866350e+00 3.190596141383418e+00 4.646437035628445e+00 9.231010677764496e+03 + 163360 9.882800108769305e-01 -6.126189020156537e+00 -5.978486784746520e+00 2.988392587389415e+00 4.836521679960793e+00 9.151130266329072e+03 + 163380 8.901865656485211e-01 -5.979328226514728e+00 -5.978357905652145e+00 3.858090309110309e+00 4.863662041659925e+00 9.150727532950910e+03 + 163400 9.469875699150684e-01 -6.053525489770889e+00 -5.991634095015122e+00 3.407017019395728e+00 4.762406985745728e+00 9.191404682129001e+03 + 163420 1.011542566003074e+00 -6.122237213464975e+00 -5.966446332793358e+00 3.038705189582827e+00 4.933280534960119e+00 9.114355345122020e+03 + 163440 9.540515180055131e-01 -5.992119434190923e+00 -5.997715262705100e+00 3.730641490025953e+00 4.698509376745888e+00 9.210053398894623e+03 + 163460 9.946748776698743e-01 -5.992887767325203e+00 -5.998087312562419e+00 3.750448867640140e+00 4.720592274261026e+00 9.211191638681305e+03 + 163480 1.059773788864986e+00 -6.036468045598911e+00 -5.995169656596435e+00 3.461014663259891e+00 4.698156403817154e+00 9.202232833639458e+03 + 163500 9.956217695310434e-01 -5.900107294630754e+00 -5.997023284258423e+00 4.255577994750785e+00 4.699071384607779e+00 9.207885450090302e+03 + 163520 1.057224216454209e+00 -5.962304958875155e+00 -5.987327941674829e+00 3.917498741532980e+00 4.773812902003172e+00 9.178186471860283e+03 + 163540 1.111412671351112e+00 -6.020211882977694e+00 -6.007752119047676e+00 3.584577240931668e+00 4.656123133560072e+00 9.240864797183114e+03 + 163560 1.068467727422145e+00 -5.945833352075362e+00 -6.041056012853789e+00 4.039867527001850e+00 4.493084273152991e+00 9.343492434361895e+03 + 163580 1.084511532003489e+00 -5.968236606069263e+00 -5.997278988057432e+00 3.832025646491579e+00 4.665259794821426e+00 9.208704359670903e+03 + 163600 1.118582070583703e+00 -6.024981863299381e+00 -5.997591148042043e+00 3.574278430048835e+00 4.731560155755959e+00 9.209647584853366e+03 + 163620 9.985248717808520e-01 -5.861430513778153e+00 -6.040971260499250e+00 4.377583199476421e+00 4.346632447963121e+00 9.343241803658140e+03 + 163640 1.062974589817197e+00 -5.977857247492961e+00 -6.017905478236272e+00 3.823036712935207e+00 4.593073574563441e+00 9.272060652149868e+03 + 163660 1.018893693271631e+00 -5.937092800697025e+00 -5.985835834906699e+00 4.073070459506291e+00 4.793180414114178e+00 9.173604202043412e+03 + 163680 1.031591260953455e+00 -5.983872404946798e+00 -5.999424284832351e+00 3.770027394621192e+00 4.680726093672711e+00 9.215295834365674e+03 + 163700 1.079205944342481e+00 -6.086409211507690e+00 -6.004468342407057e+00 3.245519595652851e+00 4.716036746337199e+00 9.230761554491524e+03 + 163720 9.812675873468011e-01 -5.972146060271352e+00 -6.035513189289492e+00 3.822118454403185e+00 4.458254593549503e+00 9.326393242758229e+03 + 163740 9.975645748926730e-01 -6.026065441268845e+00 -5.984854887397221e+00 3.580150819568476e+00 4.816788197211949e+00 9.170617190185658e+03 + 163760 9.684036557706799e-01 -6.007369673279056e+00 -6.009026793871195e+00 3.622200233071771e+00 4.612684790193130e+00 9.244769315730444e+03 + 163780 9.153738253604564e-01 -5.945897443134425e+00 -6.040785130857286e+00 4.012842143003315e+00 4.467982356276428e+00 9.342658819386490e+03 + 163800 9.558332817015761e-01 -6.018754431084333e+00 -5.982824598145575e+00 3.666420875091335e+00 4.872735535949360e+00 9.164404044405253e+03 + 163820 9.679519709488037e-01 -6.044566054477608e+00 -5.992524519596310e+00 3.453299502966128e+00 4.752130049656036e+00 9.194115352968131e+03 + 163840 9.151261453773077e-01 -5.970039492899417e+00 -6.019132007392272e+00 3.862473391424353e+00 4.580576576164320e+00 9.275843031456025e+03 + 163860 9.039889876868109e-01 -5.951143350114993e+00 -6.012645723280194e+00 3.946924390225841e+00 4.593768246049772e+00 9.255897488163235e+03 + 163880 9.859204923498662e-01 -6.065231546944524e+00 -6.012221304532954e+00 3.346726223252377e+00 4.651119238488112e+00 9.254611248490693e+03 + 163900 9.681545466516267e-01 -6.028676806571754e+00 -6.023478551560951e+00 3.534132945555673e+00 4.563982130255073e+00 9.289264457307238e+03 + 163920 9.396012507584544e-01 -5.974800362207032e+00 -6.004281250781792e+00 3.830300403134028e+00 4.661016578784995e+00 9.230188100722224e+03 + 163940 9.923433959214450e-01 -6.036924847801824e+00 -6.006166397689398e+00 3.511438574467872e+00 4.688058354868192e+00 9.235974624905397e+03 + 163960 9.686362984195618e-01 -5.981574131221270e+00 -6.023030497433883e+00 3.795251267702432e+00 4.557202397557670e+00 9.287888783357490e+03 + 163980 1.059650376550190e+00 -6.093506946021860e+00 -6.022970558939889e+00 3.160019666736987e+00 4.565050516832287e+00 9.287702963509893e+03 + 164000 9.971159770396719e-01 -5.977241619068239e+00 -5.978006148240961e+00 3.860385411511667e+00 4.855995366691391e+00 9.149635724428328e+03 + 164020 9.050964246293430e-01 -5.813249796164339e+00 -6.053964192959993e+00 4.688129264627769e+00 4.305909947794604e+00 9.383398366353071e+03 + 164040 1.028496415474589e+00 -5.955111537454676e+00 -5.985504100891775e+00 3.913527096207722e+00 4.739008293717908e+00 9.172604921842982e+03 + 164060 1.107622705064118e+00 -6.019685369060274e+00 -5.983995279651374e+00 3.634853856380777e+00 4.839791872790163e+00 9.167971665901036e+03 + 164080 1.063408094586710e+00 -5.902070284021056e+00 -5.969140670066672e+00 4.240553398519834e+00 4.855424862737208e+00 9.122520695107305e+03 + 164100 1.061599488060522e+00 -5.854877393774347e+00 -5.969703072134481e+00 4.564824171796552e+00 4.905477357436365e+00 9.124196831719857e+03 + 164120 1.100869890252349e+00 -5.878327059857710e+00 -5.994582010667012e+00 4.372239756648847e+00 4.704685838706339e+00 9.200395785014220e+03 + 164140 1.136511394344940e+00 -5.909331182215656e+00 -6.044153085248372e+00 4.185727050710640e+00 4.411558819874721e+00 9.353092333013557e+03 + 164160 1.118192867790441e+00 -5.883060959568578e+00 -5.989980190470379e+00 4.279668600650405e+00 4.665721831114753e+00 9.186310796383392e+03 + 164180 1.111232517703800e+00 -5.882169389089628e+00 -5.969768804562344e+00 4.405005108786844e+00 4.901995709176775e+00 9.124434280072626e+03 + 164200 1.117269786150672e+00 -5.905387768707530e+00 -6.024038276264602e+00 4.159724154116934e+00 4.478414578617522e+00 9.290995326695194e+03 + 164220 1.094975867228970e+00 -5.894105816122332e+00 -6.051079932828270e+00 4.244822532098496e+00 4.343452862306947e+00 9.374480862989836e+03 + 164240 1.067784955941933e+00 -5.879341231258513e+00 -6.007849403847105e+00 4.327485970935253e+00 4.589572157356121e+00 9.241134562308154e+03 + 164260 1.027109114708167e+00 -5.847220157632726e+00 -5.970673442130771e+00 4.499568609704085e+00 4.790680745782273e+00 9.127216739626672e+03 + 164280 1.016432128067745e+00 -5.855741263480742e+00 -5.941174707953865e+00 4.500606250185641e+00 5.010034191238163e+00 9.037292992039147e+03 + 164300 1.033186406352248e+00 -5.904234408865707e+00 -5.980340981152151e+00 4.233289023163732e+00 4.796273307640976e+00 9.156625302575785e+03 + 164320 1.040832028289954e+00 -5.939639693254617e+00 -5.940891591654474e+00 4.058104183111572e+00 5.050915588768947e+00 9.036447638221440e+03 + 164340 1.024754839009441e+00 -5.939448811043752e+00 -5.952571189172556e+00 4.039711612802326e+00 4.964360886905282e+00 9.072006121574126e+03 + 164360 1.028650852326712e+00 -5.970953189535612e+00 -5.968974657958665e+00 3.805013598711300e+00 4.816374633202903e+00 9.122028932372818e+03 + 164380 9.998114634570682e-01 -5.953917331440081e+00 -5.984350428002259e+00 3.940868235228549e+00 4.766116685262051e+00 9.169061944623983e+03 + 164400 1.002726068685666e+00 -5.980955395089477e+00 -5.973877574015285e+00 3.765918401334437e+00 4.806560345231722e+00 9.137024415788659e+03 + 164420 9.565950907560035e-01 -5.932421468261052e+00 -6.031678687834620e+00 4.020042680586270e+00 4.450092365789758e+00 9.314540255887101e+03 + 164440 1.025480832283233e+00 -6.054510116664808e+00 -5.987520962423947e+00 3.416580358221581e+00 4.801242448410720e+00 9.178782141271642e+03 + 164460 9.674260668800186e-01 -5.986988703302007e+00 -5.978401932410465e+00 3.752259563243836e+00 4.801566130501573e+00 9.150854044178843e+03 + 164480 9.838339156421041e-01 -6.028033396788077e+00 -5.995498058569312e+00 3.540121460533364e+00 4.726944407412831e+00 9.203233646619796e+03 + 164500 9.706037310128078e-01 -6.021759413882279e+00 -6.010243841327645e+00 3.522382103217763e+00 4.588506302855565e+00 9.248496821830353e+03 + 164520 9.754829110189486e-01 -6.039362646282163e+00 -5.982690733923285e+00 3.524474424231741e+00 4.849893314946515e+00 9.163980146872344e+03 + 164540 9.718835395546767e-01 -6.039838570753404e+00 -5.989744826713121e+00 3.469628908849958e+00 4.757274939111097e+00 9.185612622385257e+03 + 164560 9.191992179765578e-01 -5.964877941656011e+00 -6.039388597087362e+00 3.827168943915428e+00 4.399317229941953e+00 9.338374248565364e+03 + 164580 1.084432116092379e+00 -6.210614438515273e+00 -5.977030825401703e+00 2.581518097717367e+00 4.922791351162791e+00 9.146710149042601e+03 + 164600 9.335082159823005e-01 -5.985814810973878e+00 -6.046790377507905e+00 3.767146320601985e+00 4.417015181625172e+00 9.361265364112360e+03 + 164620 9.349814811889484e-01 -5.985996151292576e+00 -5.999526575645437e+00 3.724605949414201e+00 4.646912158953675e+00 9.215584018143345e+03 + 164640 9.468319882625965e-01 -5.995703666087840e+00 -5.977041967983901e+00 3.646055966295157e+00 4.753214324696422e+00 9.146699543818218e+03 + 164660 9.643671252952503e-01 -6.003327982820285e+00 -5.979108468432036e+00 3.701306280655364e+00 4.840378480230428e+00 9.153018836618030e+03 + 164680 1.021998166135702e+00 -6.056461500062768e+00 -5.963783519556493e+00 3.358469794563737e+00 4.890641100501897e+00 9.106203801965776e+03 + 164700 1.046269052354148e+00 -6.048685444652794e+00 -5.978966040354639e+00 3.443921145884265e+00 4.844260754407224e+00 9.152568958915304e+03 + 164720 1.051696417347132e+00 -6.009111048446540e+00 -5.972952494514720e+00 3.670999726364327e+00 4.878627738558977e+00 9.134191214024278e+03 + 164740 1.040978474194928e+00 -5.949803411172401e+00 -6.010537353973996e+00 3.982951298296942e+00 4.634207600182913e+00 9.249359212305586e+03 + 164760 1.025623638885554e+00 -5.895307582639829e+00 -5.962388141936643e+00 4.276082192456057e+00 4.890895240290749e+00 9.101893085730171e+03 + 164780 1.042456225419418e+00 -5.895355159413683e+00 -6.014296562793065e+00 4.200524702765954e+00 4.517544758438850e+00 9.260936993093348e+03 + 164800 1.068656606223340e+00 -5.917739361049619e+00 -6.008509831398099e+00 4.148044942203878e+00 4.626826854778016e+00 9.243159686713087e+03 + 164820 1.018335320086234e+00 -5.836912576550863e+00 -6.030110608282105e+00 4.479063161896740e+00 4.369690166397162e+00 9.309687078817253e+03 + 164840 1.072673506426081e+00 -5.918105174966652e+00 -5.971422337818447e+00 4.103366756996899e+00 4.797211357097614e+00 9.129510074017495e+03 + 164860 1.025915273658921e+00 -5.854942970353795e+00 -6.041009298341038e+00 4.462263308328819e+00 4.393841659354872e+00 9.343351313401559e+03 + 164880 1.084665357320912e+00 -5.958500976699422e+00 -6.025179311567265e+00 3.884025133426399e+00 4.501147816176270e+00 9.294481646926108e+03 + 164900 1.043902126445272e+00 -5.920664705150137e+00 -6.032279299120764e+00 4.064063170347868e+00 4.423154899465933e+00 9.316413510118817e+03 + 164920 1.122611361386446e+00 -6.068605577410258e+00 -5.983075593297952e+00 3.375370748081294e+00 4.866497152576423e+00 9.165155415975614e+03 + 164940 9.670740599726690e-01 -5.872039974160868e+00 -6.031616856017725e+00 4.319433292759542e+00 4.403118142694812e+00 9.314367122202440e+03 + 164960 1.089354032746623e+00 -6.089454398368446e+00 -5.969560214277891e+00 3.159064471845697e+00 4.847515430458690e+00 9.123874919743450e+03 + 164980 9.700531352679465e-01 -5.943701214606546e+00 -6.041200206362054e+00 3.928342023699579e+00 4.368487725119234e+00 9.343973030392963e+03 + 165000 9.769658728121204e-01 -5.978231304017480e+00 -6.029810035084410e+00 3.827328795792156e+00 4.531155740223004e+00 9.308776288744199e+03 + 165020 1.010168735416380e+00 -6.045415221875551e+00 -5.978760374676797e+00 3.438312058777137e+00 4.821054506196652e+00 9.151963201247345e+03 + 165040 1.005054054920648e+00 -6.048310516864852e+00 -5.949481230094030e+00 3.487425593390847e+00 5.054918651811611e+00 9.062618299601332e+03 + 165060 1.014523291251254e+00 -6.067312905632370e+00 -5.996476608367120e+00 3.301686436026075e+00 4.708439416804723e+00 9.206236727141988e+03 + 165080 9.543702408477041e-01 -5.981085384067523e+00 -6.020673945775648e+00 3.731796724958406e+00 4.504473077320226e+00 9.280635900362739e+03 + 165100 9.727253771495086e-01 -6.009016144867810e+00 -5.994823924012419e+00 3.606182790935523e+00 4.687676719326261e+00 9.201151551942246e+03 + 165120 9.617572093860809e-01 -5.990321708269255e+00 -5.971507373677026e+00 3.762379741821947e+00 4.870414562559400e+00 9.129765427071034e+03 + 165140 9.820892137076324e-01 -6.014620575000152e+00 -5.997580585444950e+00 3.619117609986189e+00 4.716963866942024e+00 9.209599005995622e+03 + 165160 9.619088179754316e-01 -5.977848262489456e+00 -6.015568021509829e+00 3.804931981334170e+00 4.588339287925342e+00 9.264904139084412e+03 + 165180 1.004613122737017e+00 -6.032935843750215e+00 -6.033472662388002e+00 3.503875366520076e+00 4.500792870829486e+00 9.320087822949954e+03 + 165200 9.817502186536257e-01 -5.991091722631145e+00 -6.016199775100425e+00 3.752412551768736e+00 4.608238229031568e+00 9.266859939050199e+03 + 165220 1.037793243937883e+00 -6.066639303456450e+00 -5.955131319855951e+00 3.356356956730553e+00 4.996653054369308e+00 9.079820807117720e+03 + 165240 9.408478438636525e-01 -5.913211797875518e+00 -6.059540530769575e+00 4.137153958621449e+00 4.296911730045541e+00 9.400713331525743e+03 + 165260 1.056202321302382e+00 -6.072884361993731e+00 -6.002450834281791e+00 3.385726536416652e+00 4.790166752091802e+00 9.224585460211125e+03 + 165280 9.956318993119190e-01 -5.970626982876918e+00 -6.017525442249031e+00 3.883805011117702e+00 4.614506799889895e+00 9.270942381596016e+03 + 165300 1.033258383753133e+00 -6.013240003780882e+00 -6.009393342336059e+00 3.653708140288823e+00 4.675796265573927e+00 9.245899792824561e+03 + 165320 1.038360998468479e+00 -6.004595751847910e+00 -6.011821456358575e+00 3.664385336482137e+00 4.622894223007743e+00 9.253369192527471e+03 + 165340 1.021338148043310e+00 -5.959479167051520e+00 -6.008425338002967e+00 3.953436407707745e+00 4.672379919709060e+00 9.242928949339082e+03 + 165360 1.015575513426695e+00 -5.925642791344301e+00 -6.070136474003647e+00 4.040396173119261e+00 4.210691086964174e+00 9.433611815624807e+03 + 165380 1.039804046873806e+00 -5.936048975719386e+00 -6.061173350899948e+00 3.978412233747961e+00 4.259928708526689e+00 9.405806775931182e+03 + 165400 1.042556575508926e+00 -5.914461507033701e+00 -6.026848968962740e+00 4.146432177017839e+00 4.501085978717771e+00 9.299625229993206e+03 + 165420 9.977039289707226e-01 -5.823902664767362e+00 -5.985229405389468e+00 4.650333187946110e+00 4.723970078061545e+00 9.171728872089087e+03 + 165440 1.068296251354389e+00 -5.901796126901480e+00 -6.027568089692879e+00 4.123737036977791e+00 4.401534963481240e+00 9.301850009709620e+03 + 165460 1.098248037293794e+00 -5.923791750159210e+00 -6.018083376237074e+00 4.086637899317971e+00 4.545200790796898e+00 9.272611399229312e+03 + 165480 1.063153422020545e+00 -5.857820525567718e+00 -6.036322631177760e+00 4.404318448061345e+00 4.379331734536913e+00 9.328857249715391e+03 + 165500 1.098491840064453e+00 -5.906518008535035e+00 -6.006749987199053e+00 4.189349696742466e+00 4.613802164405103e+00 9.237755000038700e+03 + 165520 1.104873607144362e+00 -5.923594587943448e+00 -6.020876317218788e+00 4.112202131189014e+00 4.553595387391066e+00 9.281241201914198e+03 + 165540 1.083340706492949e+00 -5.912541536142948e+00 -6.004085017349616e+00 4.158376319675264e+00 4.632719484278641e+00 9.229595481470982e+03 + 165560 1.064433518446639e+00 -5.920553264396656e+00 -6.057762922465115e+00 4.035435383755443e+00 4.247556294000383e+00 9.395178650764199e+03 + 165580 1.059594300726101e+00 -5.960256413048246e+00 -5.990933669896851e+00 3.881414852365370e+00 4.705261296250525e+00 9.189235476617834e+03 + 165600 9.578878049833790e-01 -5.858779536531175e+00 -6.016671497060699e+00 4.379429544982029e+00 4.472789473919579e+00 9.268284528847695e+03 + 165620 9.860863426100877e-01 -5.938909239617971e+00 -6.028497882457073e+00 3.972318658651538e+00 4.457886807671741e+00 9.304743696353415e+03 + 165640 9.903699795838622e-01 -5.977744498520449e+00 -6.041881946426940e+00 3.782304897806056e+00 4.414017746688996e+00 9.346079866347858e+03 + 165660 1.056830160155249e+00 -6.103907014461154e+00 -6.001936894152008e+00 3.077942985353171e+00 4.663471195993410e+00 9.223013706719576e+03 + 165680 9.064631414816192e-01 -5.900187761570707e+00 -6.055460346234909e+00 4.143383477544194e+00 4.251784268047522e+00 9.388042642517534e+03 + 165700 9.833907734372845e-01 -6.026726328495697e+00 -5.948845595943602e+00 3.624233227061930e+00 5.071436445380474e+00 9.060671264085009e+03 + 165720 1.023381494728409e+00 -6.090759543815699e+00 -5.948819161374006e+00 3.204392050443085e+00 5.019435691626480e+00 9.060603135029378e+03 + 165740 9.747053698121926e-01 -6.020270881561415e+00 -5.982813294832175e+00 3.576306759306865e+00 4.791394018848973e+00 9.164373897988969e+03 + 165760 9.543154074357806e-01 -5.990672692636865e+00 -6.010986091431414e+00 3.712513216646573e+00 4.595870537279968e+00 9.250783871721011e+03 + 165780 9.554647733168787e-01 -5.990205385478275e+00 -5.971065314528296e+00 3.733287122092894e+00 4.843192371404079e+00 9.128447743785096e+03 + 165800 9.732244930071225e-01 -6.010631298193614e+00 -5.965211675228476e+00 3.672709202279019e+00 4.933515706008778e+00 9.110551526546511e+03 + 165820 9.473743471869892e-01 -5.962235396079466e+00 -6.011246127063638e+00 3.881759483464122e+00 4.600332281766899e+00 9.251547037464021e+03 + 165840 1.011924310432692e+00 -6.043385435605010e+00 -5.972675738908853e+00 3.474971429022394e+00 4.880997449741924e+00 9.133341722474919e+03 + 165860 1.013295165509699e+00 -6.026967378925008e+00 -5.983888650980971e+00 3.552134439396830e+00 4.799499161663098e+00 9.167652163248356e+03 + 165880 9.847839593526763e-01 -5.963368809264665e+00 -5.978726523272172e+00 3.897929601048453e+00 4.809743230618782e+00 9.151872253100451e+03 + 165900 1.049072551985663e+00 -6.033724968718434e+00 -6.000078750219553e+00 3.504815763241334e+00 4.698017556597394e+00 9.217291316682305e+03 + 165920 1.020196019336090e+00 -5.965434959364369e+00 -6.027808249932958e+00 3.880020043893011e+00 4.521862957212651e+00 9.302613637969582e+03 + 165940 1.056421889380903e+00 -5.994747870495123e+00 -6.008647296987023e+00 3.701665257630231e+00 4.621852599784442e+00 9.243616728342626e+03 + 165960 9.924313193398050e-01 -5.877499241298957e+00 -6.024178712104055e+00 4.361994386639634e+00 4.519738166702012e+00 9.291392935428195e+03 + 165980 1.072087859979581e+00 -5.970643447750860e+00 -5.952949845527375e+00 3.877577391269416e+00 4.979176793312766e+00 9.073155590724476e+03 + 166000 1.080955707512629e+00 -5.957709921967445e+00 -6.026331627000244e+00 3.953844754985171e+00 4.559808305512306e+00 9.298033881954072e+03 + 166020 1.070824669500611e+00 -5.921138750473912e+00 -6.019494639713771e+00 4.082104324536289e+00 4.517329587996354e+00 9.276971808743703e+03 + 166040 9.817239352684638e-01 -5.771338927385496e+00 -6.013532499602240e+00 4.923077546259635e+00 4.532364575256917e+00 9.258622612691252e+03 + 166060 1.044741590637170e+00 -5.846599938542488e+00 -6.025065317257440e+00 4.501165021063160e+00 4.476389199053805e+00 9.294149286012944e+03 + 166080 1.078490164408772e+00 -5.879650625016050e+00 -6.032492188645634e+00 4.362420813788909e+00 4.484780903272312e+00 9.317050432607357e+03 + 166100 1.138171028242104e+00 -5.956743455057570e+00 -6.025912076540264e+00 3.930201697944175e+00 4.533024769580966e+00 9.296771239207448e+03 + 166120 1.028287180167065e+00 -5.795511558084518e+00 -6.095249898844538e+00 4.631061724922556e+00 3.909917787920196e+00 9.511784097227841e+03 + 166140 1.089761491445663e+00 -5.905229731986621e+00 -5.982898783564384e+00 4.193531048070700e+00 4.747543334664297e+00 9.164628017108820e+03 + 166160 1.058615306112008e+00 -5.891802045709340e+00 -6.020021242460093e+00 4.207026329029580e+00 4.470771859430185e+00 9.278602796795421e+03 + 166180 1.062940105276478e+00 -5.944192797629976e+00 -5.959626484201280e+00 3.969565289498466e+00 4.880942672850757e+00 9.093528096234922e+03 + 166200 9.888429213514667e-01 -5.883278452283350e+00 -6.023515519233941e+00 4.319340117149365e+00 4.514077177103098e+00 9.289358208487991e+03 + 166220 1.051702488927136e+00 -6.023886786142014e+00 -6.019302245442235e+00 3.541763805563480e+00 4.568088947716989e+00 9.276398849808000e+03 + 166240 1.019045101323452e+00 -6.016806213414773e+00 -5.989426676190296e+00 3.649432114740178e+00 4.806649654452820e+00 9.184623518112741e+03 + 166260 9.824916960038327e-01 -5.994122208710265e+00 -6.002035222637783e+00 3.657809400784662e+00 4.612371650277907e+00 9.223301137996665e+03 + 166280 1.003163576358764e+00 -6.049079477134097e+00 -5.986728581831542e+00 3.465934104005252e+00 4.823962593602382e+00 9.176344594168633e+03 + 166300 9.880437105272510e-01 -6.044789314033777e+00 -6.008098597272616e+00 3.496370989524164e+00 4.707054763036824e+00 9.241895593987210e+03 + 166320 8.980946262365008e-01 -5.924239694071879e+00 -5.981527661669339e+00 4.069634023932797e+00 4.740677648703849e+00 9.160443142450125e+03 + 166340 9.803097422697198e-01 -6.052039970201533e+00 -6.034627058876715e+00 3.344833750994691e+00 4.444821382461113e+00 9.323651574189877e+03 + 166360 9.621337593517958e-01 -6.028690771817849e+00 -6.021025481531747e+00 3.514417836653004e+00 4.558433119675643e+00 9.281714657807030e+03 + 166380 1.018722453043519e+00 -6.114153949597096e+00 -5.992759052536343e+00 3.078965751775217e+00 4.776034036497668e+00 9.194839674395589e+03 + 166400 9.408289358595047e-01 -5.997622779727496e+00 -6.017494690752390e+00 3.661195904868232e+00 4.547088316594998e+00 9.270830466725287e+03 + 166420 9.566200810122690e-01 -6.017519729330752e+00 -5.972826693219920e+00 3.614882932911116e+00 4.871517262484501e+00 9.133810381533072e+03 + 166440 9.448289404782083e-01 -5.988921341645425e+00 -6.049652361129952e+00 3.699354681435433e+00 4.350627769460390e+00 9.370104144652429e+03 + 166460 9.714069360399427e-01 -6.013318248930421e+00 -6.036075302816402e+00 3.601595253259851e+00 4.470920728203845e+00 9.328135562974447e+03 + 166480 1.013357361065510e+00 -6.058340115972192e+00 -5.982558542292470e+00 3.423879936991908e+00 4.859029460221498e+00 9.163565378841517e+03 + 166500 9.703128896339069e-01 -5.972296823807082e+00 -5.991084258028825e+00 3.834051437987631e+00 4.726171083340333e+00 9.189689902987575e+03 + 166520 9.571751637558621e-01 -5.926173922930206e+00 -6.000008126687392e+00 4.052101487088195e+00 4.628134063308322e+00 9.217076384433414e+03 + 166540 1.039880114046356e+00 -6.013219898585210e+00 -6.030854401147799e+00 3.597795979334305e+00 4.496535936689469e+00 9.312005740095510e+03 + 166560 1.041390106611749e+00 -5.980506430579786e+00 -6.014342437570929e+00 3.758449286306154e+00 4.564157698057852e+00 9.261135439803022e+03 + 166580 1.110460555318594e+00 -6.054338678341166e+00 -5.973471478150576e+00 3.350850383747578e+00 4.815202361400731e+00 9.135817473272567e+03 + 166600 1.061221099922338e+00 -5.958097725723356e+00 -5.996303464918835e+00 3.979711584577955e+00 4.760328317798485e+00 9.205677454533614e+03 + 166620 1.043716709224948e+00 -5.913166465421947e+00 -5.984463416776052e+00 4.189183330385278e+00 4.779785202542445e+00 9.169393461271482e+03 + 166640 1.028057032987457e+00 -5.875412435130477e+00 -6.066643490439782e+00 4.284945193655410e+00 4.186866881159212e+00 9.422750810508847e+03 + 166660 1.037168389036773e+00 -5.881768157210791e+00 -6.013388620994963e+00 4.327156555120002e+00 4.571371483870342e+00 9.258189848752347e+03 + 166680 1.050877531331690e+00 -5.903974277614931e+00 -6.009529490624907e+00 4.210561224669931e+00 4.604446856950228e+00 9.246326082804910e+03 + 166700 1.025596187429537e+00 -5.876562636174276e+00 -6.034124136485524e+00 4.296264453750373e+00 4.391521936399816e+00 9.322105014156095e+03 + 166720 1.138393992090791e+00 -6.064965945319823e+00 -5.944471505844042e+00 3.366046022779667e+00 5.057943740703850e+00 9.047378999948754e+03 + 166740 9.686668918353576e-01 -5.847351708554185e+00 -5.979442814730794e+00 4.538173140194328e+00 4.779685567495624e+00 9.154002767234599e+03 + 166760 9.985051542472910e-01 -5.937324419906267e+00 -5.947767401627976e+00 4.035573107152253e+00 4.975607890060003e+00 9.057375388576269e+03 + 166780 1.003825264929499e+00 -6.003858588798810e+00 -5.974483602863861e+00 3.665147942703196e+00 4.833823657706055e+00 9.138875650980375e+03 + 166800 9.576300552377509e-01 -5.992491253671163e+00 -5.976383750357904e+00 3.802107063050104e+00 4.894598839702923e+00 9.144672094975796e+03 + 166820 1.002434333289818e+00 -6.101736914368355e+00 -5.958256418346563e+00 3.142448790310936e+00 4.966336002003064e+00 9.089370518746031e+03 + 166840 9.620779427723199e-01 -6.064745723709705e+00 -6.013682420761530e+00 3.330506617587796e+00 4.623720005136809e+00 9.259101432003305e+03 + 166860 1.003489299029601e+00 -6.138423350988524e+00 -5.961156248787313e+00 2.973281599235478e+00 4.991176732070238e+00 9.098213745398043e+03 + 166880 9.775316476436242e-01 -6.104764934486347e+00 -5.962355934443709e+00 3.172862157272285e+00 4.990596673238647e+00 9.101851307250265e+03 + 166900 9.403452259315485e-01 -6.046782522773098e+00 -5.985600665315387e+00 3.436721083735883e+00 4.788036777119903e+00 9.172881170875033e+03 + 166920 9.330254618684513e-01 -6.027612092860740e+00 -5.968457798859585e+00 3.555460320774836e+00 4.895133431026878e+00 9.120486251690278e+03 + 166940 9.586002465029356e-01 -6.051849792598676e+00 -5.985330337645550e+00 3.375706187971280e+00 4.757671192164517e+00 9.172096025760129e+03 + 166960 9.714061394774155e-01 -6.051723602416153e+00 -6.011787809695470e+00 3.400945690097849e+00 4.630263191943966e+00 9.253293015434305e+03 + 166980 1.019945844436534e+00 -6.103703868024522e+00 -5.986513843317903e+00 3.173860129992980e+00 4.846783386956098e+00 9.175706903226654e+03 + 167000 9.967567792874311e-01 -6.047763846288339e+00 -5.991061166911404e+00 3.462402439496906e+00 4.787997999190540e+00 9.189639774144065e+03 + 167020 1.001113670401895e+00 -6.031482839549992e+00 -6.017827023640234e+00 3.566658016387454e+00 4.645071824571965e+00 9.271848884138444e+03 + 167040 1.033707594470653e+00 -6.055774237017538e+00 -5.999685247344539e+00 3.416963017203707e+00 4.739034675649163e+00 9.216069825992030e+03 + 167060 1.026573680350488e+00 -6.022847994290831e+00 -5.980262760583542e+00 3.559897142885866e+00 4.804428144876740e+00 9.156582554288751e+03 + 167080 1.011831074564014e+00 -5.980435038606925e+00 -5.987953446405372e+00 3.845386817181125e+00 4.802214956132593e+00 9.180097213675272e+03 + 167100 1.096561454948223e+00 -6.087185408061775e+00 -6.003559779106312e+00 3.277212703984756e+00 4.757404006471281e+00 9.227988337753650e+03 + 167120 1.053694923563616e+00 -6.008189606156913e+00 -6.019876518075974e+00 3.656401445980805e+00 4.589293389197783e+00 9.278174192650242e+03 + 167140 9.814194498957651e-01 -5.890448412965628e+00 -6.035489537953167e+00 4.310147699608074e+00 4.477299114888070e+00 9.326317698517538e+03 + 167160 1.066819568770250e+00 -6.009257807432592e+00 -6.028859181819357e+00 3.669805579296161e+00 4.557251454264474e+00 9.305867925104201e+03 + 167180 1.064085605237366e+00 -6.003681019543407e+00 -6.038769751407557e+00 3.661338721583927e+00 4.459853793256275e+00 9.336458148533913e+03 + 167200 1.037627159819815e+00 -5.968254707061046e+00 -6.003017113251405e+00 3.869776631791377e+00 4.670165515981368e+00 9.226315668885503e+03 + 167220 9.834626937560229e-01 -5.896575693161480e+00 -6.082680103988425e+00 4.216741077319478e+00 4.148100750786660e+00 9.472603496475551e+03 + 167240 9.832837858535851e-01 -5.913697111999280e+00 -6.040728527885348e+00 4.155941018939332e+00 4.426506970873456e+00 9.342480551619055e+03 + 167260 1.040088384177310e+00 -6.025510347719773e+00 -5.990656684251925e+00 3.551109864833161e+00 4.751244994052536e+00 9.188389527874853e+03 + 167280 1.037757888713675e+00 -6.064157491568846e+00 -5.969358847555505e+00 3.398308668201893e+00 4.942657152169242e+00 9.123245328698647e+03 + 167300 9.593723770729133e-01 -6.000702405496546e+00 -5.989845340167843e+00 3.689198952952725e+00 4.751541902195570e+00 9.185910485001827e+03 + 167320 9.998361980444108e-01 -6.108305917284426e+00 -5.951004853828296e+00 3.143637720820341e+00 5.046884769446338e+00 9.067251309766254e+03 + 167340 9.112913740603147e-01 -6.015697731156003e+00 -5.966930834496928e+00 3.665225458122509e+00 4.945252525391783e+00 9.115816361494381e+03 + 167360 9.563823307781835e-01 -6.108250637640312e+00 -5.976352613329128e+00 3.127314517998898e+00 4.884693384747010e+00 9.144602177819317e+03 + 167380 9.311146007781271e-01 -6.084143989975370e+00 -5.991676589713742e+00 3.222764767390947e+00 4.753726888977164e+00 9.191525814340639e+03 + 167400 9.507028892241529e-01 -6.117153403416495e+00 -5.969471983277300e+00 3.108804237696396e+00 4.956813805761559e+00 9.123589335260520e+03 + 167420 9.296182230122145e-01 -6.081578044092806e+00 -5.980311394244137e+00 3.279571697146591e+00 4.861060471541068e+00 9.156724538785918e+03 + 167440 9.102224246456192e-01 -6.040783489802114e+00 -6.004598076194632e+00 3.456468238631792e+00 4.664250483240612e+00 9.231185621095112e+03 + 167460 1.005427905469429e+00 -6.165806495040464e+00 -5.957583484314961e+00 2.856044963808080e+00 5.051693713800690e+00 9.087324215569588e+03 + 167480 9.214599244554507e-01 -6.020481279917561e+00 -6.038276589420587e+00 3.536302341804785e+00 4.434118920823167e+00 9.334935704158399e+03 + 167500 9.348585986479099e-01 -6.018159720045126e+00 -6.033936638250783e+00 3.547575545395710e+00 4.456982039588625e+00 9.321541271075021e+03 + 167520 9.468031239634074e-01 -6.012373296623038e+00 -5.981267347845003e+00 3.616229626853679e+00 4.794844798367171e+00 9.159619881502626e+03 + 167540 1.012826515723096e+00 -6.085123355415104e+00 -5.937411062466097e+00 3.244630145371254e+00 5.092816989887908e+00 9.025901962336189e+03 + 167560 1.022615022816148e+00 -6.073775262749619e+00 -5.995529587885822e+00 3.270364219495986e+00 4.719662993042959e+00 9.203336316279376e+03 + 167580 9.993960094877274e-01 -6.019603275470510e+00 -5.997629481902055e+00 3.599467808128003e+00 4.725644731231634e+00 9.209768861862360e+03 + 167600 9.990844069406728e-01 -6.001219713077002e+00 -5.987700840185054e+00 3.732464436550246e+00 4.810091896734630e+00 9.179322312900817e+03 + 167620 9.881750620881449e-01 -5.971237270207006e+00 -5.980372768008182e+00 3.880333548040924e+00 4.827876105952851e+00 9.156870609449463e+03 + 167640 1.033437731621355e+00 -6.025582412873549e+00 -5.965097915129141e+00 3.632481730141118e+00 4.979793076135282e+00 9.110202331863458e+03 + 167660 1.009233072297676e+00 -5.979930226926234e+00 -6.004270274939434e+00 3.813377533736998e+00 4.673613211434946e+00 9.230179699124590e+03 + 167680 1.014657939906897e+00 -5.982540545330568e+00 -6.018193656450469e+00 3.791742487342926e+00 4.587016805991334e+00 9.273012169714779e+03 + 167700 1.006325735085429e+00 -5.968928462868825e+00 -5.987545910151798e+00 3.835612721842244e+00 4.728708458502759e+00 9.178863362613936e+03 + 167720 1.016891959626797e+00 -5.982743835991818e+00 -5.982879697282100e+00 3.794147622689979e+00 4.793367486136711e+00 9.164569118280913e+03 + 167740 1.050943833020899e+00 -6.031954269919368e+00 -5.995229609466750e+00 3.535717486609272e+00 4.746596170051044e+00 9.202420881140461e+03 + 167760 1.023572763326777e+00 -5.992370845458000e+00 -6.043743888341522e+00 3.719480086977578e+00 4.424488124787699e+00 9.351835973940371e+03 + 167780 1.039307026921117e+00 -6.021684527878901e+00 -6.005139313942886e+00 3.606205218017199e+00 4.701210396801380e+00 9.232833839312536e+03 + 167800 1.017221214268295e+00 -5.998056631095202e+00 -6.016991753724259e+00 3.667249633242073e+00 4.558521228905269e+00 9.269292557514043e+03 + 167820 9.634952856818766e-01 -5.927891552712405e+00 -6.030225527901367e+00 4.062517081578475e+00 4.474899559911976e+00 9.310073127198380e+03 + 167840 9.611412882551429e-01 -5.935516326584742e+00 -5.989681853048115e+00 4.033608110711751e+00 4.722581275670938e+00 9.185388297042371e+03 + 167860 1.062970337739529e+00 -6.097131995895975e+00 -5.952988719358926e+00 3.163250550260106e+00 4.990943550235797e+00 9.073296329290666e+03 + 167880 9.864761583829662e-01 -5.997219812008232e+00 -5.976622999775326e+00 3.651471163629979e+00 4.769741246817717e+00 9.145423920459418e+03 + 167900 1.052037809857959e+00 -6.113590631902396e+00 -5.969237227455555e+00 3.063909855225909e+00 4.892809442176818e+00 9.122854033141546e+03 + 167920 9.410337240472494e-01 -5.973960372523970e+00 -5.997763204791343e+00 3.798310333560688e+00 4.661630787205042e+00 9.210189009433443e+03 + 167940 9.334714260198247e-01 -5.996387844177987e+00 -5.990889118186077e+00 3.715123623861683e+00 4.746698159432324e+00 9.189110282068155e+03 + 167960 9.379568128956154e-01 -6.043985794408927e+00 -6.003745201518966e+00 3.446704058289647e+00 4.677771769875426e+00 9.228559916857446e+03 + 167980 9.948006081814911e-01 -6.171292492708036e+00 -5.953536045499912e+00 2.798647331583942e+00 5.049038549154292e+00 9.074982762220727e+03 + 168000 9.383895196821082e-01 -6.123023103533602e+00 -5.974311067782224e+00 3.099347962826321e+00 4.953275485223891e+00 9.138370731796069e+03 + 168020 9.413189404896527e-01 -6.153926622760743e+00 -5.996017789379167e+00 2.816553687026450e+00 4.723290644616451e+00 9.204863316945160e+03 + 168040 9.138411771542604e-01 -6.130115886871891e+00 -5.974274415776335e+00 3.050679520124919e+00 4.945545363545319e+00 9.138251230288608e+03 + 168060 9.150638139918201e-01 -6.137915688828189e+00 -5.981592241086162e+00 2.943264619962643e+00 4.840898047872718e+00 9.160612146307951e+03 + 168080 8.884086520784776e-01 -6.094065717293469e+00 -5.956114740199460e+00 3.218922103706161e+00 5.011057962024669e+00 9.082813403826252e+03 + 168100 9.568459313697452e-01 -6.179843243044539e+00 -5.943902373087063e+00 2.692468472422336e+00 5.047277459449788e+00 9.045662948397752e+03 + 168120 9.258550952280904e-01 -6.106812940434820e+00 -5.983565544930765e+00 3.174615047729296e+00 4.882320665186398e+00 9.166668341425264e+03 + 168140 8.710843280929065e-01 -5.993115729716971e+00 -5.987596959319970e+00 3.768628205066208e+00 4.800317838712745e+00 9.178997996944228e+03 + 168160 8.868751785135580e-01 -5.977432275098972e+00 -5.990717213353087e+00 3.819295053850280e+00 4.743010882557600e+00 9.188562503514549e+03 + 168180 9.495499787711148e-01 -6.032549112945284e+00 -5.991359961556847e+00 3.483695351256405e+00 4.720209832529388e+00 9.190561861200749e+03 + 168200 9.711189070062899e-01 -6.033822396908478e+00 -6.010617352543587e+00 3.517462301639646e+00 4.650709257351864e+00 9.249673740625323e+03 + 168220 1.003721390505510e+00 -6.060650574577572e+00 -5.974897197552052e+00 3.395781768218215e+00 4.888190929390958e+00 9.140148819128683e+03 + 168240 9.921659939967847e-01 -6.027007408864042e+00 -6.006603829008624e+00 3.570786951933661e+00 4.687947464907252e+00 9.237333005803357e+03 + 168260 1.000246360206373e+00 -6.026349680580876e+00 -6.006252953513782e+00 3.559383337588293e+00 4.674781854366011e+00 9.236259104583927e+03 + 168280 1.008233692176989e+00 -6.027731159384143e+00 -5.997791763447743e+00 3.572661727179475e+00 4.744578371752834e+00 9.210277207963347e+03 + 168300 9.621854149723802e-01 -5.948119970464739e+00 -6.004734526378185e+00 3.986048769565755e+00 4.660959228436536e+00 9.231580038568241e+03 + 168320 1.023853663869215e+00 -6.029207644781547e+00 -5.966074547732816e+00 3.577358309881812e+00 4.939878322950816e+00 9.113192112101315e+03 + 168340 1.053917179915700e+00 -6.062741642677145e+00 -5.962402125173819e+00 3.364421295899963e+00 4.940586332894215e+00 9.101982712327152e+03 + 168360 1.029005272475812e+00 -6.016159644350546e+00 -5.986284732953273e+00 3.617362984605689e+00 4.788909348976432e+00 9.174971344482918e+03 + 168380 1.026929089176922e+00 -6.003097605967356e+00 -5.974828809138337e+00 3.759490105572481e+00 4.921813911546881e+00 9.139926402477027e+03 + 168400 1.008977971873487e+00 -5.965833980491781e+00 -6.026580291268949e+00 3.877247785931973e+00 4.528433068988258e+00 9.298825978495370e+03 + 168420 1.053684305851986e+00 -6.023082992815064e+00 -6.021616071862441e+00 3.573922481932552e+00 4.582345769047794e+00 9.283544685254130e+03 + 168440 1.031884094789772e+00 -5.986090407020926e+00 -5.993449941898679e+00 3.800265316004946e+00 4.758005727852547e+00 9.196966796631108e+03 + 168460 9.852226694937535e-01 -5.914640901710015e+00 -6.041743802772221e+00 4.123735919728253e+00 4.393891392718698e+00 9.345636496870862e+03 + 168480 1.087733441728491e+00 -6.067045724319438e+00 -5.986452415965427e+00 3.413139903547838e+00 4.875919151890731e+00 9.175509158970042e+03 + 168500 1.018248840164626e+00 -5.968303946737057e+00 -6.041838198039556e+00 3.901405699918016e+00 4.479160649550458e+00 9.345925124012176e+03 + 168520 1.075458784627423e+00 -6.064266385903880e+00 -5.996644518884498e+00 3.354077574679680e+00 4.742372799555074e+00 9.206743186076998e+03 + 168540 9.740503181344710e-01 -5.930696933678960e+00 -5.974510939922792e+00 4.128504784024946e+00 4.876917979977313e+00 9.138960757023553e+03 + 168560 9.657549858354950e-01 -5.940597826872752e+00 -5.999192480457107e+00 3.990182226091908e+00 4.653722657717206e+00 9.214566662937335e+03 + 168580 9.546383909295242e-01 -5.950356871217194e+00 -5.990439596292282e+00 3.988777926727522e+00 4.758616716564712e+00 9.187685846984223e+03 + 168600 9.669023417219762e-01 -5.998169238841697e+00 -6.012063292022248e+00 3.720833870846353e+00 4.641052067385846e+00 9.254089835689538e+03 + 168620 9.710216343082106e-01 -6.034270384132317e+00 -5.978043320457503e+00 3.547391325588189e+00 4.870255826318957e+00 9.149775269086114e+03 + 168640 9.548061451664647e-01 -6.037803593325010e+00 -6.009348685434089e+00 3.482114250486965e+00 4.645506734979397e+00 9.245779633429325e+03 + 168660 9.576729819040480e-01 -6.068018929987289e+00 -6.021783345104843e+00 3.318737722972347e+00 4.584229606300985e+00 9.284047177407992e+03 + 168680 9.816024318843886e-01 -6.127703062844926e+00 -5.977757616418001e+00 2.973665118986230e+00 4.834675076352481e+00 9.148924562988219e+03 + 168700 9.150111041469448e-01 -6.046027606280883e+00 -6.013849876035446e+00 3.440238356832352e+00 4.625007863389309e+00 9.259600785805618e+03 + 168720 8.908934561568038e-01 -6.020233464252655e+00 -5.997013760333375e+00 3.616908588533875e+00 4.750239721675951e+00 9.207875310320878e+03 + 168740 9.200818731898882e-01 -6.066392186006778e+00 -5.975831372734131e+00 3.326421234155162e+00 4.846435438207265e+00 9.143006813505430e+03 + 168760 9.259493374979539e-01 -6.069402511272567e+00 -5.970770792695657e+00 3.329512074345840e+00 4.895870665623574e+00 9.127530954501777e+03 + 168780 9.563818994058654e-01 -6.098565678759384e+00 -5.975729840801327e+00 3.088512971994952e+00 4.793855362334609e+00 9.142705355536891e+03 + 168800 9.895988455251853e-01 -6.120270106418423e+00 -5.966495169751097e+00 3.010835218033764e+00 4.893834700972095e+00 9.114494578116932e+03 + 168820 8.904207109799234e-01 -5.933774374506596e+00 -6.003238613028914e+00 4.046009779253557e+00 4.647135372102235e+00 9.226979361544551e+03 + 168840 1.021475991046943e+00 -6.078709519679041e+00 -5.970942665809279e+00 3.296145779034523e+00 4.914959730821439e+00 9.128060530252958e+03 + 168860 1.007655779841924e+00 -6.003706244223635e+00 -6.034397125900093e+00 3.649544981442411e+00 4.473313189457599e+00 9.322960071461235e+03 + 168880 9.682603913858385e-01 -5.905828358063924e+00 -6.047929262256256e+00 4.198315802958135e+00 4.382350421041908e+00 9.364791756572688e+03 + 168900 1.036551256798434e+00 -5.985065890091158e+00 -6.018953877582488e+00 3.806273184514593e+00 4.611683116190257e+00 9.275327694434283e+03 + 168920 1.009792724936917e+00 -5.933897761473536e+00 -6.023027112055599e+00 3.987468277193405e+00 4.475673753428771e+00 9.287879260354513e+03 + 168940 1.042526314606135e+00 -5.977525561089611e+00 -6.039338781828504e+00 3.812557982951335e+00 4.457616903903617e+00 9.338180956516635e+03 + 168960 9.912492024317425e-01 -5.900963974162535e+00 -6.017162275934007e+00 4.188479309170055e+00 4.521250678769172e+00 9.269807087838246e+03 + 168980 1.061410575942813e+00 -6.006548959964072e+00 -6.030150070656759e+00 3.685533657815345e+00 4.550012427957860e+00 9.309824080215629e+03 + 169000 1.080985460187876e+00 -6.042753678448036e+00 -6.011864382803369e+00 3.453888062287601e+00 4.631259177982336e+00 9.253517986685900e+03 + 169020 1.033638719948892e+00 -5.985789553842850e+00 -6.034942283257405e+00 3.749638935939329e+00 4.467396357280659e+00 9.324597778040294e+03 + 169040 1.000379080094399e+00 -5.951628635772606e+00 -5.995185093438185e+00 3.997419446924790e+00 4.747311526668989e+00 9.202274511619285e+03 + 169060 1.039150676148027e+00 -6.025518074332592e+00 -6.010269875863942e+00 3.568077693997275e+00 4.655635209255350e+00 9.248617804825160e+03 + 169080 1.030619402876652e+00 -6.032638472950861e+00 -6.016036651012687e+00 3.491614691630834e+00 4.586944922323469e+00 9.266379507801366e+03 + 169100 9.950484197391044e-01 -6.002315518126736e+00 -6.009158598343881e+00 3.698292025024159e+00 4.658997999454071e+00 9.245192530279157e+03 + 169120 1.003887602339846e+00 -6.037590050919004e+00 -5.978368502684877e+00 3.564882009057151e+00 4.904941303522476e+00 9.150762572145253e+03 + 169140 1.059468915878609e+00 -6.142155117325781e+00 -5.944840150445326e+00 2.949364653201345e+00 5.082377727421362e+00 9.048525251287339e+03 + 169160 9.991555581882451e-01 -6.072471246424792e+00 -5.994126251195656e+00 3.397623095690538e+00 4.847492182145063e+00 9.199036778577145e+03 + 169180 9.694489570831617e-01 -6.045523255722547e+00 -5.992547956676155e+00 3.515447572932870e+00 4.819639937958287e+00 9.194190024250112e+03 + 169200 9.898417446870906e-01 -6.090344309066446e+00 -5.964969267326335e+00 3.241216711180919e+00 4.961139602577640e+00 9.109824912184633e+03 + 169220 9.620952516347171e-01 -6.059771906115283e+00 -5.966687124554939e+00 3.389823876920818e+00 4.924331097463703e+00 9.115055674271365e+03 + 169240 9.694654039818967e-01 -6.076208074357113e+00 -5.974944192440557e+00 3.288786430952067e+00 4.870259311452013e+00 9.140304694149445e+03 + 169260 9.734106108900487e-01 -6.084199309027094e+00 -5.994666209301532e+00 3.296835846444939e+00 4.810948760271522e+00 9.200642893491869e+03 + 169280 9.325223631875836e-01 -6.021453369980403e+00 -6.011600779158541e+00 3.600810198341237e+00 4.657385299523871e+00 9.252693721073181e+03 + 169300 9.609681009651780e-01 -6.053646828352426e+00 -6.012370946631914e+00 3.403540760576754e+00 4.640553260837986e+00 9.255077262143581e+03 + 169320 9.880126012820191e-01 -6.071846744778904e+00 -6.026053332303361e+00 3.266362035464952e+00 4.529314896407201e+00 9.297208384230673e+03 + 169340 9.251030700560248e-01 -5.943213281720544e+00 -6.006876810964818e+00 4.008699380601946e+00 4.643133543782013e+00 9.238158851077211e+03 + 169360 9.688463638493808e-01 -5.960694619686832e+00 -5.989847502295073e+00 3.932118634266373e+00 4.764718270935846e+00 9.185881095311350e+03 + 169380 1.035632126802773e+00 -6.006136279078014e+00 -6.020563950865945e+00 3.678800638191140e+00 4.595954714109844e+00 9.280284680271569e+03 + 169400 1.031948963252832e+00 -5.954238853048322e+00 -6.046082004288253e+00 3.926299905442797e+00 4.398922318341387e+00 9.359059697959192e+03 + 169420 9.836899199891413e-01 -5.851578297127750e+00 -6.051752812348653e+00 4.458339986860842e+00 4.308906943556298e+00 9.376574989437635e+03 + 169440 9.975989847946768e-01 -5.851987778500742e+00 -6.044531869115407e+00 4.490589197960336e+00 4.384971233549204e+00 9.354189126083489e+03 + 169460 1.088849002527564e+00 -5.974482012198449e+00 -5.999240928785714e+00 3.871613515039481e+00 4.729443984565444e+00 9.214712217733657e+03 + 169480 1.039575963639487e+00 -5.897321788403902e+00 -6.014872887236861e+00 4.260614159269900e+00 4.585617558797295e+00 9.262726929984759e+03 + 169500 1.111737693690222e+00 -6.008977241299908e+00 -5.952071362752218e+00 3.658420616128578e+00 4.985182976905660e+00 9.070500824880033e+03 + 169520 1.100718096168355e+00 -6.001278220080768e+00 -5.989587378913010e+00 3.696965381134939e+00 4.764096000272033e+00 9.185107543196527e+03 + 169540 1.006406421064793e+00 -5.878849435339262e+00 -6.042215239183952e+00 4.274083078911200e+00 4.336011352458549e+00 9.347107881399956e+03 + 169560 1.071437048711733e+00 -6.000820453001209e+00 -5.996058448253518e+00 3.685803148557329e+00 4.713147316736425e+00 9.204933104764525e+03 + 169580 9.767551306375043e-01 -5.887782617852316e+00 -6.029480947960923e+00 4.220441645817146e+00 4.406787906587804e+00 9.307719869210190e+03 + 169600 1.095865946743768e+00 -6.093194537847676e+00 -5.952355747706914e+00 3.218671676415595e+00 5.027389804136186e+00 9.071369844141205e+03 + 169620 9.922102926649395e-01 -5.969753283157125e+00 -6.005111323316995e+00 3.905833587204286e+00 4.702802248967283e+00 9.232741400903531e+03 + 169640 1.027886943769917e+00 -6.051936125447833e+00 -5.996677563830591e+00 3.401263846097801e+00 4.718567058138779e+00 9.206866287587252e+03 + 169660 1.015270687207266e+00 -6.060216336731480e+00 -6.003685123244937e+00 3.366104040975069e+00 4.690715016991810e+00 9.228383429377704e+03 + 169680 9.583584552526668e-01 -5.997648166539186e+00 -5.993415346087563e+00 3.734693699994446e+00 4.758999210054516e+00 9.196831422150062e+03 + 169700 8.814374183560253e-01 -5.896709484400326e+00 -6.017569080704042e+00 4.204999834971860e+00 4.511005330033844e+00 9.271057918955123e+03 + 169720 1.002354447126447e+00 -6.083451542134706e+00 -5.960775780241400e+00 3.241668375158200e+00 4.946091583962364e+00 9.097025019061424e+03 + 169740 9.800100549066005e-01 -6.052537389145223e+00 -5.961235767598550e+00 3.446135878630047e+00 4.970403918431314e+00 9.098428644750000e+03 + 169760 9.399023376703267e-01 -5.990741989306374e+00 -6.024191677897829e+00 3.689128627740699e+00 4.497055339525989e+00 9.291469720768617e+03 + 169780 9.992416801208411e-01 -6.075068614256406e+00 -5.998050229516107e+00 3.273667353631898e+00 4.715918837367217e+00 9.211070430953154e+03 + 169800 9.823309347586578e-01 -6.044285304883560e+00 -6.002670626346523e+00 3.429936262357627e+00 4.668894186367982e+00 9.225259625188341e+03 + 169820 9.661372734507073e-01 -6.013513597967610e+00 -5.996039437741839e+00 3.588767163371952e+00 4.689106495505887e+00 9.204902023562327e+03 + 169840 9.016075617759874e-01 -5.908695576683233e+00 -6.001794456188049e+00 4.215078456682802e+00 4.680490283561105e+00 9.222545242346599e+03 + 169860 9.984263155824883e-01 -6.040231351148529e+00 -6.019906904910684e+00 3.422213355966835e+00 4.538919471462437e+00 9.278268787473553e+03 + 169880 9.750401159914284e-01 -5.993476449682745e+00 -6.025010455226798e+00 3.687548345755095e+00 4.506475206049553e+00 9.294002227376619e+03 + 169900 9.906153955373167e-01 -6.007525773419571e+00 -5.977957571158984e+00 3.688377370256769e+00 4.858162563301574e+00 9.149487915154841e+03 + 169920 1.010931329067255e+00 -6.028366839983063e+00 -5.985135101501476e+00 3.584065158539265e+00 4.832308490990444e+00 9.171455644613499e+03 + 169940 1.002171630692229e+00 -6.006583708615265e+00 -6.003972312255345e+00 3.649562003785862e+00 4.664557045796801e+00 9.229259032828717e+03 + 169960 1.009528245738229e+00 -6.011197381598198e+00 -5.958334246806613e+00 3.594621046798536e+00 4.898169347315488e+00 9.089593722029183e+03 + 169980 9.934678395553863e-01 -5.981057860098879e+00 -6.018821763945614e+00 3.769432315109447e+00 4.552586135276259e+00 9.274924280096493e+03 + 170000 9.643797590840050e-01 -5.932363202079293e+00 -6.008258965178160e+00 4.106875170895925e+00 4.671069954350852e+00 9.242404644298567e+03 + 170020 1.034868216782194e+00 -6.032832202611027e+00 -5.938802289129314e+00 3.560482655974604e+00 5.100416970268686e+00 9.030098795312973e+03 + 170040 9.660772565341149e-01 -5.926740983854126e+00 -5.988774330421126e+00 4.092689775017770e+00 4.736484699400699e+00 9.182599000702623e+03 + 170060 9.424347095776406e-01 -5.887313267937267e+00 -6.061546610968998e+00 4.314178110859880e+00 4.313703292648984e+00 9.406935737568021e+03 + 170080 9.932186417945106e-01 -5.961442117530333e+00 -6.023825234756191e+00 3.942404046046826e+00 4.584190533179761e+00 9.290325596068200e+03 + 170100 1.026179274678806e+00 -6.009935630093080e+00 -6.020782311072656e+00 3.667324372087532e+00 4.605041051384348e+00 9.280956340620338e+03 + 170120 1.025539165060953e+00 -6.011080571102890e+00 -6.021540158373923e+00 3.696624025587909e+00 4.636563456861741e+00 9.283284643520172e+03 + 170140 9.795577687366973e-01 -5.947343844031010e+00 -6.031585610100498e+00 3.941189064660740e+00 4.457459807518569e+00 9.314244262366035e+03 + 170160 1.056700176049770e+00 -6.064584031531657e+00 -5.987062967781903e+00 3.405527222646565e+00 4.850665167043505e+00 9.177369951902667e+03 + 170180 1.025528614600322e+00 -6.022838550203346e+00 -5.998144099943062e+00 3.566804654287117e+00 4.708604009135495e+00 9.211385509496413e+03 + 170200 1.028045498652423e+00 -6.033247267885280e+00 -6.015680740013789e+00 3.510471445515627e+00 4.611341166965135e+00 9.265248284931880e+03 + 170220 9.661324631078133e-01 -5.947283602819051e+00 -6.006738495231341e+00 4.012134447859003e+00 4.670735255012774e+00 9.237738630272956e+03 + 170240 9.228527648445937e-01 -5.886678427627704e+00 -5.997270572657571e+00 4.377074162350583e+00 4.742036951509951e+00 9.208652394419651e+03 + 170260 9.916406128709299e-01 -5.990699385039692e+00 -5.972784592791598e+00 3.815034786713130e+00 4.917904296106828e+00 9.133664354607054e+03 + 170280 1.012434846524056e+00 -6.022223298197826e+00 -5.986792758879913e+00 3.563599777753468e+00 4.767047417375163e+00 9.176556912911527e+03 + 170300 1.017852840109710e+00 -6.031417448984766e+00 -6.003829987869699e+00 3.502768896111980e+00 4.661180366980505e+00 9.228822571187291e+03 + 170320 9.901453144353372e-01 -5.993341882671093e+00 -6.001568622875125e+00 3.705228928798038e+00 4.657989713462553e+00 9.221861274424569e+03 + 170340 1.009375110835687e+00 -6.022748591971467e+00 -5.957271224475421e+00 3.564536631014192e+00 4.940517807766364e+00 9.086343635334411e+03 + 170360 9.863401621134336e-01 -5.987148740973277e+00 -5.997851734300003e+00 3.791410111972408e+00 4.729951868007485e+00 9.210453897530228e+03 + 170380 1.055373474286365e+00 -6.087619729054341e+00 -5.968732762980673e+00 3.318818250890247e+00 5.001485607783788e+00 9.121315807436826e+03 + 170400 9.896899386518493e-01 -5.988357165202401e+00 -6.024364670483925e+00 3.736977937466862e+00 4.530217269996920e+00 9.291972387291231e+03 + 170420 9.813420049202334e-01 -5.973513648178885e+00 -6.032540223669620e+00 3.873729482259483e+00 4.534789751458650e+00 9.317211633673163e+03 + 170440 1.008577676152275e+00 -6.008764747465349e+00 -6.011390306258970e+00 3.694979350016443e+00 4.679902985119566e+00 9.252051209349764e+03 + 170460 9.793866655886480e-01 -5.960251486398899e+00 -6.042209735009721e+00 3.885680479105672e+00 4.415063532584351e+00 9.347072524183268e+03 + 170480 9.734919413677160e-01 -5.945318800400297e+00 -5.987370239448702e+00 3.948461453454954e+00 4.706995582999855e+00 9.178303929476469e+03 + 170500 1.010955107718629e+00 -5.989934221086841e+00 -5.994445826990805e+00 3.772291925738952e+00 4.746385586469638e+00 9.199991944484978e+03 + 170520 1.049706059087194e+00 -6.036806301019123e+00 -5.951662253335695e+00 3.518748411324114e+00 5.007658709121150e+00 9.069256430846148e+03 + 170540 1.034838486846277e+00 -6.005243162761539e+00 -5.997800166680191e+00 3.655003335868053e+00 4.697742171167076e+00 9.210265608967711e+03 + 170560 1.007547177768787e+00 -5.955101768362383e+00 -5.994907638220459e+00 3.915346504227887e+00 4.686775039564367e+00 9.201406273564053e+03 + 170580 1.055546324415076e+00 -6.017990336722996e+00 -5.949995026734666e+00 3.630288677427767e+00 5.020728269620978e+00 9.064163509887672e+03 + 170600 9.999773186418766e-01 -5.928009182464370e+00 -5.983553077265558e+00 4.075090082001987e+00 4.756148442663627e+00 9.166611330621965e+03 + 170620 1.006695466947057e+00 -5.930912313524150e+00 -6.007710872686597e+00 4.076396671756227e+00 4.635407460506834e+00 9.240728903099680e+03 + 170640 1.045450800674862e+00 -5.983928880697783e+00 -5.972923737009420e+00 3.798267680638328e+00 4.861460918737389e+00 9.134130832313947e+03 + 170660 1.057329688760471e+00 -5.999095871624740e+00 -6.007006674702184e+00 3.719911552067431e+00 4.674486496603929e+00 9.238563773052105e+03 + 170680 1.038355720335202e+00 -5.972294477682075e+00 -6.042562190004876e+00 3.878444804117965e+00 4.474956726067102e+00 9.348175524707411e+03 + 170700 1.082784500663266e+00 -6.048317627638418e+00 -6.013067405168802e+00 3.482512911242416e+00 4.684925143617246e+00 9.257200960009566e+03 + 170720 9.836398783554349e-01 -5.917365401802329e+00 -6.014685159306641e+00 4.145642143861292e+00 4.586817036087736e+00 9.262188786837280e+03 + 170740 9.884245069363407e-01 -5.942865941863843e+00 -6.017981934698451e+00 3.979808744151664e+00 4.548481089133023e+00 9.272317177238940e+03 + 170760 1.083769212845659e+00 -6.103566254457836e+00 -5.992120786612444e+00 3.113872139978044e+00 4.753809262476697e+00 9.192894777099840e+03 + 170780 1.018904968244766e+00 -6.033694929927331e+00 -6.001852837702122e+00 3.543325176560730e+00 4.726167397665725e+00 9.222744418901504e+03 + 170800 9.322317969823218e-01 -5.934005765197714e+00 -5.978914249511707e+00 4.073885149679052e+00 4.816013683182617e+00 9.152413123786735e+03 + 170820 9.734445940150313e-01 -6.018223589840959e+00 -5.972949752348622e+00 3.604869465405922e+00 4.864838846390631e+00 9.134170287763463e+03 + 170840 9.338396409762513e-01 -5.979801544081721e+00 -6.015846572445904e+00 3.776224791722167e+00 4.569248660904917e+00 9.265751839936718e+03 + 170860 1.007241636597744e+00 -6.104880698479732e+00 -5.976711871613114e+00 3.181747755375571e+00 4.917712993305553e+00 9.145679344939001e+03 + 170880 9.353007093559882e-01 -6.011752863793090e+00 -5.993927571834623e+00 3.624554063736940e+00 4.726909648617474e+00 9.198404742269644e+03 + 170900 8.669303148752174e-01 -5.919128904324069e+00 -5.975529144719998e+00 4.133650798059749e+00 4.809791889797334e+00 9.142062728849889e+03 + 170920 9.375900372207764e-01 -6.024542123916757e+00 -5.940338971672216e+00 3.578253569403636e+00 5.061761099987486e+00 9.034801652707298e+03 + 170940 9.224804326797671e-01 -5.994735668499260e+00 -5.998581416885013e+00 3.673606164830768e+00 4.651523282472129e+00 9.212698055469828e+03 + 170960 9.738488740015886e-01 -6.057406738970749e+00 -5.956570201441150e+00 3.435383102906228e+00 5.014402105804937e+00 9.084194463132757e+03 + 170980 9.827702327813992e-01 -6.048808287152438e+00 -5.984259562073184e+00 3.438909448451674e+00 4.809558216739676e+00 9.168774007716609e+03 + 171000 9.614423512938622e-01 -5.981990308498846e+00 -5.974995795590846e+00 3.811020523583601e+00 4.851184099098707e+00 9.140456850604076e+03 + 171020 9.341419167311333e-01 -5.896657692082381e+00 -6.021411496235404e+00 4.248442118340607e+00 4.532086469305148e+00 9.282867550791127e+03 + 171040 1.089763750808032e+00 -6.074887733031060e+00 -5.977868011709748e+00 3.322412666460733e+00 4.879514920041063e+00 9.149229325908907e+03 + 171060 1.044678018437807e+00 -5.961473579236479e+00 -6.016016163455745e+00 3.870466562664103e+00 4.557274603639446e+00 9.266279238112509e+03 + 171080 1.069231173015828e+00 -5.965719268980839e+00 -6.017941781443076e+00 3.805721243486496e+00 4.505851495520650e+00 9.272217741240036e+03 + 171100 1.025524496174299e+00 -5.884285867738590e+00 -6.046656458256355e+00 4.318655496230336e+00 4.386298438709649e+00 9.360830372647195e+03 + 171120 1.115871940338693e+00 -6.013897004910620e+00 -6.009492752754130e+00 3.593712485224819e+00 4.619002382663206e+00 9.246231919818452e+03 + 171140 9.997884202307962e-01 -5.844973782291404e+00 -6.067080061929643e+00 4.468658421282161e+00 4.193289792763696e+00 9.424131166529325e+03 + 171160 1.108098097226425e+00 -6.014010462478983e+00 -6.041129629152362e+00 3.588990246665126e+00 4.433267794949104e+00 9.343749309514262e+03 + 171180 1.045955267576649e+00 -5.937503359696183e+00 -6.026491980618074e+00 4.047895045488536e+00 4.536908613210460e+00 9.298544408561100e+03 + 171200 1.116229317824131e+00 -6.061229884228023e+00 -5.978284483423574e+00 3.373262078163369e+00 4.849547405341807e+00 9.150510840939558e+03 + 171220 1.035812631040356e+00 -5.965144065129761e+00 -6.018420223396846e+00 3.830947377845474e+00 4.525027432617026e+00 9.273701015607920e+03 + 171240 1.033854411005143e+00 -5.987474142654667e+00 -5.991106287462664e+00 3.759423089879033e+00 4.738566752318925e+00 9.189758291723963e+03 + 171260 9.670509209815820e-01 -5.911377559133582e+00 -5.991826532202758e+00 4.134444876835493e+00 4.672494424033936e+00 9.191973283630621e+03 + 171280 1.036671925235268e+00 -6.033269859382447e+00 -5.955537140355809e+00 3.537833449724508e+00 4.984186751474854e+00 9.081053940477766e+03 + 171300 9.927072009102836e-01 -5.982931278158822e+00 -6.014208475483221e+00 3.765310312369080e+00 4.585711805201737e+00 9.260716968593795e+03 + 171320 1.061415823148270e+00 -6.100119356264079e+00 -5.957006318452284e+00 3.129238250709453e+00 4.951015460495805e+00 9.085557308758733e+03 + 171340 9.969164359611890e-01 -6.018752584102920e+00 -5.957449922804393e+00 3.633630632531200e+00 4.985640000263516e+00 9.086873697315972e+03 + 171360 1.044004787694057e+00 -6.097923516113910e+00 -5.951652563471976e+00 3.213026306616766e+00 5.052936752043518e+00 9.069228989271547e+03 + 171380 1.014981139126053e+00 -6.062970687613119e+00 -5.988649879078780e+00 3.422530603249237e+00 4.849292186961367e+00 9.182231478711474e+03 + 171400 9.688600526909591e-01 -5.999908700079660e+00 -6.014189474997020e+00 3.702193532561448e+00 4.620191113043195e+00 9.260643730773270e+03 + 171420 9.607611520037407e-01 -5.990937031087308e+00 -6.005719117309654e+00 3.713768455126276e+00 4.628887428517118e+00 9.234591428973687e+03 + 171440 9.801590721344541e-01 -6.019389247016242e+00 -5.980641073382660e+00 3.596314592192450e+00 4.818812601456965e+00 9.157682909028850e+03 + 171460 9.837897527670453e-01 -6.021340905086048e+00 -5.971589994275901e+00 3.603394202424087e+00 4.889071631224519e+00 9.130040214543207e+03 + 171480 9.489604625291226e-01 -5.963223507142723e+00 -6.016459823620766e+00 3.879939466225578e+00 4.574248298715304e+00 9.267658791086538e+03 + 171500 1.038029574164246e+00 -6.084776312750206e+00 -6.022645959825747e+00 3.205475059020658e+00 4.562237160153944e+00 9.286706175235404e+03 + 171520 1.006568680396404e+00 -6.024784925648107e+00 -6.024256900674940e+00 3.600742330041794e+00 4.603774331149316e+00 9.291671351317202e+03 + 171540 9.972797754582072e-01 -5.991907218478854e+00 -6.039958420612166e+00 3.720141617121902e+00 4.444224178572926e+00 9.340108126787209e+03 + 171560 9.590660408209971e-01 -5.906420970528697e+00 -6.056011457953046e+00 4.181785770578569e+00 4.322814042734849e+00 9.389772062217142e+03 + 171580 1.015226474841625e+00 -5.947882389703611e+00 -6.025070445113712e+00 3.923061171321612e+00 4.479835412343835e+00 9.294153320384967e+03 + 171600 1.063859318783091e+00 -5.964229923437229e+00 -6.024654308972276e+00 3.876122677772234e+00 4.529156505386553e+00 9.292886394059598e+03 + 171620 1.093267583587449e+00 -5.954904443138620e+00 -5.992793868416239e+00 3.959613482032049e+00 4.742046538718348e+00 9.194947377596498e+03 + 171640 1.060179687644635e+00 -5.867020420577555e+00 -5.989292101513357e+00 4.422262538691510e+00 4.720159625276668e+00 9.184195436607362e+03 + 171660 1.084422288791476e+00 -5.877993881675875e+00 -6.025831763374813e+00 4.299047502046447e+00 4.450139507492891e+00 9.296472968430555e+03 + 171680 1.055594947371593e+00 -5.823576016010756e+00 -6.012949432264341e+00 4.633049851799982e+00 4.545638390230450e+00 9.256806394080702e+03 + 171700 1.035222907768172e+00 -5.792722407709438e+00 -6.006714118208413e+00 4.822384659749773e+00 4.593611142954481e+00 9.237622849291329e+03 + 171720 1.125565914992021e+00 -5.934585076510309e+00 -5.978027145245576e+00 4.046656211113723e+00 4.797205129797411e+00 9.149702163839533e+03 + 171740 1.110167018941457e+00 -5.930956960805832e+00 -5.978402385366794e+00 4.104904431962148e+00 4.832465461977381e+00 9.150845539796894e+03 + 171760 1.096837594586954e+00 -5.940014445792213e+00 -5.985736381940547e+00 4.013951841749620e+00 4.751409408939138e+00 9.173297717409276e+03 + 171780 1.061028002547277e+00 -5.922137195029791e+00 -5.984528861118182e+00 4.115405426809351e+00 4.757142825050682e+00 9.169587544150787e+03 + 171800 1.026251104279131e+00 -5.909735562651350e+00 -5.956285827471440e+00 4.156925612696300e+00 4.889626788469141e+00 9.083358684262339e+03 + 171820 1.050899550924081e+00 -5.982239538268079e+00 -6.003089091030812e+00 3.757031498850283e+00 4.637310140428806e+00 9.226517261747937e+03 + 171840 1.005518249893278e+00 -5.946581905354568e+00 -5.960766272962466e+00 3.965856206751424e+00 4.884407372923087e+00 9.096980149061403e+03 + 171860 1.006226919054962e+00 -5.970292721974282e+00 -5.981861712007944e+00 3.858791544297044e+00 4.792360613228329e+00 9.161406709181772e+03 + 171880 1.003407021767245e+00 -5.984167483736634e+00 -5.964392744752828e+00 3.815179154949326e+00 4.928728766325305e+00 9.108044906913101e+03 + 171900 9.714299356646670e-01 -5.949328923854448e+00 -6.003290165807435e+00 3.933111850258842e+00 4.623258048489587e+00 9.227108806781325e+03 + 171920 1.010813905533065e+00 -6.016480264765061e+00 -5.975281707309240e+00 3.621717375299899e+00 4.858285867667384e+00 9.141343148853861e+03 + 171940 1.063986269059849e+00 -6.102707973533846e+00 -5.967910538510069e+00 3.165346948424411e+00 4.939374680166592e+00 9.118805535831509e+03 + 171960 1.040037438579652e+00 -6.075516329248450e+00 -5.929474088669818e+00 3.302778049307411e+00 5.141375194673605e+00 9.001816571928401e+03 + 171980 1.008604501542496e+00 -6.034214346624529e+00 -5.959415272400460e+00 3.498875682415707e+00 4.928383541729640e+00 9.092875782294839e+03 + 172000 1.021278818231547e+00 -6.055278862477794e+00 -5.988968323480544e+00 3.358454804955045e+00 4.739220181400004e+00 9.183228894732885e+03 + 172020 1.023511452890147e+00 -6.060720022355659e+00 -5.999197129928102e+00 3.358172885976177e+00 4.711446854932042e+00 9.214589996752911e+03 + 172040 9.502329000628527e-01 -5.954555242794927e+00 -5.995799493720359e+00 3.962775627261482e+00 4.725944755920455e+00 9.204151550428247e+03 + 172060 9.465938909261682e-01 -5.949515909456838e+00 -6.048214210120602e+00 3.926778193581540e+00 4.360037277657542e+00 9.365622330266286e+03 + 172080 9.757288808331365e-01 -5.992714343967151e+00 -5.955892669497317e+00 3.767798180500432e+00 4.979233933441931e+00 9.082109897300978e+03 + 172100 9.680880334721694e-01 -5.977259144623698e+00 -6.023132753360902e+00 3.733034311798320e+00 4.469620951511287e+00 9.288171551916736e+03 + 172120 9.613518871879845e-01 -5.959637889366848e+00 -5.971420939468560e+00 3.924977977887008e+00 4.857317880781865e+00 9.129481067592789e+03 + 172140 1.053364221338451e+00 -6.083329425596241e+00 -5.966993022594636e+00 3.267634422520076e+00 4.935656051555473e+00 9.115999090442654e+03 + 172160 9.641438236399102e-01 -5.931655030314246e+00 -6.047038859772361e+00 4.002807445523938e+00 4.340255641185541e+00 9.362040664131495e+03 + 172180 1.003123599919656e+00 -5.963444039357844e+00 -6.036465582456242e+00 3.866098087074900e+00 4.446797086556623e+00 9.329346693127007e+03 + 172200 9.936808426682591e-01 -5.918180752513441e+00 -5.999689373620462e+00 4.137127664479366e+00 4.669092548664506e+00 9.216109308820811e+03 + 172220 9.874484933335420e-01 -5.873444292512225e+00 -6.030115785511875e+00 4.391144137920489e+00 4.491512180281314e+00 9.309721999498544e+03 + 172240 1.102442361230882e+00 -6.006573975267710e+00 -6.003754932403208e+00 3.689525599701950e+00 4.705712980075395e+00 9.228592705453126e+03 + 172260 1.042541089189107e+00 -5.885497895054067e+00 -6.061041995165239e+00 4.336814005843109e+00 4.328812617643067e+00 9.405379168719626e+03 + 172280 1.084976361778584e+00 -5.926525282700452e+00 -6.059711655422442e+00 4.077802365217355e+00 4.313025602523124e+00 9.401261332152915e+03 + 172300 1.109355939282497e+00 -5.950350254199269e+00 -6.038279078602029e+00 3.950222492390845e+00 4.445321575728597e+00 9.334929711219807e+03 + 172320 1.003584708105690e+00 -5.793739216062012e+00 -6.038003707175055e+00 4.776135602726221e+00 4.373531094947293e+00 9.334086350674639e+03 + 172340 1.108898055603473e+00 -5.958096424724505e+00 -5.978891885837462e+00 4.000223422557277e+00 4.880812666759469e+00 9.152358030893638e+03 + 172360 1.082092906968975e+00 -5.935229388084096e+00 -6.014932543672260e+00 4.060217806355488e+00 4.602549952944787e+00 9.262944310231367e+03 + 172380 1.078438691370033e+00 -5.960240458318766e+00 -5.994779314802082e+00 3.925555532362223e+00 4.727228073564254e+00 9.201027995988139e+03 + 172400 9.814009334062834e-01 -5.855395790522992e+00 -6.007851282551651e+00 4.387462185213970e+00 4.512039157574264e+00 9.241172084690805e+03 + 172420 1.021743129277072e+00 -5.956837513807445e+00 -5.994116653489170e+00 3.974839393251570e+00 4.760776804270879e+00 9.198910455215106e+03 + 172440 1.053920389505867e+00 -6.045607330263085e+00 -5.991479826826130e+00 3.475262217715492e+00 4.786070718654573e+00 9.190918417116220e+03 + 172460 1.082915963835048e+00 -6.124412456062573e+00 -5.999329392200013e+00 3.013133983891955e+00 4.731380293132347e+00 9.214982112917138e+03 + 172480 8.827385838888753e-01 -5.854611635975007e+00 -6.039715753941731e+00 4.478855506695748e+00 4.415959016561141e+00 9.339360430917295e+03 + 172500 9.395221064289503e-01 -5.954537162025894e+00 -5.987377572901988e+00 3.941865705173236e+00 4.753290983885543e+00 9.178332038922812e+03 + 172520 9.562492133338030e-01 -5.986477440667693e+00 -5.995587853207351e+00 3.797155238482059e+00 4.744841839847560e+00 9.203477255287717e+03 + 172540 1.013172301241755e+00 -6.073392857772878e+00 -5.936215519266264e+00 3.334503815708587e+00 5.122197321538090e+00 9.022288696002517e+03 + 172560 1.025892863433420e+00 -6.092426587794312e+00 -5.971723612824439e+00 3.242427085038059e+00 4.935522246040082e+00 9.130463384862524e+03 + 172580 1.016416706699466e+00 -6.077774864556412e+00 -5.984222703100864e+00 3.276260993055796e+00 4.813451981283751e+00 9.168680074976264e+03 + 172600 9.909712897099451e-01 -6.037434783814548e+00 -5.981090574205504e+00 3.496337152278371e+00 4.819874323091756e+00 9.159105597165002e+03 + 172620 9.702376154232129e-01 -5.999655584291099e+00 -5.997118574376934e+00 3.737892513388313e+00 4.752460416916463e+00 9.208208253426084e+03 + 172640 9.879027141280502e-01 -6.017261575208793e+00 -6.023397485733884e+00 3.581840284111784e+00 4.546606936347621e+00 9.289011565890265e+03 + 172660 9.337106385124090e-01 -5.928758674840387e+00 -6.020769115739597e+00 4.031162328747874e+00 4.502824138534897e+00 9.280917108341760e+03 + 172680 9.970695467790591e-01 -6.012375779174469e+00 -6.017411625196958e+00 3.569168348261318e+00 4.540251741105532e+00 9.270573511260933e+03 + 172700 9.907264065483334e-01 -5.990047253747540e+00 -5.998736010953619e+00 3.728718289729752e+00 4.678826101271612e+00 9.213163413807137e+03 + 172720 1.018256036372882e+00 -6.015906867707852e+00 -5.973573412703888e+00 3.601792805038770e+00 4.844878054752525e+00 9.136096343829127e+03 + 172740 1.023750449451012e+00 -6.006687076612080e+00 -5.997007228027146e+00 3.576425378509376e+00 4.632008567035791e+00 9.207877679881378e+03 + 172760 1.008988904995452e+00 -5.965890041967508e+00 -5.975621856805157e+00 3.892625307785823e+00 4.836743720994559e+00 9.142339660903255e+03 + 172780 1.063130395155624e+00 -6.023827980803579e+00 -5.957331239822098e+00 3.596785520191515e+00 4.978620097244585e+00 9.086518488234364e+03 + 172800 1.022393587675879e+00 -5.937507932669403e+00 -6.017985457603124e+00 4.052584438616729e+00 4.590470036590571e+00 9.272331223898891e+03 + 172820 1.031611687280333e+00 -5.921413699347695e+00 -6.021036527112228e+00 4.108306822277820e+00 4.536257128671095e+00 9.281715665023614e+03 + 172840 1.031007636383035e+00 -5.891006058018329e+00 -6.011215109186184e+00 4.253991878342570e+00 4.563732904246199e+00 9.251469535469074e+03 + 172860 9.683699205661638e-01 -5.766711627701183e+00 -6.056583016110435e+00 4.907500057269260e+00 4.243013687570953e+00 9.391474114734932e+03 + 172880 1.071366663507554e+00 -5.889067926579171e+00 -5.969185888378441e+00 4.222685639699995e+00 4.762635904834062e+00 9.122681510932109e+03 + 172900 1.078655521201729e+00 -5.870543494892486e+00 -5.993229272601227e+00 4.428339668542163e+00 4.723858947375829e+00 9.196243799953598e+03 + 172920 1.115431075665988e+00 -5.903221687787881e+00 -6.005051491989077e+00 4.213316223216818e+00 4.628593729382279e+00 9.232531162642696e+03 + 172940 1.125800411141910e+00 -5.905989603825843e+00 -5.984387081838152e+00 4.156197379597584e+00 4.706026928880390e+00 9.169138127188025e+03 + 172960 1.054018295839549e+00 -5.795964890106038e+00 -6.019522461966774e+00 4.795822749179632e+00 4.512120576132845e+00 9.277014991634098e+03 + 172980 1.118908432724137e+00 -5.902360832194248e+00 -5.967497673964703e+00 4.203612894101524e+00 4.829587068761882e+00 9.117541079121560e+03 + 173000 1.107445668595430e+00 -5.914268772818446e+00 -5.928971585201426e+00 4.189897859940557e+00 5.105472035984628e+00 9.000267493343028e+03 + 173020 1.091958137261895e+00 -5.938685733781594e+00 -5.966512324980659e+00 4.041620853392430e+00 4.881836260576327e+00 9.114469158573092e+03 + 173040 1.001323380955421e+00 -5.865958757884489e+00 -5.978348956085010e+00 4.351236669978316e+00 4.705874759583967e+00 9.150664597268353e+03 + 173060 1.004755324962607e+00 -5.926512009099835e+00 -5.980960821552534e+00 4.093733533306475e+00 4.781080026276582e+00 9.158660922792677e+03 + 173080 1.017692612200240e+00 -5.988083199150920e+00 -5.979495073414678e+00 3.770128040512883e+00 4.819442387498548e+00 9.154216515370597e+03 + 173100 1.000777478443841e+00 -5.993195002474382e+00 -5.966110282693140e+00 3.783534134544125e+00 4.939058786874858e+00 9.113300123699335e+03 + 173120 1.003924431822632e+00 -6.018530320867154e+00 -5.962239186926102e+00 3.610487496672246e+00 4.933719898786598e+00 9.101490355683713e+03 + 173140 9.790852529238024e-01 -5.996006337456165e+00 -5.979403564121951e+00 3.720947353321449e+00 4.816283047077381e+00 9.153943694089201e+03 + 173160 9.839379202268819e-01 -6.012801539639699e+00 -6.034388013370886e+00 3.617825294260405e+00 4.493872421599911e+00 9.322922496189836e+03 + 173180 1.004973072884249e+00 -6.054372488696514e+00 -6.002843070080139e+00 3.406589144734990e+00 4.702479040581979e+00 9.225780924046707e+03 + 173200 9.353664544418824e-01 -5.958574081268814e+00 -6.005472642007595e+00 3.912698897704575e+00 4.643400104413680e+00 9.233841823163724e+03 + 173220 9.458394286645943e-01 -5.977909528610584e+00 -5.983922726724805e+00 3.796548247257893e+00 4.762019533146637e+00 9.167759504923144e+03 + 173240 1.020340065600994e+00 -6.088276100598461e+00 -5.982690468672452e+00 3.236925779513019e+00 4.843214817355895e+00 9.163970584689092e+03 + 173260 9.952805205955944e-01 -6.047870193045654e+00 -5.982104273282050e+00 3.392524005817335e+00 4.770162094343141e+00 9.162206716484268e+03 + 173280 9.980990834454792e-01 -6.046276427030458e+00 -5.990106496779951e+00 3.459547080193107e+00 4.782083511960128e+00 9.186658637295684e+03 + 173300 9.878746402879192e-01 -6.023019641490797e+00 -5.971610792524971e+00 3.592277158150344e+00 4.887474724405783e+00 9.130107710597140e+03 + 173320 9.541462466870148e-01 -5.960943052553656e+00 -6.026500111943178e+00 3.903923172214026e+00 4.527484392277239e+00 9.298585789503839e+03 + 173340 1.026501507859694e+00 -6.051681680776657e+00 -6.006362799384036e+00 3.422512820541773e+00 4.682740850572434e+00 9.236618645914488e+03 + 173360 9.932104061462316e-01 -5.984038573203277e+00 -6.005824685013628e+00 3.744182362364341e+00 4.619083136959398e+00 9.234934776763557e+03 + 173380 1.009984802041753e+00 -5.988081768675634e+00 -5.987520753202867e+00 3.785748189215987e+00 4.788969626877478e+00 9.178770620875497e+03 + 173400 1.030449786738089e+00 -5.991692157322114e+00 -6.035116002669131e+00 3.698287010934624e+00 4.448940571133704e+00 9.325177053550073e+03 + 173420 1.066024739325461e+00 -6.018493236209102e+00 -5.995082133604891e+00 3.647136655411122e+00 4.781566829420924e+00 9.201958403328243e+03 + 173440 1.067642134111627e+00 -5.995588105235458e+00 -6.024666128332058e+00 3.707093135237975e+00 4.540122626807772e+00 9.292931066361034e+03 + 173460 1.081816509633934e+00 -5.994489195240281e+00 -5.998103024201956e+00 3.736771067361874e+00 4.716019902225714e+00 9.211229032503517e+03 + 173480 9.975506406078951e-01 -5.852591496843242e+00 -6.014782523956264e+00 4.481409050255010e+00 4.550083073591712e+00 9.262450570656778e+03 + 173500 1.023690360739035e+00 -5.874914622582520e+00 -6.005005017867528e+00 4.329290909431641e+00 4.582291728281515e+00 9.232395034829417e+03 + 173520 1.077785366570953e+00 -5.941516833277189e+00 -5.944231789419466e+00 4.060915825770490e+00 5.045326127463431e+00 9.046608646803092e+03 + 173540 1.063941819075422e+00 -5.908713050364923e+00 -5.973317951040684e+00 4.132818994103865e+00 4.761847656847579e+00 9.135310131215530e+03 + 173560 1.086531510936248e+00 -5.931421269085421e+00 -6.017235363468231e+00 4.055836925374791e+00 4.563079115740507e+00 9.270037745465261e+03 + 173580 1.136390693591882e+00 -6.004689280755624e+00 -5.985869610927346e+00 3.657306895415380e+00 4.765372351903845e+00 9.173719318163470e+03 + 173600 1.039754461713528e+00 -5.873932130552928e+00 -6.010342184849663e+00 4.361348956092039e+00 4.578061314932507e+00 9.248821906350566e+03 + 173620 1.008390423740151e+00 -5.851757625912639e+00 -6.004260601569459e+00 4.481933222817341e+00 4.606237536836671e+00 9.230102541229438e+03 + 173640 1.039116729923969e+00 -5.935777510019093e+00 -5.938119858087401e+00 4.057147123761267e+00 5.043696998675858e+00 9.028018438654699e+03 + 173660 1.005080409730513e+00 -5.930981436532204e+00 -5.944001730556888e+00 4.106243247702714e+00 5.031478704528996e+00 9.045861741230661e+03 + 173680 1.026237204647207e+00 -6.004957621005611e+00 -5.965811205241733e+00 3.672510520041122e+00 4.897295297245574e+00 9.112359608715806e+03 + 173700 1.031923939354743e+00 -6.053307303009847e+00 -5.937029403374755e+00 3.383668469451927e+00 5.051354163103442e+00 9.024759772791909e+03 + 173720 9.948527102879733e-01 -6.030552376706215e+00 -5.964037991927033e+00 3.516307112003030e+00 4.898243002472871e+00 9.106960148247514e+03 + 173740 9.608551193693246e-01 -6.002535728539605e+00 -5.997078934799910e+00 3.622117323984375e+00 4.653451078073806e+00 9.208066856175088e+03 + 173760 9.824669174407913e-01 -6.050888907466445e+00 -5.981449718654126e+00 3.418130891294903e+00 4.816861459134979e+00 9.160182123608276e+03 + 173780 9.336155689611729e-01 -5.989020632331643e+00 -5.991028017417711e+00 3.736174416065628e+00 4.724647700259590e+00 9.189507097738082e+03 + 173800 9.602355099042567e-01 -6.032734439713542e+00 -6.001287127277745e+00 3.490079744786138e+00 4.670655079248352e+00 9.221001568201002e+03 + 173820 9.498960638773298e-01 -6.016748969875607e+00 -6.007134733944648e+00 3.579543621536020e+00 4.634750052049791e+00 9.238956772395615e+03 + 173840 9.852900264695768e-01 -6.066069902766070e+00 -5.988076444817199e+00 3.318665080445857e+00 4.766515585436892e+00 9.180490857477598e+03 + 173860 9.836570038385419e-01 -6.057878676131812e+00 -5.982346587509959e+00 3.406807887134686e+00 4.840524828554305e+00 9.162948800168608e+03 + 173880 9.929565190773034e-01 -6.061366800179039e+00 -5.996711578548871e+00 3.418202363373149e+00 4.789462651336786e+00 9.206969518717147e+03 + 173900 9.927590825756769e-01 -6.048161076826857e+00 -5.979034372994226e+00 3.434696779978238e+00 4.831633010708048e+00 9.152805912378397e+03 + 173920 9.726517316414648e-01 -6.001755806988286e+00 -5.974703333446178e+00 3.678005843949589e+00 4.833345333385124e+00 9.139543416864919e+03 + 173940 9.715420896759521e-01 -5.973865771339408e+00 -6.004807932767068e+00 3.796847563728977e+00 4.619172884527347e+00 9.231826433439666e+03 + 173960 1.074008428969160e+00 -6.093068164648981e+00 -5.984248716772878e+00 3.204004947548575e+00 4.828863057008292e+00 9.168786398101072e+03 + 173980 9.882841338057282e-01 -5.930802096529248e+00 -6.046339331314269e+00 4.047490297750650e+00 4.384057616285756e+00 9.359864883541753e+03 + 174000 1.044937198571008e+00 -5.980716647654766e+00 -6.055387944104370e+00 3.864568680772850e+00 4.435794541213438e+00 9.387869687633191e+03 + 174020 1.012179894145418e+00 -5.903757709824338e+00 -6.024859148329945e+00 4.218581743029880e+00 4.523198542743641e+00 9.293535338431930e+03 + 174040 1.014681212084544e+00 -5.883616213917592e+00 -6.052646090808726e+00 4.315133762289497e+00 4.344538051891694e+00 9.379359789027403e+03 + 174060 1.010626986648662e+00 -5.858911741943656e+00 -5.992121408611119e+00 4.460163313402711e+00 4.695252793268845e+00 9.192849155053716e+03 + 174080 1.095429786318195e+00 -5.968927528544659e+00 -5.998074410764060e+00 3.832388522292853e+00 4.665022614123612e+00 9.211121070891251e+03 + 174100 1.102434908975461e+00 -5.968333066368058e+00 -5.983151786471380e+00 3.875600601891949e+00 4.790509217869152e+00 9.165409210050813e+03 + 174120 1.110705581278694e+00 -5.979628017800168e+00 -5.994194532541202e+00 3.817077958518305e+00 4.733434776714418e+00 9.199216664045731e+03 + 174140 9.645728663838430e-01 -5.771965871407673e+00 -6.033703787274841e+00 4.919387169870882e+00 4.416447553150028e+00 9.320796192123315e+03 + 174160 1.143471012735451e+00 -6.057201242260327e+00 -5.984222310123451e+00 3.384495954356815e+00 4.803552276140001e+00 9.168692667622588e+03 + 174180 1.114228194416204e+00 -6.060018984704160e+00 -6.034010040842800e+00 3.359952294580819e+00 4.509299675103809e+00 9.321768637924351e+03 + 174200 1.035545675851006e+00 -6.019835581615722e+00 -5.984858016856825e+00 3.604487537278268e+00 4.805334126884508e+00 9.170619398829798e+03 + 174220 9.519149595492782e-01 -5.963254127919057e+00 -5.943614391122633e+00 3.944308211322939e+00 5.057082619247447e+00 9.044744192008386e+03 + 174240 9.906746425471189e-01 -6.063801351276808e+00 -5.963637807940319e+00 3.340751943489447e+00 4.915906509585810e+00 9.105700105342768e+03 + 174260 9.267405335466790e-01 -5.993076214347078e+00 -5.986359538088935e+00 3.735504874343718e+00 4.774073068820272e+00 9.175183850634010e+03 + 174280 9.241900134792869e-01 -6.003454537177995e+00 -5.960222566679866e+00 3.694962471519037e+00 4.943207136245107e+00 9.095338415824601e+03 + 174300 9.665557829592610e-01 -6.073240158781647e+00 -5.951876815238919e+00 3.306008545952532e+00 5.002895645491590e+00 9.069899559460257e+03 + 174320 9.128699189045938e-01 -5.993826631248002e+00 -5.961654280244311e+00 3.724014941510094e+00 4.908753559628513e+00 9.099691484580217e+03 + 174340 9.707981487654367e-01 -6.072337761985562e+00 -5.968453451519562e+00 3.288364882809992e+00 4.884884669550850e+00 9.120433725647670e+03 + 174360 9.380757919619065e-01 -6.011142889904589e+00 -5.995907737564730e+00 3.601282728418124e+00 4.688765330785798e+00 9.204488029253091e+03 + 174380 9.618260475116973e-01 -6.028796559083496e+00 -5.988557491870419e+00 3.559552094322779e+00 4.790611045235792e+00 9.181946389808234e+03 + 174400 9.499519782289373e-01 -5.988295221087204e+00 -6.002647141934475e+00 3.727950521118987e+00 4.645539570661384e+00 9.225157664108969e+03 + 174420 1.000556501339247e+00 -6.036773534869895e+00 -5.973367565628996e+00 3.511871545864321e+00 4.875958433287594e+00 9.135461308473074e+03 + 174440 1.028999140666390e+00 -6.048934936596396e+00 -5.965449106713238e+00 3.467942832285403e+00 4.947331386864918e+00 9.111294174406876e+03 + 174460 1.026822782836855e+00 -6.018111825296588e+00 -6.000903780554323e+00 3.559449099306790e+00 4.658260355153195e+00 9.219820027532754e+03 + 174480 1.026940028507454e+00 -5.991359740555537e+00 -5.956477164030031e+00 3.788282887187052e+00 4.988584039657780e+00 9.083920803218996e+03 + 174500 1.068577183163967e+00 -6.030315505609322e+00 -5.969489104837730e+00 3.531841358709154e+00 4.881115964794738e+00 9.123603449442782e+03 + 174520 1.028732500171579e+00 -5.952032096973272e+00 -5.982452602415385e+00 3.958532566755477e+00 4.783853316948865e+00 9.163254033535399e+03 + 174540 1.016028408732502e+00 -5.916559863845978e+00 -6.029517412928802e+00 4.131699999946326e+00 4.483080272988528e+00 9.307860362809872e+03 + 174560 1.034085296672262e+00 -5.931916042652173e+00 -6.016824447758401e+00 4.030769129582472e+00 4.543211927929286e+00 9.268741340334504e+03 + 174580 1.069464036652090e+00 -5.978519402719918e+00 -5.990808444442746e+00 3.856528446197731e+00 4.785962866902192e+00 9.188853241433259e+03 + 174600 1.063524134247026e+00 -5.968353384538040e+00 -6.016356464764080e+00 3.874540738504850e+00 4.598899623394276e+00 9.267357696617173e+03 + 174620 1.039866634172809e+00 -5.940056701058808e+00 -6.074248910985186e+00 4.032055292353467e+00 4.261502856778834e+00 9.446378748339603e+03 + 174640 1.040236495224821e+00 -5.956058351892226e+00 -6.046009755812667e+00 3.941184200427036e+00 4.424669319181093e+00 9.358844098545360e+03 + 174660 1.022772460457805e+00 -5.954827700981319e+00 -6.064390411189723e+00 3.933167986575437e+00 4.304041949784172e+00 9.415783472026056e+03 + 174680 9.829749500444194e-01 -5.928453727341313e+00 -6.075091434664500e+00 4.071501609808770e+00 4.229485202247162e+00 9.449007394609172e+03 + 174700 1.039401120925224e+00 -6.055205302996512e+00 -6.034188289339775e+00 3.439254560482783e+00 4.559937505272123e+00 9.322286708465619e+03 + 174720 1.010095901966845e+00 -6.061446469071280e+00 -6.002030015548879e+00 3.401846740286702e+00 4.743025211078795e+00 9.223270501057315e+03 + 174740 9.502785796361295e-01 -6.014551668114291e+00 -6.052748465608851e+00 3.565733532396602e+00 4.346401610247526e+00 9.379684029717993e+03 + 174760 9.148974451783527e-01 -5.991516504991664e+00 -6.017562649981153e+00 3.736539573277869e+00 4.586978578120315e+00 9.271051591568870e+03 + 174780 9.644508808957944e-01 -6.083305898606405e+00 -5.957925160263165e+00 3.249366061164889e+00 4.969321663338325e+00 9.088348347607980e+03 + 174800 9.474565283054365e-01 -6.064146406379244e+00 -5.968466930851296e+00 3.363633574853645e+00 4.913039929686112e+00 9.120498957537216e+03 + 174820 9.584785123366982e-01 -6.079695095214923e+00 -6.019083318558723e+00 3.226359157619604e+00 4.574401358821628e+00 9.275730655104362e+03 + 174840 9.369789673075278e-01 -6.043330303644593e+00 -5.982817463858819e+00 3.477547181685590e+00 4.825021272067199e+00 9.164378797812968e+03 + 174860 9.769982730338885e-01 -6.093589801816066e+00 -5.956418635640756e+00 3.186452675082323e+00 4.974110738430312e+00 9.083763930830319e+03 + 174880 9.828502457769762e-01 -6.088181401454269e+00 -6.029697895360165e+00 3.213353799341999e+00 4.549175141627667e+00 9.308467828434899e+03 + 174900 9.227160312064646e-01 -5.984811348096058e+00 -6.015620290314531e+00 3.815183806870710e+00 4.638274092983840e+00 9.265072405298237e+03 + 174920 1.020733655416700e+00 -6.115446304811709e+00 -5.921068679912113e+00 3.100765621387073e+00 5.216912023400788e+00 8.976340908249087e+03 + 174940 9.426754452770276e-01 -5.979957764736304e+00 -5.991167518744058e+00 3.777623704912783e+00 4.713255562696434e+00 9.189949475669659e+03 + 174960 9.555339846482395e-01 -5.974677060231760e+00 -6.029876213829874e+00 3.850370421698661e+00 4.533408339696872e+00 9.308981464220138e+03 + 174980 1.030033169254394e+00 -6.061333850483272e+00 -5.997139547067653e+00 3.347476708517317e+00 4.716090332766147e+00 9.208283541949057e+03 + 175000 9.883273369644735e-01 -5.978444481262841e+00 -6.020783585992502e+00 3.772134472082301e+00 4.529016780769306e+00 9.280955281783554e+03 + 175020 1.038641352396164e+00 -6.035211204689436e+00 -5.980535423233059e+00 3.473240555955543e+00 4.787197354127897e+00 9.157396379972011e+03 + 175040 1.028122379584812e+00 -6.002668782255830e+00 -5.951079771758026e+00 3.701897343032095e+00 4.998129424684054e+00 9.067488678539250e+03 + 175060 1.019149068156492e+00 -5.976165819239180e+00 -5.955720356298011e+00 3.853303022049817e+00 4.970704034183179e+00 9.081567959619360e+03 + 175080 9.924343167451991e-01 -5.922424534526516e+00 -5.951252692220498e+00 4.151558692082870e+00 4.986022949461037e+00 9.067984405528090e+03 + 175100 1.125442130559867e+00 -6.105009591307002e+00 -5.953366530379454e+00 3.156056867608716e+00 5.026814790142535e+00 9.074431789188950e+03 + 175120 1.010888449395482e+00 -5.926248361631479e+00 -6.028755645572832e+00 4.077592079223833e+00 4.488979391881661e+00 9.305516886890644e+03 + 175140 9.825931912286066e-01 -5.879507161473648e+00 -6.024734186418986e+00 4.313678701641070e+00 4.479762650595466e+00 9.293126945564973e+03 + 175160 1.098058489820219e+00 -6.049171312785719e+00 -5.989741803710071e+00 3.440773975064071e+00 4.782027412863247e+00 9.185557676083341e+03 + 175180 1.004178065746951e+00 -5.914705300404457e+00 -5.964959074224990e+00 4.193701522940900e+00 4.905136576917037e+00 9.109783933699291e+03 + 175200 1.032299672848394e+00 -5.963647468880897e+00 -5.996015250861229e+00 3.846429513910107e+00 4.660568700880963e+00 9.204796190128158e+03 + 175220 1.124963962969908e+00 -6.114751773246700e+00 -5.973022661825462e+00 3.068949720988168e+00 4.882780211278023e+00 9.134431799259555e+03 + 175240 1.004726615297099e+00 -5.963339920802834e+00 -6.011618351873967e+00 3.886593628856656e+00 4.609371406583150e+00 9.252753396854248e+03 + 175260 1.012539278011511e+00 -6.020787744590081e+00 -6.032876507505645e+00 3.613681026374775e+00 4.544265478983585e+00 9.318227492271531e+03 + 175280 9.501784681326232e-01 -5.991428162104357e+00 -6.015229739835565e+00 3.730677228110832e+00 4.594004885495989e+00 9.263862655312767e+03 + 175300 9.049495538954495e-01 -5.980230419858019e+00 -5.984744184390006e+00 3.835503967834212e+00 4.809585233388736e+00 9.170267776481365e+03 + 175320 9.625946801857106e-01 -6.105587042548430e+00 -5.987654708479709e+00 3.138060553067871e+00 4.815246265260182e+00 9.179192441136040e+03 + 175340 9.611593842436630e-01 -6.127386314682732e+00 -5.984304603259023e+00 3.033423891235361e+00 4.855021220053585e+00 9.168943811878677e+03 + 175360 9.577346070435174e-01 -6.134221393353250e+00 -6.000072659892959e+00 2.955859204247411e+00 4.726161991225809e+00 9.217274447504249e+03 + 175380 8.751222882102426e-01 -6.015479252713113e+00 -6.012881599399479e+00 3.560427355293016e+00 4.575343482605453e+00 9.256630427610622e+03 + 175400 9.246382488262139e-01 -6.083994020160435e+00 -5.992809807604388e+00 3.212651535361954e+00 4.736245394570064e+00 9.195002857403058e+03 + 175420 9.578104429722245e-01 -6.119923039606261e+00 -5.995326223644550e+00 3.044701364611058e+00 4.760155563158159e+00 9.202731234831344e+03 + 175440 9.126630700904075e-01 -6.034342717355619e+00 -5.997586723817907e+00 3.530319457994218e+00 4.741378060859378e+00 9.209653952085946e+03 + 175460 9.071313665414691e-01 -6.001581429118350e+00 -6.025779365966012e+00 3.692687901389883e+00 4.553739603391985e+00 9.296351493891840e+03 + 175480 9.539260855425356e-01 -6.040866856613547e+00 -6.011784556819912e+00 3.493690039983741e+00 4.660685105870144e+00 9.253270824667034e+03 + 175500 9.420454072380610e-01 -5.991052537005707e+00 -6.003149742830227e+00 3.754976679016329e+00 4.685512651135384e+00 9.226704512782173e+03 + 175520 9.762994786071494e-01 -6.012763873430769e+00 -5.968833790371192e+00 3.635163389770772e+00 4.887416724857249e+00 9.121616803134493e+03 + 175540 9.616361829561672e-01 -5.960699281058593e+00 -5.987252050692313e+00 3.872882600166490e+00 4.720412487901851e+00 9.177952620005324e+03 + 175560 9.962229184111530e-01 -5.985654402755954e+00 -6.026830958039572e+00 3.752744433501419e+00 4.516302281011550e+00 9.299584955504601e+03 + 175580 1.020391756936409e+00 -5.999981018438340e+00 -6.023941903012725e+00 3.699175638967934e+00 4.561588531806914e+00 9.290703401874423e+03 + 175600 1.018718030926390e+00 -5.984610244921231e+00 -6.038889867868517e+00 3.768434351434888e+00 4.456752356727067e+00 9.336821110565888e+03 + 175620 9.926230477787235e-01 -5.937961192252602e+00 -6.067229629035874e+00 3.991537352333521e+00 4.249257984098032e+00 9.424565506684852e+03 + 175640 1.033822840681058e+00 -5.994281468421066e+00 -5.996775853934509e+00 3.751128326344914e+00 4.736805178721813e+00 9.207148824832640e+03 + 175660 1.028089092567386e+00 -5.982791618342983e+00 -6.013732890955994e+00 3.801152836336515e+00 4.623483260846141e+00 9.259261676336724e+03 + 175680 1.023727874557679e+00 -5.978885299606310e+00 -6.047836031670769e+00 3.826052356122163e+00 4.430126582516730e+00 9.364475572118150e+03 + 175700 9.624539768250001e-01 -5.892658679982171e+00 -6.030466179838964e+00 4.289713609083069e+00 4.498401619263684e+00 9.310797376608863e+03 + 175720 1.077874436185885e+00 -6.071523628354904e+00 -5.963936067317414e+00 3.313912977252087e+00 4.931697401850619e+00 9.106671789646864e+03 + 175740 9.737934490336826e-01 -5.926520549055900e+00 -5.978397808529782e+00 4.114949458012934e+00 4.817062206133946e+00 9.150828800036576e+03 + 175760 1.063377281562902e+00 -6.067420596081009e+00 -5.957377159110511e+00 3.406370761021432e+00 5.038257205272866e+00 9.086649531203431e+03 + 175780 9.973759186878994e-01 -5.978475862365390e+00 -5.967586787797789e+00 3.866842059886845e+00 4.929368811132861e+00 9.117808817092229e+03 + 175800 9.937225696531075e-01 -5.984754953701366e+00 -6.036361768570295e+00 3.695246966955813e+00 4.398912649849633e+00 9.328995809250117e+03 + 175820 9.481475596367271e-01 -5.934626529840555e+00 -6.030441643773690e+00 4.098568313024088e+00 4.548383101479065e+00 9.310702726506537e+03 + 175840 1.021398864396286e+00 -6.065268897546405e+00 -6.006396132020552e+00 3.330244113772832e+00 4.668300643953297e+00 9.236696583043087e+03 + 175860 9.866447579928614e-01 -6.044519873185536e+00 -5.992466028979715e+00 3.475129945553504e+00 4.774031174289683e+00 9.193940125489687e+03 + 175880 9.557781570554120e-01 -6.036866114417260e+00 -6.002945794925373e+00 3.507983837252379e+00 4.702759560927269e+00 9.226098204897035e+03 + 175900 9.062997221478712e-01 -6.006264456937022e+00 -6.006513269432029e+00 3.652059465704973e+00 4.650630745855038e+00 9.237080392159220e+03 + 175920 9.966955023445492e-01 -6.180201067561790e+00 -5.981269596721669e+00 2.746563421232051e+00 4.888858711341650e+00 9.159666904970629e+03 + 175940 9.232025988797197e-01 -6.104299080106553e+00 -5.995880646841077e+00 3.146462774567491e+00 4.769018196076177e+00 9.204423337922226e+03 + 175960 8.924156985265349e-01 -6.078897953954409e+00 -6.008056715616781e+00 3.234402710373457e+00 4.641184063554322e+00 9.241784167871418e+03 + 175980 8.935724669128199e-01 -6.089881677619999e+00 -6.004825381999945e+00 3.185614857094834e+00 4.674021268964398e+00 9.231888496852451e+03 + 176000 8.986062907857139e-01 -6.098119826707854e+00 -6.001796191389563e+00 3.183902381815586e+00 4.737007601847600e+00 9.222586025195222e+03 + 176020 8.809374512636972e-01 -6.063547503828098e+00 -5.993072247026541e+00 3.356446616058313e+00 4.761126446623599e+00 9.195800357714566e+03 + 176040 8.869267582129664e-01 -6.054347851817991e+00 -5.976652140701734e+00 3.447558870474169e+00 4.893699667076151e+00 9.145497003263183e+03 + 176060 8.517390374290222e-01 -5.975061785526035e+00 -5.965006216386549e+00 3.880883472142874e+00 4.938624106236091e+00 9.109933093821301e+03 + 176080 9.888422529061435e-01 -6.144861792259138e+00 -5.940574695069701e+00 2.934357200050217e+00 5.107405325438087e+00 9.035539417770127e+03 + 176100 9.719936354504375e-01 -6.081871345377892e+00 -5.993829286556139e+00 3.294900366030117e+00 4.800451492249199e+00 9.198128418574939e+03 + 176120 9.750761513999207e-01 -6.055629297554794e+00 -6.008654331640664e+00 3.330691143906253e+00 4.600428667537667e+00 9.243641554936870e+03 + 176140 9.950954801328914e-01 -6.063177410180696e+00 -5.989417154191916e+00 3.364338382029859e+00 4.787881186280158e+00 9.184592754270490e+03 + 176160 1.019001179667554e+00 -6.082920494703306e+00 -5.979809548370751e+00 3.256246276600879e+00 4.848325286809786e+00 9.155174326174762e+03 + 176180 9.695599784671377e-01 -5.997869925035133e+00 -6.004023605798888e+00 3.717874924456759e+00 4.682539537232256e+00 9.229400224934390e+03 + 176200 9.812862146168398e-01 -6.005398539180472e+00 -5.977175327252737e+00 3.687593365061628e+00 4.849655415478617e+00 9.147117144571128e+03 + 176220 9.546311878538136e-01 -5.954260723838222e+00 -6.004918139647143e+00 3.949271258579334e+00 4.658388537794751e+00 9.232133439262472e+03 + 176240 1.064196193697975e+00 -6.102202866149449e+00 -5.963141566320380e+00 3.183098018833873e+00 4.981609522118989e+00 9.104236028811119e+03 + 176260 1.001909443368228e+00 -5.996606940179253e+00 -5.969439062973599e+00 3.690425411328300e+00 4.846427566458574e+00 9.123472921973358e+03 + 176280 1.019788995966022e+00 -6.012279028898646e+00 -5.959615756243861e+00 3.618241765982385e+00 4.920642427181264e+00 9.093475865964230e+03 + 176300 9.409695068619488e-01 -5.884201469837969e+00 -5.982088685039401e+00 4.328061944860868e+00 4.765978407176649e+00 9.162123023337886e+03 + 176320 9.937297150749048e-01 -5.947935788037548e+00 -6.008272992940279e+00 3.913298382383327e+00 4.566832814679566e+00 9.242406703626539e+03 + 176340 1.064494683642742e+00 -6.037466323073327e+00 -5.975996791104336e+00 3.518857420705624e+00 4.871824985650900e+00 9.143507901222927e+03 + 176360 1.005086581668455e+00 -5.935548915079872e+00 -6.011474496050011e+00 4.018238139454020e+00 4.582261704077798e+00 9.252274594176804e+03 + 176380 1.047603000349351e+00 -5.985950172717834e+00 -5.944701174825263e+00 3.870336106282152e+00 5.107194235443087e+00 9.048048036583168e+03 + 176400 1.089181455360497e+00 -6.034772752875433e+00 -6.040385476654031e+00 3.480229078633911e+00 4.447999950131011e+00 9.341437390662282e+03 + 176420 1.030926696299160e+00 -5.944886461470995e+00 -6.047468046240445e+00 3.981767530488987e+00 4.392728196293872e+00 9.363379995960631e+03 + 176440 1.026934887762462e+00 -5.942564152241033e+00 -6.024869152928494e+00 3.946795811042042e+00 4.474187760436951e+00 9.293537667693627e+03 + 176460 9.643262746744488e-01 -5.856640823299201e+00 -6.043243524375518e+00 4.452964050574058e+00 4.381462464319180e+00 9.350232978009708e+03 + 176480 9.622228501928415e-01 -5.866432140946119e+00 -5.979351165315364e+00 4.465351359180620e+00 4.816952847089865e+00 9.153720817276519e+03 + 176500 1.017832116967643e+00 -5.965125606831761e+00 -5.957745530532303e+00 3.868856059206451e+00 4.911233599381052e+00 9.087752570202163e+03 + 176520 1.017433567174433e+00 -5.986150759726931e+00 -5.996574840893778e+00 3.756004067836588e+00 4.696147380655206e+00 9.206535205818709e+03 + 176540 9.930222311278950e-01 -5.982292797011112e+00 -6.001675132099680e+00 3.776330908978138e+00 4.665034541492919e+00 9.222189405992169e+03 + 176560 9.861831545577099e-01 -6.009778514613711e+00 -6.000547596959232e+00 3.591360911498064e+00 4.644366269149975e+00 9.218732567223518e+03 + 176580 9.316597009560512e-01 -5.966753575799440e+00 -6.010419396320726e+00 3.914271442015075e+00 4.663535543317963e+00 9.249064656808265e+03 + 176600 1.025526785905236e+00 -6.142466004627759e+00 -5.973454646269502e+00 2.997753623759771e+00 4.968242997876060e+00 9.135750588770365e+03 + 176620 9.462601616276066e-01 -6.056752967978743e+00 -5.975517748618122e+00 3.393724623838188e+00 4.860189824516440e+00 9.142045560214367e+03 + 176640 9.011670619671394e-01 -6.008564630661673e+00 -5.987050318340939e+00 3.638765972320290e+00 4.762304482995012e+00 9.177336292623029e+03 + 176660 9.966796216470689e-01 -6.159672891574279e+00 -5.957535956026446e+00 2.893677776457225e+00 5.054379340962562e+00 9.087148268757579e+03 + 176680 9.219297311592743e-01 -6.051616383862637e+00 -5.988385733942934e+00 3.456130164757842e+00 4.819210341508226e+00 9.181419248035869e+03 + 176700 9.413551756788491e-01 -6.076573091528524e+00 -5.982775272770724e+00 3.285393033750096e+00 4.823994624222927e+00 9.164258344655449e+03 + 176720 9.366085423911275e-01 -6.059982859481717e+00 -5.984452788398366e+00 3.378563335425142e+00 4.812268691826462e+00 9.169389978002695e+03 + 176740 9.900897333085992e-01 -6.121477370547104e+00 -6.034307174838750e+00 3.019045418634611e+00 4.519590171936171e+00 9.322674231664401e+03 + 176760 1.016208626664217e+00 -6.138684352411471e+00 -5.976034731547335e+00 2.945690904257302e+00 4.879650197206656e+00 9.143666810559218e+03 + 176780 9.530338097516060e-01 -6.020351127806330e+00 -5.996183317734912e+00 3.620057121595960e+00 4.758832426982567e+00 9.205355316303736e+03 + 176800 9.682745571435608e-01 -6.013069326042160e+00 -6.014277226468020e+00 3.582290433607024e+00 4.575354482439747e+00 9.260961113265390e+03 + 176820 1.034964985437818e+00 -6.083523966701486e+00 -5.976270747699402e+00 3.228375445815947e+00 4.844240026707915e+00 9.144366941808841e+03 + 176840 1.046706980269812e+00 -6.074922323994896e+00 -5.958727702953662e+00 3.344797698668679e+00 5.012005193746935e+00 9.090784587108121e+03 + 176860 9.729612257408558e-01 -5.939948894763692e+00 -5.992114144511187e+00 4.092132258961424e+00 4.792591322365001e+00 9.192833997985492e+03 + 176880 1.045808219335535e+00 -6.028965555909846e+00 -6.022157791351494e+00 3.570869455421531e+00 4.609960693013750e+00 9.285178298920750e+03 + 176900 1.010008580955347e+00 -5.965408432171372e+00 -6.015207980388746e+00 3.896641422386298e+00 4.610684710066951e+00 9.263789287458745e+03 + 176920 1.005127640641504e+00 -5.954505938723486e+00 -6.027085227934097e+00 3.884370831716405e+00 4.467609321460371e+00 9.300384487016729e+03 + 176940 9.555627544458064e-01 -5.878923530376210e+00 -6.029517061893988e+00 4.362844428330418e+00 4.498113066081651e+00 9.307887484672141e+03 + 176960 1.031878666322668e+00 -5.992092723648729e+00 -6.026301731582747e+00 3.720566678130754e+00 4.524133260746755e+00 9.297983062890315e+03 + 176980 1.030501468493919e+00 -5.993810080607679e+00 -6.027687932134070e+00 3.720949259846150e+00 4.526417393801029e+00 9.302253100255897e+03 + 177000 1.011861710735242e+00 -5.971174015409585e+00 -6.015192220348965e+00 3.843089222303855e+00 4.590329877746741e+00 9.263756662825645e+03 + 177020 1.077283415903592e+00 -6.077144595856915e+00 -5.983548868693687e+00 3.287487968117705e+00 4.824929117380934e+00 9.166630095207081e+03 + 177040 9.992791234590713e-01 -5.970257654188434e+00 -6.018758247482945e+00 3.801876922589872e+00 4.523379010450235e+00 9.274745401708929e+03 + 177060 1.018547771974707e+00 -6.008403756146746e+00 -6.048564050568668e+00 3.667033954165444e+00 4.436427328809294e+00 9.366745261832275e+03 + 177080 1.047721774777730e+00 -6.064981210931400e+00 -5.981518061771327e+00 3.386722692244029e+00 4.865981010601759e+00 9.160395649981214e+03 + 177100 1.006422912339376e+00 -6.017832153544813e+00 -5.972037374924797e+00 3.676509755686134e+00 4.939470461241347e+00 9.131390357603161e+03 + 177120 9.534574193096707e-01 -5.953815965971993e+00 -6.003581134927177e+00 3.955494046618929e+00 4.669734745343256e+00 9.228013643765782e+03 + 177140 9.908752202858442e-01 -6.021622809665597e+00 -5.967980052017126e+00 3.615750830627108e+00 4.923775846234551e+00 9.118999245214931e+03 + 177160 9.614031930210879e-01 -5.988527454839986e+00 -6.031834810140364e+00 3.711860041814782e+00 4.463182505888440e+00 9.315038549134284e+03 + 177180 1.002326644091698e+00 -6.059513041006094e+00 -5.971920514750349e+00 3.330810086142860e+00 4.833779926802976e+00 9.131070630262184e+03 + 177200 9.866280742585251e-01 -6.046822787454454e+00 -5.999362828351520e+00 3.464494749147344e+00 4.737017178721324e+00 9.215091025672480e+03 + 177220 9.543133279273504e-01 -6.008833504444504e+00 -6.040366643931398e+00 3.669213383390875e+00 4.488145216719567e+00 9.341382275682156e+03 + 177240 9.826891880629230e-01 -6.063025955178062e+00 -6.019676239398929e+00 3.306663628962859e+00 4.555584405313477e+00 9.277552963327373e+03 + 177260 9.520512127287534e-01 -6.030582628373042e+00 -5.979741654746134e+00 3.569799457794526e+00 4.861736195975477e+00 9.154960439018592e+03 + 177280 9.761273176342086e-01 -6.078354996247361e+00 -6.004397002560967e+00 3.246110445327665e+00 4.670788690037478e+00 9.230556963124951e+03 + 177300 9.463689636241770e-01 -6.045977586164057e+00 -6.019887383478678e+00 3.428035972481918e+00 4.577849953747184e+00 9.278216930187195e+03 + 177320 9.105099355536990e-01 -6.003289513324095e+00 -6.031303729577803e+00 3.659687333202133e+00 4.498825368287389e+00 9.313380585053781e+03 + 177340 9.660354995946909e-01 -6.094436162943923e+00 -5.986877173060761e+00 3.175177971922463e+00 4.792798336531473e+00 9.176818688544845e+03 + 177360 9.677452712961405e-01 -6.101277659220135e+00 -5.960199926664378e+00 3.162853069368813e+00 4.972943241412526e+00 9.095278552114276e+03 + 177380 9.695065632663575e-01 -6.100387625561450e+00 -5.993591795554059e+00 3.155587499180826e+00 4.768825681684550e+00 9.197396083585842e+03 + 177400 9.184628351099136e-01 -6.015468022805097e+00 -6.006232444012744e+00 3.596421893801756e+00 4.649454016428649e+00 9.236199188012950e+03 + 177420 9.757323513045072e-01 -6.083381388651985e+00 -5.995543822581549e+00 3.247039161745378e+00 4.751416058941239e+00 9.203374321615860e+03 + 177440 9.738627608994629e-01 -6.055509332898874e+00 -6.006491603997840e+00 3.433834112417169e+00 4.715301497235937e+00 9.236997630411264e+03 + 177460 9.729432767466634e-01 -6.022174434204733e+00 -6.019835788191788e+00 3.568574074442331e+00 4.582002941752966e+00 9.278049816596711e+03 + 177480 1.010567097004502e+00 -6.043844188261650e+00 -6.002020081086783e+00 3.472729128711060e+00 4.712889624368815e+00 9.223258009128143e+03 + 177500 1.046838689790379e+00 -6.063707549993555e+00 -6.020401433609310e+00 3.318503981268742e+00 4.567174403146924e+00 9.279796936174422e+03 + 177520 1.047895207828843e+00 -6.034157552712553e+00 -6.018955515200203e+00 3.526813423430003e+00 4.614105875333617e+00 9.275328728681496e+03 + 177540 9.747947864616407e-01 -5.901819467142194e+00 -6.013777390753243e+00 4.225418158742682e+00 4.582538435935354e+00 9.259390730265681e+03 + 177560 1.044435484446132e+00 -5.984734454140878e+00 -6.020966056074871e+00 3.754853604802647e+00 4.546806139675381e+00 9.281520098666371e+03 + 177580 9.825187369789184e-01 -5.878139564957324e+00 -6.055614758426344e+00 4.330652679767782e+00 4.311562654671236e+00 9.388514483779221e+03 + 177600 1.033610640802592e+00 -5.946117046457956e+00 -5.975562821386276e+00 3.986851329209644e+00 4.817769132852284e+00 9.142174020956209e+03 + 177620 1.051401740162681e+00 -5.966030114102947e+00 -6.002444266957772e+00 3.854821376102510e+00 4.645725675338161e+00 9.224556684122923e+03 + 177640 1.049381713451125e+00 -5.962132633288412e+00 -6.007581548986621e+00 3.886520938935460e+00 4.625546231799373e+00 9.240332169293963e+03 + 177660 9.805190896069492e-01 -5.863881568056750e+00 -6.048943882728227e+00 4.385172514448403e+00 4.322516065304143e+00 9.367899778239173e+03 + 177680 1.007773931141368e+00 -5.913363828159510e+00 -6.033864980931240e+00 4.161484440444921e+00 4.469548173736524e+00 9.321288782362280e+03 + 177700 1.081299008670981e+00 -6.036451634224500e+00 -5.980814272368226e+00 3.536074928287603e+00 4.855553269920245e+00 9.158259885254047e+03 + 177720 1.016925395234491e+00 -5.963196646737559e+00 -6.021911802465483e+00 3.925874198909861e+00 4.588722688579136e+00 9.284416891603592e+03 + 177740 1.000621605424866e+00 -5.969350885595855e+00 -5.995232699057502e+00 3.855965248210628e+00 4.707347870116161e+00 9.202411273201798e+03 + 177760 1.024212464613263e+00 -6.040286711156051e+00 -5.997837615956288e+00 3.496128393997294e+00 4.739877667610587e+00 9.210416704063970e+03 + 177780 1.049957507498452e+00 -6.121866831766280e+00 -5.988080962447684e+00 3.079712504565480e+00 4.847931669489220e+00 9.180509297216224e+03 + 177800 9.469484199446444e-01 -6.015540840861155e+00 -5.997922419961623e+00 3.622152742640934e+00 4.723320441887872e+00 9.210675361429527e+03 + 177820 9.874079922084479e-01 -6.114482008659087e+00 -5.987281024217284e+00 3.099968749392686e+00 4.830376486346243e+00 9.178053829385133e+03 + 177840 9.275643880409704e-01 -6.054070019104115e+00 -6.009851815184737e+00 3.386322808841023e+00 4.640230578491032e+00 9.247323056627471e+03 + 177860 9.608875470349093e-01 -6.117274389678698e+00 -6.006509681033987e+00 3.058446332238035e+00 4.694474430059236e+00 9.237064270475688e+03 + 177880 9.159610740944811e-01 -6.055447235481718e+00 -5.986380168609575e+00 3.419799282941844e+00 4.816393069015744e+00 9.175309377685726e+03 + 177900 9.378535979777097e-01 -6.086088984682631e+00 -5.971057204520895e+00 3.276390046755703e+00 4.936920329554843e+00 9.128420723134981e+03 + 177920 9.193098434925079e-01 -6.050352181949292e+00 -5.994164043441574e+00 3.446633100253055e+00 4.769274086650702e+00 9.199120006284540e+03 + 177940 9.112216245037928e-01 -6.026070025543798e+00 -6.024605273279377e+00 3.498533446290490e+00 4.506944280462474e+00 9.292731475498413e+03 + 177960 9.215426931825211e-01 -6.025501908228765e+00 -5.989818044867556e+00 3.540886668794511e+00 4.745788934274581e+00 9.185822314302852e+03 + 177980 8.988539311918621e-01 -5.973455859922202e+00 -6.003939407055233e+00 3.810574928913037e+00 4.635533683961500e+00 9.229156028783927e+03 + 178000 9.752132252513728e-01 -6.065807283074414e+00 -5.987346342104764e+00 3.290476884064467e+00 4.741011748903576e+00 9.178245292291795e+03 + 178020 9.837997295469654e-01 -6.055414253407513e+00 -6.019895647101516e+00 3.344732778090987e+00 4.548686111986584e+00 9.278219938160206e+03 + 178040 9.979511480230382e-01 -6.055907473934412e+00 -5.992507185032440e+00 3.392618405927625e+00 4.756672675965749e+00 9.194047545988080e+03 + 178060 9.257600250475497e-01 -5.928643085750463e+00 -6.007843489299198e+00 4.060796923950452e+00 4.606015950550780e+00 9.241116353272499e+03 + 178080 9.337190056765867e-01 -5.920695979805094e+00 -5.984305246792397e+00 4.154367193484552e+00 4.789112938941205e+00 9.168913120700063e+03 + 178100 1.017258640189517e+00 -6.023583284042605e+00 -5.974620436726044e+00 3.567660598039432e+00 4.848812844307260e+00 9.139310587030535e+03 + 178120 1.057495262438576e+00 -6.064280196418083e+00 -5.990672262192798e+00 3.369350051437696e+00 4.792018200550288e+00 9.188443270304868e+03 + 178140 9.302431617042208e-01 -5.860302543759597e+00 -6.090146968428724e+00 4.434471149717234e+00 4.114668894957345e+00 9.495832969047173e+03 + 178160 1.083403816864987e+00 -6.076452107656603e+00 -5.992060666042850e+00 3.278194676834656e+00 4.762783394114216e+00 9.192710153517357e+03 + 178180 9.836250588032699e-01 -5.920564148485058e+00 -6.048031734906729e+00 4.133269736438100e+00 4.401331129659618e+00 9.365083894600730e+03 + 178200 9.930946722779177e-01 -5.931614341212926e+00 -6.031878383742103e+00 4.041484805618371e+00 4.465753157605402e+00 9.315147230036260e+03 + 178220 9.951756995533535e-01 -5.932841274021201e+00 -6.032423554222772e+00 4.007180080578848e+00 4.435363217353368e+00 9.316838803478622e+03 + 178240 1.006975644249011e+00 -5.949478656472123e+00 -6.045019751628504e+00 3.943852218521189e+00 4.395240465196553e+00 9.355780377296418e+03 + 178260 9.916664789592852e-01 -5.931450970399820e+00 -6.009553804992096e+00 4.077166373104860e+00 4.628687810501419e+00 9.246412904839626e+03 + 178280 9.975215051463683e-01 -5.946031456802832e+00 -6.032187152515867e+00 3.953181424560299e+00 4.458462087225229e+00 9.316115416104250e+03 + 178300 1.039595268086907e+00 -6.018172249998901e+00 -6.023762397481839e+00 3.592931461269476e+00 4.560831969349918e+00 9.290131527458898e+03 + 178320 9.980172613266477e-01 -5.973707844745709e+00 -5.961214164238558e+00 3.849331567125344e+00 4.921072213988217e+00 9.098341130389916e+03 + 178340 9.887939718963190e-01 -5.984500457472275e+00 -5.945712267851960e+00 3.739737357977650e+00 4.962465145230447e+00 9.051137954810132e+03 + 178360 9.871481057211928e-01 -6.013930802956386e+00 -5.962212983664378e+00 3.580505917604592e+00 4.877477639285969e+00 9.101400749810924e+03 + 178380 9.727381187262096e-01 -6.033944115851936e+00 -5.951784093572853e+00 3.506953511904297e+00 4.978729074053154e+00 9.069614086120684e+03 + 178400 9.477746673907185e-01 -6.042881243320062e+00 -5.967279121289091e+00 3.482175331854116e+00 4.916294415946526e+00 9.116877039067213e+03 + 178420 9.292865912329386e-01 -6.057907926142990e+00 -5.997289389578915e+00 3.410884126275685e+00 4.758965143914817e+00 9.208733992010342e+03 + 178440 9.208593381717737e-01 -6.078175077567024e+00 -5.990538329809087e+00 3.282819732505419e+00 4.786043499874379e+00 9.188032085093866e+03 + 178460 9.022327472579774e-01 -6.071015445929968e+00 -6.046466498301334e+00 3.247871153175036e+00 4.388835009396017e+00 9.360250485062043e+03 + 178480 8.872720837383771e-01 -6.060623813723814e+00 -6.006174493410626e+00 3.363315868385820e+00 4.675972291629234e+00 9.236017270276376e+03 + 178500 9.110628306468648e-01 -6.097210943416791e+00 -5.980898330223722e+00 3.183626933057273e+00 4.851511957330601e+00 9.158502695275882e+03 + 178520 9.346979709965093e-01 -6.124605874697580e+00 -5.973970115512733e+00 3.051756718846815e+00 4.916730558894601e+00 9.137327862879289e+03 + 178540 9.017508805187439e-01 -6.060825972231974e+00 -5.991775198946760e+00 3.365662245935380e+00 4.762162471711714e+00 9.191808175867889e+03 + 178560 9.626212204154936e-01 -6.129138331424397e+00 -5.946570727580172e+00 2.992227684957942e+00 5.040559118476876e+00 9.053759385410724e+03 + 178580 9.367896250181373e-01 -6.061227818257970e+00 -5.954541162025910e+00 3.393246433097285e+00 5.005857722888469e+00 9.078023294809644e+03 + 178600 9.768803052964884e-01 -6.087517118945788e+00 -5.969433702915037e+00 3.257790933056741e+00 4.935844181254888e+00 9.123460088080217e+03 + 178620 9.672124210046233e-01 -6.043061596373003e+00 -5.979214357346669e+00 3.483923019488819e+00 4.850543746306337e+00 9.153362906925991e+03 + 178640 9.491985784725766e-01 -5.991267570492515e+00 -5.982162752076092e+00 3.754660196283434e+00 4.806941472596632e+00 9.162380396606037e+03 + 178660 1.001549348545947e+00 -6.049425843812911e+00 -5.990697437612562e+00 3.437255081815271e+00 4.774482678409167e+00 9.188503084400150e+03 + 178680 9.730459136525558e-01 -5.991419880571842e+00 -5.963752812885994e+00 3.700478083316173e+00 4.859346667433201e+00 9.106122171162719e+03 + 178700 1.010300858579606e+00 -6.032993587332658e+00 -5.954144780519288e+00 3.556648975299374e+00 5.009411025835170e+00 9.076794050853048e+03 + 178720 1.058121060290484e+00 -6.091756509058480e+00 -5.926388788916959e+00 3.189650574259390e+00 5.139217613883992e+00 8.992455103290677e+03 + 178740 9.566449514252516e-01 -5.930526685986979e+00 -6.011944271847286e+00 4.061905411665405e+00 4.594393034324832e+00 9.253715199165885e+03 + 178760 9.831735096126760e-01 -5.959020580674279e+00 -5.978488591793916e+00 3.903790093928747e+00 4.792001761414807e+00 9.151099867653829e+03 + 178780 1.007462610216310e+00 -5.982920356313245e+00 -5.986881165954163e+00 3.815419569490058e+00 4.792675987598595e+00 9.176776911325174e+03 + 178800 1.043023195872440e+00 -6.022410827708279e+00 -5.992187197687645e+00 3.570429675428799e+00 4.743978436098907e+00 9.193067834598593e+03 + 178820 1.003676221135294e+00 -5.953126111065577e+00 -6.013168170476298e+00 3.949690102321434e+00 4.604919305706408e+00 9.257516582895763e+03 + 178840 9.958779376691825e-01 -5.933770854408212e+00 -6.056828633338899e+00 4.006125803290432e+00 4.299508993540682e+00 9.392348326357436e+03 + 178860 1.009868684194753e+00 -5.950956142775554e+00 -5.985098770194756e+00 3.960698202332261e+00 4.764645952136685e+00 9.171361412638780e+03 + 178880 9.762769749423450e-01 -5.898784006602943e+00 -6.058612490337696e+00 4.187258563136266e+00 4.269498676153394e+00 9.397858440911003e+03 + 178900 1.006640121235364e+00 -5.944359315340793e+00 -6.060830697584284e+00 3.976504014301752e+00 4.307707313571475e+00 9.404733106452702e+03 + 178920 9.717983411397244e-01 -5.900295718591179e+00 -6.021503190961872e+00 4.191014139051394e+00 4.495022075903144e+00 9.283164598731792e+03 + 178940 1.030659499707377e+00 -5.996625876225156e+00 -5.981431638044052e+00 3.658134626043470e+00 4.745382292980128e+00 9.160131704667461e+03 + 178960 1.011796289291045e+00 -5.982716284680880e+00 -6.012987351698850e+00 3.723997173714047e+00 4.550176022464380e+00 9.256943445712575e+03 + 178980 1.018257619323644e+00 -6.013704217700987e+00 -5.973464872841347e+00 3.628367248878446e+00 4.859427794080993e+00 9.135783833728425e+03 + 179000 1.005538090894788e+00 -6.022087831101407e+00 -5.977779086127667e+00 3.552395327021677e+00 4.806822997417017e+00 9.148962021415457e+03 + 179020 9.871773140059937e-01 -6.028503108937826e+00 -5.984509502906627e+00 3.537739495819350e+00 4.790357589639033e+00 9.169559461192624e+03 + 179040 9.890512577211202e-01 -6.069683592325773e+00 -5.974265169644680e+00 3.367460473203514e+00 4.915367822191534e+00 9.138209740485972e+03 + 179060 9.377698894894231e-01 -6.027600280103387e+00 -6.010229288557836e+00 3.524972712865041e+00 4.624719634471851e+00 9.248485839929061e+03 + 179080 9.508318063647958e-01 -6.075193199059759e+00 -5.989946598641268e+00 3.292002636339630e+00 4.781501807811392e+00 9.186244201559197e+03 + 179100 9.231533208151848e-01 -6.055070885938232e+00 -6.014230034638274e+00 3.422526461153692e+00 4.657040949419361e+00 9.260793235007475e+03 + 179120 9.670173527204713e-01 -6.135990584641366e+00 -5.975899760853457e+00 2.947278554195161e+00 4.866544838360255e+00 9.143235117886206e+03 + 179140 9.231424382349311e-01 -6.079468550606004e+00 -5.964979917689194e+00 3.267363978886650e+00 4.924775426153656e+00 9.109867912921512e+03 + 179160 8.972243785825634e-01 -6.040742675362394e+00 -6.016293343222900e+00 3.420850022581818e+00 4.561241871248716e+00 9.267123491028213e+03 + 179180 9.333702165616738e-01 -6.084953667060239e+00 -5.996722206386099e+00 3.234693947365735e+00 4.741332648331061e+00 9.206989927817067e+03 + 179200 8.887356777233024e-01 -6.000264399202305e+00 -5.990046786677777e+00 3.638971343030065e+00 4.697642455316334e+00 9.186528907809345e+03 + 179220 9.371855584504322e-01 -6.045983406395718e+00 -5.960070389854783e+00 3.438142346960688e+00 4.931468182935078e+00 9.094873876913249e+03 + 179240 9.424316522481940e-01 -6.015384537145374e+00 -6.030580222830965e+00 3.557461797380223e+00 4.470205818648800e+00 9.311161047273165e+03 + 179260 1.024691559280740e+00 -6.096939028048443e+00 -5.983375080803297e+00 3.140664189792147e+00 4.792765948837809e+00 9.166082095115918e+03 + 179280 9.777150200799675e-01 -5.988629774841272e+00 -5.955095023445792e+00 3.821675998350145e+00 5.014237730348997e+00 9.079700331290989e+03 + 179300 1.008927886205068e+00 -6.003358959666291e+00 -5.960030964866531e+00 3.704605956807700e+00 4.953402007933446e+00 9.094781385543050e+03 + 179320 1.058937543266019e+00 -6.056604242083179e+00 -6.007697801278803e+00 3.390539854463767e+00 4.671368205809753e+00 9.240714986475432e+03 + 179340 1.029438621065921e+00 -6.002930940880934e+00 -6.008335628418729e+00 3.735784470820268e+00 4.704749918605553e+00 9.242653323019065e+03 + 179360 9.323305601847687e-01 -5.854876623007066e+00 -5.988868639655203e+00 4.466991728634019e+00 4.697588833842857e+00 9.182904365762872e+03 + 179380 1.027891388580157e+00 -5.992853569818510e+00 -5.991610031377688e+00 3.684136522282514e+00 4.691277112446668e+00 9.191289617666527e+03 + 179400 9.816833079571915e-01 -5.921361948842689e+00 -5.981853514751498e+00 4.137564267948997e+00 4.790212335461043e+00 9.161408582209699e+03 + 179420 1.039203551354381e+00 -6.005047944980960e+00 -5.979298919164639e+00 3.716528525818559e+00 4.864383416704744e+00 9.153617089864681e+03 + 179440 1.024848111434919e+00 -5.984294333058598e+00 -6.035633382749717e+00 3.766534035106983e+00 4.471737267088313e+00 9.326739739346780e+03 + 179460 9.964425804936998e-01 -5.945395427747669e+00 -6.012848512276618e+00 3.982313260833368e+00 4.594987211137051e+00 9.256524325654116e+03 + 179480 1.023485143748230e+00 -5.990653363323336e+00 -6.014480964394620e+00 3.735142709534104e+00 4.598320936873444e+00 9.261565108518471e+03 + 179500 1.019145035002925e+00 -5.992163656984376e+00 -5.982641933271649e+00 3.832732271345608e+00 4.887407482386063e+00 9.163833087530053e+03 + 179520 1.021874916670919e+00 -6.006649160567449e+00 -5.980320686409351e+00 3.693644791106322e+00 4.844826964040322e+00 9.156750300003707e+03 + 179540 1.006258087077832e+00 -5.996510247440908e+00 -5.982869821445139e+00 3.778982520214743e+00 4.857307957131548e+00 9.164529722401407e+03 + 179560 9.579271034967214e-01 -5.941022847127870e+00 -5.988549636047189e+00 4.015106506577621e+00 4.742200329856078e+00 9.181915556479495e+03 + 179580 1.005944902811730e+00 -6.025961629892605e+00 -5.976379800892399e+00 3.531275182540387e+00 4.815981717422812e+00 9.144668624265430e+03 + 179600 9.560055416991273e-01 -5.967044835269899e+00 -5.986194806024526e+00 3.830053556469882e+00 4.720091460948421e+00 9.174709618057143e+03 + 179620 1.002016564192858e+00 -6.050628611469199e+00 -5.944529282037625e+00 3.459724824957692e+00 5.068963593371955e+00 9.047529406118811e+03 + 179640 9.275264593171521e-01 -5.954692606041387e+00 -5.995558704671607e+00 3.932655585318110e+00 4.697996122975065e+00 9.203398252011750e+03 + 179660 9.947450432442272e-01 -6.068989935616901e+00 -5.967144780562403e+00 3.278629757043341e+00 4.863440397853076e+00 9.116458418732631e+03 + 179680 9.628414125133123e-01 -6.035286530964840e+00 -5.984770047064842e+00 3.508980961702016e+00 4.799054429656422e+00 9.170318096442701e+03 + 179700 9.184617308834511e-01 -5.981321522261661e+00 -6.009654223250839e+00 3.757573621802128e+00 4.594882868250962e+00 9.246702149024228e+03 + 179720 9.696047206517507e-01 -6.068112142322871e+00 -5.992258557166714e+00 3.340478219910946e+00 4.776041244181966e+00 9.193304579047266e+03 + 179740 9.827059840701606e-01 -6.098398263427691e+00 -5.951967790338935e+00 3.170177198443020e+00 5.011003634961133e+00 9.070188539496932e+03 + 179760 9.345088298382044e-01 -6.033619293424791e+00 -5.986099712647723e+00 3.520510874241725e+00 4.793375660695006e+00 9.174398317039160e+03 + 179780 9.078825465894179e-01 -5.995169451688890e+00 -5.976390910858860e+00 3.770089147918263e+00 4.877918435334101e+00 9.144699753438297e+03 + 179800 9.840094398934990e-01 -6.101616715723819e+00 -6.013930840786265e+00 3.132570724973893e+00 4.636076588210620e+00 9.259872237248999e+03 + 179820 9.683153559832544e-01 -6.065401234054118e+00 -6.001942708276190e+00 3.336215925307922e+00 4.700604600499908e+00 9.223031953096741e+03 + 179840 9.044883609414539e-01 -5.951506467680859e+00 -6.013466749991403e+00 3.929424326123033e+00 4.573638796773192e+00 9.258453162901389e+03 + 179860 9.745267207657654e-01 -6.027651913954385e+00 -5.973026552302374e+00 3.512244285503057e+00 4.825911565356297e+00 9.134444866508455e+03 + 179880 9.353581158889364e-01 -5.933751050919922e+00 -6.015936596591660e+00 4.038539127325994e+00 4.566617005906793e+00 9.266027967059046e+03 + 179900 1.019350959973823e+00 -6.016851107430098e+00 -6.044048730719568e+00 3.581368127410697e+00 4.425195165663951e+00 9.352777512456874e+03 + 179920 1.046110029502650e+00 -6.021224697310109e+00 -6.010653739949583e+00 3.640411302852100e+00 4.701111375866608e+00 9.249784246075938e+03 + 179940 1.061253136921800e+00 -6.016704509793685e+00 -6.022602480689760e+00 3.544186570535905e+00 4.510319508942597e+00 9.286583549433466e+03 + 179960 9.630192247999988e-01 -5.850242475035231e+00 -6.067149708700074e+00 4.500469484641711e+00 4.254954582652253e+00 9.424341429080398e+03 + 179980 9.797844444306657e-01 -5.861742335694476e+00 -6.082488324250414e+00 4.386958660376444e+00 4.119401033756925e+00 9.471990648827617e+03 + 180000 1.034786354841392e+00 -5.936007848877723e+00 -6.022929515221119e+00 4.048403840447799e+00 4.549286181219628e+00 9.287542255518287e+03 + 180020 1.021964502611247e+00 -5.915192273264887e+00 -5.977865700479429e+00 4.136323202301416e+00 4.776442684553996e+00 9.149185241295132e+03 + 180040 9.913971663599148e-01 -5.871044258698255e+00 -6.065832911568029e+00 4.287052993332116e+00 4.168546405107265e+00 9.420195120295768e+03 + 180060 1.035697380772151e+00 -5.941843679182977e+00 -6.027278295111419e+00 4.012234641611554e+00 4.521655855986352e+00 9.300956189061377e+03 + 180080 1.018935140786330e+00 -5.928795451468694e+00 -6.039111031504174e+00 4.067731467750102e+00 4.434282335905537e+00 9.337504061438123e+03 + 180100 1.010760262180409e+00 -5.934412530656129e+00 -6.041448931487182e+00 4.075035024523258e+00 4.460415447121858e+00 9.344721412534369e+03 + 180120 1.021376235574492e+00 -5.974982648285839e+00 -5.986903888836091e+00 3.821035840641998e+00 4.752582232596443e+00 9.176895032975068e+03 + 180140 1.055138182449216e+00 -6.056332963733523e+00 -5.949852735617117e+00 3.408901288736006e+00 5.020327236342451e+00 9.063726648728303e+03 + 180160 9.627915541490045e-01 -5.953160429210146e+00 -5.978247893955608e+00 3.917014696584656e+00 4.772958591743595e+00 9.150335025198850e+03 + 180180 1.053868765815246e+00 -6.125249043554541e+00 -5.915496207625521e+00 2.993934998562399e+00 5.198368241613286e+00 8.959473277017731e+03 + 180200 9.352082602154845e-01 -5.983727611234171e+00 -6.012549128268754e+00 3.736285148794207e+00 4.570787537866283e+00 9.255609204215447e+03 + 180220 9.303007313691823e-01 -6.005093531989797e+00 -6.038229363864311e+00 3.617557024719403e+00 4.427285950342535e+00 9.334786571325480e+03 + 180240 8.897454525751072e-01 -5.967483225944779e+00 -6.032740080439469e+00 3.866941955732087e+00 4.492226998757985e+00 9.317824489479384e+03 + 180260 9.591163506030060e-01 -6.084811682175545e+00 -6.027357465046377e+00 3.218172571918331e+00 4.548083577685383e+00 9.301243993768687e+03 + 180280 9.813306391577704e-01 -6.128198512844894e+00 -5.972916434146478e+00 3.034131638916488e+00 4.925785364626806e+00 9.134107367971821e+03 + 180300 9.294405989803959e-01 -6.053561753809691e+00 -5.992886904589620e+00 3.460944095540228e+00 4.809348469164444e+00 9.195231573545969e+03 + 180320 9.814610239191737e-01 -6.126289771798487e+00 -5.982460732193657e+00 3.033015264383551e+00 4.858903867266429e+00 9.163289963507241e+03 + 180340 8.859763563462557e-01 -5.976464151159750e+00 -6.008574607287054e+00 3.849780846816632e+00 4.665397638656623e+00 9.243397445467770e+03 + 180360 9.937822301540788e-01 -6.125871504516959e+00 -5.953761009505927e+00 3.077362756662007e+00 5.065647853028382e+00 9.075646805621665e+03 + 180380 9.513988772968641e-01 -6.050947943554001e+00 -5.992729448213415e+00 3.434748916071980e+00 4.769048525600658e+00 9.194743507410172e+03 + 180400 9.720348401335628e-01 -6.069932066837446e+00 -5.965833130725153e+00 3.321297772676080e+00 4.919049973091170e+00 9.112461635631780e+03 + 180420 9.318507708208762e-01 -5.998007362083089e+00 -5.971642521872344e+00 3.749094675624184e+00 4.900485668060123e+00 9.130183590360770e+03 + 180440 9.637426235716429e-01 -6.030678129729671e+00 -5.999909229737474e+00 3.532975616246512e+00 4.709655401473595e+00 9.216740282601842e+03 + 180460 9.474128483537408e-01 -5.990077015741282e+00 -6.020259309910871e+00 3.715000773646942e+00 4.541689369830237e+00 9.279338794072431e+03 + 180480 9.519713512578222e-01 -5.981170207002066e+00 -5.992049720863887e+00 3.817216802694582e+00 4.754744950500677e+00 9.192636281517800e+03 + 180500 9.997220244895449e-01 -6.033960625086773e+00 -5.998149983193220e+00 3.480817749369180e+00 4.686447996800887e+00 9.211350322908525e+03 + 180520 9.773977577984200e-01 -5.981245144075377e+00 -6.048917184257764e+00 3.769842845941346e+00 4.381259518999704e+00 9.367824850745175e+03 + 180540 9.945423629088589e-01 -5.989457279287903e+00 -5.996486524527907e+00 3.769576460176713e+00 4.729213446236423e+00 9.206275913183439e+03 + 180560 9.842490220213659e-01 -5.957960818224442e+00 -6.005897735877062e+00 3.891726185723779e+00 4.616464986348403e+00 9.235163388349241e+03 + 180580 1.010210368020916e+00 -5.980709151072529e+00 -6.010153022099554e+00 3.760891811554489e+00 4.591820547692993e+00 9.248229497802486e+03 + 180600 1.018155795866661e+00 -5.978469711566603e+00 -5.948584929340415e+00 3.808760787553420e+00 4.980363831751299e+00 9.059862867219206e+03 + 180620 9.896673065011419e-01 -5.922801113711766e+00 -5.948700044964703e+00 4.133483363737769e+00 4.984767692636747e+00 9.060188716152341e+03 + 180640 1.040634496558391e+00 -5.982654885227849e+00 -5.931546472023783e+00 3.846027434189356e+00 5.139499851808493e+00 9.008066354660854e+03 + 180660 1.054466098703342e+00 -5.987283417838095e+00 -5.976390766895032e+00 3.769379459644987e+00 4.831926746992342e+00 9.144693828139914e+03 + 180680 1.072121812772743e+00 -5.998508477302567e+00 -6.009372847582433e+00 3.661292629441542e+00 4.598907734038688e+00 9.245864668121043e+03 + 180700 1.029446243351263e+00 -5.925391042147684e+00 -6.030153459261540e+00 4.070408716620914e+00 4.468846705621498e+00 9.309854418099128e+03 + 180720 1.017783625385705e+00 -5.903836249382018e+00 -6.026722451811116e+00 4.219930977266966e+00 4.514299386340717e+00 9.299249180682602e+03 + 180740 1.047962300133713e+00 -5.950878851328903e+00 -5.984033563167922e+00 3.999506148439217e+00 4.809126662384491e+00 9.168069594804532e+03 + 180760 1.021452290013906e+00 -5.917787674345241e+00 -5.979346787758189e+00 4.168255542949527e+00 4.814773587490365e+00 9.153657106734150e+03 + 180780 1.069411874842502e+00 -6.000884360594074e+00 -6.003374397619430e+00 3.644234710694995e+00 4.629936532763420e+00 9.227367217092431e+03 + 180800 1.052178118993749e+00 -5.998189073513588e+00 -6.033366883989587e+00 3.676855684028539e+00 4.474859252526775e+00 9.319763575529145e+03 + 180820 9.999655913702344e-01 -5.960333866323841e+00 -6.024999851625926e+00 3.894886833772555e+00 4.523564739139104e+00 9.293971033985450e+03 + 180840 9.477815705279524e-01 -5.931721242374710e+00 -6.024159962931067e+00 4.004369047686163e+00 4.473571609405782e+00 9.291344154125045e+03 + 180860 9.067995289209830e-01 -5.914762835906449e+00 -5.991048422788839e+00 4.125150687631036e+00 4.687107042595939e+00 9.189563819038076e+03 + 180880 9.178455460076030e-01 -5.964447884656017e+00 -5.965002752491132e+00 3.906444676518987e+00 4.903258539544236e+00 9.109922636371053e+03 + 180900 9.799435348963781e-01 -6.080037042714024e+00 -5.958434110931577e+00 3.284826886974150e+00 4.983089739261835e+00 9.089874206822165e+03 + 180920 1.064910560510838e+00 -6.220574776712455e+00 -5.933675206651498e+00 2.530123336567668e+00 5.177545065422666e+00 9.014583946248693e+03 + 180940 9.060692503607407e-01 -5.994232631079623e+00 -6.035949440150567e+00 3.748875002999614e+00 4.509330629658915e+00 9.327755086621299e+03 + 180960 9.233509983673189e-01 -6.025901219368020e+00 -6.028188475182017e+00 3.553143558193124e+00 4.540009781357462e+00 9.303785272401401e+03 + 180980 9.682015875231426e-01 -6.092225490543352e+00 -6.013201145831619e+00 3.257206037340018e+00 4.710976053652608e+00 9.257620623006997e+03 + 181000 1.018504547750321e+00 -6.162004995173548e+00 -5.972158783986933e+00 2.855533141078936e+00 4.945659464318720e+00 9.131798834548035e+03 + 181020 9.701680392607483e-01 -6.080433280246861e+00 -5.979518683457886e+00 3.273981175184143e+00 4.853448406429822e+00 9.154262739934687e+03 + 181040 9.128067485052869e-01 -5.978898734478824e+00 -5.995233002675540e+00 3.807360898902805e+00 4.713567003197435e+00 9.202416061333541e+03 + 181060 1.004570593788307e+00 -6.091190967988172e+00 -5.982067103083709e+00 3.175022236763096e+00 4.801628355908043e+00 9.162103737942607e+03 + 181080 1.012316984249455e+00 -6.071801671111086e+00 -5.986304234634141e+00 3.306633323695874e+00 4.797572834632027e+00 9.175049379093149e+03 + 181100 1.008274168518649e+00 -6.030960373132744e+00 -5.993919115160687e+00 3.566328688013135e+00 4.779025323404829e+00 9.198392555268409e+03 + 181120 1.014927996834015e+00 -6.008039738705468e+00 -5.974319866054709e+00 3.648278703347180e+00 4.841903430241265e+00 9.138395638564672e+03 + 181140 9.840754200499160e-01 -5.927501650599653e+00 -6.049296315422483e+00 4.095285090908090e+00 4.395921277831934e+00 9.368973477556608e+03 + 181160 1.031279684695693e+00 -5.970283916150835e+00 -6.005401794949570e+00 3.836605113585409e+00 4.634952819048888e+00 9.233641311024739e+03 + 181180 1.006286508171421e+00 -5.914263726271347e+00 -6.041621131880399e+00 4.158951308915015e+00 4.427645377413013e+00 9.345244482935343e+03 + 181200 1.023514089641117e+00 -5.928765921253950e+00 -6.011508444612775e+00 4.111146267240811e+00 4.636025893750329e+00 9.252416473560706e+03 + 181220 1.063272892422102e+00 -5.983801920162226e+00 -6.000292894068529e+00 3.773935427105247e+00 4.679241702965292e+00 9.217943858192886e+03 + 181240 1.011956326173096e+00 -5.908547431586107e+00 -6.013489568175513e+00 4.226937900248498e+00 4.624343912208976e+00 9.258485524364023e+03 + 181260 9.866250551073861e-01 -5.876125302965813e+00 -6.023194845714832e+00 4.321422196289584e+00 4.476926122886536e+00 9.288384349938933e+03 + 181280 1.027143618065350e+00 -5.943022183082362e+00 -5.983707646265501e+00 4.032676889092916e+00 4.799054663440251e+00 9.167103095490966e+03 + 181300 1.012083913897663e+00 -5.928831831996433e+00 -6.002603534510957e+00 4.110802319947798e+00 4.687193787975337e+00 9.225038817200822e+03 + 181320 1.025666181159366e+00 -5.956695652373408e+00 -5.994424052261999e+00 3.907651378289242e+00 4.691009067677943e+00 9.199927434518446e+03 + 181340 1.045972180937544e+00 -5.996111723454984e+00 -5.990664668300277e+00 3.737836641593027e+00 4.769114475220414e+00 9.188394325549456e+03 + 181360 9.764574273876603e-01 -5.904425822425165e+00 -6.005718857258745e+00 4.269492475938604e+00 4.687852194877708e+00 9.234598354100177e+03 + 181380 1.091612123159539e+00 -6.088281757507255e+00 -5.975327740338939e+00 3.250804414603619e+00 4.899403860761762e+00 9.141465230438718e+03 + 181400 9.892569978854406e-01 -5.950661130487217e+00 -5.974389520249618e+00 4.039696503150343e+00 4.903444417178185e+00 9.138573930637020e+03 + 181420 9.965602519826430e-01 -5.973002526749511e+00 -6.014464292203127e+00 3.811565342221249e+00 4.573485468799119e+00 9.261491126913132e+03 + 181440 9.806594498431351e-01 -5.960618993042701e+00 -6.007925585841321e+00 3.920236454761281e+00 4.648594678240023e+00 9.241350152101633e+03 + 181460 9.639201710825499e-01 -5.946025956665160e+00 -6.035719892436476e+00 3.949785333130235e+00 4.434748873839634e+00 9.327034800685546e+03 + 181480 9.898659960385122e-01 -5.997002751450939e+00 -6.011978729749038e+00 3.735061032171536e+00 4.649066647258698e+00 9.253841279035378e+03 + 181500 1.019081878738118e+00 -6.052346730319625e+00 -5.947039479155590e+00 3.450234818326094e+00 5.054925350754438e+00 9.055184820908818e+03 + 181520 9.471894848870266e-01 -5.954985100573234e+00 -5.960410280467213e+00 3.931688534900137e+00 4.900536312405035e+00 9.095923045883712e+03 + 181540 9.645158102101971e-01 -5.986977141201313e+00 -5.957549642916633e+00 3.766383766969418e+00 4.935361016010694e+00 9.087212506021617e+03 + 181560 1.009162946036698e+00 -6.054372210780657e+00 -5.985837615594498e+00 3.383785447637797e+00 4.777321698891047e+00 9.173631161931533e+03 + 181580 1.026040787949162e+00 -6.080601431499735e+00 -6.001384088166795e+00 3.250861485743189e+00 4.705739730005195e+00 9.221314234456337e+03 + 181600 9.818197038578823e-01 -6.018052330433643e+00 -5.998322851922516e+00 3.633428646336736e+00 4.746718365074555e+00 9.211896176602591e+03 + 181620 9.628893040335789e-01 -5.992927832365296e+00 -6.005791180725057e+00 3.731230005158143e+00 4.657366668279667e+00 9.234827636194381e+03 + 181640 1.003982993014364e+00 -6.054138229741735e+00 -6.033054619961514e+00 3.355666582969798e+00 4.476731933005894e+00 9.318821140968934e+03 + 181660 9.727142675398996e-01 -6.008020510485025e+00 -6.020887597527756e+00 3.674808344974523e+00 4.600923539999876e+00 9.281279855941930e+03 + 181680 9.462944864764442e-01 -5.967570993569518e+00 -6.000801972144816e+00 3.827267807945716e+00 4.636450386489038e+00 9.219505517986767e+03 + 181700 1.030273791933878e+00 -6.086919811274250e+00 -5.985254661066538e+00 3.171012012461752e+00 4.754789037585590e+00 9.171857187011457e+03 + 181720 9.905825826729636e-01 -6.019610500052217e+00 -6.017171695440518e+00 3.595052142539841e+00 4.609056136024011e+00 9.269842862509262e+03 + 181740 1.002613845302332e+00 -6.029154923628338e+00 -6.039000815458850e+00 3.520688067682312e+00 4.464151433144679e+00 9.337161466928632e+03 + 181760 9.808623118470851e-01 -5.987281176919955e+00 -6.015581206666042e+00 3.811203192185828e+00 4.648700041968345e+00 9.264931545141821e+03 + 181780 1.006858030373523e+00 -6.014567237880800e+00 -6.016684801417337e+00 3.545889455671579e+00 4.533730078152889e+00 9.268354181145247e+03 + 181800 9.707834853625439e-01 -5.948055536058483e+00 -6.014894104598900e+00 3.999406044982323e+00 4.615608641188194e+00 9.262805408062719e+03 + 181820 1.015050267280861e+00 -5.999572886907787e+00 -6.018093331935707e+00 3.724765529327150e+00 4.618418267947228e+00 9.272680854611132e+03 + 181840 9.874341760438577e-01 -5.945782150646543e+00 -5.989470236874347e+00 3.990672448190378e+00 4.739808696360837e+00 9.184740204843290e+03 + 181860 1.028764960934823e+00 -5.993728989352462e+00 -5.991714181186871e+00 3.737810697251242e+00 4.749380037528624e+00 9.191606693291553e+03 + 181880 1.094871989340855e+00 -6.077376192462176e+00 -6.023687855040802e+00 3.272991245312908e+00 4.581277987029804e+00 9.289902479639015e+03 + 181900 1.061484943226851e+00 -6.018743641128387e+00 -5.997678261901029e+00 3.606192628960282e+00 4.727153296340671e+00 9.209930227679331e+03 + 181920 1.041770129689278e+00 -5.984723358621962e+00 -5.981417142040281e+00 3.855636900533377e+00 4.874621707780751e+00 9.160090388246912e+03 + 181940 1.089693812783205e+00 -6.052619385536496e+00 -5.999148656113325e+00 3.406772059186081e+00 4.713809262102561e+00 9.214438445125801e+03 + 181960 1.057743810563610e+00 -6.005909495032145e+00 -5.990143219052668e+00 3.710765509769440e+00 4.801297906266917e+00 9.186811848488474e+03 + 181980 1.019357929555168e+00 -5.953914669978669e+00 -5.977523997605832e+00 3.955347151034168e+00 4.819778738267356e+00 9.148161395016159e+03 + 182000 1.015788569884573e+00 -5.958131039905917e+00 -5.972259121410397e+00 3.962478390695513e+00 4.881352760383236e+00 9.132029114260142e+03 + 182020 1.064769751724360e+00 -6.041710444403511e+00 -6.000523814358916e+00 3.440238306651224e+00 4.676738309977686e+00 9.218657846795448e+03 + 182040 1.017575686263339e+00 -5.987984033952788e+00 -6.058971198967568e+00 3.718402305095835e+00 4.310783018352685e+00 9.398948948001018e+03 + 182060 9.526618395678402e-01 -5.914395069367944e+00 -6.039496186059900e+00 4.152639695031388e+00 4.434289723650941e+00 9.338678107251872e+03 + 182080 9.885129185707038e-01 -5.993515333089393e+00 -5.974206971427144e+00 3.793987370150671e+00 4.904858970774615e+00 9.138043109810415e+03 + 182100 1.025382237816900e+00 -6.075618811728842e+00 -6.020398045814337e+00 3.311073200813982e+00 4.628159384080975e+00 9.279786079496715e+03 + 182120 1.030362623954514e+00 -6.115355815721492e+00 -6.004645382018563e+00 3.049354077727444e+00 4.685070520433909e+00 9.231331267822487e+03 + 182140 9.566262185284485e-01 -6.038505121121864e+00 -5.993531985218322e+00 3.539655412234968e+00 4.797898118163396e+00 9.197200573994960e+03 + 182160 9.162558026861913e-01 -6.003606004133784e+00 -6.007288976372581e+00 3.654977966857007e+00 4.633829770323722e+00 9.239431585200222e+03 + 182180 9.696037854035258e-01 -6.102125674718873e+00 -6.019935994545732e+00 3.104455553000762e+00 4.576401415366838e+00 9.278353660428995e+03 + 182200 9.880939815007709e-01 -6.145174583963687e+00 -5.952926634122242e+00 2.936739437178391e+00 5.040656915442060e+00 9.073127942151788e+03 + 182220 9.428936785225798e-01 -6.087241863139080e+00 -5.975155516653115e+00 3.228181795963988e+00 4.871798942792462e+00 9.140931217104158e+03 + 182240 9.138093616092147e-01 -6.045415221885472e+00 -5.960576345475547e+00 3.456477976553503e+00 4.943635933672985e+00 9.096403361594543e+03 + 182260 9.487712667746948e-01 -6.090045164192873e+00 -5.954285701984497e+00 3.208953387805698e+00 4.988505228515075e+00 9.077253970347027e+03 + 182280 9.427556601355718e-01 -6.063709840726833e+00 -5.986174803162628e+00 3.297467833015790e+00 4.742686017217740e+00 9.174664970982583e+03 + 182300 8.902619345958647e-01 -5.960782122354770e+00 -5.971262151856626e+00 3.860305120718892e+00 4.800127169539909e+00 9.129032329552932e+03 + 182320 9.750626195912316e-01 -6.047424575175914e+00 -5.969191930254336e+00 3.432176476944995e+00 4.881400430547372e+00 9.122713389470387e+03 + 182340 1.071867747953989e+00 -6.137360215123249e+00 -5.982502580395765e+00 2.962311786894896e+00 4.851528289641639e+00 9.163423512453041e+03 + 182360 1.006009586177461e+00 -5.989125516484894e+00 -6.052758565948650e+00 3.744885861569823e+00 4.379495044366356e+00 9.379731369936144e+03 + 182380 1.053304915955003e+00 -6.024674997382701e+00 -6.027244994813511e+00 3.539827538110176e+00 4.525070215156649e+00 9.300873107805835e+03 + 182400 9.849575935930915e-01 -5.904078422813933e+00 -6.052561078503235e+00 4.221867901915020e+00 4.369257515330344e+00 9.379100441236973e+03 + 182420 1.015316062399475e+00 -5.939904462427696e+00 -6.039133959521897e+00 4.028242866031373e+00 4.458451738001427e+00 9.337562864809912e+03 + 182440 1.072179257331362e+00 -6.021934726972622e+00 -6.002161625374856e+00 3.592829900283994e+00 4.706370109535952e+00 9.223671936789746e+03 + 182460 9.501501885831585e-01 -5.843924629358502e+00 -5.970709826570117e+00 4.585252472113124e+00 4.857232249778170e+00 9.127309220774854e+03 + 182480 9.716649654670941e-01 -5.876658844571335e+00 -5.955358418695038e+00 4.350314800914693e+00 4.898409667576654e+00 9.080490098232032e+03 + 182500 1.105768289425222e+00 -6.077192317261938e+00 -5.977519966482068e+00 3.249871428120305e+00 4.822205490544753e+00 9.148154239991345e+03 + 182520 1.022767804765886e+00 -5.958758662483815e+00 -6.031614862710540e+00 3.882850422084541e+00 4.464498845922138e+00 9.314350662081333e+03 + 182540 1.002489569450779e+00 -5.936652882064885e+00 -6.033063051255612e+00 4.038260676730509e+00 4.484658565811884e+00 9.318844812148560e+03 + 182560 1.084657948399603e+00 -6.072089857274799e+00 -6.002128159727716e+00 3.320091827580915e+00 4.721822721433968e+00 9.223605591811534e+03 + 182580 1.067050310330299e+00 -6.064777866087181e+00 -6.003331510230780e+00 3.359000808374712e+00 4.711835292495010e+00 9.227260104333391e+03 + 182600 9.564823493849928e-01 -5.922446449569024e+00 -6.022011401854908e+00 4.150577474668788e+00 4.578860111016668e+00 9.284751193730981e+03 + 182620 9.441944083056689e-01 -5.927197829985434e+00 -6.006078754417603e+00 4.087493737974933e+00 4.634547263101816e+00 9.235703042022618e+03 + 182640 1.036913740959963e+00 -6.086524645344479e+00 -5.990094939801179e+00 3.202702660057022e+00 4.756416951735356e+00 9.186657670220742e+03 + 182660 9.890626708118589e-01 -6.037048878787637e+00 -6.013357961311989e+00 3.522538927428304e+00 4.658575841731103e+00 9.258108052580928e+03 + 182680 1.000888646270679e+00 -6.075716114045341e+00 -5.962188197127944e+00 3.268042379299279e+00 4.919937246627335e+00 9.101336107667823e+03 + 182700 9.901298427721023e-01 -6.077392185884660e+00 -5.991063240596166e+00 3.278199255167244e+00 4.773913418374891e+00 9.189626347437672e+03 + 182720 9.620443388576426e-01 -6.049509329389321e+00 -6.014866968031617e+00 3.439066830102729e+00 4.637988629906757e+00 9.262718295569270e+03 + 182740 9.784743672164511e-01 -6.085900908955075e+00 -5.992822553757209e+00 3.236005260603938e+00 4.770475579979003e+00 9.195040974855114e+03 + 182760 1.013783831386332e+00 -6.148071141692538e+00 -5.977698717716732e+00 2.887242729718550e+00 4.865547553235023e+00 9.148738400907629e+03 + 182780 9.349864912068125e-01 -6.037534082094063e+00 -5.982225882025431e+00 3.523655873743368e+00 4.841244117453754e+00 9.162580037729231e+03 + 182800 9.580642636603198e-01 -6.073212487971444e+00 -6.024871513690589e+00 3.304646766741784e+00 4.582228121804044e+00 9.293550163716329e+03 + 182820 9.122653868202937e-01 -6.003704314486412e+00 -6.017519820900538e+00 3.697547429595031e+00 4.618216653822413e+00 9.270902707054960e+03 + 182840 1.001245185439745e+00 -6.125796924445758e+00 -5.992812558137458e+00 3.065723516984460e+00 4.829340327590894e+00 9.195002711475150e+03 + 182860 9.141892594135640e-01 -5.974001064899376e+00 -6.022556476900679e+00 3.848357295324167e+00 4.569544605686966e+00 9.286426545563665e+03 + 182880 9.649782369911409e-01 -6.013898396189093e+00 -6.045681252584395e+00 3.610211765630601e+00 4.427709685827645e+00 9.357820965497796e+03 + 182900 1.005357998909439e+00 -6.030490932872071e+00 -6.019693891491767e+00 3.512380345602465e+00 4.574378628044929e+00 9.277612529971177e+03 + 182920 1.044993125806035e+00 -6.043939723735056e+00 -6.023373639212405e+00 3.412366937291548e+00 4.530460577211901e+00 9.288940331911288e+03 + 182940 1.007880320715940e+00 -5.950002520719052e+00 -5.988067674742375e+00 4.002889128744857e+00 4.784313123779392e+00 9.180401423421969e+03 + 182960 9.810044460800680e-01 -5.880192271296242e+00 -5.980900893774838e+00 4.347616401684764e+00 4.769331906803707e+00 9.158454251363086e+03 + 182980 9.877139432990183e-01 -5.861948081038506e+00 -6.005056636967500e+00 4.444030319126291e+00 4.622278845004548e+00 9.232537550085091e+03 + 183000 1.031229386741818e+00 -5.905802247691381e+00 -5.997450745909051e+00 4.202423602417909e+00 4.676163743092786e+00 9.209217950040384e+03 + 183020 1.047363247977307e+00 -5.915034788759170e+00 -5.999890236669732e+00 4.137780978804355e+00 4.650527865563780e+00 9.216710259468198e+03 + 183040 1.063495286684998e+00 -5.933113104036942e+00 -6.015345186340257e+00 4.013418966237922e+00 4.541229624278679e+00 9.264203316159666e+03 + 183060 1.098259251577959e+00 -5.986469755056461e+00 -6.008414234112216e+00 3.743879465399741e+00 4.617870870764438e+00 9.242901862942350e+03 + 183080 1.079597470674723e+00 -5.968037969966009e+00 -5.984881211655237e+00 3.880933937205047e+00 4.784217436942271e+00 9.170697151207953e+03 + 183100 1.057214484272781e+00 -5.950549249047874e+00 -6.013472826848893e+00 3.976040318144328e+00 4.614723397018683e+00 9.258454995796481e+03 + 183120 9.724056520294404e-01 -5.848759222746648e+00 -6.053637943080783e+00 4.516011638471676e+00 4.339566321433564e+00 9.382427135581094e+03 + 183140 1.052014891392743e+00 -5.996467291555065e+00 -5.971281140042882e+00 3.739368031453873e+00 4.883990810981185e+00 9.129105195301594e+03 + 183160 1.057756386629021e+00 -6.036508675357037e+00 -6.007197435855051e+00 3.524941664150271e+00 4.693251337270324e+00 9.239156546206572e+03 + 183180 9.742602203603242e-01 -5.948732191019153e+00 -6.015147038916361e+00 3.988574764757764e+00 4.607210430467499e+00 9.263608406229039e+03 + 183200 9.937897335521763e-01 -6.008690816433447e+00 -6.025848884566182e+00 3.639288250620909e+00 4.540763968200284e+00 9.296575680858035e+03 + 183220 1.002372078518033e+00 -6.048579026278200e+00 -5.974472537706095e+00 3.436993579868363e+00 4.862524505191431e+00 9.138864002451426e+03 + 183240 9.889035100578704e-01 -6.048227378942555e+00 -6.021274427183096e+00 3.393084246765260e+00 4.547852266723885e+00 9.282478524244076e+03 + 183260 9.358445811720060e-01 -5.981752897095433e+00 -6.021045948715351e+00 3.840869365270255e+00 4.615242582288602e+00 9.281774568500243e+03 + 183280 1.026918384235583e+00 -6.125967228017389e+00 -5.976457799517840e+00 3.007648046447226e+00 4.866154321400920e+00 9.144935013734112e+03 + 183300 9.431543541729727e-01 -6.005107932187757e+00 -6.009613177565723e+00 3.609335453441685e+00 4.583465637296936e+00 9.246586767559105e+03 + 183320 9.986003469017705e-01 -6.087238812515289e+00 -5.962137056080940e+00 3.236835390897606e+00 4.955189035777877e+00 9.101183863871953e+03 + 183340 9.240943091646798e-01 -5.971397236574089e+00 -6.009093518172287e+00 3.815592882701114e+00 4.599135000283535e+00 9.244987447826792e+03 + 183360 9.634058891940351e-01 -6.022544356233273e+00 -6.019047237334718e+00 3.524904234256025e+00 4.544985232148933e+00 9.275601239847494e+03 + 183380 9.979258153419266e-01 -6.065047154748023e+00 -6.006163810764862e+00 3.333805533343365e+00 4.671922806662709e+00 9.235994101829301e+03 + 183400 9.290772944652672e-01 -5.953961215398813e+00 -6.044603937415631e+00 3.928271190446292e+00 4.407786653709824e+00 9.354465174071371e+03 + 183420 9.828734309403858e-01 -6.022433893474582e+00 -6.018196850104997e+00 3.622166189551808e+00 4.646495948260311e+00 9.272981358821489e+03 + 183440 1.061379763790595e+00 -6.127692967412578e+00 -5.994632262783430e+00 3.009734417580240e+00 4.773789574638306e+00 9.200590148780888e+03 + 183460 9.466087243126081e-01 -5.947962791738287e+00 -6.020896401306304e+00 4.007031192819722e+00 4.588235120240563e+00 9.281292474063499e+03 + 183480 1.035052804771157e+00 -6.068467030312210e+00 -6.001034314885581e+00 3.295646158708948e+00 4.682855245867636e+00 9.220222892314410e+03 + 183500 1.039798099962219e+00 -6.065391051822946e+00 -5.959410775060739e+00 3.394963293630178e+00 5.003518443193595e+00 9.092867326033655e+03 + 183520 9.474717466935799e-01 -5.919151116899060e+00 -5.974690750219394e+00 4.146111506855162e+00 4.827194337599329e+00 9.139493542302886e+03 + 183540 9.786989012947097e-01 -5.953176634931132e+00 -6.002449213450504e+00 3.956566153123887e+00 4.673635382358766e+00 9.224586037475017e+03 + 183560 1.030116725417436e+00 -6.015351183505921e+00 -6.033169621411803e+00 3.589156666775229e+00 4.486840438925301e+00 9.319190476559248e+03 + 183580 1.006234479606220e+00 -5.971137637983199e+00 -6.033600342917856e+00 3.838165807997568e+00 4.479495290190425e+00 9.320489029967044e+03 + 183600 9.974146461467154e-01 -5.951604023837853e+00 -5.983602734708565e+00 4.001925153389386e+00 4.818183603785251e+00 9.166749244899396e+03 + 183620 9.805326134018771e-01 -5.917996205297022e+00 -6.019128697650789e+00 4.096918912522282e+00 4.516200491224342e+00 9.275873505713076e+03 + 183640 1.032125881422371e+00 -5.982636263840545e+00 -6.016134039425769e+00 3.825607142221499e+00 4.633257731047129e+00 9.266629778163917e+03 + 183660 1.077642571295205e+00 -6.035760827804297e+00 -5.987559113187468e+00 3.589704209447742e+00 4.866485913968800e+00 9.178900441833153e+03 + 183680 1.018386505443185e+00 -5.927402634929761e+00 -6.054145926134913e+00 4.128632756257134e+00 4.400853164696227e+00 9.384015062602222e+03 + 183700 1.008109267276090e+00 -5.887446389066246e+00 -6.093033500847690e+00 4.221181179941819e+00 4.040668169590040e+00 9.504847955762505e+03 + 183720 1.031324340743340e+00 -5.896574851595319e+00 -6.044908072956693e+00 4.247902770546983e+00 4.396150458998155e+00 9.355434269205278e+03 + 183740 1.006784798808802e+00 -5.836705007327609e+00 -6.049473165874452e+00 4.531344627226689e+00 4.309596935084593e+00 9.369529806105747e+03 + 183760 1.101424887944964e+00 -5.956092396097172e+00 -5.977241749824822e+00 3.942899067163566e+00 4.821456205207484e+00 9.147315049578781e+03 + 183780 1.115052803102607e+00 -5.962449670861370e+00 -5.977979025609891e+00 3.851105497534266e+00 4.761933539408380e+00 9.149526703306186e+03 + 183800 1.058038526784510e+00 -5.872337742893871e+00 -5.980981332503998e+00 4.396671082550046e+00 4.772822778467545e+00 9.158733851948051e+03 + 183820 1.113766544673128e+00 -5.958705299936583e+00 -5.951357502871469e+00 3.933554287778860e+00 4.975746475594667e+00 9.068301118622367e+03 + 183840 1.043034808067082e+00 -5.865365421385027e+00 -5.972696111670938e+00 4.385120555224953e+00 4.768811122232610e+00 9.133406410393760e+03 + 183860 1.044918719754484e+00 -5.884952786190659e+00 -5.994835133488733e+00 4.278017228032663e+00 4.647055785608834e+00 9.201182440227418e+03 + 183880 1.093462489546802e+00 -5.983724684974982e+00 -6.007550821780359e+00 3.809986903039649e+00 4.673173538420423e+00 9.240239073837531e+03 + 183900 1.057148807307428e+00 -5.965071148323464e+00 -5.975913232270150e+00 3.970985589981417e+00 4.908728666152477e+00 9.143235005001532e+03 + 183920 9.912250083079684e-01 -5.907250534550263e+00 -6.013445829260425e+00 4.188899917949707e+00 4.579110102055215e+00 9.258356978295453e+03 + 183940 1.031487113506778e+00 -6.006802958831130e+00 -5.985000166665996e+00 3.653518883249906e+00 4.778713889833291e+00 9.171067960716873e+03 + 183960 9.927317643620102e-01 -5.984129767330581e+00 -5.985472801129321e+00 3.749977112294655e+00 4.742265204388483e+00 9.172479544433027e+03 + 183980 9.498852608275915e-01 -5.946807728370525e+00 -5.971967134166327e+00 4.048863090730922e+00 4.904393889245964e+00 9.131168761827077e+03 + 184000 9.868994024346354e-01 -6.019713074155316e+00 -6.009930171706437e+00 3.562542680347696e+00 4.618717620108418e+00 9.247553552423098e+03 + 184020 1.039678731393795e+00 -6.113236783503364e+00 -5.988072468008662e+00 3.083977038422753e+00 4.802689907108556e+00 9.180462392118807e+03 + 184040 1.022886842586167e+00 -6.100339353888593e+00 -5.990249874116433e+00 3.202766747434130e+00 4.834917576577811e+00 9.187149082308233e+03 + 184060 9.879602440484496e-01 -6.058007908874687e+00 -5.997026768033187e+00 3.404975920606850e+00 4.755139068119789e+00 9.207919829383292e+03 + 184080 9.779395332185139e-01 -6.049004257386456e+00 -5.981753717711048e+00 3.522084163151884e+00 4.908247168955457e+00 9.161125205702463e+03 + 184100 1.016464091175654e+00 -6.108707635785919e+00 -5.959932765065052e+00 3.162937082411502e+00 5.017225412927556e+00 9.094469983344146e+03 + 184120 9.764291441895490e-01 -6.047393485704079e+00 -5.990483286670049e+00 3.460995954646740e+00 4.787783124324979e+00 9.187876187436710e+03 + 184140 9.829202884396158e-01 -6.052481356475666e+00 -5.992418660493836e+00 3.446975769520605e+00 4.791865064520436e+00 9.193791702440873e+03 + 184160 9.971653219186806e-01 -6.065312566917989e+00 -5.945362259773045e+00 3.365683429599877e+00 5.054456655476188e+00 9.050093697386697e+03 + 184180 9.846653687718639e-01 -6.032301026344959e+00 -5.999723206910732e+00 3.562380961734957e+00 4.749447842327552e+00 9.216198718039375e+03 + 184200 9.846500602136498e-01 -6.012135630554483e+00 -6.001411636772502e+00 3.617503630078308e+00 4.679082461907116e+00 9.221374946068874e+03 + 184220 9.764643303548862e-01 -5.972629342184030e+00 -5.997819129732612e+00 3.872162438626460e+00 4.727518780415475e+00 9.210333591439694e+03 + 184240 1.011333300997123e+00 -5.988852935303811e+00 -6.009413667786253e+00 3.759582012171433e+00 4.641519104494178e+00 9.245969152286087e+03 + 184260 1.023675915995934e+00 -5.962785403940132e+00 -6.013358081448491e+00 3.948971254830431e+00 4.658575114480886e+00 9.258079462302390e+03 + 184280 1.060054260078496e+00 -5.973740275953009e+00 -6.021090022982408e+00 3.801229851169018e+00 4.529340276376535e+00 9.281886230244621e+03 + 184300 1.063199315893236e+00 -5.940433320437109e+00 -6.015701580592967e+00 3.982386495080835e+00 4.550184497540283e+00 9.265312797343237e+03 + 184320 1.081792110424217e+00 -5.939355144842389e+00 -6.020752014326860e+00 4.031197213760992e+00 4.563803793056320e+00 9.280850261450802e+03 + 184340 1.093272467808163e+00 -5.938266756706020e+00 -6.006595536716134e+00 4.114874666266844e+00 4.722520237604239e+00 9.237296768854121e+03 + 184360 1.110756093719319e+00 -5.960146618950159e+00 -6.026692165120724e+00 3.909264541104779e+00 4.527149717103406e+00 9.299156227246693e+03 + 184380 1.107670286957531e+00 -5.962283487283559e+00 -5.971273719595462e+00 3.915806170034438e+00 4.864182864865535e+00 9.129061861545691e+03 + 184400 1.056238517927874e+00 -5.895843122222988e+00 -5.981723011518270e+00 4.272291545613071e+00 4.779155931409645e+00 9.161011245455908e+03 + 184420 1.043975892627608e+00 -5.892787313531788e+00 -6.031400022184282e+00 4.239210980725054e+00 4.443275357395099e+00 9.313700551585469e+03 + 184440 1.131282813112820e+00 -6.041916775116773e+00 -6.019230552765037e+00 3.422707858189155e+00 4.552975657614386e+00 9.276174590700180e+03 + 184460 1.021584923966032e+00 -5.903170004195438e+00 -6.016263258159931e+00 4.195813987407101e+00 4.546415022018492e+00 9.267027456981394e+03 + 184480 1.046694216894824e+00 -5.960731962998117e+00 -6.000867204681484e+00 3.905443641912329e+00 4.674980873257861e+00 9.219685836947174e+03 + 184500 1.018405997592934e+00 -5.935041190270415e+00 -6.013766445318071e+00 4.024343289521956e+00 4.572290692344469e+00 9.259345065078560e+03 + 184520 1.067671387763121e+00 -6.023400989872116e+00 -5.943746477205917e+00 3.573121991582715e+00 5.030510529808026e+00 9.045157586823949e+03 + 184540 1.042082871822497e+00 -5.998356814095334e+00 -5.959225481080560e+00 3.747368850238591e+00 4.972067019963640e+00 9.092272617861177e+03 + 184560 9.864592649516118e-01 -5.927595537860892e+00 -5.999770788000561e+00 4.081319704345249e+00 4.666878248959408e+00 9.216315967120465e+03 + 184580 1.013281044411565e+00 -5.977649403324318e+00 -5.968669623675581e+00 3.851534899812935e+00 4.903098184172394e+00 9.121087219984693e+03 + 184600 9.484236434955317e-01 -5.890142817557208e+00 -6.011296042223881e+00 4.301009678207553e+00 4.605329113770591e+00 9.251753056364882e+03 + 184620 1.018340227122341e+00 -6.002462022232959e+00 -6.005352566554682e+00 3.635027552320818e+00 4.618429599515198e+00 9.233513819782984e+03 + 184640 1.005991746881530e+00 -5.993274318394762e+00 -5.989568075212894e+00 3.767272080442044e+00 4.788553902331607e+00 9.185048784188382e+03 + 184660 9.900007034189967e-01 -5.978241999524661e+00 -5.981331954620222e+00 3.833057124647236e+00 4.815314124319516e+00 9.159843040035092e+03 + 184680 1.024029947038209e+00 -6.039447766766517e+00 -5.989638253701488e+00 3.498798113547532e+00 4.784812045564166e+00 9.185271227290650e+03 + 184700 1.025932717479758e+00 -6.053042711404411e+00 -5.995958699014500e+00 3.454731382545428e+00 4.782516615410669e+00 9.204642785454624e+03 + 184720 8.709723632678468e-01 -5.834295036451319e+00 -6.068562329702715e+00 4.555410314391826e+00 4.210211263795842e+00 9.428744716468311e+03 + 184740 1.007938921452820e+00 -6.048241926894878e+00 -6.008964481395323e+00 3.412903641270719e+00 4.638440811494212e+00 9.244596118436815e+03 + 184760 1.001163663396630e+00 -6.050343617837003e+00 -6.009379928597156e+00 3.432295655982411e+00 4.667515498708035e+00 9.245846859265743e+03 + 184780 9.602290082104903e-01 -6.003011880796844e+00 -6.004760913444803e+00 3.728742717534523e+00 4.718699501408015e+00 9.231664350205572e+03 + 184800 9.876109397736118e-01 -6.057098727741096e+00 -5.993864615743540e+00 3.422652161125108e+00 4.785752217662281e+00 9.198228195075490e+03 + 184820 9.613140200318818e-01 -6.033783465880657e+00 -6.024371278183887e+00 3.517682590975075e+00 4.571728829261270e+00 9.292017843678716e+03 + 184840 9.403438782999645e-01 -6.023770937127686e+00 -6.005700754900780e+00 3.566877983436505e+00 4.670639766135064e+00 9.234553477119085e+03 + 184860 9.248302508182439e-01 -6.022425305338126e+00 -5.983504546561015e+00 3.595249566558121e+00 4.818738586424250e+00 9.166457808174275e+03 + 184880 9.142287992307874e-01 -6.027034015554238e+00 -5.976283254208735e+00 3.532255862808601e+00 4.823674588109416e+00 9.144373105577295e+03 + 184900 9.702061179794451e-01 -6.126860383147412e+00 -5.939703873956619e+00 2.997719336775240e+00 5.072400974924975e+00 9.032886693729855e+03 + 184920 9.369193761322693e-01 -6.089664121383340e+00 -5.962934734222476e+00 3.242857731157446e+00 4.970557483544405e+00 9.103597926778035e+03 + 184940 9.326974353530773e-01 -6.087693168833210e+00 -5.980633961534583e+00 3.241228982559597e+00 4.855979518227105e+00 9.157680121813359e+03 + 184960 9.436810154952806e-01 -6.102264682657212e+00 -5.996159313225495e+00 3.139942217198551e+00 4.749215668228328e+00 9.205277028662942e+03 + 184980 9.399605712478332e-01 -6.087790072104664e+00 -5.989951697500601e+00 3.245398762470294e+00 4.807201849886360e+00 9.186228882094596e+03 + 185000 9.412967735263311e-01 -6.070893259622386e+00 -5.961625281833065e+00 3.368762830485333e+00 4.996196468116529e+00 9.099643040212581e+03 + 185020 9.987256182182895e-01 -6.126629633624533e+00 -5.974549572853361e+00 3.028531966411728e+00 4.901799209673141e+00 9.139108027254226e+03 + 185040 9.863156396480806e-01 -6.067762409842441e+00 -6.011592356811549e+00 3.358882224714888e+00 4.681419361505881e+00 9.252678003476818e+03 + 185060 9.574272614564947e-01 -5.982801370180530e+00 -6.037690922178650e+00 3.761559526564238e+00 4.446375224860310e+00 9.333129256777444e+03 + 185080 1.012097437572886e+00 -6.026103163211535e+00 -5.986077101381630e+00 3.562328090398865e+00 4.792163931439227e+00 9.174357613822167e+03 + 185100 1.029343463421197e+00 -6.020958590465044e+00 -5.995505655397212e+00 3.580946118620209e+00 4.727100810608679e+00 9.203229916056336e+03 + 185120 1.023393382980984e+00 -5.987637845733543e+00 -5.959377467834615e+00 3.760608702407979e+00 4.922884165582970e+00 9.092751378449322e+03 + 185140 1.002260308617291e+00 -5.936111200692053e+00 -5.992843381901519e+00 4.052502130578477e+00 4.726737166797055e+00 9.195059530618140e+03 + 185160 1.063971401936506e+00 -6.010398598339458e+00 -5.972107507609772e+00 3.692795290854355e+00 4.912668659351354e+00 9.131624680313887e+03 + 185180 9.862668811129939e-01 -5.883840334827548e+00 -6.050561807277160e+00 4.303904515373567e+00 4.346564020503417e+00 9.372915021931532e+03 + 185200 1.005396258302665e+00 -5.908399463733574e+00 -6.037184744884700e+00 4.222250585125001e+00 4.482745571297387e+00 9.331542181607500e+03 + 185220 1.050572007105858e+00 -5.975954949726953e+00 -6.019021738117678e+00 3.798651793264707e+00 4.551355629761201e+00 9.275542472350844e+03 + 185240 9.948202791580726e-01 -5.898560438997340e+00 -6.052553869596414e+00 4.197475833014334e+00 4.313221724108079e+00 9.379079609207227e+03 + 185260 1.054151143865180e+00 -5.996977682555052e+00 -5.989729909135392e+00 3.730934119777992e+00 4.772551956342989e+00 9.185544667918906e+03 + 185280 1.005062924340876e+00 -5.935775057434811e+00 -6.011386534554047e+00 4.033721145269915e+00 4.599548342812993e+00 9.252021314635876e+03 + 185300 1.012829714159185e+00 -5.963495863736303e+00 -6.019933959034971e+00 3.883441647663263e+00 4.559365370691289e+00 9.278343361560732e+03 + 185320 1.030089083503214e+00 -6.010648952852334e+00 -6.024506215894244e+00 3.590209977746933e+00 4.510639428955754e+00 9.292437285956645e+03 + 185340 1.023706316066184e+00 -6.028112577073878e+00 -5.969060213191920e+00 3.541386443186380e+00 4.880474254920356e+00 9.122320151671151e+03 + 185360 1.015569157115144e+00 -6.044855130531360e+00 -5.992276851707185e+00 3.440098586309802e+00 4.742011199780567e+00 9.193370968281557e+03 + 185380 1.038658504349097e+00 -6.112492479135274e+00 -5.965187951376989e+00 3.110771119679198e+00 4.956616513369271e+00 9.110502414452141e+03 + 185400 9.566770268019414e-01 -6.022034298453513e+00 -5.964523867966527e+00 3.626057876048340e+00 4.956291667614972e+00 9.108463353313931e+03 + 185420 9.790308554285170e-01 -6.083166222235739e+00 -5.980854535508378e+00 3.262830706757951e+00 4.850320244628813e+00 9.158366360164333e+03 + 185440 9.644899540033735e-01 -6.085612805784473e+00 -5.997010327208331e+00 3.265396819775616e+00 4.774165962949071e+00 9.207895153653244e+03 + 185460 9.595211790735395e-01 -6.099162230159524e+00 -5.995133765135066e+00 3.192521501831366e+00 4.789869046354736e+00 9.202124195648081e+03 + 185480 9.641705989162596e-01 -6.120469750298537e+00 -5.981707677350906e+00 3.092436107351236e+00 4.889229403577923e+00 9.160993973580624e+03 + 185500 9.361979487937765e-01 -6.088403576109956e+00 -5.974427249895344e+00 3.250376069799699e+00 4.904845772703480e+00 9.138728744490090e+03 + 185520 9.685598288623074e-01 -6.139115618045952e+00 -5.961941765977130e+00 2.915196824856765e+00 4.932556501000937e+00 9.100587217690441e+03 + 185540 9.582122417985277e-01 -6.116972094700881e+00 -5.966966719430085e+00 3.077979874281680e+00 4.939333952343393e+00 9.115950210604811e+03 + 185560 9.733983643631922e-01 -6.118981325159002e+00 -6.012957018162440e+00 3.048150065063006e+00 4.656958043045748e+00 9.256857880800915e+03 + 185580 9.412085791397626e-01 -6.027808908102295e+00 -6.000822570554435e+00 3.552787795761607e+00 4.707747522083659e+00 9.219597280805348e+03 + 185600 9.811113601609597e-01 -6.017866929374473e+00 -6.042545744235124e+00 3.597044067312204e+00 4.455334493348088e+00 9.348139417772250e+03 + 185620 1.024145655819124e+00 -6.007400260436129e+00 -6.042835241971519e+00 3.664341834895736e+00 4.460868687373857e+00 9.349016620269582e+03 + 185640 1.063840794093235e+00 -6.018519330917581e+00 -6.012007213157973e+00 3.597073391057128e+00 4.634466978979766e+00 9.253964667510121e+03 + 185660 1.026581685469844e+00 -5.933969479774971e+00 -5.992481508558945e+00 4.040962477239463e+00 4.704977353254693e+00 9.193984126981428e+03 + 185680 1.078151080967840e+00 -5.992655917886520e+00 -5.986979780925774e+00 3.783560298904948e+00 4.816153555712910e+00 9.177103476127242e+03 + 185700 1.012130971825542e+00 -5.882931594490105e+00 -6.013634249016426e+00 4.292239944343645e+00 4.541725075883095e+00 9.258908118355834e+03 + 185720 9.767909946811538e-01 -5.825171828036736e+00 -6.006547693383329e+00 4.640697336797187e+00 4.599209050152599e+00 9.237119606001008e+03 + 185740 1.084120904607112e+00 -5.981470273271851e+00 -6.024350912626154e+00 3.859400892447963e+00 4.613173625518058e+00 9.291937297898663e+03 + 185760 1.081393785579987e+00 -5.981996150805671e+00 -6.006353003055173e+00 3.783725934061269e+00 4.643865119233923e+00 9.236558439089140e+03 + 185780 1.124813034765929e+00 -6.058442833141447e+00 -5.983189581098347e+00 3.380410629519436e+00 4.812526448154035e+00 9.165537823858129e+03 + 185800 1.034745720731353e+00 -5.946125334820570e+00 -6.043936881977040e+00 3.980638819572957e+00 4.418989779512501e+00 9.352427662321083e+03 + 185820 1.044281049489139e+00 -5.988543699590392e+00 -6.014818720141438e+00 3.814245162115545e+00 4.663369928065150e+00 9.262590934430564e+03 + 185840 1.021537501661532e+00 -5.987219679051372e+00 -5.976575422126455e+00 3.806070995140578e+00 4.867191965596888e+00 9.145260267061798e+03 + 185860 9.999401436761414e-01 -5.982909246713431e+00 -6.009542378452903e+00 3.775874859141211e+00 4.622943295229352e+00 9.246343592305737e+03 + 185880 1.043905595999872e+00 -6.077546084685965e+00 -5.987082356884550e+00 3.291387540057864e+00 4.810844264310218e+00 9.177447767853082e+03 + 185900 9.221254916929871e-01 -5.924226979417692e+00 -6.003045746445409e+00 4.126475878457343e+00 4.673886321019418e+00 9.226395053732394e+03 + 185920 1.003142468481264e+00 -6.065655957980752e+00 -6.002719487651074e+00 3.358080963099984e+00 4.719471915120299e+00 9.225382551469213e+03 + 185940 9.325162515854724e-01 -5.978590068558076e+00 -6.004099606215238e+00 3.812356579206249e+00 4.665876866390632e+00 9.229643567372221e+03 + 185960 9.547779279896200e-01 -6.023932726469558e+00 -6.002328252904176e+00 3.613630652799420e+00 4.737686883293320e+00 9.224197578226207e+03 + 185980 9.364279765049806e-01 -6.005075485003418e+00 -6.014011648735464e+00 3.627102089421121e+00 4.575789254404842e+00 9.260104292026539e+03 + 186000 9.865751709881700e-01 -6.083643441139275e+00 -5.983158535497191e+00 3.247012879748303e+00 4.824012757934042e+00 9.165410241663300e+03 + 186020 9.427207696479050e-01 -6.018307434186882e+00 -6.006279857670863e+00 3.587256311165426e+00 4.656320516781856e+00 9.236265845155620e+03 + 186040 9.837854615514343e-01 -6.075144496130968e+00 -5.968324389339072e+00 3.284742412421733e+00 4.898119995978906e+00 9.120070573153573e+03 + 186060 9.602199563091689e-01 -6.029319983575497e+00 -5.976634493045383e+00 3.547822769645548e+00 4.850351009322774e+00 9.145460165429358e+03 + 186080 9.549544395468589e-01 -6.003892421567865e+00 -6.024083011042957e+00 3.625430782793619e+00 4.509493293544016e+00 9.291125829755327e+03 + 186100 9.919904880721139e-01 -6.034679456245360e+00 -6.011944343269034e+00 3.451170971533744e+00 4.581719508491172e+00 9.253751568126596e+03 + 186120 8.972386619357468e-01 -5.861138466004364e+00 -6.046779941868154e+00 4.397772912572661e+00 4.331790830237236e+00 9.361167621422921e+03 + 186140 1.066835584741982e+00 -6.067030508037554e+00 -6.032338099561853e+00 3.290081544910571e+00 4.489290723010907e+00 9.316600636879757e+03 + 186160 9.783637312710609e-01 -5.888596946369382e+00 -6.028823207459542e+00 4.305621525064534e+00 4.500420633941063e+00 9.305739031190018e+03 + 186180 1.042790483563403e+00 -5.942272569075919e+00 -6.023978483118418e+00 3.958634925545078e+00 4.489466923163712e+00 9.290787834749568e+03 + 186200 1.047885876719849e+00 -5.917563098587251e+00 -5.985681399832464e+00 4.144601213379666e+00 4.753455386356603e+00 9.173115681237759e+03 + 186220 1.000887291035678e+00 -5.825049353540382e+00 -6.019701041766036e+00 4.649541651768573e+00 4.531821535725464e+00 9.277607950377926e+03 + 186240 1.061490981848287e+00 -5.903515660730037e+00 -6.018624154187203e+00 4.253309539503181e+00 4.592338757090343e+00 9.274302123046917e+03 + 186260 1.146557582356523e+00 -6.028287971776903e+00 -5.958965247321975e+00 3.553992149382973e+00 4.952053960860109e+00 9.091505308628930e+03 + 186280 1.037458403977267e+00 -5.872652618397060e+00 -6.034211026881774e+00 4.378332981570358e+00 4.450639598968214e+00 9.322359569283526e+03 + 186300 1.110129109621654e+00 -5.992888313263420e+00 -6.033266600646734e+00 3.714188219976237e+00 4.482329845301471e+00 9.319467642897034e+03 + 186320 1.063607588190618e+00 -5.943180927052186e+00 -6.003066524320833e+00 4.045426681631403e+00 4.701554314848610e+00 9.226458748310422e+03 + 186340 1.045506402369506e+00 -5.936232483535441e+00 -6.006378292160906e+00 4.086846991418937e+00 4.684058903262717e+00 9.236609427116311e+03 + 186360 1.067402994916683e+00 -5.987891560652560e+00 -6.016828911132722e+00 3.717205343365357e+00 4.551042598867753e+00 9.268773584850434e+03 + 186380 1.053472929130548e+00 -5.988618357818217e+00 -6.023131192000714e+00 3.706777484659305e+00 4.508599449939576e+00 9.288069650329569e+03 + 186400 9.830065344854569e-01 -5.905781254255033e+00 -5.957026333283442e+00 4.199796766398856e+00 4.905539592467382e+00 9.085602875952025e+03 + 186420 9.595621033072821e-01 -5.887535015199235e+00 -5.976975495639305e+00 4.279123074992378e+00 4.765541995435881e+00 9.146510569327142e+03 + 186440 1.035719900536216e+00 -6.015167218031865e+00 -5.975423583250131e+00 3.609349210286989e+00 4.837563311511315e+00 9.141766838661257e+03 + 186460 9.998393929808415e-01 -5.975996020275486e+00 -6.021445448033493e+00 3.789288850236937e+00 4.528311202774247e+00 9.283003308486002e+03 + 186480 1.082397043101837e+00 -6.111189441918532e+00 -6.010575403303888e+00 3.097263974412351e+00 4.675005354109794e+00 9.249538089580845e+03 + 186500 9.950817034112857e-01 -5.997316875789464e+00 -6.023586643805307e+00 3.713062865229156e+00 4.562217792048723e+00 9.289591170245161e+03 + 186520 1.009619855998729e+00 -6.035084393305131e+00 -5.946294614868298e+00 3.534567701818747e+00 5.044412349776844e+00 9.052925172165989e+03 + 186540 9.693801222909489e-01 -5.987728109310411e+00 -5.989307027375220e+00 3.743575926327941e+00 4.734509534463026e+00 9.184255163928450e+03 + 186560 9.345799345196549e-01 -5.943813770576265e+00 -6.010959056391489e+00 3.963827656698701e+00 4.578269034848288e+00 9.250744614154721e+03 + 186580 9.574065195068804e-01 -5.985621766488286e+00 -6.034044525124528e+00 3.712754797016869e+00 4.434703823529889e+00 9.321864755451938e+03 + 186600 9.646403998972567e-01 -6.003353766540596e+00 -5.969652816976503e+00 3.659310599055284e+00 4.852826666657395e+00 9.124124868192084e+03 + 186620 9.770127988971109e-01 -6.022970258492482e+00 -5.962854972042094e+00 3.696003591830399e+00 5.041194869439037e+00 9.103340318892089e+03 + 186640 9.519534543394043e-01 -5.980864029766674e+00 -6.021124692670636e+00 3.805734368637304e+00 4.574551411925306e+00 9.282021382029956e+03 + 186660 1.029049614000655e+00 -6.087394873643568e+00 -6.020275065006955e+00 3.240600326641311e+00 4.626012654589561e+00 9.279407363570144e+03 + 186680 1.019624642311598e+00 -6.064986952548659e+00 -5.951067703081215e+00 3.396916260910121e+00 5.051058220299065e+00 9.067444707889634e+03 + 186700 9.041588446419763e-01 -5.882083051248837e+00 -5.997579727206786e+00 4.358799849192316e+00 4.695600062788930e+00 9.209517016182293e+03 + 186720 1.021929701188076e+00 -6.030548569008134e+00 -5.990225214096194e+00 3.502554471490208e+00 4.734097415413570e+00 9.187023625161817e+03 + 186740 9.768861668306952e-01 -5.921411091960417e+00 -6.037748023118157e+00 4.081206228214217e+00 4.413181566424560e+00 9.333289434801667e+03 + 186760 1.067512680047897e+00 -6.007079235070205e+00 -5.954108807545566e+00 3.749564750103683e+00 5.053729142097326e+00 9.076697789916559e+03 + 186780 1.014121181537407e+00 -5.881393811823530e+00 -5.996031176294835e+00 4.301396006672316e+00 4.643130519803266e+00 9.204874425183545e+03 + 186800 1.090933298500881e+00 -5.957762966761258e+00 -5.990254222274790e+00 3.913056420095945e+00 4.726486602931708e+00 9.187097390014562e+03 + 186820 9.833928280783956e-01 -5.771122398210339e+00 -6.042892756408789e+00 4.936070874108800e+00 4.375523421006293e+00 9.349123028317399e+03 + 186840 1.083989239694932e+00 -5.903765690588592e+00 -6.017055797430192e+00 4.190619270390795e+00 4.540089945318958e+00 9.269474307528131e+03 + 186860 1.085898075353681e+00 -5.902453201779672e+00 -6.009887540254247e+00 4.223775324729869e+00 4.606870727798712e+00 9.247383782881960e+03 + 186880 1.101906524831336e+00 -5.931543848688380e+00 -5.962283109389383e+00 4.057245787581426e+00 4.880736195751050e+00 9.101611454362455e+03 + 186900 1.117335723091285e+00 -5.967225375525144e+00 -6.028180493466218e+00 3.872265447178839e+00 4.522251727187176e+00 9.303720340083395e+03 + 186920 1.036011632449771e+00 -5.871159638062257e+00 -6.017383086341606e+00 4.384019082108074e+00 4.544381414082557e+00 9.270486319023559e+03 + 186940 1.011605186859108e+00 -5.866688562059066e+00 -6.041452891575094e+00 4.372887218119118e+00 4.369363393345499e+00 9.344726607624290e+03 + 186960 9.932792895410691e-01 -5.875546808667986e+00 -6.014474168768420e+00 4.316787409158877e+00 4.519045008522687e+00 9.261522397652219e+03 + 186980 1.072248401742994e+00 -6.028800496955707e+00 -5.968815116695609e+00 3.530114617350662e+00 4.874559953511742e+00 9.121548313682042e+03 + 187000 1.011966192968974e+00 -5.971156466508948e+00 -5.985838195380230e+00 3.876873700984139e+00 4.792568941815036e+00 9.173612608044572e+03 + 187020 1.039765020363477e+00 -6.040232487694320e+00 -6.012345989496141e+00 3.454926679996300e+00 4.615055268071895e+00 9.254991713938534e+03 + 187040 1.005572094719602e+00 -6.010814244919445e+00 -6.000825974920766e+00 3.646433555790930e+00 4.703787747803130e+00 9.219560178906941e+03 + 187060 1.027318122452260e+00 -6.058598133194166e+00 -5.994787486236991e+00 3.367513733928683e+00 4.733924343422483e+00 9.201055861384892e+03 + 187080 1.037636337263683e+00 -6.085247372639406e+00 -6.003637593687760e+00 3.242396334279341e+00 4.711012314092171e+00 9.228238795365502e+03 + 187100 9.860793923139735e-01 -6.020183555882539e+00 -6.013621858107854e+00 3.561151233083503e+00 4.598829517125194e+00 9.258924932056028e+03 + 187120 9.110852161589589e-01 -5.917199110797673e+00 -6.009768719825155e+00 4.136490803177767e+00 4.604941783041263e+00 9.247063899018602e+03 + 187140 9.732490339970734e-01 -6.012117080032494e+00 -5.977531137367938e+00 3.661289012736984e+00 4.859886847674198e+00 9.148189712350179e+03 + 187160 9.870372515747904e-01 -6.031421483692184e+00 -5.964185839468122e+00 3.546045895568166e+00 4.932123369385046e+00 9.107434982568118e+03 + 187180 9.912988424946013e-01 -6.034505761136522e+00 -5.973235622258882e+00 3.504830927381230e+00 4.856653546339988e+00 9.135077423023960e+03 + 187200 1.031667514101677e+00 -6.089478396434104e+00 -5.963553439324839e+00 3.249402215056004e+00 4.972482805601540e+00 9.105499043335980e+03 + 187220 9.573835424832821e-01 -5.971448722060335e+00 -6.014905219036551e+00 3.820355840563944e+00 4.570821910055333e+00 9.262870080507235e+03 + 187240 1.021656708233916e+00 -6.057277236057662e+00 -5.993418647247994e+00 3.383137760118035e+00 4.749823659147834e+00 9.196856900038920e+03 + 187260 9.754887916764853e-01 -5.979228358835576e+00 -5.975370131636208e+00 3.809010006779916e+00 4.831164544417415e+00 9.141577336708622e+03 + 187280 9.527498982396159e-01 -5.933574700201921e+00 -5.950782987620823e+00 3.998782923985383e+00 4.899970274652174e+00 9.066556164188725e+03 + 187300 9.445417970818046e-01 -5.902634024657086e+00 -5.970801854428159e+00 4.238535800504369e+00 4.847105573021305e+00 9.127563644477821e+03 + 187320 9.978672047197774e-01 -5.950808355941462e+00 -5.956363590649250e+00 3.957987403677119e+00 4.926088386315201e+00 9.083569923978896e+03 + 187340 1.076836346408877e+00 -6.027610535353595e+00 -6.000401720815070e+00 3.571727905376628e+00 4.727965129007282e+00 9.218286662444410e+03 + 187360 1.090244844189440e+00 -6.005463239722641e+00 -6.019504969334273e+00 3.624339352934656e+00 4.543709568554031e+00 9.277016853933561e+03 + 187380 1.040498882089004e+00 -5.891559984850800e+00 -6.003302845040398e+00 4.251907124732083e+00 4.610262329371682e+00 9.227151285137801e+03 + 187400 1.049641461597717e+00 -5.870926987498423e+00 -5.988825714065054e+00 4.370427273343706e+00 4.693434540629139e+00 9.182725768316694e+03 + 187420 1.125020089897373e+00 -5.952512833337888e+00 -6.019943030788504e+00 3.895773979707287e+00 4.508579351156516e+00 9.278361904098769e+03 + 187440 1.067805839287663e+00 -5.850083871159086e+00 -6.017281724455709e+00 4.491402821524456e+00 4.531326874111066e+00 9.270153158912106e+03 + 187460 1.089674223704599e+00 -5.876976802426681e+00 -6.009177646336478e+00 4.273355924639009e+00 4.514238220894477e+00 9.245210483686344e+03 + 187480 1.112305888169971e+00 -5.914301687524146e+00 -5.998094040410418e+00 4.129991973799774e+00 4.648843316702097e+00 9.211170210729930e+03 + 187500 1.095721476502235e+00 -5.904733067809425e+00 -6.014314002599639e+00 4.175555981661386e+00 4.546325296501120e+00 9.261038343666196e+03 + 187520 1.129890490086196e+00 -5.985158948121041e+00 -6.018572162935287e+00 3.712274565503034e+00 4.520410715361352e+00 9.274129396237866e+03 + 187540 9.713323595519057e-01 -5.792670124267233e+00 -6.059852377916348e+00 4.752023168645737e+00 4.217821321872390e+00 9.401693466788025e+03 + 187560 1.046146708918315e+00 -5.954496709839717e+00 -6.014949240579383e+00 3.956801427131057e+00 4.609673640625001e+00 9.262995384303777e+03 + 187580 1.053583522000687e+00 -6.015921950287440e+00 -6.017044257255536e+00 3.566301632396450e+00 4.559857172109199e+00 9.269461359975287e+03 + 187600 1.021111357887142e+00 -6.004015822435168e+00 -6.005189132504156e+00 3.664692367086573e+00 4.657955039101298e+00 9.233009366767739e+03 + 187620 1.070091147484666e+00 -6.099367418185931e+00 -5.986219531096507e+00 3.133293283131405e+00 4.783005960377816e+00 9.174814143606427e+03 + 187640 9.909494916969200e-01 -5.994189900450438e+00 -6.029776856824252e+00 3.701225719268508e+00 4.496879908706365e+00 9.308695457981990e+03 + 187660 1.006741660425191e+00 -6.025106736568172e+00 -6.007615974835820e+00 3.621173277714114e+00 4.721607938267912e+00 9.240434687102166e+03 + 187680 1.017673701299515e+00 -6.046984416653858e+00 -5.995779832866852e+00 3.420074151784442e+00 4.714098795773165e+00 9.204111196784930e+03 + 187700 9.978196421165930e-01 -6.021642328271223e+00 -6.019090640372303e+00 3.610509981786508e+00 4.625162168574533e+00 9.275732044164977e+03 + 187720 1.028863666277457e+00 -6.071626007418413e+00 -6.021578553580339e+00 3.318715368015426e+00 4.606095592772097e+00 9.283413459940875e+03 + 187740 1.000614264642976e+00 -6.033642092805144e+00 -6.000245456550781e+00 3.537974460191829e+00 4.729743113677142e+00 9.217813968424962e+03 + 187760 9.829999690184826e-01 -6.011413776387128e+00 -6.007798248161731e+00 3.668298778762758e+00 4.689059701334169e+00 9.240999723086245e+03 + 187780 1.020726485952122e+00 -6.069845682520405e+00 -5.999777585014566e+00 3.337229267269158e+00 4.739571126150735e+00 9.216371149257280e+03 + 187800 1.038997182307271e+00 -6.099087884049345e+00 -5.956045643754971e+00 3.224087165003675e+00 5.045457844489114e+00 9.082608084828631e+03 + 187820 9.122305606748948e-01 -5.912466780827520e+00 -5.996536551127279e+00 4.155056953916227e+00 4.672315323100105e+00 9.206402011509692e+03 + 187840 9.461805597296103e-01 -5.959396003073463e+00 -6.038458796807508e+00 3.904998805095451e+00 4.451008008546774e+00 9.335481548661934e+03 + 187860 9.915293822254819e-01 -6.019628496480236e+00 -5.994377644605236e+00 3.650430511535238e+00 4.795424810558187e+00 9.199799963553427e+03 + 187880 9.832554234456775e-01 -5.998077622735107e+00 -6.005493951167119e+00 3.699826677510083e+00 4.657240971980358e+00 9.233920515183372e+03 + 187900 1.055953890645090e+00 -6.094755055561174e+00 -5.995364848382829e+00 3.186801038456484e+00 4.757514988659388e+00 9.202838445921037e+03 + 187920 9.609044700569084e-01 -5.942456359699412e+00 -6.054879862756176e+00 3.972838063239229e+00 4.327284911206422e+00 9.386288001584593e+03 + 187940 1.018681371116864e+00 -6.016587888617467e+00 -6.004937732461141e+00 3.602895924228079e+00 4.669792923733548e+00 9.232204175275132e+03 + 187960 9.665492455221173e-01 -5.924986308865441e+00 -6.004634178897405e+00 4.082828769594828e+00 4.625478374403241e+00 9.231286375574929e+03 + 187980 9.893054303827753e-01 -5.944663252691586e+00 -6.028586165402113e+00 3.988329814357630e+00 4.506431462545017e+00 9.305011393009770e+03 + 188000 9.792544115739478e-01 -5.914243564331886e+00 -6.050182372081820e+00 4.152698011195435e+00 4.372116340632805e+00 9.371715032028504e+03 + 188020 1.029651373912197e+00 -5.972093357999048e+00 -5.999300220129203e+00 3.844551505045167e+00 4.688325492445512e+00 9.214906959499589e+03 + 188040 1.017456422741918e+00 -5.936510671602509e+00 -6.034720020257022e+00 4.087595417516251e+00 4.523662139694450e+00 9.323945883094200e+03 + 188060 9.825377821298039e-01 -5.870637537406160e+00 -6.093722652996654e+00 4.374778401293991e+00 4.093789145263307e+00 9.506995161626894e+03 + 188080 1.064334368842517e+00 -5.983122279282391e+00 -6.007828465717056e+00 3.796870242269896e+00 4.655003496492053e+00 9.241105225799130e+03 + 188100 1.022599810293121e+00 -5.913530087727156e+00 -6.070486852643192e+00 4.160774861383462e+00 4.259504828254713e+00 9.434700815271164e+03 + 188120 1.011364139325243e+00 -5.895194394958018e+00 -6.091208593350279e+00 4.263710175740153e+00 4.138166315472625e+00 9.499156560451122e+03 + 188140 1.035986457190639e+00 -5.939148350760794e+00 -6.022824946553668e+00 4.060715235314700e+00 4.580231273360666e+00 9.287240281002692e+03 + 188160 1.045634256673235e+00 -5.967726891733440e+00 -6.018384906629809e+00 3.869850429187999e+00 4.578964268350578e+00 9.273556946221332e+03 + 188180 9.867575747186296e-01 -5.903766984687859e+00 -6.002685766745776e+00 4.253902426390906e+00 4.685895472182296e+00 9.225282447247666e+03 + 188200 1.050746278721140e+00 -6.030881626775353e+00 -5.978800259456347e+00 3.559816170838876e+00 4.858875441550157e+00 9.152085906821534e+03 + 188220 9.725027936816462e-01 -5.951555416159512e+00 -6.028179832536782e+00 3.946283918626283e+00 4.506294662197886e+00 9.303766564423093e+03 + 188240 1.000239492131249e+00 -6.032988992385877e+00 -5.997386912918585e+00 3.519416843697121e+00 4.723849493402303e+00 9.209032401599914e+03 + 188260 1.022737901850711e+00 -6.101899028332215e+00 -6.006997838851309e+00 3.161837684257663e+00 4.706775000168636e+00 9.238554898411308e+03 + 188280 9.479811796270937e-01 -6.023450353208957e+00 -6.033923741626424e+00 3.604335164987508e+00 4.544195347942795e+00 9.321503658884072e+03 + 188300 9.653452324571075e-01 -6.075181232634119e+00 -5.994615544213258e+00 3.276254252974332e+00 4.738874903386904e+00 9.200540852924523e+03 + 188320 8.881585587407771e-01 -5.977389865899354e+00 -6.003355900306247e+00 3.849267239980338e+00 4.700166252185115e+00 9.227313275406934e+03 + 188340 9.408629267719103e-01 -6.060716093660590e+00 -5.954507138504253e+00 3.352105621085954e+00 4.961973877376330e+00 9.077930164186813e+03 + 188360 9.409613946392548e-01 -6.058191936322547e+00 -6.014096242716897e+00 3.337654194552734e+00 4.590858491022910e+00 9.260381861850979e+03 + 188380 9.734435623812695e-01 -6.100494463464449e+00 -5.969764332682729e+00 3.136970043624076e+00 4.887642684995071e+00 9.124484824421152e+03 + 188400 9.442103763174035e-01 -6.046143825472029e+00 -5.961096844866542e+00 3.507447214833078e+00 4.995800138447498e+00 9.098015439363558e+03 + 188420 9.483521326352081e-01 -6.036413556328778e+00 -5.967879601499162e+00 3.569766671476529e+00 4.963299245703418e+00 9.118709643967435e+03 + 188440 9.841408056194197e-01 -6.068617181120462e+00 -5.981408699872695e+00 3.331478112781652e+00 4.832242707575189e+00 9.160056870412112e+03 + 188460 1.038590149147225e+00 -6.124352440514215e+00 -5.969146883323125e+00 3.064320780650116e+00 4.955535108023708e+00 9.122576868596447e+03 + 188480 9.106374012218605e-01 -5.908724267090371e+00 -6.040524522322999e+00 4.155045750296466e+00 4.398228288727134e+00 9.341837815494860e+03 + 188500 1.006635619529266e+00 -6.027058562019530e+00 -5.996226067974712e+00 3.511308369489478e+00 4.688353321607856e+00 9.205456392409846e+03 + 188520 9.108984356651380e-01 -5.861353833954616e+00 -6.039395671724597e+00 4.382717005822665e+00 4.360373221462084e+00 9.338373555236849e+03 + 188540 9.793185955220237e-01 -5.943514094580059e+00 -5.996912204570042e+00 4.019310960163216e+00 4.712690749269920e+00 9.207562338657846e+03 + 188560 1.059285450156670e+00 -6.045253578178310e+00 -5.998463419504421e+00 3.530201206582955e+00 4.798877538442083e+00 9.212328354552690e+03 + 188580 9.780019189614730e-01 -5.915968498335595e+00 -6.040679745793125e+00 4.133956064696723e+00 4.417844782792415e+00 9.342365564928979e+03 + 188600 1.052717421625437e+00 -6.024709778093428e+00 -6.019137569302348e+00 3.596177237134250e+00 4.628173722309148e+00 9.275889673630018e+03 + 188620 1.090041687140318e+00 -6.081820338402635e+00 -5.980465020361054e+00 3.252599468875911e+00 4.834597389755450e+00 9.157172783157814e+03 + 188640 1.037101260134824e+00 -6.006091602089427e+00 -5.962612465047537e+00 3.621206253184516e+00 4.870870186453761e+00 9.102641859686839e+03 + 188660 1.007964017711743e+00 -5.965309992394196e+00 -5.963488882369886e+00 3.871596510521200e+00 4.882053606096650e+00 9.105291860010650e+03 + 188680 9.997004798608997e-01 -5.954990602194666e+00 -6.001224574187162e+00 3.944446177626584e+00 4.678963555761630e+00 9.220797290901015e+03 + 188700 1.052730405028764e+00 -6.037688539638236e+00 -5.980782124974112e+00 3.535565208126762e+00 4.862330647367372e+00 9.158141109825800e+03 + 188720 9.799635287365537e-01 -5.935272560842371e+00 -6.002376441223687e+00 4.085393607160711e+00 4.700072741719265e+00 9.224335995946813e+03 + 188740 1.003504895610224e+00 -5.976604720684354e+00 -6.013732271241614e+00 3.838236497368292e+00 4.625044356598627e+00 9.259257770084329e+03 + 188760 9.773936762911285e-01 -5.945836137439832e+00 -6.023110368797303e+00 3.985436457174665e+00 4.541715862571411e+00 9.288111579750539e+03 + 188780 1.001361067034065e+00 -5.990798817172465e+00 -5.968663379494609e+00 3.688151166429103e+00 4.815256275023261e+00 9.121067185415508e+03 + 188800 1.004105895272921e+00 -6.001541494445028e+00 -5.981247428493603e+00 3.654164139792173e+00 4.770695806981811e+00 9.159555254690806e+03 + 188820 9.551214596720535e-01 -5.933996559837165e+00 -5.985728631550634e+00 4.041137056368591e+00 4.744083495077623e+00 9.173281192349514e+03 + 188840 1.001067697203345e+00 -6.007374567236664e+00 -6.019782418702512e+00 3.636730003547913e+00 4.565482200322206e+00 9.277847126910137e+03 + 188860 9.173470194606513e-01 -5.887818901328602e+00 -6.052003803059247e+00 4.287322513737160e+00 4.344547400468373e+00 9.377373415329708e+03 + 188880 1.078370357194244e+00 -6.132536769291884e+00 -6.002229388985913e+00 3.018919036710302e+00 4.767164179429122e+00 9.223921261571682e+03 + 188900 1.007755551233746e+00 -6.039333959773012e+00 -6.034413467656064e+00 3.413279354129003e+00 4.441533581308217e+00 9.323022107632230e+03 + 188920 1.091857928185486e+00 -6.182942496275771e+00 -5.964344883000384e+00 2.765879128287330e+00 5.021100451585927e+00 9.107935742804970e+03 + 188940 9.234267420491796e-01 -5.959100041556242e+00 -6.021597311595134e+00 3.882678572252410e+00 4.523809576267809e+00 9.283459071229830e+03 + 188960 9.657424196704705e-01 -6.052577759038441e+00 -5.946749137271805e+00 3.386876792910526e+00 4.994561116020842e+00 9.054298778876513e+03 + 188980 9.320610789565064e-01 -6.030826180788404e+00 -5.934559086855344e+00 3.509257140923759e+00 5.062037691572026e+00 9.017241093081047e+03 + 189000 8.672804574472469e-01 -5.956794080713724e+00 -6.004995950372959e+00 3.896357997259608e+00 4.619575402461058e+00 9.232376709842252e+03 + 189020 9.544869406151526e-01 -6.101850760774086e+00 -5.969304168787883e+00 3.168868641412536e+00 4.929971684116140e+00 9.123067999327202e+03 + 189040 9.739095755578714e-01 -6.141351321602954e+00 -5.975188769564815e+00 2.947132772202851e+00 4.901263859577673e+00 9.141040584173928e+03 + 189060 9.375815953801838e-01 -6.093446265786305e+00 -5.988100835648619e+00 3.178469935724336e+00 4.783379697727558e+00 9.180590216633966e+03 + 189080 9.450438942663600e-01 -6.104144767541471e+00 -5.975224899152375e+00 3.179917557473389e+00 4.920195392048740e+00 9.141155802861516e+03 + 189100 9.242465210845818e-01 -6.064784573567142e+00 -5.983392453232580e+00 3.338643537153801e+00 4.806009687504773e+00 9.166141883930759e+03 + 189120 9.371846001243667e-01 -6.065783778769316e+00 -5.981311024237955e+00 3.379362749454327e+00 4.864418378089920e+00 9.159762544255416e+03 + 189140 9.209652503509672e-01 -6.011634946921604e+00 -6.005729670851983e+00 3.644654323237719e+00 4.678563332268004e+00 9.234656887785408e+03 + 189160 9.938091577818602e-01 -6.077573012428418e+00 -6.036954294565664e+00 3.218611586939800e+00 4.451850550634008e+00 9.330851421968919e+03 + 189180 9.672589397674841e-01 -5.994579517237863e+00 -6.006381423294198e+00 3.719959145864531e+00 4.652190774949997e+00 9.236666199376017e+03 + 189200 1.015013515586272e+00 -6.026247846630299e+00 -5.998741722911931e+00 3.588155438434998e+00 4.746099857384755e+00 9.213182032025512e+03 + 189220 1.034144720611114e+00 -6.023254463983983e+00 -5.990529642229261e+00 3.584405443769672e+00 4.772316434435085e+00 9.187977786805335e+03 + 189240 1.044016364993099e+00 -6.013568381301496e+00 -5.998151979182812e+00 3.582189349730727e+00 4.670712716376726e+00 9.211389704008836e+03 + 189260 1.027498641841579e+00 -5.973576836432010e+00 -6.000872124529335e+00 3.865112614062334e+00 4.708378845875316e+00 9.219727352639014e+03 + 189280 1.038165707553652e+00 -5.980059684325155e+00 -5.983450501185790e+00 3.824455100333259e+00 4.804984505192282e+00 9.166304242453652e+03 + 189300 1.060858683028968e+00 -6.007331906008186e+00 -6.001198467115297e+00 3.668771919796146e+00 4.703991075065717e+00 9.220724062543997e+03 + 189320 9.929866358021024e-01 -5.905388812080290e+00 -6.006286999381382e+00 4.201531940854392e+00 4.622158935427497e+00 9.236355090529003e+03 + 189340 9.779280124576570e-01 -5.886599608094234e+00 -5.966538972058198e+00 4.328713869572582e+00 4.869689671114905e+00 9.114585231217832e+03 + 189360 1.036748673736210e+00 -5.976159061171371e+00 -5.976482595594208e+00 3.772184889230258e+00 4.770327104507537e+00 9.144966098491788e+03 + 189380 1.014240702014481e+00 -5.946888485207029e+00 -5.987092747451317e+00 4.019220492380313e+00 4.788361396984132e+00 9.177432605723970e+03 + 189400 1.014071203209337e+00 -5.954188406278993e+00 -5.993949936891656e+00 3.979600085840912e+00 4.751283223986021e+00 9.198458090212796e+03 + 189420 1.004186178058447e+00 -5.947765252829197e+00 -6.026572481098816e+00 3.930653375761982e+00 4.478130075658668e+00 9.298783190064281e+03 + 189440 1.091264643642990e+00 -6.088427591831430e+00 -5.969051017029226e+00 3.239478719675504e+00 4.924957485655007e+00 9.122286778126359e+03 + 189460 9.709705637157013e-01 -5.926091046621782e+00 -6.010543348663234e+00 4.115862056481033e+00 4.630923869207508e+00 9.249419038964639e+03 + 189480 1.009896260383370e+00 -6.004664916548604e+00 -5.998424249538518e+00 3.689035950212216e+00 4.724870825924229e+00 9.212202145946354e+03 + 189500 9.847105927014280e-01 -5.992514580038136e+00 -6.015984724161422e+00 3.705086960700759e+00 4.570317761151784e+00 9.266193162091187e+03 + 189520 9.891008818229059e-01 -6.029893479565382e+00 -5.986498378612109e+00 3.546983882860181e+00 4.796165267904048e+00 9.175668118022691e+03 + 189540 9.700387811560235e-01 -6.038141472481678e+00 -6.014729839379546e+00 3.461439564291220e+00 4.595872784502175e+00 9.262329736949519e+03 + 189560 9.187065739797919e-01 -6.000114755271084e+00 -5.975652520992858e+00 3.752511408976021e+00 4.892977343720114e+00 9.142454782615670e+03 + 189580 9.826372192171458e-01 -6.129661460813762e+00 -5.984035006265776e+00 2.982062210166316e+00 4.818271847801863e+00 9.168129969672213e+03 + 189600 9.256146485600103e-01 -6.076517738924355e+00 -6.004892021139657e+00 3.303604193141366e+00 4.714890148705102e+00 9.232094978472824e+03 + 189620 9.125610129429221e-01 -6.082255193986525e+00 -5.977072859807848e+00 3.247302359865775e+00 4.851275599633352e+00 9.146805748445950e+03 + 189640 8.956321091981019e-01 -6.070589951173189e+00 -5.955925371539328e+00 3.413342066310738e+00 5.071763826854722e+00 9.082230540484694e+03 + 189660 1.011626863101136e+00 -6.244756785893398e+00 -5.963892725008185e+00 2.402831381742082e+00 5.015596282917930e+00 9.106578068341967e+03 + 189680 9.355513694653862e-01 -6.127754247264849e+00 -5.999202091960938e+00 3.022687466500769e+00 4.760853835637569e+00 9.214622528801197e+03 + 189700 9.116328353524825e-01 -6.080440598541761e+00 -5.970227126018383e+00 3.263762564864783e+00 4.896625379573775e+00 9.125866264698730e+03 + 189720 8.826480550729751e-01 -6.015484970350329e+00 -5.993517199781119e+00 3.648804181694583e+00 4.774946519804496e+00 9.197142992368988e+03 + 189740 9.591745498985730e-01 -6.093180245780527e+00 -5.982743710118360e+00 3.232878680787813e+00 4.867022358558636e+00 9.164161858991709e+03 + 189760 9.516012715418856e-01 -6.038374032812517e+00 -6.001802737489411e+00 3.525260468117910e+00 4.735258505252848e+00 9.222572685277664e+03 + 189780 1.007024119564611e+00 -6.076674968945555e+00 -5.989996694089540e+00 3.287398853403228e+00 4.785118921046154e+00 9.186376447344481e+03 + 189800 9.323509455336298e-01 -5.931312243791061e+00 -5.997625811601975e+00 4.079233020266152e+00 4.698450251904434e+00 9.209749263639487e+03 + 189820 9.582523924494802e-01 -5.948209692361762e+00 -5.963848691931989e+00 4.020767323665949e+00 4.930965768006344e+00 9.106397951159039e+03 + 189840 1.021652401074239e+00 -6.028723744040034e+00 -5.987189510197891e+00 3.573624979731654e+00 4.812120977855159e+00 9.177763907077340e+03 + 189860 1.047239867341324e+00 -6.059002912372088e+00 -5.974745568788780e+00 3.420505748026585e+00 4.904324453663717e+00 9.139692409629180e+03 + 189880 1.023213751124093e+00 -6.019124349089250e+00 -5.975346613796274e+00 3.634352361653716e+00 4.885730892288623e+00 9.141529456263195e+03 + 189900 1.003307969230358e+00 -5.986316835824987e+00 -5.996202416849924e+00 3.761629053792192e+00 4.704864517758287e+00 9.205414467201637e+03 + 189920 1.036233114266616e+00 -6.031416955781196e+00 -6.022099011223807e+00 3.560788018573433e+00 4.614293098169222e+00 9.285020308674813e+03 + 189940 1.003952441829978e+00 -5.982188284031203e+00 -6.030606660864757e+00 3.768991069900208e+00 4.490965257402339e+00 9.311264432146792e+03 + 189960 1.036263077993498e+00 -6.032585408715040e+00 -5.993729452474438e+00 3.558960630982596e+00 4.782077544655929e+00 9.197817041367318e+03 + 189980 1.059259280515890e+00 -6.069641564287687e+00 -5.981315179867200e+00 3.329379502087259e+00 4.836563269893511e+00 9.159794923374971e+03 + 190000 1.002000343812157e+00 -5.988410060782896e+00 -5.988560886335374e+00 3.821622855285393e+00 4.820756791622890e+00 9.181959014582308e+03 + 190020 1.041702268620511e+00 -6.053007634060574e+00 -5.982211360530052e+00 3.446027445315846e+00 4.852550603616023e+00 9.162516727011876e+03 + 190040 9.823300423336282e-01 -5.972388292651483e+00 -5.982700433335363e+00 3.864348655866578e+00 4.805134748261128e+00 9.164035314345982e+03 + 190060 9.566651526499863e-01 -5.939933337160141e+00 -6.035210143955053e+00 4.012826209314950e+00 4.465732040660362e+00 9.325448452588407e+03 + 190080 9.576092041552912e-01 -5.947598374514730e+00 -6.061384005582275e+00 3.954643515810290e+00 4.301268813950942e+00 9.406444480677808e+03 + 190100 1.040261073260992e+00 -6.078855061919229e+00 -5.972103295831728e+00 3.298194736413429e+00 4.911179897070275e+00 9.131608395828671e+03 + 190120 1.006710923122538e+00 -6.037657615603883e+00 -5.979278012384514e+00 3.528344376282516e+00 4.863569092182531e+00 9.153535480878607e+03 + 190140 9.560250694306736e-01 -5.971512581133732e+00 -5.994555242512783e+00 3.857351086743968e+00 4.725036559265135e+00 9.200338223595281e+03 + 190160 9.747167472025371e-01 -6.006615582876423e+00 -5.969039848794996e+00 3.734865257294858e+00 4.950630937216466e+00 9.122235167308296e+03 + 190180 9.581189011083978e-01 -5.986897061364489e+00 -5.971111668974573e+00 3.833050840704989e+00 4.923693006589466e+00 9.128558407696410e+03 + 190200 9.865637571576783e-01 -6.031819088796250e+00 -5.978777671488865e+00 3.596572180254893e+00 4.901144206566699e+00 9.151992193348762e+03 + 190220 9.763796951015768e-01 -6.015686077699007e+00 -6.001006895103124e+00 3.583722779822932e+00 4.668012917884655e+00 9.220148322282585e+03 + 190240 9.631005264470269e-01 -5.993041403880172e+00 -6.005058197746798e+00 3.720348634107060e+00 4.651346344132048e+00 9.232584987399505e+03 + 190260 9.545734508626229e-01 -5.975814402477456e+00 -6.019814642996149e+00 3.815481933965266e+00 4.562825743891720e+00 9.277959982329210e+03 + 190280 9.815805038027789e-01 -6.007846082357604e+00 -6.018213133871492e+00 3.678554965895673e+00 4.619025751806893e+00 9.273033224732862e+03 + 190300 9.896107273989241e-01 -6.004852267900675e+00 -6.023840343848775e+00 3.667413842213147e+00 4.558381371723900e+00 9.290382719510642e+03 + 190320 1.070697843779483e+00 -6.108023296021521e+00 -6.008664100441186e+00 3.077492013531892e+00 4.648027890340003e+00 9.243668900167826e+03 + 190340 1.016689062457228e+00 -6.010679130767457e+00 -5.971487280930207e+00 3.714785121925001e+00 4.939830788609655e+00 9.129728015999715e+03 + 190360 1.004649412357485e+00 -5.971897282616390e+00 -6.004404541407405e+00 3.863483434306393e+00 4.676821723846345e+00 9.230589399117905e+03 + 190380 1.018563188091038e+00 -5.967117242327284e+00 -6.026446639889587e+00 3.819751294128822e+00 4.479072712131480e+00 9.298403960740767e+03 + 190400 1.042705343183053e+00 -5.977241676309036e+00 -5.993757284225943e+00 3.840443127557852e+00 4.745607951116907e+00 9.197892816674586e+03 + 190420 1.014070933629324e+00 -5.910056236345643e+00 -6.073111191459941e+00 4.124275405175911e+00 4.187988620236853e+00 9.442848327005117e+03 + 190440 1.110322036690122e+00 -6.033805788266423e+00 -6.002826506766937e+00 3.495303911296413e+00 4.673191739694779e+00 9.225742758261154e+03 + 190460 1.045646065068417e+00 -5.923128427943123e+00 -6.026094333398999e+00 4.118181628451645e+00 4.526935465401633e+00 9.297318712759305e+03 + 190480 9.978241201854654e-01 -5.845424973672015e+00 -6.023864469268741e+00 4.523314735764464e+00 4.498687538625364e+00 9.290439633606158e+03 + 190500 1.058826773083271e+00 -5.931256335567634e+00 -6.035162004841672e+00 4.055344687374828e+00 4.458702255052947e+00 9.325296385255930e+03 + 190520 1.041653626735848e+00 -5.909217065334498e+00 -6.032417881760611e+00 4.239182197603425e+00 4.531744044419956e+00 9.316828890195045e+03 + 190540 1.066274924649685e+00 -5.957559356974743e+00 -6.012116899159263e+00 3.969358989988431e+00 4.656081140012544e+00 9.254269392373943e+03 + 190560 1.106622883495302e+00 -6.041470793916690e+00 -6.011150524388858e+00 3.481798014044122e+00 4.655901693719480e+00 9.251311010591506e+03 + 190580 1.038954503655643e+00 -5.978408599467051e+00 -6.036675873368168e+00 3.847486327282831e+00 4.512906623711122e+00 9.329967479692195e+03 + 190600 1.060154066116299e+00 -6.060854626762197e+00 -5.980382831050607e+00 3.350677073572117e+00 4.812758577518211e+00 9.156936656578242e+03 + 190620 9.512076578601641e-01 -5.946932570149857e+00 -5.963349828673189e+00 3.990004879742953e+00 4.895734440739433e+00 9.104855847940189e+03 + 190640 9.493197679997870e-01 -5.980503164294089e+00 -5.974501127406373e+00 3.792738711558295e+00 4.827203336179769e+00 9.138903335761162e+03 + 190660 9.663279165366178e-01 -6.030487528394742e+00 -5.984229411321823e+00 3.573544036669124e+00 4.839165303322308e+00 9.168701933426415e+03 + 190680 9.544780462033906e-01 -6.028360135481010e+00 -6.050009605457242e+00 3.498469334480327e+00 4.374154727632152e+00 9.371235920797439e+03 + 190700 9.599815635012572e-01 -6.048235279745158e+00 -6.015650892435908e+00 3.465837537821318e+00 4.652942132168668e+00 9.265174428458482e+03 + 190720 9.741658849007470e-01 -6.076243019262829e+00 -5.975104026718848e+00 3.314844308433392e+00 4.895600054829453e+00 9.140804607508078e+03 + 190740 9.209044396640363e-01 -5.997482234273251e+00 -5.990893621421936e+00 3.734592484163027e+00 4.772425318739822e+00 9.189107540833946e+03 + 190760 9.167679485284640e-01 -5.986432497301693e+00 -6.010098725024983e+00 3.800892732716176e+00 4.664997590792141e+00 9.248020649270115e+03 + 190780 1.024247423660809e+00 -6.136913795728070e+00 -5.965610036696949e+00 3.038006391389240e+00 5.021659084916973e+00 9.111718345354451e+03 + 190800 9.402516168482492e-01 -5.998624698274003e+00 -5.968988415371907e+00 3.790472475072030e+00 4.960648597695817e+00 9.122077679742873e+03 + 190820 9.479366002874461e-01 -5.991477976202970e+00 -5.998311635433904e+00 3.759490779648969e+00 4.720250850839600e+00 9.211851968453526e+03 + 190840 1.047796139977899e+00 -6.117613017216276e+00 -5.970833218386895e+00 3.126260146764354e+00 4.969092465743120e+00 9.127739986782561e+03 + 190860 1.066115415116186e+00 -6.121010936658070e+00 -6.021118025542735e+00 3.007060135258536e+00 4.580660689260828e+00 9.282011213171299e+03 + 190880 1.025113190400180e+00 -6.040131149350029e+00 -5.988530196853709e+00 3.486136411487577e+00 4.782437065943038e+00 9.181889814338312e+03 + 190900 1.020948912948637e+00 -6.015557544170445e+00 -5.963786311029964e+00 3.651157798120269e+00 4.948436230385346e+00 9.106206474593115e+03 + 190920 1.020886268970268e+00 -5.995928391909649e+00 -5.984760933877678e+00 3.756726850328695e+00 4.820852122506817e+00 9.170314783122525e+03 + 190940 1.012431235554254e+00 -5.963671813796256e+00 -6.039918927798000e+00 3.880969125489838e+00 4.443146397689065e+00 9.340007683742455e+03 + 190960 1.097645444753711e+00 -6.076383825086185e+00 -5.997568870460207e+00 3.295883829905931e+00 4.748451495943105e+00 9.209584439368147e+03 + 190980 1.010259804318700e+00 -5.938031973335732e+00 -6.002427722414703e+00 4.045724472038551e+00 4.675954115617135e+00 9.224481272665093e+03 + 191000 1.018704041858450e+00 -5.942327428571978e+00 -5.998376034055347e+00 4.037026208890730e+00 4.715186442711558e+00 9.212062380653251e+03 + 191020 1.073936169087454e+00 -6.018112277676075e+00 -6.002650345017425e+00 3.583925685473588e+00 4.672710495525903e+00 9.225208030569225e+03 + 191040 1.003168606148687e+00 -5.912507101982788e+00 -6.068142384992453e+00 4.157610749362245e+00 4.263928869838541e+00 9.427417313987655e+03 + 191060 9.586184551214803e-01 -5.854148189669719e+00 -6.043914933272790e+00 4.502861109211237e+00 4.413191101133735e+00 9.352337817204163e+03 + 191080 1.028232595182057e+00 -5.974894903632490e+00 -5.977387184024499e+00 3.901984454413006e+00 4.887673394722947e+00 9.147728088548018e+03 + 191100 1.013235484032532e+00 -5.984500477419813e+00 -6.007576320011090e+00 3.763061885800089e+00 4.630556826665875e+00 9.240309812252091e+03 + 191120 9.521529224436910e-01 -5.946570268397061e+00 -5.970743734958461e+00 4.099376813889192e+00 4.960569028061777e+00 9.127415320420534e+03 + 191140 9.550399982758525e-01 -6.005767110517900e+00 -5.985333864950523e+00 3.686518383175263e+00 4.803849241257677e+00 9.172061069122714e+03 + 191160 9.510409627650923e-01 -6.046545179085324e+00 -5.992833822469372e+00 3.390042459374403e+00 4.698461380868775e+00 9.195068898074893e+03 + 191180 9.501315620752302e-01 -6.079975530612507e+00 -5.987169428839056e+00 3.308493758843910e+00 4.841400756924904e+00 9.177673180047750e+03 + 191200 9.045989450352149e-01 -6.035534260807115e+00 -6.029542803065583e+00 3.500523306224039e+00 4.534927183751005e+00 9.307954338391251e+03 + 191220 9.373486369008189e-01 -6.095746817487751e+00 -6.017117692242503e+00 3.160766283579474e+00 4.612266888555496e+00 9.269689350100856e+03 + 191240 9.349828891591804e-01 -6.096876881131269e+00 -5.977857689217425e+00 3.238605888397710e+00 4.922032506527430e+00 9.149195301573200e+03 + 191260 8.940781172580391e-01 -6.035654379450566e+00 -5.960340011842199e+00 3.566607058656234e+00 4.999073812324198e+00 9.095684633115519e+03 + 191280 8.736757694868976e-01 -5.994349401786306e+00 -6.013387808080138e+00 3.766767738836653e+00 4.657446263713622e+00 9.258176671332803e+03 + 191300 9.763740196483891e-01 -6.124460672010238e+00 -5.988817041677562e+00 3.051728780227339e+00 4.830615496381519e+00 9.182766385155906e+03 + 191320 9.815752218585243e-01 -6.105897408239872e+00 -5.971164419161475e+00 3.116758688014547e+00 4.890416361165378e+00 9.128745760243517e+03 + 191340 9.809850755669589e-01 -6.073450605929524e+00 -5.983542686580833e+00 3.316633935270348e+00 4.832899121376082e+00 9.166595602867323e+03 + 191360 9.977228183558724e-01 -6.062998791340311e+00 -6.005273469318062e+00 3.359950036342977e+00 4.691417768359445e+00 9.233259470601648e+03 + 191380 1.017970702159216e+00 -6.060081095466974e+00 -6.004226138794278e+00 3.430848902287466e+00 4.751576707028693e+00 9.230030565223289e+03 + 191400 1.015469537524013e+00 -6.028367111236157e+00 -5.994194195571880e+00 3.578383931146198e+00 4.774610101132089e+00 9.199221699988308e+03 + 191420 9.835383367285012e-01 -5.957859037928421e+00 -5.948957198717197e+00 3.914400487972997e+00 4.965516226279012e+00 9.061015358952969e+03 + 191440 1.019570921293598e+00 -5.991417318027834e+00 -5.961376909352484e+00 3.756020528763462e+00 4.928517204115540e+00 9.098853143508890e+03 + 191460 1.003479357216277e+00 -5.948494673059741e+00 -6.013939109310937e+00 3.931850989913131e+00 4.556058909464985e+00 9.259876649025848e+03 + 191480 1.051470343724972e+00 -6.005530277166252e+00 -5.998888960185941e+00 3.670870033090198e+00 4.709005502931628e+00 9.213644416775191e+03 + 191500 1.009274430061284e+00 -5.932434247530918e+00 -6.044543730823118e+00 4.112272000310284e+00 4.468521998360005e+00 9.354298243761985e+03 + 191520 1.058113455630465e+00 -6.002937325224207e+00 -6.023234113411297e+00 3.714156944915155e+00 4.597609646227067e+00 9.288502838323171e+03 + 191540 9.945245520899875e-01 -5.911555351276329e+00 -6.018762983858352e+00 4.108611183304932e+00 4.493008366691430e+00 9.274743925277704e+03 + 191560 1.010352817990935e+00 -5.940572551021598e+00 -6.009143566307461e+00 3.981526400810686e+00 4.587781019708936e+00 9.245133850948221e+03 + 191580 1.017874163232890e+00 -5.958163846636958e+00 -6.033085260178677e+00 3.900026065822345e+00 4.469815715214523e+00 9.318885098974570e+03 + 191600 1.052072743483916e+00 -6.018342463532246e+00 -6.015429065273006e+00 3.596682812100352e+00 4.613411995751830e+00 9.264454206710596e+03 + 191620 1.033582014517184e+00 -6.006244183265349e+00 -5.979113426399386e+00 3.676689978313955e+00 4.832478982709372e+00 9.153036386894692e+03 + 191640 9.783459178955162e-01 -5.944303370307665e+00 -5.996279380945139e+00 3.974380911839639e+00 4.675926615497612e+00 9.205607882972066e+03 + 191660 9.495605591885232e-01 -5.922646190290551e+00 -5.980351816715322e+00 4.160824540255213e+00 4.829469903407352e+00 9.156820024740990e+03 + 191680 1.073278135576532e+00 -6.131808122476375e+00 -5.963799293317770e+00 2.962638447736812e+00 4.927371144047812e+00 9.106264747772977e+03 + 191700 1.019904030798344e+00 -6.084539211203764e+00 -5.979937340649491e+00 3.233326052044087e+00 4.833966179853875e+00 9.155564173048439e+03 + 191720 1.003580227232314e+00 -6.097715189088562e+00 -5.973374924366634e+00 3.228128919491218e+00 4.942109961118311e+00 9.135501062137542e+03 + 191740 9.623827344372552e-01 -6.079941057435414e+00 -6.031768791670542e+00 3.281121125446143e+00 4.557733730102068e+00 9.314830370931300e+03 + 191760 9.541383746607742e-01 -6.112825226105445e+00 -5.981236433237981e+00 3.134580833584481e+00 4.890184045529351e+00 9.159527744020006e+03 + 191780 9.136424430679708e-01 -6.086815869207977e+00 -5.964120515641339e+00 3.266687622341837e+00 4.971223329566079e+00 9.107240365268188e+03 + 191800 9.016746540508660e-01 -6.091471018046007e+00 -5.987490404732738e+00 3.207811553867312e+00 4.804884326460009e+00 9.178702730301608e+03 + 191820 9.382766986989368e-01 -6.156465463297501e+00 -5.982982351852922e+00 2.845991209673524e+00 4.842158082013032e+00 9.164901414733786e+03 + 191840 8.772620646725818e-01 -6.066907258646674e+00 -5.998734176745101e+00 3.377608236353926e+00 4.769068622383089e+00 9.213146570738658e+03 + 191860 9.102359678844832e-01 -6.108228874497914e+00 -5.978214124349288e+00 3.131208744811996e+00 4.877773559882970e+00 9.150290623292751e+03 + 191880 9.130914466306342e-01 -6.097742579919884e+00 -5.954023133831194e+00 3.196115511968611e+00 5.021374811922272e+00 9.076439251745565e+03 + 191900 8.938525386101819e-01 -6.049296524990670e+00 -5.965909445672166e+00 3.388659391471166e+00 4.867480905026844e+00 9.112702287526863e+03 + 191920 8.936389474865665e-01 -6.025819417077584e+00 -5.988406242107807e+00 3.566857510541190e+00 4.781689750887770e+00 9.181482971096410e+03 + 191940 9.197943474258892e-01 -6.041861018588466e+00 -5.973154903716193e+00 3.456953368780187e+00 4.851474512613695e+00 9.134817149127686e+03 + 191960 9.678635059504289e-01 -6.092653386390560e+00 -5.985167912130876e+00 3.199637609045962e+00 4.816835835568451e+00 9.171565340244420e+03 + 191980 9.431687246303684e-01 -6.037935444933433e+00 -5.964313983484297e+00 3.530869535999547e+00 4.953615360524828e+00 9.107817187256251e+03 + 192000 9.576251207916190e-01 -6.040255296306430e+00 -5.982904442310485e+00 3.478806372176783e+00 4.808123850837474e+00 9.164623958095663e+03 + 192020 9.593518930677277e-01 -6.021170125105177e+00 -6.033032409394900e+00 3.542533497062882e+00 4.474418424988730e+00 9.318738188676089e+03 + 192040 1.007020196346745e+00 -6.072579985899557e+00 -5.993588078922735e+00 3.283115101393803e+00 4.736698855212814e+00 9.197383980548619e+03 + 192060 9.555891805065074e-01 -5.976963811548091e+00 -6.032205551743185e+00 3.772729423712545e+00 4.455522802880646e+00 9.316186789004389e+03 + 192080 9.733215524975060e-01 -5.983572408840113e+00 -5.976541698493543e+00 3.796867436938792e+00 4.837238863747702e+00 9.145178533190827e+03 + 192100 9.679647377956010e-01 -5.955598685348470e+00 -5.962530490556784e+00 3.948947199077776e+00 4.909143700878250e+00 9.102379837467881e+03 + 192120 1.045525563242220e+00 -6.048192643245182e+00 -5.986666318709317e+00 3.466589525217151e+00 4.819883201870034e+00 9.176157172220881e+03 + 192140 9.406567299728716e-01 -5.873374389452994e+00 -6.060692939495844e+00 4.326640703886595e+00 4.251028602088614e+00 9.404268866703327e+03 + 192160 1.012779331627218e+00 -5.963601088370486e+00 -6.002007241332899e+00 3.840035796750179e+00 4.619501723107041e+00 9.223217252894934e+03 + 192180 9.790478402541377e-01 -5.895157056663507e+00 -6.012591727570991e+00 4.316078822356825e+00 4.641750769049466e+00 9.255690722751136e+03 + 192200 1.029879957366478e+00 -5.956134396368607e+00 -6.023410296771222e+00 3.933979119652544e+00 4.547670488628789e+00 9.289055937230540e+03 + 192220 9.931537580234043e-01 -5.891391563264853e+00 -6.035254263086532e+00 4.215054845482317e+00 4.388972960425386e+00 9.325572284766355e+03 + 192240 1.040612308030105e+00 -5.954706802396915e+00 -5.954489189313839e+00 3.968073982647547e+00 4.969323550646086e+00 9.077832608937457e+03 + 192260 1.005221444621524e+00 -5.896126220228802e+00 -6.016982323913732e+00 4.199935601406573e+00 4.505961151626103e+00 9.269234238250092e+03 + 192280 1.083546802658243e+00 -6.008360630947656e+00 -6.018197940938515e+00 3.697869643067642e+00 4.641382286781329e+00 9.273001052357928e+03 + 192300 1.010336581954323e+00 -5.902107497643581e+00 -6.091841795284350e+00 4.170741115659305e+00 4.081257417318340e+00 9.501131350256646e+03 + 192320 1.041805277740136e+00 -5.963323932798932e+00 -6.024687655049785e+00 3.906363257754418e+00 4.554003268584692e+00 9.292997470367978e+03 + 192340 9.768973282589276e-01 -5.891088042206332e+00 -6.036793257865988e+00 4.309409872944383e+00 4.472747976817387e+00 9.330319001741347e+03 + 192360 1.033542857166404e+00 -6.012537748361447e+00 -5.978474859878798e+00 3.638689716029130e+00 4.834284092911458e+00 9.151080468582000e+03 + 192380 9.659139271004019e-01 -5.956860038445155e+00 -6.018565432697192e+00 3.893963652798107e+00 4.539641730124008e+00 9.274111979144322e+03 + 192400 8.967879880967317e-01 -5.901928702877667e+00 -6.007455282442073e+00 4.237230082021938e+00 4.631280131977704e+00 9.239928377635053e+03 + 192420 9.746097922455307e-01 -6.057216609161243e+00 -5.948687250149206e+00 3.410272714158284e+00 5.033465088469429e+00 9.060188070740265e+03 + 192440 9.471052988486731e-01 -6.046407878073064e+00 -5.958533476656565e+00 3.489497225984359e+00 4.994085637437570e+00 9.090173394915937e+03 + 192460 9.353684383857561e-01 -6.045718236663029e+00 -5.976989110661730e+00 3.450545043794382e+00 4.845198321091716e+00 9.146541970821156e+03 + 192480 9.939048077375074e-01 -6.140243172837104e+00 -5.986964513291386e+00 2.947500593138268e+00 4.827650376045687e+00 9.177092559008019e+03 + 192500 9.146719508165742e-01 -6.024212076760592e+00 -6.033263444065296e+00 3.549520273209473e+00 4.497545921451296e+00 9.319460559552594e+03 + 192520 9.807177052988922e-01 -6.120995865590154e+00 -5.957907512484915e+00 3.055455646461861e+00 4.991934207833220e+00 9.088299572814507e+03 + 192540 9.221259462994515e-01 -6.025519473796090e+00 -5.976846745676211e+00 3.549930414251555e+00 4.829416751196232e+00 9.146111074578694e+03 + 192560 9.217870751269673e-01 -6.009199929391844e+00 -6.017217326278747e+00 3.614289956644090e+00 4.568252823031339e+00 9.269995336460124e+03 + 192580 9.662691560521297e-01 -6.056371653367839e+00 -5.980723435820643e+00 3.433798893766838e+00 4.868182665446671e+00 9.157984651873956e+03 + 192600 9.503504370838111e-01 -6.011653250127982e+00 -5.996713584569786e+00 3.641178158681920e+00 4.726964030222855e+00 9.206937145557937e+03 + 192620 9.373358815981214e-01 -5.967289547031760e+00 -6.023447087822232e+00 3.809162348862350e+00 4.486697059292106e+00 9.289161989993619e+03 + 192640 1.030187041733637e+00 -6.080931738237631e+00 -5.956211515256458e+00 3.241635194319849e+00 4.957798015069875e+00 9.083111978218405e+03 + 192660 1.013829522811777e+00 -6.034178034372769e+00 -5.953385923476665e+00 3.523578088241455e+00 4.987498891545645e+00 9.074467594379037e+03 + 192680 9.407627319835281e-01 -5.905594912104410e+00 -5.992221483333143e+00 4.236005681895677e+00 4.738582504481717e+00 9.193148284639608e+03 + 192700 1.003212142847814e+00 -5.980829427637343e+00 -6.016094575607014e+00 3.738342084543816e+00 4.535844147637956e+00 9.266481902903404e+03 + 192720 1.007889770097951e+00 -5.975588895918214e+00 -5.991723967987950e+00 3.787167498561387e+00 4.694517417842631e+00 9.191656019528140e+03 + 192740 1.024881593061589e+00 -5.992288930007204e+00 -5.996692697481517e+00 3.675655287312233e+00 4.650368172993914e+00 9.206893867309969e+03 + 192760 1.039707542063000e+00 -6.007727488520697e+00 -6.054344794272981e+00 3.617069498750900e+00 4.349385715116535e+00 9.384636750520622e+03 + 192780 1.006709212962323e+00 -5.959881708491642e+00 -6.015425609087472e+00 3.929179648379150e+00 4.610237975767054e+00 9.264476050978265e+03 + 192800 9.854824735506763e-01 -5.933020091932467e+00 -5.985219210218506e+00 4.024287870581253e+00 4.724552455595364e+00 9.171714522878097e+03 + 192820 1.023832631215471e+00 -5.991921278501300e+00 -5.977792236617633e+00 3.784263118426029e+00 4.865394263384211e+00 9.148986376082168e+03 + 192840 1.052000262815415e+00 -6.037455528421045e+00 -5.990360118257201e+00 3.450820639447785e+00 4.721249772599746e+00 9.187483286954999e+03 + 192860 1.029843776873423e+00 -6.008314338260278e+00 -5.941443746166821e+00 3.739097718352827e+00 5.123079006344138e+00 9.038125338709613e+03 + 192880 1.008424253319556e+00 -5.979981659584528e+00 -6.012986777994043e+00 3.806749737742957e+00 4.617229240309952e+00 9.256890562970551e+03 + 192900 1.006484228571428e+00 -5.982238498500737e+00 -6.003669187810764e+00 3.725817986958154e+00 4.602759652551528e+00 9.228317093979820e+03 + 192920 9.552758763545041e-01 -5.910204749626405e+00 -6.043167225553050e+00 4.126402932903841e+00 4.362911820256389e+00 9.350013837800443e+03 + 192940 1.032030353125798e+00 -6.029332970594379e+00 -6.041192063631321e+00 3.506869975760779e+00 4.438773228353941e+00 9.343930476620228e+03 + 192960 1.028642868277555e+00 -6.033996839059620e+00 -6.023399274163221e+00 3.492719415259459e+00 4.553572272862453e+00 9.289032635909294e+03 + 192980 9.516282139765604e-01 -5.932174617125932e+00 -6.022984277936913e+00 4.048216472291362e+00 4.526773347165120e+00 9.287719065222647e+03 + 193000 9.221747874392042e-01 -5.901948938264630e+00 -5.972287271837005e+00 4.296536958136088e+00 4.892643361941571e+00 9.132145968463776e+03 + 193020 9.967620906617108e-01 -6.024434171772220e+00 -6.008409717074946e+00 3.487407009000026e+00 4.579421907648120e+00 9.242892891105204e+03 + 193040 9.453373255909743e-01 -5.964202147077200e+00 -6.010474077541184e+00 3.939647686705684e+00 4.673947101423395e+00 9.249242173418534e+03 + 193060 9.609140540355077e-01 -6.007102328049189e+00 -6.035018225517256e+00 3.618892007921688e+00 4.458594604688876e+00 9.324864642014463e+03 + 193080 9.561465559938862e-01 -6.028977961760090e+00 -6.031410303002341e+00 3.512037138254525e+00 4.498070258437931e+00 9.313743946658156e+03 + 193100 9.566715363582162e-01 -6.066414189457478e+00 -5.999729544895190e+00 3.330795694133351e+00 4.713709242625406e+00 9.216229603957807e+03 + 193120 9.333866191278156e-01 -6.069982557625226e+00 -5.970855157729405e+00 3.340031449054857e+00 4.909236319172214e+00 9.127805621720665e+03 + 193140 9.134541874023875e-01 -6.072814792974334e+00 -5.982541077263695e+00 3.290500238948896e+00 4.808865884371741e+00 9.163539020822553e+03 + 193160 9.576172466378968e-01 -6.161933811703527e+00 -5.960396325893591e+00 2.835435688610958e+00 4.992695119956750e+00 9.095875731634671e+03 + 193180 8.670986831403696e-01 -6.041524937722428e+00 -5.985440169616753e+00 3.466095037167460e+00 4.788142454720065e+00 9.172410711022309e+03 + 193200 9.053845020733399e-01 -6.102267418017212e+00 -6.016420104683939e+00 3.105011243185027e+00 4.597959801173484e+00 9.267535513569921e+03 + 193220 8.980117527856828e-01 -6.086830582377294e+00 -5.999572075103172e+00 3.227013274466935e+00 4.728065126445300e+00 9.215733819370422e+03 + 193240 9.410914474458053e-01 -6.135473115789558e+00 -5.998930077312314e+00 2.952376071807813e+00 4.736427328711065e+00 9.213785280443230e+03 + 193260 9.601176850693679e-01 -6.137312698012403e+00 -6.011367316933711e+00 2.949862175113902e+00 4.673060043252484e+00 9.251990484759672e+03 + 193280 9.166411273789244e-01 -6.040337267665028e+00 -6.006284162429790e+00 3.475516789453556e+00 4.671054989415296e+00 9.236362997994192e+03 + 193300 9.270422170559988e-01 -6.016904814733277e+00 -5.995357343659677e+00 3.617885212865659e+00 4.741614126230640e+00 9.202806997259806e+03 + 193320 9.655667914312422e-01 -6.030578136774420e+00 -5.987442640271071e+00 3.568934820418284e+00 4.816625516537023e+00 9.178528748468669e+03 + 193340 9.820138122671324e-01 -6.016296243480034e+00 -6.018572543766212e+00 3.595566292725177e+00 4.582495424225613e+00 9.274163776895248e+03 + 193360 9.692003756745533e-01 -5.971191859835379e+00 -6.049280713406879e+00 3.787932905128748e+00 4.339534623710161e+00 9.368964038164671e+03 + 193380 1.002257820711203e+00 -6.003792747994935e+00 -6.018722761083982e+00 3.629905806765611e+00 4.544175361196244e+00 9.274622882985874e+03 + 193400 1.048449079955170e+00 -6.061515350559915e+00 -6.005200751983695e+00 3.325003602414117e+00 4.648370742094739e+00 9.233023174105296e+03 + 193420 1.025792989482752e+00 -6.020378786169019e+00 -5.937770120602330e+00 3.609684534313829e+00 5.084036275647439e+00 9.027005516265350e+03 + 193440 9.598117108338120e-01 -5.914258456734489e+00 -6.015925575603523e+00 4.121599330049314e+00 4.537811000567523e+00 9.265969287100012e+03 + 193460 9.471950022608682e-01 -5.887847802848131e+00 -6.023034033504663e+00 4.288814462863103e+00 4.512554206431712e+00 9.287872772075083e+03 + 193480 1.048279665534575e+00 -6.031503082231900e+00 -5.977419259777339e+00 3.461589019377868e+00 4.772146697356437e+00 9.147849180578820e+03 + 193500 9.949953597411039e-01 -5.947098720124854e+00 -6.032610169971354e+00 4.006223698789862e+00 4.515203720917161e+00 9.317417636061589e+03 + 193520 9.942678565652801e-01 -5.942597684598464e+00 -6.075065388873304e+00 3.989843196429985e+00 4.229193139172873e+00 9.448932173960282e+03 + 193540 1.074236918599756e+00 -6.062408444122731e+00 -5.998578223520866e+00 3.404078300582758e+00 4.770601304973379e+00 9.212700003471789e+03 + 193560 1.008016265052329e+00 -5.969427675045067e+00 -6.012377811564146e+00 3.817414929479055e+00 4.570788599074351e+00 9.255094595661074e+03 + 193580 9.692217185312093e-01 -5.919583548496787e+00 -5.991877961582524e+00 4.158906384111495e+00 4.743780676648922e+00 9.192135438797513e+03 + 193600 1.030487255384755e+00 -6.020175320177704e+00 -5.963956682905048e+00 3.556715471030745e+00 4.879531586056338e+00 9.106721005341877e+03 + 193620 9.902610268112152e-01 -5.972326687209407e+00 -5.998043373042836e+00 3.898846346045933e+00 4.751177156346116e+00 9.211016583797722e+03 + 193640 1.012585871431132e+00 -6.019606478852444e+00 -6.000994151799338e+00 3.612091322234165e+00 4.718966184421403e+00 9.220074309532871e+03 + 193660 9.951820073350311e-01 -6.011990981008261e+00 -5.987661294357156e+00 3.654635199446539e+00 4.794340025204028e+00 9.179200461549322e+03 + 193680 9.440051165897440e-01 -5.956440565358391e+00 -5.983905003578301e+00 3.897299854159983e+00 4.739594799793178e+00 9.167707530233289e+03 + 193700 9.510300164625005e-01 -5.990100864424569e+00 -6.001597578453840e+00 3.770140545450684e+00 4.704124634383869e+00 9.221945828509024e+03 + 193720 9.508551718695956e-01 -6.015159660741341e+00 -6.030752653391935e+00 3.564339334264950e+00 4.474801957457430e+00 9.311702694451800e+03 + 193740 9.717774222513653e-01 -6.072986463311710e+00 -6.037421352216301e+00 3.266937151335431e+00 4.471157522928429e+00 9.332296476942043e+03 + 193760 9.340553451268199e-01 -6.045264166567318e+00 -6.000632930351231e+00 3.459578220853651e+00 4.715857685867905e+00 9.219008563351808e+03 + 193780 9.595354352992714e-01 -6.109002742075771e+00 -5.978551705032745e+00 3.129046094695315e+00 4.878116136629110e+00 9.151318752953488e+03 + 193800 9.046420520675820e-01 -6.045195877916576e+00 -5.983989895134261e+00 3.436939771202169e+00 4.788393995933442e+00 9.167989653881526e+03 + 193820 9.243055451462868e-01 -6.086217394207283e+00 -6.020108949575155e+00 3.196600840449380e+00 4.576205759775801e+00 9.278891373635590e+03 + 193840 8.892897230436768e-01 -6.041169044673222e+00 -6.005300917494747e+00 3.490601287084406e+00 4.696561623917956e+00 9.233344950048257e+03 + 193860 9.307563021372819e-01 -6.101448265492746e+00 -5.979017286367676e+00 3.100641545019982e+00 4.803659173288921e+00 9.152758490983766e+03 + 193880 8.986729992885011e-01 -6.040522267533941e+00 -6.023014959248859e+00 3.492900735821956e+00 4.593430409242100e+00 9.287815919061168e+03 + 193900 9.525957807427563e-01 -6.097053215686828e+00 -6.013036163302107e+00 3.137074002218578e+00 4.619512918608479e+00 9.257129516350107e+03 + 193920 9.823341661429406e-01 -6.102576369619105e+00 -6.005233682518390e+00 3.110681440872853e+00 4.669638213937304e+00 9.233130567580258e+03 + 193940 9.502053605734744e-01 -6.007160131129385e+00 -5.984914969238337e+00 3.671274383595851e+00 4.799009545601926e+00 9.170786122394105e+03 + 193960 9.816071685293634e-01 -6.001864277112706e+00 -6.004062432620557e+00 3.681765827791661e+00 4.669143678702111e+00 9.229521579930230e+03 + 193980 9.617886614250544e-01 -5.926559730116336e+00 -6.026979307151656e+00 4.104473769145425e+00 4.527849017929296e+00 9.300014722334588e+03 + 194000 1.024485437360066e+00 -5.989106826575084e+00 -5.974766972883923e+00 3.710923629298715e+00 4.793265288278548e+00 9.139739549608748e+03 + 194020 9.957750828356648e-01 -5.926974619591436e+00 -5.965476532018317e+00 4.065848860112366e+00 4.844764920805525e+00 9.111334187289571e+03 + 194040 1.018235906778185e+00 -5.945672992547292e+00 -5.955136216633873e+00 3.998605878017963e+00 4.944266580883618e+00 9.079813809930081e+03 + 194060 1.014995399663806e+00 -5.929033498387922e+00 -6.034039174219503e+00 4.055360899364022e+00 4.452402059163267e+00 9.321827148095863e+03 + 194080 1.037497960937172e+00 -5.957884679447076e+00 -5.992709031296734e+00 3.967686639620832e+00 4.767719822249067e+00 9.194658179659207e+03 + 194100 1.066448146130094e+00 -6.001610338615022e+00 -5.987259092836767e+00 3.723432050154174e+00 4.805839124261017e+00 9.177965028885823e+03 + 194120 1.026214527613712e+00 -5.946215891079811e+00 -5.965285702263070e+00 4.045438732375304e+00 4.935936925517292e+00 9.110790023717551e+03 + 194140 1.016298081411599e+00 -5.938494320631506e+00 -6.024149887827736e+00 4.040102274056103e+00 4.548254752059165e+00 9.291314603744044e+03 + 194160 1.011249067204034e+00 -5.942844304575742e+00 -6.024447142633424e+00 4.001995973263663e+00 4.533419849138083e+00 9.292244228918116e+03 + 194180 1.022851902090925e+00 -5.975531183768096e+00 -6.000079073453587e+00 3.832595210026639e+00 4.691637428678900e+00 9.217285085005435e+03 + 194200 9.983077110015581e-01 -5.958916442946118e+00 -5.974545211740619e+00 3.956805636930254e+00 4.867062827968081e+00 9.139065387502940e+03 + 194220 9.440526392907095e-01 -5.898869083982945e+00 -6.012101755000233e+00 4.203962052461295e+00 4.553762532780815e+00 9.254239337947702e+03 + 194240 1.080733567929887e+00 -6.123108556622436e+00 -5.956959231573098e+00 3.071134877844902e+00 5.025190013803160e+00 9.085402790020411e+03 + 194260 9.737382111031422e-01 -5.987954219844417e+00 -6.034891547820374e+00 3.780944501644778e+00 4.511423100878802e+00 9.324494928199780e+03 + 194280 9.975125169201211e-01 -6.048527197364016e+00 -6.047516666689599e+00 3.397607459257824e+00 4.403410082769443e+00 9.363508670400774e+03 + 194300 9.435485097442139e-01 -5.996945341425461e+00 -6.017536271615102e+00 3.694615427813358e+00 4.576379120228294e+00 9.270972830985793e+03 + 194320 9.204297750056399e-01 -5.987071711519894e+00 -5.986566621725789e+00 3.760758544203275e+00 4.763658847963422e+00 9.175853457539728e+03 + 194340 1.003210044440870e+00 -6.130690528335132e+00 -5.956268441211414e+00 3.010826201303048e+00 5.012384817298184e+00 9.083293145898378e+03 + 194360 9.157749371875800e-01 -6.016876617991064e+00 -5.977752225361162e+00 3.632476746752585e+00 4.857135063713677e+00 9.148871575894396e+03 + 194380 9.422466776727291e-01 -6.065991085352614e+00 -5.951736782879858e+00 3.365884260767706e+00 5.021950146362438e+00 9.069480703882353e+03 + 194400 9.834099985349986e-01 -6.128197824941129e+00 -5.968689460576061e+00 3.009957681764494e+00 4.925879393788323e+00 9.121192488892601e+03 + 194420 1.013194410556246e+00 -6.168028187055096e+00 -5.989075184118316e+00 2.819521942417330e+00 4.847097778168029e+00 9.183565406100037e+03 + 194440 9.263761478519698e-01 -6.028116146302384e+00 -6.014379881236366e+00 3.551344053990355e+00 4.630219813679584e+00 9.261274956772035e+03 + 194460 9.932393852035065e-01 -6.102947606769537e+00 -6.002921594692144e+00 3.158454931911577e+00 4.732819772235310e+00 9.226015704464431e+03 + 194480 9.052023386377490e-01 -5.931051922937816e+00 -5.976226459981921e+00 4.086994849516230e+00 4.827595667071963e+00 9.144190248297869e+03 + 194500 1.012931860130209e+00 -6.033583329171025e+00 -5.997407906947040e+00 3.532696392883950e+00 4.740421265422566e+00 9.209092100004480e+03 + 194520 1.033559082153970e+00 -6.001570048807977e+00 -6.057796717928790e+00 3.670350128827394e+00 4.347487893686763e+00 9.395319184637421e+03 + 194540 1.028348159236356e+00 -5.947652199109034e+00 -6.045998907887073e+00 3.968236307289352e+00 4.403514286381855e+00 9.358801335055672e+03 + 194560 1.027064710840331e+00 -5.919291799315753e+00 -5.984431546451627e+00 4.181549311585931e+00 4.807506803188454e+00 9.169295673072071e+03 + 194580 1.075027888614115e+00 -5.972728785536670e+00 -5.986214838204464e+00 3.829659051295233e+00 4.752220049916857e+00 9.174768441531387e+03 + 194600 1.022956580169680e+00 -5.885642196346944e+00 -6.023362084192408e+00 4.319913427800806e+00 4.529104519708381e+00 9.288881675335770e+03 + 194620 1.066661883179943e+00 -5.946325844652015e+00 -6.045522819927838e+00 4.001326191943191e+00 4.431721809227106e+00 9.357332257445103e+03 + 194640 1.067359001206917e+00 -5.953188307826789e+00 -6.021220964332403e+00 3.970457938654704e+00 4.579803896979898e+00 9.282310030681263e+03 + 194660 1.083364446139227e+00 -5.988988145575913e+00 -6.001230620021657e+00 3.753056731725506e+00 4.682758548941248e+00 9.220833828615414e+03 + 194680 1.047244718865614e+00 -5.954091308926347e+00 -6.034789731538917e+00 3.959971631682409e+00 4.496588801000494e+00 9.324149460401417e+03 + 194700 1.052979102711896e+00 -5.987863284096330e+00 -6.025970732819832e+00 3.724092554417755e+00 4.505273686738779e+00 9.296942096064631e+03 + 194720 9.881345128073428e-01 -5.922073336040594e+00 -6.011198699346856e+00 4.098234154707811e+00 4.586462526497857e+00 9.251440209953935e+03 + 194740 9.139238765405863e-01 -5.842445433571315e+00 -5.988806999312830e+00 4.538474984321857e+00 4.698044224454974e+00 9.182711584226841e+03 + 194760 9.719882212122737e-01 -5.953830033859441e+00 -5.998372005098083e+00 3.962831056063020e+00 4.707064164362966e+00 9.212026532227837e+03 + 194780 9.879078353243927e-01 -6.000741597265784e+00 -6.005537336361003e+00 3.725425105541702e+00 4.697887229518728e+00 9.234070536604015e+03 + 194800 1.048372767288372e+00 -6.111335194929350e+00 -5.990977878113209e+00 3.112639695783624e+00 4.803750034176486e+00 9.189383895490930e+03 + 194820 9.023908454245887e-01 -5.913862804081949e+00 -6.047341438039045e+00 4.115172425347900e+00 4.348717453414403e+00 9.362942535794453e+03 + 194840 9.678881488642577e-01 -6.024791997355376e+00 -6.030376897551854e+00 3.567873045821821e+00 4.535803684633130e+00 9.310556916745858e+03 + 194860 9.768458078943340e-01 -6.049588727759937e+00 -6.023704187237696e+00 3.376928294040593e+00 4.525561331339002e+00 9.289972940342110e+03 + 194880 9.841797597778549e-01 -6.068375498000267e+00 -5.970690640810600e+00 3.328667067139163e+00 4.889588633805030e+00 9.127299678094048e+03 + 194900 8.861678225018721e-01 -5.925691185358503e+00 -6.026610466418308e+00 4.120952137337278e+00 4.541458008283607e+00 9.298901005237185e+03 + 194920 9.882653012354137e-01 -6.075168715346120e+00 -6.007539761653294e+00 3.333316616203706e+00 4.721652533854672e+00 9.240218388524016e+03 + 194940 9.728430377410036e-01 -6.047346213529561e+00 -6.009859286438171e+00 3.426636607093120e+00 4.641892343535104e+00 9.247328503005765e+03 + 194960 1.027546616732236e+00 -6.119761806917442e+00 -5.978634450710405e+00 3.073148520484556e+00 4.883523639213148e+00 9.151590376779071e+03 + 194980 1.041196346045546e+00 -6.125185260115226e+00 -5.982440548013432e+00 3.043682442937001e+00 4.863344669498316e+00 9.163233859463489e+03 + 195000 9.785209658312166e-01 -6.013311194767229e+00 -5.991178606353222e+00 3.643419687696193e+00 4.770508435376408e+00 9.189990221036411e+03 + 195020 1.031850945958863e+00 -6.060141834429955e+00 -5.997741544392487e+00 3.370562782501036e+00 4.728874904309855e+00 9.210120233020480e+03 + 195040 9.674849870548101e-01 -5.914024189934994e+00 -6.062666667541665e+00 4.153171222006355e+00 4.299643113239786e+00 9.410423935718543e+03 + 195060 1.068454047061228e+00 -6.005147404645366e+00 -6.015492827478642e+00 3.687796575085263e+00 4.628391556227585e+00 9.264679901629477e+03 + 195080 1.037943724067844e+00 -5.899010103776524e+00 -6.040824753676988e+00 4.178818332966619e+00 4.364496667492006e+00 9.342805482543628e+03 + 195100 1.091265130443541e+00 -5.938149955470487e+00 -6.029362263779415e+00 3.984252802744566e+00 4.460497613375606e+00 9.307417203504157e+03 + 195120 1.108284774380668e+00 -5.942593429551157e+00 -5.993509001114340e+00 4.016629242373025e+00 4.724264151297993e+00 9.197109775128896e+03 + 195140 1.109040097042377e+00 -5.935260810410387e+00 -5.973344572545153e+00 4.056600576285014e+00 4.837917720664044e+00 9.135375014709356e+03 + 195160 1.130877413555004e+00 -5.968515068558276e+00 -5.983932052923331e+00 3.895517653181329e+00 4.806990943186566e+00 9.167778861471577e+03 + 195180 1.093156306920436e+00 -5.924013211308193e+00 -6.015034188968398e+00 4.088440760733825e+00 4.565784221558154e+00 9.263262636146044e+03 + 195200 1.060974291882846e+00 -5.897189168434219e+00 -6.018880272875743e+00 4.233464178690634e+00 4.534695025349853e+00 9.275065084393518e+03 + 195220 9.912683735722263e-01 -5.818286867332745e+00 -5.984878420680416e+00 4.691277184128419e+00 4.734682704846530e+00 9.170652403217671e+03 + 195240 1.061569483046638e+00 -5.945269013670535e+00 -6.003468030436856e+00 3.953539616962259e+00 4.619351856421302e+00 9.227703402245008e+03 + 195260 1.052929034895196e+00 -5.959018203543150e+00 -6.040539511455994e+00 3.927154746577597e+00 4.459046781160421e+00 9.341922857284288e+03 + 195280 1.068965843257288e+00 -6.012291705589042e+00 -6.031506911292057e+00 3.663420359669321e+00 4.553083674979134e+00 9.314032432931792e+03 + 195300 1.006538632832713e+00 -5.951142656852239e+00 -6.060921493991385e+00 3.974206568028704e+00 4.343839496955582e+00 9.404991852671619e+03 + 195320 9.589021443974243e-01 -5.908552200412034e+00 -6.034819334084642e+00 4.170740760733112e+00 4.445695339409208e+00 9.324252076091745e+03 + 195340 1.014784999861582e+00 -6.013782000627955e+00 -6.023138856429611e+00 3.577512675293565e+00 4.523784161311701e+00 9.288246778114179e+03 + 195360 9.309996316952405e-01 -5.908420272505087e+00 -6.032282432857651e+00 4.157953833463136e+00 4.446718141111350e+00 9.316406182725261e+03 + 195380 9.506303619349689e-01 -5.950742460884308e+00 -6.020554207916141e+00 3.920210987587033e+00 4.519341132797308e+00 9.280231516032365e+03 + 195400 9.835865752125958e-01 -6.010114104572669e+00 -6.016454658511489e+00 3.610638034472048e+00 4.574229592557794e+00 9.267637771107546e+03 + 195420 9.681555571854904e-01 -5.993707766344327e+00 -5.991330050371896e+00 3.715043616429753e+00 4.728696829493813e+00 9.190457844040404e+03 + 195440 9.457743779534938e-01 -5.964516945934775e+00 -6.010340929138503e+00 3.794709959652249e+00 4.531581556857955e+00 9.248802205308046e+03 + 195460 9.143861506562426e-01 -5.918681211623412e+00 -6.002772481927474e+00 4.089532518748589e+00 4.606667431580642e+00 9.225554956729096e+03 + 195480 9.207583258790997e-01 -5.924559705955359e+00 -6.039331327616480e+00 4.062298502164776e+00 4.403262089735566e+00 9.338167053082436e+03 + 195500 9.827210939434317e-01 -6.012454450566005e+00 -5.982069597266509e+00 3.648443097354031e+00 4.822917627040589e+00 9.162093967311053e+03 + 195520 1.024595005560078e+00 -6.066649411953991e+00 -5.993960229857764e+00 3.313287145186318e+00 4.730679677397426e+00 9.198502096097025e+03 + 195540 9.173785224805937e-01 -5.897563283022935e+00 -6.040675656019531e+00 4.248174252437241e+00 4.426400860122637e+00 9.342309243884254e+03 + 195560 1.021339652449600e+00 -6.039506100194989e+00 -5.992296297768468e+00 3.539318353838091e+00 4.810404345064493e+00 9.193417395302449e+03 + 195580 1.008308403358865e+00 -6.005014189512828e+00 -6.022612079538067e+00 3.667228377750170e+00 4.566178569960561e+00 9.286592408233244e+03 + 195600 9.997542728009768e-01 -5.975234476987739e+00 -6.006136734916364e+00 3.852923816297130e+00 4.675478269162010e+00 9.235891951254935e+03 + 195620 9.701013589336697e-01 -5.907328543935792e+00 -6.035656252123649e+00 4.206990065799034e+00 4.470112506735700e+00 9.326807595097669e+03 + 195640 1.031570390624593e+00 -5.966916493330304e+00 -5.986856272710686e+00 3.927037705866337e+00 4.812540406993302e+00 9.176704351323720e+03 + 195660 1.034838000530701e+00 -5.930061006415778e+00 -5.988050464289927e+00 4.092731136759607e+00 4.759746695806641e+00 9.180386945439654e+03 + 195680 1.103343436778477e+00 -5.984126496259647e+00 -6.014309587487356e+00 3.733321237132906e+00 4.560005256485133e+00 9.261010948805497e+03 + 195700 1.030117971391306e+00 -5.830488207587748e+00 -6.028131357459952e+00 4.622435055405390e+00 4.487537503660601e+00 9.303607295531910e+03 + 195720 1.043771650334911e+00 -5.817489488557357e+00 -6.037159433526663e+00 4.646014578681230e+00 4.384635760853353e+00 9.331474432674315e+03 + 195740 1.109502239448264e+00 -5.893142462046918e+00 -5.975932573416783e+00 4.327816865736255e+00 4.852423234522168e+00 9.143289087547106e+03 + 195760 1.203622420289884e+00 -6.023647047468567e+00 -5.958471813207203e+00 3.554590934528555e+00 4.928837215492212e+00 9.089991127436406e+03 + 195780 1.025763282680875e+00 -5.762924165083025e+00 -6.064199170860745e+00 4.970966442472552e+00 4.240998737140416e+00 9.415157422421986e+03 + 195800 1.150305917748389e+00 -5.963624691095585e+00 -5.997845526089270e+00 3.884980961008975e+00 4.688479630818135e+00 9.210411907480182e+03 + 195820 1.029302771349974e+00 -5.813863527385857e+00 -6.088792848711325e+00 4.655490259945367e+00 4.076803551719556e+00 9.491610443941916e+03 + 195840 1.061079312409690e+00 -5.899083819617505e+00 -6.049104365717444e+00 4.155500437328173e+00 4.294059246017851e+00 9.368421708130536e+03 + 195860 1.084799665186829e+00 -5.977167034915016e+00 -6.014921058876938e+00 3.846474853025037e+00 4.629685405019358e+00 9.262906998870449e+03 + 195880 1.045054978832134e+00 -5.956683928026305e+00 -5.973701236154893e+00 3.963260584830127e+00 4.865544568135847e+00 9.136452701478986e+03 + 195900 9.980838992881256e-01 -5.912094188057544e+00 -5.994176397667002e+00 4.248177378764812e+00 4.776848629006422e+00 9.199116434182821e+03 + 195920 9.788310446986191e-01 -5.900461278441330e+00 -5.957523871722727e+00 4.244823983343492e+00 4.917161742313935e+00 9.087121051044682e+03 + 195940 1.109424694478011e+00 -6.106819290213096e+00 -5.943808738518188e+00 3.112346909323401e+00 5.048378722956913e+00 9.045364271006429e+03 + 195960 9.868670999573856e-01 -5.935082963025387e+00 -6.039264653131007e+00 4.065093522041795e+00 4.466866135390885e+00 9.337950493773402e+03 + 195980 1.015353267431872e+00 -5.988512136884857e+00 -6.011998002858749e+00 3.785098745219610e+00 4.650239268371513e+00 9.253914337205419e+03 + 196000 9.762518212461302e-01 -5.941699130558347e+00 -6.028064418808317e+00 3.985377079326182e+00 4.489454229209694e+00 9.303382289104353e+03 + 196020 1.025268059393474e+00 -6.025907688671422e+00 -6.027068140442571e+00 3.556115788427973e+00 4.549452294778707e+00 9.300326118308833e+03 + 196040 9.789862474855155e-01 -5.970312459544172e+00 -6.027891854381036e+00 3.826568380206134e+00 4.495938584670310e+00 9.302857492504578e+03 + 196060 1.038765041711593e+00 -6.071759861808702e+00 -5.974056621483405e+00 3.332654705778670e+00 4.893681831254100e+00 9.137574059475333e+03 + 196080 9.613493345037628e-01 -5.969826094817813e+00 -5.994581489826163e+00 3.891112399080832e+00 4.748963090057893e+00 9.200423549726422e+03 + 196100 9.632818152527783e-01 -5.984751422027773e+00 -6.016077682465077e+00 3.761701017156386e+00 4.581820782002248e+00 9.266468825874474e+03 + 196120 9.814433536943094e-01 -6.021385953118086e+00 -6.003045320514879e+00 3.529852630281688e+00 4.635167380893028e+00 9.226407349847639e+03 + 196140 9.542280245903060e-01 -5.990684331666362e+00 -6.020197539135954e+00 3.743985997424326e+00 4.574516592979832e+00 9.279149865497217e+03 + 196160 9.796670291339024e-01 -6.036575551269958e+00 -6.023644622958218e+00 3.448822486249040e+00 4.523073877669736e+00 9.289768095886840e+03 + 196180 1.004913699703821e+00 -6.081103446843636e+00 -6.020846000717034e+00 3.193787857256879e+00 4.539795437725479e+00 9.281166969847038e+03 + 196200 9.072807497277826e-01 -5.943133793041028e+00 -6.030456325565718e+00 3.985557362852485e+00 4.484137867977481e+00 9.310772677102919e+03 + 196220 1.017485087939072e+00 -6.111008502014367e+00 -5.973459383217977e+00 3.100866455646824e+00 4.890694781433037e+00 9.135751702356602e+03 + 196240 9.966495689880164e-01 -6.080819096042160e+00 -5.986772628335506e+00 3.183573419150070e+00 4.723602790365520e+00 9.176501344713612e+03 + 196260 9.674832197506874e-01 -6.034669329523607e+00 -5.971869761704508e+00 3.537578394363829e+00 4.898183230982805e+00 9.130900852390239e+03 + 196280 9.839026416470281e-01 -6.052098536100198e+00 -5.960533136511234e+00 3.423336561425150e+00 4.949119255564772e+00 9.096291441605750e+03 + 196300 9.726166914996156e-01 -6.018638323206472e+00 -6.026142702725586e+00 3.545403355364974e+00 4.502312046867243e+00 9.297495271429132e+03 + 196320 9.801225092071612e-01 -6.006808617812212e+00 -6.049173246633879e+00 3.619101363066059e+00 4.375837108466922e+00 9.368621649990835e+03 + 196340 9.563569203546441e-01 -5.943050198906358e+00 -6.048469812939507e+00 3.976700445333563e+00 4.371364707922671e+00 9.366446359388423e+03 + 196360 1.016728831749194e+00 -6.001168492801508e+00 -6.012307883485610e+00 3.654546650826205e+00 4.590582545702953e+00 9.254876651820887e+03 + 196380 1.008156594513306e+00 -5.954048034756957e+00 -6.023822192688198e+00 3.943586010787734e+00 4.542931998430503e+00 9.290333386865057e+03 + 196400 1.041124516804299e+00 -5.970271545252571e+00 -6.044143450797173e+00 3.842178728542472e+00 4.417994815264929e+00 9.353054540713165e+03 + 196420 1.086576681300038e+00 -6.011560463914763e+00 -6.024765669467967e+00 3.589886430235164e+00 4.514060096449715e+00 9.293242786800582e+03 + 196440 1.063279643299886e+00 -5.958440407334984e+00 -6.012366558837368e+00 3.913189380883155e+00 4.603537073911491e+00 9.255045380419879e+03 + 196460 1.097943994054016e+00 -5.997964065017324e+00 -5.999119533977978e+00 3.718612839764888e+00 4.711977958184568e+00 9.214333194476187e+03 + 196480 1.104999436025522e+00 -6.003260341139711e+00 -5.987425606832627e+00 3.728764886970749e+00 4.819690381779241e+00 9.178479116638713e+03 + 196500 1.157593607922789e+00 -6.083708436207534e+00 -5.949969614095542e+00 3.307321772338487e+00 5.075270784921381e+00 9.064111759971396e+03 + 196520 1.015622505444549e+00 -5.884498037167493e+00 -6.012648919237864e+00 4.353883725711413e+00 4.618021529578432e+00 9.255907775082427e+03 + 196540 1.034827590909407e+00 -5.931003680236585e+00 -5.990301880990764e+00 4.053676541565276e+00 4.713177096467867e+00 9.187281873121270e+03 + 196560 1.090095937186121e+00 -6.037090085142685e+00 -5.981296819889002e+00 3.549257062086189e+00 4.869630625152731e+00 9.159729771859715e+03 + 196580 1.015615315155922e+00 -5.961011072904907e+00 -6.011173602004468e+00 3.885343947489878e+00 4.597302942773910e+00 9.251383080898193e+03 + 196600 9.805102370214637e-01 -5.946776819149309e+00 -6.069265175581814e+00 3.958615766271772e+00 4.255268668624435e+00 9.430879170386048e+03 + 196620 1.029964652562008e+00 -6.063341047901074e+00 -6.037461349333261e+00 3.354036757738375e+00 4.502641991785164e+00 9.332423949758762e+03 + 196640 1.007854952122786e+00 -6.073271327198606e+00 -6.023129330707247e+00 3.295624910160848e+00 4.583548013463110e+00 9.288205109033779e+03 + 196660 9.863193990583288e-01 -6.074665220235833e+00 -6.024149668923817e+00 3.250603602435604e+00 4.540671715325496e+00 9.291361080810797e+03 + 196680 9.112782263198529e-01 -5.984865063030747e+00 -6.010485917086636e+00 3.823316633633444e+00 4.676197724830176e+00 9.249269505523172e+03 + 196700 9.767864350966584e-01 -6.092836893426465e+00 -6.021345396612986e+00 3.173173728191611e+00 4.583688966167979e+00 9.282699101437358e+03 + 196720 9.252090462546205e-01 -6.019818772993522e+00 -5.985480012798076e+00 3.627309679390998e+00 4.824488154339212e+00 9.172509918057183e+03 + 196740 9.692097874625549e-01 -6.082938119993261e+00 -5.928433517626152e+00 3.277735657938218e+00 5.164924994240101e+00 8.998645847964159e+03 + 196760 9.615295905077944e-01 -6.062552192151873e+00 -5.928436945389441e+00 3.402403288970505e+00 5.172513790147756e+00 8.998657873479819e+03 + 196780 9.977560858939010e-01 -6.102184763880998e+00 -5.980059792862673e+00 3.114914034033379e+00 4.816174516398789e+00 9.155934902051180e+03 + 196800 9.675207016624822e-01 -6.039843280306894e+00 -6.002095199909910e+00 3.474149675627556e+00 4.690904994763605e+00 9.223485481145588e+03 + 196820 9.638818696861348e-01 -6.017246308335776e+00 -6.041356952476862e+00 3.635968278757683e+00 4.497521228989442e+00 9.344453432519334e+03 + 196840 9.845313428514493e-01 -6.032814341817515e+00 -5.994484748412670e+00 3.491016320259656e+00 4.711110777075685e+00 9.200125620177883e+03 + 196860 9.775141694748302e-01 -6.004681469969341e+00 -5.941306427321474e+00 3.679382826208122e+00 5.043292128348329e+00 9.037743006840519e+03 + 196880 9.470717791762979e-01 -5.937092312029226e+00 -6.003340955140673e+00 4.015598765879453e+00 4.635188805189141e+00 9.227283704393325e+03 + 196900 1.041305202265814e+00 -6.052782919192036e+00 -5.977833175729330e+00 3.354954828065854e+00 4.785327853464030e+00 9.149116339519176e+03 + 196920 1.006554410730470e+00 -5.982003884302880e+00 -6.027482130148678e+00 3.782827148589351e+00 4.521684023206984e+00 9.301591837631777e+03 + 196940 1.036517480273102e+00 -6.009718335793380e+00 -6.000085040720283e+00 3.678765604840485e+00 4.734081475897803e+00 9.217303855736047e+03 + 196960 1.019830546584941e+00 -5.971056096146942e+00 -5.998844138747987e+00 3.872200881737766e+00 4.712637640936871e+00 9.213494715759080e+03 + 196980 1.059778467145453e+00 -6.017628757349546e+00 -6.009881207823598e+00 3.638145379491315e+00 4.682633007798721e+00 9.247410350768210e+03 + 197000 1.087866225725763e+00 -6.050110833842114e+00 -6.052689843081360e+00 3.401598535427826e+00 4.386789465275683e+00 9.379522645689653e+03 + 197020 9.952247096938055e-01 -5.912448110081366e+00 -6.058346125850791e+00 4.090589548265740e+00 4.252820564072723e+00 9.397022947566409e+03 + 197040 1.036299814653037e+00 -5.976396498780574e+00 -6.009026458459568e+00 3.852580110947072e+00 4.665213833000347e+00 9.244759199028014e+03 + 197060 1.062549535261439e+00 -6.022710484788391e+00 -5.988841610995904e+00 3.581569170025671e+00 4.776049484533408e+00 9.182813412472669e+03 + 197080 9.821659609422909e-01 -5.914985821582271e+00 -6.030221719868052e+00 4.146131838998538e+00 4.484429478343958e+00 9.310049213503347e+03 + 197100 9.833750573263563e-01 -5.936797837007573e+00 -6.012680831294200e+00 4.042183425266504e+00 4.606451529217276e+00 9.256014601442441e+03 + 197120 1.018590784121291e+00 -6.021542108669974e+00 -6.010925624776585e+00 3.575696881275249e+00 4.636658374686663e+00 9.250621654186678e+03 + 197140 9.970257086326541e-01 -6.038824266224516e+00 -5.980147130418392e+00 3.479536808579721e+00 4.816470002635906e+00 9.156210517239904e+03 + 197160 9.447318746727433e-01 -6.017195603286956e+00 -6.016745222234792e+00 3.584175642107418e+00 4.586761799805185e+00 9.268496888240523e+03 + 197180 9.211466053213765e-01 -6.028823342983472e+00 -5.979792192031918e+00 3.532058871993285e+00 4.813603328303194e+00 9.155123515840092e+03 + 197200 8.972494171421812e-01 -6.024642149058459e+00 -6.016584316939118e+00 3.595895901142344e+00 4.642165220117089e+00 9.268038235118700e+03 + 197220 9.450035844020773e-01 -6.113877129568417e+00 -6.015179657889069e+00 3.076326509148350e+00 4.643062664915547e+00 9.263711814178168e+03 + 197240 9.248491484687311e-01 -6.092100876280478e+00 -5.994803091156780e+00 3.214246804306167e+00 4.772945743270028e+00 9.201123057850760e+03 + 197260 8.928805766595573e-01 -6.044804932982550e+00 -5.996976111315328e+00 3.449084093700811e+00 4.723724589200234e+00 9.207777746159645e+03 + 197280 9.429077659103208e-01 -6.111393848038091e+00 -5.993536001255046e+00 3.132634409886822e+00 4.809392404557910e+00 9.197225727154786e+03 + 197300 9.337250573038549e-01 -6.083429067092582e+00 -6.016055751978173e+00 3.243997730927900e+00 4.630865732301656e+00 9.266405399200301e+03 + 197320 9.347213220383986e-01 -6.065103715947722e+00 -5.991102165433047e+00 3.375319516833337e+00 4.800247871591535e+00 9.189769108818811e+03 + 197340 9.107954466508693e-01 -6.004173921937875e+00 -6.043437290057229e+00 3.664521986304679e+00 4.439065650576774e+00 9.350867034514349e+03 + 197360 1.000959050434747e+00 -6.109636352317988e+00 -5.969448327709875e+00 3.152836216235806e+00 4.957817547562286e+00 9.123488371583759e+03 + 197380 9.181909692959097e-01 -5.957218413043210e+00 -5.974844745099697e+00 3.886926324612274e+00 4.785713198277863e+00 9.140015350136366e+03 + 197400 1.013551262009398e+00 -6.069090447568509e+00 -5.969577980785264e+00 3.325859474138235e+00 4.897275457912093e+00 9.123903635765693e+03 + 197420 9.665649579516111e-01 -5.973397562741050e+00 -6.009234123900441e+00 3.825272487953096e+00 4.619493408085955e+00 9.245390633875952e+03 + 197440 9.616431774203565e-01 -5.947113579012772e+00 -5.975488376721257e+00 3.988659396710443e+00 4.825726917282568e+00 9.141934569131077e+03 + 197460 1.007990109517695e+00 -5.998586268605723e+00 -5.987620754028715e+00 3.668982175962272e+00 4.731947857571353e+00 9.179065280914945e+03 + 197480 9.938987022393959e-01 -5.963728969179312e+00 -5.984372193422512e+00 3.915857761961960e+00 4.797321173828871e+00 9.169121130510450e+03 + 197500 9.952069392280736e-01 -5.954430211427869e+00 -5.994279088491001e+00 3.946957165347160e+00 4.718138746656861e+00 9.199491723787800e+03 + 197520 1.025447261308761e+00 -5.989867834344991e+00 -6.049223240490740e+00 3.684163329045925e+00 4.343335401737615e+00 9.368770378888914e+03 + 197540 1.027316325832084e+00 -5.987938049405289e+00 -6.058175237343848e+00 3.728658440719781e+00 4.325345638406865e+00 9.396492475419753e+03 + 197560 1.045769849547193e+00 -6.016628055253443e+00 -6.009281311388126e+00 3.604949197449734e+00 4.647135337629328e+00 9.245565493440867e+03 + 197580 1.024641324665733e+00 -5.989857020866583e+00 -6.031799823317945e+00 3.719888006544131e+00 4.479045944240707e+00 9.314894048358636e+03 + 197600 9.948405832165920e-01 -5.951510362109664e+00 -5.983714879364257e+00 4.008625524539507e+00 4.823702202830694e+00 9.167116640824519e+03 + 197620 1.043726248494387e+00 -6.029377088965027e+00 -6.009141941235067e+00 3.534119241531021e+00 4.650312591175439e+00 9.245127395663467e+03 + 197640 1.059417637946556e+00 -6.062234915669706e+00 -6.037257552720386e+00 3.322290079912379e+00 4.465713963201797e+00 9.331790239706390e+03 + 197660 1.000538947446706e+00 -5.988161779770518e+00 -6.014546815993135e+00 3.780166266949874e+00 4.628659305888449e+00 9.261765968774540e+03 + 197680 9.505265149528022e-01 -5.930454508792954e+00 -6.047518601362722e+00 4.091196182037317e+00 4.418996046891930e+00 9.363474167439092e+03 + 197700 9.136420130454131e-01 -5.893941253697677e+00 -6.076443531832822e+00 4.212581030291268e+00 4.164624707103003e+00 9.453203614226817e+03 + 197720 9.716452206084153e-01 -6.001406764287977e+00 -6.011959986280830e+00 3.704474574078925e+00 4.643876340290136e+00 9.253811256246727e+03 + 197740 9.537756770372696e-01 -6.000305991416917e+00 -5.982823644112180e+00 3.743477037882249e+00 4.843863381490547e+00 9.164386603497553e+03 + 197760 9.672931133405581e-01 -6.049787007711215e+00 -5.943046923041340e+00 3.463941548993556e+00 5.076859633142698e+00 9.043017810722262e+03 + 197780 9.504061808160099e-01 -6.055533068388716e+00 -5.953924918764353e+00 3.415189109732583e+00 4.998638828686008e+00 9.076135766432890e+03 + 197800 9.350545847192464e-01 -6.066147910984273e+00 -6.022650869675914e+00 3.324287857839802e+00 4.574054600177790e+00 9.286708597365907e+03 + 197820 9.064920753727723e-01 -6.057608790851518e+00 -5.992625730262431e+00 3.364237131816541e+00 4.737379921815201e+00 9.194438381228259e+03 + 197840 9.562194732190428e-01 -6.160755711073429e+00 -5.992896580723779e+00 2.850849871290338e+00 4.814722973874501e+00 9.195268774079248e+03 + 197860 9.619619601774402e-01 -6.196128941061715e+00 -5.961194702955090e+00 2.664129871842813e+00 5.013158623006900e+00 9.098324974539973e+03 + 197880 8.747175519464750e-01 -6.087925850515919e+00 -5.955731405007326e+00 3.247647565235023e+00 5.006728528369695e+00 9.081644008419016e+03 + 197900 8.321548273458380e-01 -6.033995138826964e+00 -5.970506748500067e+00 3.487542083424376e+00 4.852102245478072e+00 9.126741618580003e+03 + 197920 9.421788162219494e-01 -6.194522337021407e+00 -5.950983428183675e+00 2.688808259573325e+00 5.087246361643926e+00 9.067190741583783e+03 + 197940 8.489872485602420e-01 -6.039832441017881e+00 -5.982096814521033e+00 3.462743177183030e+00 4.794270079087252e+00 9.162178741936470e+03 + 197960 8.975913981917948e-01 -6.078772082083197e+00 -5.990837072444972e+00 3.266814006259232e+00 4.771750439500682e+00 9.188945307323582e+03 + 197980 9.596673566466472e-01 -6.114853329752729e+00 -6.000387258635163e+00 3.053105729529817e+00 4.710387623454138e+00 9.218251550122932e+03 + 198000 9.628984841871359e-01 -6.060647187915722e+00 -5.992346759922613e+00 3.375175481157961e+00 4.767367108151464e+00 9.193597551092174e+03 + 198020 1.063591312428472e+00 -6.165053985873827e+00 -5.956633223368648e+00 2.842111542876408e+00 5.038895814189910e+00 9.084404677348039e+03 + 198040 9.742946147218073e-01 -6.002920189415740e+00 -5.979075146049471e+00 3.701343329704074e+00 4.838265258721728e+00 9.152914723735114e+03 + 198060 9.452556951838758e-01 -5.939057668446917e+00 -5.947859659620867e+00 4.087651155160527e+00 5.037108759735974e+00 9.057655138683424e+03 + 198080 9.914354251396262e-01 -5.990274338935600e+00 -5.944957353616624e+00 3.710150568762728e+00 4.970367711245100e+00 9.048804454086483e+03 + 198100 1.007891810846757e+00 -5.997347872770734e+00 -5.957401625806985e+00 3.718511323509456e+00 4.947888855237045e+00 9.086724847525280e+03 + 198120 1.008519921498139e+00 -5.980795036971089e+00 -6.031200768488663e+00 3.785618653620818e+00 4.496181142985165e+00 9.313060908025178e+03 + 198140 9.944802289907780e-01 -5.946512166478981e+00 -6.017712871472882e+00 3.941535363791742e+00 4.532689897443277e+00 9.271509865359794e+03 + 198160 1.022048680283345e+00 -5.976725881186028e+00 -6.040523217264704e+00 3.803852970221724e+00 4.437518793852112e+00 9.341858431105984e+03 + 198180 1.036483595567536e+00 -5.992347394508426e+00 -6.022640183692157e+00 3.737179221867581e+00 4.563233338580622e+00 9.286675140810505e+03 + 198200 9.939294650977639e-01 -5.925743091689836e+00 -6.061828054030014e+00 4.099657585813675e+00 4.318236672976504e+00 9.407819078104629e+03 + 198220 1.091431651609032e+00 -6.070752880516344e+00 -5.994901750431593e+00 3.338653979521939e+00 4.774202906393027e+00 9.201404798889002e+03 + 198240 1.039312334683389e+00 -5.997317976924388e+00 -6.012213407178908e+00 3.671092920689600e+00 4.585561055107765e+00 9.254574954326979e+03 + 198260 9.946654879860215e-01 -5.937556788342109e+00 -6.017969073194935e+00 4.048190805331084e+00 4.586451021945291e+00 9.272309153497896e+03 + 198280 1.047995695570773e+00 -6.027713034648081e+00 -5.980230758999721e+00 3.549674652511009e+00 4.822325227142307e+00 9.156452465927299e+03 + 198300 1.052699430025746e+00 -6.048210784471575e+00 -6.002955659074358e+00 3.438769528001926e+00 4.698631461240765e+00 9.226138722723614e+03 + 198320 9.688758296127389e-01 -5.943687689467716e+00 -6.035649344141804e+00 3.955034344800880e+00 4.426976292642203e+00 9.326809866036298e+03 + 198340 1.022541098185601e+00 -6.045296620529220e+00 -5.997659455026600e+00 3.426051619224081e+00 4.699591595367659e+00 9.209866805734659e+03 + 198360 1.013587727822711e+00 -6.058047565674674e+00 -6.000653992623605e+00 3.416232029702295e+00 4.745794807788259e+00 9.219044880343310e+03 + 198380 8.776914810592665e-01 -5.882968025979028e+00 -5.989177805756103e+00 4.344733032506587e+00 4.734860041116318e+00 9.183845579291268e+03 + 198400 9.399338613663344e-01 -5.997770260904317e+00 -5.992222023774770e+00 3.751767757420519e+00 4.783626593605300e+00 9.193130451538545e+03 + 198420 9.510216201676326e-01 -6.033516721460382e+00 -5.977919904724008e+00 3.492706126195917e+00 4.811951651475763e+00 9.149355214785730e+03 + 198440 9.575596482066964e-01 -6.058404249342193e+00 -5.983210802085194e+00 3.364234028941637e+00 4.796006439239680e+00 9.165567632623439e+03 + 198460 9.469661833664313e-01 -6.054741440885420e+00 -5.976860033841709e+00 3.360735382725997e+00 4.807942474079773e+00 9.146148795525183e+03 + 198480 9.205644693643100e-01 -6.022211942311505e+00 -5.959006992353511e+00 3.615358766017073e+00 4.978291369610268e+00 9.091630336856837e+03 + 198500 9.602195321752535e-01 -6.081418407666621e+00 -5.965534480537926e+00 3.231907593933849e+00 4.897331036486582e+00 9.111539150733250e+03 + 198520 9.543685781069688e-01 -6.065733982061526e+00 -5.964457639495851e+00 3.353882744850391e+00 4.935427176325859e+00 9.108254309173606e+03 + 198540 9.801376563841013e-01 -6.086339648807977e+00 -5.955002958667776e+00 3.267190307167815e+00 5.021345906239965e+00 9.079426948620256e+03 + 198560 1.001353231299162e+00 -6.086001600918469e+00 -5.960014484700064e+00 3.255404758568124e+00 4.978842276337428e+00 9.094705499276521e+03 + 198580 1.013793436303187e+00 -6.058868512751597e+00 -5.972271750157815e+00 3.360089578870077e+00 4.857341590489274e+00 9.132112982330653e+03 + 198600 9.382127627346599e-01 -5.893120743656720e+00 -6.014385922564192e+00 4.274078131770974e+00 4.577754708758484e+00 9.261233267652397e+03 + 198620 9.791896129990146e-01 -5.903203817361431e+00 -6.012041428944842e+00 4.230321405827615e+00 4.605358997549710e+00 9.254049742054543e+03 + 198640 1.040101711211262e+00 -5.953584458515397e+00 -6.030114421632332e+00 3.890609529334399e+00 4.451162638143447e+00 9.309735123585824e+03 + 198660 1.073502489133408e+00 -5.979645541362601e+00 -6.028466916866151e+00 3.787901410208299e+00 4.507561516983468e+00 9.304653633407443e+03 + 198680 1.001488517381944e+00 -5.862965709341985e+00 -6.054229813650651e+00 4.433528991787151e+00 4.335260906822306e+00 9.384267693906222e+03 + 198700 9.653453709591486e-01 -5.806466718580577e+00 -6.027741523755282e+00 4.798667655332317e+00 4.528073481853730e+00 9.302372722921566e+03 + 198720 1.089862916088797e+00 -5.991362551258456e+00 -6.016559573828363e+00 3.719237708213714e+00 4.574552505390663e+00 9.267947241663262e+03 + 198740 1.074647670704674e+00 -5.976759224544218e+00 -5.984856686447376e+00 3.926595778449924e+00 4.880098899123810e+00 9.170601153538933e+03 + 198760 1.024595553801952e+00 -5.914481543029816e+00 -6.016363424759256e+00 4.220843950815384e+00 4.635822419754695e+00 9.267351675361424e+03 + 198780 1.040301868687808e+00 -5.954516164642564e+00 -6.041887285459937e+00 3.985707012350834e+00 4.484008515980230e+00 9.346091115018129e+03 + 198800 9.268248803264314e-01 -5.808683593327189e+00 -6.112668968366199e+00 4.702460105542665e+00 3.956929040483913e+00 9.566173314461343e+03 + 198820 1.043616179987061e+00 -6.010909924152204e+00 -6.056828965085332e+00 3.624734943758010e+00 4.361060704771374e+00 9.392323771006913e+03 + 198840 9.974703210282363e-01 -5.974531900468828e+00 -6.032309698045626e+00 3.784751083812432e+00 4.452982029041180e+00 9.316500753800274e+03 + 198860 9.617204533033882e-01 -5.950176758615055e+00 -6.024771060544092e+00 3.966742215316064e+00 4.538410190208619e+00 9.293239746157942e+03 + 198880 1.034272446172191e+00 -6.083498506444230e+00 -6.028682210535152e+00 3.221812872191052e+00 4.536576526095356e+00 9.305319608293303e+03 + 198900 9.567657983667074e-01 -5.992234741776585e+00 -6.023004768288084e+00 3.752637231384829e+00 4.575950977509589e+00 9.287810897233385e+03 + 198920 9.909439114340390e-01 -6.061833063974454e+00 -5.998561966772941e+00 3.413380083067317e+00 4.776692514369053e+00 9.212640604686629e+03 + 198940 9.318876708270594e-01 -5.986333209714253e+00 -5.995538533531874e+00 3.816403987877523e+00 4.763545593997485e+00 9.203335943978669e+03 + 198960 9.493821758106603e-01 -6.017935314200439e+00 -5.953408611112618e+00 3.636239332759810e+00 5.006761647365112e+00 9.074566218469419e+03 + 198980 1.018262657232479e+00 -6.118467218452872e+00 -5.983468966554721e+00 3.029045754606628e+00 4.804226607917773e+00 9.166374247732587e+03 + 199000 9.875875896218168e-01 -6.070905504619651e+00 -5.991426913529296e+00 3.323071242153216e+00 4.779449611466251e+00 9.190739817208707e+03 + 199020 9.721058819122163e-01 -6.042830617463405e+00 -5.986960266738362e+00 3.481263408070497e+00 4.802079607842529e+00 9.177072401986643e+03 + 199040 9.432280529116500e-01 -5.990196636472671e+00 -6.002557270580770e+00 3.751946998049983e+00 4.680970324199335e+00 9.224902679578991e+03 + 199060 9.807031422093141e-01 -6.035444028219263e+00 -5.985968417328162e+00 3.498720865357976e+00 4.782817479420718e+00 9.174031659324395e+03 + 199080 1.013545234686219e+00 -6.071576513127721e+00 -5.984687614569946e+00 3.396238919531455e+00 4.895168421063799e+00 9.170095166078969e+03 + 199100 9.995317748829399e-01 -6.038863456165707e+00 -5.994796339527912e+00 3.496224762611806e+00 4.749264965710287e+00 9.201073811324275e+03 + 199120 9.569438605606729e-01 -5.964863724097417e+00 -6.024148632539451e+00 3.879141459637709e+00 4.538718341053616e+00 9.291335059569286e+03 + 199140 1.043465808305374e+00 -6.084151197292503e+00 -5.970877625541311e+00 3.261252026653834e+00 4.911686404677758e+00 9.127871927196889e+03 + 199160 9.888466304859235e-01 -5.994698494594202e+00 -5.991821042735012e+00 3.779486533287518e+00 4.796009307147220e+00 9.191946821979931e+03 + 199180 1.038351433769356e+00 -6.060032889345124e+00 -5.972903461152788e+00 3.408641365130578e+00 4.908952025046413e+00 9.134075074344624e+03 + 199200 1.087042705658193e+00 -6.126547666689510e+00 -5.997310221469487e+00 3.061651520331414e+00 4.803752930214802e+00 9.208801849511990e+03 + 199220 9.357196934661954e-01 -5.899896573906688e+00 -6.041714389185898e+00 4.237988114199084e+00 4.423648272629880e+00 9.345548159151345e+03 + 199240 1.001999391504507e+00 -5.997688614709538e+00 -5.998886253556439e+00 3.744453246274875e+00 4.737576218681958e+00 9.213616955286139e+03 + 199260 9.741222560019579e-01 -5.954428673184900e+00 -6.009091823588172e+00 3.949633254469517e+00 4.635748985758749e+00 9.244958459576705e+03 + 199280 1.018995046919940e+00 -6.018645580825041e+00 -5.981151237033027e+00 3.665707003744082e+00 4.881005328028778e+00 9.159263627748211e+03 + 199300 9.523798101299401e-01 -5.918232667453390e+00 -5.998723135883461e+00 4.163542274049221e+00 4.701353548464017e+00 9.213109595715912e+03 + 199320 1.047474480588589e+00 -6.056307448133158e+00 -5.990589763484913e+00 3.443288105590085e+00 4.820649220619144e+00 9.188171568825132e+03 + 199340 1.052063333482815e+00 -6.061954723129742e+00 -5.995274675364363e+00 3.360298110510838e+00 4.743185263483689e+00 9.202556647255178e+03 + 199360 9.899399315649036e-01 -5.969841175554527e+00 -6.031105574437271e+00 3.837881644118959e+00 4.486091985099155e+00 9.312795952955328e+03 + 199380 1.045345255275729e+00 -6.054903517585581e+00 -6.000275517756035e+00 3.428601172163945e+00 4.742283600840854e+00 9.217917022324442e+03 + 199400 9.780104923920887e-01 -5.958423420917970e+00 -6.016396141193878e+00 3.865736483935700e+00 4.532848152861964e+00 9.267458321744127e+03 + 199420 9.694306975833765e-01 -5.949393899958658e+00 -6.034676514495618e+00 3.942958172837187e+00 4.453252202724016e+00 9.323803532354184e+03 + 199440 1.011138230619257e+00 -6.015121038088004e+00 -6.009321354178946e+00 3.625230601241597e+00 4.658533283745596e+00 9.245682356743368e+03 + 199460 9.823835158722997e-01 -5.976377539506453e+00 -6.001894201937834e+00 3.798620426431028e+00 4.652099802059292e+00 9.222862453835854e+03 + 199480 1.074562355574544e+00 -6.118486926125487e+00 -5.995296473648373e+00 3.016297520865714e+00 4.723676162650218e+00 9.202624643333613e+03 + 199500 9.926831596967829e-01 -6.005199868966562e+00 -6.000357663445108e+00 3.700903545492443e+00 4.728708238925513e+00 9.218133858751144e+03 + 199520 9.528151168241586e-01 -5.959418705000071e+00 -5.963065830859622e+00 3.901076693474031e+00 4.880134332397586e+00 9.104004014073711e+03 + 199540 9.557829809703990e-01 -5.977637161975556e+00 -5.991671870257975e+00 3.799602485859072e+00 4.719013019037336e+00 9.191491214806965e+03 + 199560 9.838846370790553e-01 -6.036655642150919e+00 -6.003509719541851e+00 3.458439215320582e+00 4.648768232256796e+00 9.227830722879620e+03 + 199580 9.843932648042784e-01 -6.058662065699025e+00 -6.020554801397395e+00 3.374629497019970e+00 4.593447305720019e+00 9.280268165956993e+03 + 199600 1.065184573658751e+00 -6.206851690895959e+00 -5.968086425263754e+00 2.610633649932813e+00 4.981660753998377e+00 9.119370099006041e+03 + 199620 9.388817486791809e-01 -6.048259703771625e+00 -6.004812660448888e+00 3.444013103007198e+00 4.693492749174577e+00 9.231822964740768e+03 + 199640 9.473654082682319e-01 -6.087966531003856e+00 -5.979134478052076e+00 3.195402416940680e+00 4.820332906695564e+00 9.153129876030411e+03 + 199660 9.210577256459164e-01 -6.068236326393697e+00 -5.967782053655758e+00 3.335152873111248e+00 4.911976852420958e+00 9.118414230427796e+03 + 199680 9.497229600007705e-01 -6.121910609110069e+00 -5.971990252219380e+00 3.092920192420396e+00 4.953786081786985e+00 9.131271875339731e+03 + 199700 9.516524276659803e-01 -6.127906301058084e+00 -6.000100462469979e+00 2.979286429490728e+00 4.713167332553232e+00 9.217372102518229e+03 + 199720 9.443608833647245e-01 -6.114016019953694e+00 -6.000580190700743e+00 3.091035310234930e+00 4.742401395943221e+00 9.218828712551509e+03 + 199740 8.681959517945045e-01 -5.990991490549361e+00 -5.977120027277696e+00 3.797772807366312e+00 4.877424896074221e+00 9.146908120580996e+03 + 199760 9.625155118642070e-01 -6.110458936060956e+00 -5.978494259332300e+00 3.124357089378134e+00 4.882118684621803e+00 9.151154400341169e+03 + 199780 9.848261985222230e-01 -6.112095588872020e+00 -5.980370944143631e+00 3.096964062230267e+00 4.853347356583562e+00 9.156887038258950e+03 + 199800 9.658504385268453e-01 -6.044741959287682e+00 -5.983150214559801e+00 3.514935168261291e+00 4.868604497780478e+00 9.165405595380049e+03 + 199820 9.830751481829464e-01 -6.030277382849008e+00 -6.003547531492968e+00 3.595906231692601e+00 4.749393174610113e+00 9.227958060577354e+03 + 199840 1.019195363692946e+00 -6.047159382563301e+00 -6.018232273751166e+00 3.484691277977978e+00 4.650795213232877e+00 9.273127872675630e+03 + 199860 1.009814556481902e+00 -6.004451936660288e+00 -6.029796701673096e+00 3.664786858860082e+00 4.519253296066829e+00 9.308739911114350e+03 + 199880 1.004112823631311e+00 -5.975808665464897e+00 -5.994508893678078e+00 3.866906624242725e+00 4.759527019991680e+00 9.200211087352904e+03 + 199900 1.017006687798344e+00 -5.979166475348716e+00 -6.024287631510320e+00 3.884200204963863e+00 4.625107543807584e+00 9.291749564292193e+03 + 199920 1.029645300704506e+00 -5.988407957108219e+00 -6.015604824463416e+00 3.792038397567344e+00 4.635869776512177e+00 9.265017077501841e+03 + 199940 1.016090771897235e+00 -5.963111834339648e+00 -5.964819076856839e+00 3.924983490607407e+00 4.915180239878768e+00 9.109359800541135e+03 + 199960 1.089150523107765e+00 -6.068080542656683e+00 -5.972503306663688e+00 3.396420435709163e+00 4.945239715310409e+00 9.132824214410233e+03 + 199980 9.700833243472550e-01 -5.891585904890412e+00 -6.005450837672986e+00 4.354796401538968e+00 4.700966336960025e+00 9.233789429481529e+03 + 200000 1.036656071639917e+00 -5.992403506639822e+00 -5.993257960485003e+00 3.764547892583718e+00 4.759641486378383e+00 9.196316925648398e+03 +Loop time of 380.886 on 1 procs for 200000 steps with 256 atoms + +Performance: 226839.823 tau/day, 525.092 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 308.99 | 308.99 | 308.99 | 0.0 | 81.12 +Neigh | 22.559 | 22.559 | 22.559 | 0.0 | 5.92 +Comm | 5.1164 | 5.1164 | 5.1164 | 0.0 | 1.34 +Output | 41.166 | 41.166 | 41.166 | 0.0 | 10.81 +Modify | 2.379 | 2.379 | 2.379 | 0.0 | 0.62 +Other | | 0.6754 | | | 0.18 + +Nlocal: 256 ave 256 max 256 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2125 ave 2125 max 2125 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19131 ave 19131 max 19131 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19131 +Ave neighs/atom = 74.7305 +Neighbor list builds = 19989 +Dangerous builds = 19886 +Total wall time: 0:06:54 diff --git a/examples/USER/hma/log.6Nov18.hma.g++.4 b/examples/USER/hma/log.6Nov18.hma.g++.4 new file mode 100644 index 0000000000..5b25fa5cf5 --- /dev/null +++ b/examples/USER/hma/log.6Nov18.hma.g++.4 @@ -0,0 +1,10159 @@ +LAMMPS (31 Aug 2018) +# Harmonically mapped average example + +units lj +dimension 3 +boundary p p p +atom_style atomic +atom_modify map array +# ---------- Create Atoms ---------------------------- +lattice fcc 1.0 +Lattice spacing in x,y,z = 1.5874 1.5874 1.5874 +region box block 0 4 0 4 0 4 units lattice +create_box 1 box +Created orthogonal box = (0 0 0) to (6.3496 6.3496 6.3496) + 1 by 2 by 2 MPI processor grid +lattice fcc 1.0 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1 +Lattice spacing in x,y,z = 1.5874 1.5874 1.5874 +create_atoms 1 region box +Created 256 atoms + Time spent = 0.000636816 secs +# ---------- Define Interatomic Potential --------------------- +pair_style lj/smooth/linear 3 +pair_coeff * * 1.0 1.0 +mass 1 1.0 + +atom_modify sort 0 1 +velocity all create 0.1 45678 dist gaussian + +compute u all pe + +compute p all pressure NULL pair + +compute hma all HMA settemp u p 9.579586686264458 cv + +timestep 0.005 + +fix settemp all nvt temp 1.0 1.0 0.5 +thermo_style custom elapsed temp c_u c_hma[1] c_p c_hma[2] c_hma[3] +thermo_modify format float '%22.15e' +thermo 500 +run 20000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 3.3 + ghost atom cutoff = 3.3 + binsize = 1.65, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair lj/smooth/linear, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) compute HMA, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.389 | 3.389 | 3.389 Mbytes +Elapsed Temp c_u c_hma[1] c_p c_hma[2] c_hma[3] + 0 9.999999999999999e-02 -7.321210550030622e+00 -5.827069925030622e+00 -3.541123363606526e+00 6.038463322657932e+00 8.693908581891272e+03 + 500 2.319904532047116e-01 -7.021814067268549e+00 -5.841520703728273e+00 -1.859554996730893e+00 5.917872146525079e+00 8.737041016754241e+03 + 1000 1.104889191155021e+00 -6.005326544560477e+00 -6.005300065747159e+00 3.645694884120414e+00 4.645846929564070e+00 9.233336265503700e+03 + 1500 9.475049376144361e-01 -6.133389836457317e+00 -5.983811791861923e+00 2.980778280706599e+00 4.839678559900945e+00 9.167450093661304e+03 + 2000 9.009354935012601e-01 -6.066361566415782e+00 -5.975649385751911e+00 3.331919983683387e+00 4.852803362719920e+00 9.142450653666589e+03 + 2500 1.002748731362028e+00 -6.037709705055500e+00 -5.998660236350431e+00 3.517524667487255e+00 4.741752759677512e+00 9.212938381713899e+03 + 3000 1.123087652951704e+00 -6.025819107168451e+00 -5.970493239986080e+00 3.598743028856235e+00 4.916432719867683e+00 9.126676463986189e+03 + 3500 1.115128009750835e+00 -6.000529470165528e+00 -5.980015761414576e+00 3.665878335379198e+00 4.783671225513338e+00 9.155782280210480e+03 + 4000 9.904879689205039e-01 -5.990830917252424e+00 -6.007049321999301e+00 3.700324729502504e+00 4.607196139655914e+00 9.238716127101230e+03 + 4500 9.696423790018132e-01 -6.095364960235830e+00 -5.949103254372231e+00 3.188999551316120e+00 5.028856900310743e+00 9.061471896280929e+03 + 5000 1.005681297563624e+00 -6.094938179693363e+00 -6.014945551672039e+00 3.140253069724724e+00 4.599583118642348e+00 9.263005212755274e+03 + 5500 1.067821663160412e+00 -6.055271652935048e+00 -6.039553220002009e+00 3.350955211546091e+00 4.441212885867230e+00 9.338870121131475e+03 + 6000 1.019349023817732e+00 -5.912735006243721e+00 -6.010199997355059e+00 4.160148455119939e+00 4.600489393500003e+00 9.248369562541713e+03 + 6500 1.033977564076081e+00 -5.962511500402099e+00 -5.953097811556573e+00 3.913955620678704e+00 4.968010478793357e+00 9.073605525336026e+03 + 7000 1.035036973336388e+00 -6.011513860495915e+00 -5.988661036457318e+00 3.570585392636366e+00 4.701809844729083e+00 9.182284012600518e+03 + 7500 9.759766417830451e-01 -6.011014245515786e+00 -5.997095489328838e+00 3.659421763886547e+00 4.739345415832561e+00 9.208142257833988e+03 + 8000 9.701274032979823e-01 -6.070706464001116e+00 -5.987899394187518e+00 3.293522632549048e+00 4.769013641771370e+00 9.179944973040452e+03 + 8500 1.002959574283594e+00 -6.000331246180245e+00 -6.022939013616290e+00 3.707537441996905e+00 4.577720142838428e+00 9.287619492673581e+03 + 9000 9.541471061067928e-01 -5.891837375294362e+00 -6.000893913894259e+00 4.214373867383508e+00 4.588154346298096e+00 9.219760426705488e+03 + 9500 1.005476043930556e+00 -6.054397260431607e+00 -5.963822185829731e+00 3.425817325831102e+00 4.945913420642570e+00 9.106317976320150e+03 + 10000 9.834510517532772e-01 -5.979858570968017e+00 -6.007829122692488e+00 3.832487507111145e+00 4.671876270680338e+00 9.241093007564954e+03 + 10500 1.053423257346257e+00 -5.984863687481322e+00 -5.990560458118040e+00 3.742155897948207e+00 4.709444159379769e+00 9.188099433599265e+03 + 11000 1.027766819783240e+00 -5.964303012082833e+00 -5.987340607292543e+00 3.942276092974025e+00 4.809990656223532e+00 9.178213465454402e+03 + 11500 1.030919611642090e+00 -5.996031790431708e+00 -6.010813071174461e+00 3.713452645350145e+00 4.628576243929453e+00 9.250277317464830e+03 + 12000 1.015499044847646e+00 -5.983611533298556e+00 -6.000577066405612e+00 3.747611330243804e+00 4.650192613735324e+00 9.218807640515772e+03 + 12500 9.260784226173562e-01 -5.995616138164384e+00 -6.024603077235440e+00 3.708688522431407e+00 4.542241032571079e+00 9.292727745364478e+03 + 13000 9.581084725650251e-01 -6.095817502268568e+00 -5.989303506622369e+00 3.230806633332333e+00 4.842426479320365e+00 9.184229513868806e+03 + 13500 9.246476920572243e-01 -5.986197290479123e+00 -5.980486024616446e+00 3.778398028002328e+00 4.811193000401358e+00 9.157208321147285e+03 + 14000 9.018834156590910e-01 -5.891981523518482e+00 -5.961281643266227e+00 4.310640039569481e+00 4.912708027819059e+00 9.098571305044385e+03 + 14500 9.458192412990540e-01 -5.924212527125402e+00 -5.974831040418032e+00 4.099524287456710e+00 4.808864950940809e+00 9.139925423823777e+03 + 15000 1.079258475602827e+00 -5.842389291052847e+00 -5.997594135488276e+00 4.542013464261510e+00 4.650803229641226e+00 9.209631946001080e+03 + 15500 1.003773905363782e+00 -5.990536501227417e+00 -5.978949148782005e+00 3.711448614654375e+00 4.777984985532921e+00 9.152543385133793e+03 + 16000 9.589971646383746e-01 -6.022404990638810e+00 -6.013121691584658e+00 3.591520611305744e+00 4.644826751060574e+00 9.257382394405931e+03 + 16500 1.027873542611377e+00 -6.062068879792612e+00 -5.995808570227100e+00 3.344041739290934e+00 4.724518690565871e+00 9.204185610519249e+03 + 17000 9.721883229756479e-01 -6.076377536863534e+00 -5.995495525201934e+00 3.317173564950596e+00 4.781610592362355e+00 9.203227919920830e+03 + 17500 9.870692120707141e-01 -5.965983792560558e+00 -6.036111701999152e+00 3.838886592024325e+00 4.436201283769008e+00 9.328234074356338e+03 + 18000 1.004272604822617e+00 -5.960763698221652e+00 -5.980795290630440e+00 3.950710186832507e+00 4.835685683342340e+00 9.158184493996429e+03 + 18500 9.381056200232580e-01 -5.953631223909241e+00 -6.011057530919335e+00 3.898044457090124e+00 4.568293715545873e+00 9.251034889270257e+03 + 19000 9.369931263537112e-01 -6.012014674095721e+00 -5.987682214265706e+00 3.582518713971043e+00 4.722239463750979e+00 9.179299635700279e+03 + 19500 9.837184187823201e-01 -5.957066902345472e+00 -6.012125787465584e+00 3.937810342708973e+00 4.621653704014352e+00 9.254320960371275e+03 + 20000 1.079101865720838e+00 -6.089503178102808e+00 -5.960131548856806e+00 3.215696838220799e+00 4.958568753546265e+00 9.095068306811330e+03 +Loop time of 4.841 on 4 procs for 20000 steps with 256 atoms + +Performance: 1784755.120 tau/day, 4131.378 timesteps/s +98.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.3889 | 2.6923 | 3.0228 | 14.4 | 55.62 +Neigh | 0.52899 | 0.5489 | 0.57081 | 2.3 | 11.34 +Comm | 1.0419 | 1.3856 | 1.697 | 20.8 | 28.62 +Output | 0.022234 | 0.022308 | 0.022518 | 0.1 | 0.46 +Modify | 0.13626 | 0.14418 | 0.15704 | 2.2 | 2.98 +Other | | 0.04763 | | | 0.98 + +Nlocal: 64 ave 68 max 60 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 1344.25 ave 1352 max 1339 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +Neighs: 4758 ave 5243 max 3935 min +Histogram: 1 0 0 0 0 0 1 0 1 1 + +Total # of neighbors = 19032 +Ave neighs/atom = 74.3438 +Neighbor list builds = 1938 +Dangerous builds = 1898 +thermo 20 +run 200000 +Per MPI rank memory allocation (min/avg/max) = 3.771 | 3.771 | 3.771 Mbytes +Elapsed Temp c_u c_hma[1] c_p c_hma[2] c_hma[3] + 0 1.079101865720838e+00 -6.089503178102806e+00 -5.960131548856804e+00 3.215696838220800e+00 4.958568753546269e+00 9.095068306811325e+03 + 20 1.045882952900159e+00 -6.018338283555533e+00 -5.972366139305224e+00 3.616958874311578e+00 4.880938040763178e+00 9.132383004784513e+03 + 40 1.023416907678504e+00 -5.967053445329114e+00 -5.982864893458127e+00 3.888481015323551e+00 4.797689233353067e+00 9.164513217016609e+03 + 60 9.899033883056040e-01 -5.902992198654239e+00 -5.995283741619580e+00 4.218205169077458e+00 4.688252847300357e+00 9.202566117085955e+03 + 80 1.077050480328796e+00 -6.019809533578615e+00 -6.001598077962455e+00 3.565599069062933e+00 4.670172065424577e+00 9.221945457239293e+03 + 100 1.080384560249323e+00 -6.016438905244236e+00 -6.024415917706303e+00 3.607676959151043e+00 4.561871719155161e+00 9.292169644904860e+03 + 120 9.997046598216068e-01 -5.896119196502427e+00 -6.046186059637260e+00 4.218098095544917e+00 4.356390944652691e+00 9.359373348945550e+03 + 140 1.078735984732703e+00 -6.019266040588759e+00 -6.034332020308546e+00 3.590176101522915e+00 4.503664914519074e+00 9.322748132452190e+03 + 160 9.760415116951116e-01 -5.879721306575083e+00 -6.054494533913690e+00 4.331789309870658e+00 4.328214392422853e+00 9.385084700332845e+03 + 180 1.031538652705958e+00 -5.980163604486879e+00 -6.034579522560372e+00 3.780608517952989e+00 4.468143895538888e+00 9.323487886411000e+03 + 200 1.056471731975392e+00 -6.039286251806756e+00 -5.961205747060128e+00 3.529192708205122e+00 4.977543049379323e+00 9.098340498472173e+03 + 220 1.018770273422817e+00 -6.011576467489766e+00 -5.956325424998603e+00 3.639782521372246e+00 4.957042557427693e+00 9.083454391480973e+03 + 240 1.042819636360988e+00 -6.078833887266810e+00 -5.924026301164385e+00 3.316341825846475e+00 5.205270941643121e+00 8.985297958019297e+03 + 260 9.827038416572660e-01 -6.025801008390236e+00 -5.973596229242497e+00 3.552269333175087e+00 4.852037253704874e+00 9.136147448449266e+03 + 280 9.330683939380402e-01 -5.987241712695330e+00 -5.981808536495530e+00 3.776217634541064e+00 4.807415773061615e+00 9.161283472448169e+03 + 300 9.367212503823726e-01 -6.023294771844806e+00 -5.980308288453488e+00 3.522452586519692e+00 4.769287626289448e+00 9.156676177175032e+03 + 320 8.866502119132115e-01 -5.971552725763028e+00 -5.999883540078049e+00 3.832954064130393e+00 4.670274144154201e+00 9.216690919308339e+03 + 340 9.812173419090766e-01 -6.127345466738726e+00 -5.971758235372432e+00 3.042675332936083e+00 4.936081292487585e+00 9.130565671999488e+03 + 360 9.701678838757176e-01 -6.123214162223682e+00 -5.956471391747523e+00 3.024346518793122e+00 4.981809310227565e+00 9.083925283172193e+03 + 380 9.530521608125605e-01 -6.101948718277182e+00 -5.969346784103942e+00 3.160159309894476e+00 4.921580136000209e+00 9.123183696589322e+03 + 400 9.257718531546387e-01 -6.058094727447953e+00 -6.005990817706857e+00 3.375612369879977e+00 4.674801082667322e+00 9.235454101684938e+03 + 420 9.378475032879857e-01 -6.063808619486702e+00 -6.039127865978216e+00 3.321015355026043e+00 4.462736061006034e+00 9.337565742684808e+03 + 440 9.868229541930312e-01 -6.115563509613311e+00 -6.006885830025272e+00 3.048783352987000e+00 4.672827406998083e+00 9.238210334985924e+03 + 460 9.566601962627783e-01 -6.040790766879258e+00 -5.996276961059726e+00 3.432349289595275e+00 4.687954451100221e+00 9.205623814062721e+03 + 480 9.859778191204607e-01 -6.032992456497698e+00 -6.004207130185696e+00 3.562741803657827e+00 4.728031601856195e+00 9.229978972138921e+03 + 500 1.051590614980880e+00 -6.055418879049184e+00 -5.975387332570744e+00 3.412139370691222e+00 4.871692895412218e+00 9.141625620994606e+03 + 520 1.016928028177617e+00 -5.934484344864495e+00 -5.988482020119943e+00 4.036280150584107e+00 4.726217143154087e+00 9.181703401118843e+03 + 540 1.021626621375652e+00 -5.896726491861172e+00 -6.042286195219953e+00 4.211849774755440e+00 4.376023432778024e+00 9.347266091640566e+03 + 560 1.057963649785121e+00 -5.930514935075140e+00 -5.994193066656623e+00 4.133424884461160e+00 4.767775198761271e+00 9.199220503239567e+03 + 580 1.126457484615616e+00 -6.025302767770825e+00 -6.002248753792481e+00 3.577314302596564e+00 4.709694018457352e+00 9.223950233643571e+03 + 600 1.053775583014867e+00 -5.920880666414229e+00 -6.025321044401184e+00 4.089562432812162e+00 4.489849620314809e+00 9.294932166324394e+03 + 620 1.068125791364220e+00 -5.952048336294525e+00 -5.991548889906705e+00 3.948582501628295e+00 4.721764210096242e+00 9.191125075855618e+03 + 640 1.001917999683921e+00 -5.868889196279280e+00 -6.078442481513278e+00 4.387667520056008e+00 4.184380127976309e+00 9.459397710993178e+03 + 660 1.013785745023234e+00 -5.908440588408116e+00 -6.021185701862593e+00 4.194475718233535e+00 4.547075829528006e+00 9.282200503824031e+03 + 680 1.006272102195670e+00 -5.922361783809079e+00 -6.015315424402591e+00 4.108572526673648e+00 4.574818337856310e+00 9.264102856651089e+03 + 700 1.050062861284214e+00 -6.012992437584885e+00 -6.015529119993223e+00 3.635097335980956e+00 4.620531313041945e+00 9.264804219762771e+03 + 720 1.045358840625471e+00 -6.037807695505035e+00 -6.027135304464126e+00 3.474817177730830e+00 4.536099698634905e+00 9.300555520485419e+03 + 740 9.642925485448076e-01 -5.948158503381118e+00 -6.034972091799299e+00 4.003503145179767e+00 4.505006086123185e+00 9.324713510866124e+03 + 760 9.675102936861227e-01 -5.982924400760570e+00 -6.015096232174412e+00 3.870382414802911e+00 4.685646780249812e+00 9.263451837988561e+03 + 780 9.790720662584512e-01 -6.026047065185467e+00 -5.979529232557102e+00 3.625058207440162e+00 4.892170801003571e+00 9.154322435131195e+03 + 800 1.004123930050531e+00 -6.082912408400262e+00 -5.968506093674343e+00 3.259659032213952e+00 4.916597795690173e+00 9.120630367341679e+03 + 820 1.004543182217278e+00 -6.098101606885474e+00 -5.980350258056370e+00 3.164901910898681e+00 4.841048377837739e+00 9.156849592436240e+03 + 840 9.630748088451148e-01 -6.048903166205694e+00 -5.994027918620555e+00 3.392810786130890e+00 4.707912949681882e+00 9.198714740374367e+03 + 860 9.228861378211657e-01 -5.996861888124024e+00 -6.008496153064605e+00 3.703560501505661e+00 4.636754751820165e+00 9.243110577356250e+03 + 880 9.651481015705456e-01 -6.061582878325297e+00 -5.953924133351292e+00 3.391579294709795e+00 5.009772468487476e+00 9.076133332861597e+03 + 900 9.348983371800531e-01 -6.011608836096201e+00 -5.995661702368822e+00 3.600911181002898e+00 4.692482090676478e+00 9.203743757888953e+03 + 920 1.036896738232031e+00 -6.151779143268755e+00 -5.937278934425017e+00 2.942196267685299e+00 5.173889660666077e+00 9.025521017635112e+03 + 940 9.705242919454212e-01 -6.036396171757210e+00 -6.007701602226906e+00 3.498512079639252e+00 4.663280738352547e+00 9.240700537524001e+03 + 960 9.703590513777164e-01 -6.015671221414300e+00 -5.958550157140520e+00 3.653576696163561e+00 4.981574686679732e+00 9.090248498660674e+03 + 980 1.022109298884103e+00 -6.064126871372943e+00 -5.994058900431912e+00 3.333754888286173e+00 4.736096020413037e+00 9.198811725431875e+03 + 1000 9.685007477272927e-01 -5.947157585823188e+00 -6.028697640132853e+00 3.910210723383799e+00 4.441995113255079e+00 9.305381841761822e+03 + 1020 1.008136117042101e+00 -5.967693663042624e+00 -6.031031238423907e+00 3.855538252977954e+00 4.491844093680513e+00 9.312561366234242e+03 + 1040 1.107445497004232e+00 -6.079939803816606e+00 -5.987270852102483e+00 3.255889721065741e+00 4.788009182282165e+00 9.178015036361758e+03 + 1060 1.044758630971925e+00 -5.958437495305702e+00 -6.013937506863499e+00 3.914339676403526e+00 4.595650021439628e+00 9.259867433592528e+03 + 1080 1.035880587544461e+00 -5.922449944887129e+00 -6.033637939351922e+00 4.066129013791143e+00 4.427670343287764e+00 9.320588435674486e+03 + 1100 9.751140198525383e-01 -5.818558920459956e+00 -6.080906309495900e+00 4.694663995350776e+00 4.188224689379140e+00 9.467068759704607e+03 + 1120 1.067993684112638e+00 -5.951955232026927e+00 -6.021480919464405e+00 3.976881891871271e+00 4.577654635539909e+00 9.283099457617489e+03 + 1140 1.035716301260880e+00 -5.907061488350916e+00 -5.987039157900400e+00 4.180855135543586e+00 4.721610980486084e+00 9.177290886449660e+03 + 1160 1.019375948323584e+00 -5.886370518000196e+00 -6.028553863042942e+00 4.262813756746125e+00 4.446374986709141e+00 9.304925235198898e+03 + 1180 1.093380159162734e+00 -6.005503518747864e+00 -6.027072672089359e+00 3.641764885299509e+00 4.517911468996958e+00 9.300367982427439e+03 + 1200 1.042582047788811e+00 -5.946489662612521e+00 -6.037144910525036e+00 4.039402242433351e+00 4.518845780065416e+00 9.331413378313986e+03 + 1220 9.663542177685119e-01 -5.850641497244586e+00 -6.039704867708192e+00 4.486145434613865e+00 4.400514303949820e+00 9.339315441642380e+03 + 1240 1.029347247685795e+00 -5.959706239835747e+00 -5.999980184600757e+00 3.952447527563560e+00 4.721188304350065e+00 9.216989638017812e+03 + 1260 1.056078831132393e+00 -6.013384114236571e+00 -6.006253875724207e+00 3.560314479129267e+00 4.601257412068100e+00 9.236281130215775e+03 + 1280 9.804605261528435e-01 -5.913173019151906e+00 -6.048673912743030e+00 4.129404127893233e+00 4.351337028197486e+00 9.367090226916964e+03 + 1300 1.002428567847763e+00 -5.956218706909874e+00 -6.026214030433431e+00 3.948146858765891e+00 4.546222879352323e+00 9.297669545173119e+03 + 1320 9.770121717042179e-01 -5.928459695639935e+00 -6.054311638894687e+00 4.059717030184133e+00 4.337055696490075e+00 9.384514061962318e+03 + 1340 1.010334021233879e+00 -5.989226656323354e+00 -6.045065983070645e+00 3.736771279435648e+00 4.416133224144823e+00 9.355907696214039e+03 + 1360 1.015572014704490e+00 -6.009053674086513e+00 -6.012142286665330e+00 3.643636318592968e+00 4.625901027204147e+00 9.254363506332575e+03 + 1380 1.020423639644608e+00 -6.027930181386951e+00 -5.977965193222040e+00 3.543866434942286e+00 4.830773129042132e+00 9.149538312252938e+03 + 1400 9.683530022348545e-01 -5.959739001021481e+00 -6.037775362729338e+00 3.892719200438814e+00 4.444622335424349e+00 9.333373098016767e+03 + 1420 1.061363887238329e+00 -6.107202372992392e+00 -5.986695431269363e+00 3.125532375241542e+00 4.817501883004134e+00 9.176250195089011e+03 + 1440 9.629301181714207e-01 -5.970065775172462e+00 -6.007557664457972e+00 3.880295862869057e+00 4.665011632740542e+00 9.240258153641324e+03 + 1460 9.635359109549591e-01 -5.979073289500995e+00 -5.993303451814675e+00 3.866832622748392e+00 4.785120828632738e+00 9.196511815318074e+03 + 1480 9.567370930802896e-01 -5.977043341669617e+00 -6.001458456586717e+00 3.843778320819849e+00 4.703582952739037e+00 9.221532949075470e+03 + 1500 9.900361347227478e-01 -6.031792149531222e+00 -5.978707340260190e+00 3.506946225863090e+00 4.811767415545044e+00 9.151805317615643e+03 + 1520 9.938001600708007e-01 -6.039815351178462e+00 -5.991857013957798e+00 3.509960601875635e+00 4.785344795725385e+00 9.192066992791384e+03 + 1540 9.953112874815186e-01 -6.042719174169688e+00 -6.005353097187282e+00 3.450947940436433e+00 4.665509736851135e+00 9.233495244612268e+03 + 1560 1.069271904932656e+00 -6.152073224941286e+00 -5.969125473261437e+00 2.902794673513004e+00 4.953308974731771e+00 9.122518662457122e+03 + 1580 9.501493252167980e-01 -5.973938733141406e+00 -6.000864862162931e+00 3.840243568541768e+00 4.685629568895167e+00 9.219698694560499e+03 + 1600 9.589556423068437e-01 -5.981441670093458e+00 -5.997147587285640e+00 3.775158017965434e+00 4.684972210965098e+00 9.208288701353231e+03 + 1620 1.006291995863496e+00 -6.039790244792102e+00 -5.997886280316983e+00 3.510158752278993e+00 4.750777800912672e+00 9.210569812571066e+03 + 1640 9.806403775285769e-01 -5.983382951803718e+00 -6.026193959638568e+00 3.749644127205098e+00 4.503816695235340e+00 9.297642102207012e+03 + 1660 9.960868367948952e-01 -5.984566094202703e+00 -6.008397964351241e+00 3.822908175157749e+00 4.686061888794857e+00 9.242848512513441e+03 + 1680 9.505830390822479e-01 -5.891050024485596e+00 -6.049352098638883e+00 4.204519529126921e+00 4.295524522171942e+00 9.369180422451216e+03 + 1700 1.016998032951114e+00 -5.961998321104554e+00 -6.036169082272856e+00 3.869686127281646e+00 4.443786138765061e+00 9.328432280716304e+03 + 1720 9.140780237941266e-01 -5.779748720443006e+00 -6.132739644266486e+00 4.806172771311286e+00 3.779244261547943e+00 9.629014795126626e+03 + 1740 1.021525743250995e+00 -5.915200249926897e+00 -6.067511755916038e+00 4.138223841906265e+00 4.263627604387245e+00 9.425471443436001e+03 + 1760 1.056258655220493e+00 -5.948052653311422e+00 -5.994831308132557e+00 4.015012130619880e+00 4.746401855663484e+00 9.201170045659454e+03 + 1780 1.091760533190582e+00 -5.988967165690083e+00 -6.005106813609913e+00 3.749688782186766e+00 4.657012426228656e+00 9.232735305379583e+03 + 1800 1.056844747086857e+00 -5.929879681313796e+00 -6.037475961365871e+00 4.078193170902743e+00 4.460358680373206e+00 9.332458516430353e+03 + 1820 1.051672648702115e+00 -5.923554403937755e+00 -6.035937325815052e+00 4.114528236311266e+00 4.469208107690868e+00 9.327690787933538e+03 + 1840 1.079191787915328e+00 -5.974647120335245e+00 -6.031330024822035e+00 3.772111845151964e+00 4.446629835937700e+00 9.313492955648153e+03 + 1860 1.100065683075181e+00 -6.026110253503338e+00 -5.977894555395919e+00 3.612546010636712e+00 4.889408010524683e+00 9.149326728161452e+03 + 1880 1.049314676910492e+00 -5.979511344177174e+00 -6.008981366727259e+00 3.819927821828574e+00 4.650706391874736e+00 9.244641974401233e+03 + 1900 1.036184806597899e+00 -5.997668388798338e+00 -5.980165503078808e+00 3.750662416783600e+00 4.851166695147951e+00 9.156241696330460e+03 + 1920 1.005535619010941e+00 -5.989666607848737e+00 -5.979483632166835e+00 3.791000171996873e+00 4.849472394172748e+00 9.154171845743464e+03 + 1940 1.005750784090165e+00 -6.027399163835307e+00 -6.033277752287585e+00 3.510098996283014e+00 4.476343231681413e+00 9.319475245493330e+03 + 1960 1.033242556008971e+00 -6.101125728237266e+00 -5.965821687674877e+00 3.181007642040000e+00 4.957944381181844e+00 9.112435021612959e+03 + 1980 9.690750026426086e-01 -6.030404089771947e+00 -5.965755592818375e+00 3.604559043262781e+00 4.975780717092768e+00 9.112214479823842e+03 + 2000 9.573730217782468e-01 -6.027212106364522e+00 -5.975251913179205e+00 3.536899098041686e+00 4.835262568125687e+00 9.141197427790356e+03 + 2020 9.580965930334331e-01 -6.035090785097059e+00 -5.982669904413302e+00 3.529901381040305e+00 4.830910190031504e+00 9.163899364309213e+03 + 2040 9.660262002751682e-01 -6.048666659007282e+00 -5.974940385248316e+00 3.407366200012847e+00 4.830713873040818e+00 9.140302196515371e+03 + 2060 9.595238897940745e-01 -6.035918296845781e+00 -5.995067147797715e+00 3.522627130509846e+00 4.757200750038729e+00 9.201927798556333e+03 + 2080 9.661463423743272e-01 -6.040141946598026e+00 -5.974654975432848e+00 3.537300360750312e+00 4.913336683256795e+00 9.139403566643907e+03 + 2100 1.000737593509061e+00 -6.083070298292498e+00 -5.981508654049288e+00 3.301870240239810e+00 4.885052918097971e+00 9.160384300410915e+03 + 2120 1.003290524959656e+00 -6.076963276900972e+00 -5.996724631137527e+00 3.267021808580333e+00 4.727764529444345e+00 9.206983820623636e+03 + 2140 1.007272603225144e+00 -6.072101933930028e+00 -6.002236011835721e+00 3.336549560204369e+00 4.737730496586387e+00 9.223895452315091e+03 + 2160 9.818101233336093e-01 -6.021976171896148e+00 -5.973717484374421e+00 3.570816311975517e+00 4.847925163733031e+00 9.136548609801810e+03 + 2180 1.000151459290246e+00 -6.035791855429288e+00 -5.983648452238181e+00 3.461164862337852e+00 4.760580352626755e+00 9.166930243754949e+03 + 2200 9.554121253276487e-01 -5.953809904471409e+00 -5.997391068390868e+00 3.989846806393845e+00 4.739597019004995e+00 9.209044134300921e+03 + 2220 9.839307642154455e-01 -5.980435775872271e+00 -6.021082810199923e+00 3.805083503591285e+00 4.571681942373672e+00 9.281886750620795e+03 + 2240 1.002960186749692e+00 -5.995430900010174e+00 -6.023260190551815e+00 3.710502562964110e+00 4.550702470105212e+00 9.288593336517781e+03 + 2260 1.004767606786110e+00 -5.985537956324077e+00 -6.045660500958030e+00 3.756604139229965e+00 4.411371184008087e+00 9.357759338904747e+03 + 2280 1.027991188691278e+00 -6.009888852210896e+00 -6.029728511350481e+00 3.694370641299767e+00 4.580448248342943e+00 9.308542224423340e+03 + 2300 9.604690161306196e-01 -5.903919967771139e+00 -6.021619395360090e+00 4.221870042258548e+00 4.546021715115236e+00 9.283529012272789e+03 + 2320 9.946467322845283e-01 -5.949491168189271e+00 -6.001321789945751e+00 3.985664349476699e+00 4.688044898588194e+00 9.221101422118352e+03 + 2340 1.031418105782714e+00 -5.999037826700263e+00 -6.015810873249690e+00 3.712547809461479e+00 4.616234380554106e+00 9.265645565660403e+03 + 2360 1.049610677981517e+00 -6.024346266801204e+00 -6.004432597265719e+00 3.561393145671440e+00 4.675740517774594e+00 9.230668695670809e+03 + 2380 9.914143832608640e-01 -5.939099363307784e+00 -6.018592866977644e+00 4.017360671250756e+00 4.560896671598486e+00 9.274215260865354e+03 + 2400 1.012991710877029e+00 -5.974665694252671e+00 -5.998910952792016e+00 3.855916194011024e+00 4.716696167536472e+00 9.213669904923117e+03 + 2420 1.058602658768619e+00 -6.048244304439085e+00 -5.984697603248392e+00 3.462541409542367e+00 4.827436401599554e+00 9.170128929181448e+03 + 2440 1.109174134477418e+00 -6.136390280741399e+00 -5.992316036744899e+00 2.926837265224963e+00 4.754133869670067e+00 9.193511792371128e+03 + 2460 9.746235130019915e-01 -5.968140791495582e+00 -6.012617563886733e+00 3.937490663295441e+00 4.682098153467168e+00 9.255821060287928e+03 + 2480 9.650319105898962e-01 -6.002441576881545e+00 -5.978626243559641e+00 3.699446377866919e+00 4.836197707212214e+00 9.151542428373863e+03 + 2500 9.562145253501082e-01 -6.042757398039974e+00 -5.998266775327734e+00 3.460543874070221e+00 4.716015914585518e+00 9.211731616562987e+03 + 2520 9.392688056445878e-01 -6.065333014050135e+00 -5.989345446958505e+00 3.316274866757337e+00 4.752607236035481e+00 9.184379853073106e+03 + 2540 9.406177693886535e-01 -6.100166140233386e+00 -5.968893953695828e+00 3.155325092288356e+00 4.909110301692236e+00 9.121812727403245e+03 + 2560 9.537238463889391e-01 -6.140016309834929e+00 -5.982886306498713e+00 2.944294917721612e+00 4.846559712667592e+00 9.164603346280961e+03 + 2580 8.810188432457828e-01 -6.042725236824022e+00 -6.007667748565008e+00 3.490684281974295e+00 4.691989804686326e+00 9.240594978367333e+03 + 2600 9.094600770632164e-01 -6.086683812285889e+00 -5.998017013092426e+00 3.244363042440130e+00 4.753501524551827e+00 9.210971236299811e+03 + 2620 9.014685641839246e-01 -6.066208464713696e+00 -6.020726280185013e+00 3.337757233546257e+00 4.598922975455263e+00 9.280792410484673e+03 + 2640 8.996095265007245e-01 -6.047294977170358e+00 -6.036558941908634e+00 3.432204809079916e+00 4.493852784948821e+00 9.329628755554510e+03 + 2660 9.264650946544774e-01 -6.063693217577973e+00 -5.993544923139384e+00 3.361926625139612e+00 4.764728987219474e+00 9.197264368662391e+03 + 2680 9.607489566346843e-01 -6.083333443466573e+00 -6.019685213109618e+00 3.273614216083375e+00 4.639092204324826e+00 9.277587125123229e+03 + 2700 9.446857719108780e-01 -6.025299013812226e+00 -6.003942020769401e+00 3.622922879040403e+00 4.745558038076301e+00 9.229153636927742e+03 + 2720 9.758232641651808e-01 -6.036071511335988e+00 -6.004508109933705e+00 3.523269141476572e+00 4.704511076749059e+00 9.230873025302106e+03 + 2740 9.631955302082444e-01 -5.984144335667126e+00 -5.997033965351227e+00 3.739817464366789e+00 4.665803216056938e+00 9.207951610907328e+03 + 2760 1.038657344532288e+00 -6.066715514131998e+00 -5.941164815416744e+00 3.364525789782332e+00 5.085457330713151e+00 9.037303005750202e+03 + 2780 9.720294437836885e-01 -5.940555041413755e+00 -6.020825789263021e+00 4.039637789034717e+00 4.578710733026142e+00 9.281050385575518e+03 + 2800 1.063602106253152e+00 -6.053879744546151e+00 -5.996175753453945e+00 3.390894208431495e+00 4.722239454946707e+00 9.205305939813175e+03 + 2820 1.045554226520253e+00 -6.011434130210202e+00 -5.986523863901667e+00 3.642798180238799e+00 4.785836784233663e+00 9.175733653912088e+03 + 2840 1.018604147027625e+00 -5.962079091285482e+00 -5.997161666327792e+00 3.848279269649105e+00 4.646829694745222e+00 9.208322947426321e+03 + 2860 9.674294147173387e-01 -5.878116439520070e+00 -5.979415440483137e+00 4.371307046421917e+00 4.789632506922255e+00 9.153956985671797e+03 + 2880 1.068227645295234e+00 -6.022416081732619e+00 -5.970996395176160e+00 3.558576852878756e+00 4.853836650256722e+00 9.128221660084995e+03 + 2900 9.876236212699944e-01 -5.900765484775541e+00 -5.978866996978657e+00 4.178181843319684e+00 4.729710874079442e+00 9.152264151159983e+03 + 2920 9.989385608189564e-01 -5.915223530828172e+00 -5.990431948654901e+00 4.093737047958474e+00 4.661878674332344e+00 9.187661757397405e+03 + 2940 1.086915531475070e+00 -6.045051127794636e+00 -5.975984572636248e+00 3.435146786277699e+00 4.831737634012029e+00 9.143486209654353e+03 + 2960 9.915887757158284e-01 -5.908029039101748e+00 -6.000420308696699e+00 4.178425840892116e+00 4.647900873375139e+00 9.218318860614439e+03 + 2980 1.014253575230600e+00 -5.948986033304946e+00 -6.025530613274452e+00 4.004932939925229e+00 4.565402116504858e+00 9.295552859091133e+03 + 3000 1.082983966669505e+00 -6.064532511715673e+00 -5.992898859252366e+00 3.355725039220080e+00 4.767056556936281e+00 9.195252684831547e+03 + 3020 9.736603307772786e-01 -5.923534685683446e+00 -6.020888484883230e+00 4.082042940712521e+00 4.523022360255628e+00 9.281289840296087e+03 + 3040 1.014020183822986e+00 -6.012578043699898e+00 -6.007861142396603e+00 3.584969816148293e+00 4.612054993369931e+00 9.241208675832058e+03 + 3060 9.680052995194210e-01 -5.981695359378753e+00 -6.018510452806395e+00 3.842717385884264e+00 4.631319422305445e+00 9.273938567905921e+03 + 3080 9.557725275502270e-01 -6.004785341913009e+00 -6.002541778103556e+00 3.629366551404802e+00 4.642249441989062e+00 9.224867470491785e+03 + 3100 9.302031263612272e-01 -6.009272271114598e+00 -6.055701088184148e+00 3.590218736284929e+00 4.323617283835349e+00 9.388850948703917e+03 + 3120 9.483141574862957e-01 -6.073099379329267e+00 -6.006024068763062e+00 3.367998801191937e+00 4.753155614333849e+00 9.235554446350028e+03 + 3140 9.582860564150950e-01 -6.114673504425299e+00 -5.980828423392261e+00 3.082750058479112e+00 4.851309226230168e+00 9.158312256220290e+03 + 3160 9.324044247077475e-01 -6.093018737326735e+00 -5.992248345004642e+00 3.198757491367820e+00 4.777396678249088e+00 9.193274085134834e+03 + 3180 9.196977860658837e-01 -6.080838754049616e+00 -5.946181626391017e+00 3.281657636389512e+00 5.054879701528347e+00 9.052570912787898e+03 + 3200 8.828086680776239e-01 -6.022172336618174e+00 -5.968404862232271e+00 3.585991623970842e+00 4.894732782384466e+00 9.120313121980313e+03 + 3220 9.552772631648037e-01 -6.117068917095198e+00 -5.997909123999969e+00 2.999307069061937e+00 4.683541040933129e+00 9.210652362418152e+03 + 3240 9.215162564957043e-01 -6.049003702899177e+00 -6.053184578525918e+00 3.394457994419126e+00 4.370450759581967e+00 9.381029438716432e+03 + 3260 8.679224326862217e-01 -5.951227853736288e+00 -6.030090004804739e+00 3.966746250267494e+00 4.513907574954013e+00 9.309651928219242e+03 + 3280 9.559946536674298e-01 -6.062558606339359e+00 -5.962292652969051e+00 3.331788850212740e+00 4.907531470571191e+00 9.101662771243704e+03 + 3300 9.784302446374680e-01 -6.072964680969816e+00 -5.948200022635401e+00 3.332206433175636e+00 5.048624408600331e+00 9.058733949040237e+03 + 3320 9.765467561225118e-01 -6.047872186736956e+00 -6.012236111807583e+00 3.425821534012516e+00 4.630449390921743e+00 9.254676912259902e+03 + 3340 9.843568938032443e-01 -6.042071972895625e+00 -5.985766888542596e+00 3.448932451265526e+00 4.772244958804269e+00 9.173417072005017e+03 + 3360 9.215840893918434e-01 -5.932926288823767e+00 -5.969984742388449e+00 4.091854578806972e+00 4.879059203661414e+00 9.125135119348153e+03 + 3380 9.687394925973194e-01 -5.987212840513108e+00 -5.986014210073209e+00 3.759741059776169e+00 4.766623781249524e+00 9.174160364689043e+03 + 3400 9.772432286983908e-01 -5.983555965976329e+00 -6.011488073192909e+00 3.784267986789303e+00 4.623877504672083e+00 9.252329517471078e+03 + 3420 9.824193308806957e-01 -5.979030385430723e+00 -5.999283156345692e+00 3.801353519335255e+00 4.685058974635331e+00 9.214844883438287e+03 + 3440 1.024170024685142e+00 -6.029930207017909e+00 -5.979341842704698e+00 3.516411120637934e+00 4.806897337048470e+00 9.153739100175311e+03 + 3460 9.428977919711881e-01 -5.900490716818319e+00 -5.994298857082136e+00 4.226958306873071e+00 4.688297448715448e+00 9.199531958086702e+03 + 3480 1.058402989307893e+00 -6.061926264859768e+00 -5.953815791832962e+00 3.373038631280029e+00 4.993825697441572e+00 9.075825160520708e+03 + 3500 1.040416102185497e+00 -6.025872360221016e+00 -6.004864641054125e+00 3.499583190507550e+00 4.620212764897878e+00 9.231992229701502e+03 + 3520 9.822629923594154e-01 -5.931150643530076e+00 -6.013119066061455e+00 4.042294452287814e+00 4.571619085540245e+00 9.257378892511784e+03 + 3540 1.104699379231245e+00 -6.106214672284169e+00 -5.993878726932016e+00 3.136869061109301e+00 4.781919443252727e+00 9.198266622901281e+03 + 3560 1.066019360687542e+00 -6.048029056360878e+00 -5.981361282226180e+00 3.455804329076229e+00 4.838621004962368e+00 9.159921746463959e+03 + 3580 1.050208236203343e+00 -6.025117293531656e+00 -6.024849472762165e+00 3.508092521065522e+00 4.509630389369065e+00 9.293485643367150e+03 + 3600 1.012760468395914e+00 -5.974264473569868e+00 -5.990684756408938e+00 3.871765544721085e+00 4.777477739628587e+00 9.188484901476568e+03 + 3620 9.568049504734903e-01 -5.899234040046347e+00 -6.026094810555316e+00 4.174547864256597e+00 4.446093688353309e+00 9.297313203764568e+03 + 3640 1.014590848537890e+00 -5.995848543922659e+00 -5.987918997166485e+00 3.782945247357538e+00 4.828477931924889e+00 9.179988557423707e+03 + 3660 1.019818488351462e+00 -6.019886063631723e+00 -5.995688200182876e+00 3.575106391588004e+00 4.714054268118549e+00 9.203827806971716e+03 + 3680 1.034310235893273e+00 -6.066901641123715e+00 -6.001890069297374e+00 3.335789841135917e+00 4.709096347070989e+00 9.222843555969139e+03 + 3700 9.295870244544072e-01 -5.946054215591680e+00 -6.021906310456092e+00 3.910904585589538e+00 4.475350118804338e+00 9.284411686400106e+03 + 3720 1.019820518976140e+00 -6.119249170514344e+00 -5.933181843848311e+00 3.065708137068993e+00 5.134135520611096e+00 9.013091374588774e+03 + 3740 9.649417389083867e-01 -6.075255342288441e+00 -5.965685008386437e+00 3.296457619388129e+00 4.925627432607814e+00 9.112011472372647e+03 + 3760 9.656492123442376e-01 -6.108323359664857e+00 -5.961262170971308e+00 3.177983054064289e+00 5.022431157188044e+00 9.098523642699138e+03 + 3780 9.226331693168127e-01 -6.069068674337219e+00 -5.961266221463664e+00 3.358173456886388e+00 4.977191823662004e+00 9.098509935225944e+03 + 3800 9.179814788206815e-01 -6.075896239459354e+00 -5.996930751612742e+00 3.261442468765725e+00 4.714874519850725e+00 9.207617680425241e+03 + 3820 9.146704203067683e-01 -6.076008380244993e+00 -5.979199191999661e+00 3.360966131036247e+00 4.916859471114403e+00 9.153285539843302e+03 + 3840 9.293070156998194e-01 -6.093995862231288e+00 -5.976315876588238e+00 3.184851467074354e+00 4.860588155555666e+00 9.144480147702692e+03 + 3860 9.750351274215672e-01 -6.148797045914271e+00 -5.954640048422515e+00 2.910949903352011e+00 5.025829428647930e+00 9.078349857389134e+03 + 3880 9.665731152462683e-01 -6.114563170224449e+00 -6.008411982785262e+00 3.057472206289281e+00 4.667008751408260e+00 9.242906847124481e+03 + 3900 9.618591694594970e-01 -6.080690003863024e+00 -6.028690066613374e+00 3.258025406652431e+00 4.556617093304205e+00 9.305327881061823e+03 + 3920 9.850576990394742e-01 -6.083629108609698e+00 -5.997148290708218e+00 3.319008230400256e+00 4.815594469653875e+00 9.208306886724573e+03 + 3940 9.519355084770160e-01 -5.998946822943996e+00 -6.057332441579519e+00 3.723835697708302e+00 4.388576440357840e+00 9.393889062292306e+03 + 3960 9.928625005003138e-01 -6.027687220812267e+00 -5.979472623285224e+00 3.581515234175218e+00 4.858370914360356e+00 9.154146114075158e+03 + 3980 1.055409700060590e+00 -6.091892687229631e+00 -5.944742680032918e+00 3.196020081352717e+00 5.040978194066264e+00 9.048200716946576e+03 + 4000 9.565073768551122e-01 -5.922477431880549e+00 -6.002506314457438e+00 4.089672732762155e+00 4.630134504576104e+00 9.224744972512171e+03 + 4020 9.482449255463001e-01 -5.892942723009963e+00 -6.012418510833687e+00 4.301665125875270e+00 4.615616663373036e+00 9.255220171608911e+03 + 4040 1.038919706062922e+00 -6.016488548995719e+00 -6.013168998614837e+00 3.614127977111805e+00 4.633189349097592e+00 9.257495276112901e+03 + 4060 9.866871132477888e-01 -5.933813133139401e+00 -5.993039149756936e+00 4.051875847118295e+00 4.711790894503955e+00 9.195683471498565e+03 + 4080 1.067952099559177e+00 -6.052005374521505e+00 -5.974400479437518e+00 3.430874135502294e+00 4.876493452393244e+00 9.138636414630148e+03 + 4100 9.724287476088145e-01 -5.909615973497374e+00 -5.986123172460852e+00 4.238191376219045e+00 4.798875200319977e+00 9.174483263533950e+03 + 4120 9.873162730934302e-01 -5.932192122910184e+00 -6.001484002555977e+00 4.033516701247188e+00 4.635632005437324e+00 9.221576816329141e+03 + 4140 1.017515710046528e+00 -5.977808592754990e+00 -5.979893255212614e+00 3.805653289351545e+00 4.793682834919393e+00 9.155418998053992e+03 + 4160 9.810727434084010e-01 -5.925878778169631e+00 -6.033748909737148e+00 4.123690354249779e+00 4.504283365940185e+00 9.320940767673927e+03 + 4180 1.025310615732101e+00 -5.994451869004166e+00 -6.013841917271868e+00 3.669341165752669e+00 4.558000507999251e+00 9.259601629061828e+03 + 4200 1.047551917624051e+00 -6.033225032087906e+00 -6.012374171520302e+00 3.529008830986295e+00 4.648737699025722e+00 9.255082879587231e+03 + 4220 1.033243752978466e+00 -6.021079660245851e+00 -5.975379441500917e+00 3.602384625607859e+00 4.864802353727264e+00 9.141653033504830e+03 + 4240 1.064274118788744e+00 -6.079052469845770e+00 -5.998764317204787e+00 3.257991202047767e+00 4.719018199063757e+00 9.213279829096937e+03 + 4260 9.789312428336630e-01 -5.968383445114686e+00 -6.036947988876489e+00 3.871206189852660e+00 4.477497969243530e+00 9.330845613389345e+03 + 4280 1.032852904379636e+00 -6.070726954591553e+00 -6.035343479940346e+00 3.265118140888453e+00 4.468295527910687e+00 9.325874801191769e+03 + 4300 9.778152650389655e-01 -6.015214863448747e+00 -6.000708752028511e+00 3.660478706973720e+00 4.743775043562206e+00 9.219222541627527e+03 + 4320 9.589419751360239e-01 -6.015541832463819e+00 -5.988049408475147e+00 3.596787196364251e+00 4.754652949346069e+00 9.180418000326265e+03 + 4340 9.742631118579683e-01 -6.067969577464320e+00 -5.975101656229723e+00 3.357180635224962e+00 4.890442610218381e+00 9.140777439948526e+03 + 4360 9.388606888885961e-01 -6.044641775262376e+00 -6.003562930105986e+00 3.479739695999048e+00 4.715620781817780e+00 9.227985117652817e+03 + 4380 9.327510532852272e-01 -6.063810570993684e+00 -6.016670300051674e+00 3.321018721172865e+00 4.591705451855246e+00 9.268308835067632e+03 + 4400 9.475128995284288e-01 -6.109923442956447e+00 -6.005632668864542e+00 3.115509659228004e+00 4.714363423008857e+00 9.234360114557157e+03 + 4420 9.407268721708809e-01 -6.121750779416526e+00 -5.980060381863261e+00 3.053667934764019e+00 4.867276124033030e+00 9.155960625530452e+03 + 4440 9.086542439537799e-01 -6.089416999609051e+00 -5.969043225172886e+00 3.199069814867110e+00 4.890274655460967e+00 9.122266762512392e+03 + 4460 9.015957999123217e-01 -6.086010388442796e+00 -5.949103442388193e+00 3.255114702838553e+00 5.041255573365514e+00 9.061479721210455e+03 + 4480 9.229320685175242e-01 -6.115002206643276e+00 -5.977632686619868e+00 3.059741463484381e+00 4.848538505323308e+00 9.148516360305031e+03 + 4500 8.870793222288843e-01 -6.045778776716148e+00 -5.998831920549165e+00 3.470765002643376e+00 4.740341115756701e+00 9.213473874249768e+03 + 4520 9.316908274076666e-01 -6.079351963502633e+00 -6.015815008557974e+00 3.238916986973568e+00 4.603756014577807e+00 9.265683667494772e+03 + 4540 9.855433644824192e-01 -6.103654672621630e+00 -5.971741310873790e+00 3.123144143418572e+00 4.880611080101430e+00 9.130520177236956e+03 + 4560 8.993318263813408e-01 -5.912564141308755e+00 -6.001118462330025e+00 4.156969645224192e+00 4.648477030183167e+00 9.220489494267606e+03 + 4580 1.024751460878388e+00 -6.043608276669022e+00 -5.988424823210932e+00 3.427755778765943e+00 4.744627708134121e+00 9.181575906060809e+03 + 4600 1.019606211956627e+00 -6.001106283398768e+00 -6.015599922023636e+00 3.617872693866590e+00 4.534647977999267e+00 9.264979652321685e+03 + 4620 9.692737915977039e-01 -5.905116860256100e+00 -5.964380532388331e+00 4.235512512694811e+00 4.895211336287916e+00 9.107987053211973e+03 + 4640 1.047656798164206e+00 -6.002300921254660e+00 -5.955877262541110e+00 3.679409545505914e+00 4.945981377877086e+00 9.082085402058434e+03 + 4660 9.885234376510259e-01 -5.897918258197231e+00 -6.031404417153833e+00 4.169472063481171e+00 4.402973881836021e+00 9.313711123181569e+03 + 4680 1.022278941163547e+00 -5.938445010260647e+00 -6.024691798323269e+00 4.015237487673716e+00 4.519995083970824e+00 9.292983778547399e+03 + 4700 1.067033892588570e+00 -5.999699379873799e+00 -5.993911318776776e+00 3.715744664359256e+00 4.748980606877922e+00 9.198362066352935e+03 + 4720 1.041627997978736e+00 -5.962258504412741e+00 -6.014422411600076e+00 3.876085999228677e+00 4.576552771820452e+00 9.261383503587735e+03 + 4740 1.011130039027457e+00 -5.921220635519050e+00 -6.040501004946947e+00 4.115335207862723e+00 4.430408868030227e+00 9.341799380762961e+03 + 4760 1.022760206709960e+00 -5.949771659580606e+00 -6.028614164081205e+00 3.885669341545859e+00 4.432943479865285e+00 9.305102300257813e+03 + 4780 1.040726179942608e+00 -5.990696009652583e+00 -5.983925765460149e+00 3.733227943966438e+00 4.772103733811296e+00 9.167749357146846e+03 + 4800 1.037817162747346e+00 -6.004014262033660e+00 -5.947473867054223e+00 3.654797555592501e+00 4.979461253162279e+00 9.056492416314461e+03 + 4820 1.068131340636593e+00 -6.070120511489455e+00 -5.923555829352535e+00 3.334820523877982e+00 5.176417609519442e+00 8.983861210898671e+03 + 4840 9.931985305451585e-01 -5.979873140149472e+00 -5.986668235115590e+00 3.801132498641155e+00 4.762114011808157e+00 9.176160540100684e+03 + 4860 1.044276044209831e+00 -6.077152872141601e+00 -5.982141662161400e+00 3.292541305710907e+00 4.838110376354454e+00 9.162319829898215e+03 + 4880 9.317087355420148e-01 -5.933894768735680e+00 -6.061976830665452e+00 3.995829215424912e+00 4.260362195189130e+00 9.408291148300863e+03 + 4900 1.017518093548281e+00 -6.086956814941328e+00 -5.986050181895459e+00 3.213617086157798e+00 4.793038588358177e+00 9.174282985029069e+03 + 4920 9.296240603403478e-01 -5.980512727946044e+00 -5.980809321608535e+00 3.802249777384747e+00 4.800546690677001e+00 9.158218107132570e+03 + 4940 9.015791720315198e-01 -5.956662015883299e+00 -6.049070006043820e+00 3.847287446094596e+00 4.316666466502621e+00 9.368284916611934e+03 + 4960 9.699703008756473e-01 -6.072676526520175e+00 -5.956918803592605e+00 3.295773275536687e+00 4.960472034036526e+00 9.085292789411473e+03 + 4980 9.806448847543581e-01 -6.098682579389591e+00 -5.975858576429935e+00 3.159167707151245e+00 4.864442139098621e+00 9.143087445044757e+03 + 5000 8.974225085129036e-01 -5.981929734215370e+00 -5.944437959670164e+00 3.855171960101127e+00 5.070455531373065e+00 9.047265017811827e+03 + 5020 9.561935623503454e-01 -6.066398428607554e+00 -5.974322747013768e+00 3.368205880326709e+00 4.896918692703906e+00 9.138392955426314e+03 + 5040 1.004057308601558e+00 -6.126299620761916e+00 -5.997131009198861e+00 3.015008481311754e+00 4.756714637684855e+00 9.208259997822264e+03 + 5060 9.849117169081997e-01 -6.080103489458722e+00 -5.984878116326396e+00 3.273925233524659e+00 4.820724062129339e+00 9.170698262826898e+03 + 5080 9.908366071930947e-01 -6.057706528075720e+00 -5.974847124983457e+00 3.377985840811509e+00 4.853777355818469e+00 9.140006178063155e+03 + 5100 9.771539815822897e-01 -5.990942021953365e+00 -6.004536978605548e+00 3.691675147012577e+00 4.613610802102993e+00 9.230983745830979e+03 + 5120 1.032278736232676e+00 -6.015841198156314e+00 -5.972458088059938e+00 3.638714940090964e+00 4.887827471778941e+00 9.132698353053305e+03 + 5140 1.028627974621518e+00 -5.956891379563531e+00 -5.972320538878256e+00 3.927573588385711e+00 4.838976967945879e+00 9.132257658021521e+03 + 5160 1.007232133238073e+00 -5.886095159907374e+00 -6.029701925442451e+00 4.282524846519369e+00 4.457912575741810e+00 9.308449122893173e+03 + 5180 1.090491748089998e+00 -5.984036999334295e+00 -6.015730470933634e+00 3.788786464180200e+00 4.606797645707918e+00 9.265397439485851e+03 + 5200 1.050708258974349e+00 -5.913419335026415e+00 -6.010847321836398e+00 4.174659400299506e+00 4.615212823104346e+00 9.250370066750167e+03 + 5220 1.016352524573795e+00 -5.860023479565696e+00 -6.041187352588485e+00 4.415616800814671e+00 4.375345806899070e+00 9.343909630690034e+03 + 5240 1.074992555704176e+00 -5.950940983467232e+00 -6.055368124593319e+00 3.945476945763994e+00 4.345840141370141e+00 9.387804902449074e+03 + 5260 1.027721092513089e+00 -5.893777525903121e+00 -6.031979672027708e+00 4.236544494326052e+00 4.442966384565680e+00 9.315484540254663e+03 + 5280 1.079176464061436e+00 -5.989267529607163e+00 -5.974560415334167e+00 3.789786289676842e+00 4.874236815750962e+00 9.139119673688196e+03 + 5300 1.059999716891454e+00 -5.983469650277590e+00 -6.043242209496077e+00 3.784423903340143e+00 4.441200618533951e+00 9.350264272680171e+03 + 5320 1.029361575629399e+00 -5.967862815101084e+00 -5.980497410155740e+00 3.933418407141061e+00 4.860868607139956e+00 9.157273690876304e+03 + 5340 9.939829445005901e-01 -5.944265808186808e+00 -6.001372744035221e+00 3.941834624443284e+00 4.613917761531937e+00 9.221231392115746e+03 + 5360 1.002347141807476e+00 -5.981766963077394e+00 -5.982409571908413e+00 3.834214042105230e+00 4.830524082754128e+00 9.163109792510033e+03 + 5380 9.922709497894977e-01 -5.990774557502838e+00 -6.025026422721659e+00 3.750138861042017e+00 4.553459350496536e+00 9.294028311952472e+03 + 5400 9.508013318942231e-01 -5.951953771769782e+00 -6.008154724056148e+00 3.904216998544369e+00 4.581502433446799e+00 9.242100493211838e+03 + 5420 9.804559441734161e-01 -6.011243487471830e+00 -5.970239145135222e+00 3.673641929012173e+00 4.909095208110443e+00 9.125894173494014e+03 + 5440 1.004942721263019e+00 -6.058813121797945e+00 -5.976525362827058e+00 3.413890302526983e+00 4.886399348527364e+00 9.145100181239737e+03 + 5460 1.061547705765180e+00 -6.150779631457584e+00 -5.953309016851688e+00 2.872544941834724e+00 5.006451769380628e+00 9.074287370967444e+03 + 5480 9.297799736091874e-01 -5.959891555236977e+00 -6.009254856772337e+00 3.896502191446372e+00 4.613050475084114e+00 9.245483392329066e+03 + 5500 9.361742094286684e-01 -5.969752623865404e+00 -6.049262797858599e+00 3.811683572762313e+00 4.355123849533723e+00 9.368916955620309e+03 + 5520 9.858600198733015e-01 -6.041654800972768e+00 -6.043056089465784e+00 3.478372831998727e+00 4.470326416623138e+00 9.349707388124003e+03 + 5540 1.003069533423004e+00 -6.066204985263413e+00 -6.032614961300689e+00 3.319617876539157e+00 4.512496992172522e+00 9.317459630966303e+03 + 5560 9.316648413133540e-01 -5.958525880637334e+00 -6.004372647590115e+00 3.955060615420489e+00 4.691801384813365e+00 9.230479922348693e+03 + 5580 9.507656042053820e-01 -5.980640465489707e+00 -6.027010626065092e+00 3.785234937976507e+00 4.518970300193487e+00 9.300153003629017e+03 + 5600 9.860409688741618e-01 -6.021738425153599e+00 -6.011213456068123e+00 3.606997492223968e+00 4.667433493446472e+00 9.251499424952544e+03 + 5620 9.645523403348569e-01 -5.976906707758470e+00 -5.985601357224780e+00 3.820284958720100e+00 4.770358935991887e+00 9.172913404955720e+03 + 5640 9.858535755648066e-01 -5.987286215858703e+00 -6.004868064897952e+00 3.747833994349626e+00 4.646876296383908e+00 9.232006529207254e+03 + 5660 1.047512573076879e+00 -6.047377952769070e+00 -5.970501155426838e+00 3.480678631434559e+00 4.922117098419593e+00 9.126717327386912e+03 + 5680 1.007161517675931e+00 -5.938629001535418e+00 -5.950875996505930e+00 3.995137633433824e+00 4.924813493096795e+00 9.066819803877379e+03 + 5700 9.937902825741408e-01 -5.856681332590008e+00 -5.935599748798062e+00 4.513101529458910e+00 5.059939771006826e+00 9.020360707662177e+03 + 5720 1.050834366181098e+00 -5.874422435989541e+00 -6.025831156209742e+00 4.324021279215323e+00 4.454608977287198e+00 9.296521581399067e+03 + 5740 1.101525194162983e+00 -5.905787041933178e+00 -6.030948677867882e+00 4.156251876258815e+00 4.437554394021180e+00 9.312275590688911e+03 + 5760 1.039972423741618e+00 -5.796233619049751e+00 -6.056418903703963e+00 4.692678800748967e+00 4.198654632721809e+00 9.391024973702413e+03 + 5780 1.114542697914913e+00 -5.901829574616368e+00 -6.071327914859436e+00 4.149102485331635e+00 4.175816785872553e+00 9.437273650968817e+03 + 5800 1.045710538384237e+00 -5.808509062210256e+00 -6.079078501710234e+00 4.646830887537621e+00 4.093179295443306e+00 9.461361277715969e+03 + 5820 1.068381737833680e+00 -5.863737026566657e+00 -6.058924895229969e+00 4.371261291274465e+00 4.250462344184675e+00 9.398808290275932e+03 + 5840 9.988759948329279e-01 -5.787975240495646e+00 -6.028797202463188e+00 4.778894947305101e+00 4.396057974609304e+00 9.305664667454823e+03 + 5860 9.942441500367526e-01 -5.810996239899330e+00 -6.072444645525382e+00 4.707023346966302e+00 4.205746142851503e+00 9.440768158165072e+03 + 5880 1.130752371061504e+00 -6.051483634977819e+00 -5.984531494534464e+00 3.437891123731533e+00 4.822340674967530e+00 9.169636868705893e+03 + 5900 1.058167279416327e+00 -5.983073016547560e+00 -5.998884071635485e+00 3.786762308116388e+00 4.695972783048654e+00 9.213615079346297e+03 + 5920 1.021645499093240e+00 -5.964768444494412e+00 -5.990279211182726e+00 3.893987917909978e+00 4.747501147807299e+00 9.187188752909122e+03 + 5940 9.955602938411011e-01 -5.954737780459459e+00 -5.978099533833019e+00 3.916231484241579e+00 4.782084681150947e+00 9.149918122200836e+03 + 5960 9.832028117884604e-01 -5.956990417530747e+00 -6.017851883698061e+00 3.925603001062145e+00 4.576127044047981e+00 9.271911965102374e+03 + 5980 1.056804691345300e+00 -6.085534823424322e+00 -5.996063959191838e+00 3.226880970980619e+00 4.740636518975036e+00 9.204975944688573e+03 + 6000 9.827816972307938e-01 -5.993114706541585e+00 -6.006057820440198e+00 3.736188829857133e+00 4.661867466910893e+00 9.235645890356222e+03 + 6020 9.927825241335750e-01 -6.024386147788722e+00 -5.960518907125483e+00 3.558190729332620e+00 4.924926308644492e+00 9.096238139120040e+03 + 6040 9.550228211123102e-01 -5.978439675616897e+00 -5.996893398891559e+00 3.824079821402093e+00 4.718115686654538e+00 9.207502029306059e+03 + 6060 9.885194331368943e-01 -6.034704845719184e+00 -6.026646182732798e+00 3.447658443674084e+00 4.493932533615978e+00 9.299034538166110e+03 + 6080 1.017383922439883e+00 -6.083954427828170e+00 -5.972156660873335e+00 3.282862932933779e+00 4.924823011436962e+00 9.131779829706002e+03 + 6100 1.007185226422580e+00 -6.074494674679825e+00 -5.956634827429297e+00 3.280227929166410e+00 4.956997410831359e+00 9.084406693866094e+03 + 6120 9.200505619146969e-01 -5.946177449864086e+00 -5.975467384227859e+00 3.964012248614480e+00 4.795824912894997e+00 9.141879300941420e+03 + 6140 9.904711936561045e-01 -6.046266535416278e+00 -5.975527594389998e+00 3.399672310613563e+00 4.805866256802203e+00 9.142056554514576e+03 + 6160 9.359448260532386e-01 -5.957899043092437e+00 -5.947745705204099e+00 3.958058964404593e+00 5.016361001783394e+00 9.057324578759306e+03 + 6180 9.516829458501335e-01 -5.967443360590737e+00 -6.004647461304478e+00 3.817101854207913e+00 4.603470150593632e+00 9.231299474331759e+03 + 6200 1.032817955582340e+00 -6.067816473790483e+00 -5.962609612070656e+00 3.288650634854922e+00 4.892764715559402e+00 9.102641273032164e+03 + 6220 9.902282671615050e-01 -5.975694393581183e+00 -5.999875045683858e+00 3.857054508744313e+00 4.718205462426931e+00 9.216649235523946e+03 + 6240 1.048440895607203e+00 -6.023814741506930e+00 -6.022839448909082e+00 3.529394856350803e+00 4.534995137373694e+00 9.287312082407818e+03 + 6260 1.058210726141701e+00 -5.995734163488008e+00 -6.013943938101269e+00 3.694048177620358e+00 4.589484833837497e+00 9.259903568025162e+03 + 6280 1.011167896953987e+00 -5.888018825924141e+00 -6.061232316227425e+00 4.261065841294839e+00 4.266447175272389e+00 9.405973226168264e+03 + 6300 1.121875130168260e+00 -6.019450192259485e+00 -6.002587871642650e+00 3.621358152423874e+00 4.718184206841420e+00 9.224979488573748e+03 + 6320 1.056933162678728e+00 -5.897642024118499e+00 -6.049309127276980e+00 4.234540587707433e+00 4.363644610963072e+00 9.369014970866787e+03 + 6340 1.082161702236923e+00 -5.919284400986758e+00 -6.025559242440309e+00 4.125533988566872e+00 4.515287402962017e+00 9.295684196235683e+03 + 6360 1.094795651046679e+00 -5.933773511445818e+00 -6.081407768954552e+00 3.977518900160365e+00 4.129780147217696e+00 9.468633453612098e+03 + 6380 1.036781926328056e+00 -5.857104111546207e+00 -6.073112898127896e+00 4.418219654330143e+00 4.177863774526396e+00 9.442795118709108e+03 + 6400 9.901618803514718e-01 -5.805224182879377e+00 -6.015792151638482e+00 4.761022635144186e+00 4.551908773241555e+00 9.265554282845605e+03 + 6420 1.029595153230245e+00 -5.885651028033211e+00 -6.073447752616358e+00 4.220201838492843e+00 4.141843984487208e+00 9.443876232434268e+03 + 6440 1.072288460916004e+00 -5.981702690081717e+00 -5.994266580341420e+00 3.866012053048963e+00 4.793868250922018e+00 9.199426360480013e+03 + 6460 1.063587072725687e+00 -6.007512654510931e+00 -5.987780624415180e+00 3.710665847130440e+00 4.823970217462031e+00 9.179569132008515e+03 + 6480 1.008417233703150e+00 -5.962709065019967e+00 -5.957105982372020e+00 3.914215188154749e+00 4.946388955793497e+00 9.085826160781588e+03 + 6500 9.946654699164605e-01 -5.969018543972053e+00 -5.991151555586138e+00 3.826040284060052e+00 4.698949106299500e+00 9.189906226444627e+03 + 6520 1.028063289928327e+00 -6.038671862440445e+00 -6.021910973632878e+00 3.478844196022966e+00 4.575087813295180e+00 9.284435866786205e+03 + 6540 1.014605148110911e+00 -6.032464495894615e+00 -6.011077706451258e+00 3.509192067743895e+00 4.631998322322623e+00 9.251082588727302e+03 + 6560 9.635061968787028e-01 -5.964764380753449e+00 -6.017067215211133e+00 3.873894583172384e+00 4.573563613878886e+00 9.269503667898596e+03 + 6580 9.718687633755881e-01 -5.981736519797508e+00 -5.997465202882282e+00 3.756303155370881e+00 4.665986623092265e+00 9.209284514355026e+03 + 6600 1.061683940152056e+00 -6.117589987185446e+00 -5.948048643585839e+00 3.060286430224825e+00 5.033819061611899e+00 9.058266975099343e+03 + 6620 9.274267642679134e-01 -5.918790025936023e+00 -6.000727300331480e+00 4.078278501062465e+00 4.607781991731518e+00 9.219262459612988e+03 + 6640 9.954932698429221e-01 -6.016810857664492e+00 -6.005476785630377e+00 3.623732484431428e+00 4.688814479993295e+00 9.233860943338510e+03 + 6660 1.110676758119130e+00 -6.182961608711219e+00 -5.964060671985285e+00 2.718941905649896e+00 4.975904959140691e+00 9.107060632415163e+03 + 6680 1.008328476849361e+00 -6.027087061917306e+00 -6.008173933104363e+00 3.553472523247021e+00 4.662074635688166e+00 9.242190885011580e+03 + 6700 1.013898210746834e+00 -6.032018060539982e+00 -6.011170639247409e+00 3.538087130269019e+00 4.657796249458992e+00 9.251399418341643e+03 + 6720 9.562030201255899e-01 -5.942261957930596e+00 -6.073230620771294e+00 4.017125894259062e+00 4.265083564892699e+00 9.443243680528773e+03 + 6740 9.783672866065568e-01 -5.973919375388831e+00 -6.065897184432872e+00 3.858279970770491e+00 4.330129157719658e+00 9.420443645399815e+03 + 6760 1.053308276321733e+00 -6.085200414009361e+00 -5.974464101858132e+00 3.288470192655914e+00 4.924335233417191e+00 9.138842529785892e+03 + 6780 9.661514957810220e-01 -5.955907970278579e+00 -6.030042910510641e+00 3.979014112462032e+00 4.553319813304610e+00 9.309480964345175e+03 + 6800 1.017670790722191e+00 -6.031139927527134e+00 -5.999776771454921e+00 3.531350061460125e+00 4.711442157059488e+00 9.216366723367106e+03 + 6820 9.958657760981524e-01 -5.996910435275414e+00 -6.016753438793784e+00 3.720320047545983e+00 4.606378450648632e+00 9.268555175870073e+03 + 6840 1.020559975823928e+00 -6.033509998339319e+00 -5.983109390973723e+00 3.510552081532023e+00 4.799960168494056e+00 9.165263509764311e+03 + 6860 9.737651095029531e-01 -5.962873824177495e+00 -5.976166356349753e+00 3.893590173868428e+00 4.817262397122616e+00 9.144027603336624e+03 + 6880 9.903211776014194e-01 -5.983169958249334e+00 -5.995811957243391e+00 3.834163594505035e+00 4.761571279938140e+00 9.204168540732442e+03 + 6900 9.934968546055921e-01 -5.980261669037813e+00 -6.048374519331410e+00 3.792246019650054e+00 4.401131492834706e+00 9.366144552206764e+03 + 6920 1.024996183601244e+00 -6.020325760182681e+00 -6.010823032064735e+00 3.598592105678598e+00 4.653158241074264e+00 9.250311781338753e+03 + 6940 1.017604094682016e+00 -6.004274070797440e+00 -5.961279643239948e+00 3.646003805266135e+00 4.892884461667418e+00 9.098569424944342e+03 + 6960 9.949482101534036e-01 -5.964610663649457e+00 -5.955277375507672e+00 3.872226033252690e+00 4.925819218084492e+00 9.080258503656165e+03 + 6980 9.903229173836756e-01 -5.950019474298431e+00 -5.952398120639085e+00 3.998524590637901e+00 4.984866035255533e+00 9.071423764470448e+03 + 7000 9.916889971875306e-01 -5.939546068791379e+00 -5.944170629681906e+00 3.992152392009156e+00 4.965597447727262e+00 9.046433493432276e+03 + 7020 1.025135671977226e+00 -5.971484183415836e+00 -6.026676766047819e+00 3.787216104860340e+00 4.470291754362933e+00 9.299108882933162e+03 + 7040 1.031615147079532e+00 -5.964882897510957e+00 -6.013081409958710e+00 3.824432600791719e+00 4.547669283621028e+00 9.257257656093245e+03 + 7060 1.033749059542605e+00 -5.955939846591569e+00 -5.983998390740918e+00 3.962696184835532e+00 4.801579682284300e+00 9.167962185071008e+03 + 7080 1.008376994228577e+00 -5.905957342447813e+00 -5.996384867878945e+00 4.182514522888098e+00 4.663265678248207e+00 9.205939252830076e+03 + 7100 1.113979398187659e+00 -6.050727425320332e+00 -5.974805977101429e+00 3.433628603170633e+00 4.869581307649718e+00 9.139859891016687e+03 + 7120 9.483727834629774e-01 -5.797545580776678e+00 -6.029016616446878e+00 4.740304958567982e+00 4.411162451722686e+00 9.306310777296268e+03 + 7140 1.024391346513533e+00 -5.905649927889755e+00 -6.000003528563532e+00 4.166418104602656e+00 4.624625128361315e+00 9.217049603429366e+03 + 7160 1.067502694858423e+00 -5.969564001863686e+00 -6.034240775328664e+00 3.791291989688327e+00 4.419907947754079e+00 9.322465615485669e+03 + 7180 1.069782942683294e+00 -5.982413761560339e+00 -6.005813393943151e+00 3.751523557829650e+00 4.617159247606132e+00 9.234902157555271e+03 + 7200 1.001636856988447e+00 -5.896890669031081e+00 -5.992270030852033e+00 4.278970200332358e+00 4.731287144847909e+00 9.193316518531097e+03 + 7220 1.041955257376149e+00 -5.979040947105043e+00 -5.987832900613595e+00 3.828443004816374e+00 4.777958247219855e+00 9.179726438631405e+03 + 7240 1.021159284843875e+00 -5.980890929528915e+00 -5.986841300932499e+00 3.800532234521315e+00 4.766364281104932e+00 9.176707525315020e+03 + 7260 9.841741776995032e-01 -5.961638066619208e+00 -6.007186841507625e+00 3.909030434707887e+00 4.647482320648459e+00 9.239103887416764e+03 + 7280 9.692632583118538e-01 -5.976284283478131e+00 -5.981627433650576e+00 3.888518644971742e+00 4.857837449831747e+00 9.160712968640501e+03 + 7300 1.000852152666041e+00 -6.056851208780508e+00 -5.974248467144246e+00 3.382448779341675e+00 4.856766504550048e+00 9.138154400706651e+03 + 7320 9.272274690871283e-01 -5.973631518311374e+00 -5.981058131635247e+00 3.805868649333959e+00 4.763223886363583e+00 9.159000834697565e+03 + 7340 9.695978387501567e-01 -6.052998963621831e+00 -6.017268368235714e+00 3.365647074538355e+00 4.570817682537204e+00 9.270134722428336e+03 + 7360 1.029609462429732e+00 -6.156591341652917e+00 -5.960792255693071e+00 2.838815248097193e+00 4.963123899489258e+00 9.097104350016809e+03 + 7380 9.424387377146329e-01 -6.037320325121494e+00 -6.002363637621662e+00 3.428750458628788e+00 4.629477167782734e+00 9.224313406843272e+03 + 7400 9.481095286209023e-01 -6.049135836612690e+00 -5.990588243243112e+00 3.410971447553949e+00 4.747160788892857e+00 9.188184502962427e+03 + 7420 9.455148003004439e-01 -6.042177479954564e+00 -5.958390648227891e+00 3.446402615640576e+00 4.927519569385439e+00 9.089770219793187e+03 + 7440 9.661849777789109e-01 -6.064351906325400e+00 -5.954270093113720e+00 3.383349096664117e+00 5.015455903231122e+00 9.077200724269193e+03 + 7460 9.404673670693910e-01 -6.012415353754005e+00 -5.986050610806424e+00 3.616137936942440e+00 4.767528370878242e+00 9.174269267443105e+03 + 7480 9.655095547602536e-01 -6.027548896938033e+00 -6.030536754836675e+00 3.552400217955231e+00 4.535243475531717e+00 9.311026397073203e+03 + 7500 9.768851330149607e-01 -6.019611787873226e+00 -6.008352734774491e+00 3.562847264953782e+00 4.627498490179552e+00 9.242730317607527e+03 + 7520 1.007935542505234e+00 -6.039719267446659e+00 -5.986176263582580e+00 3.502760974358537e+00 4.810213188299150e+00 9.174676434389083e+03 + 7540 9.892652778197105e-01 -5.982965490701243e+00 -6.032804611515336e+00 3.807449266120674e+00 4.521265321827135e+00 9.318019284935517e+03 + 7560 1.002703142624787e+00 -5.975599857304917e+00 -6.027293261383916e+00 3.807045167665055e+00 4.510213641915015e+00 9.301039633487062e+03 + 7580 1.065240646693610e+00 -6.043802505753950e+00 -5.985339149709022e+00 3.449117374420996e+00 4.784823012006084e+00 9.172111639278279e+03 + 7600 1.022495809024182e+00 -5.962093851293497e+00 -5.974220601208099e+00 3.876391276020052e+00 4.806757601401922e+00 9.138058000750785e+03 + 7620 9.917271173913326e-01 -5.901939749586052e+00 -5.968673748724665e+00 4.264198985619513e+00 4.881002035512609e+00 9.121108579094054e+03 + 7640 1.003486175946281e+00 -5.908618864270528e+00 -6.007592810348852e+00 4.162378469999749e+00 4.594054755449357e+00 9.240334486155800e+03 + 7660 1.045412717037611e+00 -5.964504479716386e+00 -5.993769821270725e+00 3.864042099041694e+00 4.695995979039707e+00 9.197924017990506e+03 + 7680 1.027437642020808e+00 -5.937264452844249e+00 -6.000246805143464e+00 3.999526753106084e+00 4.637872339716475e+00 9.217773085669816e+03 + 7700 1.061570173742260e+00 -5.989652994552815e+00 -5.979587545068409e+00 3.710585298104648e+00 4.768382666667384e+00 9.154488817430729e+03 + 7720 1.063242532008590e+00 -5.997974559566547e+00 -6.021575360997013e+00 3.649728379660084e+00 4.514208925634131e+00 9.283383505038137e+03 + 7740 9.636213022851071e-01 -5.858818592387362e+00 -6.024070644061817e+00 4.464778579436111e+00 4.515875726049038e+00 9.291078567129565e+03 + 7760 1.016236950224726e+00 -5.945110529882687e+00 -6.015834047874455e+00 3.987023329554243e+00 4.580917944816477e+00 9.265675022270656e+03 + 7780 1.028040754794131e+00 -5.972512907378281e+00 -6.010812628105839e+00 3.845435831879405e+00 4.625512908599141e+00 9.250238689525759e+03 + 7800 1.043608342142548e+00 -6.007012222872336e+00 -6.013831908129344e+00 3.619547890829323e+00 4.580388202740702e+00 9.259552840938031e+03 + 7820 1.085077831410023e+00 -6.084451370855996e+00 -5.975362215363215e+00 3.243586581798044e+00 4.869993394129849e+00 9.141582333186177e+03 + 7840 9.889279781114304e-01 -5.959396374037639e+00 -6.003058706882266e+00 3.924489283027553e+00 4.673773411109535e+00 9.226450349331570e+03 + 7860 1.013711201878013e+00 -6.014485839316144e+00 -6.015728050222421e+00 3.591492665971820e+00 4.584359698716465e+00 9.265409023927101e+03 + 7880 1.034188645842074e+00 -6.064674937463971e+00 -6.001462097708278e+00 3.375118869298491e+00 4.738096777331017e+00 9.221546327434877e+03 + 7900 9.967874986278219e-01 -6.028644481042379e+00 -5.986418148219897e+00 3.551557401548016e+00 4.794027539118591e+00 9.175420370504416e+03 + 7920 1.014403812167638e+00 -6.075383812298158e+00 -5.992703677957975e+00 3.278680010099246e+00 4.753442136190019e+00 9.194657827273149e+03 + 7940 9.247460565844577e-01 -5.960172675370466e+00 -6.018607509330633e+00 3.936256791853897e+00 4.600714932493291e+00 9.274237730875890e+03 + 7960 9.842402127024615e-01 -6.063533257141492e+00 -5.965723547017135e+00 3.406664846557850e+00 4.968303338095629e+00 9.112119052967357e+03 + 7980 9.941496713881786e-01 -6.089272050499535e+00 -5.955804635545148e+00 3.260885009539949e+00 5.027275560223760e+00 9.081876409332344e+03 + 8000 1.014268221016080e+00 -6.126397090503144e+00 -5.946599383216699e+00 3.084322197540495e+00 5.116748456384545e+00 9.053841258564025e+03 + 8020 9.084787635395473e-01 -5.973183595537950e+00 -6.004645608687474e+00 3.852612143429630e+00 4.671952395194264e+00 9.231289246612310e+03 + 8040 9.457229160853107e-01 -6.028098458301938e+00 -5.976175010390559e+00 3.573685418253183e+00 4.871837891287915e+00 9.144032996970482e+03 + 8060 9.217790178844402e-01 -5.985432287980048e+00 -6.016795406707681e+00 3.773062681226091e+00 4.592970800065088e+00 9.268674914087276e+03 + 8080 9.928709681515657e-01 -6.073771480244977e+00 -5.984437405888368e+00 3.331112038688137e+00 4.844082118047115e+00 9.169331707527293e+03 + 8100 9.602619489853486e-01 -5.997167072809022e+00 -6.007618656862315e+00 3.722060924185867e+00 4.662046311174453e+00 9.240466555260395e+03 + 8120 1.023400174337499e+00 -6.052740926542024e+00 -5.966207031011225e+00 3.465419502095283e+00 4.962310521310190e+00 9.113612370358282e+03 + 8140 1.039190543711173e+00 -6.030692550510784e+00 -5.966007599561972e+00 3.552640364729506e+00 4.924071363041394e+00 9.112975093863261e+03 + 8160 9.754133026862892e-01 -5.891039106097580e+00 -5.977826254216075e+00 4.313803501420507e+00 4.815458266656340e+00 9.149072788319401e+03 + 8180 1.015801642791104e+00 -5.907451112856613e+00 -6.000367226709385e+00 4.143426944451869e+00 4.609888239987098e+00 9.218164970110764e+03 + 8200 1.021688871640516e+00 -5.882073080260526e+00 -6.043878947115670e+00 4.284105777791714e+00 4.354991450932510e+00 9.352234022907280e+03 + 8220 1.080301675909575e+00 -5.948723809209726e+00 -6.040341534358636e+00 3.943937499191578e+00 4.417854343589392e+00 9.341305968443316e+03 + 8240 1.108382660967092e+00 -5.984492876110729e+00 -5.982067012789423e+00 3.764387527347858e+00 4.778317209939934e+00 9.162061960736852e+03 + 8260 1.045503993036920e+00 -5.893075006996722e+00 -6.008987443355833e+00 4.274628361711495e+00 4.609041214745924e+00 9.244635190211489e+03 + 8280 1.069644424321301e+00 -5.936854412499327e+00 -5.984993049009274e+00 3.989824002094092e+00 4.713404501824050e+00 9.171045672589971e+03 + 8300 1.038806367684439e+00 -5.904820776209504e+00 -6.021667069963057e+00 4.200395326479708e+00 4.529445825841286e+00 9.283658853671044e+03 + 8320 1.050280684495871e+00 -5.942145328192187e+00 -5.970552227891130e+00 3.967978799030100e+00 4.804861985005249e+00 9.126856923972080e+03 + 8340 9.950251347572576e-01 -5.880309089343729e+00 -5.959533980608529e+00 4.325005565715962e+00 4.870083980061183e+00 9.093242673808831e+03 + 8360 1.041626682637950e+00 -5.970855810800938e+00 -5.978517077592771e+00 3.820017031197647e+00 4.776024851701735e+00 9.151203358062694e+03 + 8380 1.004124815092561e+00 -5.937556618195869e+00 -5.968003788122336e+00 4.005086850455758e+00 4.830254489053670e+00 9.119080216536127e+03 + 8400 1.030785410544355e+00 -5.999044846975131e+00 -5.975767944378014e+00 3.683074873158704e+00 4.816734449960385e+00 9.142801050732520e+03 + 8420 9.760472254088591e-01 -5.938647137708887e+00 -6.009635482662998e+00 4.025075970972286e+00 4.617449908834904e+00 9.246646937955480e+03 + 8440 9.811586737657725e-01 -5.967864705083958e+00 -5.988583641794389e+00 3.795403875673599e+00 4.676432534837214e+00 9.182033592884563e+03 + 8460 9.818938801712748e-01 -5.985833380564230e+00 -5.958540446383595e+00 3.776411463146998e+00 4.933131714780119e+00 9.090180370122020e+03 + 8480 9.665609780835528e-01 -5.971968880586969e+00 -5.996242064708357e+00 3.904693555687026e+00 4.765313176198918e+00 9.205499974128566e+03 + 8500 1.018619771488148e+00 -6.056435876823723e+00 -5.940112224449670e+00 3.457401655212753e+00 5.125350068171593e+00 9.034126317569646e+03 + 8520 9.526710325316246e-01 -5.962098014157290e+00 -5.954922970433390e+00 3.937525395210844e+00 4.978725606607903e+00 9.079151585649128e+03 + 8540 1.011437546985064e+00 -6.049004612189174e+00 -5.954297911803649e+00 3.455869094546850e+00 4.999689623975053e+00 9.077269058914992e+03 + 8560 9.923068617028381e-01 -6.018438507246602e+00 -5.992829229807393e+00 3.624579791357629e+00 4.771632225436443e+00 9.195046944676606e+03 + 8580 9.743329077901528e-01 -5.989294301925881e+00 -5.997955201050744e+00 3.739524265204194e+00 4.689792042159421e+00 9.210777417493282e+03 + 8600 1.038933545219520e+00 -6.081563955744997e+00 -5.997223892384987e+00 3.269861181009516e+00 4.754154876405315e+00 9.208538237702434e+03 + 8620 1.004811924004112e+00 -6.028877850677456e+00 -5.995013314879081e+00 3.570292047105434e+00 4.764747452179684e+00 9.201761134775503e+03 + 8640 9.042409371983062e-01 -5.877601545746147e+00 -6.034651157575736e+00 4.343849649522177e+00 4.442046475047794e+00 9.323683328489375e+03 + 8660 9.718515117529635e-01 -5.974053793488278e+00 -6.009060146001669e+00 3.826125968638301e+00 4.625114075290863e+00 9.244857456706844e+03 + 8680 1.016038699402894e+00 -6.035719410748202e+00 -6.009122709991038e+00 3.480858643460031e+00 4.633581015033807e+00 9.245078034264425e+03 + 8700 9.941146580714835e-01 -6.001209525154175e+00 -6.015517562125872e+00 3.647393829228893e+00 4.565234866775848e+00 9.264725546595986e+03 + 8720 1.020850629244716e+00 -6.038482920019320e+00 -5.966927802404495e+00 3.500044423324201e+00 4.910924981787194e+00 9.115771740672224e+03 + 8740 9.827152680494838e-01 -5.977465725698175e+00 -5.998610884721756e+00 3.764528230540248e+00 4.643109455224063e+00 9.212791804753073e+03 + 8760 9.968507621604232e-01 -5.994377224372432e+00 -6.039805528028324e+00 3.730097368203098e+00 4.469241018603689e+00 9.339650961123880e+03 + 8780 8.764117556433408e-01 -5.813904581373118e+00 -6.080300259718758e+00 4.680319570871971e+00 4.150634361213320e+00 9.465181815917984e+03 + 8800 1.018890091346957e+00 -6.024250927257823e+00 -5.988207989347802e+00 3.581025741682792e+00 4.787989868788746e+00 9.180882617943131e+03 + 8820 1.009950037046913e+00 -6.008399317055590e+00 -6.029000789768031e+00 3.669577025388054e+00 4.551280181005616e+00 9.306297915466588e+03 + 8840 9.657074160205878e-01 -5.941935136208945e+00 -6.034786248103749e+00 4.010848803173062e+00 4.477683350009975e+00 9.324153654693951e+03 + 8860 1.017173515156002e+00 -6.019911136688190e+00 -6.008080623081010e+00 3.566105899136201e+00 4.634038539034688e+00 9.241867924631366e+03 + 8880 1.001287290454898e+00 -5.996396447196171e+00 -6.017130346559332e+00 3.703743305639244e+00 4.584686046935414e+00 9.269705346917985e+03 + 8900 1.083519703159325e+00 -6.118841234972435e+00 -5.984385083776121e+00 3.067181130901148e+00 4.839249158092535e+00 9.169201796099618e+03 + 8920 1.031656373245042e+00 -6.044993580790487e+00 -6.042037061766809e+00 3.469482297378607e+00 4.486459087132403e+00 9.346568668921378e+03 + 8940 9.992368937580539e-01 -6.003231992659405e+00 -5.985832084005798e+00 3.664207041824773e+00 4.764120009940944e+00 9.173612903210898e+03 + 8960 9.256933703749293e-01 -5.899335870553142e+00 -5.984592465147309e+00 4.281068818826553e+00 4.791512259251472e+00 9.169782332135363e+03 + 8980 9.934508117826832e-01 -6.001804246681455e+00 -5.941733625996394e+00 3.694421118573314e+00 5.039355918445444e+00 9.039041576431067e+03 + 9000 9.635314000748008e-01 -5.956856421192263e+00 -5.980939344254325e+00 3.967109315802432e+00 4.828821444759770e+00 9.158603176617566e+03 + 9020 9.864768993431361e-01 -5.986170031861555e+00 -5.989608470064649e+00 3.802458272197657e+00 4.782714227938897e+00 9.185149667300690e+03 + 9040 1.055279273689911e+00 -6.080548945254758e+00 -6.011118480123336e+00 3.254017883636210e+00 4.652698358750590e+00 9.251209100135407e+03 + 9060 1.049276594851777e+00 -6.064058947568468e+00 -5.979973919269995e+00 3.442759410417775e+00 4.925588655023684e+00 9.155678309029194e+03 + 9080 9.918661805998126e-01 -5.966781543457326e+00 -5.989011285081634e+00 3.888723022761304e+00 4.761076406313132e+00 9.183340517330136e+03 + 9100 1.043097998987318e+00 -6.019321313890502e+00 -6.013849871457147e+00 3.625738302727086e+00 4.657156171882392e+00 9.259615889429295e+03 + 9120 1.036785088172081e+00 -5.980262880017015e+00 -6.009884505613908e+00 3.840258640696548e+00 4.670166682587443e+00 9.247413539332798e+03 + 9140 9.789414837735084e-01 -5.864837285409031e+00 -6.046999958780339e+00 4.406333413865533e+00 4.360327153784882e+00 9.361885865529463e+03 + 9160 1.032735672841391e+00 -5.914574040801467e+00 -6.046510937536700e+00 4.160783024575714e+00 4.403180946353222e+00 9.360364952724496e+03 + 9180 1.048820574180894e+00 -5.913306563879768e+00 -6.048670364366198e+00 4.136331827703472e+00 4.359051937829967e+00 9.367066883878968e+03 + 9200 1.102916272286579e+00 -5.976446412844500e+00 -6.005362276025407e+00 3.809114410504149e+00 4.643075049404015e+00 9.233512892243549e+03 + 9220 1.020106471684230e+00 -5.842952569818697e+00 -6.055987341861826e+00 4.509948878543689e+00 4.286670250447619e+00 9.389705518197474e+03 + 9240 1.063499030535254e+00 -5.905779325686924e+00 -6.049374439040145e+00 4.196329296411197e+00 4.371783934265024e+00 9.369224244106515e+03 + 9260 9.831228089335664e-01 -5.794820336157807e+00 -6.058288736570042e+00 4.847116780761882e+00 4.334240453991639e+00 9.396825705241983e+03 + 9280 1.067546029595670e+00 -5.937393516846343e+00 -6.012767442625028e+00 4.105451163872145e+00 4.672642417973614e+00 9.256268885243620e+03 + 9300 1.070060199542935e+00 -5.965404811776148e+00 -6.026261696808802e+00 3.859583688312535e+00 4.510134036882516e+00 9.297829181994499e+03 + 9320 1.011676603253283e+00 -5.911827779316992e+00 -6.017160731525385e+00 4.139388535651622e+00 4.534550423849356e+00 9.269783946998074e+03 + 9340 1.004392753977360e+00 -5.936406715757382e+00 -6.005581558932750e+00 4.100563183277258e+00 4.703350528991913e+00 9.234178880473659e+03 + 9360 1.072040378465132e+00 -6.075185475531935e+00 -5.984105573333039e+00 3.252158557648542e+00 4.775153450643913e+00 9.168336450100089e+03 + 9380 1.027991800584641e+00 -6.044690576645766e+00 -5.983403786925880e+00 3.409043321930048e+00 4.760961552601691e+00 9.166177202653271e+03 + 9400 1.015460170146175e+00 -6.055355379100657e+00 -5.967598039759229e+00 3.386797775958455e+00 4.890713998861303e+00 9.117872150062454e+03 + 9420 9.277164053513555e-01 -5.946516163525734e+00 -6.032460310687878e+00 4.009825721860647e+00 4.516321129041834e+00 9.316975296019922e+03 + 9440 1.028688187071396e+00 -6.112842701303800e+00 -5.981429785676115e+00 3.061546210667481e+00 4.816139508284615e+00 9.160138661836780e+03 + 9460 8.823062911491397e-01 -5.907495429295074e+00 -6.035057002222356e+00 4.165093329118388e+00 4.432615037280322e+00 9.324962979642603e+03 + 9480 9.487148977767945e-01 -6.012302741876283e+00 -5.976176060187790e+00 3.587882136842998e+00 4.795327133684247e+00 9.144035256215631e+03 + 9500 9.788746013326195e-01 -6.056998165875655e+00 -5.966584592389978e+00 3.353089749347117e+00 4.872258479757154e+00 9.114743786951982e+03 + 9520 9.462804637740253e-01 -6.004424038086052e+00 -5.990731807575887e+00 3.655124731896214e+00 4.733747638351405e+00 9.188625080820930e+03 + 9540 9.870842078827310e-01 -6.056653307127925e+00 -6.006781522697102e+00 3.356623954916282e+00 4.642995458751768e+00 9.237875496261415e+03 + 9560 9.567080731439971e-01 -6.002127208647144e+00 -5.981233863757245e+00 3.696771376327647e+00 4.816744195920122e+00 9.159499591487505e+03 + 9580 9.126428083279599e-01 -5.921403881952156e+00 -6.001836284559061e+00 4.106722409751839e+00 4.644867107108913e+00 9.222663491142104e+03 + 9600 9.747629701341237e-01 -5.992665615111491e+00 -6.019381939128658e+00 3.711376813681429e+00 4.557967546837073e+00 9.276642740214236e+03 + 9620 1.048171679937623e+00 -6.077481130868685e+00 -5.970460106527288e+00 3.287003408383000e+00 4.901534691601299e+00 9.126605496164279e+03 + 9640 1.002604844972445e+00 -5.985779474754782e+00 -6.008464594358172e+00 3.775672572429824e+00 4.645411105156248e+00 9.243044063358853e+03 + 9660 1.012768162180425e+00 -5.976323284983285e+00 -5.970800828178485e+00 3.863586297685199e+00 4.895297099255785e+00 9.127629574711606e+03 + 9680 9.460434196189967e-01 -5.848809673973721e+00 -6.018393433801712e+00 4.537376521357970e+00 4.563600329423625e+00 9.273579890957326e+03 + 9700 1.040083543218447e+00 -5.957487134633883e+00 -6.006248816293832e+00 3.942551236333663e+00 4.662554114396388e+00 9.236231278178886e+03 + 9720 1.078120582865295e+00 -5.980219920957683e+00 -5.987632979580344e+00 3.745404982499811e+00 4.702838052721379e+00 9.179141009926960e+03 + 9740 1.065959098480569e+00 -5.933100985034915e+00 -5.978317621378944e+00 4.106435965544792e+00 4.846795042405517e+00 9.150599119378992e+03 + 9760 1.041619311912237e+00 -5.868126136015771e+00 -6.038608161697590e+00 4.442553867916603e+00 4.463619694443390e+00 9.335948980511874e+03 + 9780 1.112387100577437e+00 -5.948156711931792e+00 -6.031453981305036e+00 3.986004737345746e+00 4.507698926393800e+00 9.313838479091874e+03 + 9800 1.078116900723983e+00 -5.875907347200986e+00 -5.957942378711030e+00 4.457336772635692e+00 4.986278926824919e+00 9.088378446001607e+03 + 9820 1.096684714146620e+00 -5.883078848821527e+00 -6.001351071871992e+00 4.364102280667699e+00 4.684964873344559e+00 9.221146025201337e+03 + 9840 1.107859076922788e+00 -5.877066314220531e+00 -6.016018352405779e+00 4.273634790471869e+00 4.475750684453764e+00 9.266243552536167e+03 + 9860 1.019892986921529e+00 -5.725521322947404e+00 -6.049404045064248e+00 5.118763019087349e+00 4.258978308003166e+00 9.369296714111288e+03 + 9880 1.162674840810392e+00 -5.918911789561905e+00 -6.021304712648304e+00 4.144656723610029e+00 4.556700713994294e+00 9.282554289293150e+03 + 9900 1.181857539976539e+00 -5.940766526539827e+00 -6.024439476454921e+00 4.020599451829673e+00 4.540136425070052e+00 9.292221161686657e+03 + 9920 1.042830541057546e+00 -5.748972972060615e+00 -6.095022799098583e+00 4.942853002682374e+00 3.955781344792697e+00 9.511062924306727e+03 + 9940 1.057344192286364e+00 -5.804436579073846e+00 -6.027665703086377e+00 4.724533934606615e+00 4.442717759931359e+00 9.302148984327232e+03 + 9960 1.073237774920256e+00 -5.872984821043216e+00 -6.004337585745535e+00 4.397555817930519e+00 4.643307916235162e+00 9.230347088731030e+03 + 9980 1.106753768256607e+00 -5.972024408278690e+00 -5.989821298009029e+00 3.864947826287557e+00 4.762755331396169e+00 9.185814528116402e+03 + 10000 1.062782064138489e+00 -5.957927223060536e+00 -6.027754502803509e+00 3.942889497489095e+00 4.541930451468325e+00 9.302438277605383e+03 + 10020 1.042537879853328e+00 -5.974027835401715e+00 -6.016273109172037e+00 3.871895242664557e+00 4.629316343240381e+00 9.267072695461178e+03 + 10040 9.824528935330273e-01 -5.923353609670399e+00 -5.991845771106131e+00 4.086303248157003e+00 4.693010658065302e+00 9.192039358845515e+03 + 10060 1.009026067214335e+00 -5.993186977710830e+00 -5.961767005443864e+00 3.825805129364932e+00 5.006223472346843e+00 9.100017191871380e+03 + 10080 1.012369647695517e+00 -6.021915851550521e+00 -5.973650075153748e+00 3.628192289885843e+00 4.905341847060869e+00 9.136343337072285e+03 + 10100 9.839540576276056e-01 -6.001448457337824e+00 -6.050142978242833e+00 3.651739740940596e+00 4.372128266451278e+00 9.371575626376309e+03 + 10120 9.874738092876713e-01 -6.024245994287664e+00 -6.018110015127808e+00 3.507016292061510e+00 4.542250033937114e+00 9.272758919002190e+03 + 10140 9.772970721197446e-01 -6.027333634718453e+00 -6.010490467958778e+00 3.536501474921955e+00 4.633217544927636e+00 9.249253759284773e+03 + 10160 9.131511494721745e-01 -5.946162283591611e+00 -6.004402456138424e+00 4.004246556709828e+00 4.669822473308455e+00 9.230553626379216e+03 + 10180 9.801757437641923e-01 -6.054496280302692e+00 -5.949986650364843e+00 3.476768842320137e+00 5.076879310236231e+00 9.064137866066840e+03 + 10200 9.904875027833777e-01 -6.074972341924766e+00 -5.983054466221962e+00 3.331524889168096e+00 4.859331555698887e+00 9.165096892041263e+03 + 10220 9.955464454554274e-01 -6.084836956399575e+00 -6.012829441788008e+00 3.225455306457840e+00 4.638933598484329e+00 9.256484659487238e+03 + 10240 9.075006830368464e-01 -5.954363392774244e+00 -6.025069412893169e+00 3.985646594623759e+00 4.579641685379642e+00 9.294162053585482e+03 + 10260 9.199302775779932e-01 -5.968762266516940e+00 -5.969655614967563e+00 3.887132337200949e+00 4.882002592152249e+00 9.124108915991603e+03 + 10280 1.015454521710652e+00 -6.097950904199731e+00 -5.965431436201008e+00 3.157027543140851e+00 4.917974835710917e+00 9.111242842938962e+03 + 10300 9.904370786584795e-01 -6.044835999991675e+00 -5.982792007482603e+00 3.469308506122033e+00 4.825574712385935e+00 9.164295921759409e+03 + 10320 1.042884323798245e+00 -6.100165225806546e+00 -5.976957246913199e+00 3.137135579975738e+00 4.844614861154449e+00 9.146448308135014e+03 + 10340 9.978575966735166e-01 -6.007263783462824e+00 -5.967242347509822e+00 3.653197492189464e+00 4.883006770728799e+00 9.116738737971184e+03 + 10360 1.017390393751297e+00 -6.006634167465231e+00 -5.934117292484586e+00 3.691911380225945e+00 5.108314498314948e+00 9.015879935005583e+03 + 10380 1.011763668369974e+00 -5.964535864620655e+00 -5.973430823651527e+00 3.854269594797032e+00 4.803193363551301e+00 9.135641207758668e+03 + 10400 1.006294621833472e+00 -5.921058678604258e+00 -5.981444576165668e+00 4.131868630047681e+00 4.785123461562620e+00 9.160141819685843e+03 + 10420 1.088962771933305e+00 -6.011497716545380e+00 -5.998556861239488e+00 3.623467161009761e+00 4.697775554767079e+00 9.212616640389639e+03 + 10440 1.019311325497249e+00 -5.885100156046828e+00 -6.015238600405290e+00 4.310680853664079e+00 4.563405767298616e+00 9.263878567206251e+03 + 10460 9.824141619172314e-01 -5.815566925582319e+00 -6.049166210928774e+00 4.638421436962689e+00 4.297058191130762e+00 9.368553257047512e+03 + 10480 1.039227562698450e+00 -5.890200573021524e+00 -6.017732625877509e+00 4.277915220318094e+00 4.545606437297631e+00 9.271557511978977e+03 + 10500 1.013217216499692e+00 -5.851011735149619e+00 -6.070085553719180e+00 4.446632312656345e+00 4.188676544866071e+00 9.433431767275655e+03 + 10520 1.062279317409516e+00 -5.930592597578407e+00 -6.034238238304610e+00 4.067816578327991e+00 4.472667270167066e+00 9.322438997258418e+03 + 10540 1.037690557252582e+00 -5.908917384402380e+00 -6.034196847415637e+00 4.173344106119112e+00 4.453970042562747e+00 9.322299392743840e+03 + 10560 1.057948486647663e+00 -5.957968130810841e+00 -6.020218881627506e+00 3.888325063975439e+00 4.530871619513592e+00 9.279212568123232e+03 + 10580 1.049447309014212e+00 -5.969579705589926e+00 -6.007406918928693e+00 3.827239809531239e+00 4.610030096797692e+00 9.239830476939771e+03 + 10600 1.081233708254768e+00 -6.044211148743543e+00 -6.005547033495003e+00 3.471817697902211e+00 4.693833030911822e+00 9.234086084549992e+03 + 10620 1.037882007268125e+00 -6.008130085361410e+00 -6.003640545608080e+00 3.651453823006729e+00 4.677233455024378e+00 9.228237773507257e+03 + 10640 1.002011179069096e+00 -5.977919837210095e+00 -5.978827604055644e+00 3.831243770756652e+00 4.826031233053047e+00 9.152156555214324e+03 + 10660 9.191693871012315e-01 -5.868584758489209e+00 -6.023390541535559e+00 4.276069223614195e+00 4.387150461244552e+00 9.288983023738641e+03 + 10680 1.017800701473648e+00 -6.022111649766810e+00 -6.013130530073434e+00 3.527647639787632e+00 4.579218618890773e+00 9.257358255075036e+03 + 10700 9.959971034611009e-01 -5.995642208164071e+00 -5.995025318916811e+00 3.689856193239597e+00 4.693398466760667e+00 9.201791378094571e+03 + 10720 9.652774858413338e-01 -5.953724782843397e+00 -6.013114345438640e+00 3.946560759681575e+00 4.605536700754576e+00 9.257349825790012e+03 + 10740 1.049449200613198e+00 -6.081318918629134e+00 -6.004749357649367e+00 3.262550939653003e+00 4.702225207900090e+00 9.231629294717548e+03 + 10760 1.025841480270781e+00 -6.050044995863201e+00 -6.017178447483561e+00 3.422739345900134e+00 4.611464152777955e+00 9.269850734454205e+03 + 10780 9.262053658743513e-01 -5.905647758659430e+00 -6.032833296806214e+00 4.225555343587694e+00 4.495236301650441e+00 9.318098276851128e+03 + 10800 9.667228040797280e-01 -5.967755568495869e+00 -6.021129911326202e+00 3.868201683391729e+00 4.561717947207101e+00 9.282042410770426e+03 + 10820 9.698155457884314e-01 -5.972584742832305e+00 -6.044154767856118e+00 3.817085213110897e+00 4.406119053998585e+00 9.353093208085902e+03 + 10840 1.009894503388891e+00 -6.032495116073739e+00 -6.018473165562448e+00 3.489091355214843e+00 4.569607564940505e+00 9.273867172695398e+03 + 10860 1.008072085554609e+00 -6.032026729179854e+00 -6.021847075476702e+00 3.498229858248470e+00 4.556683005108287e+00 9.284210446461891e+03 + 10880 1.004708032182679e+00 -6.027669550773167e+00 -5.962792414629952e+00 3.591143956208357e+00 4.963678511647073e+00 9.103146752833105e+03 + 10900 9.884308822651190e-01 -6.001192920280648e+00 -6.010633084591926e+00 3.738417658217239e+00 4.684210773881174e+00 9.249714563650543e+03 + 10920 1.033092893488223e+00 -6.064527962658701e+00 -6.023550677113668e+00 3.330316750412575e+00 4.565614665226600e+00 9.289498191456823e+03 + 10940 1.014486724481529e+00 -6.035096993321953e+00 -6.038072432722831e+00 3.458925579544984e+00 4.441840146057386e+00 9.334295667558827e+03 + 10960 1.028030684552815e+00 -6.054818058945912e+00 -5.994100191086344e+00 3.379552051838103e+00 4.728203445147431e+00 9.198958876149241e+03 + 10980 9.681596892005307e-01 -5.965910145771780e+00 -5.976132434405902e+00 3.874437336999790e+00 4.815739373768604e+00 9.143918056697232e+03 + 11000 9.537240445728551e-01 -5.941843499088440e+00 -5.981042451904003e+00 4.026383306783371e+00 4.801296853698068e+00 9.158930299432537e+03 + 11020 9.922668799709220e-01 -5.991669364431152e+00 -6.026007958332180e+00 3.734315729496472e+00 4.537138209436536e+00 9.297029312125607e+03 + 11040 1.074662614043527e+00 -6.103773264493199e+00 -6.023687271410833e+00 3.113400323166056e+00 4.573266488712378e+00 9.289921366493900e+03 + 11060 1.017535448474088e+00 -6.008984187702763e+00 -6.048439029021065e+00 3.648983701020969e+00 4.422427896554323e+00 9.366354751637838e+03 + 11080 9.841443207394001e-01 -5.951640274586071e+00 -6.025844019806799e+00 3.955730502192746e+00 4.529641114142862e+00 9.296554966282294e+03 + 11100 9.722037192109234e-01 -5.924907390698005e+00 -5.997322136247743e+00 4.094856277254687e+00 4.679039602162432e+00 9.208839049151047e+03 + 11120 1.006787203558836e+00 -5.966142577868007e+00 -5.961218300188949e+00 3.931449262301388e+00 4.959725226764050e+00 9.098352949235779e+03 + 11140 1.023833601903766e+00 -5.981555234537621e+00 -5.986092286292642e+00 3.779374161582284e+00 4.753321708298460e+00 9.174392841116220e+03 + 11160 9.814120578547727e-01 -5.905981103915170e+00 -5.956264299695937e+00 4.264453455636060e+00 4.975719564163499e+00 9.083236079902754e+03 + 11180 1.035507342033103e+00 -5.971384207677268e+00 -5.984630226911241e+00 3.813484284622155e+00 4.737423592365832e+00 9.169899882888370e+03 + 11200 1.014673255722701e+00 -5.924156880947510e+00 -6.036737893060928e+00 4.113232613871728e+00 4.466775020461166e+00 9.330151088269064e+03 + 11220 1.027101674241339e+00 -5.928677878447156e+00 -6.072655555881941e+00 4.057520169928059e+00 4.230778065623954e+00 9.441442466022509e+03 + 11240 1.009535419846097e+00 -5.895916945114865e+00 -6.045643335348117e+00 4.249700095346263e+00 4.389947992542924e+00 9.357681609585836e+03 + 11260 1.056474828979347e+00 -5.962171015147373e+00 -6.035701183637293e+00 3.862866806938879e+00 4.440645200712957e+00 9.326982705941058e+03 + 11280 1.073505805376476e+00 -5.992646152004697e+00 -6.007312965760439e+00 3.759790844205411e+00 4.675571729937843e+00 9.239490550968980e+03 + 11300 1.027837941948915e+00 -5.937895383553011e+00 -5.929020962089674e+00 4.029823941446037e+00 5.080782242800801e+00 9.000428403194948e+03 + 11320 9.679178384492290e-01 -5.863364184537270e+00 -5.987730208531579e+00 4.397029340781053e+00 4.682900385425721e+00 9.179371101404571e+03 + 11340 1.031896210002186e+00 -5.975610495624409e+00 -6.008444604154413e+00 3.886094272446564e+00 4.697555740205408e+00 9.242949487151007e+03 + 11360 9.756252298265461e-01 -5.917320970225714e+00 -6.047507455947283e+00 4.121002814304926e+00 4.373451866998121e+00 9.363469137323824e+03 + 11380 1.012672441073498e+00 -6.005482875820356e+00 -5.997605046344849e+00 3.681545703448684e+00 4.726781419387216e+00 9.209710367818236e+03 + 11400 9.875214243974701e-01 -6.004695378857832e+00 -6.000895329816085e+00 3.629533295244342e+00 4.651353764897743e+00 9.219781692041966e+03 + 11420 9.922960109224869e-01 -6.046560552754995e+00 -5.977040107336223e+00 3.510470391074532e+00 4.909667546923281e+00 9.146680816497288e+03 + 11440 1.012843080183593e+00 -6.105728371683282e+00 -5.981421775193635e+00 3.095607317494015e+00 4.809395030921207e+00 9.160115723110732e+03 + 11460 1.008050047071573e+00 -6.121347042898979e+00 -5.946335228853945e+00 3.085238309416540e+00 5.090183228653821e+00 9.053056570579782e+03 + 11480 9.687681671469743e-01 -6.080525904368686e+00 -5.951750855046871e+00 3.312704036682407e+00 5.052150297762749e+00 9.069540996965261e+03 + 11500 9.088836695462323e-01 -6.001387047600026e+00 -6.009976170629004e+00 3.679052430933058e+00 4.629732357338172e+00 9.247693077136599e+03 + 11520 9.951724902988180e-01 -6.133607397720047e+00 -5.968623800720589e+00 2.990270745564536e+00 4.937632090664543e+00 9.120983355757238e+03 + 11540 9.376707590320388e-01 -6.047205264356971e+00 -5.945620132563029e+00 3.451435012294503e+00 5.034752559303660e+00 9.050857174923454e+03 + 11560 9.748801426975526e-01 -6.094398794535675e+00 -5.929034173124574e+00 3.147932612041331e+00 5.097481858276339e+00 9.000459128102664e+03 + 11580 9.505487071155164e-01 -6.041111040984991e+00 -5.937427674852026e+00 3.510085505506332e+00 5.105451438790873e+00 9.025957331551010e+03 + 11600 9.622138807647858e-01 -6.032977400867259e+00 -5.972399332485563e+00 3.568870778357429e+00 4.916719421430914e+00 9.132497024245227e+03 + 11620 9.808364142709015e-01 -6.031633431503484e+00 -5.969893033923491e+00 3.510737877810404e+00 4.865260795010367e+00 9.124854807914033e+03 + 11640 9.368128661161454e-01 -5.935512719511946e+00 -5.996191897077992e+00 4.050322741992083e+00 4.701893514335465e+00 9.205333547496100e+03 + 11660 9.939384690669947e-01 -5.990149772087907e+00 -5.991804094532365e+00 3.764537199663331e+00 4.755037824181681e+00 9.191889666351990e+03 + 11680 1.031176591633643e+00 -6.018393478922981e+00 -5.992203247543886e+00 3.618726950753056e+00 4.769115312257031e+00 9.193114970175029e+03 + 11700 1.026333415010537e+00 -5.993285983281188e+00 -5.998795351882253e+00 3.714450677654117e+00 4.682815030574766e+00 9.213353653188040e+03 + 11720 1.023903335911007e+00 -5.979767390997818e+00 -6.018795532255941e+00 3.788822601208074e+00 4.564716974518594e+00 9.274847496489676e+03 + 11740 1.063973422247846e+00 -6.036133468204518e+00 -6.007709969872422e+00 3.502055225241880e+00 4.665267351186932e+00 9.240710733767537e+03 + 11760 1.001232523245312e+00 -5.943014891062190e+00 -6.014831546187494e+00 3.934358758622791e+00 4.521976411301829e+00 9.262646407561469e+03 + 11780 1.028605356124832e+00 -5.985580523188041e+00 -6.013435845506908e+00 3.788143090306529e+00 4.628193518954393e+00 9.258339362056562e+03 + 11800 9.829852024559178e-01 -5.924538657734039e+00 -5.990024246040984e+00 4.046232234234598e+00 4.670203852314081e+00 9.186436983498932e+03 + 11820 9.668595446891648e-01 -5.906130730282630e+00 -6.002347042959519e+00 4.189844620207651e+00 4.637355663390687e+00 9.224210300696834e+03 + 11840 9.665569284796279e-01 -5.911368672867480e+00 -6.028853998703951e+00 4.134332382403381e+00 4.459713460654949e+00 9.305815507115014e+03 + 11860 9.420107033072974e-01 -5.879826944255774e+00 -6.013522395740694e+00 4.314613972629463e+00 4.546914000898800e+00 9.258594832639512e+03 + 11880 9.706963715011303e-01 -5.926588993370581e+00 -6.038891680192034e+00 4.014996543168088e+00 4.370137136654689e+00 9.336830676625586e+03 + 11900 1.031829254703316e+00 -6.022143357234981e+00 -6.028180106940601e+00 3.588699978105402e+00 4.554036027111736e+00 9.303747512547789e+03 + 11920 1.083590856041194e+00 -6.109430703077940e+00 -6.000633971358427e+00 3.113669027628229e+00 4.738396697401489e+00 9.219010235958558e+03 + 11940 1.018825931777119e+00 -6.028304836282217e+00 -6.008723607218321e+00 3.499353607664596e+00 4.611792055134894e+00 9.243841220815502e+03 + 11960 9.921154876310159e-01 -6.005916695499235e+00 -5.975317382305399e+00 3.689331855134716e+00 4.865037846722134e+00 9.141414014995440e+03 + 11980 9.128976380662722e-01 -5.906178649011517e+00 -5.985161244697197e+00 4.222389862117776e+00 4.768859575173418e+00 9.171495611095059e+03 + 12000 9.936365493014621e-01 -6.040262978868384e+00 -5.917453138138081e+00 3.487428661589617e+00 5.192621771824454e+00 8.965356477479274e+03 + 12020 1.021082686198270e+00 -6.090201941847695e+00 -5.957874062676535e+00 3.236539089531557e+00 4.996386249405480e+00 9.088192558803965e+03 + 12040 9.446713296686358e-01 -5.987015476276399e+00 -6.022496599392487e+00 3.758680955135377e+00 4.554942855516744e+00 9.286257249072985e+03 + 12060 9.812553265687054e-01 -6.052874638990982e+00 -6.024938546704787e+00 3.381790741361544e+00 4.542204106365189e+00 9.293776781068053e+03 + 12080 9.836325727811694e-01 -6.070668039313007e+00 -5.977087980733996e+00 3.311022080432358e+00 4.848373258260301e+00 9.146847159661207e+03 + 12100 9.733129906534999e-01 -6.068663267479435e+00 -5.948082500370528e+00 3.317252181535941e+00 5.009645606088684e+00 9.058353116841852e+03 + 12120 9.762342734466067e-01 -6.083307343685128e+00 -5.962626527758808e+00 3.236358550962773e+00 4.929326471307617e+00 9.102678583375000e+03 + 12140 8.668529164497186e-01 -5.928090872192326e+00 -6.007146634343116e+00 4.081028772240834e+00 4.627078352131344e+00 9.238980811316243e+03 + 12160 9.409951141521423e-01 -6.041543913746894e+00 -5.939412860996989e+00 3.565883255885642e+00 5.152335565504931e+00 9.031963970251563e+03 + 12180 1.003506225645033e+00 -6.129148366304634e+00 -5.972961870275594e+00 3.012661789625465e+00 4.909508819606355e+00 9.134204292112059e+03 + 12200 9.372706188133398e-01 -6.016424230767914e+00 -6.011501527699544e+00 3.606228798998631e+00 4.634495721803049e+00 9.252396447144802e+03 + 12220 9.871702099326898e-01 -6.068962112158292e+00 -6.011938531717732e+00 3.318941825099819e+00 4.646380048360073e+00 9.253742163710487e+03 + 12240 9.432562850867839e-01 -5.975034766069568e+00 -6.051200510294937e+00 3.825535516664446e+00 4.388180026711553e+00 9.374892515038211e+03 + 12260 1.012356869432345e+00 -6.045711524006354e+00 -5.982311854500773e+00 3.499173786612128e+00 4.863224499980320e+00 9.162837475887362e+03 + 12280 9.667773918214954e-01 -5.944047852540212e+00 -5.984915420871344e+00 4.044049208117990e+00 4.809381306524872e+00 9.170758236034731e+03 + 12300 9.546881029827269e-01 -5.890214345389857e+00 -5.983889520691763e+00 4.317584576667389e+00 4.779687223897312e+00 9.167622820388759e+03 + 12320 1.012688224095185e+00 -5.943441354802263e+00 -6.007257119937497e+00 4.002692846953775e+00 4.636252848089524e+00 9.239325748663687e+03 + 12340 1.046428021950719e+00 -5.966617548869865e+00 -5.973768885203241e+00 3.885459563552900e+00 4.844395483660930e+00 9.136712514234390e+03 + 12360 1.051536522785374e+00 -5.952808502232223e+00 -6.030061118594013e+00 3.963090083986544e+00 4.519493606033399e+00 9.309572125300614e+03 + 12380 1.098800361680690e+00 -6.011120842743171e+00 -6.019548756949925e+00 3.602636604026077e+00 4.554242216435386e+00 9.277141018114015e+03 + 12400 1.004504307056334e+00 -5.867103321160864e+00 -6.080114007420112e+00 4.392282832411368e+00 4.169142508613604e+00 9.464602221534666e+03 + 12420 1.006343669651734e+00 -5.874787232707534e+00 -6.013726158375403e+00 4.395333258605750e+00 4.597524446691586e+00 9.259226184573574e+03 + 12440 1.046288880276163e+00 -5.944309691551034e+00 -5.971828670948153e+00 3.962948013759905e+00 4.804929775513344e+00 9.130753347008769e+03 + 12460 1.054296850413643e+00 -5.968049715350995e+00 -5.979943244797585e+00 3.903791982543229e+00 4.835497495943171e+00 9.155511097616454e+03 + 12480 1.076144745519811e+00 -6.015354301615249e+00 -5.946730052875632e+00 3.616583407464474e+00 5.010634463295528e+00 9.054264731331319e+03 + 12500 1.022943210207720e+00 -5.956244532985490e+00 -6.036877110788494e+00 3.910273739551172e+00 4.447268999955235e+00 9.330593935103736e+03 + 12520 9.887961814755137e-01 -5.931760194440408e+00 -6.006649492040931e+00 4.084398861423808e+00 4.654372925520257e+00 9.237482394115003e+03 + 12540 1.013387562013467e+00 -6.000393955030078e+00 -6.031900478880081e+00 3.705245782069585e+00 4.524330446504058e+00 9.315232455684438e+03 + 12560 9.969098266830383e-01 -6.011190819273282e+00 -6.045660195551387e+00 3.620460240002740e+00 4.422531747295120e+00 9.357749842389620e+03 + 12580 1.002251677571879e+00 -6.055027141064377e+00 -6.010807484109926e+00 3.371762946614229e+00 4.625679059816482e+00 9.250278931036046e+03 + 12600 9.282518067092916e-01 -5.976746757508428e+00 -6.011705716033195e+00 3.798359631798945e+00 4.597619882068383e+00 9.253000279254489e+03 + 12620 9.545766676823163e-01 -6.038570625496161e+00 -5.981404528154663e+00 3.484799664208816e+00 4.813056241568672e+00 9.160050295622394e+03 + 12640 9.429581438290054e-01 -6.033768797923829e+00 -6.001992499391473e+00 3.496457966350360e+00 4.678922389889458e+00 9.223147140809169e+03 + 12660 9.104948121606214e-01 -5.990625215167247e+00 -6.005302438822258e+00 3.744006334926893e+00 4.659727445406801e+00 9.233307758194469e+03 + 12680 9.730728906488229e-01 -6.082248158023729e+00 -5.964043624606446e+00 3.330773163046458e+00 5.009521886020927e+00 9.106981627627800e+03 + 12700 9.448463075761803e-01 -6.034866028153978e+00 -5.991524187305273e+00 3.506120065389001e+00 4.754995622670460e+00 9.191056158710204e+03 + 12720 9.660760426471577e-01 -6.059147830629197e+00 -5.993227885799763e+00 3.392129391067980e+00 4.770651915357087e+00 9.196268447382396e+03 + 12740 1.003859220232606e+00 -6.106130324046015e+00 -5.952697472093877e+00 3.152064989821686e+00 5.033100169387962e+00 9.072409577247410e+03 + 12760 9.723320335523702e-01 -6.047526379932048e+00 -5.981877207007941e+00 3.406881134769545e+00 4.783848844876443e+00 9.161517485923019e+03 + 12780 9.688533895390007e-01 -6.027604122064929e+00 -6.016732815077759e+00 3.537356306704929e+00 4.599781033754578e+00 9.268495774764344e+03 + 12800 9.883777549893901e-01 -6.042874058242262e+00 -6.002351687662585e+00 3.451548945664995e+00 4.684234668350083e+00 9.224287468922868e+03 + 12820 1.018431618328430e+00 -6.074955785427985e+00 -5.966535039394754e+00 3.304381040324913e+00 4.926949742103953e+00 9.114603918316487e+03 + 12840 9.567449284977366e-01 -5.969317766158151e+00 -5.998310271510414e+00 3.896851276666259e+00 4.730371824357865e+00 9.211832061602032e+03 + 12860 9.224980491058583e-01 -5.902560302180225e+00 -5.982873831733098e+00 4.209827498723163e+00 4.748654783552037e+00 9.164548669616894e+03 + 12880 1.008008264748782e+00 -6.009926678683335e+00 -5.996034828786046e+00 3.610291024040890e+00 4.690060175907952e+00 9.204848704307260e+03 + 12900 1.058209656703621e+00 -6.063082317312167e+00 -5.961935120418953e+00 3.352572293274985e+00 4.933375150313951e+00 9.100580677515885e+03 + 12920 9.698236900208641e-01 -5.911592768809861e+00 -6.049807552568206e+00 4.154929178276744e+00 4.361278501267665e+00 9.370581299358122e+03 + 12940 1.052181367921238e+00 -6.017708279389982e+00 -6.007290014837530e+00 3.572592554097738e+00 4.632415841379148e+00 9.239437206502558e+03 + 12960 1.012727559202565e+00 -5.946755943425700e+00 -6.014578640587840e+00 3.970353573233212e+00 4.580905150599737e+00 9.261875673819126e+03 + 12980 1.046639767181839e+00 -5.986892370320407e+00 -6.009292350011466e+00 3.731756609309503e+00 4.603132459537789e+00 9.245573082319206e+03 + 13000 9.862625447977591e-01 -5.890123585110835e+00 -6.027184012338742e+00 4.293561362559682e+00 4.506539179384479e+00 9.300668667748032e+03 + 13020 1.020818141011533e+00 -5.935412169568536e+00 -6.002028041519155e+00 4.047056004216996e+00 4.664537358703673e+00 9.223287750057447e+03 + 13040 9.875746366692447e-01 -5.883273136781042e+00 -6.033228209782699e+00 4.297445107940162e+00 4.436379873292096e+00 9.319302949589714e+03 + 13060 1.032217254715105e+00 -5.949148353462636e+00 -6.017661116001882e+00 3.968626230353882e+00 4.575215345537790e+00 9.271338906193248e+03 + 13080 1.028181637733138e+00 -5.946287890245642e+00 -6.029583358749967e+00 3.996110643475530e+00 4.517815173391603e+00 9.308083981093983e+03 + 13100 1.076523285493425e+00 -6.032669563333755e+00 -6.032518246382167e+00 3.478282244139011e+00 4.479151129491255e+00 9.317163390583468e+03 + 13120 1.066424524098081e+00 -6.045803936336907e+00 -6.005718222311781e+00 3.477047020036573e+00 4.707225393213038e+00 9.234624444904259e+03 + 13140 1.040112053762905e+00 -6.046858256240305e+00 -5.965185991692822e+00 3.500172089255986e+00 4.969146871029723e+00 9.110481541518930e+03 + 13160 9.771776086825158e-01 -5.998414418418232e+00 -5.985249744747446e+00 3.776697246755947e+00 4.852290840200268e+00 9.171734546182493e+03 + 13180 1.029850553093112e+00 -6.118059487021155e+00 -5.967660831628075e+00 3.045597101434379e+00 4.909209454818141e+00 9.118027742727234e+03 + 13200 9.197616144938635e-01 -5.988550785817424e+00 -5.956798991196708e+00 3.819150495713135e+00 5.001474213999619e+00 9.084894977804215e+03 + 13220 8.855935729999710e-01 -5.958424069653322e+00 -5.972232091412314e+00 3.947504284121817e+00 4.868216486397226e+00 9.131999226519147e+03 + 13240 9.794652785409539e-01 -6.108650965950458e+00 -5.968379323494716e+00 3.110119599996902e+00 4.915581077944291e+00 9.120247573611590e+03 + 13260 9.637767044175340e-01 -6.090701838341100e+00 -6.023270520690153e+00 3.171239160811156e+00 4.558440221725574e+00 9.288632148269577e+03 + 13280 9.452164966529814e-01 -6.065098818080330e+00 -5.981138959702298e+00 3.357784877859307e+00 4.839895377412065e+00 9.159259960900450e+03 + 13300 9.278959487064370e-01 -6.035660704295840e+00 -6.009862760202399e+00 3.509630429252612e+00 4.657766216456102e+00 9.247351810164537e+03 + 13320 9.595362917539829e-01 -6.071465399039795e+00 -6.031643569806985e+00 3.294870913142138e+00 4.523534019005088e+00 9.314453704476618e+03 + 13340 9.805624617854728e-01 -6.085190074157312e+00 -5.988327127657031e+00 3.221796621359888e+00 4.777998649657031e+00 9.181293738467939e+03 + 13360 9.564863138806143e-01 -6.028027073372440e+00 -5.990019601011497e+00 3.561791510268483e+00 4.780036298202358e+00 9.186432799782106e+03 + 13380 1.017249245072571e+00 -6.089673368403393e+00 -5.969905569928443e+00 3.239062186477798e+00 4.926787419327875e+00 9.124908149263345e+03 + 13400 9.860846812565249e-01 -6.010790841497132e+00 -6.020038489940672e+00 3.665909761213462e+00 4.612808332781688e+00 9.278692902879280e+03 + 13420 9.617480303310642e-01 -5.941670688533135e+00 -6.075114204473765e+00 3.963182405633642e+00 4.196929086785190e+00 9.449064704569932e+03 + 13440 9.422580794241145e-01 -5.883039193763986e+00 -6.043125360475765e+00 4.325496353967473e+00 4.406256811454210e+00 9.349897510993082e+03 + 13460 1.063611572978500e+00 -6.035655157937191e+00 -6.004283858156993e+00 3.483781313764660e+00 4.663920171795509e+00 9.230202331206068e+03 + 13480 1.019972782762877e+00 -5.949986820005857e+00 -6.035211668302278e+00 3.945866976127029e+00 4.456492708706330e+00 9.325443452036052e+03 + 13500 9.858598643386435e-01 -5.886243240473112e+00 -6.037245731370238e+00 4.267204306987614e+00 4.400124636696376e+00 9.331712727227063e+03 + 13520 1.047216680259085e+00 -5.970525409645569e+00 -5.991014817592088e+00 3.882184408775273e+00 4.764531057620733e+00 9.189486268518549e+03 + 13540 1.012813642199252e+00 -5.917045534507268e+00 -6.016879334860818e+00 4.150392844857342e+00 4.577131713996587e+00 9.268932707567043e+03 + 13560 1.003265927948378e+00 -5.905321558213074e+00 -5.982774922662885e+00 4.201108594815326e+00 4.756359390275097e+00 9.164230230697767e+03 + 13580 9.728317627239790e-01 -5.864141905152371e+00 -5.998456274726784e+00 4.418493197806667e+00 4.647239302628871e+00 9.212263676175953e+03 + 13600 1.062511192606216e+00 -6.000848606645679e+00 -5.963486470013160e+00 3.718001485725216e+00 4.932540656041093e+00 9.105286590344953e+03 + 13620 9.944470366193420e-01 -5.905069242254024e+00 -6.010969941921219e+00 4.187794103876942e+00 4.579695898307602e+00 9.250746900405089e+03 + 13640 1.052983168544651e+00 -5.999674691804699e+00 -6.026482450514163e+00 3.651897312924177e+00 4.497963013927182e+00 9.298527569248752e+03 + 13660 9.948285228931260e-01 -5.923482826028681e+00 -6.048022268965010e+00 4.118721808671049e+00 4.403597054914138e+00 9.365047555838521e+03 + 13680 1.008833465975767e+00 -5.956245161446682e+00 -6.024708353216541e+00 4.016567752412502e+00 4.623441510625284e+00 9.292994359121565e+03 + 13700 1.041611328897764e+00 -6.017120393368925e+00 -5.993182931005585e+00 3.633817548521341e+00 4.771270161721974e+00 9.196123608793143e+03 + 13720 1.097039987299764e+00 -6.110198534360299e+00 -5.971062841274488e+00 3.122278772638490e+00 4.921217453516133e+00 9.128438445485421e+03 + 13740 1.045277027607819e+00 -6.044370630199463e+00 -5.976870550262293e+00 3.478315088227706e+00 4.865910992830545e+00 9.146175162997592e+03 + 13760 1.043205741031296e+00 -6.050534985556409e+00 -5.974205437742651e+00 3.416593462837814e+00 4.854889538343758e+00 9.138028143313251e+03 + 13780 9.063476619276001e-01 -5.856395031904208e+00 -6.002017369452898e+00 4.490747970006066e+00 4.654561972817582e+00 9.223222640258713e+03 + 13800 9.936159624019997e-01 -5.990392703823709e+00 -5.968742964348268e+00 3.722495325514806e+00 4.846811479869147e+00 9.121338368793360e+03 + 13820 1.017297040734155e+00 -6.026751134163661e+00 -6.013074779175863e+00 3.566883226355780e+00 4.645414973104812e+00 9.257227670348386e+03 + 13840 1.028205875824722e+00 -6.045273320395550e+00 -6.016070122164336e+00 3.441137377161181e+00 4.608826660585129e+00 9.266439287610217e+03 + 13860 1.057474035231557e+00 -6.092367041448914e+00 -5.979541503729791e+00 3.176552352949079e+00 4.824414050227821e+00 9.154357577156265e+03 + 13880 9.565213607707287e-01 -5.946596497454079e+00 -6.012588176211166e+00 4.012647435490965e+00 4.633713003888491e+00 9.255727864738592e+03 + 13900 1.009951541446198e+00 -6.027940255328508e+00 -5.991101279353382e+00 3.571363538175433e+00 4.782898639037716e+00 9.189741571120921e+03 + 13920 1.060426624950769e+00 -6.103552218976274e+00 -5.996321247059604e+00 3.157862471567484e+00 4.773599306252279e+00 9.205770188538536e+03 + 13940 1.020796304156536e+00 -6.047973470179844e+00 -6.013833936049226e+00 3.415827590169402e+00 4.611862078223245e+00 9.259573438135360e+03 + 13960 9.688319700885443e-01 -5.975161100952267e+00 -5.949337114740882e+00 3.862059762578487e+00 5.010345087653210e+00 9.062148920818714e+03 + 13980 9.717995189189411e-01 -5.980866352318083e+00 -5.905720321617858e+00 3.810228664818141e+00 5.241728801909503e+00 8.929845348688315e+03 + 14000 9.902082230717405e-01 -6.002557929457116e+00 -5.970815940590418e+00 3.690462572351313e+00 4.872729984480795e+00 9.127584429663788e+03 + 14020 9.774126390981804e-01 -5.972779347995193e+00 -5.982744454146278e+00 3.898781060421271e+00 4.841559878806546e+00 9.164142793343401e+03 + 14040 9.993847287378332e-01 -5.990413789568542e+00 -5.995804987946816e+00 3.832452013032250e+00 4.801494917658952e+00 9.204165978999381e+03 + 14060 1.027455782402183e+00 -6.011902961460427e+00 -6.043802976812951e+00 3.571285238555380e+00 4.388110413889768e+00 9.352012653753844e+03 + 14080 1.021964547008326e+00 -5.973798309097214e+00 -5.995300463360326e+00 3.870814182833477e+00 4.747345485607074e+00 9.202618012136081e+03 + 14100 1.094163790166205e+00 -6.033124954348923e+00 -6.005109087131116e+00 3.554859293389214e+00 4.715730738395306e+00 9.232735439293487e+03 + 14120 1.059002607549278e+00 -5.923278480214687e+00 -6.044181891517956e+00 4.108143630060153e+00 4.413897532614349e+00 9.353199121130050e+03 + 14140 1.091470221148424e+00 -5.919914498084180e+00 -6.037429510331143e+00 4.098453051811305e+00 4.423663666099873e+00 9.332322614204319e+03 + 14160 1.048352675169480e+00 -5.817158433825469e+00 -6.051947481997662e+00 4.687246970658661e+00 4.339051922566150e+00 9.377168776264632e+03 + 14180 1.081165798820521e+00 -5.843514379823632e+00 -6.022180369014292e+00 4.569661881375913e+00 4.543734122970671e+00 9.285236864644210e+03 + 14200 1.103525510205556e+00 -5.866842670330175e+00 -6.043626216785276e+00 4.460193038747022e+00 4.445074557836434e+00 9.351426958736041e+03 + 14220 1.152953746866324e+00 -5.945574789361446e+00 -6.047840224565404e+00 3.959194425341438e+00 4.371970470875358e+00 9.364459573091732e+03 + 14240 1.060571639307739e+00 -5.829887378726657e+00 -6.065838753870069e+00 4.585565469742528e+00 4.230696160311759e+00 9.420209084155020e+03 + 14260 1.081696966328759e+00 -5.892578224014195e+00 -6.000794929711442e+00 4.270831244327438e+00 4.649434173732761e+00 9.219464588312712e+03 + 14280 1.066694503502946e+00 -5.909248160495229e+00 -6.025427035808105e+00 4.172829517647796e+00 4.505712436978418e+00 9.295258017468965e+03 + 14300 1.061024901607693e+00 -5.940428224763174e+00 -6.016502520430822e+00 3.989792052876566e+00 4.552961674693723e+00 9.267775044805019e+03 + 14320 1.021582786743855e+00 -5.917970021489351e+00 -6.034414538896677e+00 4.144527223973610e+00 4.475884785289911e+00 9.322971510600943e+03 + 14340 9.958850001190119e-01 -5.910810869089333e+00 -6.004304456918030e+00 4.217179708370615e+00 4.680325058972279e+00 9.230248723293766e+03 + 14360 1.053437587973987e+00 -6.019898538737448e+00 -6.005299600318861e+00 3.671625235613868e+00 4.755454599191813e+00 9.233308853978338e+03 + 14380 9.541316908247983e-01 -5.893535860182322e+00 -6.076319082577913e+00 4.306072069066847e+00 4.256502520459110e+00 9.452824332325059e+03 + 14400 1.029215163989680e+00 -6.024522662461229e+00 -5.961539659937682e+00 3.565507050431850e+00 4.927165197510196e+00 9.099361753477606e+03 + 14420 9.534903521577018e-01 -5.925875767554153e+00 -5.981375502600432e+00 4.085683058501636e+00 4.766994991309660e+00 9.159938465661013e+03 + 14440 9.698858380002957e-01 -5.958209379860687e+00 -6.010389751569601e+00 3.913298753625897e+00 4.613670984386886e+00 9.248977084845874e+03 + 14460 1.000966090966179e+00 -6.012927322557827e+00 -6.044991611849244e+00 3.575880319986879e+00 4.391762208942833e+00 9.355704669952616e+03 + 14480 9.623197249514560e-01 -5.966104515959567e+00 -6.026067889261418e+00 3.879764441459854e+00 4.535445472658600e+00 9.297252657604580e+03 + 14500 9.821437273902185e-01 -6.006594827107545e+00 -5.981175960876802e+00 3.696985909192997e+00 4.842944972646756e+00 9.159331943388563e+03 + 14520 9.919920402789800e-01 -6.028306231632368e+00 -5.984807359559664e+00 3.526323933764272e+00 4.776101188634438e+00 9.170464425307053e+03 + 14540 9.346247387059581e-01 -5.947384739348180e+00 -6.006619333314084e+00 3.971033368518927e+00 4.630899163442908e+00 9.237348397598604e+03 + 14560 9.641676508487763e-01 -5.991637091320682e+00 -5.982779649707224e+00 3.712914882719768e+00 4.763775683148911e+00 9.164258400682342e+03 + 14580 1.005234774766878e+00 -6.048992485429141e+00 -5.994931450793544e+00 3.445722661758888e+00 4.756149488554554e+00 9.201481251800495e+03 + 14600 9.684328998229146e-01 -5.989435245732968e+00 -6.009438340172015e+00 3.769306027534895e+00 4.654445163797028e+00 9.246051170361588e+03 + 14620 9.779945041045314e-01 -5.997863161047110e+00 -6.038608008290250e+00 3.653054745858388e+00 4.419091527743547e+00 9.335945151192320e+03 + 14640 9.577514660441624e-01 -5.960339801077783e+00 -6.040487489346980e+00 3.891172821384758e+00 4.430952392528352e+00 9.341727510673518e+03 + 14660 9.783610442859163e-01 -5.978909297983122e+00 -5.972570791189567e+00 3.806937884300257e+00 4.843334571189607e+00 9.133015859676379e+03 + 14680 9.999348720428707e-01 -5.991052527930605e+00 -5.974896021658771e+00 3.698931006378255e+00 4.791704165602390e+00 9.140114024957415e+03 + 14700 9.698802100305616e-01 -5.917255271438414e+00 -5.976476165626075e+00 4.101844072818190e+00 4.761788533988882e+00 9.144954224403748e+03 + 14720 1.029786868695904e+00 -5.968851860996097e+00 -6.015166705893619e+00 3.878886565586542e+00 4.612939558985889e+00 9.263632724305020e+03 + 14740 1.068664592981896e+00 -5.987373554738988e+00 -6.017374443476910e+00 3.759913435033350e+00 4.587643689277678e+00 9.270489411092214e+03 + 14760 1.063746812009008e+00 -5.946245432474186e+00 -6.040315065451830e+00 3.943214245502948e+00 4.403051855716664e+00 9.341232514747418e+03 + 14780 1.070032557436574e+00 -5.931561111515113e+00 -5.941416848794622e+00 4.086738805974029e+00 5.030145637344678e+00 9.038080608980725e+03 + 14800 9.628110895669011e-01 -5.755091098972152e+00 -6.051099594384665e+00 4.959817222885889e+00 4.260090635060612e+00 9.374527790553844e+03 + 14820 1.082713720975084e+00 -5.920272896100458e+00 -5.992112772307081e+00 4.084505923838528e+00 4.671990237475181e+00 9.192821264096263e+03 + 14840 1.070100621106793e+00 -5.896893222751780e+00 -5.989332822545553e+00 4.291845135155654e+00 4.761042648157974e+00 9.184302583726434e+03 + 14860 1.075631638489945e+00 -5.910928329215073e+00 -5.996270993108518e+00 4.155581082685414e+00 4.665530299874698e+00 9.205573625194160e+03 + 14880 1.110678387064713e+00 -5.977930899831851e+00 -5.959475226143216e+00 3.845110769289208e+00 4.951086103615623e+00 9.093035975371420e+03 + 14900 1.040136577417129e+00 -5.897728204057829e+00 -5.992471567261740e+00 4.288740771327346e+00 4.744709718322417e+00 9.193808987806964e+03 + 14920 1.023301836150553e+00 -5.904849354344107e+00 -6.001071776785536e+00 4.256774304055654e+00 4.704250264025216e+00 9.220305307301551e+03 + 14940 1.003288747372904e+00 -5.918189274238317e+00 -6.057147046114451e+00 4.115573623039244e+00 4.317656593280785e+00 9.393297854063090e+03 + 14960 1.063595949235403e+00 -6.058015167982024e+00 -5.960528307548136e+00 3.364031310421907e+00 4.923815949076183e+00 9.096272944374403e+03 + 14980 9.565019023717873e-01 -5.944162202183536e+00 -5.988092175200501e+00 3.990940330748498e+00 4.738687627543732e+00 9.180489158632692e+03 + 15000 9.821581544113632e-01 -6.012804736993520e+00 -5.976756665923899e+00 3.624099310311555e+00 4.831092912814285e+00 9.145821220628506e+03 + 15020 9.774052501488819e-01 -6.024406691190674e+00 -5.955512230140702e+00 3.572310422574056e+00 4.967913079306390e+00 9.080979021983643e+03 + 15040 9.824079478411509e-01 -6.039587382006729e+00 -5.913115105179362e+00 3.523265887154135e+00 5.249489272218470e+00 8.952230294841374e+03 + 15060 1.013589889227844e+00 -6.087146632568857e+00 -5.966063558947152e+00 3.218509138280423e+00 4.913786884561341e+00 9.113179947073584e+03 + 15080 9.457788550552571e-01 -5.984397465342965e+00 -5.988010673368933e+00 3.802155535178195e+00 4.781407935550945e+00 9.180280897043081e+03 + 15100 9.231296855573002e-01 -5.944593088584159e+00 -6.039903316864887e+00 4.025583557712675e+00 4.478297477714575e+00 9.339921386931739e+03 + 15120 9.664668690129848e-01 -6.001873901486968e+00 -6.027352810823709e+00 3.700805045279978e+00 4.554501205019934e+00 9.301224542032145e+03 + 15140 9.698020036600523e-01 -6.000343991467510e+00 -6.048368792445078e+00 3.684924681670710e+00 4.409158842643578e+00 9.366127145671382e+03 + 15160 1.027309732025433e+00 -6.078821420448955e+00 -5.988469665975130e+00 3.292675873625204e+00 4.811489629702732e+00 9.181695317027446e+03 + 15180 1.061851356847342e+00 -6.120217709095547e+00 -5.956289493505754e+00 3.087341074581664e+00 5.028642256307629e+00 9.083357854998476e+03 + 15200 9.756057264002541e-01 -5.980716206116241e+00 -6.017537730309797e+00 3.768435179773415e+00 4.557000289741561e+00 9.270946055263663e+03 + 15220 1.013885158349901e+00 -6.024690784112360e+00 -5.973933642651733e+00 3.610439282014667e+00 4.901894642923843e+00 9.137202588973305e+03 + 15240 9.232966510089982e-01 -5.876492798221065e+00 -6.017846554965667e+00 4.287947927352361e+00 4.476272781701696e+00 9.271924836352235e+03 + 15260 9.645358928353595e-01 -5.921202086300058e+00 -5.980284186537640e+00 4.128710530911118e+00 4.789451968421459e+00 9.156605614305972e+03 + 15280 1.082039670616094e+00 -6.072544193043312e+00 -5.987846000532518e+00 3.294245234552406e+00 4.780595362952315e+00 9.179794069090336e+03 + 15300 9.851123917564566e-01 -5.907059650661733e+00 -6.025633239293390e+00 4.192456789786100e+00 4.511588894659584e+00 9.295903757081040e+03 + 15320 1.033844942228233e+00 -5.957037604759506e+00 -5.997103899249235e+00 3.918644595471503e+00 4.688577732272444e+00 9.208149900501419e+03 + 15340 1.047452779188516e+00 -5.952480940196741e+00 -5.975011097776807e+00 3.966287510886098e+00 4.836915859530744e+00 9.140500777070516e+03 + 15360 1.023467561928792e+00 -5.893313671474440e+00 -6.043001710999679e+00 4.215925139273232e+00 4.356393252170052e+00 9.349509104608955e+03 + 15380 1.102133662319126e+00 -5.988284442376143e+00 -5.984639253669283e+00 3.760822621769325e+00 4.781753859415250e+00 9.169929350395296e+03 + 15400 1.017139437727689e+00 -5.844006234079988e+00 -5.992109761595763e+00 4.527547051284819e+00 4.677113677342422e+00 9.192814078021969e+03 + 15420 1.036128477156556e+00 -5.852656968084491e+00 -5.995990824215644e+00 4.464006494648715e+00 4.640961311901088e+00 9.204736052143677e+03 + 15440 1.109105412199050e+00 -5.941394014603929e+00 -6.035425234763540e+00 4.001908002443299e+00 4.461966185002521e+00 9.326106494747453e+03 + 15460 1.071954567987569e+00 -5.874826061232791e+00 -6.013503413067120e+00 4.313033433587963e+00 4.516726619104403e+00 9.258537290284348e+03 + 15480 1.120888743577574e+00 -5.943552278958609e+00 -5.977074075881849e+00 4.016411202064395e+00 4.823923856649846e+00 9.146805421056526e+03 + 15500 1.064734379008857e+00 -5.866722944380350e+00 -6.042529866705488e+00 4.450300497270649e+00 4.440789943246405e+00 9.348048802241201e+03 + 15520 1.110504455951506e+00 -5.955811631882441e+00 -5.995418521794598e+00 3.977884952303195e+00 4.750456061281185e+00 9.202994441624318e+03 + 15540 1.066111757122827e+00 -5.927370590599241e+00 -5.993602693985870e+00 4.142991259228705e+00 4.762676272197809e+00 9.197411613962040e+03 + 15560 1.062771213390365e+00 -5.970738081241895e+00 -6.029277792700410e+00 3.853195035858489e+00 4.517050953672626e+00 9.307150605656399e+03 + 15580 1.041191744477500e+00 -5.993696497017045e+00 -6.058617310012500e+00 3.714532550536253e+00 4.341747195853008e+00 9.397873685968769e+03 + 15600 1.004583570276568e+00 -5.987396629717518e+00 -6.008307451093899e+00 3.761101027011870e+00 4.641027854729534e+00 9.242565519103106e+03 + 15620 9.461968182669699e-01 -5.937098179513779e+00 -5.997072477839563e+00 4.013046101726536e+00 4.668664399747214e+00 9.208047908013883e+03 + 15640 1.023092614007132e+00 -6.073970141285652e+00 -6.001804556753408e+00 3.290107655379645e+00 4.704493609351903e+00 9.222592482409151e+03 + 15660 1.054974560295018e+00 -6.139460140105442e+00 -5.992245245034646e+00 2.930831193620910e+00 4.776161902548807e+00 9.193283691456092e+03 + 15680 9.896416314709399e-01 -6.058985849561802e+00 -6.001405253434925e+00 3.397125173726790e+00 4.727761867255773e+00 9.221345769256677e+03 + 15700 9.677667345035497e-01 -6.037271119820157e+00 -5.981341170702658e+00 3.518837178487781e+00 4.839995601452117e+00 9.159848058925223e+03 + 15720 9.881755911559977e-01 -6.073531092243111e+00 -5.990774437568365e+00 3.313790440782526e+00 4.788991958475842e+00 9.188732303815068e+03 + 15740 9.272241841318681e-01 -5.985959901193210e+00 -5.993123352283762e+00 3.747568512610520e+00 4.706434867908101e+00 9.195960196097763e+03 + 15760 9.611615138107921e-01 -6.033664165987467e+00 -5.970265875992006e+00 3.531291365487481e+00 4.895334157495094e+00 9.126004628178702e+03 + 15780 9.645593797894779e-01 -6.031554933433757e+00 -5.974343822408631e+00 3.562393880558975e+00 4.890908933456062e+00 9.138459224313321e+03 + 15800 9.965820680326115e-01 -6.066477238720612e+00 -5.963338021294724e+00 3.301977040290528e+00 4.894218387492295e+00 9.104853795431320e+03 + 15820 9.875208780759510e-01 -6.035040021091230e+00 -5.999887661875132e+00 3.519638319118651e+00 4.721488605547500e+00 9.216695047234560e+03 + 15840 9.708236721224347e-01 -5.988678137365131e+00 -5.954176079750782e+00 3.779289300661726e+00 4.977405454659476e+00 9.076926489351115e+03 + 15860 1.014498863252133e+00 -6.026443762392806e+00 -6.027527655770642e+00 3.528521506962738e+00 4.522297623455245e+00 9.301742825334530e+03 + 15880 1.012902190743901e+00 -5.993385016897898e+00 -6.026326446576242e+00 3.682765980829801e+00 4.493611193946984e+00 9.298058677702191e+03 + 15900 1.010531910168358e+00 -5.960758939448815e+00 -6.012540761192181e+00 3.919475859422282e+00 4.622136625760858e+00 9.255575812866149e+03 + 15920 1.013452922061067e+00 -5.937683646278209e+00 -6.042155219047390e+00 4.020529700591055e+00 4.420637762826779e+00 9.346887563487015e+03 + 15940 1.076318376318981e+00 -6.006574633257475e+00 -6.019672058835874e+00 3.655329916888902e+00 4.580122472397681e+00 9.277536513679603e+03 + 15960 9.841079210456581e-01 -5.851242586527896e+00 -6.047928819770194e+00 4.493630700190399e+00 4.364227911816900e+00 9.364774536691490e+03 + 15980 1.070878565678429e+00 -5.967443670056086e+00 -6.009704923106494e+00 3.885826045954172e+00 4.643155391030963e+00 9.246858250587953e+03 + 16000 1.021194409532658e+00 -5.885838441826692e+00 -6.049081498262325e+00 4.248200594011408e+00 4.310833702176662e+00 9.368345880666357e+03 + 16020 1.060752644919037e+00 -5.942979110361371e+00 -6.049880694676967e+00 3.989584315071969e+00 4.375738874965107e+00 9.370825516352839e+03 + 16040 1.053611173905449e+00 -5.941096696709803e+00 -6.068177063473180e+00 3.973282811554546e+00 4.243567679976033e+00 9.427541347140776e+03 + 16060 1.001911283588902e+00 -5.887536097059613e+00 -6.071527359897142e+00 4.249722303956128e+00 4.193216000187129e+00 9.437920343453152e+03 + 16080 1.066947124567536e+00 -6.019612414443590e+00 -6.001180096931925e+00 3.609287345041948e+00 4.715128564585841e+00 9.220660505611491e+03 + 16100 9.892895132258607e-01 -5.956858281407446e+00 -6.024956602633026e+00 3.921742715530747e+00 4.530711616872317e+00 9.293836593467575e+03 + 16120 1.005457949750512e+00 -6.047336124859807e+00 -5.976269421175104e+00 3.470383412318605e+00 4.878459422413026e+00 9.144337531548550e+03 + 16140 9.391857817413237e-01 -6.004513565181886e+00 -5.987395181479780e+00 3.701942682994888e+00 4.800239091273694e+00 9.178396903311012e+03 + 16160 9.533955125430742e-01 -6.059871778275905e+00 -5.999492237047129e+00 3.363712470534267e+00 4.710421139973709e+00 9.215496656678502e+03 + 16180 9.353162575185290e-01 -6.049165341534939e+00 -5.994605143596504e+00 3.427571377844989e+00 4.740864477570833e+00 9.200493948559289e+03 + 16200 9.102101205518702e-01 -6.015909386641571e+00 -6.029279402852018e+00 3.590603502563604e+00 4.513830800479893e+00 9.307163328796301e+03 + 16220 9.680405420298733e-01 -6.100957430880167e+00 -5.989612548388584e+00 3.151250162917664e+00 4.790609708749212e+00 9.185211751552950e+03 + 16240 9.528308595735678e-01 -6.072943363915742e+00 -6.002312216527661e+00 3.282620274011712e+00 4.688195252448805e+00 9.224156432162035e+03 + 16260 9.050272927967775e-01 -5.991060651503573e+00 -5.999028872575962e+00 3.821031703779050e+00 4.775276945303169e+00 9.214059387026335e+03 + 16280 9.410565855028433e-01 -6.028349606154639e+00 -6.024439594963527e+00 3.529587777945880e+00 4.552039667277526e+00 9.292233851492814e+03 + 16300 1.060506513591971e+00 -6.185436850699585e+00 -5.972550189279037e+00 2.658373695942250e+00 4.880801849923420e+00 9.133004834549192e+03 + 16320 9.315690718242288e-01 -5.970797680493542e+00 -6.047642387776252e+00 3.836274895128626e+00 4.395020694231282e+00 9.363874153951487e+03 + 16340 9.248152344387465e-01 -5.937633520634433e+00 -6.015907931625134e+00 3.984936635791548e+00 4.535472854956993e+00 9.265955382136253e+03 + 16360 9.877534509837823e-01 -6.003333943193039e+00 -6.000511144715660e+00 3.660553366798207e+00 4.676762312481967e+00 9.218611502661020e+03 + 16380 9.840610218470404e-01 -5.970283294522878e+00 -5.978637751814201e+00 3.875147107840143e+00 4.827174521225284e+00 9.151587145490943e+03 + 16400 1.046696725200996e+00 -6.036470974254309e+00 -6.018606071931801e+00 3.503496955996756e+00 4.606079989717295e+00 9.274264933074623e+03 + 16420 1.046098877584747e+00 -6.014997980091431e+00 -5.987421577615349e+00 3.616398656627151e+00 4.774746627079312e+00 9.178472007247476e+03 + 16440 1.003390753401376e+00 -5.935940672624148e+00 -5.999835262165734e+00 3.990307520650581e+00 4.623414899847020e+00 9.216511173118253e+03 + 16460 9.381971418056982e-01 -5.824878469235403e+00 -6.041871268281389e+00 4.605255977825419e+00 4.359249746176239e+00 9.346015217452632e+03 + 16480 1.091142938260067e+00 -6.040679771717731e+00 -6.017698320177081e+00 3.413838659599869e+00 4.545801710714418e+00 9.271482345453496e+03 + 16500 1.026923891428277e+00 -5.939981208871211e+00 -6.023598845458247e+00 4.032317736843900e+00 4.552172327773691e+00 9.289648196789272e+03 + 16520 1.028431924319835e+00 -5.942950583110042e+00 -5.998879221909244e+00 4.001567799979348e+00 4.680416901065446e+00 9.213616039046994e+03 + 16540 1.082116490419838e+00 -6.026936041405730e+00 -6.015612780478216e+00 3.522812886656712e+00 4.587832803171457e+00 9.265037606940468e+03 + 16560 1.040268532110304e+00 -5.975226444158871e+00 -6.029216907286781e+00 3.825812201250680e+00 4.515790606973058e+00 9.306974155724591e+03 + 16580 1.057288879899200e+00 -6.020491368330060e+00 -5.987760377232169e+00 3.554442151233567e+00 4.742388567222161e+00 9.179506517168657e+03 + 16600 1.024045198892182e+00 -5.997841346965934e+00 -5.975509136144869e+00 3.794689210003344e+00 4.922924220436349e+00 9.141979663130925e+03 + 16620 1.006303193919409e+00 -6.005960916143772e+00 -5.963088140350083e+00 3.729831626760122e+00 4.976013739908096e+00 9.104071703510001e+03 + 16640 1.040166613003569e+00 -6.098055688908863e+00 -5.988024461638537e+00 3.178175684551824e+00 4.809992018815423e+00 9.180309017701698e+03 + 16660 9.702965559083476e-01 -6.044484308697625e+00 -5.996995206499786e+00 3.483907469610105e+00 4.756597243344910e+00 9.207835854889834e+03 + 16680 9.339736142232450e-01 -6.039501046456410e+00 -6.025350428538545e+00 3.492525138700030e+00 4.573780176585460e+00 9.295032336269769e+03 + 16700 8.703895273489322e-01 -5.981064906144507e+00 -6.060966010408890e+00 3.737884476329712e+00 4.279079970987699e+00 9.405146896072176e+03 + 16720 9.091900110529726e-01 -6.060049810484167e+00 -6.013275252119989e+00 3.355805018797593e+00 4.624391771264218e+00 9.257857111034076e+03 + 16740 9.169984993348442e-01 -6.079698668894569e+00 -5.999431958747753e+00 3.265355809181278e+00 4.726259680077546e+00 9.215312660563572e+03 + 16760 9.776799274899726e-01 -6.168722686868296e+00 -5.995295532091939e+00 2.785257390090833e+00 4.781102950582144e+00 9.202617917779986e+03 + 16780 9.245299428224846e-01 -6.083520095591708e+00 -5.995297244622381e+00 3.268924099823303e+00 4.775513362531242e+00 9.202629648546683e+03 + 16800 8.614187295941028e-01 -5.979378321038616e+00 -6.001429742971851e+00 3.851230249745236e+00 4.724607572558082e+00 9.221417946381904e+03 + 16820 9.838072498547534e-01 -6.142509426713205e+00 -5.976068133363982e+00 2.960172394350084e+00 4.915904057468228e+00 9.143729460227052e+03 + 16840 9.672189256048042e-01 -6.096715350009793e+00 -6.007550340419989e+00 3.177166960252264e+00 4.689166243557556e+00 9.240246622443206e+03 + 16860 8.748125267148347e-01 -5.938748613352183e+00 -6.036341495662775e+00 4.032905866717656e+00 4.472512434040506e+00 9.328944248489264e+03 + 16880 1.004674392724796e+00 -6.106606710263478e+00 -6.002440783279478e+00 3.124112571888795e+00 4.722249444256025e+00 9.224567470072127e+03 + 16900 9.556449326119837e-01 -6.010730761152153e+00 -5.997591088827024e+00 3.640179022940244e+00 4.715629054788859e+00 9.209657205729507e+03 + 16920 1.001137606798068e+00 -6.056369388415390e+00 -5.957593349623107e+00 3.472526622590596e+00 5.039713922878484e+00 9.087320682225942e+03 + 16940 1.046037888394493e+00 -6.100597904774219e+00 -5.951769481259623e+00 3.205361798525841e+00 5.059957637470760e+00 9.069581496703928e+03 + 16960 9.613314734583852e-01 -5.952461369394727e+00 -6.004836060658921e+00 3.930305178265050e+00 4.629561596068773e+00 9.231874273596453e+03 + 16980 1.068202736342690e+00 -6.092256073839376e+00 -5.933440059081227e+00 3.210678683879328e+00 5.122624817319476e+00 9.013854057470771e+03 + 17000 1.008430125596781e+00 -5.984379446179471e+00 -5.971887074863695e+00 3.818655723391561e+00 4.890388852674958e+00 9.130948030180931e+03 + 17020 1.053337979566619e+00 -6.033271645269577e+00 -5.996066670741617e+00 3.502180488595771e+00 4.715817209786524e+00 9.204974749995416e+03 + 17040 9.900646079111670e-01 -5.927952685909984e+00 -6.029104410141850e+00 4.060441761870684e+00 4.479612908152579e+00 9.306585399853297e+03 + 17060 1.027653930462488e+00 -5.976081510467584e+00 -5.997459180926849e+00 3.850210711471686e+00 4.727456819510775e+00 9.209228202494374e+03 + 17080 1.020642617093729e+00 -5.961273347695263e+00 -6.009289528589694e+00 3.852741348897136e+00 4.577025007721335e+00 9.245565604196028e+03 + 17100 9.652632513652823e-01 -5.875841948376283e+00 -6.090915570378339e+00 4.317811757183218e+00 4.082825737111971e+00 9.498147743181162e+03 + 17120 1.052305314767479e+00 -6.005985830346548e+00 -5.972796613209613e+00 3.629782805424523e+00 4.820360426239558e+00 9.133712490206215e+03 + 17140 9.675136298320702e-01 -5.881840264550553e+00 -6.026657017843405e+00 4.304321912070769e+00 4.472761704343066e+00 9.299026473494925e+03 + 17160 1.036016008809293e+00 -5.988363599181775e+00 -6.037635007149823e+00 3.796256479538453e+00 4.513332430260181e+00 9.332926938448243e+03 + 17180 1.070385088524221e+00 -6.052749095343440e+00 -5.978661363608897e+00 3.391793419813519e+00 4.817216640472699e+00 9.151660563266525e+03 + 17200 9.706794070904557e-01 -5.923536598172579e+00 -5.979365676283626e+00 4.122913346054468e+00 4.802334140018922e+00 9.153815682753509e+03 + 17220 9.979015133682821e-01 -5.990504239831981e+00 -5.970794219457034e+00 3.770273847218086e+00 4.883451834326828e+00 9.127586638671199e+03 + 17240 9.682017397339567e-01 -5.981891568292143e+00 -6.048453664719201e+00 3.756352423917688e+00 4.374142565782392e+00 9.366383893700973e+03 + 17260 9.555357193491194e-01 -6.013962397560986e+00 -6.021273018480390e+00 3.624956268131544e+00 4.582977551497396e+00 9.282485243477284e+03 + 17280 9.600169471741620e-01 -6.073486309216973e+00 -5.997687429013509e+00 3.307371805312548e+00 4.742620705279638e+00 9.209949903105384e+03 + 17300 8.963944716279043e-01 -6.023297241074425e+00 -5.977018002768935e+00 3.605962512265781e+00 4.871705060304888e+00 9.146643987881291e+03 + 17320 9.644271390152944e-01 -6.151817220818386e+00 -5.961393627123243e+00 2.931289390740353e+00 5.024731133693749e+00 9.098936520998954e+03 + 17340 9.228406122907082e-01 -6.106094402204155e+00 -6.000307195152284e+00 3.163531113117444e+00 4.770977626526673e+00 9.217996657018355e+03 + 17360 8.838839847990284e-01 -6.053637087529264e+00 -5.995551303549200e+00 3.374941203449785e+00 4.708478763809334e+00 9.203430965020803e+03 + 17380 9.279346218405647e-01 -6.114179937697940e+00 -5.994722379862341e+00 3.068155461708163e+00 4.754099244797502e+00 9.200846697887479e+03 + 17400 8.985650048851552e-01 -6.057789395915485e+00 -5.983511356886128e+00 3.351306289588739e+00 4.777822284184701e+00 9.166501901586687e+03 + 17420 9.094700726602285e-01 -6.053271419445093e+00 -6.009101801840788e+00 3.389175850626927e+00 4.642804630137078e+00 9.244972778513087e+03 + 17440 9.437671071682426e-01 -6.079537612175593e+00 -5.944444502033163e+00 3.307177441768476e+00 5.082902985797539e+00 9.047300174763110e+03 + 17460 9.597628166778134e-01 -6.074123714405999e+00 -6.022374675956629e+00 3.296904866699463e+00 4.594055853613563e+00 9.285868192333959e+03 + 17480 9.524413281634901e-01 -6.036222483019147e+00 -6.015762964918697e+00 3.513579428664094e+00 4.631061147697073e+00 9.265506230923478e+03 + 17500 9.888619017419695e-01 -6.066579391397657e+00 -5.980347049840451e+00 3.333954955007209e+00 4.829114404640418e+00 9.156815713494794e+03 + 17520 9.271556887463571e-01 -5.953414479326898e+00 -5.967974572922465e+00 3.944398975316754e+00 4.860792664723807e+00 9.118951029365708e+03 + 17540 9.527496765722386e-01 -5.969858760519857e+00 -5.941871759026137e+00 3.840668567533657e+00 5.001374261085084e+00 9.039423225907492e+03 + 17560 9.677001089988455e-01 -5.969080647172332e+00 -6.001308373899962e+00 3.832571614966604e+00 4.647515020871954e+00 9.221069238703849e+03 + 17580 1.050786500272591e+00 -6.072784833262293e+00 -6.000301311437447e+00 3.311832843088999e+00 4.728044442196017e+00 9.217982394213359e+03 + 17600 1.012755005404517e+00 -6.004180359946029e+00 -5.994347111306388e+00 3.676028992843289e+00 4.732493028222418e+00 9.199706033374339e+03 + 17620 9.924959395806293e-01 -5.964491753688129e+00 -6.012112197177112e+00 3.915123634903848e+00 4.641679679150297e+00 9.254229456084555e+03 + 17640 9.378956176472304e-01 -5.874487950214588e+00 -6.054303101194511e+00 4.397942602695079e+00 4.365416179463682e+00 9.384480852594208e+03 + 17660 9.740680643639937e-01 -5.921799293911687e+00 -6.009829863229713e+00 4.150594641213758e+00 4.645109489503074e+00 9.247248064573425e+03 + 17680 1.068815650036030e+00 -6.056675407529572e+00 -5.982867154575640e+00 3.400313836689417e+00 4.824132246941129e+00 9.164516971521978e+03 + 17700 1.020739114394580e+00 -5.979196887200175e+00 -6.031166674356621e+00 3.854588039135055e+00 4.556169478984167e+00 9.312967711498919e+03 + 17720 1.032602844371905e+00 -5.995971392455163e+00 -6.057580415191714e+00 3.705316135102745e+00 4.351547592584015e+00 9.394647123705654e+03 + 17740 9.936870313315410e-01 -5.944490340408734e+00 -6.029139661107052e+00 3.972668867698805e+00 4.486599368809024e+00 9.306710604697897e+03 + 17760 1.023609298453200e+00 -5.995273872536520e+00 -5.951550651117770e+00 3.697292590505528e+00 4.948358094038642e+00 9.068913239440846e+03 + 17780 9.950515926080136e-01 -5.960320055123219e+00 -5.978337210368894e+00 3.923536932278735e+00 4.820079638712309e+00 9.150636636251847e+03 + 17800 9.971454940412500e-01 -5.972514180255792e+00 -6.002253157194717e+00 3.816536271290828e+00 4.645770463615710e+00 9.223951993487948e+03 + 17820 9.872667491857564e-01 -5.970979052456981e+00 -5.964560101459409e+00 3.865489076955754e+00 4.902347686913267e+00 9.108544545904691e+03 + 17840 9.999790075493451e-01 -6.006791059844137e+00 -5.956958056218920e+00 3.615684890578483e+00 4.901833709026863e+00 9.085403715803883e+03 + 17860 9.326373284327524e-01 -5.929007380510170e+00 -6.014705905548337e+00 4.070307096641783e+00 4.578212904068740e+00 9.262250677191863e+03 + 17880 9.926967723460791e-01 -6.047692328467138e+00 -6.011632969887435e+00 3.413518184901833e+00 4.620576602034193e+00 9.252795833599515e+03 + 17900 9.407776595316566e-01 -6.007252413082350e+00 -6.005062503809948e+00 3.630516808232570e+00 4.643091606162066e+00 9.232608379964166e+03 + 17920 8.859507036650586e-01 -5.961554689470237e+00 -6.002918910485016e+00 3.858131836289042e+00 4.620612078129668e+00 9.226013582352694e+03 + 17940 9.624307396727535e-01 -6.104826411945009e+00 -5.967213734336006e+00 3.128331348305189e+00 4.918524638629121e+00 9.116678488685493e+03 + 17960 9.413083681400927e-01 -6.097212432956436e+00 -5.953752973578435e+00 3.218736461785716e+00 5.042502877813783e+00 9.075637283892283e+03 + 17980 8.837580126394070e-01 -6.026817160516157e+00 -5.937112701637551e+00 3.623419290418707e+00 5.138516175019810e+00 9.024990524924146e+03 + 18000 9.042811169916926e-01 -6.060651596504969e+00 -5.942348284292163e+00 3.395733868966937e+00 5.075049795071267e+00 9.040911205059034e+03 + 18020 9.421035874646172e-01 -6.109789903855603e+00 -6.013203555216644e+00 3.122740817246149e+00 4.677354577820198e+00 9.257613958372205e+03 + 18040 9.063105926573231e-01 -6.042494469109269e+00 -6.018006223664475e+00 3.482542811831732e+00 4.623158106719474e+00 9.272409390829036e+03 + 18060 9.384785406404660e-01 -6.068661899499261e+00 -5.996863579832524e+00 3.298482133612976e+00 4.710759195893438e+00 9.207444076724061e+03 + 18080 9.467679663793056e-01 -6.048446001291123e+00 -6.007973860924826e+00 3.423091939372320e+00 4.655489232399075e+00 9.241550890847107e+03 + 18100 9.313647721942748e-01 -5.988619260022254e+00 -6.006972147424687e+00 3.747209646809608e+00 4.641824527244692e+00 9.238466522825389e+03 + 18120 1.050312872564898e+00 -6.125175164038207e+00 -5.976962424569500e+00 3.031379980892847e+00 4.882440466769472e+00 9.146460194439796e+03 + 18140 9.408304511163956e-01 -5.927825208948574e+00 -5.992941302162925e+00 4.086413958132303e+00 4.712507274212643e+00 9.195372645526606e+03 + 18160 9.524746606812198e-01 -5.917938534388973e+00 -5.946145059258487e+00 4.128032009642167e+00 4.966065778895808e+00 9.052466376914865e+03 + 18180 1.074058564339236e+00 -6.075146124533438e+00 -5.948122152878433e+00 3.317588311922023e+00 5.046979614061144e+00 9.058491978185248e+03 + 18200 9.607933498187966e-01 -5.892328074912680e+00 -6.006934846052454e+00 4.270555394358041e+00 4.612465579132942e+00 9.238357130326845e+03 + 18220 1.012135415675914e+00 -5.959262382415376e+00 -5.980220669010532e+00 3.897943134819257e+00 4.777597409905500e+00 9.156442339051890e+03 + 18240 1.038575983604448e+00 -5.991117412970359e+00 -6.004509288109811e+00 3.702063435255536e+00 4.625165215818824e+00 9.230903810732470e+03 + 18260 1.008861617219233e+00 -5.945594866576123e+00 -6.050255312495206e+00 3.932918658055269e+00 4.331942181436232e+00 9.371957079605701e+03 + 18280 9.962977082685011e-01 -5.929402912946832e+00 -6.057150146367145e+00 4.052388942964742e+00 4.318844559844826e+00 9.393324143996448e+03 + 18300 9.881061756646630e-01 -5.924866890207941e+00 -6.042626466898055e+00 4.090449428303485e+00 4.414255715713254e+00 9.348346765220815e+03 + 18320 9.810843276923751e-01 -5.922634290886080e+00 -6.000343816879697e+00 4.121228574704958e+00 4.675008450939327e+00 9.218084109800711e+03 + 18340 1.032532167732856e+00 -6.007536365978980e+00 -5.999285218864442e+00 3.700385554853621e+00 4.747764918446185e+00 9.214838600904492e+03 + 18360 1.030872314766707e+00 -6.015116192156126e+00 -5.988359477020829e+00 3.628687799887183e+00 4.782328998782348e+00 9.181346422567827e+03 + 18380 1.017412487686301e+00 -6.007493421592137e+00 -6.016090780176630e+00 3.608010441351725e+00 4.558643077922627e+00 9.266517355272841e+03 + 18400 9.833266297122549e-01 -5.971547248509009e+00 -6.019927989944458e+00 3.839258039244644e+00 4.561448335026757e+00 9.278323059401589e+03 + 18420 9.278959986902980e-01 -5.906596492191706e+00 -5.985289411191200e+00 4.279601945278666e+00 4.827735026693719e+00 9.171927644095178e+03 + 18440 1.014728984942653e+00 -6.051646222720157e+00 -5.996712818207249e+00 3.405692013804418e+00 4.721128123434408e+00 9.206963342665880e+03 + 18460 9.866724733082185e-01 -6.027960919400622e+00 -6.033726398543780e+00 3.574020256462353e+00 4.540913983017324e+00 9.320880472359482e+03 + 18480 1.001724141957931e+00 -6.072569589068930e+00 -5.982657582689000e+00 3.377122228273636e+00 4.893410882745215e+00 9.163910640525492e+03 + 18500 9.552876152881393e-01 -6.029284415118875e+00 -5.997949259205825e+00 3.555753250289100e+00 4.735684564641541e+00 9.210748090605952e+03 + 18520 9.231927421028870e-01 -6.007691593088179e+00 -5.999365586335180e+00 3.660827452782569e+00 4.708636672003667e+00 9.215099046181713e+03 + 18540 9.166542175619531e-01 -6.024584852999875e+00 -6.061526092510811e+00 3.513136504342735e+00 4.301014190432600e+00 9.406894487752423e+03 + 18560 9.453146677732607e-01 -6.095169031231560e+00 -6.004713975862544e+00 3.205938562670321e+00 4.725345488473787e+00 9.231558275500163e+03 + 18580 9.362656498262208e-01 -6.108418426741267e+00 -6.017568037365256e+00 3.042743919702270e+00 4.564420914551636e+00 9.271069000694213e+03 + 18600 8.877285582776270e-01 -6.058629058737030e+00 -6.010389375742344e+00 3.375573881176206e+00 4.652573605998509e+00 9.248970689876278e+03 + 18620 9.234585091340065e-01 -6.126967271478303e+00 -5.973838619799340e+00 3.069587918571890e+00 4.948876333094757e+00 9.136917786835718e+03 + 18640 8.862161700949893e-01 -6.080189250426587e+00 -6.021787371396615e+00 3.259883451898770e+00 4.595236078950435e+00 9.284081826897478e+03 + 18660 9.252662583295668e-01 -6.140878309816120e+00 -5.997324018932301e+00 2.968207447920866e+00 4.792518401130476e+00 9.208857430593989e+03 + 18680 8.882026090956644e-01 -6.079315889597320e+00 -5.980235949812567e+00 3.308545290413565e+00 4.877477637228743e+00 9.156481011918877e+03 + 18700 9.673866332591117e-01 -6.174955410019118e+00 -5.963902215142327e+00 2.735218019752237e+00 4.947118125111124e+00 9.106575410419575e+03 + 18720 9.227969241531256e-01 -6.068367589308782e+00 -5.983933485190297e+00 3.339807400735651e+00 4.824641092719377e+00 9.167818836686511e+03 + 18740 9.896593637207061e-01 -6.110773850966568e+00 -6.027895932410174e+00 3.086061288689078e+00 4.561959122356341e+00 9.302867880596965e+03 + 18760 9.358053121608656e-01 -5.975242540240949e+00 -6.029612007809115e+00 3.822534856606702e+00 4.510336960182374e+00 9.308169670074116e+03 + 18780 1.009597907550461e+00 -6.044132487491591e+00 -5.998347263371341e+00 3.453305917308451e+00 4.716211759447468e+00 9.211979798197443e+03 + 18800 1.040115638287558e+00 -6.057741531632725e+00 -6.013745276934753e+00 3.382497807243181e+00 4.635131110117355e+00 9.259292112179048e+03 + 18820 9.771089031804527e-01 -5.943443533472965e+00 -6.041249154119972e+00 3.985084046666050e+00 4.423469037540050e+00 9.344095419475045e+03 + 18840 1.018482437018722e+00 -5.989938437975324e+00 -5.977918419256522e+00 3.772785790077438e+00 4.841806597652685e+00 9.149375188215190e+03 + 18860 9.771942032073392e-01 -5.914949470940913e+00 -6.041888128547916e+00 4.172042437527670e+00 4.443141021854482e+00 9.346062640831899e+03 + 18880 1.048014251648741e+00 -6.010886101681797e+00 -5.998413696642849e+00 3.653485111244007e+00 4.725103591076094e+00 9.212193768868348e+03 + 18900 9.948691857668355e-01 -5.924438078139539e+00 -6.061753751031747e+00 4.067792393973731e+00 4.279304550694968e+00 9.407606943198860e+03 + 18920 1.097228018877286e+00 -6.073994212036475e+00 -6.018374365774182e+00 3.314278974083848e+00 4.633656738465328e+00 9.273555560378982e+03 + 18940 9.604727651457727e-01 -5.875035147051078e+00 -6.032652607391003e+00 4.355268284342964e+00 4.450204435847955e+00 9.317573308669009e+03 + 18960 1.014891530647821e+00 -5.961095309698981e+00 -6.009077034489934e+00 3.915097383430591e+00 4.639578894533026e+00 9.244943237387255e+03 + 18980 1.017096357803230e+00 -5.972085934055454e+00 -6.007292843751464e+00 3.851782611555240e+00 4.649619087829086e+00 9.239448035572042e+03 + 19000 1.020040706972445e+00 -5.987861425071889e+00 -5.996441349099570e+00 3.808242502086979e+00 4.758975250581082e+00 9.206122372545380e+03 + 19020 1.040666635284262e+00 -6.033566636366722e+00 -5.969626207786091e+00 3.544359314777569e+00 4.911515150436893e+00 9.124033750508172e+03 + 19040 9.521528385813555e-01 -5.920307450211971e+00 -5.999878651751171e+00 4.101540538909045e+00 4.644630386067314e+00 9.216672742113227e+03 + 19060 9.624443869236516e-01 -5.954738660718965e+00 -6.040314882137063e+00 3.872421061453295e+00 4.381029155193106e+00 9.341225183525752e+03 + 19080 1.023424317147171e+00 -6.068365673883448e+00 -6.031445138113728e+00 3.323011384698629e+00 4.535014814522804e+00 9.313846861580399e+03 + 19100 9.740824850460736e-01 -6.021540389358001e+00 -6.027026078239665e+00 3.571297743781515e+00 4.539798069315394e+00 9.300207646441295e+03 + 19120 9.980776972453711e-01 -6.084806905907326e+00 -6.005730822408683e+00 3.221663847419633e+00 4.675730955853209e+00 9.234659545975901e+03 + 19140 9.373356055229507e-01 -6.021856208107364e+00 -5.987050365899011e+00 3.598747899106620e+00 4.798608431253658e+00 9.177342247248929e+03 + 19160 9.330647770714388e-01 -6.039514079431144e+00 -5.987829541452365e+00 3.482369363504863e+00 4.779149978735417e+00 9.179731636603705e+03 + 19180 9.279399908615729e-01 -6.050498217414654e+00 -5.999099373972910e+00 3.388401998657284e+00 4.683542111645100e+00 9.214291062278973e+03 + 19200 8.956359087468414e-01 -6.015865301728788e+00 -6.031426882928081e+00 3.555854522869549e+00 4.466497515476295e+00 9.313781720339926e+03 + 19220 9.569270293830302e-01 -6.115187254514965e+00 -5.964530413551637e+00 3.100749465345507e+00 4.965844360227727e+00 9.108490633595966e+03 + 19240 8.844520966257453e-01 -6.008956513122878e+00 -6.019422578389401e+00 3.607265331871341e+00 4.547167565492598e+00 9.276785214468231e+03 + 19260 9.029897050268201e-01 -6.030730448663404e+00 -6.004557181896495e+00 3.515486409840979e+00 4.665777357916514e+00 9.231042658900735e+03 + 19280 1.018983730320968e+00 -6.184130405545977e+00 -5.933611034466018e+00 2.748740888637548e+00 5.187261885126050e+00 9.014384727450250e+03 + 19300 9.591863431323470e-01 -6.061579821776936e+00 -5.972696906639946e+00 3.357409119106580e+00 4.867788572409842e+00 9.133433354004321e+03 + 19320 9.711552719983121e-01 -6.027012218814872e+00 -5.981237181950013e+00 3.534113163061516e+00 4.796960508403599e+00 9.159546482986791e+03 + 19340 9.923028418288491e-01 -5.997777454272756e+00 -5.989336665041538e+00 3.739357839660138e+00 4.787826157633700e+00 9.184335272236978e+03 + 19360 9.994583303532698e-01 -5.956976990939816e+00 -5.998043122026106e+00 3.938724345400118e+00 4.702916265739391e+00 9.211042900207005e+03 + 19380 1.040183321082863e+00 -5.981503895413347e+00 -6.011691859966874e+00 3.803926581385276e+00 4.630582617346505e+00 9.252964230863028e+03 + 19400 1.031064276729721e+00 -5.947246223560530e+00 -6.014138375327945e+00 3.970634393580227e+00 4.586529306604701e+00 9.260493102345710e+03 + 19420 1.015542562780274e+00 -5.911593227093505e+00 -6.012736570413939e+00 4.182131502774967e+00 4.601350773547238e+00 9.256170522067654e+03 + 19440 1.050642916863836e+00 -5.957153891674837e+00 -6.005762993700367e+00 3.907329886313077e+00 4.628208900248257e+00 9.234727011790956e+03 + 19460 9.682214538038811e-01 -5.834160064611331e+00 -6.062280583232774e+00 4.525083492617819e+00 4.215180173157328e+00 9.409194287245553e+03 + 19480 1.092121186075386e+00 -6.021956343386993e+00 -5.988046377367127e+00 3.578285225255097e+00 4.773001497691454e+00 9.180383835619190e+03 + 19500 1.027670728036196e+00 -5.934185049998915e+00 -6.030729779393898e+00 4.058286155814476e+00 4.503911379379896e+00 9.311614558024072e+03 + 19520 1.062161845219044e+00 -5.997804589463905e+00 -6.009015528315937e+00 3.706185504911256e+00 4.641810559135704e+00 9.244764662721320e+03 + 19540 1.117039023840299e+00 -6.099630659415546e+00 -5.982817078208775e+00 3.179797419483702e+00 4.850559079616248e+00 9.164384049853026e+03 + 19560 9.767091069867175e-01 -5.919549608182157e+00 -6.018913853051975e+00 4.047346577651420e+00 4.476781707041727e+00 9.275203770249405e+03 + 19580 1.034997721242716e+00 -6.033328834092401e+00 -5.937709433386654e+00 3.545986786728953e+00 5.095048182635788e+00 9.026772920104300e+03 + 19600 9.565025938281539e-01 -5.942024003791266e+00 -5.978925803457495e+00 4.011690393216279e+00 4.799794548997748e+00 9.152442525939734e+03 + 19620 9.390049108411177e-01 -5.939599140383142e+00 -6.017209584802309e+00 3.995787255077951e+00 4.550136073045631e+00 9.269912326628093e+03 + 19640 9.620006695438020e-01 -5.992892832799843e+00 -5.933894112141241e+00 3.791555820551238e+00 5.130335604595444e+00 9.015221499549873e+03 + 19660 1.027407428633609e+00 -6.103469929183914e+00 -5.991262908377840e+00 3.122438086669169e+00 4.766748164117997e+00 9.190250860526021e+03 + 19680 9.846784328206103e-01 -6.054396100034158e+00 -5.977227555467032e+00 3.374224450895261e+00 4.817338175593383e+00 9.147277131354118e+03 + 19700 8.839014541520454e-01 -5.915294962692283e+00 -5.993856161129200e+00 4.167467680551059e+00 4.716357121820112e+00 9.198181047672770e+03 + 19720 9.608495018591175e-01 -6.033931708499466e+00 -5.967912342603042e+00 3.506619243299334e+00 4.885712658740457e+00 9.118811335229120e+03 + 19740 1.028866361051609e+00 -6.135273853070878e+00 -5.950987670745421e+00 2.980862597971826e+00 5.039062375079149e+00 9.067189359212596e+03 + 19760 9.494367656951985e-01 -6.014238447076496e+00 -5.977516032295368e+00 3.668015212303506e+00 4.878881000752067e+00 9.148131327034347e+03 + 19780 9.399650185978269e-01 -5.990139398236494e+00 -5.974373820365550e+00 3.766917835203639e+00 4.857446223053893e+00 9.138526511849472e+03 + 19800 9.597860599557870e-01 -5.997558916222217e+00 -6.039112780604921e+00 3.681185590409884e+00 4.442576870684668e+00 9.337503291294139e+03 + 19820 9.773345993131665e-01 -5.986624071091871e+00 -6.039338893057596e+00 3.755779028447766e+00 4.453082363128238e+00 9.338209024679365e+03 + 19840 1.010266887823799e+00 -5.985861805522562e+00 -6.027639598305671e+00 3.746123201757292e+00 4.506228650504142e+00 9.302114013001166e+03 + 19860 1.073892816396898e+00 -6.022204975928164e+00 -6.025639865667331e+00 3.553197915968077e+00 4.533474247538310e+00 9.295935948185475e+03 + 19880 1.001481423652326e+00 -5.866593180012009e+00 -6.018218374861289e+00 4.408924378777017e+00 4.538269046029382e+00 9.273059950641114e+03 + 19900 1.091494835304404e+00 -5.964236863214112e+00 -6.038114268929823e+00 3.927850348973171e+00 4.503634852861979e+00 9.334387523672331e+03 + 19920 1.130875539056626e+00 -6.002530982859863e+00 -5.990803193839389e+00 3.706757417825620e+00 4.774100197250673e+00 9.188838368118992e+03 + 19940 1.062489127375442e+00 -5.895341915779257e+00 -6.020795557042826e+00 4.256292226143284e+00 4.535918004119628e+00 9.280980835781798e+03 + 19960 1.049981919426291e+00 -5.877840447581205e+00 -6.003744211437261e+00 4.349204861942891e+00 4.626245966336930e+00 9.228544344282162e+03 + 19980 1.078646962288277e+00 -5.930673021987042e+00 -6.008906791788738e+00 4.067465468234571e+00 4.618235055396481e+00 9.244410822926044e+03 + 20000 1.000269908016438e+00 -5.831617690615593e+00 -6.042137572985030e+00 4.557557688092182e+00 4.348719945680363e+00 9.346858192964777e+03 + 20020 9.435750716971292e-01 -5.767197816723897e+00 -6.040478050862435e+00 4.912987715041937e+00 4.343770320638898e+00 9.341715099281502e+03 + 20040 1.062653892257728e+00 -5.966587757966392e+00 -6.022752185054109e+00 3.845342598159459e+00 4.522837766404785e+00 9.287028578227770e+03 + 20060 9.663276133721543e-01 -5.853909344397016e+00 -6.037853857225858e+00 4.481564580934558e+00 4.425326722949985e+00 9.333614329753345e+03 + 20080 9.821043619756223e-01 -5.905945493486180e+00 -5.972556055937867e+00 4.206258682912015e+00 4.823770525363204e+00 9.132975874516000e+03 + 20100 1.057813383211524e+00 -6.044439624596865e+00 -5.960436124762455e+00 3.509033030514794e+00 4.991394126063566e+00 9.095971117910480e+03 + 20120 9.746985970657231e-01 -5.943475246123540e+00 -5.994325041647893e+00 3.924154118670535e+00 4.632166723789272e+00 9.199608709595988e+03 + 20140 9.389124280805821e-01 -5.907630738676508e+00 -5.965652454722341e+00 4.164461558024364e+00 4.831291885657651e+00 9.111890501589316e+03 + 20160 9.901736844817238e-01 -5.994381659344556e+00 -5.960343115986217e+00 3.739343434450539e+00 4.934798017861681e+00 9.095683926559672e+03 + 20180 9.870685478358164e-01 -5.995679621242634e+00 -5.995794389400219e+00 3.703122199086489e+00 4.702463182565321e+00 9.204138801396401e+03 + 20200 9.808574747280039e-01 -5.989392263313140e+00 -6.049095638691884e+00 3.736015692125228e+00 4.393189671633001e+00 9.368391664273973e+03 + 20220 1.016965141764929e+00 -6.049349437971520e+00 -5.982202052586022e+00 3.431179482534074e+00 4.816750160441909e+00 9.162507160786441e+03 + 20240 9.861430814749272e-01 -6.007102407961306e+00 -6.011218332338673e+00 3.696941928853318e+00 4.673307654141236e+00 9.251510062202258e+03 + 20260 9.405936206617813e-01 -5.942195833043561e+00 -6.055781457630557e+00 3.924739429600359e+00 4.272513195903229e+00 9.389085798850740e+03 + 20280 9.805480149222873e-01 -6.002687781075884e+00 -5.989735179017092e+00 3.721844142167145e+00 4.796219987597417e+00 9.185566691048263e+03 + 20300 9.706827011806651e-01 -5.985610589325684e+00 -6.051859323420521e+00 3.744540622888489e+00 4.364130139757462e+00 9.376952047337207e+03 + 20320 1.068733059033512e+00 -6.129544708449274e+00 -6.001568710419985e+00 3.024546389674345e+00 4.759404374580209e+00 9.221891222022272e+03 + 20340 9.794570203032898e-01 -5.997048265894277e+00 -6.057933250327647e+00 3.708667107966524e+00 4.359056105429223e+00 9.395746030950391e+03 + 20360 9.770829054613281e-01 -5.993687033862550e+00 -6.009079497378258e+00 3.727072590709730e+00 4.638686683226505e+00 9.244957907243524e+03 + 20380 1.002133245790943e+00 -6.029853383618754e+00 -5.991783214986997e+00 3.550013987799178e+00 4.768618787422284e+00 9.191868217510111e+03 + 20400 9.472772142789257e-01 -5.946808075841325e+00 -5.997675630091474e+00 4.012504176806673e+00 4.720414808573737e+00 9.209913887731114e+03 + 20420 1.014192086829486e+00 -6.040777001317944e+00 -6.012451121140776e+00 3.468434014848575e+00 4.631085602241669e+00 9.255316520455894e+03 + 20440 1.050186936604881e+00 -6.085781377171626e+00 -6.014440760031966e+00 3.227857800314198e+00 4.637506663854952e+00 9.261449370507275e+03 + 20460 9.807375831300983e-01 -5.970646754460472e+00 -6.024792324392498e+00 3.802572311342199e+00 4.491660069792639e+00 9.293329017797170e+03 + 20480 9.907901984679863e-01 -5.968719470629054e+00 -6.024575060145367e+00 3.893116999479061e+00 4.572385560851847e+00 9.292605659613748e+03 + 20500 9.740540493222988e-01 -5.916287546760791e+00 -6.032040520429035e+00 4.127425946481626e+00 4.462754458963784e+00 9.315646302711850e+03 + 20520 1.043480955921285e+00 -5.981752443590510e+00 -5.996234930195419e+00 3.786266060250839e+00 4.703105381007895e+00 9.205481234825786e+03 + 20540 1.076193397646792e+00 -5.988243320817396e+00 -5.990379169641106e+00 3.770083979467131e+00 4.757819604999856e+00 9.187536436074761e+03 + 20560 1.112186467207307e+00 -6.005097502974290e+00 -6.020209458213637e+00 3.638708700495076e+00 4.551933514943231e+00 9.279199705920008e+03 + 20580 1.044174981412470e+00 -5.879908256610170e+00 -5.993803420588197e+00 4.322831372948009e+00 4.668827716166513e+00 9.198007197624062e+03 + 20600 9.975717522327996e-01 -5.793243936578589e+00 -6.007931768772957e+00 4.848455720195553e+00 4.615684964900828e+00 9.241336031333087e+03 + 20620 1.098067456508000e+00 -5.928387762087036e+00 -6.035327414136665e+00 4.059566504973487e+00 4.445502474046847e+00 9.325787161698740e+03 + 20640 1.063333505477310e+00 -5.874048520600956e+00 -6.002243562077636e+00 4.398272694232821e+00 4.662156927955171e+00 9.223930112575763e+03 + 20660 1.084801540141090e+00 -5.913090840923056e+00 -6.002826983718414e+00 4.186248134060500e+00 4.670969315506336e+00 9.225736051273207e+03 + 20680 1.021662076094505e+00 -5.838108476582249e+00 -6.049166687138635e+00 4.544955480838302e+00 4.333026574671004e+00 9.368589877607361e+03 + 20700 1.022764765296458e+00 -5.868131624538714e+00 -6.017826199171981e+00 4.368311828685547e+00 4.508742415980769e+00 9.271838690796232e+03 + 20720 1.065405369115974e+00 -5.967403109372003e+00 -5.949788644892561e+00 3.858497333347670e+00 4.959642314218191e+00 9.063528575138669e+03 + 20740 9.759238150040030e-01 -5.870851666842524e+00 -6.000352654015559e+00 4.447614702167244e+00 4.703999993606676e+00 9.218096448121722e+03 + 20760 1.010452425542852e+00 -5.958520888917298e+00 -5.995049490054967e+00 3.917538120304946e+00 4.707785239789692e+00 9.201847401234005e+03 + 20780 1.023576167188246e+00 -6.011003807764922e+00 -5.986012503698199e+00 3.638122023276601e+00 4.781625958619530e+00 9.174164093210504e+03 + 20800 1.053968797308957e+00 -6.084166244871769e+00 -5.987085684173628e+00 3.227239874031057e+00 4.784691476727997e+00 9.177436747836224e+03 + 20820 9.935676034972494e-01 -6.015652221019179e+00 -5.969644438771562e+00 3.628642187756728e+00 4.892825993103838e+00 9.124100756397323e+03 + 20840 1.005558982561341e+00 -6.049511334532268e+00 -5.969553032206277e+00 3.429620547986969e+00 4.888753493450108e+00 9.123825756249435e+03 + 20860 9.849149869967847e-01 -6.029458955252252e+00 -6.002294926689953e+00 3.545970358363884e+00 4.701950413988442e+00 9.224098724280328e+03 + 20880 1.023133857683913e+00 -6.093658219226695e+00 -6.010501351655464e+00 3.197146814970753e+00 4.674646417048433e+00 9.249335776049798e+03 + 20900 9.283506708574563e-01 -5.958665354356949e+00 -6.031748884389691e+00 3.901204885579098e+00 4.481547946491371e+00 9.314776944930894e+03 + 20920 9.728970037354627e-01 -6.026307355429102e+00 -6.009935809560459e+00 3.554194339048871e+00 4.648202288915156e+00 9.247578464827862e+03 + 20940 9.990652401259520e-01 -6.063487644739144e+00 -5.997337584166799e+00 3.405329484061499e+00 4.785173368556695e+00 9.208879601272636e+03 + 20960 9.798144692042623e-01 -6.033476138988419e+00 -6.004236514427561e+00 3.477622080060239e+00 4.645520529105967e+00 9.230076126795699e+03 + 20980 9.755689889544166e-01 -6.023493904682441e+00 -6.028323719862426e+00 3.571147175653642e+00 4.543413629478688e+00 9.304202750525485e+03 + 21000 9.644761293573554e-01 -5.999588150924776e+00 -6.004966910098013e+00 3.666669895710057e+00 4.635784228177044e+00 9.232315629382309e+03 + 21020 1.031214805769750e+00 -6.087914023844531e+00 -6.003176559557147e+00 3.190768807349337e+00 4.677344440367714e+00 9.226814293579466e+03 + 21040 9.826584091417588e-01 -6.003613028405124e+00 -5.976714239452956e+00 3.645010060191101e+00 4.799467068928585e+00 9.145710528857706e+03 + 21060 9.438143736525921e-01 -5.927599647042834e+00 -6.030985598860433e+00 4.046364630383923e+00 4.452706496122937e+00 9.312412899756817e+03 + 21080 1.006785417446187e+00 -5.995713434579613e+00 -5.991652955329818e+00 3.709523298824741e+00 4.732839199034201e+00 9.191440561035070e+03 + 21100 1.032536243899388e+00 -5.999799998980365e+00 -5.979895493076684e+00 3.682831218019327e+00 4.797125971130594e+00 9.155429641165165e+03 + 21120 9.932779087044918e-01 -5.894547195768276e+00 -6.024273073278764e+00 4.294787315886884e+00 4.549881252206993e+00 9.291685203283479e+03 + 21140 1.042949984981962e+00 -5.916846588439665e+00 -6.001628564479260e+00 4.125932828010661e+00 4.639101601622914e+00 9.222015978352098e+03 + 21160 1.033527544230416e+00 -5.854924193430558e+00 -5.978771673861806e+00 4.538309335569391e+00 4.827157937597506e+00 9.151962310151646e+03 + 21180 1.069629222611741e+00 -5.873617491857473e+00 -6.028013657883055e+00 4.387348922961035e+00 4.500782244912666e+00 9.303206413504528e+03 + 21200 1.069554727962755e+00 -5.852884303326673e+00 -6.048313171143107e+00 4.519290630115002e+00 4.397107828593484e+00 9.365936838385702e+03 + 21220 1.162437437752148e+00 -5.983886239561020e+00 -6.017301182400144e+00 3.845239331869627e+00 4.653365559141685e+00 9.270242835367450e+03 + 21240 1.110927368371439e+00 -5.913093429662656e+00 -6.030391969691578e+00 4.172126778072816e+00 4.498580409336339e+00 9.310580942004379e+03 + 21260 1.076156925729344e+00 -5.879327709136879e+00 -6.056924509322673e+00 4.339480739768585e+00 4.319692430085749e+00 9.392579533432981e+03 + 21280 1.070917955958969e+00 -5.898186156484973e+00 -6.031325659822243e+00 4.169117056077584e+00 4.404609424643428e+00 9.313422772339565e+03 + 21300 1.096514350867134e+00 -5.964242122462515e+00 -5.965856745133010e+00 3.852627379552065e+00 4.843355966316033e+00 9.112523989324796e+03 + 21320 1.067116952072880e+00 -5.949828696643183e+00 -5.983683640868516e+00 3.961301917667972e+00 4.766901588890426e+00 9.167008976229488e+03 + 21340 9.733042516427146e-01 -5.835069249974747e+00 -5.947280280487305e+00 4.612307680114125e+00 4.967974578310169e+00 9.055851518306297e+03 + 21360 1.027577094914803e+00 -5.934853032564371e+00 -5.968813881455328e+00 4.021935460196642e+00 4.826927010440385e+00 9.121532734448489e+03 + 21380 1.072609431119996e+00 -6.017543317914700e+00 -5.945600472818894e+00 3.620825948338215e+00 5.033932897997630e+00 9.050796974970299e+03 + 21400 9.898946527274978e-01 -5.910041399240425e+00 -6.033861952900703e+00 4.166328072670215e+00 4.455331292384146e+00 9.321277870693659e+03 + 21420 1.002618689541760e+00 -5.943549275291296e+00 -6.058161470521888e+00 4.037367424121746e+00 4.379246462927791e+00 9.396465339080180e+03 + 21440 1.022523196262328e+00 -5.991500822278101e+00 -6.015991109776595e+00 3.798009117407330e+00 4.657382096731232e+00 9.266207608493725e+03 + 21460 1.059089874788827e+00 -6.066078896928149e+00 -5.990081880932252e+00 3.311912550245063e+00 4.748299176593717e+00 9.186645376663882e+03 + 21480 1.054238961730728e+00 -6.077712979255447e+00 -6.017636717937188e+00 3.262195039965717e+00 4.607162229226548e+00 9.271264107581936e+03 + 21500 9.117177860077734e-01 -5.883921577482081e+00 -6.014824999103746e+00 4.325280397932168e+00 4.573612693741538e+00 9.262617603510133e+03 + 21520 1.010417205342929e+00 -6.044304872359831e+00 -6.001938698005755e+00 3.443219211531480e+00 4.686492340816871e+00 9.222972778370078e+03 + 21540 1.031517411384685e+00 -6.088394098247186e+00 -5.975013701558337e+00 3.249523428909468e+00 4.900571212256517e+00 9.140519997862086e+03 + 21560 9.802114896980247e-01 -6.023301455488809e+00 -5.987417889694369e+00 3.631336888261532e+00 4.837385876017068e+00 9.178455184561197e+03 + 21580 9.523865789964984e-01 -5.990036382421643e+00 -6.036381431848802e+00 3.702501173525748e+00 4.436380727841776e+00 9.329074912816708e+03 + 21600 9.618832287670501e-01 -6.009764519970290e+00 -5.998858361310391e+00 3.661114967047775e+00 4.723739817795517e+00 9.213557308102641e+03 + 21620 9.991822204948586e-01 -6.069333989204245e+00 -6.012598936711749e+00 3.281312772338182e+00 4.607094223471096e+00 9.255787206887571e+03 + 21640 9.975387108981174e-01 -6.069686768196506e+00 -5.959094625635263e+00 3.336562171232038e+00 4.971599367897445e+00 9.091906516735027e+03 + 21660 9.176883502925216e-01 -5.948980258039859e+00 -6.043294795370389e+00 3.937871652254803e+00 4.396302983775419e+00 9.350411904248975e+03 + 21680 1.037480589102382e+00 -6.120968083484707e+00 -5.968890150255713e+00 3.053663895513688e+00 4.926918922098682e+00 9.121798567109558e+03 + 21700 1.017693248961251e+00 -6.079083182585039e+00 -6.013947341096353e+00 3.269668584615350e+00 4.643688666182284e+00 9.259919286489428e+03 + 21720 9.784267063155418e-01 -6.001117367213049e+00 -5.991560774637366e+00 3.715632779882378e+00 4.770508213329871e+00 9.191147402971383e+03 + 21740 1.008826176109950e+00 -6.016998960806224e+00 -5.975838622257434e+00 3.672092229815318e+00 4.908441263304280e+00 9.143009594972627e+03 + 21760 1.057957010716708e+00 -6.047520604583877e+00 -5.974675309421018e+00 3.448097911739364e+00 4.866386869337496e+00 9.139464789237909e+03 + 21780 9.857884497081655e-01 -5.893655433098539e+00 -6.020546630397257e+00 4.259868270578128e+00 4.531239379339565e+00 9.280243038816960e+03 + 21800 1.065179958817701e+00 -5.970910252406604e+00 -6.006105104891636e+00 3.867233776365414e+00 4.665139487010541e+00 9.235795396948753e+03 + 21820 1.060341471203150e+00 -5.930967415214470e+00 -6.017087578744073e+00 4.067489978088696e+00 4.572974672049476e+00 9.269567944167715e+03 + 21840 1.062198680552602e+00 -5.910844443134891e+00 -6.040499018472351e+00 4.138637361855372e+00 4.394140726286985e+00 9.341778960706453e+03 + 21860 1.071349459120031e+00 -5.912297703179904e+00 -6.038503742565334e+00 4.137643532929964e+00 4.412948924457350e+00 9.335614050126283e+03 + 21880 9.921804189413620e-01 -5.794255659959075e+00 -6.032695035148310e+00 4.814590726099097e+00 4.445434935388448e+00 9.317651938648412e+03 + 21900 1.030933188808533e+00 -5.857939950527225e+00 -5.985168744207794e+00 4.465382652877279e+00 4.734815230971265e+00 9.171543263581410e+03 + 21920 1.087784855516030e+00 -5.954498888403711e+00 -6.028302886128120e+00 3.896412090381455e+00 4.472618114316157e+00 9.304115210492164e+03 + 21940 1.019372206528466e+00 -5.873423736170621e+00 -6.001249277681659e+00 4.426888385923693e+00 4.692894345628693e+00 9.220856434609326e+03 + 21960 1.005064329583877e+00 -5.880187997663567e+00 -6.038125488443774e+00 4.249357550793266e+00 4.342456037985607e+00 9.334433809838858e+03 + 21980 1.075590252776410e+00 -6.017467360143520e+00 -5.984017293280871e+00 3.614421480089248e+00 4.806496940395697e+00 9.168044221181342e+03 + 22000 9.791842540399127e-01 -5.910893630165966e+00 -5.999990913893009e+00 4.153733472935152e+00 4.642123082014378e+00 9.217017459902554e+03 + 22020 1.078276493899278e+00 -6.092097855927024e+00 -5.960477442012960e+00 3.233857554953847e+00 4.989642339841625e+00 9.096104996897084e+03 + 22040 9.946238097588608e-01 -5.996268955262110e+00 -6.031266671234464e+00 3.706267606356142e+00 4.505305305363844e+00 9.313279354901801e+03 + 22060 9.863429011588278e-01 -6.007988761806122e+00 -6.008849202428545e+00 3.669029130642902e+00 4.664088347436194e+00 9.244252909920553e+03 + 22080 1.014110122613598e+00 -6.066710450700308e+00 -6.026594965597335e+00 3.320255272978876e+00 4.550604596291404e+00 9.298875735232668e+03 + 22100 9.635746292318319e-01 -6.004607018160431e+00 -6.025035674097280e+00 3.662145872559921e+00 4.544841368846241e+00 9.294063866334929e+03 + 22120 9.756423201190462e-01 -6.030219494163190e+00 -6.005196959354591e+00 3.494781540305620e+00 4.638464807401343e+00 9.232979094433753e+03 + 22140 9.781356968218186e-01 -6.036788409492193e+00 -6.011170967323522e+00 3.515071815672006e+00 4.662171132890879e+00 9.251355786874048e+03 + 22160 9.773806029344771e-01 -6.035621433563411e+00 -5.968222151680054e+00 3.528900864758814e+00 4.915917971338214e+00 9.119774347634357e+03 + 22180 9.873137347130815e-01 -6.047992354179838e+00 -5.970940039230413e+00 3.443251160958964e+00 4.885697477205763e+00 9.128058866293246e+03 + 22200 9.433788662083131e-01 -5.976718640691713e+00 -6.030278506159959e+00 3.810206589008355e+00 4.502657553127293e+00 9.310210493666234e+03 + 22220 1.002202782726228e+00 -6.056621195965553e+00 -5.987791228584612e+00 3.398155433633847e+00 4.793387757738240e+00 9.179618695345227e+03 + 22240 1.045122163464989e+00 -6.110949579240421e+00 -5.995108964808876e+00 3.086447118241544e+00 4.751621852584622e+00 9.202050882342955e+03 + 22260 1.032069982609295e+00 -6.082048895281526e+00 -6.008549811889415e+00 3.224977830209054e+00 4.647020940992954e+00 9.243325747453144e+03 + 22280 9.488492854565588e-01 -5.947876096516975e+00 -6.028210992060165e+00 4.001492710907394e+00 4.540197308913486e+00 9.303870597169464e+03 + 22300 1.022933068185239e+00 -6.047374766531158e+00 -6.015438072648855e+00 3.467186927507160e+00 4.650572365966749e+00 9.264499143348086e+03 + 22320 1.013649306702181e+00 -6.022835324079803e+00 -6.017814666505347e+00 3.554289745009737e+00 4.583119137746509e+00 9.271825300975739e+03 + 22340 1.021903390132573e+00 -6.022701364889643e+00 -6.004916882618241e+00 3.604623772061068e+00 4.706745021403194e+00 9.232131730126526e+03 + 22360 1.012739045580087e+00 -5.995756241031027e+00 -5.973393793525524e+00 3.717661834500649e+00 4.846070468654819e+00 9.135549941828902e+03 + 22380 1.010190828357459e+00 -5.975399110851088e+00 -6.000114424650384e+00 3.838577960625002e+00 4.696658804106994e+00 9.217368615969996e+03 + 22400 9.880203182961083e-01 -5.920467293067025e+00 -5.982862634910545e+00 4.113524516532355e+00 4.755240808018917e+00 9.164505555565565e+03 + 22420 9.897084656321042e-01 -5.892123913270458e+00 -6.018992393641823e+00 4.257475638325859e+00 4.528977191199597e+00 9.275417911259763e+03 + 22440 1.071792787752470e+00 -5.974080398413129e+00 -5.970799873845892e+00 3.800270611356679e+00 4.819107891081288e+00 9.127619543840616e+03 + 22460 1.061269894937528e+00 -5.909992261626056e+00 -6.026280229392357e+00 4.111674680589880e+00 4.443931174170925e+00 9.297886780924415e+03 + 22480 1.017486846457113e+00 -5.799625911062781e+00 -6.045686551027796e+00 4.789648785615475e+00 4.376730513175393e+00 9.357823538952111e+03 + 22500 1.150917520413689e+00 -5.961445657331696e+00 -6.022149601380879e+00 3.894672483520631e+00 4.546101042885240e+00 9.285158609210597e+03 + 22520 1.088721251061558e+00 -5.846850275644146e+00 -6.055708996639575e+00 4.482440596607650e+00 4.283141499869277e+00 9.388797684589230e+03 + 22540 1.134036404892634e+00 -5.906985870378605e+00 -6.009617519884742e+00 4.188178044451480e+00 4.598851230790808e+00 9.246566159902792e+03 + 22560 1.110402598658546e+00 -5.876964244023634e+00 -6.042903493646666e+00 4.350953311061009e+00 4.398104460709675e+00 9.349231875310472e+03 + 22580 1.127121746776977e+00 -5.921967624334484e+00 -6.025388875661401e+00 4.091775324358464e+00 4.497914494852389e+00 9.295154677335213e+03 + 22600 1.119081371964110e+00 -5.945095749626113e+00 -6.010954108234255e+00 4.013430903879822e+00 4.635262017203816e+00 9.250688851743560e+03 + 22620 1.083575986922793e+00 -5.938036943466445e+00 -5.991486865382374e+00 4.071656756710355e+00 4.764739033720404e+00 9.190893418647351e+03 + 22640 1.023425350867024e+00 -5.889817555634862e+00 -5.979574038499083e+00 4.289643349288475e+00 4.774247734911291e+00 9.154393592083175e+03 + 22660 1.016049366706371e+00 -5.910594642931821e+00 -6.018363912409598e+00 4.194848991501653e+00 4.576021168919703e+00 9.273494421174470e+03 + 22680 1.019362715649544e+00 -5.941671153670428e+00 -6.053775143749082e+00 4.002753316952152e+00 4.359034857884120e+00 9.382855435500314e+03 + 22700 1.009147208958071e+00 -5.946887610575694e+00 -6.050604580039914e+00 3.929319252235040e+00 4.333760363422339e+00 9.373065408314136e+03 + 22720 9.917939204053360e-01 -5.939725427232059e+00 -6.039452249715718e+00 4.015311498394498e+00 4.442664651017422e+00 9.338559838362818e+03 + 22740 9.917983440078565e-01 -5.955244795444909e+00 -5.977281657003357e+00 3.950073152599922e+00 4.823534083338011e+00 9.147417428729206e+03 + 22760 9.934982793514509e-01 -5.968303801051256e+00 -5.995861864421935e+00 3.898795239613080e+00 4.740552575142114e+00 9.204343814396707e+03 + 22780 9.959015940190978e-01 -5.981246746080947e+00 -6.010751541374797e+00 3.772277637418077e+00 4.602856536988476e+00 9.250101310686056e+03 + 22800 1.067864695646853e+00 -6.099386971394566e+00 -5.995166889645763e+00 3.170890444839320e+00 4.769338282246469e+00 9.202220161996514e+03 + 22820 9.829507758994138e-01 -5.986911488436851e+00 -5.978442797388142e+00 3.793468680330104e+00 4.842097214857494e+00 9.150985888901510e+03 + 22840 1.011033585730668e+00 -6.038924600947125e+00 -5.962539641825717e+00 3.540221251749691e+00 4.978835507559038e+00 9.102405955831222e+03 + 22860 9.712546253928072e-01 -5.988815276776822e+00 -6.031471855858626e+00 3.689635540153840e+00 4.444694861981839e+00 9.313909945226049e+03 + 22880 1.006454689527280e+00 -6.049567795360125e+00 -5.988920296720647e+00 3.433190406984386e+00 4.781437729342353e+00 9.183061211793434e+03 + 22900 9.386964559902257e-01 -5.955594453236765e+00 -5.999689384080467e+00 3.914822107841274e+00 4.661622191268242e+00 9.216106597189138e+03 + 22920 1.007394457245683e+00 -6.061847621554983e+00 -6.012327536351181e+00 3.363278260553941e+00 4.647630253002590e+00 9.254937766312627e+03 + 22940 9.856526122832221e-01 -6.034066044950441e+00 -6.004231947329220e+00 3.554380557368126e+00 4.725692562720859e+00 9.230031823235486e+03 + 22960 9.277948979763895e-01 -5.951212396230093e+00 -5.999064466929994e+00 3.946278199114185e+00 4.671504204071347e+00 9.214174265640529e+03 + 22980 9.849845352007680e-01 -6.033691290143869e+00 -5.988549144811508e+00 3.555269295324171e+00 4.814482479547006e+00 9.181943358955863e+03 + 23000 9.593695194668642e-01 -5.990161174826070e+00 -6.042727478124340e+00 3.740217058008258e+00 4.438373209860441e+00 9.348693846786753e+03 + 23020 9.725084319887580e-01 -6.002389754789930e+00 -6.049871289363112e+00 3.621792119668010e+00 4.349145800405072e+00 9.370781724633902e+03 + 23040 9.898607363961632e-01 -6.017834627085242e+00 -6.009095379658098e+00 3.595951019431225e+00 4.646133130552053e+00 9.244998541093833e+03 + 23060 9.811426977747457e-01 -5.989916236214349e+00 -6.048329802687061e+00 3.672607010378285e+00 4.337187272221772e+00 9.366003662076519e+03 + 23080 9.741572166262803e-01 -5.960423297079621e+00 -6.010949377970067e+00 3.889171744034374e+00 4.599043168675684e+00 9.250676319587432e+03 + 23100 1.012521286047647e+00 -5.992948362440125e+00 -6.005821413047384e+00 3.701821779981683e+00 4.627902731296657e+00 9.234928075040900e+03 + 23120 1.033441909342704e+00 -5.993466095531886e+00 -6.016665799834858e+00 3.737451449511797e+00 4.604235157261493e+00 9.268278304532692e+03 + 23140 9.839719562834255e-01 -5.890483385032412e+00 -6.021384655078157e+00 4.259201109391816e+00 4.507545759883075e+00 9.282802283237195e+03 + 23160 1.026149895686381e+00 -5.924878627775872e+00 -6.046219349490654e+00 4.044858561377625e+00 4.348101359875349e+00 9.359483789355767e+03 + 23180 1.028697724661663e+00 -5.904062481675901e+00 -6.043329338090022e+00 4.204983137031388e+00 4.405291296025125e+00 9.350535760772420e+03 + 23200 9.980700119762436e-01 -5.840127364905873e+00 -6.076029806657210e+00 4.478516899961652e+00 4.123928573640600e+00 9.451900233429831e+03 + 23220 1.058994619633527e+00 -5.919345476709426e+00 -6.017838613992297e+00 4.168795971461033e+00 4.603233135419054e+00 9.271868556231011e+03 + 23240 1.031573877085271e+00 -5.875266293667829e+00 -5.998217711288674e+00 4.339147528162528e+00 4.633141461513252e+00 9.211571431317750e+03 + 23260 1.102825573245005e+00 -5.983738132594798e+00 -5.949134346531535e+00 3.863028937651286e+00 5.061729232145133e+00 9.061557750696631e+03 + 23280 1.045748094352845e+00 -5.908666347075487e+00 -5.987616138066322e+00 4.183209929465819e+00 4.729868012155770e+00 9.179022870235434e+03 + 23300 1.019932737237722e+00 -5.888847334362409e+00 -5.975519434104493e+00 4.306510626363432e+00 4.808826017180297e+00 9.142035954516321e+03 + 23320 1.076023815098867e+00 -5.999473789687279e+00 -5.961668537275158e+00 3.729108550553048e+00 4.946192160247353e+00 9.099738705580121e+03 + 23340 9.897645344163664e-01 -5.909750207532914e+00 -6.037025754741103e+00 4.177027002458995e+00 4.446191114562295e+00 9.331026448331851e+03 + 23360 1.031551352684153e+00 -6.017780762340863e+00 -5.975994869735930e+00 3.633175452541894e+00 4.873116514225400e+00 9.143498879736911e+03 + 23380 9.858864315093101e-01 -5.996644894474031e+00 -6.010268311654070e+00 3.750106788288680e+00 4.671879018623899e+00 9.248602736459068e+03 + 23400 1.001463710505521e+00 -6.059715796838573e+00 -5.997178557384169e+00 3.411405585371386e+00 4.770504091925101e+00 9.208386622632825e+03 + 23420 9.272625447238150e-01 -5.979300009921445e+00 -5.987719764977788e+00 3.868219897412903e+00 4.819872360926496e+00 9.179384970901743e+03 + 23440 9.790489579046698e-01 -6.071663597663365e+00 -6.017463239992027e+00 3.315125456262189e+00 4.626352297489250e+00 9.270739234005696e+03 + 23460 9.498444317901912e-01 -6.037071217677043e+00 -6.029516770523903e+00 3.519351028086443e+00 4.562729832686690e+00 9.307889742652553e+03 + 23480 9.587451758153004e-01 -6.053120840798645e+00 -6.006499058858436e+00 3.403503749548825e+00 4.671213236146944e+00 9.237028700563680e+03 + 23500 9.580971217050270e-01 -6.050669376979902e+00 -6.003372098162060e+00 3.386329065201100e+00 4.657917359403393e+00 9.227420406352667e+03 + 23520 9.618333854857086e-01 -6.051226744828899e+00 -5.987168060212904e+00 3.484344524877296e+00 4.852179404991750e+00 9.177689260641102e+03 + 23540 9.256909825770875e-01 -5.988130663443041e+00 -6.013616897643071e+00 3.737973401501503e+00 4.591627500742938e+00 9.258892346360060e+03 + 23560 9.388474676000665e-01 -5.994663789035952e+00 -6.013648492429573e+00 3.659408208648807e+00 4.550395103889278e+00 9.258995664711287e+03 + 23580 1.033284476206907e+00 -6.118741274703321e+00 -5.981643977154798e+00 3.037711113451839e+00 4.824945011713691e+00 9.160792645420865e+03 + 23600 9.519040455179578e-01 -5.980089820255312e+00 -5.999916908400648e+00 3.785027667215040e+00 4.671177458852547e+00 9.216796751694106e+03 + 23620 9.510668118423510e-01 -5.960526742228542e+00 -5.991342513987050e+00 3.904037397892837e+00 4.727088467730221e+00 9.190417703350557e+03 + 23640 9.704996060251925e-01 -5.966749573255314e+00 -5.966868434022453e+00 3.944081522410401e+00 4.943399005491838e+00 9.115594267495035e+03 + 23660 1.036087641881834e+00 -6.039445002027708e+00 -5.975949467243177e+00 3.513120831014192e+00 4.877722017649218e+00 9.143369609065048e+03 + 23680 1.015852972346701e+00 -5.986689522443347e+00 -5.994056703826891e+00 3.774296722845871e+00 4.731993227273925e+00 9.198816404600164e+03 + 23700 1.057937618686519e+00 -6.028660309030625e+00 -5.981268215407511e+00 3.529025933235599e+00 4.801158668722306e+00 9.159634717256593e+03 + 23720 1.038624978041034e+00 -5.983225462523315e+00 -6.014821956745623e+00 3.820556958933788e+00 4.639124999567619e+00 9.262555526581698e+03 + 23740 1.073526975972904e+00 -6.022254942842240e+00 -6.002423181036693e+00 3.530249124822784e+00 4.644126170065451e+00 9.224485996391422e+03 + 23760 1.084856207923616e+00 -6.032507058155222e+00 -5.992586169092958e+00 3.549181051059947e+00 4.778412973793083e+00 9.194297872983710e+03 + 23780 9.829457539641898e-01 -5.880809830170332e+00 -6.000033499784257e+00 4.343334773172973e+00 4.658734012446571e+00 9.217139005390751e+03 + 23800 1.034422900736371e+00 -5.959025052083293e+00 -5.984580144561593e+00 3.887999272833734e+00 4.741257977185553e+00 9.169781637771348e+03 + 23820 1.031886180157727e+00 -5.959416208015627e+00 -6.034136432326788e+00 3.886796221063539e+00 4.457741130151510e+00 9.322133684205193e+03 + 23840 9.951000712718758e-01 -5.913518452648532e+00 -6.040119713245875e+00 4.129335276720804e+00 4.402371246889094e+00 9.340620039053312e+03 + 23860 1.017771427992971e+00 -5.961577581985477e+00 -6.039937451346551e+00 3.901020262927456e+00 4.451065766905569e+00 9.340046665981188e+03 + 23880 9.695564443225816e-01 -5.911934511938344e+00 -6.025563753982830e+00 4.174713523118706e+00 4.522236831230891e+00 9.295689381826751e+03 + 23900 1.017922555481183e+00 -6.014934897600943e+00 -5.986808715496805e+00 3.652990556827992e+00 4.814495446982569e+00 9.176576109159181e+03 + 23920 9.862784642173218e-01 -6.014207631817699e+00 -5.974217975416686e+00 3.632495870917814e+00 4.862122666351761e+00 9.138033402900586e+03 + 23940 9.330227206985735e-01 -5.993666234544509e+00 -5.993285881035311e+00 3.761297248232474e+00 4.763481296941806e+00 9.196457316476412e+03 + 23960 9.254457258346219e-01 -6.051594061061197e+00 -6.016324576480473e+00 3.427856633576790e+00 4.630379471974402e+00 9.267249535778268e+03 + 23980 9.735717043445666e-01 -6.175742417946459e+00 -5.976136574820107e+00 2.712806761154854e+00 4.858974401290765e+00 9.143959595157115e+03 + 24000 9.461904016993739e-01 -6.162362801842079e+00 -5.942708611897298e+00 2.822091742574888e+00 5.083380092613861e+00 9.042024653545230e+03 + 24020 8.827740075669109e-01 -6.074994615589641e+00 -5.965608107864369e+00 3.327661798667717e+00 4.955776053533588e+00 9.111770632495462e+03 + 24040 8.694914430515757e-01 -6.049834139684096e+00 -5.997112163632315e+00 3.446530054846037e+00 4.749267800034789e+00 9.208196656681861e+03 + 24060 9.770259115146306e-01 -6.196234744784419e+00 -5.951866099524890e+00 2.630889104396634e+00 5.034091681402490e+00 9.069898493160508e+03 + 24080 9.500184915643773e-01 -6.137244672977647e+00 -5.997965708629570e+00 2.983471802648181e+00 4.783233169284918e+00 9.210809015067754e+03 + 24100 9.420962014318667e-01 -6.101469350232633e+00 -6.006033130706827e+00 3.105708382404392e+00 4.653717923628812e+00 9.235592766975195e+03 + 24120 9.005996509335893e-01 -6.012477049791240e+00 -6.029872390385022e+00 3.597806074122518e+00 4.497919336512764e+00 9.308968757018341e+03 + 24140 9.010626127323625e-01 -5.982477216570068e+00 -5.989285181675137e+00 3.748674817132712e+00 4.709582427970213e+00 9.184171513823811e+03 + 24160 9.340095060498078e-01 -5.996126183762268e+00 -5.988685410335099e+00 3.687672227795691e+00 4.730398300270459e+00 9.182352736068940e+03 + 24180 1.035111043595285e+00 -6.111302657768197e+00 -5.988778468249215e+00 3.090053368594201e+00 4.793606225369240e+00 9.182638767890978e+03 + 24200 1.010220698003109e+00 -6.044298089255832e+00 -5.975470784254828e+00 3.522563701777810e+00 4.917780738084607e+00 9.141859723944701e+03 + 24220 9.983542603191261e-01 -6.000767529831013e+00 -5.992122209290900e+00 3.736755116293572e+00 4.786397884693931e+00 9.192859081593504e+03 + 24240 1.016583207696205e+00 -6.005094356643840e+00 -5.970443641816342e+00 3.718750405015055e+00 4.917720171735339e+00 9.126531775333135e+03 + 24260 1.022579859651586e+00 -5.994450041568252e+00 -5.976274265585198e+00 3.778326428489127e+00 4.882694546876062e+00 9.144330910439183e+03 + 24280 1.014956747587736e+00 -5.966298557591905e+00 -5.959606009886473e+00 3.889281573583992e+00 4.927711218176997e+00 9.093475534569921e+03 + 24300 1.005012926340284e+00 -5.935451858044829e+00 -6.056797693668470e+00 4.031581558630239e+00 4.334794992271921e+00 9.392212664331517e+03 + 24320 1.050812889178244e+00 -5.992316416034029e+00 -6.007485130162472e+00 3.786865558077262e+00 4.699764454200819e+00 9.240046012263678e+03 + 24340 1.052751976300991e+00 -5.989337970114093e+00 -6.008636429419245e+00 3.706146593502732e+00 4.595331853745623e+00 9.243588463416218e+03 + 24360 1.020140407111782e+00 -5.940444061288757e+00 -5.964522902994716e+00 3.971568843392322e+00 4.833304408127990e+00 9.108444583215429e+03 + 24380 1.004476407976813e+00 -5.917642030958069e+00 -6.002092366228823e+00 4.118010119754702e+00 4.633083225982882e+00 9.223441691313181e+03 + 24400 9.682290933549051e-01 -5.866504879326892e+00 -6.033010760154932e+00 4.427329357197440e+00 4.471226822781056e+00 9.318645430569970e+03 + 24420 1.106115694556303e+00 -6.077447382232939e+00 -6.002388163695597e+00 3.245260593546187e+00 4.676262241764134e+00 9.224402761741734e+03 + 24440 1.058058242281482e+00 -6.018222460160856e+00 -6.045898858625310e+00 3.560866388236781e+00 4.401944225345067e+00 9.358495826767145e+03 + 24460 1.042267008513897e+00 -6.018523225681511e+00 -5.987975837921740e+00 3.584047117655611e+00 4.759454945365192e+00 9.180170621034884e+03 + 24480 8.925470910252520e-01 -5.826080163260807e+00 -6.044688016840915e+00 4.659401622998088e+00 4.404121498285098e+00 9.354724363514482e+03 + 24500 1.010885171849571e+00 -6.036783431494696e+00 -6.005133100398313e+00 3.477245382619505e+00 4.658986481647840e+00 9.232815281754381e+03 + 24520 1.000192092925360e+00 -6.062621912243226e+00 -5.998938392836215e+00 3.322692004629349e+00 4.688372628057186e+00 9.213797462472592e+03 + 24540 9.496901712257360e-01 -6.026168831452337e+00 -5.978729232232556e+00 3.580368102496390e+00 4.852773622470629e+00 9.151852236469351e+03 + 24560 9.349994211157662e-01 -6.036811959563241e+00 -5.995365458101583e+00 3.485507649975990e+00 4.723499875194205e+00 9.202844637446275e+03 + 24580 9.594872195241546e-01 -6.096634286460734e+00 -5.997022123165960e+00 3.168506738203195e+00 4.740495194774237e+00 9.207903964021212e+03 + 24600 9.358544131224551e-01 -6.076735174192317e+00 -6.010444660283974e+00 3.266325980765547e+00 4.646976370051126e+00 9.249144290688375e+03 + 24620 8.793918590744703e-01 -5.998620939868289e+00 -6.009058734772514e+00 3.702464222521960e+00 4.642528788938360e+00 9.244885923350712e+03 + 24640 9.674796517535932e-01 -6.127324090752232e+00 -5.967901047524539e+00 3.025991535915402e+00 4.941423320765022e+00 9.118789808488358e+03 + 24660 9.272482877804114e-01 -6.059013047479327e+00 -6.028383756566683e+00 3.338425938815589e+00 4.514304067103444e+00 9.304400717487002e+03 + 24680 9.737364887749883e-01 -6.116164012234549e+00 -5.990895767685797e+00 3.046696682249796e+00 4.766006327646926e+00 9.189105913326261e+03 + 24700 9.546602890124146e-01 -6.073396841626093e+00 -5.948036984103352e+00 3.307859737983236e+00 5.027695439254074e+00 9.058223685346475e+03 + 24720 9.832679866205666e-01 -6.096846566116435e+00 -5.960973696232048e+00 3.207534602400585e+00 4.987737647535395e+00 9.097631621271865e+03 + 24740 9.529922521218857e-01 -6.031820128561122e+00 -5.988200428581051e+00 3.549567357472303e+00 4.800038424884631e+00 9.180861983816398e+03 + 24760 1.036792047074321e+00 -6.137162173427456e+00 -5.950839395590419e+00 2.998072075224386e+00 5.067966298921332e+00 9.066761137572857e+03 + 24780 9.904124243112699e-01 -6.050418697482343e+00 -5.984693812984037e+00 3.452079023875175e+00 4.829481481557446e+00 9.170116887276052e+03 + 24800 9.792890160642059e-01 -6.021112177883894e+00 -5.985531448149162e+00 3.608845123100123e+00 4.813155179337080e+00 9.172673570066894e+03 + 24820 9.129681458441139e-01 -5.911114654388607e+00 -6.062104369024154e+00 4.116292930374581e+00 4.249286623354442e+00 9.408691636209087e+03 + 24840 1.000443111894707e+00 -6.030816371374836e+00 -5.978089379319548e+00 3.533106823965638e+00 4.835873371822753e+00 9.149908052214265e+03 + 24860 9.433365677920791e-01 -5.935414945143329e+00 -6.005012458767000e+00 4.138149598343958e+00 4.738509904936406e+00 9.232417950027228e+03 + 24880 1.039633429264508e+00 -6.066763472567557e+00 -6.012948455084690e+00 3.293692687400208e+00 4.602706845633868e+00 9.256862007623395e+03 + 24900 1.046654868050936e+00 -6.067824313299510e+00 -6.032086510570363e+00 3.351935675274722e+00 4.557147668952580e+00 9.315831426737019e+03 + 24920 9.798090665952561e-01 -5.964326730862574e+00 -6.058145222665829e+00 3.879416457529528e+00 4.340696159230550e+00 9.396396538489462e+03 + 24940 1.002469710022253e+00 -5.995405415392223e+00 -6.019520255781652e+00 3.696641879978579e+00 4.558170734702986e+00 9.277091772472982e+03 + 24960 9.793523473480422e-01 -5.958876118003082e+00 -6.013686293810457e+00 3.922841050409297e+00 4.608112539076059e+00 9.259102041762973e+03 + 24980 9.766590227129539e-01 -5.952998822635317e+00 -5.993001939619436e+00 3.856720895784525e+00 4.627016807599366e+00 9.195572980313684e+03 + 25000 1.020959816205742e+00 -6.017090485402843e+00 -5.950818931041267e+00 3.605634771342587e+00 4.986176291976646e+00 9.066667709933334e+03 + 25020 9.553022473356746e-01 -5.914670279099575e+00 -5.969217055584691e+00 4.215995262780355e+00 4.902779231116434e+00 9.122763783131621e+03 + 25040 1.005679102133422e+00 -5.982474229928066e+00 -5.988865466364407e+00 3.777606727126918e+00 4.740907258468805e+00 9.182875490640034e+03 + 25060 1.042805791167808e+00 -6.027685552991912e+00 -5.978330413467694e+00 3.505804533606453e+00 4.789209382437667e+00 9.150638903832736e+03 + 25080 1.035880321145391e+00 -6.005860261386481e+00 -5.991434782667788e+00 3.633636554050326e+00 4.716469885188674e+00 9.190782468987978e+03 + 25100 1.020331486659574e+00 -5.969355480348847e+00 -6.010545859659783e+00 3.909419132344935e+00 4.672897600150943e+00 9.249442225689534e+03 + 25120 9.979429304773371e-01 -5.921363184317777e+00 -6.036630371074986e+00 4.104502372420211e+00 4.442620348520808e+00 9.329861671823552e+03 + 25140 1.064351319742265e+00 -6.003068221208171e+00 -6.089040767736607e+00 3.602278065148408e+00 4.108610398773552e+00 9.492412530308518e+03 + 25160 1.021146818493982e+00 -5.926075073891381e+00 -6.013816999393066e+00 4.114035196192441e+00 4.610207481942675e+00 9.259510954001786e+03 + 25180 1.062418251837265e+00 -5.974997132322318e+00 -5.988641448992002e+00 3.862044301905011e+00 4.783696524136504e+00 9.182203731458512e+03 + 25200 1.063823771219057e+00 -5.966559792012468e+00 -6.038700589495576e+00 3.861853733241042e+00 4.447610110340706e+00 9.336221843554262e+03 + 25220 1.090892318495591e+00 -5.999676358971332e+00 -6.044614174187076e+00 3.649544178440481e+00 4.391504289367244e+00 9.354529036423701e+03 + 25240 1.016664578847220e+00 -5.890764901671462e+00 -6.076146488675689e+00 4.259093566001685e+00 4.194603805715538e+00 9.452279615158539e+03 + 25260 1.104998034692448e+00 -6.033991763381508e+00 -5.960289653863373e+00 3.498710156762688e+00 4.921919074980407e+00 9.095580523923165e+03 + 25280 1.013593005434118e+00 -5.916637796452709e+00 -6.002422056396536e+00 4.088443444170732e+00 4.595856948501954e+00 9.224507161631376e+03 + 25300 1.052227617607659e+00 -5.997914707456580e+00 -6.047675182243269e+00 3.713006668360321e+00 4.427274321726565e+00 9.363972984115084e+03 + 25320 9.930837492726612e-01 -5.942116910824335e+00 -6.010196106868012e+00 4.020377557931493e+00 4.629456279027166e+00 9.248359664462345e+03 + 25340 1.020050945048198e+00 -6.016110688238202e+00 -6.010811093722440e+00 3.632882737421312e+00 4.663313829240418e+00 9.250267705638453e+03 + 25360 9.886632948425029e-01 -6.004874321957470e+00 -6.011674125548289e+00 3.619201339420101e+00 4.580155814935409e+00 9.252941189213490e+03 + 25380 9.447601439068783e-01 -5.970824004084458e+00 -6.038764987346963e+00 3.828677767911000e+00 4.438550128184516e+00 9.336429410704366e+03 + 25400 9.351050303246574e-01 -5.980875300590840e+00 -6.024920291057240e+00 3.848556878104587e+00 4.595643726906275e+00 9.293720525508710e+03 + 25420 9.458259625197807e-01 -6.016965955125965e+00 -6.040123464514681e+00 3.599246352109410e+00 4.466272349586404e+00 9.340633714413470e+03 + 25440 9.143578405666148e-01 -5.985495591247549e+00 -6.037700022524932e+00 3.766705009072273e+00 4.466939086067907e+00 9.333171759395051e+03 + 25460 9.492546867119083e-01 -6.047110625001029e+00 -5.986913032458006e+00 3.467052869140589e+00 4.812716761069966e+00 9.176934785302868e+03 + 25480 9.285870339023531e-01 -6.019209564223438e+00 -5.994904591227594e+00 3.638112330831868e+00 4.777675246956418e+00 9.201414083388094e+03 + 25500 9.413858012164735e-01 -6.035717056551403e+00 -5.995186935031222e+00 3.521129034219242e+00 4.753859264004159e+00 9.202289065763522e+03 + 25520 9.867391117476341e-01 -6.096036573481160e+00 -5.981121229631416e+00 3.193191867847851e+00 4.853053555325067e+00 9.159205528520999e+03 + 25540 9.241767442962597e-01 -5.990119050225297e+00 -6.010464480841605e+00 3.765220433261872e+00 4.648393822217816e+00 9.249201540934318e+03 + 25560 9.770623405958951e-01 -6.051042790398601e+00 -5.971394590542369e+00 3.432995163019640e+00 4.890347452113214e+00 9.129452215770312e+03 + 25580 9.765719047505141e-01 -6.026345837267691e+00 -5.984903656598581e+00 3.585540786911479e+00 4.823508201470237e+00 9.170732497500769e+03 + 25600 1.014273220257752e+00 -6.051694068852829e+00 -5.994518263903659e+00 3.413947939148512e+00 4.742260259093865e+00 9.200237079150498e+03 + 25620 1.008708228610282e+00 -6.005340897341257e+00 -6.045009324706399e+00 3.636276997662487e+00 4.408494749062543e+00 9.355751794833244e+03 + 25640 1.018662370118818e+00 -5.983554614877721e+00 -6.004440386919961e+00 3.804421731131100e+00 4.684492396001783e+00 9.230697439596504e+03 + 25660 1.027197781299544e+00 -5.960522366980814e+00 -6.026859053469870e+00 3.888820138420245e+00 4.507904619031024e+00 9.299674847866734e+03 + 25680 1.104133205010506e+00 -6.045668433715699e+00 -6.041320901633043e+00 3.415555954405400e+00 4.440520156402426e+00 9.344334316908558e+03 + 25700 1.090224811973544e+00 -6.009396516975108e+00 -6.003081711009367e+00 3.633925261515931e+00 4.670185854584278e+00 9.226533851928749e+03 + 25720 1.036185828154176e+00 -5.923442553373091e+00 -5.998021747841191e+00 4.137325667084580e+00 4.709080391355704e+00 9.210972191410034e+03 + 25740 1.084627744218413e+00 -5.994343160255793e+00 -5.996659705533876e+00 3.713535901392562e+00 4.700233939921588e+00 9.206777956896403e+03 + 25760 9.925623953759372e-01 -5.860837407814413e+00 -6.043942728851949e+00 4.509425110772726e+00 4.458006021918340e+00 9.352414521089293e+03 + 25780 1.053914009996417e+00 -5.958559267074294e+00 -6.074024666069338e+00 3.837088192767696e+00 4.174068003525407e+00 9.445693552512668e+03 + 25800 1.131548566653586e+00 -6.085681337165779e+00 -5.982706154246033e+00 3.258775995012757e+00 4.850075430695991e+00 9.164042445711953e+03 + 25820 1.010355438687462e+00 -5.919969127048371e+00 -6.010793374405725e+00 4.156713598177535e+00 4.635186714844756e+00 9.250209002666148e+03 + 25840 9.912868733789852e-01 -5.906856196266823e+00 -6.020439442079985e+00 4.237211261145743e+00 4.584998686736082e+00 9.279866729984094e+03 + 25860 1.008905781413956e+00 -5.945777763237190e+00 -6.000395650166884e+00 4.005506804557444e+00 4.691882445716459e+00 9.218237301730076e+03 + 25880 1.076253801739938e+00 -6.059222573028830e+00 -5.962509789937499e+00 3.351492923143545e+00 4.906832689908777e+00 9.102314132595555e+03 + 25900 1.058152693960372e+00 -6.047086255023916e+00 -5.949847612000378e+00 3.440422248731696e+00 4.998781584604228e+00 9.063721294347557e+03 + 25920 9.862616305097897e-01 -5.954709864711935e+00 -5.972413194525735e+00 3.941840190566885e+00 4.840184931194613e+00 9.132558267418955e+03 + 25940 1.038805639368242e+00 -6.046513711427526e+00 -5.966394527348346e+00 3.448865709698259e+00 4.908922463084582e+00 9.114166865982550e+03 + 25960 9.832850884751654e-01 -5.978130315068257e+00 -6.013147165800047e+00 3.780807910385833e+00 4.579735734643756e+00 9.257449366518318e+03 + 25980 9.529777577008581e-01 -5.949527511935555e+00 -5.984556057026845e+00 3.966259058835861e+00 4.765119732271837e+00 9.169692352215947e+03 + 26000 9.940838498176053e-01 -6.023905481402221e+00 -5.968436639904443e+00 3.563512669807055e+00 4.882023341462781e+00 9.120394477755679e+03 + 26020 9.346943118141999e-01 -5.946881519488707e+00 -5.997318112615389e+00 3.956698612876353e+00 4.667083890105386e+00 9.208817694018948e+03 + 26040 9.953492104066727e-01 -6.045465043683992e+00 -5.994412654910384e+00 3.421947751549713e+00 4.715098468219399e+00 9.199902111006817e+03 + 26060 1.006810543707758e+00 -6.070991020569164e+00 -5.969621931624417e+00 3.321729263379867e+00 4.903806258916420e+00 9.124044714713305e+03 + 26080 9.747605910057292e-01 -6.030769277227451e+00 -6.005311641125301e+00 3.519136071288097e+00 4.665317757343095e+00 9.233371749064550e+03 + 26100 1.007824228777871e+00 -6.086755838345994e+00 -5.990459990571938e+00 3.241691581448944e+00 4.794637241101855e+00 9.187801265283655e+03 + 26120 9.721011045548780e-01 -6.040685805381742e+00 -5.987789476817904e+00 3.466323186172942e+00 4.770062090466888e+00 9.179607268976166e+03 + 26140 9.499053811749903e-01 -6.013886508492658e+00 -6.006199647191895e+00 3.677070606688133e+00 4.721209753815053e+00 9.236073429269491e+03 + 26160 9.533018223744318e-01 -6.022752455370613e+00 -5.977535074427967e+00 3.605555253754752e+00 4.865200452494507e+00 9.148185676915593e+03 + 26180 9.844288071435597e-01 -6.068411886310296e+00 -5.965215882033615e+00 3.358340976603119e+00 4.950908402689877e+00 9.110550375536859e+03 + 26200 9.560000804546451e-01 -6.018897635296897e+00 -6.024854573748485e+00 3.586138200300101e+00 4.551932537877841e+00 9.293476251933096e+03 + 26220 9.879248052934423e-01 -6.054265350201657e+00 -5.988810511468910e+00 3.407949824262543e+00 4.783801637369535e+00 9.182730083339313e+03 + 26240 9.410623958247131e-01 -5.967216379472633e+00 -6.030007226135012e+00 3.841913974795511e+00 4.481359216408015e+00 9.309353433890046e+03 + 26260 9.807402886379231e-01 -6.002958067853997e+00 -6.010984149730601e+00 3.668298883665959e+00 4.622211879498341e+00 9.250796141753644e+03 + 26280 1.055032093646526e+00 -6.086161395561585e+00 -5.974021506283568e+00 3.234950098801332e+00 4.878874696627491e+00 9.137479286509497e+03 + 26300 9.405452954915010e-01 -5.887549264600992e+00 -6.036390864862978e+00 4.243481749693408e+00 4.388810247825885e+00 9.329071510852049e+03 + 26320 1.047255610799983e+00 -6.017421486011067e+00 -5.957480945173816e+00 3.618898549806329e+00 4.963086411062537e+00 9.086971282100165e+03 + 26340 9.605922143462470e-01 -5.859977586555987e+00 -6.011474247811536e+00 4.410162390942063e+00 4.540245117980136e+00 9.252287901526446e+03 + 26360 1.094255751266944e+00 -6.032589926433507e+00 -5.964380171251914e+00 3.540623099714306e+00 4.932294069392517e+00 9.108006112462790e+03 + 26380 1.018411854017626e+00 -5.898902101421170e+00 -6.016212023709368e+00 4.225503230528148e+00 4.551891503097513e+00 9.266878678228140e+03 + 26400 1.064043429189415e+00 -5.953903755946179e+00 -6.020886917164560e+00 3.900570264615699e+00 4.515942587289053e+00 9.281288999018956e+03 + 26420 1.054704788793459e+00 -5.933376001410140e+00 -6.038452767389989e+00 4.017213250877870e+00 4.413846200044595e+00 9.335455794255688e+03 + 26440 1.056388898317192e+00 -5.936642536177325e+00 -6.012946469605094e+00 4.037455608580672e+00 4.599306614842888e+00 9.256833638980735e+03 + 26460 1.029870314975667e+00 -5.903635507863286e+00 -6.009348616733649e+00 4.174881175582282e+00 4.567860145397932e+00 9.245729964210792e+03 + 26480 1.026846883653676e+00 -5.911109153432253e+00 -6.020401189827643e+00 4.174066565116027e+00 4.546494779245727e+00 9.279779813765732e+03 + 26500 1.019262135170913e+00 -5.921114043255461e+00 -6.014177577669528e+00 4.166713127516645e+00 4.632327911375662e+00 9.260638901084014e+03 + 26520 1.020729476326522e+00 -5.952879196511964e+00 -6.010498675866328e+00 3.965768019381913e+00 4.634908052343541e+00 9.249277593614152e+03 + 26540 9.720434897874302e-01 -5.917249254843538e+00 -6.035885404546484e+00 4.119779349059971e+00 4.438552218580827e+00 9.327517148553319e+03 + 26560 1.061416521289598e+00 -6.091620491762859e+00 -6.002444970212493e+00 3.201271438153555e+00 4.713331082763115e+00 9.224564540491992e+03 + 26580 1.001773453080956e+00 -6.045907589418753e+00 -5.985023412644757e+00 3.495626974358911e+00 4.845233339191104e+00 9.171132721832068e+03 + 26600 9.210643810253827e-01 -5.961817837708081e+00 -6.029846623365211e+00 3.890385597769983e+00 4.499753783106184e+00 9.308900087750608e+03 + 26620 9.568098092348561e-01 -6.039598264497504e+00 -5.993917278740419e+00 3.477393578769624e+00 4.739700868096502e+00 9.198391832249505e+03 + 26640 9.579175026138667e-01 -6.054467121467203e+00 -5.968772665679406e+00 3.473071985132243e+00 4.965142811439950e+00 9.121444654457804e+03 + 26660 9.900325563975334e-01 -6.107215419962095e+00 -5.958737181423349e+00 3.170679181129139e+00 5.023264203751777e+00 9.090827088500182e+03 + 26680 9.567096199955172e-01 -6.057099534402689e+00 -5.989025826427775e+00 3.392339039355661e+00 4.783228804919883e+00 9.183394495238457e+03 + 26700 9.409824791183173e-01 -6.028613103033564e+00 -6.006994573845368e+00 3.544053388565389e+00 4.668190328620585e+00 9.238524144300141e+03 + 26720 9.333844678869592e-01 -6.009220470437168e+00 -6.026972123339775e+00 3.641995727434851e+00 4.540062989408677e+00 9.300021142122054e+03 + 26740 9.794263135651858e-01 -6.065302644005799e+00 -6.002149804216389e+00 3.432040035182732e+00 4.794673414123901e+00 9.223647032199686e+03 + 26760 9.418059437911422e-01 -5.995913882233298e+00 -6.006751426349085e+00 3.740738057085439e+00 4.678507201668058e+00 9.237777776837143e+03 + 26780 9.301392916961533e-01 -5.963599287663057e+00 -6.033245014048774e+00 3.876236031630848e+00 4.476319493082737e+00 9.319393143485468e+03 + 26800 1.034828919322403e+00 -6.101831421569607e+00 -6.029981313825543e+00 3.156379016780641e+00 4.568953454215296e+00 9.309338118694077e+03 + 26820 1.015266683393898e+00 -6.058518528531983e+00 -5.979358651417229e+00 3.407657546459094e+00 4.862205810803404e+00 9.153809223316070e+03 + 26840 9.532064198943914e-01 -5.952668950452562e+00 -6.006558377364348e+00 3.965091509861067e+00 4.655650081171729e+00 9.237188721357286e+03 + 26860 1.013702220098276e+00 -6.027479427828938e+00 -5.992968996919442e+00 3.496983105361957e+00 4.695147340116203e+00 9.195483770860892e+03 + 26880 9.290626221138844e-01 -5.884873382566338e+00 -6.018319081298090e+00 4.299408655315244e+00 4.533142802542383e+00 9.273354482147346e+03 + 26900 1.032983451373186e+00 -6.023130516950366e+00 -5.972632699557215e+00 3.589824447485921e+00 4.879790729469380e+00 9.133213188963689e+03 + 26920 9.992412378169185e-01 -5.956275043206094e+00 -5.990370085850206e+00 3.950792586262423e+00 4.755013575209137e+00 9.187444906138882e+03 + 26940 1.056690665278629e+00 -6.027005001692126e+00 -5.952811221231368e+00 3.632390731905471e+00 5.058422900761569e+00 9.072729180083998e+03 + 26960 1.006462695689157e+00 -5.938172291971407e+00 -5.955790066309103e+00 4.003628055540743e+00 4.902464068951922e+00 9.081797464896152e+03 + 26980 1.016119371309259e+00 -5.937209281419866e+00 -5.960974645672403e+00 4.044019378472751e+00 4.907554979256455e+00 9.097614698164720e+03 + 27000 1.078956807243606e+00 -6.013670306220698e+00 -6.021232495466674e+00 3.645757109613328e+00 4.602333848717928e+00 9.282348409224305e+03 + 27020 1.021524655950530e+00 -5.916272259984026e+00 -6.032874518435022e+00 4.179009182424974e+00 4.509460970258178e+00 9.318233015324604e+03 + 27040 1.136750979651484e+00 -6.077116761346083e+00 -5.943915802910732e+00 3.280256441232214e+00 5.045116957349698e+00 9.045678571776074e+03 + 27060 1.042640771289591e+00 -5.926594296889591e+00 -6.024813513201654e+00 4.035042034646434e+00 4.471052095207971e+00 9.293367332844851e+03 + 27080 1.059798401420964e+00 -5.940828548702703e+00 -6.018764961161267e+00 4.053968237137504e+00 4.606445296179577e+00 9.274724545653882e+03 + 27100 1.091130926873672e+00 -5.978430086257071e+00 -5.975096966330393e+00 3.859033093041253e+00 4.878172383458881e+00 9.140764425856503e+03 + 27120 1.046874413218975e+00 -5.910747427188234e+00 -6.024257935981265e+00 4.191096515100937e+00 4.539301607916884e+00 9.291651593192973e+03 + 27140 1.096208906914375e+00 -5.990033159672841e+00 -5.979721959431418e+00 3.715496747453263e+00 4.774705254892593e+00 9.154895336608350e+03 + 27160 1.025434738705987e+00 -5.898165213419515e+00 -6.043339071313996e+00 4.205117382520929e+00 4.371506624908911e+00 9.350538477643948e+03 + 27180 1.032899609364002e+00 -5.928788961747625e+00 -5.965546765842568e+00 4.108670521454401e+00 4.897601522089441e+00 9.111564709721579e+03 + 27200 1.075882170686844e+00 -6.016819321213504e+00 -5.958712846743836e+00 3.573560472372067e+00 4.907216840724763e+00 9.090744325665246e+03 + 27220 1.090745834549236e+00 -6.068777439522943e+00 -5.961110955102235e+00 3.350795946154748e+00 4.969033561033074e+00 9.098058157368288e+03 + 27240 1.007682295856299e+00 -5.979342780691049e+00 -6.016402678071232e+00 3.783358008422188e+00 4.570554342664590e+00 9.267474526280834e+03 + 27260 1.034115084162430e+00 -6.053245480295663e+00 -6.004651803390438e+00 3.366819727703744e+00 4.645852140340747e+00 9.231315322132183e+03 + 27280 9.949298813491422e-01 -6.027184359818352e+00 -6.004542981967770e+00 3.541067226510891e+00 4.671077521870830e+00 9.230972050054139e+03 + 27300 9.647303636515141e-01 -6.010044448618398e+00 -5.982497236662692e+00 3.656927320349185e+00 4.815107674316126e+00 9.163368383544241e+03 + 27320 1.018194239105845e+00 -6.110421073358152e+00 -5.939331698395755e+00 3.090239826226949e+00 5.072661493256246e+00 9.031723417424355e+03 + 27340 9.769340132131886e-01 -6.065077228504077e+00 -5.943150064182475e+00 3.359495483447407e+00 5.059620129149744e+00 9.043356346856552e+03 + 27360 9.101649169660315e-01 -5.975544313230104e+00 -5.991987650495955e+00 3.813227054772816e+00 4.718806867594084e+00 9.192459330407661e+03 + 27380 9.265608415544417e-01 -6.002644184346522e+00 -6.001970263579063e+00 3.679739091868751e+00 4.683608849204408e+00 9.223083536784095e+03 + 27400 9.508472447264311e-01 -6.035438809955840e+00 -5.993530298758067e+00 3.513541935069528e+00 4.754187091688292e+00 9.197182292430251e+03 + 27420 1.049089474697299e+00 -6.171894109036053e+00 -5.985881412450361e+00 2.788261175075025e+00 4.856374864241834e+00 9.173778558307229e+03 + 27440 1.006848593492841e+00 -6.098527895899158e+00 -6.008844913711014e+00 3.167343431827824e+00 4.682316993948790e+00 9.244234216243007e+03 + 27460 9.678996532164935e-01 -6.028256842249204e+00 -6.011675586216039e+00 3.581159082559920e+00 4.676371220643436e+00 9.252938287004517e+03 + 27480 1.000501655310759e+00 -6.057500506817994e+00 -5.995716894896110e+00 3.345482290669906e+00 4.700253351308410e+00 9.203936625420773e+03 + 27500 9.704656490998697e-01 -5.989379920752549e+00 -5.980601605507433e+00 3.785701736859338e+00 4.836108181436690e+00 9.157591751382963e+03 + 27520 9.202173088190145e-01 -5.886863810967327e+00 -6.022910157549195e+00 4.270984543860078e+00 4.489785368682905e+00 9.287465205504499e+03 + 27540 1.094703585249402e+00 -6.108906542850082e+00 -5.937699988030598e+00 3.196703628613672e+00 5.179798160515881e+00 9.026775252899077e+03 + 27560 1.024599080126616e+00 -5.966334585280480e+00 -6.015126090125728e+00 3.793448764514199e+00 4.513280393231815e+00 9.263546971963044e+03 + 27580 1.016288005942892e+00 -5.918296204095491e+00 -6.037359113714773e+00 4.081789202929937e+00 4.398111550970299e+00 9.332088470114750e+03 + 27600 1.038945601229166e+00 -5.925718942124202e+00 -6.037415429926929e+00 4.054829693667650e+00 4.413451175728768e+00 9.332279338812185e+03 + 27620 1.036237700438675e+00 -5.906775581428764e+00 -5.995688792099817e+00 4.172532092754212e+00 4.661978677806146e+00 9.203810133262979e+03 + 27640 9.933775620127856e-01 -5.836510959828939e+00 -6.014890930966772e+00 4.498858312999909e+00 4.474572914515144e+00 9.262784408457417e+03 + 27660 1.032957917178952e+00 -5.890780333335727e+00 -5.977009497048684e+00 4.265818517823478e+00 4.770677315863726e+00 9.146563868341582e+03 + 27680 9.987872694502733e-01 -5.839720141150880e+00 -6.009752587872207e+00 4.493934986677420e+00 4.517582365167475e+00 9.246982365017777e+03 + 27700 1.108703874684024e+00 -6.006509121151729e+00 -5.987817596614515e+00 3.677572219859795e+00 4.784901846256552e+00 9.179674489207022e+03 + 27720 1.054796980348682e+00 -5.937846202312077e+00 -6.012214050100617e+00 4.007257657019357e+00 4.580225966630311e+00 9.254571517946257e+03 + 27740 1.088228669946797e+00 -6.003889091428633e+00 -5.995510761084083e+00 3.642894690792948e+00 4.691004360173782e+00 9.203272267296128e+03 + 27760 9.749052351385830e-01 -5.854702375683103e+00 -6.029669913903491e+00 4.458117498328424e+00 4.453426817727926e+00 9.308295071105771e+03 + 27780 1.039267036448282e+00 -5.967584616355351e+00 -5.998682059652458e+00 3.849660007969069e+00 4.671093676243287e+00 9.212993902722479e+03 + 27800 1.023508585456083e+00 -5.958871068704244e+00 -5.999442445825661e+00 3.925028811285237e+00 4.692061685453743e+00 9.215332650347738e+03 + 27820 1.021661469920530e+00 -5.969226724579544e+00 -5.994700274573052e+00 3.899781938596666e+00 4.753508872514822e+00 9.200770827701253e+03 + 27840 1.025252086007113e+00 -5.985532257963772e+00 -6.003194964417547e+00 3.780772736869397e+00 4.679350743116833e+00 9.226842726776855e+03 + 27860 1.042090278165483e+00 -6.020647232121075e+00 -5.973937779937510e+00 3.617790796587610e+00 4.886003699290009e+00 9.137196664714582e+03 + 27880 9.931823823051343e-01 -5.956466159874375e+00 -6.007448153248207e+00 3.953105267200670e+00 4.660358771810150e+00 9.239925793276783e+03 + 27900 1.085898353727896e+00 -6.100522201888604e+00 -5.968994484358133e+00 3.163161449131986e+00 4.918413957040462e+00 9.122126417483107e+03 + 27920 9.650040066371505e-01 -5.929789623144175e+00 -5.998210823590538e+00 4.075649515524924e+00 4.682764394415355e+00 9.211530158186750e+03 + 27940 1.016290546257501e+00 -6.012131965288077e+00 -5.967465120439428e+00 3.668090921851813e+00 4.924574857144655e+00 9.117403660996721e+03 + 27960 1.032461559633738e+00 -6.041118845987069e+00 -5.960827962001916e+00 3.530873950883116e+00 4.991916631700004e+00 9.097171205599219e+03 + 27980 9.751376003279202e-01 -5.961546109832475e+00 -6.027330285380660e+00 3.882804407138010e+00 4.505061491072066e+00 9.301128856426021e+03 + 28000 1.005319751826434e+00 -6.012615074395310e+00 -5.997103030001085e+00 3.614713674409434e+00 4.703786233802187e+00 9.208137741715600e+03 + 28020 1.003570241906397e+00 -6.015359695451327e+00 -5.963739519140836e+00 3.598324579434817e+00 4.894735620006127e+00 9.106061272169825e+03 + 28040 9.755883553175906e-01 -5.977843077002850e+00 -6.003698358655894e+00 3.803645881902229e+00 4.655180853558543e+00 9.228388869164250e+03 + 28060 9.920352413174970e-01 -6.006189140134730e+00 -5.968978551785961e+00 3.675446004349865e+00 4.889114960968438e+00 9.122051604236796e+03 + 28080 9.825887906903008e-01 -5.993226577908968e+00 -6.020422747114497e+00 3.719313287908264e+00 4.563148675736530e+00 9.279863519768114e+03 + 28100 1.012233378619919e+00 -6.040052320429769e+00 -6.054028225288405e+00 3.455585231814737e+00 4.375333423352165e+00 9.383657258283878e+03 + 28120 9.409839227245846e-01 -5.938211067674108e+00 -6.038018945553459e+00 4.046482071170700e+00 4.473369791168280e+00 9.334141649195686e+03 + 28140 1.043010694245405e+00 -6.095773820978430e+00 -6.002650633502081e+00 3.174968247859983e+00 4.709696001115866e+00 9.225213685968161e+03 + 28160 9.640102994563712e-01 -5.987999390170565e+00 -6.035279684223952e+00 3.732305464567713e+00 4.460814699511307e+00 9.325673993947919e+03 + 28180 1.034126535635780e+00 -6.103779112126466e+00 -5.943177233018829e+00 3.163052748892641e+00 5.085253591789160e+00 9.043446922350260e+03 + 28200 9.698878567476057e-01 -6.019956599256201e+00 -5.998547590553052e+00 3.569721340310033e+00 4.692655181316900e+00 9.212597198909447e+03 + 28220 9.520936037128325e-01 -6.003832161486097e+00 -5.995024023569829e+00 3.709698279680612e+00 4.760275970650765e+00 9.201772831580201e+03 + 28240 9.550291638396985e-01 -6.017331496855164e+00 -6.004725573827228e+00 3.610487031048012e+00 4.682872191834702e+00 9.231575064025357e+03 + 28260 9.573368251479983e-01 -6.028759157254113e+00 -5.965609037124850e+00 3.559546106378174e+00 4.922163868609914e+00 9.111764904743941e+03 + 28280 9.429409403696467e-01 -6.013065711746425e+00 -5.949322714980654e+00 3.695355771850104e+00 5.061377923476030e+00 9.062101872838175e+03 + 28300 9.452608184678790e-01 -6.015205506454981e+00 -5.967306523130855e+00 3.597338823943299e+00 4.872382198534142e+00 9.116938990005290e+03 + 28320 9.368831965733057e-01 -5.993468050653759e+00 -6.001947868638773e+00 3.758882804160002e+00 4.710190377042460e+00 9.223017623566486e+03 + 28340 9.491419025141812e-01 -5.996110676103718e+00 -6.002436840856872e+00 3.707418714857039e+00 4.671092897873596e+00 9.224559562586730e+03 + 28360 9.978159558674639e-01 -6.046390539873354e+00 -6.001781934705503e+00 3.420766712182409e+00 4.676916226215551e+00 9.222535699091812e+03 + 28380 1.052581699255401e+00 -6.102424542186387e+00 -5.996949504401195e+00 3.138883165123370e+00 4.744537154295287e+00 9.207695186281686e+03 + 28400 9.901255561788616e-01 -5.984214164607419e+00 -5.991502116373704e+00 3.842419588434125e+00 4.800571041585229e+00 9.190987455741377e+03 + 28420 9.978752719125502e-01 -5.968718255430496e+00 -6.006701505514476e+00 3.821384877689754e+00 4.603279177818589e+00 9.237645759368186e+03 + 28440 1.052832190331810e+00 -6.021744949713979e+00 -5.985142108600930e+00 3.582153189453640e+00 4.792332367396122e+00 9.171486335905454e+03 + 28460 1.014923780566742e+00 -5.938810326893853e+00 -6.018258941217416e+00 4.033022292330498e+00 4.576816054251262e+00 9.273194692226858e+03 + 28480 1.088340117178027e+00 -6.025579463518811e+00 -6.013417735205302e+00 3.567938313297644e+00 4.637772839295186e+00 9.258270004359718e+03 + 28500 1.013094475705368e+00 -5.900448145166157e+00 -6.014041098641869e+00 4.229257815846879e+00 4.576989498536606e+00 9.260191060087271e+03 + 28520 1.007623870912483e+00 -5.883321381281474e+00 -6.009940768529432e+00 4.299941570777655e+00 4.572873454913028e+00 9.247543897518279e+03 + 28540 1.003612564236609e+00 -5.869785259587345e+00 -6.025602498193580e+00 4.326633052997561e+00 4.431906356280814e+00 9.295797635616627e+03 + 28560 1.014767524960878e+00 -5.882579893146128e+00 -6.038810706025442e+00 4.329630671478879e+00 4.432529167285694e+00 9.336569620904609e+03 + 28580 1.052113858740745e+00 -5.942695346825536e+00 -6.050623174710733e+00 3.991629073541671e+00 4.371890784047481e+00 9.373085055295822e+03 + 28600 1.087088445074823e+00 -6.008649143909981e+00 -5.995132043246144e+00 3.693203661658844e+00 4.770820945435164e+00 9.202097352301791e+03 + 28620 9.736304811708715e-01 -5.863697146715683e+00 -6.005049795662690e+00 4.445158420551911e+00 4.633489636046467e+00 9.232549864821387e+03 + 28640 1.027540968316297e+00 -5.980257745038665e+00 -6.026345297332439e+00 3.754112431509946e+00 4.489470574213432e+00 9.298103391154977e+03 + 28660 9.515304434448906e-01 -5.916708694705935e+00 -6.050075170992013e+00 4.051120794525225e+00 4.285309849295060e+00 9.371400618970183e+03 + 28680 9.779906657005709e-01 -6.008598282403232e+00 -6.024669868218375e+00 3.627216860784659e+00 4.534931327964244e+00 9.292946135902224e+03 + 28700 1.003736244790102e+00 -6.097267775338383e+00 -5.968121216652726e+00 3.195649300450119e+00 4.937228825788532e+00 9.119473398849879e+03 + 28720 9.442625855946347e-01 -6.041835538140989e+00 -5.977170492226622e+00 3.497452610467303e+00 4.868769310991110e+00 9.147122045588860e+03 + 28740 1.015082221146194e+00 -6.163957545319789e+00 -5.993746367494998e+00 2.845622818281639e+00 4.823001741446235e+00 9.197879630050962e+03 + 28760 9.104563098689363e-01 -6.018176239315316e+00 -5.993001290902773e+00 3.662826782378291e+00 4.807385231973795e+00 9.195560842005887e+03 + 28780 9.122648914929119e-01 -6.021339052461146e+00 -6.019252079121465e+00 3.587519538940595e+00 4.599503262815123e+00 9.276248418813222e+03 + 28800 1.003372044495901e+00 -6.151577808476957e+00 -5.983498703909965e+00 2.891933278384125e+00 4.857069506965166e+00 9.166476875633647e+03 + 28820 9.429574513384952e-01 -6.053670728286849e+00 -5.956768508973053e+00 3.411288723919823e+00 4.967716262789613e+00 9.084812315389205e+03 + 28840 9.480859221182297e-01 -6.047522096996349e+00 -5.941228819754128e+00 3.465253518931908e+00 5.075605965688231e+00 9.037501196425725e+03 + 28860 9.472116155482816e-01 -6.025512454457528e+00 -5.969639562541344e+00 3.601183143968295e+00 4.922013935653110e+00 9.124070582127155e+03 + 28880 9.671014616215816e-01 -6.030693133646931e+00 -5.974570564484338e+00 3.513662832011605e+00 4.835927309082723e+00 9.139152066444691e+03 + 28900 9.770588402967516e-01 -6.018377805957166e+00 -5.990375336739723e+00 3.621807749149450e+00 4.782602260764114e+00 9.187515994790996e+03 + 28920 1.035616370661924e+00 -6.078490496909573e+00 -5.988415834871935e+00 3.314300911714150e+00 4.831523560143171e+00 9.181526541961126e+03 + 28940 9.491971774355233e-01 -5.926178500753046e+00 -6.025293659801177e+00 4.120891359949992e+00 4.551756778674332e+00 9.294866949345924e+03 + 28960 1.033935039014248e+00 -6.030280063405661e+00 -6.019302133053879e+00 3.557387999015804e+00 4.620424973924969e+00 9.276418957034575e+03 + 28980 1.012469200161009e+00 -5.980678987188339e+00 -6.052467649255548e+00 3.789740507983740e+00 4.377518901134275e+00 9.378840645589566e+03 + 29000 1.039229273147462e+00 -6.009985378535291e+00 -6.030622913009718e+00 3.667521219237972e+00 4.549017302637679e+00 9.311304780431741e+03 + 29020 9.940428342105773e-01 -5.936367897972060e+00 -6.038752538767909e+00 4.011677966831653e+00 4.423769515409929e+00 9.336398118557219e+03 + 29040 1.039154057154783e+00 -6.000566193658575e+00 -5.996516036746157e+00 3.674201572893957e+00 4.697458200644817e+00 9.206362897862971e+03 + 29060 1.003710369183082e+00 -5.948421168557061e+00 -5.977492471042664e+00 3.965260509286568e+00 4.798328591644715e+00 9.148093363825397e+03 + 29080 9.916429014819774e-01 -5.930349056897279e+00 -6.002040980132275e+00 4.067126491995129e+00 4.655460374490523e+00 9.223300273872988e+03 + 29100 9.799211090333384e-01 -5.913472626627630e+00 -6.024999847938425e+00 4.139255345260670e+00 4.498848781712367e+00 9.293963480786231e+03 + 29120 1.026025723674986e+00 -5.985171742370088e+00 -6.026124832567447e+00 3.756427594080039e+00 4.521268612696575e+00 9.297440914169099e+03 + 29140 1.022219624055486e+00 -5.987621609881398e+00 -5.974722985169983e+00 3.792505200402652e+00 4.866571099551321e+00 9.139628555360920e+03 + 29160 1.052387705248464e+00 -6.042422308623889e+00 -6.004384567987289e+00 3.465206646212253e+00 4.683625239268952e+00 9.230518478773460e+03 + 29180 1.016427767906759e+00 -6.002295393820535e+00 -6.018250867888380e+00 3.663576739582612e+00 4.571957938383419e+00 9.273165464046380e+03 + 29200 1.000476376337306e+00 -5.999622911537353e+00 -6.033179180940850e+00 3.702164097074232e+00 4.509478805343444e+00 9.319185750107512e+03 + 29220 9.839503613690523e-01 -6.007935016486848e+00 -5.997549321622817e+00 3.739459206351355e+00 4.799095473441714e+00 9.209525374872695e+03 + 29240 1.004007021076176e+00 -6.083469977951813e+00 -5.983975370243266e+00 3.273217755780128e+00 4.844531189983382e+00 9.167933346910781e+03 + 29260 9.091551367261101e-01 -5.999881931511410e+00 -6.006019570465801e+00 3.699025932701849e+00 4.663782660029183e+00 9.235538866713792e+03 + 29280 9.594079972001835e-01 -6.124413350585823e+00 -5.963092229158951e+00 3.071860313595195e+00 4.998191157191153e+00 9.104115353094019e+03 + 29300 9.595321996780790e-01 -6.160997752978748e+00 -5.977258875805189e+00 2.885638481247295e+00 4.940695547477222e+00 9.147374547002168e+03 + 29320 9.302480648443420e-01 -6.138927453540776e+00 -5.965019401375105e+00 2.939619249110190e+00 4.938226196829575e+00 9.109992071116918e+03 + 29340 9.289291493535927e-01 -6.143307946040633e+00 -5.975228464738281e+00 2.932036847680652e+00 4.897175239534430e+00 9.141176914673510e+03 + 29360 9.291833826444947e-01 -6.140747600119308e+00 -5.981031145357315e+00 2.937839785186445e+00 4.854956384471304e+00 9.158925549106540e+03 + 29380 9.292966845038206e-01 -6.129710721956912e+00 -5.991007081969789e+00 3.004652658723091e+00 4.801110423848072e+00 9.189460163332262e+03 + 29400 9.768173862043977e-01 -6.182643942610514e+00 -5.929774188258957e+00 2.777555306365860e+00 5.229572567320520e+00 9.002724688096831e+03 + 29420 9.194485869094577e-01 -6.074182938895403e+00 -5.946473230707915e+00 3.308709926347311e+00 5.042038833773335e+00 9.053443401710787e+03 + 29440 9.264850276097462e-01 -6.055825046403605e+00 -5.941783616905163e+00 3.408231931059003e+00 5.063075467093233e+00 9.039204448829045e+03 + 29460 9.647846537354453e-01 -6.080617386000093e+00 -5.989661164711574e+00 3.213144058912824e+00 4.735428756981255e+00 9.185321819303432e+03 + 29480 9.316116939198328e-01 -6.001616588168545e+00 -5.960497492898179e+00 3.720874666307239e+00 4.956986874509109e+00 9.096173476795615e+03 + 29500 9.615749834331291e-01 -6.018655833144447e+00 -5.940178992719386e+00 3.608717219662444e+00 5.059343381634948e+00 9.034296283672522e+03 + 29520 1.010567055003395e+00 -6.066031693919716e+00 -5.970989781186073e+00 3.310648035344226e+00 4.856393405949268e+00 9.128206496703693e+03 + 29540 1.007382809001170e+00 -6.039154168295874e+00 -6.013664780075091e+00 3.472336259273290e+00 4.618700270907108e+00 9.259029673879510e+03 + 29560 1.029653614398049e+00 -6.055431884247001e+00 -5.995128727169735e+00 3.420710960322135e+00 4.766981020143195e+00 9.202120096900653e+03 + 29580 9.930004286526326e-01 -5.986907872560453e+00 -6.045605271411086e+00 3.787684939320902e+00 4.450635391727450e+00 9.357574192207718e+03 + 29600 9.601848837335871e-01 -5.927198760472017e+00 -6.035449343063726e+00 4.083981941866107e+00 4.462390344900997e+00 9.326149032990899e+03 + 29620 1.028921410121415e+00 -6.020083270322323e+00 -5.960637121908235e+00 3.594893114764522e+00 4.936242098219954e+00 9.096598395920297e+03 + 29640 9.841158721318056e-01 -5.943791295950724e+00 -6.004245407055859e+00 4.002896918360663e+00 4.655760057151515e+00 9.230080533840544e+03 + 29660 1.040529024557767e+00 -6.018991177640114e+00 -5.990938924275782e+00 3.584675194279003e+00 4.745755574169175e+00 9.189251060640077e+03 + 29680 1.038583733314649e+00 -6.009800524800676e+00 -5.962895641199461e+00 3.642110804696944e+00 4.911445904842397e+00 9.103504333564508e+03 + 29700 9.727129859576313e-01 -5.906887569735638e+00 -6.006539418065318e+00 4.180807926024784e+00 4.608591591842066e+00 9.237124360749694e+03 + 29720 1.088064610240070e+00 -6.073040020877345e+00 -6.000834298323051e+00 3.285984685649953e+00 4.700601118356166e+00 9.219621751457958e+03 + 29740 1.010753860320679e+00 -5.956520647393255e+00 -6.004830000887360e+00 3.922161765679869e+00 4.644761982068429e+00 9.231871619370186e+03 + 29760 9.556620787961384e-01 -5.874179373804996e+00 -6.007186984604858e+00 4.397248285179978e+00 4.633498001105917e+00 9.239101860985860e+03 + 29780 1.064893928215669e+00 -6.037516055685689e+00 -5.977574562494152e+00 3.471566160222460e+00 4.815759490044357e+00 9.148347744654138e+03 + 29800 1.082429378625356e+00 -6.067558490301071e+00 -6.023632791115030e+00 3.319761289116024e+00 4.571989451322251e+00 9.289741451423108e+03 + 29820 1.015099993145585e+00 -5.979693098377298e+00 -6.057916147197689e+00 3.759481119899784e+00 4.310312268595412e+00 9.395696908233151e+03 + 29840 1.033230709094984e+00 -6.027653144067885e+00 -5.977255445900206e+00 3.583200813749030e+00 4.872592195646428e+00 9.147363206260507e+03 + 29860 9.865277944317782e-01 -5.984689891165687e+00 -6.010150006367759e+00 3.797226019476292e+00 4.651030098045900e+00 9.248236181027289e+03 + 29880 9.781873267525094e-01 -6.005385203595621e+00 -6.027470244401562e+00 3.642690325763378e+00 4.515874603806644e+00 9.301565755019396e+03 + 29900 9.990547361673093e-01 -6.072773144892266e+00 -5.997251919760524e+00 3.301378806525804e+00 4.735033368104082e+00 9.208621688394602e+03 + 29920 9.635061326460844e-01 -6.054333202066925e+00 -6.011267843939825e+00 3.377141310922637e+00 4.624429261631073e+00 9.251682558346976e+03 + 29940 9.350153255330449e-01 -6.042698237497649e+00 -5.998232213136991e+00 3.462791738776661e+00 4.718122531750589e+00 9.211628300733253e+03 + 29960 9.382875725274081e-01 -6.070009473268530e+00 -5.992275994244865e+00 3.321321961195985e+00 4.767679626966870e+00 9.193354664819073e+03 + 29980 9.422557706053847e-01 -6.089361594900179e+00 -5.983229993374704e+00 3.210352374215130e+00 4.819776453986664e+00 9.165661848050731e+03 + 30000 1.022391449429286e+00 -6.214075592005614e+00 -5.954910684987923e+00 2.578972732632215e+00 5.067137734367540e+00 9.079177299533281e+03 + 30020 9.238490186906688e-01 -6.067887427603596e+00 -5.986449747586651e+00 3.365997450092951e+00 4.833625211190504e+00 9.175508257690031e+03 + 30040 9.472912610344750e-01 -6.094243684930203e+00 -5.987174620928259e+00 3.216806862439307e+00 4.831613996822572e+00 9.177735838955829e+03 + 30060 9.689703031633105e-01 -6.111575405333681e+00 -5.968750744326022e+00 3.086793435502849e+00 4.906914741053685e+00 9.121382794874358e+03 + 30080 8.995618470596503e-01 -5.986042904348183e+00 -6.004493360783048e+00 3.812497793020399e+00 4.706552416972499e+00 9.230850850522918e+03 + 30100 9.766439126441808e-01 -6.069300661903761e+00 -5.974315039627736e+00 3.317780925405669e+00 4.863203067492143e+00 9.138370118482186e+03 + 30120 9.901172095771245e-01 -6.051670367913637e+00 -5.956112297045035e+00 3.404118220205249e+00 4.952827450696438e+00 9.082783619672038e+03 + 30140 1.022010846394023e+00 -6.057766403102042e+00 -5.944044484854148e+00 3.415819108832165e+00 5.068827961821542e+00 9.046050020217983e+03 + 30160 1.022671341714951e+00 -6.020729217691068e+00 -5.954490433411739e+00 3.648005557842121e+00 5.028358907592768e+00 9.077863759422518e+03 + 30180 1.018378799120894e+00 -5.986000673104643e+00 -6.017317845091376e+00 3.750503251185134e+00 4.570675203320612e+00 9.270273812343232e+03 + 30200 9.864145509336422e-01 -5.921933709753805e+00 -5.986850843745072e+00 4.145407239712068e+00 4.772643010440193e+00 9.176730372895401e+03 + 30220 1.001854322823047e+00 -5.933844907628597e+00 -6.002666504638748e+00 4.056391268617152e+00 4.661207008477147e+00 9.225229177299816e+03 + 30240 1.059076188454696e+00 -6.013297552912073e+00 -6.000089564068858e+00 3.612925379657900e+00 4.688767695525305e+00 9.217323705706765e+03 + 30260 1.052578449896820e+00 -6.003025696803585e+00 -6.014835032323607e+00 3.699992077857413e+00 4.632181045812684e+00 9.262646097555946e+03 + 30280 9.487884039497202e-01 -5.853904519685701e+00 -6.059965791825375e+00 4.427445339391960e+00 4.244209626887142e+00 9.402045857004236e+03 + 30300 1.029336234147462e+00 -5.979948628286467e+00 -6.020813318925252e+00 3.835592561059904e+00 4.600941183621561e+00 9.281011191349724e+03 + 30320 1.065690372222909e+00 -6.041704626731780e+00 -5.984313227761977e+00 3.466313289063323e+00 4.795863583238217e+00 9.168952372575235e+03 + 30340 1.032416374191723e+00 -6.000696153589132e+00 -5.976851852455646e+00 3.727073219598943e+00 4.863990886601091e+00 9.146132334900771e+03 + 30360 9.981943200735881e-01 -5.961650672648489e+00 -6.030074311057464e+00 3.927117858135076e+00 4.534218737866921e+00 9.309604582734561e+03 + 30380 9.888959284789413e-01 -5.962411666848608e+00 -6.037248040212175e+00 3.848885590596351e+00 4.419163553851398e+00 9.331760442885723e+03 + 30400 9.893577908986471e-01 -5.982004096747366e+00 -6.067566207457588e+00 3.731121882934517e+00 4.239811002542576e+00 9.425634488435704e+03 + 30420 1.023803102890519e+00 -6.054199729506687e+00 -5.986788106434324e+00 3.397842735832353e+00 4.784930707428814e+00 9.176539039142150e+03 + 30440 9.618260976643903e-01 -5.983228649776845e+00 -6.002764714051875e+00 3.842093690897518e+00 4.729914586634124e+00 9.225520088586947e+03 + 30460 9.652164611632372e-01 -6.008125604218619e+00 -6.002750416499278e+00 3.689739275287688e+00 4.720604434979757e+00 9.225489429091020e+03 + 30480 9.580226843545530e-01 -6.017255456648518e+00 -6.027629875818532e+00 3.571414832042392e+00 4.511843311731995e+00 9.302064622169515e+03 + 30500 9.943038114712486e-01 -6.090490150033225e+00 -5.966376619274175e+00 3.268965369961810e+00 4.981644470087083e+00 9.114130080097597e+03 + 30520 9.304874222095311e-01 -6.013824711378987e+00 -6.014790626497451e+00 3.579221875370232e+00 4.573675441285133e+00 9.262513991505772e+03 + 30540 9.783584372657665e-01 -6.100647668845115e+00 -5.990444678111096e+00 3.148273078964318e+00 4.781075705616751e+00 9.187739654603578e+03 + 30560 9.176177371097133e-01 -6.023710030989118e+00 -6.001774540832473e+00 3.550594279530800e+00 4.676551258516388e+00 9.222519046058780e+03 + 30580 8.778656169155760e-01 -5.976214210869851e+00 -6.002429324501506e+00 3.818421367783736e+00 4.667890128535052e+00 9.224522542062394e+03 + 30600 9.872162122335556e-01 -6.146267102188688e+00 -5.947138317975973e+00 2.990018529834972e+00 5.133446823864144e+00 9.055492486181309e+03 + 30620 9.318690978437534e-01 -6.065678041864406e+00 -5.980810435487806e+00 3.401601524023612e+00 4.888924453057692e+00 9.158238771435459e+03 + 30640 9.762464302644114e-01 -6.124762564948807e+00 -5.990673571493650e+00 3.078272206705188e+00 4.848231957329377e+00 9.188450216495972e+03 + 30660 9.526746118959963e-01 -6.075704926377758e+00 -5.993694503945165e+00 3.301615804147225e+00 4.772532340827027e+00 9.197705014930802e+03 + 30680 9.507119809359119e-01 -6.048179460137290e+00 -6.017000968781529e+00 3.453970419378655e+00 4.633002141599379e+00 9.269299552083950e+03 + 30700 9.752873055783660e-01 -6.051077545516756e+00 -6.002799563612088e+00 3.429251457192257e+00 4.706471100282418e+00 9.225638360935051e+03 + 30720 9.488750535890192e-01 -5.969895143580631e+00 -6.023343784428681e+00 3.878561537221091e+00 4.571651170321153e+00 9.288853101897590e+03 + 30740 1.030053142813441e+00 -6.047545336307401e+00 -6.012849410536223e+00 3.396575333698316e+00 4.595804708653581e+00 9.256560495884221e+03 + 30760 1.065508088103261e+00 -6.063088466597174e+00 -6.020473620991427e+00 3.388580386747530e+00 4.633281424841772e+00 9.280010405881187e+03 + 30780 1.025662986552197e+00 -5.976784246276273e+00 -6.034455046263975e+00 3.874813504510093e+00 4.543658846453255e+00 9.323111024558364e+03 + 30800 1.036392414434614e+00 -5.973020518739437e+00 -6.009214651418420e+00 3.850018535764266e+00 4.642186224897619e+00 9.245374583549519e+03 + 30820 1.109262716241106e+00 -6.066338968433568e+00 -6.002774361973263e+00 3.394903708073044e+00 4.759901514959179e+00 9.225551616357032e+03 + 30840 1.006318555309201e+00 -5.906725465884383e+00 -5.999150185469699e+00 4.219909990727194e+00 4.689192948189179e+00 9.214423920511816e+03 + 30860 9.868633211823782e-01 -5.874174890867751e+00 -5.999041150969393e+00 4.370866045434269e+00 4.653864656939341e+00 9.214083943549473e+03 + 30880 1.000837286275815e+00 -5.893315376548657e+00 -6.014113488093660e+00 4.254425930880663e+00 4.560784480941911e+00 9.260429901872551e+03 + 30900 1.050095759729751e+00 -5.970026701057205e+00 -5.973591716771170e+00 3.873171702791572e+00 4.852700830877584e+00 9.136128799380684e+03 + 30920 9.946703889043410e-01 -5.894667071620474e+00 -5.983252910475333e+00 4.355103801036861e+00 4.846430205718002e+00 9.165683298183008e+03 + 30940 1.045266271997797e+00 -5.978715013998176e+00 -6.004307928398388e+00 3.906512931213734e+00 4.759554456237015e+00 9.230281330819133e+03 + 30960 1.072975249847492e+00 -6.035261687772687e+00 -6.009549215421002e+00 3.534313013221960e+00 4.681958008457570e+00 9.246388037861461e+03 + 30980 1.028150911408279e+00 -5.991792902416377e+00 -5.964682442936535e+00 3.767956903397340e+00 4.923629357060635e+00 9.108945762788499e+03 + 31000 9.780792858873378e-01 -5.946930146284266e+00 -6.016483161340927e+00 3.940819686001421e+00 4.541435510251772e+00 9.267706398098047e+03 + 31020 9.747071814544598e-01 -5.975066107394660e+00 -5.993380992110841e+00 3.846419971878860e+00 4.741253069619304e+00 9.196734792240015e+03 + 31040 9.611223939463616e-01 -5.989449667834206e+00 -5.983910388873211e+00 3.757157498373922e+00 4.788964895368605e+00 9.167707324705199e+03 + 31060 9.746653768288451e-01 -6.042733143213880e+00 -5.957098753859750e+00 3.520778517597718e+00 5.012504433148058e+00 9.085821905216753e+03 + 31080 9.629410059637241e-01 -6.053500316147198e+00 -5.988083871777354e+00 3.415234642397118e+00 4.790865989130814e+00 9.180499437732762e+03 + 31100 9.271141112203976e-01 -6.023129546636375e+00 -6.021787410931914e+00 3.602113184336791e+00 4.609819935246636e+00 9.284034313310201e+03 + 31120 9.214205882075878e-01 -6.028808549588240e+00 -5.970123839607056e+00 3.544151692734612e+00 4.881128378876088e+00 9.125564414896737e+03 + 31140 9.173372047681599e-01 -6.028167080498715e+00 -5.937139158071414e+00 3.570041576851312e+00 5.092737993954344e+00 9.025064997360038e+03 + 31160 9.027283175335558e-01 -6.003422078394667e+00 -5.968943032078411e+00 3.730200041482977e+00 4.928184061046093e+00 9.121903976984209e+03 + 31180 9.206551675007310e-01 -6.019441222178425e+00 -5.991736326669456e+00 3.586156478703371e+00 4.745242276034595e+00 9.191689078966736e+03 + 31200 9.568823836717990e-01 -6.058508586790410e+00 -5.991603325108525e+00 3.374908917332005e+00 4.759089283465173e+00 9.191279499104474e+03 + 31220 1.026157313591186e+00 -6.143469050045558e+00 -5.964238213414087e+00 2.934634287348274e+00 4.963805487168508e+00 9.107596993353189e+03 + 31240 9.445418433114563e-01 -5.999588751504112e+00 -5.996894238822117e+00 3.728397262335786e+00 4.743869571130285e+00 9.207528199190974e+03 + 31260 9.666469883300745e-01 -6.006964590137052e+00 -6.035108192060314e+00 3.623191486609150e+00 4.461586569157456e+00 9.325143019976338e+03 + 31280 9.946660318626865e-01 -6.025351233924083e+00 -6.014253494746576e+00 3.629602543279481e+00 4.693327479006314e+00 9.260854404733966e+03 + 31300 1.037528001219882e+00 -6.072865970338513e+00 -6.015662127650454e+00 3.269594692881536e+00 4.598068009862418e+00 9.265199556733678e+03 + 31320 1.037098546660028e+00 -6.063953380848192e+00 -5.963259204225578e+00 3.386200511838446e+00 4.964402056378967e+00 9.104596709750644e+03 + 31340 9.400833722817629e-01 -5.913713967190469e+00 -5.975724559362115e+00 4.219363994210710e+00 4.863289577852994e+00 9.142648055379241e+03 + 31360 1.005693473818706e+00 -6.003236941627807e+00 -5.966587405244079e+00 3.734398435813316e+00 4.944845745226111e+00 9.114746030971854e+03 + 31380 9.898172129004118e-01 -5.973630616044302e+00 -5.976825335545577e+00 3.833303107607502e+00 4.814958533849933e+00 9.146039562334137e+03 + 31400 9.916239883756244e-01 -5.972147794349388e+00 -6.022310809769923e+00 3.826613234368332e+00 4.538569437122073e+00 9.285670527821061e+03 + 31420 9.853010009460182e-01 -5.960257259779558e+00 -6.031051253930139e+00 3.876336637618378e+00 4.469826567870554e+00 9.312621158119779e+03 + 31440 1.008612864025714e+00 -5.992411241760644e+00 -6.032357876271757e+00 3.740748304259344e+00 4.511368547174822e+00 9.316659181754541e+03 + 31460 1.029298588630407e+00 -6.025227336699452e+00 -5.984430718024970e+00 3.582662681289156e+00 4.816923178974368e+00 9.169314977940734e+03 + 31480 9.334042655857491e-01 -5.886380538653455e+00 -5.959570579725227e+00 4.326493315647035e+00 4.906224773690670e+00 9.093325369022054e+03 + 31500 9.460788782783096e-01 -5.903840838207413e+00 -5.968914622411247e+00 4.199169505233701e+00 4.825505766199730e+00 9.121811894688415e+03 + 31520 9.921020168749236e-01 -5.966852224109777e+00 -5.977478865136757e+00 3.836594761640741e+00 4.775574944396443e+00 9.148035895433137e+03 + 31540 1.086757747524241e+00 -6.100875052171105e+00 -5.981749757419360e+00 3.159684679096285e+00 4.843720556140588e+00 9.161128620478910e+03 + 31560 1.012403641202399e+00 -5.985660090819247e+00 -6.066771533357364e+00 3.762922367121042e+00 4.297167912112005e+00 9.423178512264898e+03 + 31580 9.908953084462823e-01 -5.955755178057959e+00 -5.991854202921882e+00 3.955597934415209e+00 4.748311747340519e+00 9.192064265012976e+03 + 31600 1.012841705393386e+00 -5.988797347830026e+00 -6.021614436983182e+00 3.801713003081584e+00 4.613272198736034e+00 9.283524853063835e+03 + 31620 9.856905510286146e-01 -5.952090613452732e+00 -6.024505009133660e+00 3.896304658929429e+00 4.480489992838022e+00 9.292440100127540e+03 + 31640 9.808957590746398e-01 -5.950020068753343e+00 -6.038990859668990e+00 3.950614651381570e+00 4.439730601758526e+00 9.337151397295907e+03 + 31660 1.036074195414344e+00 -6.041258506455786e+00 -6.019883376935107e+00 3.476726351844587e+00 4.599465653342928e+00 9.278182697456441e+03 + 31680 9.670405573675283e-01 -5.953493427104958e+00 -5.982809413201300e+00 3.933682456718242e+00 4.765345527918863e+00 9.164347801399234e+03 + 31700 1.014695035878167e+00 -6.039065744398288e+00 -5.954212363858595e+00 3.482383566716590e+00 4.969624808793706e+00 9.077024378753564e+03 + 31720 1.013536511776796e+00 -6.053840881400317e+00 -5.990882304821087e+00 3.400441149979272e+00 4.761959039505451e+00 9.189085760277419e+03 + 31740 1.021979526902668e+00 -6.086641612640392e+00 -5.970761335804376e+00 3.204987839714851e+00 4.870390321722142e+00 9.127517956010952e+03 + 31760 9.625281939923827e-01 -6.021074911137812e+00 -5.979439065050901e+00 3.544914527181159e+00 4.783993998538560e+00 9.154035476879892e+03 + 31780 9.433311087288180e-01 -6.011521020668876e+00 -6.011932715149804e+00 3.582099868263241e+00 4.579735854844234e+00 9.253705730109961e+03 + 31800 9.713133409274932e-01 -6.072328735202534e+00 -5.978045087721832e+00 3.331249955513237e+00 4.872641249694722e+00 9.149778865828997e+03 + 31820 1.006863498808756e+00 -6.141223073159639e+00 -5.987275143263989e+00 2.948497418537118e+00 4.832490255363100e+00 9.178035202542562e+03 + 31840 9.423011273421551e-01 -6.059547892687362e+00 -6.009496939492481e+00 3.361322583131522e+00 4.648722901736505e+00 9.246230445165669e+03 + 31860 9.127143952960304e-01 -6.025446779067460e+00 -6.020233055099549e+00 3.527815078077888e+00 4.557753087922807e+00 9.279282767049472e+03 + 31880 9.473592356355940e-01 -6.081742316663823e+00 -5.968995517558610e+00 3.284746388583849e+00 4.932155956556758e+00 9.122126152124119e+03 + 31900 9.832930107977065e-01 -6.133433064179410e+00 -5.971055609207422e+00 2.979672147180035e+00 4.912068621459143e+00 9.128430679032603e+03 + 31920 9.464064454723948e-01 -6.069842917104076e+00 -6.008705349468276e+00 3.314464258362032e+00 4.665525632734810e+00 9.243799680474718e+03 + 31940 9.661712321742398e-01 -6.082367210269844e+00 -5.959745721492487e+00 3.276834758924533e+00 4.980946323098177e+00 9.093904524762322e+03 + 31960 8.916185121037674e-01 -5.944174559311961e+00 -6.024889680359971e+00 4.031509252464100e+00 4.568030536781811e+00 9.293602126324888e+03 + 31980 1.049254255374969e+00 -6.139678611145657e+00 -5.964004648252089e+00 2.989105870870239e+00 4.997852951263006e+00 9.106862384414973e+03 + 32000 9.648630518522827e-01 -5.969066050823690e+00 -5.995257358219771e+00 3.908484457171912e+00 4.758089917011895e+00 9.202478955826555e+03 + 32020 1.035519382210412e+00 -6.028345384113827e+00 -6.007814996720794e+00 3.561257097964957e+00 4.679145759442934e+00 9.241005328725218e+03 + 32040 1.020060088930005e+00 -5.968813682842733e+00 -6.015766815454856e+00 3.895951900260616e+00 4.626339746828021e+00 9.265513689069707e+03 + 32060 1.016144172652651e+00 -5.937081273559006e+00 -6.036823881807451e+00 4.030575455558656e+00 4.457837963877341e+00 9.330439467542916e+03 + 32080 1.027101018171872e+00 -5.937029292729678e+00 -5.989872507742119e+00 4.059003181113642e+00 4.755569263051113e+00 9.185995438387132e+03 + 32100 1.098238670337370e+00 -6.034255968716942e+00 -5.986866072223750e+00 3.471553706038074e+00 4.743673825264770e+00 9.176783597021233e+03 + 32120 1.039299429612162e+00 -5.945641544423541e+00 -5.946628756525702e+00 3.979436721702043e+00 4.973767997040855e+00 9.053932521117311e+03 + 32140 1.031130516924966e+00 -5.932976143097507e+00 -5.989265046009744e+00 4.053595729791855e+00 4.730376138590216e+00 9.184055983665565e+03 + 32160 1.139155226263383e+00 -6.095400981284398e+00 -5.953960516519396e+00 3.240597499213794e+00 5.052770535735624e+00 9.076247284515312e+03 + 32180 1.003924065243859e+00 -5.903984596137155e+00 -6.002263549261220e+00 4.205961633158488e+00 4.641628675701264e+00 9.223972431943394e+03 + 32200 9.838592422111661e-01 -5.887876087738622e+00 -5.989580992885031e+00 4.298560807389586e+00 4.714555503255702e+00 9.185064722790390e+03 + 32220 1.035817097242756e+00 -5.979570910226701e+00 -5.977438051020608e+00 3.802679390304572e+00 4.814926597924853e+00 9.147912576397115e+03 + 32240 1.032477654928390e+00 -5.991149175051049e+00 -6.046992318322081e+00 3.708864850764085e+00 4.388204880403325e+00 9.361879499324319e+03 + 32260 1.033578953706297e+00 -6.015769207772049e+00 -6.042219809275434e+00 3.576601800893749e+00 4.424718353843958e+00 9.347128820924871e+03 + 32280 1.067674078544079e+00 -6.096164385183002e+00 -5.987912396511006e+00 3.184549397123628e+00 4.806149068019337e+00 9.179994814015727e+03 + 32300 9.600677799837047e-01 -5.968901963777469e+00 -5.985894939884998e+00 3.866803406245334e+00 4.769227107781349e+00 9.173788708514339e+03 + 32320 9.792961305609984e-01 -6.026018193882752e+00 -5.966433870789189e+00 3.537755844627505e+00 4.879898248474949e+00 9.114286785628126e+03 + 32340 9.595377858193996e-01 -6.021384946979783e+00 -5.968743914919930e+00 3.626845458350680e+00 4.929118410611744e+00 9.121326179560865e+03 + 32360 1.001193724710751e+00 -6.101354758689940e+00 -5.945732778314581e+00 3.146844205895582e+00 5.040449699634523e+00 9.051204181712123e+03 + 32380 9.575576228320468e-01 -6.049902923346330e+00 -5.964037241913340e+00 3.432127163606471e+00 4.925181194065961e+00 9.106969035773889e+03 + 32400 9.023020581377768e-01 -5.973090694523596e+00 -5.999337801846899e+00 3.833452581197614e+00 4.682737629220478e+00 9.215010351646695e+03 + 32420 9.855948418331900e-01 -6.097012678993829e+00 -5.995187820381417e+00 3.193820700957353e+00 4.778514796455772e+00 9.202290988927707e+03 + 32440 9.202134795407484e-01 -5.995784093958020e+00 -6.055229322860793e+00 3.676824510772164e+00 4.335480807293002e+00 9.387365564567015e+03 + 32460 9.484172171834941e-01 -6.031879505956519e+00 -5.967284221333651e+00 3.535815044791318e+00 4.906731165183817e+00 9.116879620168371e+03 + 32480 9.209294232122592e-01 -5.978709581045299e+00 -5.965196705152297e+00 3.806712134281354e+00 4.884305158769760e+00 9.110509967208889e+03 + 32500 1.024461330984595e+00 -6.112183617043517e+00 -5.945881189124943e+00 3.063094297239821e+00 5.018028573565820e+00 9.051657604680375e+03 + 32520 9.966409426591925e-01 -6.039748047813636e+00 -5.977745828779042e+00 3.460327616955541e+00 4.816353953464565e+00 9.148856252643993e+03 + 32540 1.026618816040524e+00 -6.040466235205651e+00 -5.995258831462336e+00 3.514057555346632e+00 4.773645463463867e+00 9.202497325675286e+03 + 32560 9.905758101902901e-01 -5.927188620491699e+00 -6.042688727157232e+00 4.018455344370301e+00 4.355235858313066e+00 9.348555905552337e+03 + 32580 1.028368927400855e+00 -5.914786810730197e+00 -5.999098683408372e+00 4.114438121664387e+00 4.630306301526177e+00 9.214257875462297e+03 + 32600 1.057310847934023e+00 -5.895817861392816e+00 -5.962282607285801e+00 4.328810748762721e+00 4.947159892459013e+00 9.101607544051960e+03 + 32620 1.141385783244919e+00 -5.983634184961108e+00 -6.016315979428166e+00 3.833221223798258e+00 4.645557302477066e+00 9.267184456782659e+03 + 32640 1.096183332990647e+00 -5.907131105956358e+00 -6.055679590897610e+00 4.182758762756150e+00 4.329770374419728e+00 9.388749440970971e+03 + 32660 1.091101886439529e+00 -5.903872653265998e+00 -6.050135155551454e+00 4.140773736207813e+00 4.300911814035641e+00 9.371609747317354e+03 + 32680 1.032194298541337e+00 -5.829471544651454e+00 -6.065635593769994e+00 4.607630255012726e+00 4.251539738705584e+00 9.419641797930819e+03 + 32700 1.075315466144440e+00 -5.915705158689086e+00 -6.051224522903864e+00 4.084596246122968e+00 4.306423085247879e+00 9.374973442034276e+03 + 32720 9.963322877603308e-01 -5.828216475422855e+00 -6.006125483673920e+00 4.578146053082372e+00 4.556564996374713e+00 9.235820741236295e+03 + 32740 1.050732333244374e+00 -5.939170299697100e+00 -5.966693673923902e+00 4.052716784854010e+00 4.894673310815318e+00 9.115033934738623e+03 + 32760 1.033896724924840e+00 -5.944528228688386e+00 -5.949862543570422e+00 4.090809839460754e+00 5.060179377925544e+00 9.063749233000704e+03 + 32780 1.052354141675206e+00 -6.003336167272537e+00 -5.972596449875436e+00 3.647360915249126e+00 4.823873129499175e+00 9.133135430752021e+03 + 32800 1.073910284282166e+00 -6.067910448272880e+00 -5.985262887691782e+00 3.345056255769394e+00 4.819631338294726e+00 9.171875597900711e+03 + 32820 9.775292864607289e-01 -5.957955990602545e+00 -6.015194298174450e+00 3.945630672349052e+00 4.616959452671707e+00 9.263723346914752e+03 + 32840 1.014515311767048e+00 -6.041426416253023e+00 -5.959381575458423e+00 3.543893316844824e+00 5.015007489085500e+00 9.092782528398398e+03 + 32860 9.771236431353149e-01 -6.008856482436970e+00 -5.995242488775076e+00 3.702961246201155e+00 4.781134904566464e+00 9.202431836787793e+03 + 32880 9.359581615015365e-01 -5.966502448541487e+00 -6.005303330236169e+00 3.880142985563565e+00 4.657342318455666e+00 9.233327057078899e+03 + 32900 1.024506818194436e+00 -6.113398823141142e+00 -5.976705007758179e+00 3.086691234929837e+00 4.871608276158380e+00 9.145689710194485e+03 + 32920 9.821760689870432e-01 -6.064576136998426e+00 -5.986085596386804e+00 3.322327498603504e+00 4.773032329167342e+00 9.174399142940540e+03 + 32940 8.885101122037949e-01 -5.934182331659972e+00 -6.031714083559933e+00 3.997619216459932e+00 4.437576804060526e+00 9.314680141672854e+03 + 32960 1.007291991370197e+00 -6.114243354177791e+00 -5.996434017789137e+00 3.095434838450671e+00 4.771914278930209e+00 9.206115344588678e+03 + 32980 8.837907016866648e-01 -5.931861855604391e+00 -6.020070328385952e+00 4.101422870375446e+00 4.594916169446682e+00 9.278761965753825e+03 + 33000 9.948842658827406e-01 -6.093352508498851e+00 -5.973747827408593e+00 3.217488351926971e+00 4.904276939511819e+00 9.136640442796572e+03 + 33020 9.418261903321993e-01 -6.004828833759782e+00 -6.040295020325962e+00 3.650864488095325e+00 4.447212156457685e+00 9.341156693958288e+03 + 33040 1.014473396684694e+00 -6.098423682562371e+00 -5.977205046854983e+00 3.174403127292389e+00 4.870459292047467e+00 9.147228921025095e+03 + 33060 9.682723288612470e-01 -6.012235497394471e+00 -6.000007985472951e+00 3.628739295580145e+00 4.698951561234862e+00 9.217076843382387e+03 + 33080 9.512570486546017e-01 -5.959705420307958e+00 -6.024249286226297e+00 3.908181828162455e+00 4.537560961928381e+00 9.291649760971495e+03 + 33100 9.825182054977213e-01 -5.972253178626399e+00 -6.009181189193534e+00 3.906170491042190e+00 4.694124139774537e+00 9.245264065071027e+03 + 33120 1.011290548760544e+00 -5.977962705130107e+00 -6.025429825485927e+00 3.783023881418418e+00 4.510460330822164e+00 9.295247991989161e+03 + 33140 1.035904693017966e+00 -5.979489384586565e+00 -6.017401148220385e+00 3.776679967247988e+00 4.558984753636135e+00 9.270501659271957e+03 + 33160 1.017901586083734e+00 -5.921197717117971e+00 -5.986110637303543e+00 4.115655429637096e+00 4.742915396689603e+00 9.174444653200930e+03 + 33180 1.016590461602418e+00 -5.891796800494371e+00 -6.035454600750389e+00 4.210844144645867e+00 4.385938824603069e+00 9.326190827814897e+03 + 33200 1.007686314752772e+00 -5.859288615973827e+00 -6.053563130694391e+00 4.411009338219636e+00 4.295455010810165e+00 9.382206704543649e+03 + 33220 1.045583787113886e+00 -5.905406374921379e+00 -6.041839773191807e+00 4.166560506332933e+00 4.383138820463991e+00 9.345887845468880e+03 + 33240 1.092803625455598e+00 -5.975996715480321e+00 -5.950072279409630e+00 3.836522296491449e+00 4.985384420202870e+00 9.064394525730564e+03 + 33260 1.064106900951517e+00 -5.936705484660184e+00 -5.977362237154084e+00 4.077796013622888e+00 4.844338649190799e+00 9.147660980068391e+03 + 33280 1.056509770396473e+00 -5.933676998977393e+00 -6.039612083656045e+00 4.014096649392327e+00 4.405800999766137e+00 9.339039460162605e+03 + 33300 1.058596255873486e+00 -5.954547039099587e+00 -6.054347829353620e+00 3.899822438001336e+00 4.326750856240304e+00 9.384634138077206e+03 + 33320 9.995426027020912e-01 -5.887102604814530e+00 -5.998361390906485e+00 4.311264598194397e+00 4.672399431212884e+00 9.212015321195044e+03 + 33340 1.024144071306599e+00 -5.944226230215479e+00 -6.036343301732938e+00 4.019560779534546e+00 4.490610299810554e+00 9.328915862952545e+03 + 33360 9.826533498148270e-01 -5.900776968505179e+00 -6.009856306709564e+00 4.227861454000090e+00 4.601511014057474e+00 9.247291781576072e+03 + 33380 1.026112055344811e+00 -5.981694239757505e+00 -6.026690339317030e+00 3.828267171528675e+00 4.569892604733983e+00 9.299161338812304e+03 + 33400 1.027338008836794e+00 -5.999389544555160e+00 -6.005385859909287e+00 3.742750503138875e+00 4.708318732448671e+00 9.233588696974635e+03 + 33420 9.544292799922232e-01 -5.903454059310048e+00 -5.991969118408907e+00 4.174774041289961e+00 4.666506874283187e+00 9.192426741593867e+03 + 33440 1.035032992942500e+00 -6.029752220853137e+00 -5.993148512680112e+00 3.551357327907769e+00 4.761541484642809e+00 9.196008155137468e+03 + 33460 1.016590397158726e+00 -6.008240778025461e+00 -6.009264392142864e+00 3.606265774375109e+00 4.600388023709211e+00 9.245504358895059e+03 + 33480 9.909190943424009e-01 -5.975561778125635e+00 -6.015255731992795e+00 3.779233624441518e+00 4.551304798716775e+00 9.263943693369867e+03 + 33500 1.010956066002677e+00 -6.011375588047036e+00 -5.992561036770310e+00 3.641250325718497e+00 4.749286390691863e+00 9.194243303248837e+03 + 33520 9.526404549532858e-01 -5.931040139373117e+00 -6.019384726986587e+00 4.069755421049404e+00 4.562467127692109e+00 9.276627152561616e+03 + 33540 1.006134251844858e+00 -6.014614251276910e+00 -5.967185196317343e+00 3.651483996661675e+00 4.923828969862043e+00 9.116584873078042e+03 + 33560 9.909320351893766e-01 -5.994478561367085e+00 -5.994567216989907e+00 3.696900051063310e+00 4.696390976757652e+00 9.200381257334860e+03 + 33580 1.011566286102446e+00 -6.026766243119209e+00 -5.954209957902540e+00 3.570878489717851e+00 4.987507907480815e+00 9.077018494720029e+03 + 33600 1.040060362239749e+00 -6.068739464177391e+00 -5.983131675898788e+00 3.346362583125976e+00 4.837935751184133e+00 9.165340318650027e+03 + 33620 9.832521546667217e-01 -5.984850037498007e+00 -6.019411865553304e+00 3.770092880875098e+00 4.571633515755979e+00 9.276754615967526e+03 + 33640 9.493099287588730e-01 -5.936010863621783e+00 -6.055380962785319e+00 4.063298400917445e+00 4.377856819057278e+00 9.387830338545773e+03 + 33660 1.002562288935810e+00 -6.015995386458849e+00 -6.022751294404843e+00 3.553025583885832e+00 4.514232114986559e+00 9.287039017849323e+03 + 33680 1.000181367334738e+00 -6.013357538221198e+00 -5.987790535275792e+00 3.684341817160987e+00 4.831151504554430e+00 9.179613643877510e+03 + 33700 1.062918946824490e+00 -6.109056105876714e+00 -5.939613721737357e+00 3.129512882245945e+00 5.102477273098335e+00 9.032614834795060e+03 + 33720 1.077163601037068e+00 -6.132454079361533e+00 -5.988201193570820e+00 2.958358374260867e+00 4.786680767533074e+00 9.180831563423428e+03 + 33740 9.591824694565974e-01 -5.960513209100872e+00 -6.029970134017470e+00 3.864132888424566e+00 4.465300477129068e+00 9.309286688892425e+03 + 33760 9.655813243360327e-01 -5.972241625418071e+00 -6.044301501602399e+00 3.819244848016882e+00 4.405465887736669e+00 9.353562337694311e+03 + 33780 1.019414928031936e+00 -6.056648959119066e+00 -5.991213325013362e+00 3.443029397414395e+00 4.818770934580998e+00 9.190083719055110e+03 + 33800 1.005107492149035e+00 -6.040296425515112e+00 -5.996648450536793e+00 3.534158802565248e+00 4.784792229393052e+00 9.206777562010311e+03 + 33820 9.538142411856483e-01 -5.968929879236429e+00 -6.046819329010555e+00 3.836025278025104e+00 4.388772004068676e+00 9.361330812722548e+03 + 33840 9.745456844589168e-01 -6.004652603716979e+00 -6.017659746890974e+00 3.670393714886937e+00 4.595704685932956e+00 9.271348599098543e+03 + 33860 9.963599992953553e-01 -6.041293836410584e+00 -5.973431075777169e+00 3.475517312208405e+00 4.865195785493738e+00 9.135666734808550e+03 + 33880 9.790545822294348e-01 -6.018663584038736e+00 -5.975827627523983e+00 3.573338346844414e+00 4.819309037994973e+00 9.142996389690232e+03 + 33900 9.934181969223480e-01 -6.038828460402913e+00 -5.993828262365979e+00 3.474594052086680e+00 4.732992152972892e+00 9.198109785679690e+03 + 33920 9.566232117186738e-01 -5.980872954862074e+00 -6.003149635533500e+00 3.785335169897340e+00 4.657419022176818e+00 9.226719425663878e+03 + 33940 9.782705328487138e-01 -6.008203452463043e+00 -6.006349345703946e+00 3.629520169416007e+00 4.640166737348839e+00 9.236535449240409e+03 + 33960 9.730603987823262e-01 -5.991707730102409e+00 -6.013035035646773e+00 3.722969327804267e+00 4.600504638978659e+00 9.257119134562827e+03 + 33980 1.008031210947094e+00 -6.031005822362550e+00 -6.022645688184949e+00 3.536983854793231e+00 4.584989038967599e+00 9.286712156844713e+03 + 34000 1.007501051246186e+00 -6.016598825950767e+00 -5.993139477018829e+00 3.606913073101392e+00 4.741620284991095e+00 9.195986222618165e+03 + 34020 1.009104436615456e+00 -6.003384737074439e+00 -5.967296160078469e+00 3.763566378079996e+00 4.970792571880101e+00 9.116911820149629e+03 + 34040 1.020820333454005e+00 -6.002514337378292e+00 -5.978831193917095e+00 3.775572081178466e+00 4.911564355887261e+00 9.152126091840531e+03 + 34060 1.046977347263103e+00 -6.021077909640837e+00 -5.970594694005288e+00 3.630793767153293e+00 4.920676203584988e+00 9.126964309891086e+03 + 34080 1.024875014848771e+00 -5.966043589459263e+00 -6.020631923614909e+00 3.880299391636407e+00 4.566844729397279e+00 9.280491812406413e+03 + 34100 1.047799409307451e+00 -5.976950233080183e+00 -6.029235608948322e+00 3.820214260622688e+00 4.519983541252071e+00 9.307006442654818e+03 + 34120 1.023358103227549e+00 -5.921843887064405e+00 -6.024100370473327e+00 4.123603945725957e+00 4.536431393852260e+00 9.291160401261010e+03 + 34140 1.015922610594815e+00 -5.896425782045777e+00 -5.959073139826788e+00 4.283233288741465e+00 4.923502465715619e+00 9.091820100159292e+03 + 34160 9.916638807138434e-01 -5.845651034995084e+00 -6.020712995902945e+00 4.547398807107962e+00 4.542165936824131e+00 9.280713714564941e+03 + 34180 1.051971084059533e+00 -5.922571250115865e+00 -6.017513860652743e+00 4.114656361896693e+00 4.569481199872443e+00 9.270911168831601e+03 + 34200 1.106068215116996e+00 -5.995222626473003e+00 -6.034518513134090e+00 3.755779783645032e+00 4.530136721418264e+00 9.323313715433773e+03 + 34220 1.079899896113379e+00 -5.958102279494822e+00 -6.031292670657513e+00 3.940007057169679e+00 4.519736504937079e+00 9.313368331626587e+03 + 34240 1.040530389145295e+00 -5.912713241731042e+00 -6.020994864698386e+00 4.155612304230641e+00 4.533842468625159e+00 9.281611392195828e+03 + 34260 1.038385502735221e+00 -5.934455962771482e+00 -5.990650190747715e+00 4.032600633072958e+00 4.709924680004757e+00 9.188351781956970e+03 + 34280 9.816802809609201e-01 -5.886618645405675e+00 -6.022051440453660e+00 4.293792621342572e+00 4.516116554019744e+00 9.284852890799824e+03 + 34300 1.008242184330661e+00 -5.969505421377512e+00 -5.989468312127256e+00 3.872069033939700e+00 4.757439026007315e+00 9.184737041974673e+03 + 34320 1.049726087307255e+00 -6.078501493940418e+00 -5.963419357180076e+00 3.265677514126256e+00 4.926496952307247e+00 9.105114148665427e+03 + 34340 9.723770826981074e-01 -6.007187451933721e+00 -5.961854506551731e+00 3.643808598822742e+00 4.904117386456750e+00 9.100285536805990e+03 + 34360 9.694093608996591e-01 -6.033295905971626e+00 -5.951356660526777e+00 3.526241155558596e+00 4.996748982960172e+00 9.068296289882323e+03 + 34380 9.557441849690711e-01 -6.032550573792705e+00 -5.966200653462914e+00 3.527830410387740e+00 4.908821920538392e+00 9.113590537486827e+03 + 34400 9.661267272647774e-01 -6.058926567957526e+00 -5.969054751427723e+00 3.380206435372358e+00 4.896264313505148e+00 9.122287998863536e+03 + 34420 9.020497339132060e-01 -5.969203013717589e+00 -5.974054538724513e+00 3.869734327888060e+00 4.841876120527235e+00 9.137540553005716e+03 + 34440 9.453643581845979e-01 -6.030080413734153e+00 -5.947370069625577e+00 3.559837076375358e+00 5.034772671631186e+00 9.056192528030157e+03 + 34460 9.605017398627637e-01 -6.042125172673115e+00 -6.019578947764553e+00 3.489347025223586e+00 4.618810937665579e+00 9.277247346662491e+03 + 34480 8.667454545876117e-01 -5.890069269701408e+00 -6.054370625260697e+00 4.226265117121395e+00 4.282821307947361e+00 9.384702974533697e+03 + 34500 9.667324717481441e-01 -6.023775852015619e+00 -6.042757795044354e+00 3.586163766087604e+00 4.477166511770422e+00 9.348774180131521e+03 + 34520 9.828617966496069e-01 -6.031885281962625e+00 -6.035867863194475e+00 3.450014354126718e+00 4.427145756390980e+00 9.327503661049588e+03 + 34540 1.025224687555036e+00 -6.078032885983578e+00 -6.001706255430841e+00 3.281142016681364e+00 4.719421340823086e+00 9.222307007059961e+03 + 34560 9.515827488377635e-01 -5.951093580304645e+00 -6.023075579934879e+00 3.879901444550216e+00 4.466569663494971e+00 9.288000812847880e+03 + 34580 9.254710715132071e-01 -5.892137676379655e+00 -6.003242868211235e+00 4.319130572519630e+00 4.681147367549836e+00 9.226998845068720e+03 + 34600 1.028780970708773e+00 -6.023337720739420e+00 -6.023577773530921e+00 3.536260684024431e+00 4.534882263747579e+00 9.289589552084472e+03 + 34620 1.023680481024618e+00 -5.995164083917780e+00 -5.996616836867778e+00 3.734248580175923e+00 4.725906647924241e+00 9.206680704835122e+03 + 34640 1.041495537971289e+00 -6.003796954859683e+00 -5.990264366610287e+00 3.733922625690060e+00 4.811628841579359e+00 9.187179734565141e+03 + 34660 9.955663553817961e-01 -5.919990413854217e+00 -5.983262117465539e+00 4.100429290565231e+00 4.737113377164529e+00 9.165736890928216e+03 + 34680 1.013947706321502e+00 -5.931515284001444e+00 -5.999743416884854e+00 4.045626903089211e+00 4.653850405803230e+00 9.216265471077868e+03 + 34700 1.099043546120746e+00 -6.041435768858401e+00 -6.015145364394257e+00 3.414520521422550e+00 4.565484092282604e+00 9.263621766710867e+03 + 34720 1.070244974300127e+00 -5.986006103255457e+00 -6.035740332354205e+00 3.755219502523077e+00 4.469637862690985e+00 9.327114563653928e+03 + 34740 9.762089024696813e-01 -5.839924298871928e+00 -6.080039847748727e+00 4.483207159635066e+00 4.104426520223385e+00 9.464380798389469e+03 + 34760 9.895705831263665e-01 -5.856632866073813e+00 -6.045011604899007e+00 4.465455171018823e+00 4.383755301168941e+00 9.355733234776131e+03 + 34780 1.126911748955256e+00 -6.061192222049099e+00 -5.971015261928007e+00 3.319649506086400e+00 4.837459565941193e+00 9.128295876529504e+03 + 34800 1.023743464365290e+00 -5.917310536904900e+00 -6.007460236702479e+00 4.068825908092984e+00 4.551172381234330e+00 9.239960142122145e+03 + 34820 1.011939358212453e+00 -5.919685254584234e+00 -6.007675986906934e+00 4.083882291662787e+00 4.578625890144023e+00 9.240628281583078e+03 + 34840 9.776361263010142e-01 -5.894254870356567e+00 -6.031236316463588e+00 4.253253459732388e+00 4.466684798375597e+00 9.313168334875332e+03 + 34860 1.011614925279996e+00 -5.976190196065733e+00 -5.982365679544357e+00 3.846635598065020e+00 4.811175016277780e+00 9.162989527938806e+03 + 34880 1.030663168647257e+00 -6.037727136007128e+00 -6.005082222016327e+00 3.474678550261223e+00 4.662130698180515e+00 9.232675854604468e+03 + 34900 9.615131270545991e-01 -5.970550852425270e+00 -6.065990989308089e+00 3.831150561966386e+00 4.283118526671790e+00 9.420748999587729e+03 + 34920 9.582194095786187e-01 -5.999517597939873e+00 -6.025604405418504e+00 3.666378216794398e+00 4.516583731331689e+00 9.295813282973575e+03 + 34940 9.591793317933317e-01 -6.028434515064667e+00 -5.985743755458351e+00 3.500854515364196e+00 4.745991463397360e+00 9.173337498065292e+03 + 34960 9.528382792416653e-01 -6.036725263022418e+00 -5.992203731268289e+00 3.541260963669013e+00 4.796910488685990e+00 9.193127549673922e+03 + 34980 9.098862616852088e-01 -5.986796738569259e+00 -6.063047567619219e+00 3.751548439277189e+00 4.313704379094657e+00 9.411630989365538e+03 + 35000 9.946128171486417e-01 -6.123069083603966e+00 -6.014319459491903e+00 3.077583542535138e+00 4.702040713136546e+00 9.261079636348179e+03 + 35020 9.386597653974768e-01 -6.047007927321903e+00 -6.005349037099489e+00 3.499504007068639e+00 4.738715801418169e+00 9.233474257289656e+03 + 35040 9.525044259563686e-01 -6.070378946277703e+00 -5.975453071350080e+00 3.358403959726223e+00 4.903483023292305e+00 9.141844419771909e+03 + 35060 9.708767237379334e-01 -6.092874282600277e+00 -5.942564128966005e+00 3.210155887368002e+00 5.073260049957089e+00 9.041580827483553e+03 + 35080 9.620292402261388e-01 -6.065894776057851e+00 -5.984434296877148e+00 3.332415334647071e+00 4.800174012071081e+00 9.169322805206582e+03 + 35100 9.633828217828498e-01 -6.047792242674332e+00 -5.969625045998292e+00 3.464090779595137e+00 4.912938919243548e+00 9.124039799294724e+03 + 35120 9.651560149585100e-01 -6.023435614507056e+00 -6.004345763615860e+00 3.570539524235282e+00 4.680156402197408e+00 9.230394337601212e+03 + 35140 9.829858487790532e-01 -6.016270159665145e+00 -5.988818738133913e+00 3.609355863913366e+00 4.766986174439450e+00 9.182766338163943e+03 + 35160 1.035554988678442e+00 -6.059835571795576e+00 -6.023232999831624e+00 3.361812770625831e+00 4.571990403072551e+00 9.288504479763618e+03 + 35180 1.021937597628327e+00 -6.005989437394526e+00 -6.033916144653193e+00 3.673538259000266e+00 4.513178784277017e+00 9.321471000862713e+03 + 35200 1.009887627307424e+00 -5.964284445018313e+00 -6.008096039141128e+00 3.896271349730603e+00 4.644698396455121e+00 9.241894629431230e+03 + 35220 1.046293874052755e+00 -5.997090321820147e+00 -5.987756970571938e+00 3.728712162675501e+00 4.782305709874150e+00 9.179512023004947e+03 + 35240 1.035532479400028e+00 -5.966922393249788e+00 -5.944654736533561e+00 3.908245926674538e+00 5.036110257447851e+00 9.047908547811123e+03 + 35260 1.055910471537084e+00 -5.985794980536277e+00 -5.966366971749410e+00 3.757860817102530e+00 4.869419450031367e+00 9.114041287972956e+03 + 35280 9.914118944035317e-01 -5.882636340272437e+00 -5.955341253761432e+00 4.362651872784332e+00 4.945169008481516e+00 9.080410211868437e+03 + 35300 9.980277251952221e-01 -5.887868759599275e+00 -5.926655862811823e+00 4.326186556963624e+00 5.103465008032349e+00 8.993190609108990e+03 + 35320 1.008895982719608e+00 -5.898429163431519e+00 -5.973566295852499e+00 4.280649657842436e+00 4.849200616047505e+00 9.136027814065830e+03 + 35340 9.959755945210601e-01 -5.877509368121739e+00 -6.026923636931192e+00 4.291175622844934e+00 4.433215769557683e+00 9.299869276951040e+03 + 35360 1.019084390411524e+00 -5.914289462138371e+00 -6.003512183652201e+00 4.122029291185329e+00 4.609698617081389e+00 9.227833754767153e+03 + 35380 1.061972754544876e+00 -5.984052329833881e+00 -5.979860993472045e+00 3.776489085673686e+00 4.800556387670555e+00 9.155335191928541e+03 + 35400 1.048804680807730e+00 -5.976178500522182e+00 -6.031579602916313e+00 3.814338633541412e+00 4.496216930301423e+00 9.314231151488093e+03 + 35420 1.062867717287666e+00 -6.014846747319091e+00 -6.000582120008563e+00 3.681429904249789e+00 4.763339601710785e+00 9.218829654429912e+03 + 35440 9.809606251252622e-01 -5.919993962061801e+00 -6.027828705111792e+00 4.186165976818756e+00 4.566962194853144e+00 9.302661459632822e+03 + 35460 1.036798418834628e+00 -6.034977298837317e+00 -5.983173367487371e+00 3.578184102045912e+00 4.875650292489768e+00 9.165473176168489e+03 + 35480 1.019815420802907e+00 -6.051459735852447e+00 -6.003439553470780e+00 3.453160003917524e+00 4.728899322252266e+00 9.227598678745309e+03 + 35500 9.607458567618672e-01 -6.015146515225867e+00 -5.966977138932953e+00 3.659146178202568e+00 4.935742191063367e+00 9.115945259084616e+03 + 35520 9.562125210559344e-01 -6.054425898275792e+00 -5.961694010328486e+00 3.386505619062743e+00 4.918986469869451e+00 9.099817996047137e+03 + 35540 8.918510136247597e-01 -5.994836132420174e+00 -6.019821536132795e+00 3.799720145926223e+00 4.656250091329621e+00 9.277972624783231e+03 + 35560 1.000482276871838e+00 -6.177360456615081e+00 -5.975629566171635e+00 2.769748833268951e+00 4.928118823949620e+00 9.142411374504662e+03 + 35580 9.097533839281328e-01 -6.053908814008033e+00 -6.032485236795029e+00 3.391250431509040e+00 4.514267927153968e+00 9.317052613884085e+03 + 35600 9.601877247751737e-01 -6.129493751189758e+00 -5.968291005417062e+00 3.031539157802362e+00 4.957190270073466e+00 9.119977081449520e+03 + 35620 9.555725811313868e-01 -6.117516520927241e+00 -5.985087692226357e+00 3.109010262623836e+00 4.869437090319321e+00 9.171322759403305e+03 + 35640 9.169578486952911e-01 -6.050556026980540e+00 -6.007607728800874e+00 3.434470091567802e+00 4.681085865943105e+00 9.240427349650261e+03 + 35660 9.307392864578254e-01 -6.056108881585850e+00 -6.010896825684288e+00 3.417970048713266e+00 4.677584670243076e+00 9.250547752035618e+03 + 35680 9.858352344426721e-01 -6.120115131976210e+00 -6.004386614924458e+00 3.029984141412531e+00 4.694515195253823e+00 9.230536903139633e+03 + 35700 9.327334071094726e-01 -6.022304036349039e+00 -5.976629285282776e+00 3.636026127755157e+00 4.898297616522527e+00 9.145426069394476e+03 + 35720 9.531010314672712e-01 -6.030758170577888e+00 -5.993587504186452e+00 3.525827079583606e+00 4.739266798145268e+00 9.197344074541288e+03 + 35740 9.713905374034917e-01 -6.031283503175597e+00 -5.976226928867836e+00 3.614056295776205e+00 4.930199665428708e+00 9.144190437432826e+03 + 35760 1.065653059851730e+00 -6.141540626365792e+00 -5.947598234896963e+00 2.980278549536746e+00 5.093925773838842e+00 9.056898573427747e+03 + 35780 9.804852678280199e-01 -5.985457274497887e+00 -6.025809443385143e+00 3.715849376166921e+00 4.484140977938345e+00 9.296468917838916e+03 + 35800 1.043490076887030e+00 -6.053570969427625e+00 -6.003208710898681e+00 3.409540989956799e+00 4.698728871964311e+00 9.226907255141899e+03 + 35820 9.938965861699721e-01 -5.959295043315155e+00 -6.017226801237561e+00 3.878241016796418e+00 4.545587897895398e+00 9.270001918471326e+03 + 35840 1.038581218403012e+00 -6.007516585158622e+00 -6.033518691419539e+00 3.608020829269039e+00 4.458712711305909e+00 9.320221334396218e+03 + 35860 1.000389459159008e+00 -5.937797660585527e+00 -6.006204915298842e+00 4.024828136563793e+00 4.632023094011484e+00 9.236115026854794e+03 + 35880 1.042936386004096e+00 -5.990237673815015e+00 -6.027988481979564e+00 3.717746669978362e+00 4.500975687578838e+00 9.303160545081646e+03 + 35900 9.888978588205806e-01 -5.902899529958122e+00 -5.990493551640425e+00 4.266660783030538e+00 4.763682355399713e+00 9.187878626183161e+03 + 35920 1.109328539521271e+00 -6.076380352429560e+00 -5.973844762072792e+00 3.272306351876713e+00 4.861081579036602e+00 9.136952059717394e+03 + 35940 9.564274624713118e-01 -5.849042282182857e+00 -6.060861972883242e+00 4.437679389978301e+00 4.221377946985499e+00 9.404819766948887e+03 + 35960 1.049059400554185e+00 -5.990144933074261e+00 -6.023917409411082e+00 3.701198396030199e+00 4.507271610630354e+00 9.290615814368259e+03 + 35980 1.061727444737271e+00 -6.016145957788103e+00 -6.001386181233673e+00 3.604992080535981e+00 4.689745001579563e+00 9.221298752087894e+03 + 36000 1.041694249354959e+00 -5.999927088804181e+00 -5.995774730346033e+00 3.637323950394936e+00 4.661167435237020e+00 9.204101778558950e+03 + 36020 9.999932450460217e-01 -5.961137517492225e+00 -5.974399043340182e+00 3.951424010060776e+00 4.875274276427316e+00 9.138621820334072e+03 + 36040 9.291113475564650e-01 -5.885128396956406e+00 -5.964723733474901e+00 4.337526611606163e+00 4.880477871978445e+00 9.109041352341699e+03 + 36060 1.009484295289598e+00 -6.039566309861691e+00 -5.979378756430004e+00 3.449329611340735e+00 4.794935857139274e+00 9.153857144464098e+03 + 36080 9.868910620571015e-01 -6.047664467595260e+00 -6.005550577263872e+00 3.431779784924051e+00 4.673604260310356e+00 9.234096849059344e+03 + 36100 9.842469562837179e-01 -6.088258045490166e+00 -5.984777678818226e+00 3.219158188083253e+00 4.813358467048523e+00 9.170376457281685e+03 + 36120 9.042853380671673e-01 -6.004984938186954e+00 -5.991046113576280e+00 3.736448293222622e+00 4.816487181163250e+00 9.189568058216119e+03 + 36140 9.240331957304573e-01 -6.060198097971647e+00 -5.997383147832123e+00 3.367552626235236e+00 4.728245790518503e+00 9.209036455754913e+03 + 36160 8.969633598540711e-01 -6.033539137057288e+00 -6.027713888332804e+00 3.510722948619303e+00 4.544172428249619e+00 9.302322441011665e+03 + 36180 9.558817703353707e-01 -6.127288123827435e+00 -6.007867038043665e+00 3.051444603622930e+00 4.737178958546636e+00 9.241238187399777e+03 + 36200 9.781394195028803e-01 -6.160993986576017e+00 -5.943647915907953e+00 2.856917685378749e+00 5.104952457350504e+00 9.044892285326312e+03 + 36220 8.892470969520102e-01 -6.020863375392894e+00 -6.002712428499690e+00 3.609133191822459e+00 4.713358737733189e+00 9.225375779079082e+03 + 36240 9.470212690967177e-01 -6.091957279444939e+00 -6.003653487877813e+00 3.174343607335062e+00 4.681397643481081e+00 9.228267174470249e+03 + 36260 9.016759552754020e-01 -6.006819746154422e+00 -5.969444152009059e+00 3.648679453016545e+00 4.863295898453723e+00 9.123486836127357e+03 + 36280 9.356929831420231e-01 -6.034434659420729e+00 -5.957011866291777e+00 3.473630847250770e+00 4.918204506535726e+00 9.085554806270011e+03 + 36300 9.619273916898522e-01 -6.046701084722867e+00 -5.954858282914077e+00 3.457110774501563e+00 4.984486355115284e+00 9.078981139164547e+03 + 36320 9.803044543300830e-01 -6.048344084328718e+00 -6.014615658242633e+00 3.430800476324524e+00 4.624474318367893e+00 9.261968359315633e+03 + 36340 9.912451987597901e-01 -6.045724136074467e+00 -5.988103560022954e+00 3.404898669245116e+00 4.735764933688232e+00 9.180588017351794e+03 + 36360 9.902229891393663e-01 -6.030507004005695e+00 -5.935864706661328e+00 3.590604834175040e+00 5.134055551374572e+00 9.021190796362984e+03 + 36380 9.310481522486064e-01 -5.929820885204958e+00 -5.966992437264178e+00 4.080195851821055e+00 4.866751047617921e+00 9.115938315293737e+03 + 36400 9.985475570531214e-01 -6.015103531424840e+00 -5.952523338578578e+00 3.637767470406357e+00 4.997112621983140e+00 9.071864474010314e+03 + 36420 1.016484211146562e+00 -6.027443948388774e+00 -6.023353066395481e+00 3.517766747397592e+00 4.541257224865017e+00 9.288878316050448e+03 + 36440 1.037380433477882e+00 -6.049679928161706e+00 -5.998759887406450e+00 3.409728136294339e+00 4.702118890161859e+00 9.213258850792061e+03 + 36460 9.704407030229057e-01 -5.944442178276158e+00 -5.983132363063341e+00 4.011408040776685e+00 4.789243012441937e+00 9.165321036096295e+03 + 36480 1.026050687129477e+00 -6.018821580862799e+00 -5.963260827084270e+00 3.648780717349004e+00 4.967819163544181e+00 9.104601961396493e+03 + 36500 1.087917593982701e+00 -6.102685720304233e+00 -5.968323965704185e+00 3.177951653762675e+00 4.949477641090477e+00 9.120086100274646e+03 + 36520 9.927169562230097e-01 -5.954980981894696e+00 -6.023613025524071e+00 3.899512437619582e+00 4.505416622325281e+00 9.289679659272329e+03 + 36540 9.995328487126918e-01 -5.961499956775050e+00 -6.037862317475771e+00 3.871470887960126e+00 4.432986395779460e+00 9.333651144803298e+03 + 36560 1.034483902221955e+00 -6.011654657382843e+00 -6.018655592448040e+00 3.670058832143372e+00 4.629858379607811e+00 9.274405047165465e+03 + 36580 1.007350795222262e+00 -5.972837939853731e+00 -6.016514734523767e+00 3.808459566290458e+00 4.557660652332980e+00 9.267798391934339e+03 + 36600 1.018105316141292e+00 -5.991265013371356e+00 -5.980467213263136e+00 3.792861842854502e+00 4.854864482030066e+00 9.157191625605883e+03 + 36620 9.643435525887120e-01 -5.916350269394099e+00 -6.043087681811779e+00 4.140346166778670e+00 4.412600332125161e+00 9.349782321602641e+03 + 36640 1.016218330234107e+00 -6.001322754277966e+00 -5.993779638481492e+00 3.696093917117202e+00 4.739407655313959e+00 9.197977985499607e+03 + 36660 9.747618635628658e-01 -5.951044982615234e+00 -6.045591348470236e+00 3.940953881680341e+00 4.398054017938087e+00 9.357525159393757e+03 + 36680 1.029035710775141e+00 -6.048447076825759e+00 -6.005403895565370e+00 3.412960898764991e+00 4.660121506472917e+00 9.233625902247020e+03 + 36700 8.864145123232360e-01 -5.861287509058068e+00 -6.041176706369254e+00 4.457526836076211e+00 4.424575227352064e+00 9.343854016477411e+03 + 36720 9.677306402723989e-01 -6.007840931666443e+00 -5.981033976751776e+00 3.706127403875692e+00 4.860057087358576e+00 9.158910636307630e+03 + 36740 9.740972125805725e-01 -6.046007064960842e+00 -6.038398254327985e+00 3.443810689434842e+00 4.487501657548346e+00 9.335291112895491e+03 + 36760 9.448963633700656e-01 -6.034279198917861e+00 -6.012532385421869e+00 3.530101401967793e+00 4.654974970370295e+00 9.255541116141178e+03 + 36780 9.053371913546797e-01 -6.002158871640652e+00 -5.991248855777734e+00 3.677206589000821e+00 4.739853588405192e+00 9.190178354386195e+03 + 36800 9.684273374800685e-01 -6.116755351671876e+00 -5.954407329375104e+00 3.090463960342100e+00 5.022691427645421e+00 9.077646099931722e+03 + 36820 9.501611216237112e-01 -6.105055131407257e+00 -5.957574432707720e+00 3.141282314332368e+00 4.988139308829478e+00 9.087278991465109e+03 + 36840 9.499355253899543e-01 -6.113781855354995e+00 -5.932861834528682e+00 3.084641982132317e+00 5.123512738999752e+00 9.012099608310649e+03 + 36860 9.184264155526949e-01 -6.065429341320918e+00 -5.974544929408846e+00 3.371258991227139e+00 4.893131348743549e+00 9.139057068801410e+03 + 36880 9.457983288334333e-01 -6.095173549102192e+00 -6.009608523671254e+00 3.159638751829856e+00 4.650966368999196e+00 9.246575984712861e+03 + 36900 9.806099696538672e-01 -6.128234075393941e+00 -6.003371212934768e+00 2.991867815122089e+00 4.708849693828176e+00 9.227395039732761e+03 + 36920 9.354824298648817e-01 -6.033964062242945e+00 -6.021865954583839e+00 3.522519356426266e+00 4.591988562780966e+00 9.284277176816426e+03 + 36940 9.162770165711012e-01 -5.970011427280911e+00 -5.994008513383607e+00 3.905266713547546e+00 4.767471731608797e+00 9.198663075518762e+03 + 36960 9.872528726327354e-01 -6.030549163539524e+00 -5.994840595933615e+00 3.567793066982634e+00 4.772837188058739e+00 9.201194394545919e+03 + 36980 1.058165496126749e+00 -6.090299812514143e+00 -6.016667895513450e+00 3.212213213849245e+00 4.635019075769554e+00 9.268294985055660e+03 + 37000 1.053006862859185e+00 -6.045990690165004e+00 -5.994148825018681e+00 3.495170928923083e+00 4.792854941095976e+00 9.199097472867845e+03 + 37020 1.041262525458457e+00 -6.007004836800759e+00 -5.994704029153477e+00 3.675929497600003e+00 4.746562638654524e+00 9.200783884848248e+03 + 37040 9.948903957503364e-01 -5.924639235522253e+00 -6.022107171765211e+00 4.073304347983240e+00 4.513628374961789e+00 9.285046075150069e+03 + 37060 9.945372993882234e-01 -5.916184963702372e+00 -5.991343687021478e+00 4.129150655321685e+00 4.697577635248535e+00 9.190493133483644e+03 + 37080 1.051055156328336e+00 -5.995087613855917e+00 -5.980077580721732e+00 3.679938752161978e+00 4.766128685213592e+00 9.156002782577787e+03 + 37100 1.083863485674150e+00 -6.042644494060104e+00 -5.963169231166909e+00 3.475920076590495e+00 4.932279334880404e+00 9.104339719231437e+03 + 37120 1.027152204070001e+00 -5.961984110768216e+00 -6.000224510842475e+00 3.869606902091157e+00 4.650024607181972e+00 9.217726994083187e+03 + 37140 1.019421358526143e+00 -5.957267252497020e+00 -5.983589776686563e+00 3.937686651565228e+00 4.786538644271419e+00 9.166711462570445e+03 + 37160 1.075288523183712e+00 -6.047310762663072e+00 -5.954340195194860e+00 3.493848823271604e+00 5.027700208822893e+00 9.077394071011106e+03 + 37180 1.008021790206270e+00 -5.957118963900235e+00 -5.967379204491071e+00 3.969306273702706e+00 4.910390384463026e+00 9.117156574263372e+03 + 37200 1.002617696903565e+00 -5.959322897673909e+00 -5.989098554157448e+00 3.908609098523722e+00 4.737632671227290e+00 9.183601469692561e+03 + 37220 1.057609568076640e+00 -6.053280714317420e+00 -5.976156412526080e+00 3.401831042326616e+00 4.844690718159619e+00 9.143997437608225e+03 + 37240 9.875216577022590e-01 -5.962710057327586e+00 -6.017302505631137e+00 3.925207084166698e+00 4.611728797853636e+00 9.270219926347441e+03 + 37260 1.018447425985427e+00 -6.026664775048282e+00 -6.014904692172953e+00 3.563323107557954e+00 4.630851323295031e+00 9.262846185707805e+03 + 37280 9.966956792327294e-01 -6.017681420473824e+00 -5.976636087230855e+00 3.606685445172878e+00 4.842374100398796e+00 9.145476530151702e+03 + 37300 9.747667544641906e-01 -6.007609546902249e+00 -6.021371481583427e+00 3.651430055682078e+00 4.572406897090247e+00 9.282767419335436e+03 + 37320 9.761190776002098e-01 -6.035113003283525e+00 -5.986793976497696e+00 3.504136395001583e+00 4.781591724151038e+00 9.176568372969461e+03 + 37340 9.747516422557589e-01 -6.060252404993716e+00 -5.967843276357588e+00 3.356220395640892e+00 4.886847912535982e+00 9.118600415079029e+03 + 37360 9.414122759306732e-01 -6.039129935463077e+00 -5.980790666787613e+00 3.518537420539227e+00 4.853530529246390e+00 9.158143038810487e+03 + 37380 9.330899214100103e-01 -6.055234979476404e+00 -5.986873012396266e+00 3.444321021425292e+00 4.836866015379663e+00 9.176795642838448e+03 + 37400 9.247484753712178e-01 -6.069015446439321e+00 -5.974379687022763e+00 3.302857231822222e+00 4.846270407228539e+00 9.138585699983334e+03 + 37420 9.488419226070716e-01 -6.127605300795120e+00 -5.979458198394792e+00 3.040653467474010e+00 4.891337055146697e+00 9.154097022972775e+03 + 37440 9.293942954402463e-01 -6.117539777926696e+00 -5.990887128628598e+00 3.056283147067139e+00 4.783542258770956e+00 9.189095052095114e+03 + 37460 9.417694807474862e-01 -6.150505614390154e+00 -5.997594398201096e+00 2.868256119141016e+00 4.746295985432812e+00 9.209698697824766e+03 + 37480 9.546522524561809e-01 -6.180433797541570e+00 -5.984614836683111e+00 2.702847628359175e+00 4.827270404494702e+00 9.169911423100793e+03 + 37500 9.048255686974820e-01 -6.112253178534859e+00 -5.957300763689194e+00 3.118900541129979e+00 5.008661285982487e+00 9.086450341939126e+03 + 37520 8.825711422084065e-01 -6.074630142009887e+00 -5.939050953272343e+00 3.331437822969737e+00 5.109954505512371e+00 9.030889064708894e+03 + 37540 9.276954877199886e-01 -6.120780064179211e+00 -5.945973642646427e+00 3.057644312162079e+00 5.061409835809629e+00 9.051940447662215e+03 + 37560 9.238576991993074e-01 -6.074519567823113e+00 -5.995759314735142e+00 3.280282142604245e+00 4.732535703945155e+00 9.204049468929717e+03 + 37580 9.476122230065523e-01 -6.057304566770451e+00 -6.000624842602932e+00 3.416964022668367e+00 4.742427769997231e+00 9.218957508747044e+03 + 37600 1.021449231359665e+00 -6.113777002400935e+00 -5.977648218627500e+00 3.088684585714609e+00 4.870357128002880e+00 9.148546658877918e+03 + 37620 9.492103712949311e-01 -5.962806629202774e+00 -6.018867532752456e+00 3.893549194503265e+00 4.571638810924206e+00 9.275041825656623e+03 + 37640 9.426671916172155e-01 -5.919768038391574e+00 -5.997149007532183e+00 4.161952679313755e+00 4.717619179842104e+00 9.208272726561416e+03 + 37660 1.022871240141234e+00 -6.013613387335719e+00 -5.959115755647658e+00 3.659649203166817e+00 4.972583037800915e+00 9.091960075204692e+03 + 37680 1.064017900156335e+00 -6.052393358712745e+00 -5.977576768718851e+00 3.433038997570888e+00 4.862647435145711e+00 9.148334267497537e+03 + 37700 1.053320781142675e+00 -6.019046108002756e+00 -5.967077214004064e+00 3.576282793393422e+00 4.874696224894266e+00 9.116260750420581e+03 + 37720 1.046098943185696e+00 -5.994953110383792e+00 -5.987983368112436e+00 3.738210215591895e+00 4.778231554278149e+00 9.180183461668668e+03 + 37740 1.034381795963629e+00 -5.966317948778673e+00 -6.047471554826252e+00 3.821998654310634e+00 4.356002089905484e+00 9.363326907444667e+03 + 37760 9.846376876210567e-01 -5.885486949865316e+00 -6.061648736896110e+00 4.305484541922857e+00 4.293936299843597e+00 9.407279124269302e+03 + 37780 1.072774781977715e+00 -6.013854227687370e+00 -5.994504587237158e+00 3.631533827436592e+00 4.742642457248891e+00 9.200205474601897e+03 + 37800 1.054305398670348e+00 -5.989193506590672e+00 -6.036784554871160e+00 3.736414191550979e+00 4.463139027633501e+00 9.330292399143513e+03 + 37820 1.028209103477028e+00 -5.959783128467869e+00 -6.028844876686716e+00 3.914140802579186e+00 4.517577557035568e+00 9.305790534392776e+03 + 37840 1.076092709481768e+00 -6.046226857990375e+00 -5.987548625270054e+00 3.462790210355032e+00 4.799729703062280e+00 9.178847883332422e+03 + 37860 9.523786175789140e-01 -5.880797832679383e+00 -6.069577086957159e+00 4.294142144925759e+00 4.210142453367578e+00 9.431839648540075e+03 + 37880 1.052054965812987e+00 -6.051661686774793e+00 -5.989612857598940e+00 3.446117962078143e+00 4.802411941231172e+00 9.185171200170653e+03 + 37900 9.504644507944292e-01 -5.926918014014129e+00 -6.054010840434845e+00 4.025072311410702e+00 4.295285634551624e+00 9.383568492934222e+03 + 37920 9.832313109071007e-01 -6.004372740773937e+00 -6.010821650558474e+00 3.682585422916940e+00 4.645554784968569e+00 9.250307613516430e+03 + 37940 8.800378974701606e-01 -5.879963381462147e+00 -6.069243321831846e+00 4.291226064468493e+00 4.204351355889576e+00 9.430843416602940e+03 + 37960 1.003058596617729e+00 -6.088626247932789e+00 -5.989136695481532e+00 3.197469968350557e+00 4.768754374484157e+00 9.183746332947569e+03 + 37980 9.878784971384852e-01 -6.089854988344440e+00 -5.978529594405481e+00 3.180990885928947e+00 4.820238525475485e+00 9.151250699538776e+03 + 38000 9.458762634304554e-01 -6.045792994996969e+00 -5.973987642246472e+00 3.459279211807419e+00 4.871596659143199e+00 9.137372314381388e+03 + 38020 9.550373875306964e-01 -6.071219089576978e+00 -5.991536034626494e+00 3.286300052754914e+00 4.743852485193498e+00 9.191084384827367e+03 + 38040 9.109405928526811e-01 -6.010833904576853e+00 -5.990516330673879e+00 3.660742602966368e+00 4.777409256451648e+00 9.187959838865931e+03 + 38060 9.197270901397637e-01 -6.022766515853551e+00 -6.008542896847720e+00 3.574444412098114e+00 4.656118633527526e+00 9.243299772475397e+03 + 38080 9.926696387412721e-01 -6.124072766120490e+00 -6.019713799091924e+00 3.027890142951853e+00 4.627135481127827e+00 9.277665226124256e+03 + 38100 9.931168066502366e-01 -6.112792966489424e+00 -5.974835958130928e+00 3.106420081345524e+00 4.898590572118060e+00 9.139986979661891e+03 + 38120 9.518293409796095e-01 -6.030382264537055e+00 -5.978258862982274e+00 3.563363411192443e+00 4.862664048990314e+00 9.150396185863767e+03 + 38140 1.011061736840916e+00 -6.078871417451543e+00 -5.979946104610945e+00 3.276979236004268e+00 4.845023690977669e+00 9.155588546079176e+03 + 38160 9.996496600000792e-01 -6.001971108337878e+00 -5.992519450393097e+00 3.719767436292150e+00 4.774040318850428e+00 9.194114474490170e+03 + 38180 1.037437876624693e+00 -5.995426052242607e+00 -6.003059821268190e+00 3.738640333787669e+00 4.694806050720834e+00 9.226448683737159e+03 + 38200 9.900417731175458e-01 -5.874021187809513e+00 -6.051489488771066e+00 4.356348975597927e+00 4.337298528345872e+00 9.375784835409531e+03 + 38220 9.822654968468778e-01 -5.832679057035014e+00 -6.038645232192112e+00 4.551005634180668e+00 4.368315983266011e+00 9.336054176920492e+03 + 38240 1.093227053636404e+00 -5.983144716966978e+00 -5.947354728794617e+00 3.803854117165730e+00 5.009365767734193e+00 9.056121283055783e+03 + 38260 1.025109425168660e+00 -5.876113783543842e+00 -6.025548572126089e+00 4.306433626540428e+00 4.448355945542366e+00 9.295636555960502e+03 + 38280 1.049355549243571e+00 -5.912433342296191e+00 -5.980491581529758e+00 4.158435916334406e+00 4.767634974676779e+00 9.157257954584093e+03 + 38300 1.051261076482578e+00 -5.923419762298023e+00 -5.971740964856460e+00 4.149626175422407e+00 4.872158352649929e+00 9.130487055227979e+03 + 38320 1.062104753341277e+00 -5.951854933356495e+00 -5.946945025910154e+00 3.964602360570864e+00 4.992795808933481e+00 9.054877614924824e+03 + 38340 9.724047080634836e-01 -5.831976619199812e+00 -5.995608124198839e+00 4.568349390138925e+00 4.628751966540957e+00 9.203522447183204e+03 + 38360 1.072966687954136e+00 -5.996344441925022e+00 -6.023293713119961e+00 3.722269115667285e+00 4.567522230079709e+00 9.288678621732592e+03 + 38380 1.028623376207440e+00 -5.953331121886213e+00 -6.044919721489635e+00 3.942982976327441e+00 4.417067064114605e+00 9.355463601655338e+03 + 38400 9.826666775750345e-01 -5.913612112977154e+00 -6.038991213229062e+00 4.204824275542841e+00 4.484878079543326e+00 9.337129385477985e+03 + 38420 1.051595058012267e+00 -6.045774495562344e+00 -5.987565144056749e+00 3.540525367496647e+00 4.874772471709810e+00 9.178924212490256e+03 + 38440 1.015369469695447e+00 -6.021382627186632e+00 -6.044058511858788e+00 3.553879675220589e+00 4.423671236351257e+00 9.352808577128797e+03 + 38460 9.894078464662757e-01 -6.012631871394085e+00 -6.008213727750897e+00 3.665285880772372e+00 4.690655545277070e+00 9.242287008032958e+03 + 38480 9.493155662306634e-01 -5.977811067174793e+00 -6.002459209155272e+00 3.833381142413645e+00 4.691847696874090e+00 9.224598097694619e+03 + 38500 1.028111986299228e+00 -6.112456263925607e+00 -5.954593285675182e+00 3.097615861124870e+00 5.004089511455739e+00 9.078195775384102e+03 + 38520 9.150926371139090e-01 -5.959229418040367e+00 -5.990763310140355e+00 3.950986895945561e+00 4.769914407653401e+00 9.188693251696364e+03 + 38540 9.332432506099096e-01 -5.993533167941466e+00 -6.006113599240728e+00 3.740346057501451e+00 4.668107274165639e+00 9.235779316696700e+03 + 38560 9.891386763139318e-01 -6.077367563276564e+00 -6.004769946556236e+00 3.267254103373453e+00 4.684120853026458e+00 9.231705614636203e+03 + 38580 9.882855181913691e-01 -6.073804745030918e+00 -6.010832098189491e+00 3.312958442338593e+00 4.674557125487670e+00 9.250339794538299e+03 + 38600 9.251721770771483e-01 -5.977264189937594e+00 -5.979654875122190e+00 3.810901648009707e+00 4.797173963722423e+00 9.154676031383298e+03 + 38620 9.253776330203459e-01 -5.969275788185508e+00 -5.997103592043974e+00 3.825844727941907e+00 4.666053171847861e+00 9.208151199093110e+03 + 38640 1.055052529177415e+00 -6.149011178947287e+00 -5.972117257518901e+00 2.854072487904779e+00 4.869824758992440e+00 9.131678020299923e+03 + 38660 9.688809800695355e-01 -6.008784231381574e+00 -6.008456914890004e+00 3.622466125520467e+00 4.624345627467124e+00 9.243033321555871e+03 + 38680 1.001353043748229e+00 -6.041770624039511e+00 -5.971724732429438e+00 3.439082348203054e+00 4.841296697394786e+00 9.130455352673014e+03 + 38700 9.563744772228119e-01 -5.957592857522434e+00 -5.982205069187955e+00 3.943119772248560e+00 4.801792644137687e+00 9.162464190386654e+03 + 38720 1.034826550142536e+00 -6.053479272572883e+00 -5.995224471452122e+00 3.378771268406918e+00 4.713279351343661e+00 9.202375956077443e+03 + 38740 1.037241600025850e+00 -6.035865158617405e+00 -5.984536056758255e+00 3.554846125979586e+00 4.849585772007662e+00 9.169609322981925e+03 + 38760 1.003107244317321e+00 -5.964741087605548e+00 -5.974881429227493e+00 3.940733225433137e+00 4.882505814627138e+00 9.140093574788709e+03 + 38780 9.836875330311200e-01 -5.913600219513177e+00 -5.989957406223106e+00 4.282424684965789e+00 4.843969902640920e+00 9.186216076215711e+03 + 38800 1.098770014661096e+00 -6.057843933839727e+00 -5.956721223558123e+00 3.436738544739169e+00 5.017400795864985e+00 9.084670938817357e+03 + 38820 1.084006465601478e+00 -6.006202349134434e+00 -5.980430035757689e+00 3.643264723258219e+00 4.791253334920103e+00 9.157063814178902e+03 + 38840 1.096222326669355e+00 -5.987279004291063e+00 -5.993242210385090e+00 3.801997441657786e+00 4.767755789462718e+00 9.196302714380932e+03 + 38860 1.061067306931096e+00 -5.884968984155845e+00 -6.055214015847896e+00 4.283591670591502e+00 4.306018353282237e+00 9.387311964740380e+03 + 38880 1.099641831584355e+00 -5.874144526817987e+00 -6.008711341460479e+00 4.383756794916055e+00 4.611053321091600e+00 9.243798338510092e+03 + 38900 1.157300871704767e+00 -5.890242375196009e+00 -6.012301222357539e+00 4.251575236297207e+00 4.550694447350151e+00 9.254841389539504e+03 + 38920 1.114541868726751e+00 -5.774660291742436e+00 -6.050910130972183e+00 4.883611176497981e+00 4.297341850116314e+00 9.373997213007475e+03 + 38940 1.162323073404610e+00 -5.824046752315723e+00 -6.008732493086081e+00 4.634279822149461e+00 4.573785718620047e+00 9.243834707686212e+03 + 38960 1.158092508452047e+00 -5.816536858132422e+00 -6.020635477883572e+00 4.620755987269009e+00 4.448790128498575e+00 9.280480060172762e+03 + 38980 1.122834729458094e+00 -5.781846390836762e+00 -6.017287389492683e+00 4.870765435577336e+00 4.518826786918243e+00 9.270154203530572e+03 + 39000 1.177818754306817e+00 -5.893532749942179e+00 -6.007102188746041e+00 4.243628225141769e+00 4.591494932716139e+00 9.238815434133056e+03 + 39020 1.161323891663267e+00 -5.908948359689923e+00 -5.951402827494760e+00 4.205085328628554e+00 4.961305204685522e+00 9.068445670645533e+03 + 39040 1.016530897774236e+00 -5.735723016989963e+00 -5.989339107149104e+00 5.122883475967102e+00 4.666580639310206e+00 9.184274062773316e+03 + 39060 1.052693885446022e+00 -5.823005461779347e+00 -5.984978991874822e+00 4.605001682117559e+00 4.674924606986567e+00 9.170961780767750e+03 + 39080 1.096938961981560e+00 -5.920737517533599e+00 -5.971573969144344e+00 4.142462533097337e+00 4.850551761032980e+00 9.129982478701113e+03 + 39100 1.093986061287647e+00 -5.949775174875866e+00 -6.009242521026019e+00 3.898308116037166e+00 4.556837411900910e+00 9.245440072584715e+03 + 39120 1.079316505351835e+00 -5.961774257502536e+00 -5.992976221509720e+00 3.883307810799386e+00 4.704141304981814e+00 9.195480485855525e+03 + 39140 1.050617558642280e+00 -5.951334045860754e+00 -5.954493272746759e+00 3.981453063574802e+00 4.963312293906584e+00 9.077862554693400e+03 + 39160 9.932491395809119e-01 -5.893810091761956e+00 -5.997194058598588e+00 4.199291090869059e+00 4.605644354675963e+00 9.208417310113075e+03 + 39180 1.025716423572176e+00 -5.969568235598132e+00 -5.961579934170830e+00 3.839095549212522e+00 4.884965612193741e+00 9.099460084220907e+03 + 39200 9.325734788149230e-01 -5.855240028330083e+00 -6.054151161056870e+00 4.401656217802245e+00 4.259477712286722e+00 9.384011835378367e+03 + 39220 9.839838833748541e-01 -5.954310489753702e+00 -6.015012601255920e+00 3.874241047746582e+00 4.525680129879452e+00 9.263183025841032e+03 + 39240 1.037965578497535e+00 -6.055065194889058e+00 -5.974622768600879e+00 3.402115980607791e+00 4.864028840779751e+00 9.139290934532291e+03 + 39260 1.014769498014900e+00 -6.040492493810840e+00 -5.997571758122318e+00 3.468270773493916e+00 4.714728279779788e+00 9.209591422606427e+03 + 39280 9.699746353998464e-01 -5.992149493590869e+00 -5.990903227786914e+00 3.776152881058427e+00 4.783309132163743e+00 9.189129180435915e+03 + 39300 9.600492697622333e-01 -5.992382373552416e+00 -6.035374846141613e+00 3.747348027157746e+00 4.500478596486946e+00 9.325954950821511e+03 + 39320 9.323235075682385e-01 -5.966440185302880e+00 -6.005351925062818e+00 3.829469647438894e+00 4.606032416165063e+00 9.233492413174621e+03 + 39340 9.424249349125009e-01 -5.990922113648294e+00 -6.019592020958987e+00 3.728921457227996e+00 4.564294412796178e+00 9.277260556381127e+03 + 39360 9.951827632624004e-01 -6.075110875529315e+00 -5.977493254856153e+00 3.270322361516663e+00 4.830857845699940e+00 9.148074468799945e+03 + 39380 1.032793100993733e+00 -6.135438541119099e+00 -5.979476431289070e+00 2.957432438476266e+00 4.852991008178792e+00 9.154163912330241e+03 + 39400 9.474534676280297e-01 -6.012317748246142e+00 -5.999801687639831e+00 3.616159160244618e+00 4.688028317100173e+00 9.216450452383142e+03 + 39420 9.216433963852435e-01 -5.972151287686815e+00 -5.995689746482021e+00 3.816253967681406e+00 4.681092494714609e+00 9.203807097239576e+03 + 39440 9.457472149219108e-01 -5.999312757972534e+00 -5.983214301830738e+00 3.718118648667213e+00 4.810558475061443e+00 9.165588454116058e+03 + 39460 9.457367505698968e-01 -5.981534937007549e+00 -6.006836705663521e+00 3.757482497773009e+00 4.612195826714371e+00 9.238054317932076e+03 + 39480 9.579770569747527e-01 -5.973744937792716e+00 -6.015000065662374e+00 3.855502978802340e+00 4.618609650364359e+00 9.263149901913028e+03 + 39500 1.049051838339108e+00 -6.073891230223492e+00 -5.988719144604667e+00 3.271084430606410e+00 4.760155726567356e+00 9.182462903963467e+03 + 39520 1.016212208727127e+00 -5.984232075703513e+00 -6.020357042179807e+00 3.752470633939576e+00 4.545035486112202e+00 9.279642898377646e+03 + 39540 1.025776420202663e+00 -5.955661624612953e+00 -6.042132332740266e+00 3.946169911700568e+00 4.449641724334695e+00 9.346856729076684e+03 + 39560 1.072809417459248e+00 -5.986830600774184e+00 -6.025924752812872e+00 3.806714002609173e+00 4.582229331802546e+00 9.296820070988295e+03 + 39580 1.012372815999787e+00 -5.870000725823250e+00 -6.069903495116039e+00 4.405761549515960e+00 4.257888913383198e+00 9.432863799530111e+03 + 39600 1.023174958390502e+00 -5.871339202684463e+00 -6.023835875821351e+00 4.384570333276320e+00 4.508910837340405e+00 9.290343654850001e+03 + 39620 1.173970417933402e+00 -6.088039722790834e+00 -5.938789451455836e+00 3.260862967152977e+00 5.117881121563379e+00 9.030114252896477e+03 + 39640 1.038753927521937e+00 -5.888381851876491e+00 -6.028036534118174e+00 4.274860614914857e+00 4.472941817990881e+00 9.303282933438808e+03 + 39660 1.056155102968091e+00 -5.921943846212725e+00 -5.953995416356713e+00 4.085676729583942e+00 4.901631653852712e+00 9.076338248676262e+03 + 39680 1.027445313526099e+00 -5.889269517531873e+00 -6.013588132139026e+00 4.274613560194352e+00 4.560756836876641e+00 9.258809525766272e+03 + 39700 1.048463510324615e+00 -5.938692791271670e+00 -6.002839497722007e+00 3.987870175338830e+00 4.619529860230255e+00 9.225737639949433e+03 + 39720 1.048211470168058e+00 -5.960016437940664e+00 -5.939910531396431e+00 3.926195775827704e+00 5.041647002583669e+00 9.033462272263809e+03 + 39740 1.011299167778082e+00 -5.926321456001872e+00 -5.955801678521906e+00 4.166222798656241e+00 4.996942798896511e+00 9.081836416380287e+03 + 39760 9.864590392197067e-01 -5.909505033508147e+00 -6.002940952616207e+00 4.170907403915833e+00 4.634383897235598e+00 9.226057486736234e+03 + 39780 1.024747522521816e+00 -5.986946308866632e+00 -6.009759217733103e+00 3.741708663340988e+00 4.610713410343475e+00 9.247026187530237e+03 + 39800 1.070696225035710e+00 -6.072943511418069e+00 -5.962373941319374e+00 3.402068977471273e+00 5.036976559563653e+00 9.101906728667385e+03 + 39820 1.065715563509477e+00 -6.084079758033790e+00 -6.001199514075861e+00 3.258277571392031e+00 4.734188757874765e+00 9.220756203379267e+03 + 39840 9.587133383888075e-01 -5.940701635457771e+00 -6.034749038273034e+00 3.989797071748706e+00 4.449762330994913e+00 9.324041258239122e+03 + 39860 1.000186073379294e+00 -6.012873100410734e+00 -6.015446821582156e+00 3.601689233296980e+00 4.586910528048612e+00 9.264532476764110e+03 + 39880 9.746726168981310e-01 -5.980328158818024e+00 -6.011273543523744e+00 3.738466027023819e+00 4.560772839260765e+00 9.251715568849053e+03 + 39900 9.928926083191441e-01 -6.009330421564483e+00 -6.033146444107637e+00 3.642205921907731e+00 4.505450634947364e+00 9.319090890319138e+03 + 39920 1.010800524483252e+00 -6.038965690903647e+00 -6.001876914277874e+00 3.479360570470891e+00 4.692330065325716e+00 9.222807555504036e+03 + 39940 9.773692342174731e-01 -5.992974746781816e+00 -5.965785905381520e+00 3.738711865682666e+00 4.894834400462775e+00 9.112288544504283e+03 + 39960 9.898484417027990e-01 -6.011011455477171e+00 -5.965953847154770e+00 3.593763974639785e+00 4.852491734269359e+00 9.112806106412683e+03 + 39980 9.841486027573987e-01 -5.998787587907533e+00 -5.979107956265645e+00 3.715600162334668e+00 4.828603652635537e+00 9.152984214005193e+03 + 40000 9.482720541741739e-01 -5.939412370084104e+00 -6.019205495866089e+00 4.025423293243215e+00 4.567238817056747e+00 9.276057179881340e+03 + 40020 1.023050232798368e+00 -6.041668774412496e+00 -6.050904901054274e+00 3.420208053625955e+00 4.367172785162884e+00 9.373975787205971e+03 + 40040 9.900036765521283e-01 -5.986118454653941e+00 -5.997178482694135e+00 3.778857584444568e+00 4.715349191903966e+00 9.208392223378216e+03 + 40060 9.651506598889374e-01 -5.944877064525965e+00 -5.993773109913757e+00 4.019994204154664e+00 4.739225544899393e+00 9.197920478372274e+03 + 40080 1.039054198402698e+00 -6.046149136689051e+00 -5.951758391713673e+00 3.484587314199518e+00 5.026593578768717e+00 9.069558224684921e+03 + 40100 9.871971970952442e-01 -5.957191672067843e+00 -6.048085318536035e+00 3.910842968524797e+00 4.388917584758103e+00 9.365261679135592e+03 + 40120 1.008698918380450e+00 -5.979143964701026e+00 -6.015691065840143e+00 3.836290135754145e+00 4.626431025367710e+00 9.265289452583409e+03 + 40140 1.051577218862978e+00 -6.032757136876275e+00 -5.993988360954697e+00 3.598244527029238e+00 4.820860837819621e+00 9.198600451826442e+03 + 40160 1.012856221793394e+00 -5.965169085765140e+00 -6.014245813749283e+00 3.904949430763758e+00 4.623143264079697e+00 9.260826380154755e+03 + 40180 1.048736242634835e+00 -6.007232252434408e+00 -6.018216188612149e+00 3.613927920099592e+00 4.550856458808375e+00 9.273055468657563e+03 + 40200 9.915575126262502e-01 -5.911319435994634e+00 -6.005676161199150e+00 4.204174520915129e+00 4.662363603134760e+00 9.234484444386140e+03 + 40220 9.981198526971157e-01 -5.909995866017157e+00 -5.988195144241368e+00 4.207565389035707e+00 4.758533032173089e+00 9.180850787759116e+03 + 40240 1.035214738782100e+00 -5.951747820587875e+00 -5.982258268674232e+00 3.967042685173260e+00 4.791846970784817e+00 9.162661441873293e+03 + 40260 1.144806605446995e+00 -6.099408074630976e+00 -5.993469416277566e+00 3.155277468111492e+00 4.763593638331165e+00 9.197037695364723e+03 + 40280 1.021027574264459e+00 -5.905977352807255e+00 -6.033722948885301e+00 4.177269393124679e+00 4.443734411877434e+00 9.320865062010540e+03 + 40300 1.087505809081725e+00 -6.000990718486668e+00 -5.997851632994742e+00 3.674041859889846e+00 4.692066974556397e+00 9.210462312252212e+03 + 40320 1.036172532566935e+00 -5.927267913107668e+00 -6.017057272330179e+00 4.029698089061268e+00 4.514113693547178e+00 9.269464580706544e+03 + 40340 1.018346314960064e+00 -5.909640970949287e+00 -5.951277274110188e+00 4.222472346904915e+00 4.983390250957930e+00 9.068058593073918e+03 + 40360 1.026287940885864e+00 -5.934267270407916e+00 -5.971335786884405e+00 4.101143392726252e+00 4.888290234783864e+00 9.129201355033856e+03 + 40380 1.050519294423998e+00 -5.988167575145003e+00 -5.973175718791381e+00 3.747264112079882e+00 4.833349671244648e+00 9.134867543405169e+03 + 40400 9.975958582176956e-01 -5.932774144668173e+00 -5.983153981746498e+00 4.075705731470380e+00 4.786416910712044e+00 9.165399705319289e+03 + 40420 1.006640932190740e+00 -5.973500240902635e+00 -6.002904675033092e+00 3.842661134165865e+00 4.673816323067306e+00 9.225964804201767e+03 + 40440 9.925493574988186e-01 -5.983430677655832e+00 -6.001331208068637e+00 3.783373807059941e+00 4.680586191331491e+00 9.221129367633228e+03 + 40460 1.001580902276464e+00 -6.027215129551037e+00 -6.001922491594167e+00 3.539322659395163e+00 4.684556900566585e+00 9.222949090971604e+03 + 40480 9.529802942998165e-01 -5.985468042243087e+00 -6.027109785005500e+00 3.756874533115858e+00 4.517761202135219e+00 9.300459896871880e+03 + 40500 9.957173200375995e-01 -6.074806569928226e+00 -6.003656409621514e+00 3.271983688353239e+00 4.680538919286104e+00 9.228295666806396e+03 + 40520 9.705171214849178e-01 -6.057927486713487e+00 -6.030272176904083e+00 3.360279396929245e+00 4.519080465500208e+00 9.310231456468769e+03 + 40540 9.770363340674247e-01 -6.085739565927646e+00 -5.999013833544507e+00 3.264808243788642e+00 4.762800819896341e+00 9.214041117976019e+03 + 40560 9.696485225984908e-01 -6.087165796270344e+00 -5.990017556165686e+00 3.270477586993292e+00 4.828317815315808e+00 9.186446089450761e+03 + 40580 9.717259175085311e-01 -6.096906562843945e+00 -6.018225670877203e+00 3.149838953633265e+00 4.601636811134982e+00 9.273100958428333e+03 + 40600 9.688613024392033e-01 -6.094351707454911e+00 -5.983955292732156e+00 3.194623825594557e+00 4.828537122722585e+00 9.167868613334964e+03 + 40620 9.920048254180076e-01 -6.125356561430753e+00 -5.989072070634789e+00 3.005607689777964e+00 4.788174325885178e+00 9.183560210419662e+03 + 40640 9.544350239095466e-01 -6.059774143972422e+00 -6.014651411806879e+00 3.356985410678378e+00 4.616087121493162e+00 9.262094677667361e+03 + 40660 9.458161034285784e-01 -6.031812673747662e+00 -6.017211987850578e+00 3.500189934058775e+00 4.584029331928670e+00 9.269971686140352e+03 + 40680 9.544819692943259e-01 -6.020050319818411e+00 -6.026235758018074e+00 3.578667096447576e+00 4.543149353111643e+00 9.297770976551761e+03 + 40700 9.916586197152992e-01 -6.043253081350107e+00 -5.978112258344694e+00 3.448491649973318e+00 4.822540336180176e+00 9.149970686682655e+03 + 40720 9.794421822343667e-01 -5.979901668131604e+00 -5.967601271032805e+00 3.825246852692517e+00 4.895877636314123e+00 9.117848348482261e+03 + 40740 1.002537670831281e+00 -5.960560106760758e+00 -6.003400041170114e+00 3.861739485307127e+00 4.615745952470182e+00 9.227473806532931e+03 + 40760 1.066566342176865e+00 -6.003958964648861e+00 -6.007229759430125e+00 3.664290486646077e+00 4.645509076858207e+00 9.239209235342836e+03 + 40780 1.047520694849016e+00 -5.939300433491710e+00 -6.017845369971590e+00 4.050454270619939e+00 4.599437090562836e+00 9.271904716597168e+03 + 40800 1.037185643444162e+00 -5.905538441942295e+00 -6.029144318725025e+00 4.198199238756580e+00 4.488435166322534e+00 9.306756284800380e+03 + 40820 1.049877028438687e+00 -5.918973511806076e+00 -6.032072687230372e+00 4.108339652140284e+00 4.458906684813144e+00 9.315763708935538e+03 + 40840 1.062780715659392e+00 -5.940512919206860e+00 -5.996823597658039e+00 3.992293281200060e+00 4.668948651484064e+00 9.207275022118647e+03 + 40860 1.033563378081269e+00 -5.904817554112634e+00 -5.971622727592412e+00 4.224854300855688e+00 4.841248656667619e+00 9.130102677363591e+03 + 40880 1.071485808244854e+00 -5.969589895106303e+00 -5.994687665577660e+00 3.866514063363472e+00 4.722398781449513e+00 9.200758496247327e+03 + 40900 1.090886540124907e+00 -6.013504288475625e+00 -6.014006926569678e+00 3.623676776201101e+00 4.620790550482052e+00 9.260072891098629e+03 + 40920 1.044617381622178e+00 -5.964963583286458e+00 -6.005921943323803e+00 3.896521503645979e+00 4.661332262025815e+00 9.235208301783288e+03 + 40940 1.048024691751375e+00 -5.993946423417706e+00 -6.015744749558008e+00 3.669837061009006e+00 4.544667699031327e+00 9.265436066984073e+03 + 40960 1.086172708261702e+00 -6.076881946367907e+00 -5.960102305370468e+00 3.290648316631386e+00 4.961215086829716e+00 9.094968109858810e+03 + 40980 9.905055517430740e-01 -5.961022887318354e+00 -5.999953074069705e+00 3.891044538769695e+00 4.667501382016510e+00 9.216890275287824e+03 + 41000 9.796026525916424e-01 -5.969829335559584e+00 -5.972070894823998e+00 3.869077085208850e+00 4.856205705032410e+00 9.131495069884260e+03 + 41020 1.028205885222987e+00 -6.062839171982683e+00 -5.944984390656108e+00 3.354009361886640e+00 5.030749754232296e+00 9.048927431711945e+03 + 41040 9.797560257536749e-01 -6.006687402679683e+00 -6.010611831458855e+00 3.606818595400734e+00 4.584283918047340e+00 9.249634333007481e+03 + 41060 1.030196185630203e+00 -6.094053372263473e+00 -5.951604792142309e+00 3.229001127777726e+00 5.046962918679986e+00 9.069088184745726e+03 + 41080 9.720676038113055e-01 -6.018699373812893e+00 -5.984235934009615e+00 3.552667742082485e+00 4.750562146632983e+00 9.168728048253455e+03 + 41100 9.870678552377534e-01 -6.050108554501752e+00 -5.979121028875332e+00 3.402909019173769e+00 4.810530376604755e+00 9.153036853336536e+03 + 41120 9.712957994092769e-01 -6.031472273490918e+00 -5.973724413300503e+00 3.461485878555698e+00 4.793083028221543e+00 9.136566364278207e+03 + 41140 9.661342366400655e-01 -6.022883424535045e+00 -6.006761506343716e+00 3.550589605997023e+00 4.643164155110405e+00 9.237827904142367e+03 + 41160 9.719070299913287e-01 -6.028122700028727e+00 -6.003806552917019e+00 3.551600191179134e+00 4.691227270806169e+00 9.228736300504681e+03 + 41180 9.935634632127555e-01 -6.053491209249371e+00 -5.991911781750261e+00 3.422980957122264e+00 4.776579559207764e+00 9.192241673361881e+03 + 41200 9.603556167048766e-01 -5.991015064109736e+00 -6.042937006999196e+00 3.663404553904283e+00 4.365260722938308e+00 9.349357294837338e+03 + 41220 9.864845339565242e-01 -6.012084038592826e+00 -5.992954778056669e+00 3.613874436096151e+00 4.723717610338269e+00 9.195461494272144e+03 + 41240 9.230700664653255e-01 -5.890019940208351e+00 -5.982995388828128e+00 4.298549527868360e+00 4.764670113989431e+00 9.164893429629241e+03 + 41260 9.981932586888228e-01 -5.958754803850280e+00 -5.949622985490696e+00 3.919723848023600e+00 4.972160162188658e+00 9.062984730993947e+03 + 41280 1.060971229646532e+00 -5.993685039669203e+00 -5.983028389057045e+00 3.748147266814406e+00 4.809339403740768e+00 9.165000850712013e+03 + 41300 1.049768256319500e+00 -5.921445591524184e+00 -6.017922968816661e+00 4.071978248144255e+00 4.517990217904963e+00 9.272155896399516e+03 + 41320 1.109749949733657e+00 -5.974241994285975e+00 -5.983421692933668e+00 3.823901013141732e+00 4.771189762952908e+00 9.166201641980451e+03 + 41340 1.089605549384979e+00 -5.923348021165127e+00 -5.997970989398964e+00 4.096652334188386e+00 4.668155702722681e+00 9.210792359426059e+03 + 41360 1.036574174039727e+00 -5.834433443010338e+00 -6.039215143558831e+00 4.533248227939707e+00 4.357360013524523e+00 9.337782791203765e+03 + 41380 1.136443649216289e+00 -5.984097837672807e+00 -5.996704488869412e+00 3.764968020249360e+00 4.692578678205487e+00 9.206910399884855e+03 + 41400 1.057828287888791e+00 -5.877785893055563e+00 -5.964017887208103e+00 4.359547212958205e+00 4.864389758176357e+00 9.106893870072912e+03 + 41420 1.055314191523820e+00 -5.890074434903321e+00 -6.014931333643668e+00 4.265934149832463e+00 4.548986515722752e+00 9.262942058173991e+03 + 41440 1.056686364718221e+00 -5.916154312876202e+00 -6.034172928625757e+00 4.132722719563358e+00 4.455041564607649e+00 9.322251146859859e+03 + 41460 1.034981057448354e+00 -5.914876218857642e+00 -6.012841672767065e+00 4.178718002193763e+00 4.616185205740860e+00 9.256502229196738e+03 + 41480 1.027031314080232e+00 -5.937497054682225e+00 -6.031657849254664e+00 3.979349160389250e+00 4.438663306618444e+00 9.314501709647100e+03 + 41500 1.042342036214515e+00 -5.995752223848504e+00 -5.990949224515953e+00 3.755227148413341e+00 4.782806713842594e+00 9.189274452754540e+03 + 41520 9.711857432044605e-01 -5.923136954820414e+00 -6.008057766543764e+00 4.105796625189694e+00 4.618168182821072e+00 9.241764584510374e+03 + 41540 9.550212274632899e-01 -5.921039925467043e+00 -5.965283719636440e+00 4.150839766293850e+00 4.896785053468155e+00 9.110718031769360e+03 + 41560 9.850780843427117e-01 -5.978095997626388e+00 -5.945924730066029e+00 3.819483755793590e+00 5.004216152612740e+00 9.051785769460195e+03 + 41580 1.014302567156776e+00 -6.030050807208439e+00 -6.000265678596564e+00 3.532269724066435e+00 4.703300541789575e+00 9.217849060828345e+03 + 41600 9.627452546984072e-01 -5.961400226346727e+00 -5.994469073791080e+00 3.930253188117983e+00 4.740366748704902e+00 9.200079434022709e+03 + 41620 1.044679238887409e+00 -6.089218824778237e+00 -5.973877349354145e+00 3.188382517508409e+00 4.850691118429174e+00 9.137039552234894e+03 + 41640 1.004022342109738e+00 -6.034333046863875e+00 -5.983443484437945e+00 3.459316619802592e+00 4.751532362386618e+00 9.166317842818511e+03 + 41660 1.044877517196799e+00 -6.099183199534624e+00 -5.952745051110485e+00 3.190854714861737e+00 5.031725224343369e+00 9.072552444294006e+03 + 41680 9.975258553503771e-01 -6.030244666105307e+00 -5.967458191742750e+00 3.555809171660968e+00 4.916338823626271e+00 9.117412593821255e+03 + 41700 1.008362692940627e+00 -6.045996061906804e+00 -5.964792621702442e+00 3.428751329397293e+00 4.895034049242503e+00 9.109269679935887e+03 + 41720 9.518538919256299e-01 -5.959385818987940e+00 -5.987701170917576e+00 3.887797267719998e+00 4.725206135153480e+00 9.179310165034152e+03 + 41740 9.788070773569778e-01 -5.993317525559167e+00 -5.948906061665340e+00 3.779981922884098e+00 5.034999421214279e+00 9.060869680976431e+03 + 41760 9.546496176875435e-01 -5.946125236236587e+00 -6.015937417501862e+00 3.964544134050008e+00 4.563671785824669e+00 9.266039448105323e+03 + 41780 9.756821535906730e-01 -5.964180345407149e+00 -6.028855584439330e+00 3.831343703661434e+00 4.459968472677756e+00 9.305852698634975e+03 + 41800 1.009718221067306e+00 -5.997316272576850e+00 -6.002817245970013e+00 3.699918435598378e+00 4.668330995101955e+00 9.225714039266966e+03 + 41820 1.014085210617851e+00 -5.982389985033539e+00 -6.028170165965667e+00 3.783352291260766e+00 4.520475407888381e+00 9.303729289588409e+03 + 41840 9.926776433536969e-01 -5.923172862139123e+00 -6.047595071447286e+00 4.127900715916697e+00 4.413449135794563e+00 9.363716174337320e+03 + 41860 1.026736378798209e+00 -5.936827267077670e+00 -6.034015905423079e+00 3.987311714979321e+00 4.429239513706805e+00 9.321750608601234e+03 + 41880 1.020201896607275e+00 -5.886529472483418e+00 -5.982335594764439e+00 4.332322965597723e+00 4.782189385510594e+00 9.162838746632346e+03 + 41900 1.030653820313612e+00 -5.858196937827208e+00 -6.014728128277675e+00 4.410931268678573e+00 4.512104949988555e+00 9.262268923802652e+03 + 41920 1.113139046610511e+00 -5.940217549110979e+00 -5.990320982742208e+00 3.979212678677376e+00 4.691511009285567e+00 9.187376383043238e+03 + 41940 1.169927639975069e+00 -5.992933776836654e+00 -6.029992088872360e+00 3.717869209954620e+00 4.505074647490340e+00 9.309356409963457e+03 + 41960 1.102589231426763e+00 -5.881664479547374e+00 -6.075683548693411e+00 4.260021007457938e+00 4.145933488067476e+00 9.450837779572204e+03 + 41980 1.098089816239254e+00 -5.881713464108240e+00 -6.045885157939411e+00 4.325978800590716e+00 4.383279529124620e+00 9.358369115632007e+03 + 42000 1.014130296850902e+00 -5.773754101459457e+00 -5.946662440822411e+00 4.989532614890624e+00 4.996666172789502e+00 9.054010119562336e+03 + 42020 1.115234781621623e+00 -5.945750703276803e+00 -5.955294023635772e+00 3.981891834939495e+00 4.927092612614245e+00 9.080282488008805e+03 + 42040 1.046309862816272e+00 -5.871525666890436e+00 -5.991350335637182e+00 4.336094330378478e+00 4.648042539627105e+00 9.190462583841858e+03 + 42060 1.131937925520272e+00 -6.033312220142301e+00 -5.940905979757462e+00 3.532992843398486e+00 5.063603775507721e+00 9.036529272929680e+03 + 42080 1.041773785077297e+00 -5.935935344171328e+00 -5.999084958620294e+00 4.096071130568028e+00 4.733456272030810e+00 9.214224608571722e+03 + 42100 1.052301704073485e+00 -5.986316751377207e+00 -5.991697874703776e+00 3.777277715633439e+00 4.746378472766132e+00 9.191579173522352e+03 + 42120 9.773314725366022e-01 -5.903437904723610e+00 -6.007152439372128e+00 4.201199761522557e+00 4.605654853798403e+00 9.238995023702961e+03 + 42140 9.092528838027251e-01 -5.819576598948462e+00 -6.026898207090846e+00 4.638659252700817e+00 4.448186495832077e+00 9.299792376619622e+03 + 42160 1.045735930044150e+00 -6.032355661311123e+00 -6.010508737322633e+00 3.553236510602245e+00 4.678684928944714e+00 9.249327401182120e+03 + 42180 9.983106425020157e-01 -5.972601585475750e+00 -6.071199783156326e+00 3.821114537775507e+00 4.254948428671865e+00 9.436918046360270e+03 + 42200 1.041951043838867e+00 -6.049794878186697e+00 -6.043055176065359e+00 3.393176115606594e+00 4.431876528152848e+00 9.349716722794323e+03 + 42220 9.773230412439644e-01 -5.966758386407828e+00 -6.032021933427817e+00 3.867252604124375e+00 4.492499217634337e+00 9.315613137919943e+03 + 42240 1.013278648299591e+00 -6.031140889917081e+00 -6.008995637301402e+00 3.526808662959975e+00 4.653970130445968e+00 9.244681237915252e+03 + 42260 9.597486827834335e-01 -5.961492823573055e+00 -6.009471300824395e+00 3.853904731940564e+00 4.578404890918010e+00 9.246152533192282e+03 + 42280 9.746920974863563e-01 -5.990614087491510e+00 -6.016433801189764e+00 3.769208492898536e+00 4.620947701255374e+00 9.267558968164936e+03 + 42300 1.024937830917936e+00 -6.071871406963625e+00 -5.991456173574136e+00 3.312944826094509e+00 4.774701540434108e+00 9.190849134803384e+03 + 42320 9.637924537954357e-01 -5.989384812551391e+00 -6.010141293062793e+00 3.677584796229362e+00 4.558397873077913e+00 9.248211427314784e+03 + 42340 9.863205026886791e-01 -6.029178446562106e+00 -5.959150824741782e+00 3.563330397497203e+00 4.965439838728964e+00 9.092047372481626e+03 + 42360 8.858424687537718e-01 -5.881500338329091e+00 -6.008245277164047e+00 4.297500008723066e+00 4.569710956216855e+00 9.242347789625266e+03 + 42380 1.008674706676510e+00 -6.059102242594683e+00 -5.989759321429535e+00 3.395654796846682e+00 4.793832580959335e+00 9.185634393770290e+03 + 42400 9.895430675208226e-01 -6.022787933396328e+00 -6.010689518147565e+00 3.577124509955490e+00 4.646595482537601e+00 9.249894349071390e+03 + 42420 9.673373976393089e-01 -5.982751751843269e+00 -5.981117252687039e+00 3.773630919043970e+00 4.783016466136970e+00 9.159170889210325e+03 + 42440 9.437176720732248e-01 -5.934451870203412e+00 -6.005558827795886e+00 4.044460292722517e+00 4.636153138460410e+00 9.234111590699595e+03 + 42460 1.037201134089287e+00 -6.053011277464931e+00 -5.970032805036439e+00 3.447140035213572e+00 4.923615264775080e+00 9.125283349107589e+03 + 42480 1.041539322021710e+00 -6.032819864891585e+00 -5.968450389615150e+00 3.487239796449451e+00 4.856859284630849e+00 9.120437437307733e+03 + 42500 1.060176761684903e+00 -6.027869702173631e+00 -5.953901335130238e+00 3.505865432203717e+00 4.930603242334683e+00 9.076080240993144e+03 + 42520 1.000008876939715e+00 -5.898927217088021e+00 -6.010130057315816e+00 4.260780457772888e+00 4.622236540600980e+00 9.248185890714038e+03 + 42540 1.063123074318301e+00 -5.956318013686573e+00 -6.021848691137871e+00 3.908992297987298e+00 4.532705007222385e+00 9.284232823520899e+03 + 42560 1.099138663220627e+00 -5.978102116296883e+00 -6.016567691465347e+00 3.830978738935476e+00 4.610103453789634e+00 9.267979196301307e+03 + 42580 1.065088104980157e+00 -5.905827321456213e+00 -6.053496952055626e+00 4.173146344428190e+00 4.325204473724882e+00 9.382000606709933e+03 + 42600 1.110726849030516e+00 -5.963482258473928e+00 -5.987768878407851e+00 3.872240737099930e+00 4.732783207097051e+00 9.179551944580515e+03 + 42620 1.016998793480920e+00 -5.822541413171299e+00 -6.071338753578992e+00 4.713017637532401e+00 4.284384807647430e+00 9.437335832875357e+03 + 42640 1.066244752559505e+00 -5.903895602348185e+00 -6.019248021202545e+00 4.247335254874660e+00 4.584963815083802e+00 9.276239700431386e+03 + 42660 1.081027945633833e+00 -5.942630700996448e+00 -6.031077445789465e+00 4.018714810026780e+00 4.510839914335754e+00 9.312685871615528e+03 + 42680 1.038063292140795e+00 -5.908983643964589e+00 -6.028002942312501e+00 4.211670447247101e+00 4.528243217956503e+00 9.303204358762274e+03 + 42700 1.082031923265650e+00 -6.014082045535000e+00 -5.982598932460260e+00 3.605764532970253e+00 4.786545440241409e+00 9.163706557541716e+03 + 42720 1.011859896809016e+00 -5.954250211172510e+00 -5.992452149923464e+00 3.976368186317063e+00 4.757006742278168e+00 9.193876066203089e+03 + 42740 1.027390251000291e+00 -6.016577719853741e+00 -5.997011822201324e+00 3.586777800312452e+00 4.699128212445505e+00 9.207875567660867e+03 + 42760 9.697578997095955e-01 -5.967398366347776e+00 -5.985271192173927e+00 3.942466793647224e+00 4.839838261942605e+00 9.171875532656077e+03 + 42780 9.633067978390820e-01 -5.978439089115927e+00 -5.983592336111089e+00 3.788002424318587e+00 4.758411682609971e+00 9.166727194400304e+03 + 42800 1.008996867402660e+00 -6.057265702962754e+00 -5.947484060659531e+00 3.382816984329076e+00 5.013200163088423e+00 9.056537845278130e+03 + 42820 1.018911092620731e+00 -6.075662191764621e+00 -6.000098374786870e+00 3.229967102013245e+00 4.663866232562378e+00 9.217375340561861e+03 + 42840 1.003105890662450e+00 -6.055117060275528e+00 -6.001047582897177e+00 3.408234328311061e+00 4.718709634642129e+00 9.220274730983625e+03 + 42860 9.672615644019225e-01 -6.004220101297392e+00 -6.001532311045519e+00 3.701219235402391e+00 4.716652942962838e+00 9.221740065193364e+03 + 42880 1.015683503043844e+00 -6.075310216958385e+00 -5.956781677650515e+00 3.298624148276561e+00 4.979233363214530e+00 9.084856608137448e+03 + 42900 1.009808615391457e+00 -6.062412694494778e+00 -5.976068028161517e+00 3.382221184095955e+00 4.878025619975473e+00 9.143717614111993e+03 + 42920 9.794227381019880e-01 -6.011515402940459e+00 -5.984747595585061e+00 3.683217858332802e+00 4.836922750472301e+00 9.170282117097307e+03 + 42940 1.052916159042598e+00 -6.112167943302873e+00 -5.969128496820080e+00 3.065382084793408e+00 4.886736721780418e+00 9.122539095326887e+03 + 42960 9.213120803418349e-01 -5.907659712131211e+00 -6.061781026341553e+00 4.117009997219257e+00 4.232021560827181e+00 9.407676871916061e+03 + 42980 9.417225819421294e-01 -5.926749276414959e+00 -6.058442559676235e+00 4.082244203920906e+00 4.326040991964937e+00 9.397322455333873e+03 + 43000 9.855884166263618e-01 -5.979520749275801e+00 -6.054085180366934e+00 3.782435190498028e+00 4.354274688364325e+00 9.383823894952056e+03 + 43020 9.857353844287875e-01 -5.966426902199837e+00 -6.043584696804329e+00 3.854368215945723e+00 4.411316219196603e+00 9.351322822945382e+03 + 43040 9.612942445836413e-01 -5.918388786996005e+00 -5.994720116888835e+00 4.151530525164696e+00 4.713224216684940e+00 9.200849917356105e+03 + 43060 1.039562901610203e+00 -6.019734400897181e+00 -5.954687362556194e+00 3.634412637742421e+00 5.007922797893023e+00 9.078468225207473e+03 + 43080 1.028872213108818e+00 -5.984616136580172e+00 -5.985206805469916e+00 3.734225381481463e+00 4.730833669310837e+00 9.171693531039129e+03 + 43100 9.714447703549064e-01 -5.878022917037397e+00 -6.027774578111709e+00 4.303063327019473e+00 4.443166115136115e+00 9.302511529595580e+03 + 43120 1.009363265081748e+00 -5.908735893642821e+00 -6.024151956299955e+00 4.175634104053409e+00 4.512897211698177e+00 9.291330841132378e+03 + 43140 1.011733658622763e+00 -5.887040898675773e+00 -6.028169448786929e+00 4.302339863077477e+00 4.491957888766673e+00 9.303717524590909e+03 + 43160 1.069889562765957e+00 -5.949567922296512e+00 -6.032960340836541e+00 3.952649898285121e+00 4.473797726093212e+00 9.318483084978807e+03 + 43180 1.054764798901262e+00 -5.903452160733655e+00 -6.013089788421342e+00 4.295986196545803e+00 4.666429971995053e+00 9.257255028094562e+03 + 43200 1.089718437014268e+00 -5.933969131944338e+00 -6.058016651890862e+00 3.988972761462446e+00 4.276672705637831e+00 9.395984590348708e+03 + 43220 1.099042537694096e+00 -5.933603085653615e+00 -6.044812251606356e+00 4.027365824086425e+00 4.388785583622972e+00 9.355128098225330e+03 + 43240 1.007905482674210e+00 -5.793162921171949e+00 -6.054843696653620e+00 4.868276490550345e+00 4.365664982765462e+00 9.386178830559598e+03 + 43260 1.120354232311159e+00 -5.965976458340519e+00 -6.049047936515929e+00 3.840967278123198e+00 4.363957995170294e+00 9.368225166893584e+03 + 43280 1.092929659085414e+00 -5.946500764579333e+00 -6.012742888412458e+00 3.958688845812282e+00 4.578316319826945e+00 9.256195765499962e+03 + 43300 9.765694001562393e-01 -5.809644083543629e+00 -6.039086324940750e+00 4.783774908858677e+00 4.466282052684305e+00 9.337398358450255e+03 + 43320 1.070229397839350e+00 -5.996067673363084e+00 -5.986490013944049e+00 3.733504175930114e+00 4.788500578452215e+00 9.175616139461574e+03 + 43340 1.007028008092816e+00 -5.954772546450101e+00 -5.986172412755456e+00 4.022984331027210e+00 4.842681439588256e+00 9.174645220745235e+03 + 43360 1.048487453247661e+00 -6.063787044919310e+00 -6.001423795738981e+00 3.335145777199364e+00 4.693245204674430e+00 9.221434412610854e+03 + 43380 9.924203262144021e-01 -6.018557912106583e+00 -5.992268880595923e+00 3.571682179778982e+00 4.722637866927673e+00 9.193335711314427e+03 + 43400 9.651766953882126e-01 -6.001937323645488e+00 -5.956824977154562e+00 3.750156503289786e+00 5.009198577953742e+00 9.084942091482477e+03 + 43420 9.788610416019633e-01 -6.035846476638532e+00 -5.989593853092829e+00 3.513150765765783e+00 4.778740487735577e+00 9.185126673935620e+03 + 43440 9.466708375159891e-01 -5.996693161448647e+00 -6.037953005938412e+00 3.692104096433871e+00 4.455183684433337e+00 9.333933826074028e+03 + 43460 1.006344577411656e+00 -6.091069321135167e+00 -5.952086699431738e+00 3.240196502523280e+00 5.038256223835571e+00 9.070570298816740e+03 + 43480 9.284671864802571e-01 -5.977216466226848e+00 -5.994955941822984e+00 3.806273845637731e+00 4.704411031589738e+00 9.201540473174287e+03 + 43500 9.658948653008970e-01 -6.030383517797573e+00 -6.002348192544491e+00 3.513158230343595e+00 4.674141406399356e+00 9.224256921645891e+03 + 43520 1.041033807531266e+00 -6.134278156520400e+00 -5.985261242065360e+00 3.033377133328295e+00 4.889055316422120e+00 9.171859536005655e+03 + 43540 9.780576303976380e-01 -6.032556472591097e+00 -5.988811637812262e+00 3.552872273415776e+00 4.804061884207149e+00 9.182736019074624e+03 + 43560 9.720885132391266e-01 -6.011957944334600e+00 -5.973775267045681e+00 3.689685999195297e+00 4.908936840938484e+00 9.136703832413843e+03 + 43580 9.581185088526128e-01 -5.974837162565745e+00 -6.000335544300717e+00 3.887444532255123e+00 4.741028878471090e+00 9.218075589733788e+03 + 43600 1.003208982563209e+00 -6.020713217299353e+00 -5.980020962141674e+00 3.565813277698870e+00 4.799474503920393e+00 9.155840524360072e+03 + 43620 1.043527526031882e+00 -6.057263023530650e+00 -5.949241374232569e+00 3.366202523352245e+00 4.986479549918029e+00 9.061880064299476e+03 + 43640 9.916185881538689e-01 -5.952811067569514e+00 -5.990981379873100e+00 3.956599927260279e+00 4.737420087176352e+00 9.189347686972453e+03 + 43660 1.005824587246789e+00 -5.941851412377247e+00 -6.022217049216708e+00 4.011251695548215e+00 4.549779772273923e+00 9.285384907293694e+03 + 43680 9.802469276624316e-01 -5.871508953760397e+00 -6.066604975921496e+00 4.383590383436105e+00 4.263318833175220e+00 9.422620003360018e+03 + 43700 1.064809773952180e+00 -5.970362271231091e+00 -5.999603255298528e+00 3.804641602580992e+00 4.636735347038105e+00 9.215822494598775e+03 + 43720 1.064757846544776e+00 -5.949161496153861e+00 -5.974213339129503e+00 3.964158039756744e+00 4.820306480630437e+00 9.138034631238736e+03 + 43740 9.405526236814010e-01 -5.747426783700574e+00 -6.056924909407880e+00 5.079914710424430e+00 4.302728577932912e+00 9.392590205644945e+03 + 43760 1.044001702577005e+00 -5.885668834235420e+00 -6.086100459012591e+00 4.234850119673330e+00 4.083940713509125e+00 9.483249291687025e+03 + 43780 1.163958302514048e+00 -6.059025509508929e+00 -5.965693810791828e+00 3.406828990168780e+00 4.942754047236075e+00 9.112049615852229e+03 + 43800 1.069578753618162e+00 -5.924309108727151e+00 -6.045664181960880e+00 4.046620251571325e+00 4.349780641426364e+00 9.357750784486801e+03 + 43820 9.620457549383710e-01 -5.781669773650566e+00 -6.070139940575446e+00 4.829145864380186e+00 4.172705525283460e+00 9.433582842283002e+03 + 43840 1.089844858159639e+00 -6.004982845300430e+00 -5.978569070317329e+00 3.661455074409039e+00 4.813127057880467e+00 9.151367200883018e+03 + 43860 1.006140403513889e+00 -5.936888316438480e+00 -6.005804277306826e+00 4.083025243613914e+00 4.687299131597399e+00 9.234868798007254e+03 + 43880 9.857843612052664e-01 -5.978124608208429e+00 -6.021489459527226e+00 3.872964419383463e+00 4.623956732421874e+00 9.283109277801921e+03 + 43900 1.022738189727191e+00 -6.093964597019404e+00 -5.981376735025766e+00 3.183331379486783e+00 4.829828305969592e+00 9.159965366697843e+03 + 43920 9.362141829411478e-01 -6.005394381027607e+00 -6.009460843950357e+00 3.668690125420588e+00 4.645339866035055e+00 9.246101499301567e+03 + 43940 9.685563455477814e-01 -6.073268383308911e+00 -5.946388715814756e+00 3.330981311556140e+00 5.059543996872662e+00 9.053201937517855e+03 + 43960 9.582888756498057e-01 -6.065096604206874e+00 -5.966937668651051e+00 3.404695912093398e+00 4.968339710101127e+00 9.115835140409694e+03 + 43980 9.948721632052105e-01 -6.121878076756802e+00 -6.003525923991470e+00 3.014139296121567e+00 4.693735672236558e+00 9.227881019462431e+03 + 44000 8.812858276267961e-01 -5.951208890310696e+00 -6.016288098644089e+00 4.032854663208322e+00 4.659159777983039e+00 9.267111095408794e+03 + 44020 9.663925747396327e-01 -6.068769760164962e+00 -5.982080585712612e+00 3.369519278046887e+00 4.867301932858670e+00 9.162128784886012e+03 + 44040 9.473539398936086e-01 -6.025455408593505e+00 -6.014184973843987e+00 3.562498704057485e+00 4.627215284483359e+00 9.260644668329374e+03 + 44060 9.645504427941417e-01 -6.033389883668572e+00 -6.026293562999927e+00 3.545802170324095e+00 4.586550341755529e+00 9.297936422098312e+03 + 44080 9.391670525371489e-01 -5.975219014311142e+00 -6.034115028793831e+00 3.837462510864262e+00 4.499272481575876e+00 9.322067825334711e+03 + 44100 9.858386589854530e-01 -6.019562695395479e+00 -6.013256327582117e+00 3.619229421012079e+00 4.655441560903668e+00 9.257792112720650e+03 + 44120 9.742495657799140e-01 -5.977262087216030e+00 -6.010749447821178e+00 3.874079463747125e+00 4.681789857000064e+00 9.250048926096901e+03 + 44140 9.894787686991104e-01 -5.973553283072056e+00 -5.997159716524340e+00 3.853865744955732e+00 4.718313950988950e+00 9.208309572573469e+03 + 44160 1.074636634353342e+00 -6.071948002018575e+00 -5.983400403547649e+00 3.334731425298190e+00 4.843185438414822e+00 9.166162975091784e+03 + 44180 1.070749408182293e+00 -6.040929769143416e+00 -5.999699840561383e+00 3.474843430876004e+00 4.711592061104864e+00 9.216131226961439e+03 + 44200 9.964267126522937e-01 -5.913569371791747e+00 -6.049811834586341e+00 4.162746807702041e+00 4.380421502882506e+00 9.370588034073644e+03 + 44220 1.051931151642445e+00 -5.982390447766749e+00 -6.038465168608285e+00 3.856617670713463e+00 4.534627946106357e+00 9.335492925427960e+03 + 44240 1.016642713952556e+00 -5.921726043395908e+00 -6.046212058135279e+00 4.091694410446729e+00 4.376876449664736e+00 9.359461358869670e+03 + 44260 9.845303047950128e-01 -5.871439821091347e+00 -6.075488456481746e+00 4.362297796998889e+00 4.190618956162946e+00 9.450246258460640e+03 + 44280 1.080285169510756e+00 -6.015978497011445e+00 -6.002740492067423e+00 3.648104032780537e+00 4.724118705743758e+00 9.225473262072785e+03 + 44300 1.057007101838462e+00 -5.988876935096083e+00 -5.982589574925147e+00 3.790251150491378e+00 4.826354145558731e+00 9.163663587278197e+03 + 44320 1.051795615660847e+00 -5.995887512553033e+00 -6.005913283423994e+00 3.707813404616350e+00 4.650243876792262e+00 9.235217173633077e+03 + 44340 1.067825004250726e+00 -6.042960720101517e+00 -5.968973666929173e+00 3.503431900439403e+00 4.928277009214479e+00 9.122035744020388e+03 + 44360 9.345108827749478e-01 -5.879135270754245e+00 -6.022071170464722e+00 4.312611003947030e+00 4.491850948550484e+00 9.284900409287862e+03 + 44380 9.580392495788697e-01 -5.952747997575289e+00 -5.981802754423112e+00 3.906417996530034e+00 4.739581086500737e+00 9.161262921427840e+03 + 44400 9.692811804215858e-01 -6.011680292817529e+00 -6.025265214116546e+00 3.575896413106912e+00 4.497889692748176e+00 9.294778858620964e+03 + 44420 9.862943249235504e-01 -6.083992945386333e+00 -5.999474733696709e+00 3.263519937757733e+00 4.748836588430541e+00 9.215447857950710e+03 + 44440 9.180248520107875e-01 -6.022330053161623e+00 -5.950145247484567e+00 3.570126974094315e+00 4.984623298854546e+00 9.064608422525127e+03 + 44460 9.075042992485742e-01 -6.029206980190381e+00 -5.936951873371823e+00 3.590159269252150e+00 5.119902369035948e+00 9.024483376685599e+03 + 44480 8.787914153045366e-01 -5.995562435694159e+00 -5.991862833610344e+00 3.724480174594780e+00 4.745723862271623e+00 9.192095630350386e+03 + 44500 9.412915603594164e-01 -6.089498574883559e+00 -5.972910825570800e+00 3.254101728303159e+00 4.923566626752922e+00 9.134077948399818e+03 + 44520 9.466368086470168e-01 -6.091498045231331e+00 -5.963513718378957e+00 3.208919803552279e+00 4.943825613849187e+00 9.105399999621393e+03 + 44540 9.753666376690198e-01 -6.124081091865690e+00 -5.997624275761602e+00 3.041843075196632e+00 4.767977682395355e+00 9.209741607866175e+03 + 44560 8.970753642493564e-01 -5.995132491193459e+00 -5.982459923854775e+00 3.793224498253251e+00 4.865992340985430e+00 9.163293611479568e+03 + 44580 9.666043113935887e-01 -6.082063922425714e+00 -6.018582361114783e+00 3.288857303793943e+00 4.653378252581176e+00 9.274178417064819e+03 + 44600 9.468609768333022e-01 -6.034507858740603e+00 -6.024091045916951e+00 3.493604374034903e+00 4.553419325264889e+00 9.291164512147703e+03 + 44620 9.958381614922389e-01 -6.089514192029075e+00 -5.975600424970306e+00 3.203384114631825e+00 4.857494593181758e+00 9.142311797430650e+03 + 44640 9.233974615673123e-01 -5.965890922835316e+00 -5.967924618866277e+00 3.864135944110019e+00 4.852458146786796e+00 9.118807111953023e+03 + 44660 9.898214237033504e-01 -6.046321825790858e+00 -5.927052039407196e+00 3.403571137162535e+00 5.088436707517312e+00 8.994474223419640e+03 + 44680 1.002724541416857e+00 -6.042798102702641e+00 -5.980703485180562e+00 3.493306014563168e+00 4.849862917485952e+00 9.157894205902281e+03 + 44700 1.017978788304509e+00 -6.043260438459244e+00 -5.976539277138976e+00 3.473955363401504e+00 4.857078596768835e+00 9.145161332342421e+03 + 44720 1.000917203147050e+00 -5.998676550566827e+00 -5.980365534164418e+00 3.664019636236721e+00 4.769164326039989e+00 9.156854297766882e+03 + 44740 1.034640999756745e+00 -6.030340068901805e+00 -5.991491589630547e+00 3.518541523901922e+00 4.741615503660223e+00 9.190946137304223e+03 + 44760 1.052876454679555e+00 -6.043168042149782e+00 -5.975606019365843e+00 3.453917029734435e+00 4.841868619749046e+00 9.142333488094706e+03 + 44780 1.062035385166670e+00 -6.047538733711193e+00 -5.965813528672947e+00 3.448941634711743e+00 4.918220408975960e+00 9.112380358249826e+03 + 44800 1.028427290644999e+00 -5.990256810801812e+00 -5.973176840462040e+00 3.719023581663994e+00 4.817099414471830e+00 9.134876028247245e+03 + 44820 1.021143156304588e+00 -5.972040408855851e+00 -6.024370424327754e+00 3.842167697432964e+00 4.541680650549579e+00 9.292005167600269e+03 + 44840 9.797831565956688e-01 -5.907718647100344e+00 -6.046522808885214e+00 4.154322892563817e+00 4.357287915720474e+00 9.360414851469333e+03 + 44860 1.047207738342289e+00 -6.008408722014805e+00 -6.004259783059863e+00 3.585669347864028e+00 4.609493197389527e+00 9.230126253655106e+03 + 44880 1.032885068059796e+00 -5.989309320781781e+00 -5.964012206992233e+00 3.756887859617767e+00 4.902147801713054e+00 9.106906953868765e+03 + 44900 9.742137276748365e-01 -5.906187235908261e+00 -6.004276113258017e+00 4.181737758243695e+00 4.618496245296682e+00 9.230168737628552e+03 + 44920 1.018927414665056e+00 -5.978199525017322e+00 -5.996888920725350e+00 3.874705745423971e+00 4.767388343093831e+00 9.207482985054476e+03 + 44940 1.015246911976009e+00 -5.982315768873700e+00 -5.984580411971868e+00 3.760613236060390e+00 4.747609304938325e+00 9.169756896038012e+03 + 44960 1.000256293987012e+00 -5.974341711315319e+00 -6.006303332250539e+00 3.791710004283465e+00 4.608181430828576e+00 9.236415713138043e+03 + 44980 9.688163352953100e-01 -5.950858863487516e+00 -6.039397263101238e+00 3.996091334914468e+00 4.487690143059422e+00 9.338383399861024e+03 + 45000 1.012490814208620e+00 -6.052480556378592e+00 -5.994549665325588e+00 3.380536226654416e+00 4.713184367857185e+00 9.200354806722326e+03 + 45020 9.384397688144034e-01 -5.990292865176651e+00 -5.966286855327747e+00 3.868108227539600e+00 5.005954451010030e+00 9.113840852834359e+03 + 45040 9.937071823285228e-01 -6.121849851099979e+00 -5.967411616358513e+00 3.073143990549654e+00 4.959952233674739e+00 9.117287546768328e+03 + 45060 9.241818290028179e-01 -6.060636907994091e+00 -5.989700191011669e+00 3.389288516265629e+00 4.796618122600176e+00 9.185453211267561e+03 + 45080 9.180556172202337e-01 -6.079246325312653e+00 -5.986428904232179e+00 3.315798041362240e+00 4.848770036655815e+00 9.175447308122473e+03 + 45100 9.146967023012197e-01 -6.090126142908416e+00 -6.009479573837732e+00 3.172785652362198e+00 4.635870731982302e+00 9.246195044017228e+03 + 45120 8.790110674681033e-01 -6.043310564796167e+00 -6.005907097981031e+00 3.454466998650526e+00 4.669243493270822e+00 9.235195073673145e+03 + 45140 8.990805665922766e-01 -6.069567187973347e+00 -6.016512685890336e+00 3.282302754978150e+00 4.586949916096462e+00 9.267822561500690e+03 + 45160 9.534327503543956e-01 -6.139046697256854e+00 -5.979630007921754e+00 2.947763008790535e+00 4.863158308605620e+00 9.154628169732496e+03 + 45180 9.386456963401496e-01 -6.098586737077786e+00 -5.982857897407317e+00 3.229892701862753e+00 4.894425608230649e+00 9.164497392388686e+03 + 45200 9.471612112431129e-01 -6.084200984017709e+00 -5.994972231933249e+00 3.287301289258857e+00 4.799666591832586e+00 9.201617726127912e+03 + 45220 9.545434700718303e-01 -6.065750783026310e+00 -5.945561520674956e+00 3.365368500067442e+00 5.055513843717156e+00 9.050689041048025e+03 + 45240 9.412207448961252e-01 -6.013312804178008e+00 -5.960951425553833e+00 3.641999549141528e+00 4.942666688098695e+00 9.097551293446386e+03 + 45260 9.440863842385909e-01 -5.983741830988457e+00 -6.014577454858655e+00 3.728155193885210e+00 4.551092269825158e+00 9.261860516371100e+03 + 45280 9.869658441355642e-01 -6.018859352098182e+00 -5.971963124362786e+00 3.606652905413969e+00 4.875938302238403e+00 9.131189071781915e+03 + 45300 9.878299611509158e-01 -5.999099001241337e+00 -6.034001511616307e+00 3.704682773476352e+00 4.504267157757252e+00 9.321711960510256e+03 + 45320 1.031415799924680e+00 -6.047823451453051e+00 -6.000569035341492e+00 3.438366307212902e+00 4.709708477122735e+00 9.218797438172247e+03 + 45340 1.010914675123077e+00 -6.005728016171169e+00 -5.993233454076048e+00 3.652816160420864e+00 4.724561869498284e+00 9.196297913249677e+03 + 45360 9.975160797140851e-01 -5.977272740356423e+00 -6.022890737260060e+00 3.781394172747194e+00 4.519448575164301e+00 9.287442029450287e+03 + 45380 1.082728471838291e+00 -6.097563413507556e+00 -5.965368341916173e+00 3.166528089933184e+00 4.925612648132118e+00 9.111057729508904e+03 + 45400 9.755272569129608e-01 -5.934311682427934e+00 -5.967657443750031e+00 4.104115285458045e+00 4.912638763706675e+00 9.118025490303109e+03 + 45420 9.391839371617032e-01 -5.876842294057242e+00 -6.013118521249432e+00 4.314603746123105e+00 4.532084560907554e+00 9.257360199842173e+03 + 45440 1.033320989479615e+00 -6.011232704797253e+00 -6.003901973462219e+00 3.638868029890878e+00 4.680962223643649e+00 9.229027972481143e+03 + 45460 9.563045951833427e-01 -5.894000746230800e+00 -6.023031399095570e+00 4.352318628444947e+00 4.611404652266436e+00 9.287879129089550e+03 + 45480 9.792533089199749e-01 -5.926414000856242e+00 -6.033206556373838e+00 4.110054899142852e+00 4.496835519266262e+00 9.319270458012255e+03 + 45500 1.006767306387336e+00 -5.967567606658127e+00 -5.997453025343203e+00 3.901932168028996e+00 4.730325469185693e+00 9.209221919057627e+03 + 45520 1.045431379468022e+00 -6.026236867411924e+00 -5.978857168032363e+00 3.592884867991921e+00 4.864946433814145e+00 9.152263437509448e+03 + 45540 1.063508748461823e+00 -6.057348118821127e+00 -6.006286427335123e+00 3.399541534722139e+00 4.692745669005996e+00 9.236359969647974e+03 + 45560 1.051730673850795e+00 -6.049379654135849e+00 -5.996302908938295e+00 3.425646528686637e+00 4.730421413210764e+00 9.205709139730800e+03 + 45580 1.012158087849991e+00 -6.005367775858308e+00 -5.979639567766746e+00 3.646690702777690e+00 4.794426055066771e+00 9.154644193466054e+03 + 45600 9.641342206059555e-01 -5.953872165778787e+00 -6.007493941899318e+00 3.980266536469649e+00 4.672362000042526e+00 9.240048323655557e+03 + 45620 9.078641938389592e-01 -5.895874323974700e+00 -6.037757267559245e+00 4.211121801379113e+00 4.396407983002102e+00 9.333311948713354e+03 + 45640 1.029236124369201e+00 -6.106627490681957e+00 -6.001490368124148e+00 3.125294852778225e+00 4.729008480422292e+00 9.221640486755805e+03 + 45660 9.594873779953137e-01 -6.040940636588982e+00 -5.997509947113625e+00 3.489167625051121e+00 4.738553364896093e+00 9.209410790955992e+03 + 45680 9.229579082320878e-01 -6.020188191222548e+00 -5.995453390887203e+00 3.605267449957891e+00 4.747298501181426e+00 9.203088576243485e+03 + 45700 9.419180263000987e-01 -6.075607732277621e+00 -5.983335401542961e+00 3.335818095320405e+00 4.865660097495859e+00 9.165940527168745e+03 + 45720 9.883207622807989e-01 -6.163588820060426e+00 -5.957848250433922e+00 2.885443120645865e+00 5.066837309691505e+00 9.088109346751047e+03 + 45740 9.671820414472504e-01 -6.145297972705142e+00 -5.984417749810165e+00 2.921493552356378e+00 4.845292688353373e+00 9.169283233715141e+03 + 45760 9.256196733108053e-01 -6.089818405445142e+00 -5.969834475767723e+00 3.267656999285820e+00 4.956623290946668e+00 9.124664716577508e+03 + 45780 9.118956976146638e-01 -6.066981782586877e+00 -5.947557274097925e+00 3.354570381595945e+00 5.040324390222467e+00 9.056759679772733e+03 + 45800 9.457176407747767e-01 -6.104275191926196e+00 -5.983711252844587e+00 3.119069080228171e+00 4.811365875644039e+00 9.167111425202595e+03 + 45820 8.672888030658787e-01 -5.964675298039786e+00 -6.018966085109875e+00 3.881123883320145e+00 4.569377782491546e+00 9.275364643142202e+03 + 45840 9.319206186037998e-01 -6.026685518017505e+00 -5.969289965256503e+00 3.548362561726094e+00 4.877936707612852e+00 9.122994827038228e+03 + 45860 9.999444371690510e-01 -6.083415173254644e+00 -5.995530204679047e+00 3.260144207489703e+00 4.764793297205715e+00 9.203341744709260e+03 + 45880 9.873639001703219e-01 -6.020957341017670e+00 -6.032501518188918e+00 3.552025963425794e+00 4.485737511652842e+00 9.317102841770158e+03 + 45900 9.526490890931942e-01 -5.936037978399916e+00 -6.025237821973733e+00 4.028218817954316e+00 4.516019512522271e+00 9.294697219705924e+03 + 45920 1.004520561569255e+00 -5.986284490530764e+00 -6.002307637550048e+00 3.774801545209757e+00 4.682794155451035e+00 9.224144274326036e+03 + 45940 9.762030993382927e-01 -5.928795711847954e+00 -5.972617575583434e+00 4.087082334600895e+00 4.835450411620275e+00 9.133167602222009e+03 + 45960 9.540690831396690e-01 -5.884338191508696e+00 -6.022403118576884e+00 4.347023285159613e+00 4.554233108455665e+00 9.285919407591409e+03 + 45980 1.062739777398188e+00 -6.037089448320698e+00 -6.017177498227081e+00 3.502757512089262e+00 4.617095010891124e+00 9.269858974749017e+03 + 46000 1.020963022017415e+00 -5.972748834570328e+00 -6.040429840506185e+00 3.862944273255102e+00 4.474309463569588e+00 9.341575830699074e+03 + 46020 1.027963784569119e+00 -5.985740554848860e+00 -6.010283498574060e+00 3.755359224508638e+00 4.614429843630278e+00 9.248646775011934e+03 + 46040 1.048956103242619e+00 -6.021995274815933e+00 -5.989392378783410e+00 3.609845618287060e+00 4.797056492587661e+00 9.184503167807448e+03 + 46060 1.005356645796176e+00 -5.964069636436132e+00 -6.000928314473772e+00 3.919737515338084e+00 4.708089282183961e+00 9.219875522840550e+03 + 46080 9.323918296339031e-01 -5.862882305775512e+00 -6.009504758880304e+00 4.464767627691593e+00 4.622838812212589e+00 9.246215929008975e+03 + 46100 9.973349805006587e-01 -5.965407420334003e+00 -5.998639421608392e+00 3.886520345569196e+00 4.695697051616074e+00 9.212868862201372e+03 + 46120 1.068157054576131e+00 -6.078236209236966e+00 -6.003683008484436e+00 3.270378667565696e+00 4.698474683357255e+00 9.228347903997574e+03 + 46140 1.093878429736254e+00 -6.128084809187810e+00 -5.967000226911114e+00 3.004067770831234e+00 4.929040370022566e+00 9.116021686894592e+03 + 46160 9.406423084938089e-01 -5.914781159740396e+00 -6.040601005182938e+00 4.159330502393846e+00 4.436853479304611e+00 9.342113268594985e+03 + 46180 9.909501269202274e-01 -6.006352308262564e+00 -5.979203285519281e+00 3.692856304650706e+00 4.848750194540333e+00 9.153324715002755e+03 + 46200 9.763754215758450e-01 -6.003016644003488e+00 -5.966022954520849e+00 3.681584856072269e+00 4.894008345836527e+00 9.113019647935504e+03 + 46220 9.871506804335261e-01 -6.037559822916059e+00 -5.982228187457708e+00 3.436322200531989e+00 4.754045013876754e+00 9.162592328479370e+03 + 46240 1.026124339759903e+00 -6.113076825044221e+00 -5.990444262352725e+00 3.102815577564309e+00 4.806990729866623e+00 9.187751278846728e+03 + 46260 9.795726000966996e-01 -6.065037040581744e+00 -5.990747444372520e+00 3.346693606725991e+00 4.773275964437214e+00 9.188665064374978e+03 + 46280 9.732041528505415e-01 -6.080400196326169e+00 -5.994575508667040e+00 3.237876011692217e+00 4.730694649558426e+00 9.200408824626300e+03 + 46300 9.535864791615533e-01 -6.076032081169933e+00 -5.966233780580316e+00 3.243825685060262e+00 4.874304518277945e+00 9.113697206338329e+03 + 46320 9.831477007789183e-01 -6.143027151958571e+00 -5.987764004403665e+00 2.858425824191525e+00 4.749970844346224e+00 9.179543857571201e+03 + 46340 8.840794537074395e-01 -6.017162732002744e+00 -6.011200815302601e+00 3.566731516670454e+00 4.600965764966300e+00 9.251465951247434e+03 + 46360 9.215831641171551e-01 -6.087780677171402e+00 -5.973639562928353e+00 3.189925088598067e+00 4.845341029862000e+00 9.136300636941236e+03 + 46380 9.413285646055011e-01 -6.125852613752862e+00 -5.955657122401188e+00 3.034813958227390e+00 5.012102807235870e+00 9.081446363294686e+03 + 46400 9.467807511163978e-01 -6.137087727582617e+00 -5.945042294976322e+00 2.980339020428794e+00 5.083093613388787e+00 9.049128469448957e+03 + 46420 9.041692148956698e-01 -6.069464709411212e+00 -5.965744862335880e+00 3.318095838629630e+00 4.913671251130653e+00 9.112174294181776e+03 + 46440 9.034911155704513e-01 -6.050697040588094e+00 -5.953959287943753e+00 3.432792336058834e+00 4.988275481861482e+00 9.076264538618645e+03 + 46460 9.953827332168000e-01 -6.148896708649717e+00 -5.995934810765988e+00 2.922815800807355e+00 4.801146689232931e+00 9.204591302435196e+03 + 46480 9.343110376999673e-01 -6.009995390809857e+00 -6.027668286870279e+00 3.627808934827486e+00 4.526328430776720e+00 9.302183219583019e+03 + 46500 1.015940851905577e+00 -6.082639199772971e+00 -6.005172293184331e+00 3.268806740112848e+00 4.713633705709871e+00 9.232946175046844e+03 + 46520 1.015648480414979e+00 -6.038688530112188e+00 -6.004531990356327e+00 3.506547715368419e+00 4.702679852354018e+00 9.230983955130196e+03 + 46540 9.811057273684646e-01 -5.954752608204160e+00 -5.984956557308050e+00 3.966178048633707e+00 4.792742298833151e+00 9.170942977065766e+03 + 46560 1.047135335624176e+00 -6.028647046293909e+00 -6.020569577027071e+00 3.544252664715519e+00 4.590634743230033e+00 9.280279880335143e+03 + 46580 1.045014339727521e+00 -6.009616662029691e+00 -5.966742692746122e+00 3.680737863739039e+00 4.926926830090594e+00 9.115237599151318e+03 + 46600 1.006401248211502e+00 -5.942494787424208e+00 -5.989417904250526e+00 4.029918617473870e+00 4.760478819328289e+00 9.184551857896256e+03 + 46620 1.082801420777409e+00 -6.046729960712536e+00 -5.978367111575920e+00 3.419005142280340e+00 4.811555201139500e+00 9.150746983682458e+03 + 46640 1.046440370234582e+00 -5.989150303563857e+00 -5.983135197551691e+00 3.778418870748603e+00 4.812958540305108e+00 9.165358084843499e+03 + 46660 9.977993408414125e-01 -5.916217559683911e+00 -5.975323403247982e+00 4.240328303286638e+00 4.900933402942011e+00 9.141414814707767e+03 + 46680 1.040231228089488e+00 -5.979337037411538e+00 -5.981770410078218e+00 3.828092246301369e+00 4.814119443886090e+00 9.161181330048090e+03 + 46700 1.007139961581707e+00 -5.932853574630323e+00 -6.002666311257356e+00 4.077866955468509e+00 4.676991418270009e+00 9.225253569344341e+03 + 46720 9.866841240158226e-01 -5.910072038234613e+00 -5.991904834001801e+00 4.137927202599899e+00 4.668030625720489e+00 9.192221374563449e+03 + 46740 1.024419933595225e+00 -5.976636776749624e+00 -5.987727326644626e+00 3.828612212800123e+00 4.764928559045971e+00 9.179417284881796e+03 + 46760 1.022621456720817e+00 -5.988650543676046e+00 -5.975043229984429e+00 3.760890125403921e+00 4.839025426346177e+00 9.140593528661237e+03 + 46780 1.013342617052789e+00 -5.993967388018976e+00 -5.998254504249125e+00 3.689151739729316e+00 4.664534454906701e+00 9.211649173226680e+03 + 46800 9.406972013630015e-01 -5.910732258738662e+00 -5.957608704686020e+00 4.269900103361152e+00 5.000728296624859e+00 9.087304988841794e+03 + 46820 9.253991189727901e-01 -5.911817463941821e+00 -5.997474068725601e+00 4.135801527985884e+00 4.643948048000671e+00 9.209189207540836e+03 + 46840 9.495499289997092e-01 -5.971583739505072e+00 -5.962008792206369e+00 3.848381341847178e+00 4.903362170954635e+00 9.100769085574173e+03 + 46860 9.835402830064687e-01 -6.045193549429879e+00 -5.979914763813802e+00 3.433950840834594e+00 4.808791729701530e+00 9.155497486859567e+03 + 46880 1.006480657200789e+00 -6.105291528359811e+00 -5.983883379966617e+00 3.135387995339076e+00 4.832532371263041e+00 9.167642756992263e+03 + 46900 1.005989799082645e+00 -6.130553249582472e+00 -5.969959870887336e+00 3.001229962906092e+00 4.923381995118600e+00 9.125076082263080e+03 + 46920 9.354942900297968e-01 -6.051369676001597e+00 -5.989340727694563e+00 3.409708369150042e+00 4.765888189277762e+00 9.184350499019432e+03 + 46940 9.571759278278926e-01 -6.107399849658945e+00 -5.944734646744908e+00 3.184792080378379e+00 5.118840847869578e+00 9.048166831767099e+03 + 46960 8.884410813723453e-01 -6.023337042973017e+00 -5.994088395308106e+00 3.545063365142646e+00 4.713013626248165e+00 9.198914290974157e+03 + 46980 9.994209576959663e-01 -6.200916551139206e+00 -5.942383555079437e+00 2.623733078463889e+00 5.108269549690923e+00 9.041034989969448e+03 + 47000 9.048924344896305e-01 -6.068198848036551e+00 -5.982710947087128e+00 3.333789602119106e+00 4.824674358580615e+00 9.164060064489571e+03 + 47020 9.022082676976292e-01 -6.064315326273661e+00 -6.004078382003197e+00 3.300439011585763e+00 4.646328867223768e+00 9.229587873110451e+03 + 47040 9.094386568524275e-01 -6.065104956806762e+00 -5.986712481817070e+00 3.379280771807575e+00 4.829422494394683e+00 9.176292255497148e+03 + 47060 9.372806943697500e-01 -6.082224632527324e+00 -5.958533026988959e+00 3.219996297905577e+00 4.930252638120964e+00 9.090205987137957e+03 + 47080 1.005825018442195e+00 -6.139227153474851e+00 -5.965559823927262e+00 2.968175348598013e+00 4.965400029792663e+00 9.111632140354877e+03 + 47100 9.602690126834865e-01 -6.016470349030674e+00 -5.998943226787715e+00 3.588140037087828e+00 4.688783485320300e+00 9.213811092607086e+03 + 47120 1.077369802040138e+00 -6.136313415437977e+00 -5.994754531609552e+00 2.965686640562286e+00 4.778539657671575e+00 9.200974089976511e+03 + 47140 1.022360364285776e+00 -6.014484514312829e+00 -6.038747628258127e+00 3.622180266487102e+00 4.482857711508451e+00 9.336402481985124e+03 + 47160 9.750054539400601e-01 -5.918939839122796e+00 -5.997986344740263e+00 4.145960521433231e+00 4.692063253770526e+00 9.210844082905645e+03 + 47180 9.770425299249131e-01 -5.902240173505994e+00 -6.016485832554844e+00 4.171120175053873e+00 4.515103921336775e+00 9.267716727361012e+03 + 47200 1.042880643382362e+00 -5.984786437799109e+00 -6.019214878265588e+00 3.776056148970479e+00 4.578362716028010e+00 9.276118861080357e+03 + 47220 1.049966726563626e+00 -5.985731268311301e+00 -5.994940330978475e+00 3.805394409305115e+00 4.752514546372356e+00 9.201521299452243e+03 + 47240 1.046729562768386e+00 -5.975784707670146e+00 -6.012150665523056e+00 3.829236461148441e+00 4.620417503543243e+00 9.254383057825149e+03 + 47260 9.885622821095597e-01 -5.888166610602957e+00 -6.022276938579101e+00 4.382975609395660e+00 4.612893352650455e+00 9.285551479891023e+03 + 47280 1.007395386992249e+00 -5.920363874256920e+00 -6.033090773719228e+00 4.104835112712472e+00 4.457539811568588e+00 9.318904927161173e+03 + 47300 1.105250273399454e+00 -6.072108888440662e+00 -6.028826513677112e+00 3.309981251301874e+00 4.558515345120023e+00 9.305730392774934e+03 + 47320 1.019643868359667e+00 -5.958694198494824e+00 -6.042734853322168e+00 3.895753142021983e+00 4.413178696754066e+00 9.348703379795275e+03 + 47340 1.018901844016925e+00 -5.977439389102992e+00 -5.979694276889362e+00 3.828839934908886e+00 4.815892020296798e+00 9.154821670475381e+03 + 47360 1.002497852038758e+00 -5.975169378143097e+00 -6.023041299554956e+00 3.813313063089951e+00 4.538425082187155e+00 9.287917118401121e+03 + 47380 9.969815058293452e-01 -5.994275500505179e+00 -6.024247417506624e+00 3.689792532491452e+00 4.517689146929989e+00 9.291647317097661e+03 + 47400 9.795687999842789e-01 -5.998353769878118e+00 -5.990710330428561e+00 3.749393741391908e+00 4.793283553529696e+00 9.188536709405673e+03 + 47420 9.769866577145389e-01 -6.018717153286136e+00 -5.990835138627098e+00 3.574225467214259e+00 4.734328310114280e+00 9.188936979984312e+03 + 47440 1.063172253302256e+00 -6.172196493171925e+00 -5.974919964633603e+00 2.797443558861278e+00 4.930235914172451e+00 9.140247735584557e+03 + 47460 9.903920403112663e-01 -6.089655469505608e+00 -5.997173219407301e+00 3.181145446837796e+00 4.712192838484224e+00 9.208377972953915e+03 + 47480 9.782945869619735e-01 -6.093812767214379e+00 -5.965551183264351e+00 3.174681180970379e+00 4.911179044427406e+00 9.111584480296448e+03 + 47500 9.286992735093607e-01 -6.035056952410013e+00 -5.943302157798513e+00 3.503543397912994e+00 5.030413627580801e+00 9.043803750429672e+03 + 47520 9.739906559981634e-01 -6.107913650382809e+00 -5.961320597142355e+00 3.164515405292881e+00 5.006275402201242e+00 9.098699659012667e+03 + 47540 9.904432276151047e-01 -6.131762705598763e+00 -6.013410340247582e+00 2.970483781792212e+00 4.650081378608037e+00 9.258265853956960e+03 + 47560 9.261446561691918e-01 -6.033043256406757e+00 -5.983615441243993e+00 3.557447079894920e+00 4.841269243489194e+00 9.166806477704189e+03 + 47580 9.289477494024367e-01 -6.024625695380096e+00 -5.984669464417010e+00 3.596078142013695e+00 4.825513003410498e+00 9.170037175937663e+03 + 47600 1.000366366594155e+00 -6.107120322597730e+00 -5.959694507804146e+00 3.156739374236671e+00 5.003281216852535e+00 9.093735465981497e+03 + 47620 1.002796547002488e+00 -6.071494863645189e+00 -5.952591463865019e+00 3.335648553216884e+00 5.018410274996267e+00 9.072089968133110e+03 + 47640 9.373775504373838e-01 -5.914263483875070e+00 -6.013808689475193e+00 4.198110816315148e+00 4.626506841188462e+00 9.259448048776127e+03 + 47660 1.007748431883514e+00 -5.951334135508383e+00 -6.045264536716248e+00 3.870123486943938e+00 4.330760587525770e+00 9.356526032886404e+03 + 47680 1.022005068055484e+00 -5.918122679902829e+00 -6.030472401126179e+00 4.144301126603910e+00 4.499171641276268e+00 9.310803143206054e+03 + 47700 1.067105217600717e+00 -5.957266617592960e+00 -6.019871478304047e+00 3.889974613457970e+00 4.530487815184018e+00 9.278152146674389e+03 + 47720 1.054149277701265e+00 -5.926651415342807e+00 -6.036910140895960e+00 4.078250512337079e+00 4.445127847728236e+00 9.330610861090601e+03 + 47740 1.058220972448187e+00 -5.928699046505205e+00 -6.027203243087479e+00 4.047226099020934e+00 4.481599758770361e+00 9.300727299279804e+03 + 47760 9.963685687881559e-01 -5.839878499833597e+00 -6.094957752583306e+00 4.496651858965694e+00 4.031947316290077e+00 9.510854025027411e+03 + 47780 1.050761807344330e+00 -5.931915254025816e+00 -6.044607444086711e+00 4.060071772051559e+00 4.412975777661846e+00 9.354509743271803e+03 + 47800 9.877276688890052e-01 -5.859950378180331e+00 -6.046912537721312e+00 4.380960340616179e+00 4.307394688231187e+00 9.361629033539761e+03 + 47820 1.069685900751422e+00 -6.005214606730344e+00 -5.999545340657246e+00 3.673867325278940e+00 4.706421128386760e+00 9.215591986955926e+03 + 47840 9.882713189805953e-01 -5.910171544416615e+00 -6.017529900525689e+00 4.179678530860320e+00 4.563210236430101e+00 9.270900921354114e+03 + 47860 9.854241588984639e-01 -5.932095107778496e+00 -6.010433117871860e+00 4.070586299076745e+00 4.620757322352767e+00 9.249102124739755e+03 + 47880 1.005352433022166e+00 -5.989648877612485e+00 -6.006252992100376e+00 3.778773945933656e+00 4.683430551065770e+00 9.236253319586222e+03 + 47900 1.020500891272819e+00 -6.039576917173575e+00 -6.008712618956436e+00 3.489166766846865e+00 4.666394343444388e+00 9.243806099825093e+03 + 47920 9.789809318956370e-01 -6.001456026827020e+00 -6.032199767323288e+00 3.682014688839706e+00 4.505479373331667e+00 9.316165977747123e+03 + 47940 9.613373996530664e-01 -5.997282214069291e+00 -6.049028852447599e+00 3.673248158307167e+00 4.376110952972507e+00 9.368184202133260e+03 + 47960 9.247583417472751e-01 -5.963388635293611e+00 -6.023001713506212e+00 3.863641367986834e+00 4.521333847796037e+00 9.287785287729701e+03 + 47980 9.377691817699972e-01 -5.997439821192891e+00 -5.948722285391337e+00 3.711680087008733e+00 4.991423716595561e+00 9.060307898080857e+03 + 48000 9.789455327289253e-01 -6.066492609161951e+00 -6.005033992573453e+00 3.273858586483679e+00 4.626763473625015e+00 9.232512814284797e+03 + 48020 9.773074730916494e-01 -6.068637679546150e+00 -5.967640908594759e+00 3.334626969261021e+00 4.914566057263700e+00 9.117973237519871e+03 + 48040 9.862237022550798e-01 -6.081036250597179e+00 -5.967153463017617e+00 3.285099611454668e+00 4.939032201040936e+00 9.116490844501639e+03 + 48060 9.521682271228036e-01 -6.022418473374762e+00 -6.029612625622993e+00 3.545597093178410e+00 4.504287157677606e+00 9.308187555094994e+03 + 48080 9.671558942355183e-01 -6.034799232417035e+00 -5.987890160853269e+00 3.528729157335678e+00 4.798088305410189e+00 9.179915250772046e+03 + 48100 9.313570624955759e-01 -5.964967316259814e+00 -6.033863798240884e+00 3.862257494132238e+00 4.466643232900800e+00 9.321294848784506e+03 + 48120 9.711197845805525e-01 -6.000656197293629e+00 -6.026230309756020e+00 3.691437160374510e+00 4.544586649034346e+00 9.297734511157796e+03 + 48140 9.668363590740046e-01 -5.964171539616084e+00 -5.999510842744844e+00 3.912156074013493e+00 4.709232326708670e+00 9.215549953339205e+03 + 48160 1.071114434870050e+00 -6.077241187353293e+00 -6.005316453788482e+00 3.266410461203798e+00 4.679413411649489e+00 9.233383873798797e+03 + 48180 1.038998733096230e+00 -5.977992802359612e+00 -6.043990537501496e+00 3.804294911617921e+00 4.425325703316719e+00 9.352566322152876e+03 + 48200 1.060923315758901e+00 -5.965021391475852e+00 -5.967966597515814e+00 3.901317254262877e+00 4.884405425412250e+00 9.118964754390076e+03 + 48220 1.069960773950398e+00 -5.941561905899140e+00 -5.956644040686034e+00 4.038453460855237e+00 4.951849508956075e+00 9.084401105198032e+03 + 48240 1.089184720986777e+00 -5.942789461072636e+00 -5.986566220322276e+00 3.974478341004466e+00 4.723105414961427e+00 9.175807752151057e+03 + 48260 1.056375559350045e+00 -5.878942594114434e+00 -5.995240766414669e+00 4.292109718432346e+00 4.624307616000401e+00 9.202371278779530e+03 + 48280 1.073629990481018e+00 -5.898929202008398e+00 -5.984404649360690e+00 4.263341138775310e+00 4.772527892795722e+00 9.169207601889122e+03 + 48300 1.013068830404988e+00 -5.810836281739135e+00 -6.048262894245259e+00 4.693273177330182e+00 4.329932826670482e+00 9.365789340659814e+03 + 48320 1.099975564998793e+00 -5.951300108693943e+00 -6.039553134129390e+00 3.923501509092767e+00 4.416738979930877e+00 9.338868367032142e+03 + 48340 1.125103392283386e+00 -6.006739901393161e+00 -5.987557397212748e+00 3.654578101764347e+00 4.764727009251207e+00 9.178916426407364e+03 + 48360 1.070012527721169e+00 -5.947172969228235e+00 -5.998721205603058e+00 3.955741698146908e+00 4.659743747818878e+00 9.213137371648090e+03 + 48380 1.089613057432444e+00 -5.999793479150708e+00 -5.978547201459069e+00 3.672101295741073e+00 4.794100710097313e+00 9.151299144000877e+03 + 48400 1.015937857496142e+00 -5.912417878270271e+00 -6.020846303400292e+00 4.136896224268228e+00 4.514283427927088e+00 9.281151604960432e+03 + 48420 1.038285722576586e+00 -5.967534443997772e+00 -6.049617009569692e+00 3.795452013338419e+00 4.324121219588486e+00 9.370014163566349e+03 + 48440 1.042898313739251e+00 -5.996958585805450e+00 -6.022352029645937e+00 3.661846747853254e+00 4.516033663698439e+00 9.285799237935433e+03 + 48460 9.991874927672434e-01 -5.953623946423537e+00 -6.028600705265013e+00 3.909496318394155e+00 4.478968166510467e+00 9.305033643477473e+03 + 48480 1.013759406732738e+00 -5.996684139950926e+00 -5.998591000076900e+00 3.706379280292615e+00 4.695429794363616e+00 9.212700937211202e+03 + 48500 9.634863855410132e-01 -5.941402823303851e+00 -5.978228868386131e+00 4.015692717708855e+00 4.804231868034345e+00 9.150307372286896e+03 + 48520 9.763192877657830e-01 -5.973825935296019e+00 -5.988451033393000e+00 3.821595517142257e+00 4.737615940642780e+00 9.181618805808946e+03 + 48540 1.030211458987731e+00 -6.065065768097087e+00 -5.982258682263177e+00 3.336767711859940e+00 4.812258813073367e+00 9.162661579073230e+03 + 48560 9.558054866338821e-01 -5.962403959264303e+00 -6.015963094398620e+00 3.882904870926470e+00 4.575360028735844e+00 9.266105313479649e+03 + 48580 1.022165679007984e+00 -6.067252532145616e+00 -5.995213171545805e+00 3.351901486258240e+00 4.765562642877384e+00 9.202346708176998e+03 + 48600 1.010074616943558e+00 -6.056722103528778e+00 -5.985168810607775e+00 3.373826961927055e+00 4.784697042715746e+00 9.171585656849114e+03 + 48620 9.171132021579763e-01 -5.923541785139012e+00 -6.043307867488946e+00 4.100571731350541e+00 4.412856352755871e+00 9.350472427993327e+03 + 48640 1.022916220408237e+00 -6.084563563191187e+00 -5.979124232836077e+00 3.232791344132866e+00 4.838240295715547e+00 9.153093884471213e+03 + 48660 9.571871237588693e-01 -5.989369931799873e+00 -6.009255754130242e+00 3.757419929729714e+00 4.643232460587670e+00 9.245461515601026e+03 + 48680 9.724661029238494e-01 -6.011514939497109e+00 -5.991831536592228e+00 3.641905439859587e+00 4.754930585336171e+00 9.192013100757964e+03 + 48700 9.832200668013626e-01 -6.022177523275072e+00 -5.984023204755506e+00 3.599483006666567e+00 4.818571007967622e+00 9.168081429394608e+03 + 48720 9.829823181573463e-01 -6.012288804264655e+00 -5.994706405473179e+00 3.667934902300130e+00 4.768895757028202e+00 9.200800961835039e+03 + 48740 9.673730344858398e-01 -5.975421882973269e+00 -5.999272494191190e+00 3.832366521242892e+00 4.695412620759432e+00 9.214818962899251e+03 + 48760 1.049595832598912e+00 -6.075105035723462e+00 -5.986520388296342e+00 3.314534248626944e+00 4.823201002583350e+00 9.175720587619715e+03 + 48780 1.048813643720626e+00 -6.039615767399648e+00 -5.995198263839571e+00 3.507502211794955e+00 4.762554390823380e+00 9.202304014861400e+03 + 48800 1.051803135445691e+00 -6.005636812417128e+00 -5.977089407054936e+00 3.693085267478820e+00 4.857008886765231e+00 9.146866288073366e+03 + 48820 1.063966977263228e+00 -5.984605613442156e+00 -5.978469096541673e+00 3.744147423494073e+00 4.779384253159565e+00 9.151083818378125e+03 + 48840 1.032548995308832e+00 -5.902720619877512e+00 -6.007012055484598e+00 4.166741564842092e+00 4.567884002538699e+00 9.238593011431445e+03 + 48860 1.062559858448828e+00 -5.920200978210653e+00 -6.004231471297702e+00 4.110120534187006e+00 4.627604439204391e+00 9.230031853164099e+03 + 48880 1.087618885725373e+00 -5.939978582773488e+00 -5.968076697908153e+00 4.043902730516084e+00 4.882559005243579e+00 9.119264172280604e+03 + 48900 1.060211188984174e+00 -5.887528602500774e+00 -5.991144520587442e+00 4.310625561926997e+00 4.715646925761849e+00 9.189782608448626e+03 + 48920 1.055254098239748e+00 -5.876695572825818e+00 -5.947971501263234e+00 4.340995135489948e+00 4.931717724488022e+00 9.058014771331938e+03 + 48940 1.020686418594559e+00 -5.827054744678257e+00 -6.067134468379332e+00 4.604231650397571e+00 4.225656724688830e+00 9.424235627463440e+03 + 48960 1.144507285262668e+00 -6.022558312043504e+00 -6.007867634128017e+00 3.573708856049284e+00 4.658065002015072e+00 9.241222091327973e+03 + 48980 1.096970107843541e+00 -5.978244748053082e+00 -6.004087754475483e+00 3.824973787915995e+00 4.676579245846248e+00 9.229598648488385e+03 + 49000 1.012527068741598e+00 -5.890040687041521e+00 -6.011035410540455e+00 4.294152398437221e+00 4.599381972233391e+00 9.250933478953641e+03 + 49020 9.935929650225196e-01 -5.900824054034792e+00 -6.017412105621597e+00 4.217414927559551e+00 4.547948293405443e+00 9.270518034458953e+03 + 49040 1.041997049238116e+00 -6.009241948718646e+00 -5.995474805654112e+00 3.674636426139629e+00 4.753689492074688e+00 9.203167820420093e+03 + 49060 9.914783642958981e-01 -5.971099633619185e+00 -6.040974920822455e+00 3.829744352537540e+00 4.428509640250617e+00 9.343250981602183e+03 + 49080 1.024074201686398e+00 -6.048984311124375e+00 -5.989376817327453e+00 3.399231639505648e+00 4.741507093117428e+00 9.184478038877180e+03 + 49100 9.758479521277481e-01 -5.997507038862329e+00 -6.028163850709108e+00 3.653100391793332e+00 4.477064234042830e+00 9.303719428393080e+03 + 49120 9.938348704148550e-01 -6.038942739851130e+00 -6.002001194919662e+00 3.523546173408057e+00 4.735670241090151e+00 9.223149892728452e+03 + 49140 9.481433008944662e-01 -5.979225752319042e+00 -6.014702231505764e+00 3.794373992182780e+00 4.590662558725214e+00 9.262251318591507e+03 + 49160 1.011763744726122e+00 -6.077368852088505e+00 -6.017629416253049e+00 3.216901522279021e+00 4.559934607494026e+00 9.271257487806426e+03 + 49180 1.011054172467822e+00 -6.078032435449289e+00 -5.966682123667100e+00 3.306905873881898e+00 4.946296595540286e+00 9.115056318868865e+03 + 49200 9.046297287952977e-01 -5.918876570610314e+00 -5.996370475791669e+00 4.148513557186748e+00 4.703531561492337e+00 9.205887798990574e+03 + 49220 1.024035113351049e+00 -6.090527564551678e+00 -5.966612697420079e+00 3.229294671242912e+00 4.940833014076269e+00 9.114836717064920e+03 + 49240 9.986491175341013e-01 -6.044944528508131e+00 -5.961933877702370e+00 3.507136402394239e+00 4.983796405177610e+00 9.100562304598900e+03 + 49260 1.013553997607692e+00 -6.057770955163029e+00 -5.979377045092468e+00 3.376294874187471e+00 4.826444837231012e+00 9.153844316532633e+03 + 49280 9.751157020655733e-01 -5.989306566518621e+00 -6.034454993451243e+00 3.764492285653079e+00 4.505243031509474e+00 9.323086224212509e+03 + 49300 1.034355694043237e+00 -6.064062966714511e+00 -5.983275822967880e+00 3.349366492981825e+00 4.813258774145071e+00 9.165788351256842e+03 + 49320 1.018617272389194e+00 -6.025780999625737e+00 -6.011644041432897e+00 3.558095771507596e+00 4.639272373138097e+00 9.252838041800525e+03 + 49340 9.725035854895139e-01 -5.943589066062019e+00 -6.007907002694482e+00 3.973366967042218e+00 4.604043421730091e+00 9.241338860346837e+03 + 49360 1.000242369001744e+00 -5.969123734130342e+00 -6.032078255634618e+00 3.822918581051109e+00 4.461423976392840e+00 9.315770147941092e+03 + 49380 1.053157187352196e+00 -6.030069356594044e+00 -5.965161018191509e+00 3.488024307993937e+00 4.860738031634202e+00 9.110394159793201e+03 + 49400 1.014606354663133e+00 -5.949642223740406e+00 -6.018919893509042e+00 3.918068320442826e+00 4.520265219946565e+00 9.275212387967173e+03 + 49420 1.064540647382888e+00 -5.997040242314904e+00 -5.980849221067505e+00 3.755479644060958e+00 4.848450993615963e+00 9.158351141749599e+03 + 49440 1.038547979293805e+00 -5.929623894992941e+00 -6.017722694097873e+00 4.055301788618365e+00 4.549424850912740e+00 9.271526249753633e+03 + 49460 1.044072470807429e+00 -5.905311745003074e+00 -5.958873653174746e+00 4.203480422220796e+00 4.895919656820553e+00 9.091183532551597e+03 + 49480 1.016954215063829e+00 -5.828426692669380e+00 -6.007550706516209e+00 4.643162914923321e+00 4.614605108063270e+00 9.240167902569796e+03 + 49500 1.137154843142273e+00 -5.968709185988518e+00 -5.986857083512485e+00 3.909372588935197e+00 4.805164552974507e+00 9.176734452829882e+03 + 49520 1.135952801967156e+00 -5.936754427822423e+00 -6.039646897967922e+00 4.054013573847472e+00 4.463189087713723e+00 9.339135688949738e+03 + 49540 1.150783255546644e+00 -5.938946988661366e+00 -6.010312228695952e+00 4.019120173291430e+00 4.609329921277631e+00 9.248700304299538e+03 + 49560 1.050228209669332e+00 -5.782735799200578e+00 -6.065563954338760e+00 4.874504399741295e+00 4.250461365422300e+00 9.419384825138444e+03 + 49580 1.127674130921874e+00 -5.905290861823771e+00 -6.017542821998989e+00 4.189006489750810e+00 4.544438363490013e+00 9.270971221460954e+03 + 49600 1.114827278580270e+00 -5.909448516413911e+00 -6.003914723240321e+00 4.175430347313975e+00 4.632990769118469e+00 9.229049461384124e+03 + 49620 1.090396785668773e+00 -5.916395967293002e+00 -6.042358066184894e+00 4.121959746387029e+00 4.398665881977981e+00 9.347528967720147e+03 + 49640 1.114164227199572e+00 -6.015998033320295e+00 -5.968106152191415e+00 3.614602488472110e+00 4.889605081158792e+00 9.119390333653031e+03 + 49660 9.417374485665990e-01 -5.817967872287070e+00 -6.058520712354371e+00 4.655835212889777e+00 4.274543579791648e+00 9.397524386091347e+03 + 49680 1.025869623178057e+00 -5.987973768926933e+00 -6.015961442802249e+00 3.750068432405233e+00 4.589358877934634e+00 9.266099133680160e+03 + 49700 1.017654687612581e+00 -6.003389714529505e+00 -5.999202382877844e+00 3.656363623413950e+00 4.680407929745264e+00 9.214602624070938e+03 + 49720 9.783192254494399e-01 -5.962747126955856e+00 -6.003052989686314e+00 3.905812676657132e+00 4.674370175546744e+00 9.226408232545233e+03 + 49740 1.054099926571247e+00 -6.089951868954307e+00 -5.985793503936616e+00 3.180001425914201e+00 4.778094876300676e+00 9.173503101299857e+03 + 49760 9.727667166231042e-01 -5.981712686656447e+00 -6.027834960300500e+00 3.757384053242268e+00 4.492542820579336e+00 9.302693950702031e+03 + 49780 1.013117382460341e+00 -6.050816919882966e+00 -6.005976150794142e+00 3.469933183992781e+00 4.727415819187398e+00 9.235412020430802e+03 + 49800 9.914800174203161e-01 -6.027190529238491e+00 -6.034215493079862e+00 3.537952686606397e+00 4.497614257119606e+00 9.322377849761915e+03 + 49820 1.000147999585971e+00 -6.048455422863871e+00 -6.009135446051403e+00 3.434612912399033e+00 4.660394304002966e+00 9.245121080197208e+03 + 49840 1.017594638191775e+00 -6.082321884707825e+00 -5.975365161228743e+00 3.224464030962392e+00 4.838626088678746e+00 9.141585378380485e+03 + 49860 9.340877768654877e-01 -5.964763213739747e+00 -5.947219043138820e+00 3.879867054234962e+00 4.980608396777113e+00 9.055716709267163e+03 + 49880 9.815503769016821e-01 -6.034885301993913e+00 -5.954278830070364e+00 3.488447595201891e+00 4.951302430798129e+00 9.077205468289758e+03 + 49900 9.620694185841348e-01 -5.999865448972621e+00 -6.021264215108019e+00 3.737304812660795e+00 4.614429786062985e+00 9.282430453333296e+03 + 49920 1.017270357372918e+00 -6.074247339968013e+00 -5.994332318940695e+00 3.310195520386661e+00 4.769079937935055e+00 9.199668772600247e+03 + 49940 9.644867997417870e-01 -5.986823762607635e+00 -6.017398938608448e+00 3.732922376079968e+00 4.557354983990107e+00 9.270525844135260e+03 + 49960 9.496631994455978e-01 -5.951087331273335e+00 -5.977915397027783e+00 3.990067475603719e+00 4.836016570411920e+00 9.149392948930636e+03 + 49980 1.063394283649475e+00 -6.101196173287700e+00 -5.947548913477619e+00 3.141644999374150e+00 5.023911342040247e+00 9.056739690471932e+03 + 50000 1.052988486690462e+00 -6.063301612644598e+00 -5.955570271754626e+00 3.367525464807656e+00 4.986135495569004e+00 9.081152247905831e+03 + 50020 1.017060322505321e+00 -5.982470720262481e+00 -5.980529097697806e+00 3.802399315311658e+00 4.813548412543144e+00 9.157387975624883e+03 + 50040 9.885279172761343e-01 -5.913980687793387e+00 -6.048388710106975e+00 4.096333449875275e+00 4.324541786176424e+00 9.366129232106216e+03 + 50060 1.045919515760703e+00 -5.972036910761823e+00 -5.951029112339035e+00 3.891212082446847e+00 5.011842111936793e+00 9.067282242356650e+03 + 50080 1.016978023841858e+00 -5.902068464243120e+00 -5.980491850579196e+00 4.192576958160357e+00 4.742257737838796e+00 9.157229295052268e+03 + 50100 1.040028910678636e+00 -5.909029665520309e+00 -6.030611122266823e+00 4.137417177730834e+00 4.439277638422722e+00 9.311253508971840e+03 + 50120 1.069435448902011e+00 -5.931005974486188e+00 -6.042591058139167e+00 4.020687210169939e+00 4.379948392098647e+00 9.348262815492490e+03 + 50140 1.100521334647910e+00 -5.963194028687300e+00 -6.050161255276593e+00 3.866761861275246e+00 4.367382588064708e+00 9.371656274088273e+03 + 50160 1.034088269885145e+00 -5.863468616735697e+00 -6.061028282306509e+00 4.372422351011094e+00 4.238004179044053e+00 9.405314132403675e+03 + 50180 1.014623044392881e+00 -5.842898314370677e+00 -5.995568553865336e+00 4.572929831164657e+00 4.696273690343116e+00 9.203405733717298e+03 + 50200 1.006663595699954e+00 -5.844260162873728e+00 -6.019238219565987e+00 4.525664231587811e+00 4.520913152294098e+00 9.276162517345505e+03 + 50220 1.095641213758475e+00 -6.002926023457995e+00 -5.939347192282780e+00 3.730714805155416e+00 5.095794292555831e+00 9.031774699763251e+03 + 50240 1.002110620462234e+00 -5.905632428438254e+00 -5.968306027207629e+00 4.186609661039210e+00 4.826728158197398e+00 9.119986271030231e+03 + 50260 1.003263971406204e+00 -5.960262744860986e+00 -5.983153488839660e+00 3.879975058249937e+00 4.748532863993210e+00 9.165372542402934e+03 + 50280 1.038656132459080e+00 -6.069343982862084e+00 -5.915435810438570e+00 3.384834518064813e+00 5.268599061333338e+00 8.959265050034744e+03 + 50300 9.610655821220688e-01 -5.999241133003093e+00 -5.984182417538288e+00 3.687217080444988e+00 4.773686554972588e+00 9.168554022385439e+03 + 50320 9.299477457502798e-01 -5.982376614717568e+00 -5.984127900726913e+00 3.787449639613587e+00 4.777393484337294e+00 9.168411450755364e+03 + 50340 9.804770542591964e-01 -6.073615783753481e+00 -5.999933475859608e+00 3.333352953159809e+00 4.756448167386727e+00 9.216853691106911e+03 + 50360 1.003475481253926e+00 -6.116945556920822e+00 -5.993701272112721e+00 3.081485125599145e+00 4.789172880958695e+00 9.197734147178093e+03 + 50380 9.308618362409343e-01 -6.012685826065781e+00 -6.030997735326499e+00 3.625656178938537e+00 4.520506362204687e+00 9.312481575186765e+03 + 50400 9.552835452368441e-01 -6.049052036597573e+00 -6.051917936156596e+00 3.380725253102563e+00 4.364268814338126e+00 9.377115489222999e+03 + 50420 9.770171299232536e-01 -6.078404335675518e+00 -5.994584942632588e+00 3.273384140462016e+00 4.754688066323677e+00 9.200449513310421e+03 + 50440 9.246625413774001e-01 -5.994281130162920e+00 -5.992349752942854e+00 3.738606177523638e+00 4.749696444400916e+00 9.193585789944227e+03 + 50460 1.008056177611684e+00 -6.105581583358671e+00 -5.982476212574205e+00 3.167683189315242e+00 4.874573278854207e+00 9.163342795741881e+03 + 50480 9.652953933862722e-01 -6.026504628638878e+00 -5.997508878563067e+00 3.554822101731693e+00 4.721320185744821e+00 9.209415691545379e+03 + 50500 9.749076415946732e-01 -6.021555275847931e+00 -6.003099499377981e+00 3.606236990925223e+00 4.712212915437854e+00 9.226589122545867e+03 + 50520 1.021623349910509e+00 -6.067552378832900e+00 -5.987855553001614e+00 3.338904701408217e+00 4.796536208375404e+00 9.179815424743025e+03 + 50540 1.002613260870035e+00 -6.017069727014923e+00 -5.963081804476839e+00 3.597979204181001e+00 4.907986209998693e+00 9.104061699140952e+03 + 50560 1.029485293280510e+00 -6.030527714751125e+00 -5.961690431589606e+00 3.487485306832014e+00 4.882759639280602e+00 9.099816933138125e+03 + 50580 9.736639529321434e-01 -5.920360486771211e+00 -5.987185841720663e+00 4.102565577409005e+00 4.718844048098993e+00 9.177718823093946e+03 + 50600 1.014593729165727e+00 -5.955182139771768e+00 -5.988876194281500e+00 3.936423232315238e+00 4.742946757182278e+00 9.182904821646205e+03 + 50620 1.034808892394675e+00 -5.960360688185126e+00 -6.021281885947449e+00 3.897629099407380e+00 4.547810154331241e+00 9.282495397995584e+03 + 50640 1.052986122995764e+00 -5.966289654657979e+00 -5.998944548326160e+00 3.922617304177735e+00 4.735107851406574e+00 9.213814792966270e+03 + 50660 1.092586435139793e+00 -6.013270408241366e+00 -6.024509778189916e+00 3.577985596837367e+00 4.513447395305915e+00 9.292456118362601e+03 + 50680 1.089377852424100e+00 -6.003223211311298e+00 -5.993834607273922e+00 3.727704435649399e+00 4.781615252913788e+00 9.198136040468346e+03 + 50700 1.034575720838540e+00 -5.925074197570121e+00 -6.045238419166401e+00 4.061770348701360e+00 4.371768792942325e+00 9.356456420450315e+03 + 50720 1.040595946260573e+00 -5.942903936864893e+00 -6.024368179237555e+00 4.034125996171375e+00 4.566345709916780e+00 9.291988738988724e+03 + 50740 1.048993313641607e+00 -5.969621146884366e+00 -6.031109219855200e+00 3.812129491242440e+00 4.459055460995371e+00 9.312799389178062e+03 + 50760 1.038250320781049e+00 -5.971932248406710e+00 -5.998138984716016e+00 3.868362311594116e+00 4.717879176226743e+00 9.211323315346601e+03 + 50780 9.819874390279469e-01 -5.908760433248531e+00 -5.974810895655994e+00 4.219411872782763e+00 4.840139896363088e+00 9.139863257412368e+03 + 50800 1.025403688860931e+00 -5.992771691793715e+00 -6.012417849444306e+00 3.721735035546982e+00 4.608923758084219e+00 9.255211359255001e+03 + 50820 1.013616777798780e+00 -5.996919778826246e+00 -5.997850758822203e+00 3.737360018768967e+00 4.732014187563495e+00 9.210448588964911e+03 + 50840 9.710624454843466e-01 -5.952995039365134e+00 -6.024338623830792e+00 3.932711920537576e+00 4.523046018151750e+00 9.291907159680479e+03 + 50860 1.009287886905208e+00 -6.025796581444041e+00 -6.001985711589588e+00 3.572714420967866e+00 4.709440120392339e+00 9.223142609171899e+03 + 50880 9.745591953103792e-01 -5.985996498178314e+00 -5.981821806219127e+00 3.786479514249993e+00 4.810451241511136e+00 9.161327143602999e+03 + 50900 1.000272914477071e+00 -6.029111987527846e+00 -5.995420168758488e+00 3.501127749811665e+00 4.694591386977422e+00 9.202954638703452e+03 + 50920 9.588288658963835e-01 -5.967258956861270e+00 -5.999356729099581e+00 3.894244793217068e+00 4.709934417910487e+00 9.215053251278603e+03 + 50940 9.711391877638915e-01 -5.983477867954389e+00 -6.042553335588553e+00 3.753360211743438e+00 4.414139734688995e+00 9.348150247837273e+03 + 50960 1.009736731108754e+00 -6.041823709636098e+00 -5.994494880898068e+00 3.487287622021882e+00 4.759057080748230e+00 9.200170383149883e+03 + 50980 9.845775502224848e-01 -6.004264305466813e+00 -5.997405089592519e+00 3.762908569962831e+00 4.802295248973252e+00 9.209066075249666e+03 + 51000 9.561252150665012e-01 -5.960264897848953e+00 -5.981871155940734e+00 3.861316538274482e+00 4.737250060753841e+00 9.161417138521665e+03 + 51020 9.668938453609424e-01 -5.971298652811747e+00 -5.993814395408807e+00 3.826143770652811e+00 4.696854892360589e+00 9.198023291678053e+03 + 51040 1.010992476163919e+00 -6.028552544327317e+00 -5.972126749342545e+00 3.507208731550671e+00 4.831214378216784e+00 9.131658340872978e+03 + 51060 9.320530876725446e-01 -5.903756143063610e+00 -5.996228031626167e+00 4.180358048111433e+00 4.649370154006728e+00 9.205425732055257e+03 + 51080 9.837922050434701e-01 -5.969742676671604e+00 -5.972017680042562e+00 3.839131695502755e+00 4.826068274091082e+00 9.131324207807756e+03 + 51100 1.051425684233195e+00 -6.054952579847925e+00 -5.971980610117756e+00 3.415989082996404e+00 4.892426973057860e+00 9.131236186455590e+03 + 51120 1.000086279741786e+00 -5.963035924008405e+00 -6.023415994719148e+00 3.867657793935463e+00 4.520946084128632e+00 9.289075900664018e+03 + 51140 9.891904254914978e-01 -5.932283566119903e+00 -6.013684276801518e+00 4.093075346290671e+00 4.625659868837571e+00 9.259093564340988e+03 + 51160 9.550358851010687e-01 -5.867487064093909e+00 -6.039743243473866e+00 4.348958626163314e+00 4.359836987605984e+00 9.339453998706786e+03 + 51180 1.047542588906664e+00 -5.991997843137881e+00 -6.016280614468040e+00 3.745540054320824e+00 4.606104623596331e+00 9.267091617856146e+03 + 51200 1.038577775411625e+00 -5.968395626879443e+00 -6.029309056109056e+00 3.858049821017988e+00 4.508275484058840e+00 9.307258137521643e+03 + 51220 1.031043611666961e+00 -5.950295892545887e+00 -6.038103373770490e+00 3.952792116384190e+00 4.448587971028715e+00 9.334385363062775e+03 + 51240 1.076868841100275e+00 -6.018347651183937e+00 -6.010020983386713e+00 3.565449314047786e+00 4.613262329087121e+00 9.247825637857784e+03 + 51260 1.009903777942480e+00 -5.922822067099664e+00 -5.985790349022620e+00 4.172490277004709e+00 4.810916657892959e+00 9.173461182853138e+03 + 51280 1.044149108212520e+00 -5.980839947677783e+00 -5.969552864157194e+00 3.846055086625706e+00 4.910867266871460e+00 9.123831673833720e+03 + 51300 1.046169401893434e+00 -5.996455481350647e+00 -6.003170640347486e+00 3.725862747192321e+00 4.687303265064976e+00 9.226766907949848e+03 + 51320 9.632018546262066e-01 -5.892410030888836e+00 -6.053321764028688e+00 4.251461258394625e+00 4.327481185695373e+00 9.381460438495844e+03 + 51340 1.010698290639885e+00 -5.991559898205845e+00 -6.018613978355993e+00 3.744584567448013e+00 4.589235852620492e+00 9.274251881937476e+03 + 51360 9.875453402510629e-01 -5.989331129955029e+00 -6.033931746893873e+00 3.768350542749367e+00 4.512246898363360e+00 9.321467998401953e+03 + 51380 9.808414966529938e-01 -6.017154442247923e+00 -6.039499074868358e+00 3.593651803295428e+00 4.465345464968168e+00 9.338717150411107e+03 + 51400 1.007087635532953e+00 -6.096315511977391e+00 -6.003212343372617e+00 3.208561646601799e+00 4.743174448399190e+00 9.226914115111227e+03 + 51420 9.475716993805000e-01 -6.041861522818579e+00 -5.967606011339962e+00 3.479827704111028e+00 4.906214342024512e+00 9.117881133116436e+03 + 51440 9.659196850974784e-01 -6.091459399071401e+00 -5.936331013665537e+00 3.272479835749761e+00 5.163251030790292e+00 9.022631491043721e+03 + 51460 9.597079646563760e-01 -6.095239647232932e+00 -6.007311775002814e+00 3.155408008657928e+00 4.660303457797526e+00 9.239524935721440e+03 + 51480 9.352386071682678e-01 -6.066142879330449e+00 -5.996832651601752e+00 3.376833464251408e+00 4.774823517592668e+00 9.207320345256434e+03 + 51500 9.293395195005899e-01 -6.057151215942869e+00 -6.005252504009890e+00 3.426655985817841e+00 4.724666421036723e+00 9.233163708110294e+03 + 51520 9.263054132741437e-01 -6.045070977216383e+00 -5.966540021778671e+00 3.533570876000383e+00 4.984507774749808e+00 9.114612114782305e+03 + 51540 9.372208002755118e-01 -6.047414394583146e+00 -5.999408562783639e+00 3.407469201307904e+00 4.683126116379129e+00 9.215225671234630e+03 + 51560 9.779373289034876e-01 -6.088067037100443e+00 -6.003584258929093e+00 3.212818671384834e+00 4.697931857312394e+00 9.228072723355872e+03 + 51580 9.309248932784088e-01 -5.995691983073225e+00 -6.005166995357677e+00 3.733480079565397e+00 4.679073092774661e+00 9.232923317294482e+03 + 51600 9.525636388193668e-01 -6.001988989587987e+00 -5.996840744926695e+00 3.691741933674976e+00 4.721303951208403e+00 9.207350775729790e+03 + 51620 9.261325705967085e-01 -5.934602021168686e+00 -6.038819206178265e+00 4.003692853481866e+00 4.405261649599605e+00 9.336585666105208e+03 + 51640 9.740806934084083e-01 -5.978867764296895e+00 -5.978317150289671e+00 3.822883165408368e+00 4.826044876245092e+00 9.150605185339202e+03 + 51660 1.031535151448340e+00 -6.042268950784621e+00 -5.971600618493595e+00 3.493606257901029e+00 4.899394757805175e+00 9.130051474101798e+03 + 51680 1.019789386521798e+00 -6.007943288604864e+00 -5.998077131800821e+00 3.674882014253479e+00 4.731535013405118e+00 9.211141628942998e+03 + 51700 1.049499670321196e+00 -6.043511452247168e+00 -5.985551366660943e+00 3.452368240985203e+00 4.785184021715570e+00 9.172745469466745e+03 + 51720 1.056316319094630e+00 -6.048685620754164e+00 -5.980571616984676e+00 3.415715292372900e+00 4.806836442625320e+00 9.157492240471856e+03 + 51740 9.329320203304647e-01 -5.863530091915575e+00 -6.021415899283412e+00 4.369579976080926e+00 4.462975237425078e+00 9.282899365429161e+03 + 51760 1.033912404391399e+00 -6.011384725184674e+00 -5.964272767796312e+00 3.633345270906431e+00 4.903869420782248e+00 9.107689365295228e+03 + 51780 9.946598624286955e-01 -5.950412534782044e+00 -5.988067702882372e+00 4.068688888087953e+00 4.852467085737434e+00 9.180440745087833e+03 + 51800 1.026247620432821e+00 -5.997234472597834e+00 -5.984191998137401e+00 3.678794666002742e+00 4.753686572670952e+00 9.168575183246499e+03 + 51820 1.067302842646300e+00 -6.060160095427313e+00 -5.970225473058106e+00 3.362618293278536e+00 4.879036812260358e+00 9.125877772535134e+03 + 51840 1.032506036848079e+00 -6.014397683687925e+00 -5.935886403466512e+00 3.655507447271172e+00 5.106331367883874e+00 9.021270593657087e+03 + 51860 1.030841944221699e+00 -6.016279497294695e+00 -5.965980682266549e+00 3.588493376213090e+00 4.877316955821174e+00 9.112890329371410e+03 + 51880 9.501184042336110e-01 -5.900491236062376e+00 -6.015331660156436e+00 4.231716005160878e+00 4.572284518514592e+00 9.264155558576387e+03 + 51900 9.460959169062167e-01 -5.898215291876091e+00 -6.039925721437051e+00 4.206159315141658e+00 4.392436098984525e+00 9.339999011190679e+03 + 51920 1.025007489268924e+00 -6.021683495824298e+00 -6.024309860037608e+00 3.549060927771493e+00 4.533979938030119e+00 9.291814391446251e+03 + 51940 9.265137907258935e-01 -5.884109708308078e+00 -5.999064910105389e+00 4.283391289654666e+00 4.623300731674520e+00 9.214182317889674e+03 + 51960 1.002493584348304e+00 -6.004924149349415e+00 -6.009357649099931e+00 3.676757400821912e+00 4.651299559172585e+00 9.245794338149917e+03 + 51980 9.582970279852687e-01 -5.949198461858032e+00 -6.022164669459812e+00 3.965386556871215e+00 4.546403301337659e+00 9.285219587812957e+03 + 52000 9.909502881836171e-01 -6.009679278680629e+00 -6.024259823946867e+00 3.627042675652803e+00 4.543318928401973e+00 9.291682106310200e+03 + 52020 1.003361848456077e+00 -6.045028885901727e+00 -6.006935915318179e+00 3.453947298993576e+00 4.672683030952461e+00 9.238363277821483e+03 + 52040 9.740731664761513e-01 -6.025819322114829e+00 -6.004177386427912e+00 3.578654537748307e+00 4.702925881541308e+00 9.229883646025934e+03 + 52060 9.742471394665350e-01 -6.052068927273470e+00 -5.987757404029301e+00 3.457730373096642e+00 4.827017091740715e+00 9.179503688061281e+03 + 52080 9.463451179445561e-01 -6.038033430304551e+00 -5.996153564215494e+00 3.478556787387038e+00 4.719037459358734e+00 9.205241692057753e+03 + 52100 9.881670936267023e-01 -6.125679997013039e+00 -5.960507386331237e+00 3.036770775352787e+00 4.985217466266590e+00 9.096216413721279e+03 + 52120 9.466671338253831e-01 -6.086172192076737e+00 -5.959504248485920e+00 3.221245149252387e+00 4.948592083151780e+00 9.093155006857354e+03 + 52140 9.664890338031638e-01 -6.132702267246268e+00 -5.967114933900572e+00 2.975197251800903e+00 4.926025344428909e+00 9.116377812978324e+03 + 52160 9.258931952915568e-01 -6.083615065493734e+00 -5.959947686820191e+00 3.263203380908054e+00 4.973320606716532e+00 9.094509334545730e+03 + 52180 8.942985724125339e-01 -6.038923836201985e+00 -5.996689461264268e+00 3.480147797837664e+00 4.722664114478436e+00 9.206902718752843e+03 + 52200 9.877878112981743e-01 -6.171032079726776e+00 -5.980454235737962e+00 2.741893978372425e+00 4.836221450382242e+00 9.157138681042516e+03 + 52220 9.192931318319111e-01 -6.053267619785935e+00 -5.982285955435418e+00 3.455626488663215e+00 4.863214189740946e+00 9.162741838738593e+03 + 52240 9.413479029754978e-01 -6.058721034130621e+00 -5.969426044842614e+00 3.432512289063899e+00 4.945257935910574e+00 9.123433157158230e+03 + 52260 9.770918194581182e-01 -6.072658330651400e+00 -6.018359637494052e+00 3.302895222598999e+00 4.614686721404105e+00 9.273493895965616e+03 + 52280 9.520577704604374e-01 -5.989025165259984e+00 -5.989259145304832e+00 3.726759241805768e+00 4.725415692179957e+00 9.184107514681758e+03 + 52300 9.649008029884539e-01 -5.964500104746922e+00 -5.954722162836647e+00 3.871740044755205e+00 4.927886500335629e+00 9.078561486990884e+03 + 52320 9.498656643692558e-01 -5.902147763883232e+00 -6.005854188910671e+00 4.188523977619841e+00 4.593025636594882e+00 9.235032951708858e+03 + 52340 1.035560948549149e+00 -5.999958396234753e+00 -6.053466824634366e+00 3.631692587255869e+00 4.324438910982756e+00 9.381920697784864e+03 + 52360 1.051932456077838e+00 -6.007684065414647e+00 -5.993696421800500e+00 3.670071005682373e+00 4.750390219895662e+00 9.197734390564754e+03 + 52380 1.026047004687271e+00 -5.961316968285990e+00 -6.020855886678342e+00 3.928321299841042e+00 4.586439616814311e+00 9.281188187379930e+03 + 52400 1.029258223278297e+00 -5.963329927484951e+00 -6.057615430189834e+00 3.867589234767173e+00 4.326187287601345e+00 9.394775807190785e+03 + 52420 1.061882869737478e+00 -6.014444626499560e+00 -6.032437480659435e+00 3.590866748295415e+00 4.487548995324232e+00 9.316899079821387e+03 + 52440 1.028453749837974e+00 -5.972262645814344e+00 -5.964951056773761e+00 3.858831272476359e+00 4.900815548212135e+00 9.109769961805066e+03 + 52460 1.038171734712304e+00 -5.993770716391235e+00 -6.005293129032902e+00 3.705959990583370e+00 4.639796514107328e+00 9.233328228255781e+03 + 52480 9.917587494441780e-01 -5.937311296742801e+00 -6.009934717942760e+00 4.045856844072683e+00 4.628841921104413e+00 9.247560016998234e+03 + 52500 9.982479883649287e-01 -5.960438025955839e+00 -5.983042696437499e+00 3.922701941471278e+00 4.792902425504136e+00 9.165016520173976e+03 + 52520 1.012575930093152e+00 -5.996125083886216e+00 -5.980543865103319e+00 3.757341604287057e+00 4.846811373724269e+00 9.157389478588684e+03 + 52540 9.889159315980348e-01 -5.975722860894620e+00 -5.953654425490580e+00 3.817107230117199e+00 4.943827601286534e+00 9.075313998407353e+03 + 52560 9.759310745864992e-01 -5.969733888326114e+00 -6.014099056746931e+00 3.865114561832676e+00 4.610362899272719e+00 9.260380515025710e+03 + 52580 1.004368830123272e+00 -6.028012450794599e+00 -5.963040686519982e+00 3.535041430615813e+00 4.908119355428695e+00 9.103955048248055e+03 + 52600 9.803289396932537e-01 -6.009285790119675e+00 -5.969402783170088e+00 3.638392302466992e+00 4.867406700246903e+00 9.123342578394137e+03 + 52620 9.616055365220445e-01 -5.997369837633524e+00 -5.998164920731814e+00 3.700746972196170e+00 4.696181482007080e+00 9.211394431271417e+03 + 52640 1.020246252057012e+00 -6.100357607960150e+00 -5.960867192730168e+00 3.179336051227536e+00 4.980311601550091e+00 9.097300739835831e+03 + 52660 9.887273677633861e-01 -6.071136982986689e+00 -5.992888842134834e+00 3.258401495073917e+00 4.707714428705939e+00 9.195252343068441e+03 + 52680 9.661911086501185e-01 -6.059032568857302e+00 -5.992362808885911e+00 3.434261509287022e+00 4.817089588154761e+00 9.193616857404340e+03 + 52700 9.288923810114150e-01 -6.024886692102264e+00 -5.991574826285329e+00 3.569271154756934e+00 4.760553043272349e+00 9.191204812826378e+03 + 52720 9.500499139606653e-01 -6.078188786957843e+00 -6.012424812297954e+00 3.261088155463156e+00 4.638715074902430e+00 9.255215746702130e+03 + 52740 9.324265057572809e-01 -6.074128180381742e+00 -5.998384436843262e+00 3.280202980324993e+00 4.715135277029379e+00 9.212086677557305e+03 + 52760 9.625294627244371e-01 -6.139013145041465e+00 -5.957738136088665e+00 2.981342511306279e+00 5.022251664930236e+00 9.087767190534078e+03 + 52780 9.421180304247097e-01 -6.123480671523660e+00 -5.991617781624489e+00 2.966729963843154e+00 4.723907083360452e+00 9.191347806251410e+03 + 52800 9.017439956058222e-01 -6.071684516028905e+00 -6.000328419889358e+00 3.314900897680652e+00 4.724638644034120e+00 9.218058462909357e+03 + 52820 8.809311069732020e-01 -6.043051817701015e+00 -6.025253351158183e+00 3.434107977987476e+00 4.536309527180215e+00 9.294747337371980e+03 + 52840 9.192406504414496e-01 -6.093518050583311e+00 -6.020493958007533e+00 3.173658600520727e+00 4.592974240532651e+00 9.280061045684397e+03 + 52860 9.751891665855824e-01 -6.160017795697319e+00 -5.930475145776480e+00 2.838928181315891e+00 5.156997598771624e+00 9.004852764968229e+03 + 52880 9.220654058090462e-01 -6.051319690493046e+00 -5.932331955811561e+00 3.446257089189106e+00 5.129503075022630e+00 9.010486110627520e+03 + 52900 9.206411203608600e-01 -6.005960868694213e+00 -6.004654296414610e+00 3.664871132752228e+00 4.672373672973114e+00 9.231339341449991e+03 + 52920 9.923873427094940e-01 -6.062311296919027e+00 -6.010122635801002e+00 3.332445728483347e+00 4.632121096792257e+00 9.248169452478895e+03 + 52940 9.476312003974895e-01 -5.952308137914286e+00 -6.031099401616057e+00 3.955626020313908e+00 4.503194391229686e+00 9.312757663994498e+03 + 52960 9.785085847541517e-01 -5.964785443787379e+00 -5.976642239047610e+00 3.881398835487755e+00 4.813315282270371e+00 9.145466359134802e+03 + 52980 9.858943497234987e-01 -5.949545845245770e+00 -6.002713135362418e+00 3.965914236451569e+00 4.660619428990223e+00 9.225389634980178e+03 + 53000 1.047158013943823e+00 -6.020599823591636e+00 -5.970450449716902e+00 3.590268842237373e+00 4.878234307616625e+00 9.126551874946761e+03 + 53020 9.967117148527351e-01 -5.932623100185481e+00 -5.969483541026657e+00 4.077395915882134e+00 4.865737560437315e+00 9.123599112000404e+03 + 53040 1.045628106864340e+00 -5.993832056289270e+00 -5.984734165726517e+00 3.691121319533543e+00 4.743362815038880e+00 9.170253392119659e+03 + 53060 1.077581061485628e+00 -6.032221099981737e+00 -5.974564387659302e+00 3.518849587103792e+00 4.849923351606612e+00 9.139146369852333e+03 + 53080 1.033567968359189e+00 -5.962748206447381e+00 -5.995652377861083e+00 3.929547367926685e+00 4.740606523765142e+00 9.203676149047122e+03 + 53100 1.020182769541902e+00 -5.943664161463576e+00 -6.036452909032116e+00 3.963381791478610e+00 4.430574443927771e+00 9.329289792424681e+03 + 53120 1.035781421330477e+00 -5.971907486484643e+00 -5.986642821887978e+00 3.817980555684817e+00 4.733367979513083e+00 9.176095697870913e+03 + 53140 1.024051817070492e+00 -5.963279753665712e+00 -5.977307326212846e+00 3.950605756686849e+00 4.870057264361371e+00 9.147481161018057e+03 + 53160 1.006167006264120e+00 -5.947602533448166e+00 -5.965080567657208e+00 3.995946339380642e+00 4.895584762235274e+00 9.110188422122790e+03 + 53180 1.059112404441435e+00 -6.040347245447826e+00 -5.985621004172021e+00 3.541299447919948e+00 4.855545994184086e+00 9.172953395966946e+03 + 53200 9.833126318823051e-01 -5.947672475682264e+00 -5.995469749256512e+00 3.990510469415224e+00 4.716051127947713e+00 9.203119088425196e+03 + 53220 1.042686456548896e+00 -6.057698888500708e+00 -5.975898963392876e+00 3.380447609745609e+00 4.850155438212280e+00 9.143200648351438e+03 + 53240 9.919192437292238e-01 -6.009196042828121e+00 -5.981129887291858e+00 3.622868245879336e+00 4.784028454192092e+00 9.159214207365809e+03 + 53260 9.142078239177923e-01 -5.924379603297807e+00 -5.995808417736106e+00 4.090773366240192e+00 4.680618060162170e+00 9.204185701013372e+03 + 53280 9.681979357621973e-01 -6.033844684301380e+00 -5.981820075250809e+00 3.500043860521825e+00 4.798777216472432e+00 9.161305386507163e+03 + 53300 9.824100414042479e-01 -6.079851224906208e+00 -5.966786468546174e+00 3.298615396975175e+00 4.947850724708989e+00 9.115376267895206e+03 + 53320 9.880498905452690e-01 -6.110552025348452e+00 -6.007293846140247e+00 3.082606717820407e+00 4.675531161985511e+00 9.239452075205132e+03 + 53340 9.654876739908574e-01 -6.099573162647946e+00 -5.983800138221674e+00 3.132376798158012e+00 4.797163420231298e+00 9.167396662133422e+03 + 53360 9.005732988080296e-01 -6.020089630290336e+00 -5.978046846679827e+00 3.593882281595968e+00 4.835298451187247e+00 9.149763235346920e+03 + 53380 9.350862921986435e-01 -6.082359437207558e+00 -5.954543538964186e+00 3.251900931533116e+00 4.985839598692881e+00 9.078017706695866e+03 + 53400 9.324403204851189e-01 -6.082045364795309e+00 -5.959174425194975e+00 3.238124321898261e+00 4.943668271299829e+00 9.092128918619945e+03 + 53420 9.581983523622181e-01 -6.114919197799741e+00 -5.983537251636580e+00 3.020462884950990e+00 4.774878351110321e+00 9.166584575749115e+03 + 53440 9.682066613723298e-01 -6.113963755732841e+00 -5.981487288046214e+00 3.120894319046757e+00 4.881594697170485e+00 9.160307800905675e+03 + 53460 9.763051598658974e-01 -6.093701808954003e+00 -5.976411562397990e+00 3.198850683559711e+00 4.872349429891328e+00 9.144758856605968e+03 + 53480 9.748037827520839e-01 -6.040320643105482e+00 -5.973688142182439e+00 3.496305020644622e+00 4.878919152290927e+00 9.136430735330161e+03 + 53500 1.024332202353656e+00 -6.050630409221091e+00 -5.973706010587501e+00 3.439648005825598e+00 4.881359806791886e+00 9.136510244009511e+03 + 53520 9.934718692083070e-01 -5.952602788615796e+00 -5.967052868060925e+00 4.022237547259326e+00 4.939262954942824e+00 9.116175123881863e+03 + 53540 1.045735854252092e+00 -5.992352480397367e+00 -5.968329221644729e+00 3.738656333504130e+00 4.876601602849052e+00 9.120075820685188e+03 + 53560 1.012329952903900e+00 -5.915937117550793e+00 -5.987500835056214e+00 4.115783878357375e+00 4.704853937991754e+00 9.178705022749013e+03 + 53580 1.090512062805645e+00 -6.015101616661603e+00 -6.006124124904158e+00 3.620381652429128e+00 4.671931799362735e+00 9.235860578731346e+03 + 53600 1.066058284550854e+00 -5.969248832077673e+00 -5.983099796756106e+00 3.936670916211769e+00 4.857136533598352e+00 9.165235543972061e+03 + 53620 1.031500973242662e+00 -5.915852294965583e+00 -6.021215058808542e+00 4.135934570618623e+00 4.530925275797344e+00 9.282291802998590e+03 + 53640 1.036320740712101e+00 -5.926879519476611e+00 -6.016150435204389e+00 4.093286814689945e+00 4.580679401951481e+00 9.266689296332012e+03 + 53660 1.019796614328845e+00 -5.912466298103427e+00 -6.018295764400843e+00 4.217358382962037e+00 4.609669210425289e+00 9.273301884639866e+03 + 53680 1.049509278586028e+00 -5.972354553518539e+00 -6.025478908635984e+00 3.920678081251549e+00 4.615629813199790e+00 9.295426838492001e+03 + 53700 1.015827063620542e+00 -5.941884181154537e+00 -6.067512330111875e+00 3.932439294942653e+00 4.211063022736395e+00 9.425454356826285e+03 + 53720 1.066317268870032e+00 -6.041787755924706e+00 -6.016121967021018e+00 3.449333495657972e+00 4.596710427310947e+00 9.266607951690019e+03 + 53740 1.009152285426432e+00 -5.988404333453033e+00 -5.977817387056385e+00 3.754007193963482e+00 4.814799078497697e+00 9.149074946491934e+03 + 53760 1.005888533900545e+00 -6.013515969048251e+00 -6.014359567197319e+00 3.621929300519763e+00 4.617085229401426e+00 9.261154819981715e+03 + 53780 9.740195738397511e-01 -5.993037600894319e+00 -6.003908486189179e+00 3.734666622824311e+00 4.672244317197166e+00 9.229059589308286e+03 + 53800 9.888211201948007e-01 -6.039301239101434e+00 -5.989606432202445e+00 3.442586026005416e+00 4.727941297465923e+00 9.185191683476667e+03 + 53820 9.366781357172129e-01 -5.981494995247095e+00 -5.972926192691637e+00 3.794266829553238e+00 4.843470219844585e+00 9.134100706232966e+03 + 53840 9.985257261976814e-01 -6.086776515579849e+00 -5.944926228174154e+00 3.266643417445768e+00 5.081169718990298e+00 9.048737280272417e+03 + 53860 9.161384630146986e-01 -5.972279508706477e+00 -5.947659552217059e+00 3.892344737757261e+00 5.033716337845449e+00 9.057066013278098e+03 + 53880 9.504933689056781e-01 -6.024183799456113e+00 -5.965513917442823e+00 3.590990584678122e+00 4.927882126333334e+00 9.111480138415120e+03 + 53900 1.021503263531397e+00 -6.125090896729225e+00 -5.989162409781778e+00 3.039081931395035e+00 4.819604338312653e+00 9.183818011675961e+03 + 53920 9.293409675632341e-01 -5.981538146678229e+00 -6.033153582629820e+00 3.814303365438758e+00 4.517919544741821e+00 9.319098227903422e+03 + 53940 9.547529800794669e-01 -6.009369630434335e+00 -5.983335958344538e+00 3.692553371142227e+00 4.842042744979574e+00 9.165974546384066e+03 + 53960 9.640786502973677e-01 -6.006611310227600e+00 -5.995812043066360e+00 3.647755022481939e+00 4.709766085702973e+00 9.204196727849705e+03 + 53980 9.828590500359659e-01 -6.010517641453788e+00 -6.044763327006184e+00 3.621591277069554e+00 4.424947251124982e+00 9.354968477078628e+03 + 54000 9.542817800543673e-01 -5.937200463836628e+00 -6.048595446985419e+00 3.989740260810167e+00 4.350093029251879e+00 9.366812732474069e+03 + 54020 1.033713508276771e+00 -6.015401212962604e+00 -6.006494502154199e+00 3.614622913610508e+00 4.665766625381413e+00 9.236985238388419e+03 + 54040 1.036699406649471e+00 -5.969406364322110e+00 -6.021572122008326e+00 3.810240959313572e+00 4.510697106054406e+00 9.283384181863556e+03 + 54060 1.058003150381767e+00 -5.946392934740738e+00 -5.987569918431102e+00 3.995725023571098e+00 4.759280411103399e+00 9.178921213822821e+03 + 54080 1.045489089997446e+00 -5.880201647116905e+00 -6.069670710326415e+00 4.273160525107251e+00 4.185199843915476e+00 9.432158563524681e+03 + 54100 1.126789782916441e+00 -5.970599098605202e+00 -6.016700892311624e+00 3.801607883002057e+00 4.536884249310265e+00 9.268394934206884e+03 + 54120 1.055950701133109e+00 -5.853505281017144e+00 -5.994158397538452e+00 4.477141497077053e+00 4.669489536012263e+00 9.199130649279681e+03 + 54140 1.031905892686318e+00 -5.817831323058218e+00 -6.036116217178905e+00 4.643195071419272e+00 4.389769429900094e+00 9.328218845367408e+03 + 54160 1.093846693865381e+00 -5.917720629738016e+00 -6.026639180864027e+00 4.088060656756259e+00 4.462633481099386e+00 9.298991791049375e+03 + 54180 1.040180597238881e+00 -5.851046729352469e+00 -6.058043556102183e+00 4.492099437049617e+00 4.303491625197342e+00 9.396059035135466e+03 + 54200 1.079979498538350e+00 -5.929437673723467e+00 -6.040825200477803e+00 4.075372491735781e+00 4.435768075948328e+00 9.342778873832707e+03 + 54220 1.103988771413004e+00 -5.991141939199633e+00 -5.958875123116957e+00 3.782344810306861e+00 4.967625861527235e+00 9.091220649102326e+03 + 54240 9.850477770929047e-01 -5.838188436444661e+00 -5.965336079812483e+00 4.617425385817635e+00 4.887323941565380e+00 9.110924809627688e+03 + 54260 1.060312439210135e+00 -5.972413846739126e+00 -5.976974101701881e+00 3.874430576139957e+00 4.848244886446645e+00 9.146467604601825e+03 + 54280 1.039796427072599e+00 -5.963775235762218e+00 -6.021020354960616e+00 3.878514043386912e+00 4.549803710296147e+00 9.281687537981750e+03 + 54300 1.042200490152169e+00 -5.994630698587713e+00 -6.004774365083728e+00 3.695990705982782e+00 4.637744203235346e+00 9.231719290192761e+03 + 54320 9.936228400616660e-01 -5.947668161796854e+00 -5.995827901903258e+00 3.969126748960974e+00 4.692586068574311e+00 9.204220942932227e+03 + 54340 9.994455718171762e-01 -5.979037065815650e+00 -5.995044165302458e+00 3.765304645017273e+00 4.673389402673382e+00 9.201825450587108e+03 + 54360 1.023558470885400e+00 -6.034870890013749e+00 -5.971311988939481e+00 3.499489934107431e+00 4.864454979784029e+00 9.129191643738573e+03 + 54380 1.009769062490763e+00 -6.030416999039778e+00 -6.018979252975029e+00 3.526745517661889e+00 4.592422825551161e+00 9.275382468118903e+03 + 54400 1.008936878668633e+00 -6.043384428318426e+00 -5.974448251142420e+00 3.496870809488237e+00 4.892713006671808e+00 9.138795631339106e+03 + 54420 1.004159214485255e+00 -6.048321033931861e+00 -5.982262553053785e+00 3.460069319300547e+00 4.839387339019342e+00 9.162700172077946e+03 + 54440 1.022098899461534e+00 -6.086000864210757e+00 -5.996984311856679e+00 3.240301955565487e+00 4.751448774449555e+00 9.207795916528401e+03 + 54460 9.669256446890889e-01 -6.012404404036343e+00 -5.984400840165597e+00 3.628654612045816e+00 4.789455409329149e+00 9.169230489981876e+03 + 54480 9.488636706479081e-01 -5.990376893415181e+00 -6.022236427978559e+00 3.806289925912975e+00 4.623347548203024e+00 9.285428962524944e+03 + 54500 9.487049495179799e-01 -5.993127515865922e+00 -6.084496769546400e+00 3.686542018878511e+00 4.161885624898898e+00 9.478258982167739e+03 + 54520 9.684836135732350e-01 -6.024646412199617e+00 -6.021802158728037e+00 3.561008615939149e+00 4.577340759519767e+00 9.284105451298017e+03 + 54540 1.010972370845267e+00 -6.087545798748540e+00 -6.015999864728256e+00 3.206634550886089e+00 4.617462375728067e+00 9.266237517060004e+03 + 54560 9.072906522979783e-01 -5.931512107495578e+00 -5.972449427792554e+00 4.077884482410949e+00 4.842816054235867e+00 9.132663021812137e+03 + 54580 1.013258391744621e+00 -6.078494879820542e+00 -5.984519516586408e+00 3.323801924336489e+00 4.863423002667346e+00 9.169599555253109e+03 + 54600 1.007048713817384e+00 -6.051542756564180e+00 -5.996744671169080e+00 3.404251783221054e+00 4.718910869536024e+00 9.207049129474808e+03 + 54620 9.739597160247053e-01 -5.975478440834744e+00 -5.981274135605397e+00 3.812106955517787e+00 4.778827179263828e+00 9.159635155451602e+03 + 54640 9.885595975631052e-01 -5.956265705142274e+00 -5.983863310722824e+00 3.940607573950969e+00 4.782137851991794e+00 9.167549434342114e+03 + 54660 1.048652475769583e+00 -5.995318542665142e+00 -6.017355765739199e+00 3.705173562225474e+00 4.578632417084995e+00 9.270385289108230e+03 + 54680 1.067934562053304e+00 -5.975173726532505e+00 -6.002497289947861e+00 3.833820570722007e+00 4.676924441283259e+00 9.224702882243444e+03 + 54700 1.067856696534770e+00 -5.939403616652037e+00 -6.010622536800279e+00 3.999620581874733e+00 4.590670521291252e+00 9.249685727164921e+03 + 54720 1.070134708261087e+00 -5.920110063541051e+00 -6.012913795526518e+00 4.158335160256127e+00 4.625441769864467e+00 9.256711757315463e+03 + 54740 1.093017340973719e+00 -5.941472120875195e+00 -6.062182597968621e+00 3.985025628350265e+00 4.291887388993853e+00 9.408921775146819e+03 + 54760 1.064547972941710e+00 -5.900049220961904e+00 -6.022800225759704e+00 4.204477334762029e+00 4.499622069556461e+00 9.287158028543708e+03 + 54780 1.091316590018926e+00 -5.948511122951268e+00 -5.984770116228481e+00 3.958939135541713e+00 4.750734385082877e+00 9.170336377290851e+03 + 54800 1.095390699352464e+00 -5.970244653732164e+00 -5.979171772007548e+00 3.832328924262097e+00 4.781068029657751e+00 9.153212071460603e+03 + 54820 1.038658548615393e+00 -5.908855857906299e+00 -6.001430147588261e+00 4.219467072525084e+00 4.687891175346231e+00 9.221415147822556e+03 + 54840 1.067002225214245e+00 -5.979896107607225e+00 -6.018066678994483e+00 3.763879882759383e+00 4.544698554976913e+00 9.272610304890330e+03 + 54860 1.028021292575066e+00 -5.954849696436385e+00 -5.990418746859473e+00 3.930299003253635e+00 4.726056011431504e+00 9.187666865891502e+03 + 54880 9.944301961955102e-01 -5.938318243869601e+00 -6.034122801510027e+00 4.031731813619949e+00 4.481607217941241e+00 9.322065155728695e+03 + 54900 9.696066971873122e-01 -5.930387545021663e+00 -6.039248700920651e+00 4.014604627112691e+00 4.389507023731270e+00 9.337920572078605e+03 + 54920 1.008829824317309e+00 -6.016067761888137e+00 -6.024558054456929e+00 3.603748125070688e+00 4.554995551272160e+00 9.292601941897912e+03 + 54940 1.017815995347930e+00 -6.052043929901189e+00 -5.970727772781490e+00 3.415540799595846e+00 4.882470757411808e+00 9.127411577998113e+03 + 54960 9.198074710167056e-01 -5.921409705978636e+00 -5.979154995206325e+00 4.101891399446464e+00 4.770309012646449e+00 9.153153650089633e+03 + 54980 9.285353959960526e-01 -5.940660953829389e+00 -5.994310856781295e+00 3.993595964073992e+00 4.685529919028497e+00 9.199591122457834e+03 + 55000 1.017294981616800e+00 -6.074854332169742e+00 -6.002314913447890e+00 3.310284466013174e+00 4.726817033752813e+00 9.224147208875169e+03 + 55020 9.498205676961138e-01 -5.975639998750500e+00 -6.079314714855811e+00 3.789667824332950e+00 4.194351560845789e+00 9.462135902386499e+03 + 55040 9.461729098551501e-01 -5.970936894531246e+00 -6.072557305089658e+00 3.806543798529042e+00 4.223023675394925e+00 9.441131036875513e+03 + 55060 9.337477258236849e-01 -5.953001256718920e+00 -6.030869887190547e+00 3.928731787382902e+00 4.481598061083203e+00 9.312064005024293e+03 + 55080 1.056674794888727e+00 -6.132429517887268e+00 -6.002393166202086e+00 3.032411148705231e+00 4.779100003141933e+00 9.224396448887705e+03 + 55100 1.000271890196097e+00 -6.045248058573978e+00 -6.022306179235710e+00 3.470333496023810e+00 4.602069317428495e+00 9.285655434977065e+03 + 55120 9.985034313765137e-01 -6.038213568048285e+00 -6.004911730829888e+00 3.482001347336144e+00 4.673225650086831e+00 9.232154467795275e+03 + 55140 9.674092330321477e-01 -5.988445136760769e+00 -6.028133794722922e+00 3.714599214139536e+00 4.486700798320882e+00 9.303604826012745e+03 + 55160 9.472965820390548e-01 -5.953562660505895e+00 -5.959952764327043e+00 3.970872781472152e+00 4.934179816465752e+00 9.094507440766622e+03 + 55180 9.831413338772073e-01 -5.996515999398680e+00 -6.010926595340568e+00 3.716586905028739e+00 4.633839033097900e+00 9.250597854800999e+03 + 55200 1.022932063234721e+00 -6.042260132103272e+00 -5.948091430959963e+00 3.499188618560086e+00 5.039919873084377e+00 9.058376620517478e+03 + 55220 9.757458458560104e-01 -5.954292452735425e+00 -6.011179630911383e+00 3.900687110733684e+00 4.574032130384962e+00 9.251361420952138e+03 + 55240 9.389649213523840e-01 -5.874140103945586e+00 -6.033319059406761e+00 4.298764354131391e+00 4.384734159009579e+00 9.319601239366635e+03 + 55260 9.946657597009888e-01 -5.922339478330656e+00 -6.038766369377173e+00 4.019102565512342e+00 4.350561340120081e+00 9.336432358150641e+03 + 55280 1.003719620372902e+00 -5.890714058554066e+00 -5.987451573450800e+00 4.289769854373478e+00 4.734288073754383e+00 9.178533761435941e+03 + 55300 1.050497913464824e+00 -5.905530937036614e+00 -6.024943988755128e+00 4.117169829904961e+00 4.431481607827222e+00 9.293766085160343e+03 + 55320 1.112526671971221e+00 -5.948367231417799e+00 -5.980672161725514e+00 3.936704279960938e+00 4.751204370962229e+00 9.157780324115078e+03 + 55340 1.016488154602651e+00 -5.771073711879894e+00 -5.987595836630696e+00 4.912957651850943e+00 4.669654104841324e+00 9.178992888509098e+03 + 55360 1.105611828822873e+00 -5.880475598691084e+00 -6.014110082729380e+00 4.308703877871091e+00 4.541353990653623e+00 9.260402622250651e+03 + 55380 1.089980409436933e+00 -5.849580734757785e+00 -6.047324238803346e+00 4.432728315479078e+00 4.297254514541114e+00 9.362905238681187e+03 + 55400 1.097075063278465e+00 -5.866890546706975e+00 -6.036525779544235e+00 4.386364301712217e+00 4.412292543793226e+00 9.329505279566192e+03 + 55420 1.156385398999602e+00 -5.971583433138955e+00 -6.015968299563276e+00 3.795896826138697e+00 4.541032054594366e+00 9.266132231199490e+03 + 55440 1.124125805405444e+00 -5.952429483686296e+00 -6.010160664398855e+00 3.970964883794006e+00 4.639463510271151e+00 9.248266180271212e+03 + 55460 1.084730616358355e+00 -5.925355026669000e+00 -6.013644109129942e+00 4.107280211759968e+00 4.600310637577887e+00 9.258956938090307e+03 + 55480 1.042071564802017e+00 -5.894735566860745e+00 -6.039219353097935e+00 4.210162146066237e+00 4.380513886698632e+00 9.337818467100195e+03 + 55500 1.088584166860195e+00 -5.990132025178116e+00 -6.012086596631864e+00 3.733941824554420e+00 4.607875277808050e+00 9.254191220850749e+03 + 55520 1.061617716597617e+00 -5.975868640789428e+00 -6.047548502808436e+00 3.780379743758998e+00 4.368782883623060e+00 9.363598324419467e+03 + 55540 1.034121915376424e+00 -5.959283875638091e+00 -6.008456345762722e+00 3.912623106705584e+00 4.630267173834794e+00 9.243025501960459e+03 + 55560 1.093859992234341e+00 -6.070580067656937e+00 -5.980007397065632e+00 3.337672564106120e+00 4.857754854716863e+00 9.155759791247579e+03 + 55580 9.566203413833300e-01 -5.887531972194019e+00 -6.037963592697292e+00 4.252954855630685e+00 4.389153211482850e+00 9.333960550969021e+03 + 55600 1.025480205622033e+00 -6.007681018618406e+00 -5.999278889688592e+00 3.645061854153735e+00 4.693308178693976e+00 9.214829863611423e+03 + 55620 9.513038289856632e-01 -5.913230795278197e+00 -6.033666116684616e+00 4.063462268589619e+00 4.371904015768207e+00 9.320721088537837e+03 + 55640 1.020012619693743e+00 -6.030985173723627e+00 -5.991087301259124e+00 3.554355207188761e+00 4.783454965055747e+00 9.189727604227030e+03 + 55660 9.955084976156965e-01 -6.009609723541578e+00 -6.013743522741241e+00 3.614308072157878e+00 4.590571157450053e+00 9.259300975532864e+03 + 55680 9.734126186978457e-01 -5.991450905440539e+00 -5.974970560861168e+00 3.790911455737395e+00 4.885544144637227e+00 9.140375517365046e+03 + 55700 1.017463561659404e+00 -6.068633190370437e+00 -5.974167564515071e+00 3.334161740157576e+00 4.876597982327446e+00 9.137924059292682e+03 + 55720 9.016848687903686e-01 -5.907412272007081e+00 -6.044157383348771e+00 4.175857516686893e+00 4.390645926125321e+00 9.353065338421307e+03 + 55740 9.316667071629132e-01 -5.959013416466711e+00 -6.002395104993873e+00 3.925452789562032e+00 4.676348420744459e+00 9.224400588417364e+03 + 55760 9.816967471595023e-01 -6.037058022086589e+00 -6.056485922305524e+00 3.412453721465548e+00 4.300895711950579e+00 9.391279121786994e+03 + 55780 1.050826436263069e+00 -6.143519535916854e+00 -5.999571041252516e+00 2.897027608413515e+00 4.723602140733705e+00 9.215763582231033e+03 + 55800 9.343570623732697e-01 -5.975632599346230e+00 -6.016620454024102e+00 3.832099339246892e+00 4.596740734836540e+00 9.268143109914625e+03 + 55820 8.920063680650064e-01 -5.915688413919550e+00 -6.006113624394009e+00 4.114076848809161e+00 4.594841297008720e+00 9.235842715184852e+03 + 55840 1.018585199258887e+00 -6.100168250479660e+00 -5.995918808549498e+00 3.155658339531565e+00 4.754274767643558e+00 9.204530856727113e+03 + 55860 1.027978787203595e+00 -6.106059380222162e+00 -5.965319799814040e+00 3.155703645541824e+00 4.963852095624945e+00 9.110908513294151e+03 + 55880 9.633849779374750e-01 -5.998530771623769e+00 -5.965098972454284e+00 3.747359767868500e+00 4.939330332253889e+00 9.110227169874686e+03 + 55900 9.655536608310907e-01 -5.981104058979021e+00 -5.982636216164012e+00 3.793151594231217e+00 4.784353710574440e+00 9.163810563161089e+03 + 55920 9.823924119874227e-01 -5.974510960398534e+00 -5.985313642262334e+00 3.818212715053187e+00 4.756182044081633e+00 9.172015432099062e+03 + 55940 1.032656885261784e+00 -6.011215459175149e+00 -5.976073850368974e+00 3.660861567971334e+00 4.862650123882776e+00 9.143746804605693e+03 + 55960 9.939667533199624e-01 -5.913112993646610e+00 -6.016688773488377e+00 4.181961101695908e+00 4.587212945544356e+00 9.268323804607100e+03 + 55980 9.983141832414656e-01 -5.880698794450320e+00 -6.042952651298353e+00 4.326256037608383e+00 4.394569282883784e+00 9.349353386667161e+03 + 56000 1.039149018701382e+00 -5.913084977086940e+00 -6.054488903224580e+00 4.146310074314796e+00 4.334346848245617e+00 9.385077244215072e+03 + 56020 1.025451422798633e+00 -5.873116958264387e+00 -6.052089726505939e+00 4.347904218908828e+00 4.320214887719460e+00 9.377672502415082e+03 + 56040 1.021208319214640e+00 -5.857100326995289e+00 -6.035330016219193e+00 4.475947618407144e+00 4.452525161928213e+00 9.325812549814656e+03 + 56060 1.030858021307608e+00 -5.869880559313112e+00 -6.021892795614305e+00 4.380976252301828e+00 4.508098467642837e+00 9.284387117811446e+03 + 56080 1.065852500831557e+00 -5.927300597434035e+00 -6.076238924764858e+00 4.058357306633727e+00 4.203130382968475e+00 9.452550266989369e+03 + 56100 1.074075861116391e+00 -5.955924391731622e+00 -6.030868297415966e+00 3.908348853706138e+00 4.478009349734716e+00 9.312026788604937e+03 + 56120 1.025670796687410e+00 -5.906532867536681e+00 -6.042144879774038e+00 4.168021381435588e+00 4.389316221277615e+00 9.346863565357722e+03 + 56140 1.054818571698804e+00 -5.980082417718068e+00 -5.992762015454076e+00 3.807986750527896e+00 4.735178538166328e+00 9.194814605547002e+03 + 56160 9.409868717810627e-01 -5.845145403813857e+00 -6.010183019715241e+00 4.564794814707497e+00 4.617123284713230e+00 9.248300628329036e+03 + 56180 1.055596169298405e+00 -6.049438716939580e+00 -5.968341160540373e+00 3.483142603507695e+00 4.948817322158234e+00 9.120093940126502e+03 + 56200 1.045716103145949e+00 -6.064447490145087e+00 -5.968478415029199e+00 3.350172839431433e+00 4.901242119913240e+00 9.120550001926709e+03 + 56220 9.755951976669409e-01 -5.985229544020561e+00 -6.046303361110106e+00 3.775967413321307e+00 4.425272104450487e+00 9.359733138495430e+03 + 56240 1.026079325251729e+00 -6.079483167986101e+00 -6.017662865518167e+00 3.299141869187946e+00 4.654123612619711e+00 9.271362393128948e+03 + 56260 9.945850069097829e-01 -6.047616465830705e+00 -6.029298684258867e+00 3.472515564667849e+00 4.577699101120877e+00 9.307232902222595e+03 + 56280 9.988156772943324e-01 -6.064912080539905e+00 -6.022754365581736e+00 3.340456937985919e+00 4.582533061161027e+00 9.287055085978363e+03 + 56300 9.823705468889617e-01 -6.047699836042675e+00 -6.003558300431317e+00 3.460867563241248e+00 4.714335091602222e+00 9.227978900589800e+03 + 56320 1.033589837614554e+00 -6.125765140487413e+00 -5.988513581527479e+00 2.973265320312772e+00 4.761385011470823e+00 9.181844810621227e+03 + 56340 9.417874200101379e-01 -5.989156383444662e+00 -5.979039338247480e+00 3.828400792981507e+00 4.886494432111414e+00 9.152823359135948e+03 + 56360 9.334070013992690e-01 -5.971421609174882e+00 -6.043305268954916e+00 3.879016956373971e+00 4.466249857956610e+00 9.350459522516427e+03 + 56380 1.015515181904099e+00 -6.086605856452263e+00 -5.997282120100904e+00 3.223500323506606e+00 4.736411040439638e+00 9.208714137453064e+03 + 56400 9.755823923099267e-01 -6.020370895600933e+00 -5.998850826841504e+00 3.584727384905610e+00 4.708298949942129e+00 9.213512619284733e+03 + 56420 9.851843191454546e-01 -6.025115211275429e+00 -6.011267639750456e+00 3.530935112416006e+00 4.610450011017167e+00 9.251681900666053e+03 + 56440 1.028269649981075e+00 -6.078692816190651e+00 -5.996338665471120e+00 3.296845437013372e+00 4.769735714708560e+00 9.205820374717281e+03 + 56460 9.089466572814471e-01 -5.892000696594678e+00 -6.021070986374909e+00 4.264845658933549e+00 4.523704081452676e+00 9.281857097538981e+03 + 56480 1.013110233826326e+00 -6.034863100746683e+00 -5.993118663296807e+00 3.486262069885783e+00 4.725965089653786e+00 9.195911844526729e+03 + 56500 9.886702349680662e-01 -5.983879248454703e+00 -5.984045134981699e+00 3.768288006784778e+00 4.767335460675914e+00 9.168132227536606e+03 + 56520 1.013906284555558e+00 -6.004329475575982e+00 -5.990091341160653e+00 3.616110556309172e+00 4.697868127466169e+00 9.186674374135604e+03 + 56540 9.855105038844005e-01 -5.943464012966727e+00 -6.020479963063310e+00 4.025168299469722e+00 4.582930795835384e+00 9.280016678033686e+03 + 56560 1.043172397299196e+00 -6.008598965030396e+00 -6.010197905886804e+00 3.673385395858497e+00 4.664204030025711e+00 9.248368710278683e+03 + 56580 1.023343623017774e+00 -5.958142121203055e+00 -6.039819234337847e+00 3.907255434347916e+00 4.438252811235531e+00 9.339688247693217e+03 + 56600 1.042007764319347e+00 -5.963496501934392e+00 -6.052569335342199e+00 3.888074089360232e+00 4.376604095956186e+00 9.379122786065747e+03 + 56620 1.063884652389014e+00 -5.973364932364444e+00 -6.017332654570086e+00 3.831074014335827e+00 4.578604549448007e+00 9.270324883452928e+03 + 56640 1.062321971838475e+00 -5.946057846264555e+00 -5.998338722768922e+00 3.988828803320648e+00 4.688623919993076e+00 9.211900223358711e+03 + 56660 1.022872875248082e+00 -5.858963800993803e+00 -5.991219871799985e+00 4.480941777114355e+00 4.721506951984446e+00 9.190059317487283e+03 + 56680 1.069754767079086e+00 -5.892087251754068e+00 -5.984355488514542e+00 4.295032096131870e+00 4.765213602189740e+00 9.169045797722283e+03 + 56700 1.042928382003904e+00 -5.811732267379496e+00 -6.031865657083053e+00 4.716461373367831e+00 4.452421384158042e+00 9.315121193834564e+03 + 56720 1.080094737627312e+00 -5.831886472625617e+00 -6.013165925960132e+00 4.631589328185113e+00 4.590654654233581e+00 9.257495152200509e+03 + 56740 1.109163808771727e+00 -5.849771890585469e+00 -6.017473815503898e+00 4.493429985222420e+00 4.530459580551795e+00 9.270761738506430e+03 + 56760 1.122903417993812e+00 -5.856923770969502e+00 -6.045075800221126e+00 4.430027111029858e+00 4.349629042634603e+00 9.355925115914017e+03 + 56780 1.151342591475217e+00 -5.902947549290310e+00 -6.012452976940498e+00 4.254494423834729e+00 4.625697312357187e+00 9.255298072410498e+03 + 56800 1.080357677372354e+00 -5.818592401894030e+00 -6.034483987144625e+00 4.656992975203304e+00 4.417310083579545e+00 9.323226527761772e+03 + 56820 1.096327290881824e+00 -5.881215646890295e+00 -6.020525808963447e+00 4.437635145363696e+00 4.637694636561755e+00 9.280145874786576e+03 + 56840 1.160402640937940e+00 -6.029348992004258e+00 -6.009935094157372e+00 3.547569445520745e+00 4.659047051248545e+00 9.247581332670306e+03 + 56860 1.059281607146096e+00 -5.934349560421052e+00 -6.034831366130899e+00 4.047995915223286e+00 4.471013837328162e+00 9.324284288998719e+03 + 56880 1.052277321125191e+00 -5.972654259348827e+00 -6.025917387038327e+00 3.884107363450663e+00 4.578262241815182e+00 9.296802837442336e+03 + 56900 1.044680114938570e+00 -5.996633305663630e+00 -6.037916108184477e+00 3.763585143706204e+00 4.526532903138454e+00 9.333799790540577e+03 + 56920 1.007494265013524e+00 -5.967378117126358e+00 -6.033166539086237e+00 3.939001680100704e+00 4.561234380481684e+00 9.319132072026696e+03 + 56940 1.036802536818388e+00 -6.029765513772059e+00 -6.029008850832159e+00 3.557888680597914e+00 4.562233556292036e+00 9.306303674225164e+03 + 56960 1.023911873511651e+00 -6.030893610476424e+00 -6.019342415759006e+00 3.547069041608787e+00 4.613397789217809e+00 9.276513347194441e+03 + 56980 9.817072566260552e-01 -5.984067445975617e+00 -6.017582310939507e+00 3.843938495012968e+00 4.651490953981719e+00 9.271108315011519e+03 + 57000 9.881310994650196e-01 -6.007637502929379e+00 -6.056292028966869e+00 3.616005428426002e+00 4.336623610655167e+00 9.390686429850237e+03 + 57020 9.932271150371151e-01 -6.030434013677722e+00 -6.000643093010705e+00 3.536701420034531e+00 4.707765496634615e+00 9.219027618904131e+03 + 57040 9.944474163092226e-01 -6.046335931354329e+00 -5.952004167152108e+00 3.458789126862821e+00 5.000456714705307e+00 9.070286975695562e+03 + 57060 9.583185620949127e-01 -6.001959682413293e+00 -5.961575805638782e+00 3.684676203445138e+00 4.916566673269116e+00 9.099440008091991e+03 + 57080 9.287422651177679e-01 -5.962847244577373e+00 -5.977009729309587e+00 3.918750699609405e+00 4.837427520639608e+00 9.146619273705972e+03 + 57100 1.049001310260238e+00 -6.142087480980150e+00 -5.963581505621869e+00 2.938581897679294e+00 4.963590831896952e+00 9.105610851167437e+03 + 57120 9.353906422856642e-01 -5.972667092302700e+00 -6.002778608932171e+00 3.820552664312164e+00 4.647647676083604e+00 9.225586775977030e+03 + 57140 1.017356441202684e+00 -6.089020286966928e+00 -5.977212437047312e+00 3.240259563641431e+00 4.882277540088723e+00 9.147220691358563e+03 + 57160 9.428899367323355e-01 -5.968490377358701e+00 -6.032484266455948e+00 3.859636782058146e+00 4.492173967839420e+00 9.317054517648134e+03 + 57180 9.899462962479102e-01 -6.026099141188388e+00 -6.027557761752623e+00 3.551842720385166e+00 4.543467095384520e+00 9.301842031793221e+03 + 57200 9.633362094653253e-01 -5.971626179262657e+00 -6.009738510388729e+00 3.849751340378201e+00 4.630904437188113e+00 9.246954035107818e+03 + 57220 9.855941318345693e-01 -5.984141230139588e+00 -5.980930765114614e+00 3.812147007925950e+00 4.830581994917205e+00 9.158595257489025e+03 + 57240 9.924719117544981e-01 -5.970521169475893e+00 -5.968321467264085e+00 3.831176395825086e+00 4.843807426328107e+00 9.120031065975980e+03 + 57260 1.012245615897856e+00 -5.968733817272671e+00 -5.981840224525186e+00 3.853518201688188e+00 4.778259183034283e+00 9.161360148450523e+03 + 57280 1.059622582346316e+00 -6.003984260960687e+00 -5.972144965366938e+00 3.664441527663695e+00 4.847267690078072e+00 9.131726165004691e+03 + 57300 1.057054458241929e+00 -5.967348296094404e+00 -5.955631902390244e+00 3.901245638874953e+00 4.968522984630303e+00 9.081322466063792e+03 + 57320 1.064254416556010e+00 -5.947339031076265e+00 -6.014480716611390e+00 3.941125156420452e+00 4.555587207935502e+00 9.261534830670427e+03 + 57340 1.044770959759344e+00 -5.895053069737464e+00 -6.033097933827868e+00 4.239085076468349e+00 4.446410104487569e+00 9.318895841940406e+03 + 57360 9.737701922261436e-01 -5.775944253237927e+00 -6.012805673177283e+00 4.845670450349269e+00 4.485575522871218e+00 9.256371885669823e+03 + 57380 1.107727648014548e+00 -5.965879532501098e+00 -5.988350372405630e+00 3.849266304574293e+00 4.720235264491235e+00 9.181280771435897e+03 + 57400 1.008694420225550e+00 -5.817132338480546e+00 -6.034744079716493e+00 4.698923861160863e+00 4.449363567675932e+00 9.323999093606748e+03 + 57420 1.105811393643516e+00 -5.969307673847702e+00 -6.013720910759660e+00 3.896340700518366e+00 4.641313021243700e+00 9.259202886070319e+03 + 57440 1.023618517384799e+00 -5.865914725180268e+00 -5.989594445565833e+00 4.446760138263000e+00 4.736572044434211e+00 9.185122623150686e+03 + 57460 1.062407034581622e+00 -5.952668616727086e+00 -6.004526511973320e+00 3.952167924999910e+00 4.654391865512683e+00 9.230949903871113e+03 + 57480 1.040886785353600e+00 -5.963029953947366e+00 -6.032563233604392e+00 3.865598482252332e+00 4.466327630221438e+00 9.317237323479048e+03 + 57500 9.790417855937503e-01 -5.922453568029830e+00 -6.069954425287847e+00 4.119591844033165e+00 4.272619095973744e+00 9.433008044887905e+03 + 57520 9.930817501617136e-01 -5.999308353778441e+00 -5.993705556230679e+00 3.688881443198354e+00 4.721053573747724e+00 9.197752725467595e+03 + 57540 9.876007018779281e-01 -6.034489428738645e+00 -5.991819320263332e+00 3.458217780975893e+00 4.703236147019089e+00 9.191968558355142e+03 + 57560 9.418113112230918e-01 -5.992578461623830e+00 -6.023310553550764e+00 3.727930972665919e+00 4.551462545045609e+00 9.288760697526192e+03 + 57580 1.004916956782298e+00 -6.098771133345769e+00 -6.003911592017036e+00 3.197577641938295e+00 4.742275807714464e+00 9.229073127371828e+03 + 57600 9.766607406040632e-01 -6.063090098960552e+00 -5.975426064675958e+00 3.370480900614292e+00 4.873861351441887e+00 9.141781752892832e+03 + 57620 9.545924470277579e-01 -6.031495924674497e+00 -5.988531779944429e+00 3.521457261600491e+00 4.768164029320451e+00 9.181869645858384e+03 + 57640 9.496310113316316e-01 -6.019649148273940e+00 -6.019078602903575e+00 3.561269130591984e+00 4.564545290400227e+00 9.275727725825323e+03 + 57660 9.662756568821931e-01 -6.036515837542882e+00 -6.020375784318530e+00 3.496159518074748e+00 4.588838201354143e+00 9.279720538069540e+03 + 57680 9.226061635702377e-01 -5.961195641010880e+00 -6.026249904950273e+00 3.933104573931325e+00 4.559552923276526e+00 9.297813879920295e+03 + 57700 9.728989657045495e-01 -6.023092392790147e+00 -6.013904586164516e+00 3.609250778579567e+00 4.662008586032417e+00 9.259780057112965e+03 + 57720 1.026857242939699e+00 -6.088064748481124e+00 -6.011892174236086e+00 3.218736023691536e+00 4.656130732674319e+00 9.253600034595955e+03 + 57740 9.616087958023901e-01 -5.974460289279401e+00 -6.018605149236064e+00 3.801944647927724e+00 4.548458030661565e+00 9.274251840686180e+03 + 57760 9.017365243110744e-01 -5.866155905888709e+00 -6.033897158540556e+00 4.414552523697464e+00 4.451356293095597e+00 9.321383147639672e+03 + 57780 1.009215416296311e+00 -6.001802484354576e+00 -6.048649601867689e+00 3.694891694523993e+00 4.425888296195692e+00 9.367008483551388e+03 + 57800 9.869540637013344e-01 -5.945129032735177e+00 -6.071369214271328e+00 3.967426448886344e+00 4.242535790900805e+00 9.437427182036952e+03 + 57820 1.079090528691349e+00 -6.063825653289923e+00 -5.975056177806851e+00 3.378637936292284e+00 4.888366001548018e+00 9.140633119438402e+03 + 57840 1.062168712706210e+00 -6.020752659478207e+00 -6.001054130768228e+00 3.611837708778588e+00 4.724949708968755e+00 9.220298538661389e+03 + 57860 1.012113268904240e+00 -5.933479122859675e+00 -6.023264783187129e+00 4.063021964185730e+00 4.547458808299463e+00 9.288603133355393e+03 + 57880 1.014029989602518e+00 -5.924458642866226e+00 -6.048437339494821e+00 4.103909568412108e+00 4.392004706729417e+00 9.366293338756879e+03 + 57900 1.034737059630698e+00 -5.946133345673997e+00 -5.991005235231488e+00 3.997775051975111e+00 4.740113718233530e+00 9.189442532993209e+03 + 57920 9.975769829732444e-01 -5.883932848960004e+00 -6.069157497684501e+00 4.267161889852428e+00 4.203573293454613e+00 9.430560822783234e+03 + 57940 1.056391573893178e+00 -5.970316289306072e+00 -5.993788590249609e+00 3.840423249348042e+00 4.705641665003421e+00 9.197965389400451e+03 + 57960 1.036136278117523e+00 -5.945496148064346e+00 -6.036434046227596e+00 3.937427514806779e+00 4.415248030959138e+00 9.329212612449717e+03 + 57980 1.055780350997631e+00 -5.988918749066907e+00 -5.951832263041441e+00 3.763980084153280e+00 4.976936426026670e+00 9.069774636076416e+03 + 58000 9.722186201223897e-01 -5.887921648978491e+00 -6.011406272439043e+00 4.284792441992179e+00 4.575724624897971e+00 9.252047334889430e+03 + 58020 9.892753563998048e-01 -5.944391353217111e+00 -5.958400841359021e+00 3.955493096255382e+00 4.875048447383253e+00 9.089755457590072e+03 + 58040 1.017090349879364e+00 -6.024261669526604e+00 -6.012492836787780e+00 3.583328741638772e+00 4.650907200446078e+00 9.255398206846623e+03 + 58060 9.609413814686971e-01 -5.987279903011562e+00 -5.985015657255357e+00 3.800995555038156e+00 4.813997204561188e+00 9.171082730402439e+03 + 58080 9.250515872857171e-01 -5.971300390703504e+00 -5.983791213497279e+00 3.850403997080369e+00 4.778679759649938e+00 9.167331015935142e+03 + 58100 1.028957759710241e+00 -6.156428038550610e+00 -5.960499631742572e+00 2.887147123536221e+00 5.012198355250941e+00 9.096194610195207e+03 + 58120 9.465074714557951e-01 -6.055516448960569e+00 -6.009353197949639e+00 3.372196236461099e+00 4.637272767505864e+00 9.245788737572311e+03 + 58140 9.009981557394455e-01 -6.000583998162687e+00 -6.011482039995545e+00 3.653772374838282e+00 4.591194132167493e+00 9.252347170197800e+03 + 58160 9.548890324936343e-01 -6.087497140621374e+00 -5.982368381751807e+00 3.213745511631184e+00 4.817411113683093e+00 9.163028007857531e+03 + 58180 9.345650586721894e-01 -6.057741609827429e+00 -5.985198312733669e+00 3.414879053632714e+00 4.831433891584032e+00 9.171670251939116e+03 + 58200 9.405401305137778e-01 -6.060977105640050e+00 -6.039589953910495e+00 3.301774842930443e+00 4.424583177812584e+00 9.338998112873498e+03 + 58220 9.626561454899512e-01 -6.084293176519750e+00 -5.969664768592448e+00 3.265293986804427e+00 4.923508043811789e+00 9.124160053826417e+03 + 58240 9.270180032990346e-01 -6.014741347393427e+00 -5.977841745455129e+00 3.618561246200657e+00 4.830444470725308e+00 9.149136326793328e+03 + 58260 9.463769950971712e-01 -6.018013687787561e+00 -5.995199538896647e+00 3.623873048097875e+00 4.754875421507637e+00 9.202304735408723e+03 + 58280 1.015795560186022e+00 -6.089140625158183e+00 -5.983081467365432e+00 3.228884303306965e+00 4.837892399954571e+00 9.165188960611073e+03 + 58300 9.735466747341770e-01 -5.993139092488436e+00 -6.039437567003294e+00 3.707200482835068e+00 4.441347477504975e+00 9.338511681890948e+03 + 58320 1.010679302683683e+00 -6.017902124342816e+00 -6.044744987872637e+00 3.520556012845598e+00 4.366420136537662e+00 9.354920242271317e+03 + 58340 9.862955960414929e-01 -5.957438907562468e+00 -6.029152647246574e+00 3.924506670394020e+00 4.512715279462530e+00 9.306749301335758e+03 + 58360 1.015716838369209e+00 -5.980523933430026e+00 -6.008644091437125e+00 3.824032900892910e+00 4.662562602035759e+00 9.243599075085338e+03 + 58380 1.000953129245683e+00 -5.944295554798329e+00 -6.047164505604340e+00 3.978475599436746e+00 4.387786164989943e+00 9.362399003050972e+03 + 58400 1.036237408123727e+00 -5.989256607088601e+00 -6.035462718770937e+00 3.739343585984721e+00 4.474020942332073e+00 9.326243935908011e+03 + 58420 1.049575671852772e+00 -6.008574264300758e+00 -6.013571430175532e+00 3.666446439310009e+00 4.637751939548137e+00 9.258763597952779e+03 + 58440 9.848895708128661e-01 -5.916241870635173e+00 -6.088689485486416e+00 4.089582052074520e+00 4.099361161416531e+00 9.491303864278783e+03 + 58460 9.997794403643350e-01 -5.944423608522742e+00 -6.006878710635573e+00 4.033470899491953e+00 4.674844038264260e+00 9.238152055147159e+03 + 58480 1.029745252334780e+00 -5.994204035883075e+00 -5.973477628551382e+00 3.754758900632710e+00 4.873773138932457e+00 9.135783552294077e+03 + 58500 9.824239811942896e-01 -5.927680904779300e+00 -6.005382219732033e+00 4.106446888337884e+00 4.660273913639661e+00 9.233554385645566e+03 + 58520 1.013785266788580e+00 -5.978359796179875e+00 -6.057679390289384e+00 3.808500461927653e+00 4.353035077883332e+00 9.394945204191306e+03 + 58540 1.020223915108273e+00 -5.995000101969616e+00 -6.034675127843400e+00 3.759027280633647e+00 4.531207142375971e+00 9.323810228861088e+03 + 58560 1.049820671769805e+00 -6.049538490087009e+00 -6.013435151050794e+00 3.452549896899854e+00 4.659860856619462e+00 9.258358882050312e+03 + 58580 1.023817606463530e+00 -6.025000183342135e+00 -5.979100938761216e+00 3.548228647283965e+00 4.811789212552741e+00 9.153007014583156e+03 + 58600 1.001786694671557e+00 -6.004001405144667e+00 -5.989820972987230e+00 3.687196579816750e+00 4.768622815679538e+00 9.185806519772372e+03 + 58620 9.760881353313391e-01 -5.979401440291658e+00 -6.052215553407965e+00 3.745134136918197e+00 4.327024231456778e+00 9.378023097258596e+03 + 58640 1.041041770283404e+00 -6.091352135929243e+00 -5.976831283966371e+00 3.168558675902915e+00 4.826155129918286e+00 9.146067276572352e+03 + 58660 8.907696890373128e-01 -5.880241590152331e+00 -6.040898313887606e+00 4.374932233941744e+00 4.452416464706151e+00 9.342999180858635e+03 + 58680 1.042110042844660e+00 -6.116891263112340e+00 -5.970412315760102e+00 3.068964151075133e+00 4.910068934315525e+00 9.126450842405946e+03 + 58700 9.564147636154118e-01 -6.000206546084813e+00 -5.992272859454530e+00 3.718103563471132e+00 4.763660019836260e+00 9.193319454168653e+03 + 58720 9.493533028151828e-01 -6.001615373072302e+00 -5.993906429687677e+00 3.674705604802272e+00 4.718971550671920e+00 9.198325514506814e+03 + 58740 9.778723369098564e-01 -6.057575189122179e+00 -5.978671594160485e+00 3.354849510727234e+00 4.807926163289142e+00 9.151680828292765e+03 + 58760 9.834853128029232e-01 -6.081419096241451e+00 -5.987781691200472e+00 3.219503922854200e+00 4.757184392941101e+00 9.179587018023905e+03 + 58780 9.232993974664780e-01 -6.008118864559579e+00 -6.038410195288225e+00 3.561699901435518e+00 4.387762392823354e+00 9.335360113518809e+03 + 58800 9.110415095794894e-01 -6.009812515306396e+00 -5.997068416983981e+00 3.663861854574672e+00 4.737040439284820e+00 9.208052963196506e+03 + 58820 9.171905442024617e-01 -6.038226507333606e+00 -5.953344046210603e+00 3.483919084406133e+00 4.971327311692824e+00 9.074372511507287e+03 + 58840 9.367233628599629e-01 -6.079964248527479e+00 -5.962563225052993e+00 3.295792494421328e+00 4.969927338961492e+00 9.102491936766615e+03 + 58860 9.490390579347927e-01 -6.105172693985501e+00 -6.002904290649671e+00 3.094225379504029e+00 4.681466377442635e+00 9.225992817715623e+03 + 58880 9.174405511196609e-01 -6.061021541710738e+00 -5.995624345518920e+00 3.324769962496906e+00 4.700290783213729e+00 9.203638699259171e+03 + 58900 9.326461484994001e-01 -6.079713223268204e+00 -5.961488583842024e+00 3.274276633133124e+00 4.953140807922074e+00 9.099202310953411e+03 + 58920 9.107726089232026e-01 -6.032820528488055e+00 -5.997525652005759e+00 3.544328132470887e+00 4.746996775096717e+00 9.209459443762575e+03 + 58940 9.484697630993920e-01 -6.062971743756291e+00 -6.032085452377691e+00 3.326591841704096e+00 4.503945706438163e+00 9.315820168886823e+03 + 58960 9.578025802011089e-01 -6.047473089778261e+00 -5.949978583372001e+00 3.445800540362444e+00 5.005629083373298e+00 9.064120104169011e+03 + 58980 9.324328469124796e-01 -5.973860725138090e+00 -5.979152487261608e+00 3.832670399513826e+00 4.802284282503045e+00 9.153134848223955e+03 + 59000 9.770465612525301e-01 -5.998081855298754e+00 -6.001402246666762e+00 3.649133619328003e+00 4.630067418263993e+00 9.221332833053100e+03 + 59020 9.690529917751355e-01 -5.949282382277953e+00 -5.975399660343177e+00 3.927877626563679e+00 4.777908174277447e+00 9.141694267949115e+03 + 59040 9.607198335883824e-01 -5.906335927435333e+00 -6.000766188161747e+00 4.164338615885382e+00 4.622105445758694e+00 9.219386821307584e+03 + 59060 9.714203768033525e-01 -5.896326777417968e+00 -6.052121065529901e+00 4.276731485878347e+00 4.382136574451459e+00 9.377749950615229e+03 + 59080 1.036719879096489e+00 -5.974027622621298e+00 -6.010333264044967e+00 3.825268702143613e+00 4.616796090809050e+00 9.248792131102942e+03 + 59100 1.009437856584863e+00 -5.921752542342842e+00 -6.008039599674184e+00 4.125439207453054e+00 4.629965571377524e+00 9.241724674575711e+03 + 59120 1.064047069353855e+00 -5.996074529125561e+00 -6.023325356042254e+00 3.711306045477918e+00 4.554827580270433e+00 9.288750641498613e+03 + 59140 1.049637957546836e+00 -5.974113174287741e+00 -6.017543930393512e+00 3.829027547174884e+00 4.579641424727757e+00 9.270979826588762e+03 + 59160 1.018443655585699e+00 -5.932516656195644e+00 -5.984004217109235e+00 4.027181295732369e+00 4.731531753292229e+00 9.168006894355121e+03 + 59180 1.013066231459751e+00 -5.933141750402662e+00 -5.995323797841847e+00 4.074008683216666e+00 4.716949744180121e+00 9.202651583414037e+03 + 59200 1.020371451201160e+00 -5.952854377219450e+00 -6.004750241920226e+00 3.921436656178513e+00 4.623442570207553e+00 9.231611043780409e+03 + 59220 9.400231403723474e-01 -5.846871115518299e+00 -6.004101566023746e+00 4.546626704136605e+00 4.643785126000746e+00 9.229644703297890e+03 + 59240 1.019175951535978e+00 -5.980260359986271e+00 -5.973638901098907e+00 3.829780716447849e+00 4.867802158046546e+00 9.136305954977397e+03 + 59260 1.050038092042660e+00 -6.046307093560191e+00 -5.985506266464984e+00 3.492217051380323e+00 4.841344809458585e+00 9.172611256263888e+03 + 59280 1.008644728926918e+00 -6.008098933173460e+00 -6.013669339736386e+00 3.694749307556707e+00 4.662763171054755e+00 9.259067365774032e+03 + 59300 1.025178838465051e+00 -6.061681506729784e+00 -6.004221662217742e+00 3.362014822830067e+00 4.691958141900408e+00 9.230021293322692e+03 + 59320 1.009999596539260e+00 -6.074111188253026e+00 -6.009601375003241e+00 3.307565166167515e+00 4.677990496709119e+00 9.246551387740146e+03 + 59340 9.571529198653401e-01 -6.032016587211084e+00 -5.959309814924160e+00 3.537453480594878e+00 4.954947018403041e+00 9.092559681131092e+03 + 59360 9.730176158996492e-01 -6.086479840587167e+00 -5.995548438274640e+00 3.254842929349143e+00 4.776985113016702e+00 9.203377713571293e+03 + 59380 9.422490241251077e-01 -6.069310340203559e+00 -5.999325151090934e+00 3.319405393992802e+00 4.721271180050508e+00 9.214984378986424e+03 + 59400 8.998180077430101e-01 -6.027697213675223e+00 -6.007077183445922e+00 3.594513659950045e+00 4.712917064466057e+00 9.238767494097203e+03 + 59420 9.283716461808557e-01 -6.082639440284149e+00 -5.971608666823439e+00 3.312745776276151e+00 4.950301659444214e+00 9.130078818810061e+03 + 59440 8.650928054087145e-01 -5.993012559235851e+00 -5.978882759084366e+00 3.739022569572030e+00 4.820158068621367e+00 9.152330564534343e+03 + 59460 9.271127993966845e-01 -6.080465765863948e+00 -5.940846669217246e+00 3.289057879848301e+00 5.090772338779047e+00 9.036352077727162e+03 + 59480 9.327592697897629e-01 -6.073082435670546e+00 -5.966136647441862e+00 3.339297754929326e+00 4.953397020745673e+00 9.113385467163474e+03 + 59500 9.489087681937811e-01 -6.071925329641404e+00 -6.007135973492290e+00 3.333708247400490e+00 4.705738756529163e+00 9.238981572497831e+03 + 59520 1.049537194971701e+00 -6.185191701009839e+00 -5.960710469084625e+00 2.746777958129803e+00 5.035783930202754e+00 9.096850926565003e+03 + 59540 9.918911676847204e-01 -6.058541227235890e+00 -5.992207536761911e+00 3.367235915385579e+00 4.748134231192592e+00 9.193137105638227e+03 + 59560 9.299704039608901e-01 -5.920906621461212e+00 -6.034284225865150e+00 4.165931851281940e+00 4.514900101666948e+00 9.322585897197956e+03 + 59580 9.962039681197576e-01 -5.979156580076983e+00 -6.005555770294974e+00 3.801576497415016e+00 4.649988261921830e+00 9.234122523699627e+03 + 59600 9.925396140775055e-01 -5.947039222818939e+00 -6.019673924090196e+00 3.967771845668251e+00 4.550692150785006e+00 9.277546202765519e+03 + 59620 1.049828763370723e+00 -6.019256482919420e+00 -5.992194816583073e+00 3.610960701454307e+00 4.766352977336942e+00 9.193099288463351e+03 + 59640 1.026193966706725e+00 -5.979146024444496e+00 -6.072350604850524e+00 3.732157809527806e+00 4.196962685474189e+00 9.440474347348141e+03 + 59660 9.812451572079391e-01 -5.912009138192795e+00 -6.035483743724102e+00 4.147093161249686e+00 4.438082868655472e+00 9.326307032059536e+03 + 59680 1.054008849222161e+00 -6.022918866306718e+00 -6.024655093687268e+00 3.579199205384703e+00 4.569229519085265e+00 9.292897829485279e+03 + 59700 1.097691374778930e+00 -6.095928785413954e+00 -6.004636740247515e+00 3.211884095587965e+00 4.736097146331987e+00 9.231308553133722e+03 + 59720 9.649649211003423e-01 -5.910083010300154e+00 -6.017181033064592e+00 4.175703458586566e+00 4.560730038507704e+00 9.269860339638544e+03 + 59740 1.017694556757348e+00 -6.000361721176006e+00 -5.974641598734785e+00 3.701608733675957e+00 4.849297656909538e+00 9.139364178665923e+03 + 59760 1.068763034483956e+00 -6.088926211299348e+00 -5.948739070476043e+00 3.240579371179659e+00 5.045555627677004e+00 9.060350919707487e+03 + 59780 9.928050003212269e-01 -5.987501683076895e+00 -6.005960981907740e+00 3.732515535823041e+00 4.626519385369070e+00 9.235377231819260e+03 + 59800 9.972606190020818e-01 -6.007385378181562e+00 -5.977126276687540e+00 3.661333564392177e+00 4.835086007751674e+00 9.146960868619482e+03 + 59820 9.718024577862364e-01 -5.982968338981941e+00 -6.041952094670615e+00 3.714267580554281e+00 4.375573727683225e+00 9.346273115332533e+03 + 59840 9.773207509236299e-01 -6.003801888793769e+00 -6.010312159843920e+00 3.662573296641228e+00 4.625190312810067e+00 9.248747227750526e+03 + 59860 1.050650717314819e+00 -6.123942101180395e+00 -5.963042498502828e+00 3.021650297059060e+00 4.945560714766693e+00 9.103955717885674e+03 + 59880 1.024674214855225e+00 -6.096581652866909e+00 -5.977956362299416e+00 3.147689338141797e+00 4.828854113784729e+00 9.149512241975426e+03 + 59900 9.304978070163682e-01 -5.968145472557999e+00 -5.948252070193631e+00 3.874384019858534e+00 4.988615014728803e+00 9.058871658143815e+03 + 59920 9.821434165550241e-01 -6.050363128219010e+00 -5.999785005895893e+00 3.451744776141788e+00 4.742172181460259e+00 9.216383771453568e+03 + 59940 9.834417200027225e-01 -6.056789615698548e+00 -5.979365147298608e+00 3.358308356081999e+00 4.802891635032219e+00 9.153821410350085e+03 + 59960 9.010491803828863e-01 -5.934876171215766e+00 -6.020640005049570e+00 4.003312858019507e+00 4.510843652235413e+00 9.280498005108017e+03 + 59980 9.690452672105401e-01 -6.030508043114470e+00 -5.970228865956464e+00 3.538443615542470e+00 4.884575978956253e+00 9.125885808505822e+03 + 60000 9.792381169541542e-01 -6.034751237862288e+00 -5.983096174736600e+00 3.552081089490495e+00 4.848692455553380e+00 9.165202854529103e+03 + 60020 9.548227516055019e-01 -5.981247466664838e+00 -5.994726304508069e+00 3.821688320127290e+00 4.744290747388048e+00 9.200855732182981e+03 + 60040 9.979527318874679e-01 -6.020634287683200e+00 -6.002072250127325e+00 3.546580302127317e+00 4.653166394239182e+00 9.223407830809057e+03 + 60060 9.985033154936550e-01 -5.990409367849090e+00 -6.005134909552597e+00 3.744657925246870e+00 4.660101586015127e+00 9.232830278076048e+03 + 60080 1.003067708535689e+00 -5.963590367700278e+00 -6.012646064949436e+00 3.866237030038262e+00 4.584551625088980e+00 9.255917759904125e+03 + 60100 1.039270235986645e+00 -5.983957752547511e+00 -5.959136776300924e+00 3.808606913142085e+00 4.951132799783646e+00 9.092021955211525e+03 + 60120 1.004922349870197e+00 -5.900627041618872e+00 -5.989785639144635e+00 4.226171483712165e+00 4.714209019470856e+00 9.185711212574932e+03 + 60140 1.116034624702739e+00 -6.035564755738976e+00 -5.996202134777989e+00 3.507938625061452e+00 4.733964885965348e+00 9.205401351321241e+03 + 60160 1.062322547961327e+00 -5.935779131173446e+00 -6.036085822892444e+00 4.004272295647070e+00 4.428295749386206e+00 9.328144822588676e+03 + 60180 1.057893635779811e+00 -5.919284229888382e+00 -5.961648108770857e+00 4.103807998337169e+00 4.860548050004926e+00 9.099708498175036e+03 + 60200 9.748560885129710e-01 -5.792233099321571e+00 -6.049048916596278e+00 4.759663285874439e+00 4.284987120963788e+00 9.368181588047355e+03 + 60220 9.494807721140246e-01 -5.755502452100460e+00 -6.094995377963203e+00 4.911676229656985e+00 3.962255312992633e+00 9.510957019835512e+03 + 60240 1.127967930151936e+00 -6.028807417451349e+00 -5.963752663535212e+00 3.543855050797900e+00 4.917409514974986e+00 9.106120673892225e+03 + 60260 1.012856649063352e+00 -5.874253113070846e+00 -6.036246795348310e+00 4.369594725178610e+00 4.439401933100100e+00 9.328641437095515e+03 + 60280 1.099011325657470e+00 -6.027386822475330e+00 -6.003367199971078e+00 3.534024184355423e+00 4.671948573799405e+00 9.227368295864970e+03 + 60300 9.852177145575878e-01 -5.892417339376038e+00 -6.044359308391131e+00 4.269462342128125e+00 4.396988043099749e+00 9.353708528428149e+03 + 60320 1.018985787282739e+00 -5.982526383550416e+00 -6.015077729936632e+00 3.756331762446513e+00 4.569416894192292e+00 9.263396435323310e+03 + 60340 9.897738465928323e-01 -5.984957416050903e+00 -5.990424352556690e+00 3.821899981614300e+00 4.790507986192380e+00 9.187661850442728e+03 + 60360 9.842374109992664e-01 -6.014569366289045e+00 -5.977213323282850e+00 3.641877038054353e+00 4.856381217824900e+00 9.147195798214496e+03 + 60380 9.907865090611933e-01 -6.049343604455718e+00 -5.966617815175850e+00 3.409752350715614e+00 4.884776634535136e+00 9.114875553835702e+03 + 60400 1.032105636957626e+00 -6.126717269635181e+00 -5.977985729021436e+00 3.035461722573926e+00 4.889501244909573e+00 9.149609049905668e+03 + 60420 9.771762255801024e-01 -6.054158480868370e+00 -5.994651073951631e+00 3.396392257669266e+00 4.738092996926644e+00 9.200642749607810e+03 + 60440 9.031762377939777e-01 -5.946680915494948e+00 -6.031760646233129e+00 3.893261781962646e+00 4.404720802018232e+00 9.314789654392420e+03 + 60460 9.388292718965763e-01 -5.996534727594168e+00 -6.010677745527714e+00 3.682733688091846e+00 4.601522290492470e+00 9.249856179857614e+03 + 60480 9.873627427179477e-01 -6.063133338478625e+00 -5.987900193740066e+00 3.343922368069780e+00 4.775922727450110e+00 9.179946513406374e+03 + 60500 9.370560782276102e-01 -5.980311267746004e+00 -6.005273045864255e+00 3.804205833589085e+00 4.660871440811404e+00 9.233237680831988e+03 + 60520 9.864765489939564e-01 -6.041914265441079e+00 -6.012446990843739e+00 3.478306384346034e+00 4.647512035129967e+00 9.255280256539812e+03 + 60540 9.326923661394546e-01 -5.949700351775981e+00 -6.001604042494281e+00 3.917980113984412e+00 4.619941089809748e+00 9.221989860013951e+03 + 60560 9.970234961616862e-01 -6.029285495676776e+00 -6.006098734346889e+00 3.534762767101518e+00 4.667904738797450e+00 9.235777197239040e+03 + 60580 9.940548889875369e-01 -6.009163445049239e+00 -5.964183412777984e+00 3.677644769921884e+00 4.935927075860927e+00 9.107424332804623e+03 + 60600 1.007146094020540e+00 -6.009531698598634e+00 -6.006001910714903e+00 3.620633909298536e+00 4.640902497559830e+00 9.235481109277813e+03 + 60620 1.069602061730301e+00 -6.082618459807985e+00 -5.993352104430206e+00 3.217816424605439e+00 4.730397651108489e+00 9.196658495219208e+03 + 60640 1.006650009157978e+00 -5.970609021872706e+00 -5.990071495507388e+00 3.861167337119631e+00 4.749410801701226e+00 9.186611010544573e+03 + 60660 1.005227828344915e+00 -5.950959067603270e+00 -6.008654136144559e+00 3.936463294842549e+00 4.605169282995465e+00 9.243628219609025e+03 + 60680 1.066582331049393e+00 -6.025528292841015e+00 -5.991019025785428e+00 3.583998910075301e+00 4.782156461800302e+00 9.189503917892309e+03 + 60700 1.117092348006975e+00 -6.088157060598327e+00 -5.939413761200118e+00 3.255319489259864e+00 5.109426532355569e+00 9.031996575744522e+03 + 60720 9.625956845734682e-01 -5.848589657197572e+00 -6.001309347295468e+00 4.510397566093252e+00 4.633457472255471e+00 9.221036613344224e+03 + 60740 1.044336167894014e+00 -5.959810663420306e+00 -5.973060575799828e+00 3.883834983855806e+00 4.807751936555283e+00 9.134525576274162e+03 + 60760 1.059695795975601e+00 -5.972380785556971e+00 -5.982012728209041e+00 3.806016915248799e+00 4.750708810002308e+00 9.161902853821541e+03 + 60780 1.055664797979835e+00 -5.957674587342302e+00 -6.030007144556853e+00 3.879104531388129e+00 4.463759794435123e+00 9.309402160326657e+03 + 60800 1.069816866277536e+00 -5.976586612145033e+00 -6.023304957502297e+00 3.804703642498488e+00 4.536439673816496e+00 9.288742986466101e+03 + 60820 1.062399476041358e+00 -5.971377993451959e+00 -6.044660621699075e+00 3.812441846816844e+00 4.391641654971833e+00 9.354671110984058e+03 + 60840 1.030151148547479e+00 -5.941656545636704e+00 -6.032160811080040e+00 3.995587231840990e+00 4.475897734175540e+00 9.316039944154305e+03 + 60860 1.002194306715984e+00 -5.928823785041410e+00 -6.024714434158351e+00 4.022775230193277e+00 4.472156283933811e+00 9.293077712145256e+03 + 60880 1.016163647544101e+00 -5.989169687206058e+00 -5.977939496252956e+00 3.768585335724272e+00 4.833070830043414e+00 9.149449495707766e+03 + 60900 9.994709456385514e-01 -6.006795951104308e+00 -5.967397431450641e+00 3.724017947105854e+00 4.950250343858417e+00 9.117234160601323e+03 + 60920 9.663820711266167e-01 -5.996811115649066e+00 -6.044946342532825e+00 3.687287045879680e+00 4.410887124210847e+00 9.355566324412746e+03 + 60940 1.038629516177633e+00 -6.143238297816589e+00 -5.992780070404690e+00 2.908649708630718e+00 4.772604133765292e+00 9.194920335132474e+03 + 60960 9.409447798703757e-01 -6.026441553907702e+00 -6.025880451294283e+00 3.523568775119218e+00 4.526790713155822e+00 9.296668941049915e+03 + 60980 9.161091875284963e-01 -6.008204018811431e+00 -6.045780121907536e+00 3.594303053199751e+00 4.378535254338752e+00 9.358136795974515e+03 + 61000 9.404640611654228e-01 -6.055943371085851e+00 -5.997783641996533e+00 3.432801395375576e+00 4.766763559995425e+00 9.210259864537036e+03 + 61020 9.599047657803804e-01 -6.089217354468517e+00 -6.001468480695396e+00 3.194239741510166e+00 4.698107353809761e+00 9.221571128010715e+03 + 61040 9.363109466619237e-01 -6.053073461651056e+00 -5.988950033009683e+00 3.392337623898882e+00 4.760544274226159e+00 9.183174540948299e+03 + 61060 9.468843179242923e-01 -6.062203950736469e+00 -5.993478175476405e+00 3.339855210975870e+00 4.734489247798512e+00 9.197047075835977e+03 + 61080 9.254280787390773e-01 -6.016051775186869e+00 -6.029507036881855e+00 3.526034206429098e+00 4.448772011581473e+00 9.307855635808994e+03 + 61100 1.039004291442854e+00 -6.165515527969873e+00 -5.973311425285971e+00 2.828690471019324e+00 4.932356172119059e+00 9.135320950635514e+03 + 61120 9.594959663539009e-01 -6.024361794236742e+00 -5.996879920463199e+00 3.572574759638818e+00 4.730379931652723e+00 9.207477677052811e+03 + 61140 1.007581561662352e+00 -6.069680199972549e+00 -5.990115400904527e+00 3.338359159865723e+00 4.795232548727172e+00 9.186736517631556e+03 + 61160 9.485937097594010e-01 -5.950863867520932e+00 -6.026824484704687e+00 3.993448246558033e+00 4.557270627821386e+00 9.299576312302102e+03 + 61180 9.944136862052958e-01 -5.989060783777992e+00 -6.006290567860121e+00 3.749665195698111e+00 4.650729109198052e+00 9.236351574160662e+03 + 61200 9.984887612195634e-01 -5.966814287731852e+00 -6.007668106307779e+00 3.884134660623560e+00 4.649545712252594e+00 9.240596839098775e+03 + 61220 1.040807427699743e+00 -6.005258145185499e+00 -5.985942422903285e+00 3.677064826200536e+00 4.787978692643366e+00 9.173940232929590e+03 + 61240 1.089414784366308e+00 -6.060090801225584e+00 -6.007082181327001e+00 3.373893873118884e+00 4.678277571633968e+00 9.238787440009199e+03 + 61260 1.046411786180701e+00 -5.985240352229604e+00 -6.030274068416206e+00 3.817413535158887e+00 4.558822967870365e+00 9.310190443775948e+03 + 61280 1.056035978912185e+00 -5.995959241522528e+00 -6.027415047340622e+00 3.745531696052654e+00 4.564907591274943e+00 9.301422745368667e+03 + 61300 1.033156974770224e+00 -5.965141774874835e+00 -6.039410480917681e+00 3.945910442428725e+00 4.519448039285590e+00 9.338431388439487e+03 + 61320 1.013312180328338e+00 -5.941551462691994e+00 -6.044411352501586e+00 4.021472605571063e+00 4.430835200767878e+00 9.353882963391035e+03 + 61340 1.037598281110481e+00 -5.983954260842314e+00 -6.064012964460832e+00 3.750651476967456e+00 4.290942011745580e+00 9.414617692818625e+03 + 61360 1.004998317508862e+00 -5.945428885874893e+00 -6.085228230945821e+00 3.980961834751506e+00 4.178212361475509e+00 9.480537194400116e+03 + 61380 1.018498702157547e+00 -5.978309606784621e+00 -6.040685374907138e+00 3.826226516739375e+00 4.468055203560963e+00 9.342372809802431e+03 + 61400 1.007716173671424e+00 -5.975462018777636e+00 -6.003514039234251e+00 3.853859666460119e+00 4.692780623962099e+00 9.227840060418508e+03 + 61420 9.880656526509789e-01 -5.956926822752814e+00 -6.042720833059705e+00 3.898191510991679e+00 4.405549027229331e+00 9.348666215615733e+03 + 61440 9.874291487349396e-01 -5.967071512064733e+00 -6.039586042098338e+00 3.883802295978281e+00 4.467412642938063e+00 9.338959027710413e+03 + 61460 9.924733247488995e-01 -5.985493713578509e+00 -5.996881111113571e+00 3.778586339306887e+00 4.713198140466488e+00 9.207471323719788e+03 + 61480 9.631281098509382e-01 -5.950982340350132e+00 -6.001048120617838e+00 3.937292676363648e+00 4.649807218412020e+00 9.220259219041198e+03 + 61500 9.361042557513533e-01 -5.918616241918593e+00 -6.013710878955661e+00 4.084007775800443e+00 4.537959654086078e+00 9.259196738327104e+03 + 61520 1.009468985185843e+00 -6.033395656617728e+00 -5.987169519466180e+00 3.514338262576454e+00 4.779775895572249e+00 9.177693111382318e+03 + 61540 9.556579681725801e-01 -5.957172580295218e+00 -6.017298306528891e+00 3.904178258574752e+00 4.558927034114937e+00 9.270215413067812e+03 + 61560 9.493016130907036e-01 -5.951123769430280e+00 -6.020912843343474e+00 3.938270706976001e+00 4.537531044742161e+00 9.281327491324368e+03 + 61580 1.037133609177831e+00 -6.083773028666744e+00 -5.961337793561862e+00 3.227619683112565e+00 4.930661749876199e+00 9.098745281281510e+03 + 61600 9.209993876193883e-01 -5.912683875298553e+00 -6.002464343208392e+00 4.129167001124174e+00 4.613633660903372e+00 9.224595407017185e+03 + 61620 1.012222573951757e+00 -6.047183087064413e+00 -5.965112585669097e+00 3.436039060176421e+00 4.907300579557374e+00 9.110253947074481e+03 + 61640 9.664280932335220e-01 -5.973504711746660e+00 -5.986885508384360e+00 3.774597786567704e+00 4.697763181602450e+00 9.176829978170630e+03 + 61660 1.036531160506776e+00 -6.065130922450602e+00 -6.007152881282404e+00 3.343551953980373e+00 4.676470838441042e+00 9.239031127924982e+03 + 61680 1.014199404011539e+00 -6.014874229730343e+00 -6.027816433136993e+00 3.614197544157571e+00 4.539881409397086e+00 9.302650967495252e+03 + 61700 1.016295471701983e+00 -5.997420507484690e+00 -6.000594426829979e+00 3.713019977643822e+00 4.694794841600741e+00 9.218873357462166e+03 + 61720 1.060831796567663e+00 -6.035962188316041e+00 -5.985337403125397e+00 3.497339565054176e+00 4.788034915779042e+00 9.172084354306195e+03 + 61740 1.035991851464412e+00 -5.967014161010237e+00 -6.006532667371546e+00 3.875933199721967e+00 4.649011820726231e+00 9.237119818548326e+03 + 61760 1.080023941157050e+00 -6.000579166758146e+00 -6.034217350568420e+00 3.696632132375853e+00 4.503476475445142e+00 9.322368273422075e+03 + 61780 1.062602893011554e+00 -5.950961623579061e+00 -6.009858696879664e+00 3.968022687923110e+00 4.629826578738411e+00 9.247323719914541e+03 + 61800 1.118335344043172e+00 -6.015475846394401e+00 -5.980909432842675e+00 3.599413862162734e+00 4.797899557911956e+00 9.158488227975347e+03 + 61820 9.610002317869664e-01 -5.768557617158664e+00 -6.024690141942383e+00 4.951543759679800e+00 4.480791165991579e+00 9.292980825482138e+03 + 61840 1.098420872777274e+00 -5.964453910789782e+00 -6.054651850838824e+00 3.853128526932120e+00 4.335197997084409e+00 9.385587797816775e+03 + 61860 1.119415722735803e+00 -5.998990463036236e+00 -5.989918173227140e+00 3.691034930448727e+00 4.743129422464862e+00 9.186124315691568e+03 + 61880 1.001699767413489e+00 -5.836786097264923e+00 -5.977728184221703e+00 4.560488750339738e+00 4.751177476316445e+00 9.148778409895034e+03 + 61900 1.101105259157638e+00 -6.002350162134237e+00 -5.994388917414124e+00 3.684674353016960e+00 4.730389052198491e+00 9.199804330202260e+03 + 61920 1.039551142340384e+00 -5.940931384539250e+00 -5.976452180464294e+00 4.057764312329887e+00 4.853798405302881e+00 9.144875624319682e+03 + 61940 1.037405410506732e+00 -5.972682296274963e+00 -5.964697660482469e+00 3.839291942830466e+00 4.885140957169362e+00 9.108958826526086e+03 + 61960 1.043446167178061e+00 -6.019473090481974e+00 -5.956644510137300e+00 3.582769076996329e+00 4.943540508026832e+00 9.084420124386215e+03 + 61980 9.589419657618914e-01 -5.928355678297665e+00 -5.991438818023042e+00 4.098911166457329e+00 4.736678016069892e+00 9.190768453901737e+03 + 62000 9.821405620457598e-01 -5.992649620525007e+00 -6.006455700600505e+00 3.702573201448218e+00 4.623296553170721e+00 9.236896578024307e+03 + 62020 9.842293825081374e-01 -6.020439686979874e+00 -6.005505616664406e+00 3.610226137823618e+00 4.695979880614947e+00 9.233972563026253e+03 + 62040 1.000551788281075e+00 -6.064314678382662e+00 -5.985112643750659e+00 3.400438728845703e+00 4.855229068177914e+00 9.171393246754955e+03 + 62060 9.593068364601743e-01 -6.015030097043269e+00 -5.996061753521810e+00 3.608884926969083e+00 4.717804090810970e+00 9.204948673939070e+03 + 62080 1.023472256985552e+00 -6.116734315578851e+00 -5.984083782340442e+00 3.041016604804892e+00 4.802716494263512e+00 9.168277009890386e+03 + 62100 9.762887797877424e-01 -6.050965579699074e+00 -5.998078885214180e+00 3.466713601933390e+00 4.770397185855176e+00 9.211161761834483e+03 + 62120 9.447407732966406e-01 -6.004985256120595e+00 -5.999653336523449e+00 3.688132561703374e+00 4.718749269142074e+00 9.215975014772112e+03 + 62140 9.933132964820502e-01 -6.072519951410456e+00 -5.977780611571165e+00 3.318984350281193e+00 4.862992300503858e+00 9.148981168243648e+03 + 62160 1.009551985966084e+00 -6.088909984053010e+00 -5.985461198268279e+00 3.230840174528006e+00 4.824859111151795e+00 9.172483647851468e+03 + 62180 9.763340907078902e-01 -6.031322237201060e+00 -5.986546614788339e+00 3.555813514048211e+00 4.812922066947229e+00 9.175795971341797e+03 + 62200 9.323589307472874e-01 -5.956211193106879e+00 -5.975315632102532e+00 3.979437486727563e+00 4.869736841612140e+00 9.141401099590341e+03 + 62220 9.921276796266080e-01 -6.032010190942015e+00 -5.953483249220325e+00 3.519514096861025e+00 4.970427948231929e+00 9.074806502756534e+03 + 62240 1.031795470403309e+00 -6.073394737109822e+00 -5.975621310147115e+00 3.363814138061624e+00 4.925244286070406e+00 9.142351020155264e+03 + 62260 9.536112681182901e-01 -5.941010123343466e+00 -6.017098952205382e+00 3.990864012669904e+00 4.553950182636570e+00 9.269579131694525e+03 + 62280 9.726710372682733e-01 -5.951866606819493e+00 -6.064821691377742e+00 3.904137240938172e+00 4.255531665661865e+00 9.417112208307291e+03 + 62300 1.041694028801626e+00 -6.040611859169137e+00 -6.016182569229875e+00 3.494766937278481e+00 4.635043700530121e+00 9.266816534616410e+03 + 62320 9.925665925326822e-01 -5.959190845944978e+00 -6.014172567323170e+00 3.908856189388596e+00 4.593142636841126e+00 9.260606731811275e+03 + 62340 1.013881059759537e+00 -5.981518206312482e+00 -6.024099340382332e+00 3.795905825467764e+00 4.551398364229489e+00 9.291175801670208e+03 + 62360 1.092360232183733e+00 -6.092675483993644e+00 -5.989566658670199e+00 3.232684683346760e+00 4.824751514393130e+00 9.185062222362441e+03 + 62380 9.552773004690862e-01 -5.888134196823943e+00 -6.078204050171570e+00 4.304062659803792e+00 4.212652148666976e+00 9.458679765310550e+03 + 62400 1.041221254466387e+00 -6.016961725408295e+00 -6.043056347443240e+00 3.556368285361887e+00 4.406528927507516e+00 9.349704430984682e+03 + 62420 9.881448993843789e-01 -5.941758463387218e+00 -6.028034201348557e+00 4.042513925707521e+00 4.547105287206215e+00 9.303283867627364e+03 + 62440 9.500091774352003e-01 -5.889110561049678e+00 -6.017635532659334e+00 4.332753172385853e+00 4.594742896228135e+00 9.271266324650172e+03 + 62460 1.045942099718244e+00 -6.034245581843242e+00 -5.990229476258861e+00 3.537263342832827e+00 4.790010632568669e+00 9.187108585145739e+03 + 62480 1.041267220510514e+00 -6.031799315898267e+00 -6.027085624843991e+00 3.568428332643041e+00 4.595495076118024e+00 9.300386961457316e+03 + 62500 1.015133324984090e+00 -5.997820906667676e+00 -6.034237312335010e+00 3.694762993830391e+00 4.485654357067993e+00 9.322444632233706e+03 + 62520 9.207585674399991e-01 -5.860863511680568e+00 -6.090763760628489e+00 4.420798014465952e+00 4.100675208058444e+00 9.497787003394165e+03 + 62540 9.799539536238322e-01 -5.953868800956807e+00 -6.025698070383503e+00 3.952119446535373e+00 4.539664665943770e+00 9.296106783440324e+03 + 62560 9.372357321256375e-01 -5.894654046886115e+00 -6.008913748105241e+00 4.262498999102810e+00 4.606402113070970e+00 9.244440377281002e+03 + 62580 1.004186675686261e+00 -5.996378856047244e+00 -5.997579892353412e+00 3.700146688628436e+00 4.693250152298653e+00 9.209609285987284e+03 + 62600 1.040755370728585e+00 -6.052610281810900e+00 -6.010377526584991e+00 3.434816672454946e+00 4.677323688459865e+00 9.248953849754813e+03 + 62620 9.496097883184544e-01 -5.921682269888001e+00 -6.085800819651408e+00 4.041137723039439e+00 4.098743613034460e+00 9.482330451516749e+03 + 62640 9.592711431186796e-01 -5.943179388812210e+00 -6.061478695649934e+00 3.938753673982306e+00 4.259460747361524e+00 9.406710323590094e+03 + 62660 9.505408697433528e-01 -5.936494254727672e+00 -6.004397087838798e+00 4.000724585280537e+00 4.610816009626987e+00 9.230547362491641e+03 + 62680 9.887608235021672e-01 -5.998039340307594e+00 -6.017020620553342e+00 3.629426255856961e+00 4.520432807342253e+00 9.269351089308431e+03 + 62700 9.535806300321217e-01 -5.951850506030696e+00 -6.026946260041028e+00 3.896256415330833e+00 4.465044974773135e+00 9.299956913181539e+03 + 62720 9.808653147112377e-01 -5.997834057687443e+00 -6.008898614797507e+00 3.669925498687258e+00 4.606391099526594e+00 9.244375769524222e+03 + 62740 9.939728060248710e-01 -6.021753472098739e+00 -6.004400870221325e+00 3.548416611570156e+00 4.648057936856735e+00 9.230564747109578e+03 + 62760 9.595626938313674e-01 -5.973989163775299e+00 -6.009209130175025e+00 3.847928156272395e+00 4.645689658932979e+00 9.245331499691067e+03 + 62780 1.038785530553660e+00 -6.094584750102364e+00 -5.982504882782291e+00 3.164588096572888e+00 4.808168039028162e+00 9.163427375525582e+03 + 62800 9.362208326602719e-01 -5.946202125227282e+00 -6.039942907344392e+00 3.982785769765413e+00 4.444511692509819e+00 9.340065965558764e+03 + 62820 9.802561974215329e-01 -6.015291345013821e+00 -6.032126282063255e+00 3.603209994133666e+00 4.506541180397724e+00 9.315938717151310e+03 + 62840 9.987509292056388e-01 -6.045058385066110e+00 -5.988875647776164e+00 3.485997207807608e+00 4.808607179576970e+00 9.182932591413235e+03 + 62860 9.968972976531207e-01 -6.044519275761417e+00 -5.972100256397201e+00 3.479877608147384e+00 4.895718824143745e+00 9.131564951422504e+03 + 62880 9.410044164211975e-01 -5.960201620236342e+00 -6.048849208050574e+00 3.854980487598586e+00 4.345952320199388e+00 9.367579203903319e+03 + 62900 9.309919540800997e-01 -5.942293960720907e+00 -6.009035903909819e+00 4.070177470257694e+00 4.686934904184629e+00 9.244773300186718e+03 + 62920 9.736347080751713e-01 -5.999049941115906e+00 -6.020748707029274e+00 3.690740800340071e+00 4.566143128592342e+00 9.280850188032719e+03 + 62940 9.723019485041715e-01 -5.985435939799022e+00 -6.008116200602258e+00 3.786045678251211e+00 4.655812110960015e+00 9.241985054443574e+03 + 62960 9.978929919981180e-01 -6.009337047123116e+00 -6.016034759536017e+00 3.640130496073930e+00 4.601671194931407e+00 9.266345357027192e+03 + 62980 1.019254025808548e+00 -6.025497904822311e+00 -5.987632241920867e+00 3.574885881588319e+00 4.792316377660808e+00 9.179100573120139e+03 + 63000 1.003169487026040e+00 -5.984122517482056e+00 -6.015452414939256e+00 3.754620831267056e+00 4.574719711781853e+00 9.264568342013066e+03 + 63020 9.676497819301970e-01 -5.912168855664488e+00 -6.047561826805097e+00 4.167440308500272e+00 4.389992916216324e+00 9.363624335001488e+03 + 63040 9.565425859529111e-01 -5.875982530335513e+00 -6.051408215110659e+00 4.366569811268846e+00 4.359248382252974e+00 9.375513406673968e+03 + 63060 1.067958257163999e+00 -6.021539261015828e+00 -5.980105855404756e+00 3.573404204162423e+00 4.811321230979996e+00 9.156056027586314e+03 + 63080 9.946599876636927e-01 -5.893957774742841e+00 -6.002282050612820e+00 4.291372390887616e+00 4.669357635714687e+00 9.224048738478006e+03 + 63100 1.089792442288648e+00 -6.017314007357442e+00 -5.979538346426750e+00 3.604474397393449e+00 4.821388088222113e+00 9.154350467366530e+03 + 63120 9.726452535579506e-01 -5.830765797444119e+00 -6.028357959621006e+00 4.636799562528878e+00 4.502194790020919e+00 9.304272590268925e+03 + 63140 9.735416466033833e-01 -5.822192481342206e+00 -6.024443646176032e+00 4.650996432021056e+00 4.489638945278620e+00 9.292188498274985e+03 + 63160 1.040035838520288e+00 -5.913879234620955e+00 -6.012294952823289e+00 4.060206572220924e+00 4.495088288519949e+00 9.254821057572992e+03 + 63180 1.067757413991905e+00 -5.952724203773219e+00 -5.957719729293175e+00 3.932977267674838e+00 4.904292187084172e+00 9.087696331810041e+03 + 63200 1.051236325078422e+00 -5.926754604541784e+00 -6.033236953731983e+00 4.083209543603873e+00 4.471771416463470e+00 9.319344456860643e+03 + 63220 1.035818133964888e+00 -5.911957496109834e+00 -6.042981958410058e+00 4.134838891773693e+00 4.382476153275797e+00 9.349473552506204e+03 + 63240 1.051097994216533e+00 -5.955218303861476e+00 -6.009131101455588e+00 4.020426590160113e+00 4.710850963396256e+00 9.245095004205272e+03 + 63260 1.051797539763915e+00 -5.988528570141257e+00 -6.017313130916915e+00 3.798827532460122e+00 4.633542130089904e+00 9.270256465046643e+03 + 63280 1.045175748241166e+00 -6.020585374904222e+00 -5.992258460238016e+00 3.622080871775229e+00 4.784738399364461e+00 9.193285966299331e+03 + 63300 1.035767515172722e+00 -6.054268053079390e+00 -5.959903248695666e+00 3.452035464448127e+00 4.993892774125758e+00 9.094373632438879e+03 + 63320 1.015026330337664e+00 -6.066835330791643e+00 -5.990318466121378e+00 3.358706176848615e+00 4.798077854731818e+00 9.187335266131149e+03 + 63340 9.970555028671690e-01 -6.074119722210478e+00 -5.991716586439683e+00 3.311886740136526e+00 4.785058297576477e+00 9.191643695491806e+03 + 63360 9.810017783266233e-01 -6.073658010202093e+00 -5.977892498282251e+00 3.349616434848223e+00 4.899516823957035e+00 9.149305590387963e+03 + 63380 9.412007876030098e-01 -6.028918703487610e+00 -6.015412211857866e+00 3.591688980111608e+00 4.669245345172426e+00 9.264425484014357e+03 + 63400 9.890615074255076e-01 -6.108043531385909e+00 -5.988648164586844e+00 3.166007308553706e+00 4.851593981087235e+00 9.182241638504895e+03 + 63420 9.341778757365110e-01 -6.030709756497517e+00 -6.006700611111914e+00 3.568556570728206e+00 4.706420798935578e+00 9.237614734038303e+03 + 63440 9.431517301872006e-01 -6.041912704524960e+00 -5.990189815162839e+00 3.459911971415075e+00 4.756912806223631e+00 9.186968925129273e+03 + 63460 9.724030191485896e-01 -6.077376288847645e+00 -6.030741523769957e+00 3.256717672097245e+00 4.524501709879904e+00 9.311671067761585e+03 + 63480 9.587000731377060e-01 -6.045475629840449e+00 -6.019802962996493e+00 3.495917176932145e+00 4.643333602782495e+00 9.277955724409121e+03 + 63500 9.758082618513113e-01 -6.055732366197238e+00 -6.037686743345152e+00 3.409396185721070e+00 4.513016944688863e+00 9.333116046426883e+03 + 63520 1.018554661161589e+00 -6.103709348471432e+00 -6.002403619862657e+00 3.133215493447401e+00 4.714928664129824e+00 9.224421320409414e+03 + 63540 9.578367941351583e-01 -5.995780988326104e+00 -5.959428345930609e+00 3.747924371305220e+00 4.956666869493375e+00 9.092900932048427e+03 + 63560 9.836339129491385e-01 -6.011622960492484e+00 -5.936206395847993e+00 3.662026562922744e+00 5.095080147787073e+00 9.022209492959721e+03 + 63580 1.033412068905945e+00 -6.054295168389799e+00 -5.946349270318334e+00 3.422230277243330e+00 5.042072328543416e+00 9.053062157580473e+03 + 63600 9.633518663308341e-01 -5.917994813366662e+00 -5.974590427552318e+00 4.165277041592708e+00 4.840296266795684e+00 9.139151289261952e+03 + 63620 1.079082895628374e+00 -6.057917503651106e+00 -5.988445387321409e+00 3.395420855696954e+00 4.794340498437334e+00 9.181602977145136e+03 + 63640 1.066937998134108e+00 -6.012031543523505e+00 -6.015986834747791e+00 3.647865266392897e+00 4.625153372103705e+00 9.266177275782313e+03 + 63660 9.590676294688957e-01 -5.835152013036339e+00 -6.015161639498864e+00 4.547121023721136e+00 4.513477892173653e+00 9.263641765780701e+03 + 63680 1.050004058555014e+00 -5.960081826383608e+00 -5.966087868823276e+00 3.908938302113195e+00 4.874450676992555e+00 9.113249083698343e+03 + 63700 9.970490695695864e-01 -5.875049817588802e+00 -6.056023678900576e+00 4.323227444074279e+00 4.284047526807540e+00 9.389839982689407e+03 + 63720 1.083089367344297e+00 -6.003965415036575e+00 -6.012463110061224e+00 3.645671099011806e+00 4.596876019166213e+00 9.255356971774141e+03 + 63740 1.051153336589059e+00 -5.961332354006992e+00 -6.040388512163151e+00 3.878079666453758e+00 4.424126972420159e+00 9.341444740003302e+03 + 63760 1.083365784035015e+00 -6.019219517544811e+00 -6.014347335876942e+00 3.620314324462615e+00 4.648291145567196e+00 9.261150429711006e+03 + 63780 1.032685919531419e+00 -5.957346737645543e+00 -5.971003760027084e+00 3.959490343707411e+00 4.881069607775220e+00 9.128251382842845e+03 + 63800 1.031562011414852e+00 -5.966715971027805e+00 -5.992356140146033e+00 3.847877141665916e+00 4.700647322785697e+00 9.193560409605112e+03 + 63820 9.826097130509681e-01 -5.905540093673393e+00 -5.967192268765917e+00 4.284850139611770e+00 4.930833809587237e+00 9.116584118599885e+03 + 63840 1.100853739646476e+00 -6.089504480569790e+00 -5.960360254057188e+00 3.205962216755573e+00 4.947528350395399e+00 9.095765532755844e+03 + 63860 9.849448545436508e-01 -5.928847265594642e+00 -6.022574632366561e+00 4.085189858624841e+00 4.546992814357351e+00 9.286470362955388e+03 + 63880 9.720291663615844e-01 -5.921380308032722e+00 -5.996957249363682e+00 4.164720457036360e+00 4.730745964420116e+00 9.207685268601112e+03 + 63900 1.047401620420432e+00 -6.045451087206579e+00 -6.009815172994442e+00 3.469849536443568e+00 4.674476470489564e+00 9.247174315891651e+03 + 63920 9.809733085804676e-01 -5.960149789772365e+00 -6.023239982916328e+00 3.884324132360903e+00 4.522050480152428e+00 9.288483149847350e+03 + 63940 1.053199632197324e+00 -6.080106765712756e+00 -6.013735751855746e+00 3.248032434096804e+00 4.629145066544958e+00 9.259248799059511e+03 + 63960 9.877683868624596e-01 -5.997542995359620e+00 -6.061201055691757e+00 3.675353555461201e+00 4.309819121981071e+00 9.405887542931845e+03 + 63980 1.023412254304517e+00 -6.068572196595353e+00 -6.037023337804508e+00 3.316363935803186e+00 4.497522365150341e+00 9.331051454147302e+03 + 64000 9.999428493318253e-01 -6.052234124500551e+00 -6.000743982801942e+00 3.464495468062789e+00 4.760159829769878e+00 9.219330110785777e+03 + 64020 9.788109166119257e-01 -6.038694633809921e+00 -5.990272997322874e+00 3.515270643167516e+00 4.793315173100173e+00 9.187228767440844e+03 + 64040 9.431802059214314e-01 -6.002256265297605e+00 -6.013522833961148e+00 3.743658299423639e+00 4.678963918661708e+00 9.258620186988923e+03 + 64060 9.959410490842744e-01 -6.097752835463974e+00 -5.961518996163914e+00 3.195947535217797e+00 4.978223322597238e+00 9.099306205061061e+03 + 64080 9.991437026211243e-01 -6.116395563626105e+00 -5.995673910249413e+00 3.068946390236556e+00 4.762148805541004e+00 9.203772492950140e+03 + 64100 9.012918200693659e-01 -5.986037504265739e+00 -6.012068394990893e+00 3.767635637969929e+00 4.618162235158776e+00 9.254126152055987e+03 + 64120 9.536172658211376e-01 -6.076830493393514e+00 -5.971744228244576e+00 3.313155259410928e+00 4.916576855943102e+00 9.130516818798313e+03 + 64140 9.284630465325070e-01 -6.050797924434632e+00 -5.984877701408317e+00 3.412095194996383e+00 4.790619316735028e+00 9.170695536385090e+03 + 64160 9.998991724579729e-01 -6.168173788979657e+00 -5.949919739300433e+00 2.749653268815461e+00 5.002901796778601e+00 9.063971633579207e+03 + 64180 9.439124970492788e-01 -6.092913662317181e+00 -5.956767015278292e+00 3.199348662237875e+00 4.981123778160713e+00 9.084813368912364e+03 + 64200 9.385852828956505e-01 -6.086118753526614e+00 -5.950661854440766e+00 3.247689945587998e+00 5.025504422026325e+00 9.066207414032049e+03 + 64220 9.148537615345610e-01 -6.042122505993161e+00 -5.973313163090566e+00 3.435077419313483e+00 4.830191314471584e+00 9.135273165151502e+03 + 64240 9.245475844427506e-01 -6.037806175121528e+00 -5.971605332050583e+00 3.568477932646315e+00 4.948613418107036e+00 9.130085711074324e+03 + 64260 9.848795098625867e-01 -6.099719151414170e+00 -6.010500232468728e+00 3.111559733132043e+00 4.623868572299852e+00 9.249320210605580e+03 + 64280 9.700409506299921e-01 -6.041682246506971e+00 -5.959574771135442e+00 3.489743346097691e+00 4.961217175771765e+00 9.093373406328697e+03 + 64300 9.737872241227268e-01 -6.008814554034523e+00 -6.016241951943336e+00 3.646814762793901e+00 4.604165494615392e+00 9.266969253243387e+03 + 64320 1.016064463553220e+00 -6.032558577175618e+00 -6.023308201655522e+00 3.520882209802991e+00 4.573999297530371e+00 9.288729412547880e+03 + 64340 1.037315711666094e+00 -6.031541456443989e+00 -6.007600111893867e+00 3.534835978147906e+00 4.672310883465808e+00 9.240404949706241e+03 + 64360 9.649142831509903e-01 -5.896972552677491e+00 -6.058551598388345e+00 4.215769125099045e+00 4.287957240350813e+00 9.397654582782283e+03 + 64380 1.025117706058997e+00 -5.966809639269153e+00 -5.986917515032474e+00 3.903565426230929e+00 4.788102891914217e+00 9.176928187464478e+03 + 64400 1.020933410005892e+00 -5.944262583515158e+00 -6.017443361356163e+00 4.037029147961219e+00 4.616813796909401e+00 9.270652578499083e+03 + 64420 1.027090491795923e+00 -5.941823694277510e+00 -6.030347418546517e+00 4.034122480802441e+00 4.525805557047749e+00 9.310429711275696e+03 + 64440 1.046640420097573e+00 -5.965068629878888e+00 -6.013342041069015e+00 3.819155700362068e+00 4.541962303022121e+00 9.258041950422437e+03 + 64460 1.034303980051276e+00 -5.945071456550881e+00 -6.007806346454960e+00 3.984747330179707e+00 4.624513884157647e+00 9.241021943580852e+03 + 64480 1.069040529355787e+00 -5.998658381675496e+00 -5.999314586795114e+00 3.690671452692228e+00 4.686903421347968e+00 9.214930940993607e+03 + 64500 1.050366223289714e+00 -5.979657760768457e+00 -6.012513298911346e+00 3.813499654857318e+00 4.624838070462753e+00 9.255478066821985e+03 + 64520 1.024220389518448e+00 -5.955721172545180e+00 -6.000350051796507e+00 3.939363493846116e+00 4.683097562888252e+00 9.218115310327361e+03 + 64540 9.686638425223425e-01 -5.893148984685073e+00 -5.969162556883545e+00 4.247731096008412e+00 4.811249401382502e+00 9.122599340269107e+03 + 64560 1.007566538529166e+00 -5.970480128273235e+00 -5.978455103265956e+00 3.899439408644982e+00 4.853645868113384e+00 9.150994555630596e+03 + 64580 1.061777414370436e+00 -6.074375128553481e+00 -5.997358452317220e+00 3.249049970713299e+00 4.691291643954038e+00 9.208941176148834e+03 + 64600 1.018431868111114e+00 -6.042026754401425e+00 -6.021148991222343e+00 3.471563606481154e+00 4.591446953478852e+00 9.282072800452497e+03 + 64620 1.029262285182320e+00 -6.096637947101426e+00 -5.946683812199510e+00 3.153458579688695e+00 5.014518427622882e+00 9.054096920132217e+03 + 64640 9.134714978100078e-01 -5.960016390640591e+00 -5.979065629924038e+00 3.886339670086495e+00 4.776955990260692e+00 9.152871573913413e+03 + 64660 9.420054659269362e-01 -6.031307049847252e+00 -5.989908942815747e+00 3.563332386623765e+00 4.801046723535025e+00 9.186075635613020e+03 + 64680 9.537796330940300e-01 -6.073486171931947e+00 -5.975957093140080e+00 3.259896325208257e+00 4.819923388207326e+00 9.143390278421350e+03 + 64700 9.000014209250177e-01 -6.008927568786804e+00 -5.996907326681081e+00 3.617032139815997e+00 4.686054230113515e+00 9.207533603663083e+03 + 64720 9.391145902626992e-01 -6.073534241902999e+00 -5.950645542947768e+00 3.268666940564259e+00 4.974312866929900e+00 9.066133227863767e+03 + 64740 9.146288719772045e-01 -6.035370666309253e+00 -5.975463930218833e+00 3.465042715376859e+00 4.809036464545505e+00 9.141859643353882e+03 + 64760 9.076184985577325e-01 -6.016356531816990e+00 -6.001078497550845e+00 3.571243151386206e+00 4.658971988410569e+00 9.220340560702023e+03 + 64780 9.500738065128423e-01 -6.065818570151616e+00 -5.971159900293564e+00 3.330284273328868e+00 4.873829004035618e+00 9.128726214208580e+03 + 64800 9.672868602691956e-01 -6.070252257671067e+00 -5.973831144058171e+00 3.310312532916163e+00 4.863977488400518e+00 9.136894988586977e+03 + 64820 9.664753299124628e-01 -6.043320016496931e+00 -6.012980407392427e+00 3.529458946498544e+00 4.703673677015943e+00 9.256930189246999e+03 + 64840 1.009254894978494e+00 -6.083905402931973e+00 -5.979721831199498e+00 3.291163401801165e+00 4.889401593044656e+00 9.154903732138358e+03 + 64860 9.163804821305365e-01 -5.927712742811967e+00 -6.043538323884180e+00 4.053852975147618e+00 4.388764564680229e+00 9.351162529101835e+03 + 64880 1.004335754429459e+00 -6.046168460384418e+00 -6.012922561121409e+00 3.395966662462893e+00 4.586869760817377e+00 9.256756406300470e+03 + 64900 9.785601404543814e-01 -5.998079173769749e+00 -5.996594971584521e+00 3.681360492122154e+00 4.689883010749279e+00 9.206583683093564e+03 + 64920 9.418083124871265e-01 -5.936704586594055e+00 -5.962354565768304e+00 4.069989736517211e+00 4.922703586777225e+00 9.101806072650708e+03 + 64940 1.012619760062547e+00 -6.033709330558290e+00 -5.942335565745022e+00 3.547634779361724e+00 5.072317076963913e+00 9.040851269551256e+03 + 64960 9.779389512979354e-01 -5.973677078602233e+00 -6.021578174883611e+00 3.868243757715872e+00 4.593188250197503e+00 9.283348066337887e+03 + 64980 1.026584869206489e+00 -6.037793852602053e+00 -5.968670948976789e+00 3.538189305087060e+00 4.935103714438090e+00 9.121132064253348e+03 + 65000 1.067320443101444e+00 -6.088564064523519e+00 -5.985956280975747e+00 3.235496913915009e+00 4.824686685549507e+00 9.174010163653107e+03 + 65020 1.029673062480023e+00 -6.027275475778575e+00 -6.027297861084548e+00 3.559551650318989e+00 4.559423110427975e+00 9.301027229893471e+03 + 65040 1.003843487973755e+00 -5.985678054646538e+00 -6.011318927153048e+00 3.753035770641685e+00 4.605801912797109e+00 9.251822818791636e+03 + 65060 9.384906951971138e-01 -5.885053660365489e+00 -6.034089932465076e+00 4.360484697480792e+00 4.504695359796398e+00 9.321997799160343e+03 + 65080 1.014985074561174e+00 -5.996578142215457e+00 -5.981380839725297e+00 3.761363707288488e+00 4.848628969961949e+00 9.159978894482419e+03 + 65100 1.006127457841999e+00 -5.982226365677290e+00 -6.005286813221590e+00 3.824396016630733e+00 4.691979358238637e+00 9.233255265620492e+03 + 65120 1.057079849448710e+00 -6.056032506821980e+00 -5.960761782739610e+00 3.448938388987679e+00 4.995997629765552e+00 9.096973977851269e+03 + 65140 9.903610856138942e-01 -5.955277711245982e+00 -6.010610842866301e+00 3.905726954719058e+00 4.587995550180739e+00 9.249657267387141e+03 + 65160 1.035476465765714e+00 -6.022076625451336e+00 -5.990924337993498e+00 3.593929009528255e+00 4.772810264912069e+00 9.189217584941072e+03 + 65180 1.024168478001474e+00 -6.007248065976556e+00 -6.007640659200170e+00 3.639812455979983e+00 4.637558124936384e+00 9.240512647310392e+03 + 65200 1.037538230851910e+00 -6.030355859083431e+00 -5.992645483484951e+00 3.539139371737331e+00 4.755678184085564e+00 9.194475911953839e+03 + 65220 9.709320167017754e-01 -5.936597078312797e+00 -6.025931880681961e+00 4.076361857974038e+00 4.563387598254309e+00 9.296814953241024e+03 + 65240 1.011848355317985e+00 -6.004868698169473e+00 -6.025245751577766e+00 3.670019131092265e+00 4.553010937083019e+00 9.294717432464824e+03 + 65260 1.003083360316010e+00 -6.005002877391429e+00 -6.001470092435295e+00 3.657537947055058e+00 4.677823744969885e+00 9.221577859794483e+03 + 65280 9.683333856162043e-01 -5.969752795817261e+00 -5.975427521017936e+00 3.885502785680778e+00 4.852917635417615e+00 9.141774253391281e+03 + 65300 1.038412366021512e+00 -6.091147939071012e+00 -5.956789767536760e+00 3.308143917381589e+00 5.079649330191115e+00 9.084871340500720e+03 + 65320 9.925924209430970e-01 -6.039985299828668e+00 -6.020393983662579e+00 3.496458617817496e+00 4.608954986989559e+00 9.279756171725643e+03 + 65340 1.010008596808134e+00 -6.086734220465566e+00 -5.996513120714971e+00 3.232162502072427e+00 4.750226018510409e+00 9.206368857462694e+03 + 65360 9.799924558539395e-01 -6.064151136444650e+00 -6.031023880036420e+00 3.291011859489346e+00 4.481233692211761e+00 9.312544276754390e+03 + 65380 9.012529040917340e-01 -5.968171219025514e+00 -6.043665424280020e+00 3.898135853912164e+00 4.464636444650285e+00 9.351598052723786e+03 + 65400 9.642036714007344e-01 -6.080606681974887e+00 -5.982343121207280e+00 3.258656819141077e+00 4.822901391305560e+00 9.162939028336295e+03 + 65420 9.039621025853570e-01 -6.005243006138436e+00 -6.023360700358520e+00 3.667862640113202e+00 4.563828036197359e+00 9.288912686773288e+03 + 65440 9.496784284127945e-01 -6.081372628716927e+00 -6.015455702074739e+00 3.296880524606193e+00 4.675385717997068e+00 9.264566402577902e+03 + 65460 9.560247752394526e-01 -6.097050538188340e+00 -5.984841481842047e+00 3.174785640158057e+00 4.819107405993822e+00 9.170596573162375e+03 + 65480 8.897071586753078e-01 -5.998160502356225e+00 -6.003138140084513e+00 3.688669631673723e+00 4.660087265550948e+00 9.226695077685928e+03 + 65500 9.236939524587462e-01 -6.040874936089637e+00 -5.958076305611851e+00 3.571311431775914e+00 5.046753981026018e+00 9.088777933226927e+03 + 65520 8.926273735148095e-01 -5.976039401548469e+00 -6.004281606456678e+00 3.870696670831116e+00 4.708525559781101e+00 9.230169476704792e+03 + 65540 1.004628263302945e+00 -6.109323879684482e+00 -5.978979818912937e+00 3.115000110958515e+00 4.863455878586937e+00 9.152638205697107e+03 + 65560 9.869444908529879e-01 -6.040084528575243e+00 -5.984210842090697e+00 3.499814479920748e+00 4.820649834140057e+00 9.168645807772566e+03 + 65580 9.873381112222560e-01 -5.995383254057569e+00 -5.991359297255277e+00 3.747231364349282e+00 4.770337547013346e+00 9.190510404304303e+03 + 65600 1.009087101763911e+00 -5.985141372284248e+00 -5.999489335263834e+00 3.792665629162518e+00 4.710277405393641e+00 9.215465285206836e+03 + 65620 1.006374393719334e+00 -5.945954033771187e+00 -5.964021731258882e+00 3.983479218716111e+00 4.879731703774622e+00 9.106920411561478e+03 + 65640 1.051625152358919e+00 -5.988803663372094e+00 -5.930860814378379e+00 3.795478350712310e+00 5.128195156261128e+00 9.006013941773670e+03 + 65660 1.027173570656162e+00 -5.935844075734046e+00 -6.008215015130796e+00 3.988209467142583e+00 4.572644333759770e+00 9.242254966231147e+03 + 65680 1.037263720448094e+00 -5.940491094624026e+00 -6.004130739484976e+00 4.020172792703154e+00 4.654744103708365e+00 9.229714471618590e+03 + 65700 1.084085947395097e+00 -6.005852054149685e+00 -5.975157787896073e+00 3.644440109079292e+00 4.820691335829882e+00 9.140948357116173e+03 + 65720 1.021761627670598e+00 -5.915823574383295e+00 -6.001769146410700e+00 4.171802136086452e+00 4.678289361470806e+00 9.222457120824361e+03 + 65740 1.033934755220310e+00 -5.940126940296423e+00 -5.976461440512929e+00 4.021786679448097e+00 4.813148356459184e+00 9.144898209822917e+03 + 65760 1.036441992390758e+00 -5.952787181425724e+00 -5.977604823172205e+00 3.898388226281408e+00 4.755881486855470e+00 9.148378541275106e+03 + 65780 1.030850235373520e+00 -5.954660149639988e+00 -5.991733005644645e+00 3.906453683794074e+00 4.693575607609407e+00 9.191667521652489e+03 + 65800 1.050284424259468e+00 -5.998288856097114e+00 -5.987344594279081e+00 3.681581368265392e+00 4.744425013243579e+00 9.178265888476664e+03 + 65820 1.048424297951453e+00 -6.014298556954945e+00 -5.994216516240106e+00 3.605839788498586e+00 4.721153973968944e+00 9.199306971269385e+03 + 65840 9.826398690321234e-01 -5.937806110113588e+00 -6.047868363229944e+00 4.007036953895847e+00 4.375042464423106e+00 9.364575751794138e+03 + 65860 9.507494460634326e-01 -5.918546221309120e+00 -6.045657876051258e+00 4.144769902491953e+00 4.414875110497596e+00 9.357744211436040e+03 + 65880 9.678010132556403e-01 -5.971177177239504e+00 -5.981712048091866e+00 3.832975320548464e+00 4.772482461848202e+00 9.160990161708822e+03 + 65900 9.806523536526537e-01 -6.016506413659373e+00 -6.018009402919178e+00 3.587640243152220e+00 4.579009846235585e+00 9.272376971936599e+03 + 65920 1.001996832718228e+00 -6.072640247923573e+00 -5.974638947129709e+00 3.307789107795037e+00 4.870527742605686e+00 9.139338706694680e+03 + 65940 8.362494505360685e-01 -5.845763840940982e+00 -6.033986838383822e+00 4.581840166405690e+00 4.501034587674185e+00 9.321634277470328e+03 + 65960 9.685513427013865e-01 -6.054775826518066e+00 -6.020480638600156e+00 3.411766486757421e+00 4.608694762945237e+00 9.280017166913136e+03 + 65980 1.000186941491519e+00 -6.111611955304877e+00 -6.017308216337502e+00 3.103497600416114e+00 4.645004263023223e+00 9.270279126783626e+03 + 66000 9.489219361313744e-01 -6.044266879635019e+00 -5.997940290008605e+00 3.463108118783460e+00 4.729122565434905e+00 9.210747325041646e+03 + 66020 9.086926446539003e-01 -5.989472255321003e+00 -6.000297832461674e+00 3.756564235457341e+00 4.694402096262952e+00 9.217968081998026e+03 + 66040 9.277615129053453e-01 -6.017352757286945e+00 -6.010038721248334e+00 3.635680278203657e+00 4.677678604980779e+00 9.247902358605816e+03 + 66060 9.794090038239940e-01 -6.086187501379802e+00 -5.987340074726680e+00 3.168441835601116e+00 4.736039056033186e+00 9.178243522210916e+03 + 66080 9.417669373413964e-01 -6.008690786281882e+00 -5.976708207053990e+00 3.678000555376230e+00 4.861649474590924e+00 9.145683887280740e+03 + 66100 1.000215049339553e+00 -6.052678144365359e+00 -5.993653542982336e+00 3.432429232489508e+00 4.771357627658372e+00 9.197577922340170e+03 + 66120 1.028825314580359e+00 -6.034443765971251e+00 -6.022993388571798e+00 3.470564400696274e+00 4.536314239664108e+00 9.287778826239575e+03 + 66140 1.059935851645271e+00 -6.023614309514848e+00 -5.999584225678230e+00 3.632705578667405e+00 4.770690038700721e+00 9.215777071489298e+03 + 66160 9.943458397351257e-01 -5.881515535691016e+00 -6.079259654071235e+00 4.302286561533712e+00 4.166809232991076e+00 9.461966536610344e+03 + 66180 1.038513027392710e+00 -5.918312898995234e+00 -6.030028781513463e+00 4.153125524339658e+00 4.511635638943038e+00 9.309445311974983e+03 + 66200 1.039159144016930e+00 -5.900715105194053e+00 -6.012811675723380e+00 4.270247900368642e+00 4.626572045501020e+00 9.256393245515907e+03 + 66220 1.017344842690053e+00 -5.856375271147563e+00 -6.078088269222683e+00 4.462091269866718e+00 4.188980924943811e+00 9.458293276741186e+03 + 66240 1.098874202506519e+00 -5.975904190827492e+00 -6.002415928529254e+00 3.775197110290220e+00 4.622962609728551e+00 9.224470784238101e+03 + 66260 1.021910740955346e+00 -5.868599591197086e+00 -6.033830672377805e+00 4.350607704021588e+00 4.401825266454720e+00 9.321172765028748e+03 + 66280 1.036896364342283e+00 -5.902700980366088e+00 -5.978564734365579e+00 4.264910292913122e+00 4.829288877570055e+00 9.151350441953069e+03 + 66300 1.056316060038446e+00 -5.950485955261097e+00 -6.009379716435562e+00 4.002631820567734e+00 4.664454730123869e+00 9.245855476495253e+03 + 66320 1.061106089337134e+00 -5.983950321191948e+00 -6.042194041750245e+00 3.776869866940574e+00 4.442425410308203e+00 9.347013184925141e+03 + 66340 1.028227756942927e+00 -5.966705195385762e+00 -6.039706573178593e+00 3.829236105727062e+00 4.410050897513921e+00 9.339320019430890e+03 + 66360 1.009642267512452e+00 -5.975541743516080e+00 -6.031870641667219e+00 3.778378275514280e+00 4.454929025461619e+00 9.315141589134480e+03 + 66380 1.001259269424995e+00 -5.999262095099518e+00 -5.962426830428608e+00 3.720313085744203e+00 4.931826875723354e+00 9.102069121245207e+03 + 66400 9.808064890756144e-01 -5.996607716908096e+00 -5.986143317378830e+00 3.712107937065821e+00 4.772196138523463e+00 9.174565021907893e+03 + 66420 1.021969614834881e+00 -6.078796615315443e+00 -5.960398230718621e+00 3.306158372626605e+00 4.986020219072358e+00 9.095875325393972e+03 + 66440 1.008992778473687e+00 -6.075740271776201e+00 -6.000497024864034e+00 3.265584124303698e+00 4.697642491928189e+00 9.218576962236022e+03 + 66460 9.707859594392138e-01 -6.031865596499809e+00 -5.993764792980953e+00 3.509778023369268e+00 4.728558733254836e+00 9.197912243302902e+03 + 66480 9.674582828572478e-01 -6.035874514306466e+00 -5.978438312000026e+00 3.523455593067601e+00 4.853263154934758e+00 9.150939056174198e+03 + 66500 1.011028275251947e+00 -6.104478554816213e+00 -5.957977229681997e+00 3.128481771363345e+00 4.969715051290809e+00 9.088497147669861e+03 + 66520 9.502387219030255e-01 -6.012459575134059e+00 -5.979313899490331e+00 3.650642406741583e+00 4.840970005564605e+00 9.153646469345460e+03 + 66540 9.812583064152390e-01 -6.053666709093042e+00 -5.974959501882983e+00 3.383037952630608e+00 4.834986916331717e+00 9.140359262247450e+03 + 66560 1.005096735630868e+00 -6.079169725195517e+00 -6.002865489373760e+00 3.242606654428866e+00 4.680757384559727e+00 9.225869155006754e+03 + 66580 9.856015989794916e-01 -6.037726468804369e+00 -5.988099357367100e+00 3.531486001132701e+00 4.816452554776172e+00 9.180564972122798e+03 + 66600 1.048041396884860e+00 -6.115813113591607e+00 -6.015858040122514e+00 3.057793715233170e+00 4.631751215090333e+00 9.265792308425380e+03 + 66620 9.515362309107479e-01 -5.955568073369918e+00 -6.001708506613787e+00 3.984684510038653e+00 4.719739002143386e+00 9.222293716203998e+03 + 66640 9.667443991818453e-01 -5.955054298416461e+00 -5.998908789975001e+00 3.953817882218950e+00 4.701998605229178e+00 9.213707138543801e+03 + 66660 1.049771411269174e+00 -6.046665160704982e+00 -6.007509090243469e+00 3.414495034433906e+00 4.639335250406230e+00 9.240129352248900e+03 + 66680 1.053909361415176e+00 -6.012327492144130e+00 -6.028049558773636e+00 3.627871876363014e+00 4.537593336794436e+00 9.303383837420297e+03 + 66700 1.095141144734686e+00 -6.025159775163508e+00 -6.014240101003487e+00 3.594268996625141e+00 4.656971455466095e+00 9.260811879148709e+03 + 66720 1.026965082676056e+00 -5.880312190285263e+00 -6.018750122208087e+00 4.339686530909246e+00 4.544754502607664e+00 9.274676773089766e+03 + 66740 1.010145147482338e+00 -5.815487937938616e+00 -6.005711378019738e+00 4.654569877237144e+00 4.562277447309124e+00 9.234555626392568e+03 + 66760 1.048762111081591e+00 -5.837736189181189e+00 -5.995657693440072e+00 4.621929162544646e+00 4.715119446816336e+00 9.203702238019401e+03 + 66780 1.115762964018743e+00 -5.911906356752661e+00 -6.015723986964097e+00 4.157036662960107e+00 4.560899764559687e+00 9.265375414561524e+03 + 66800 1.116268487657590e+00 -5.903186854658027e+00 -6.081795410689168e+00 4.176823700701704e+00 4.151225732386176e+00 9.469847933622794e+03 + 66820 1.095134352761502e+00 -5.880257532104053e+00 -6.020076811910725e+00 4.308386239376802e+00 4.505522297763269e+00 9.278795665326030e+03 + 66840 1.078127823531492e+00 -5.872742073277237e+00 -6.015611673989055e+00 4.323527317778314e+00 4.503147961491802e+00 9.265027402414187e+03 + 66860 1.137973816295192e+00 -5.981754680925326e+00 -5.989274338927561e+00 3.793762207374999e+00 4.750583167462853e+00 9.184135089951440e+03 + 66880 1.036874470606254e+00 -5.855342843920053e+00 -6.006138197315748e+00 4.447567942029046e+00 4.581677687325445e+00 9.235889011285606e+03 + 66900 1.070158445527667e+00 -5.926512521077340e+00 -5.972705181102745e+00 4.079373587288482e+00 4.814128185131570e+00 9.133409982798079e+03 + 66920 1.088564430202816e+00 -5.972142382717666e+00 -5.993601005026102e+00 3.805342506233287e+00 4.682123776227175e+00 9.197421557218202e+03 + 66940 1.006426755327136e+00 -5.869971822154353e+00 -6.028166440119970e+00 4.417048843452437e+00 4.508670866555851e+00 9.303719582091559e+03 + 66960 1.081900197157130e+00 -6.002306888112274e+00 -5.967119161378948e+00 3.675281130655204e+00 4.877334502841082e+00 9.116387924530405e+03 + 66980 1.088097451201461e+00 -6.031423165507640e+00 -5.968239967093509e+00 3.521331181368849e+00 4.884138884231144e+00 9.119794393217377e+03 + 67000 1.103228995250296e+00 -6.076021468861845e+00 -5.958982023074690e+00 3.336552354408358e+00 5.008610963913902e+00 9.091541335409187e+03 + 67020 1.027583359717498e+00 -5.986653485669094e+00 -5.997495118330890e+00 3.761345551983900e+00 4.699091219502638e+00 9.209339501114942e+03 + 67040 1.014706612148430e+00 -5.989934009189948e+00 -5.997156832530576e+00 3.754800494626177e+00 4.713325925275992e+00 9.208313116772029e+03 + 67060 1.040635173676036e+00 -6.050799484830972e+00 -5.991319681653319e+00 3.462073760722270e+00 4.803615995038147e+00 9.190419908470925e+03 + 67080 9.698011664835811e-01 -5.966980392218113e+00 -6.039105405882834e+00 3.866567646890093e+00 4.452414657117471e+00 9.337491527374495e+03 + 67100 1.016328484648592e+00 -6.055741912859453e+00 -6.001822375230550e+00 3.392924029959580e+00 4.702538359046229e+00 9.222650045968225e+03 + 67120 9.557520264875738e-01 -5.983660194742318e+00 -5.982653333450770e+00 3.838982628312434e+00 4.844764181659784e+00 9.163872304303752e+03 + 67140 1.019054589811699e+00 -6.091309016576842e+00 -5.990400483389245e+00 3.246341536623550e+00 4.825773949731774e+00 9.187597138523643e+03 + 67160 9.915328225313034e-01 -6.060778764218854e+00 -6.017977773498224e+00 3.371108377924387e+00 4.616878290074155e+00 9.272331784289152e+03 + 67180 9.797132048054482e-01 -6.054474270656016e+00 -5.967256539502397e+00 3.428317288122126e+00 4.929134997306477e+00 9.116816226790017e+03 + 67200 9.345195194065260e-01 -5.994812521895781e+00 -5.977431263349357e+00 3.760857023160169e+00 4.860662899474806e+00 9.147883485213832e+03 + 67220 1.003377521671321e+00 -6.097177291491713e+00 -5.993972075669360e+00 3.189320733829012e+00 4.781941054036496e+00 9.198569881132695e+03 + 67240 9.546442102043721e-01 -6.022419168833876e+00 -5.998959243423464e+00 3.618307026090377e+00 4.753017548208689e+00 9.213859248063514e+03 + 67260 9.678491396713700e-01 -6.036449700749381e+00 -6.006381804476407e+00 3.481589931986799e+00 4.654244445378132e+00 9.236661668033212e+03 + 67280 9.962405040836424e-01 -6.066228666249370e+00 -6.003467747661274e+00 3.382320103174941e+00 4.742703009928553e+00 9.227688911367388e+03 + 67300 1.020212172084835e+00 -6.082418223474006e+00 -5.970584510195091e+00 3.291506201502911e+00 4.933672689361639e+00 9.126942942537040e+03 + 67320 9.928949344478569e-01 -6.010845662997401e+00 -5.965180181310235e+00 3.594260160795600e+00 4.856478423353758e+00 9.110459511567657e+03 + 67340 9.856079590311468e-01 -5.958527608794398e+00 -5.990866575734909e+00 3.980608240359346e+00 4.794912887747974e+00 9.188971501080820e+03 + 67360 1.043283510469743e+00 -5.994222007634857e+00 -5.974063776096210e+00 3.738326097246118e+00 4.854077782217278e+00 9.137602572502101e+03 + 67380 1.043846087696103e+00 -5.946161940339536e+00 -6.037293512349077e+00 3.950551494149342e+00 4.427259905105365e+00 9.331893400728059e+03 + 67400 1.046429468372025e+00 -5.915281201213435e+00 -5.990180170725436e+00 4.147378769229214e+00 4.717297295713229e+00 9.186939907353528e+03 + 67420 1.122460512161498e+00 -6.005906514982960e+00 -5.970234743751491e+00 3.631020468335558e+00 4.835853298935407e+00 9.125890441610976e+03 + 67440 1.015434321342362e+00 -5.834627956780679e+00 -6.011704940725734e+00 4.561391755898439e+00 4.544588311511231e+00 9.252995649051925e+03 + 67460 1.147148237960281e+00 -6.026490566956131e+00 -5.966454008886611e+00 3.579036279715770e+00 4.923775486778290e+00 9.114338078953115e+03 + 67480 1.033007583873164e+00 -5.860699626104386e+00 -6.033297137646365e+00 4.464026272102960e+00 4.472944651450324e+00 9.319547125046794e+03 + 67500 1.115359567344386e+00 -5.997106790439982e+00 -6.038348068986302e+00 3.687757911132608e+00 4.450944107652409e+00 9.335172962432353e+03 + 67520 1.058842658628058e+00 -5.936201707375269e+00 -6.013652305122526e+00 4.033041940968732e+00 4.588308623262719e+00 9.258984225241795e+03 + 67540 1.062153755763514e+00 -5.967502297206039e+00 -6.012135286155704e+00 3.873764540860312e+00 4.617475011378618e+00 9.254325139448156e+03 + 67560 1.049341002572320e+00 -5.977159211308033e+00 -6.031683851280108e+00 3.789279926024648e+00 4.476191005644228e+00 9.314583206147710e+03 + 67580 1.063909873548825e+00 -6.030748851712305e+00 -5.998749483474892e+00 3.581583544413985e+00 4.765328868719441e+00 9.213203769125246e+03 + 67600 9.502053376032908e-01 -5.891028964519083e+00 -6.019843720721611e+00 4.242526487688874e+00 4.502852223554856e+00 9.278044793397996e+03 + 67620 9.857867079416553e-01 -5.964536552697289e+00 -5.946996709170900e+00 3.861980769119065e+00 4.962697264929600e+00 9.055047337029149e+03 + 67640 9.791265232352180e-01 -5.968344601761608e+00 -6.000088254803195e+00 3.842066437388822e+00 4.659789469309592e+00 9.217283121526945e+03 + 67660 1.031512721474458e+00 -6.055011082179217e+00 -5.995347503394845e+00 3.397648258671969e+00 4.740245760960813e+00 9.202773492549168e+03 + 67680 1.042123068972493e+00 -6.078713776765717e+00 -5.986340639852092e+00 3.237966004154443e+00 4.768386851009216e+00 9.175188758164808e+03 + 67700 9.985602200331072e-01 -6.021464447405358e+00 -6.012387087569607e+00 3.607892410868214e+00 4.660016015761993e+00 9.255107629751708e+03 + 67720 9.413736203299270e-01 -5.943062023041481e+00 -6.012037041248031e+00 3.966983100151617e+00 4.570917871760034e+00 9.254037109577019e+03 + 67740 9.921510289018264e-01 -6.021080464513977e+00 -5.969221090779202e+00 3.545066297682795e+00 4.842850846880022e+00 9.122798150870938e+03 + 67760 9.974063329813589e-01 -6.028001329406512e+00 -5.996339439210219e+00 3.534212931834238e+00 4.716020405003021e+00 9.205825543985573e+03 + 67780 1.032962702341072e+00 -6.080362005009950e+00 -5.978577798485661e+00 3.293601039821403e+00 4.878061704738924e+00 9.151402506680242e+03 + 67800 9.519916695852990e-01 -5.958124082027517e+00 -5.976242169769849e+00 3.923416111334643e+00 4.819379247753154e+00 9.144262943488986e+03 + 67820 9.915013753908322e-01 -6.011633899078660e+00 -6.017272558648113e+00 3.597637835776026e+00 4.565259779948484e+00 9.270130226149047e+03 + 67840 9.951634112675780e-01 -6.011021234212349e+00 -6.023434430733875e+00 3.661840969457292e+00 4.590562474094737e+00 9.289121021446930e+03 + 67860 1.008065062882461e+00 -6.023563897405602e+00 -6.013413359375927e+00 3.605617627789750e+00 4.663903587946825e+00 9.258274675899502e+03 + 67880 9.949580494254943e-01 -5.996859467459052e+00 -6.010301238899324e+00 3.694450576563940e+00 4.617265844846493e+00 9.248710938177252e+03 + 67900 1.001214805068908e+00 -5.998673085315211e+00 -6.008509596597096e+00 3.676515906484298e+00 4.620033136508513e+00 9.243186347842264e+03 + 67920 1.031106384927096e+00 -6.030830689585008e+00 -6.029955103643099e+00 3.490419883541358e+00 4.495447633516286e+00 9.309232410593648e+03 + 67940 1.012797806773031e+00 -5.990121606341085e+00 -5.983211310971291e+00 3.769554258934625e+00 4.809234244312735e+00 9.165558248004381e+03 + 67960 9.742241799612994e-01 -5.910424611627523e+00 -6.021950068905051e+00 4.171966035801468e+00 4.531569601605162e+00 9.284552042151807e+03 + 67980 1.058185621435930e+00 -6.000040282678182e+00 -6.014496215331213e+00 3.685599610040958e+00 4.602591407698910e+00 9.261614975452863e+03 + 68000 1.058759898933093e+00 -5.963224505708912e+00 -6.005436712512541e+00 3.922713673867777e+00 4.680324650083448e+00 9.233742396732931e+03 + 68020 1.112093547910427e+00 -6.005732109161148e+00 -6.016874254924848e+00 3.703881914262826e+00 4.639901989046175e+00 9.268927580710226e+03 + 68040 1.122271603299534e+00 -5.989599008918682e+00 -6.044128706592600e+00 3.729052294896074e+00 4.415934332408995e+00 9.352998171172463e+03 + 68060 1.025939157469000e+00 -5.827027338905353e+00 -6.050639975171610e+00 4.615310170150081e+00 4.331291808765603e+00 9.373124313656803e+03 + 68080 1.071387464770243e+00 -5.883874219742358e+00 -5.989770670213702e+00 4.354081946799395e+00 4.746008140770190e+00 9.185653654116059e+03 + 68100 1.129788265624405e+00 -5.966494135969281e+00 -6.022778717631950e+00 3.841718546299201e+00 4.518523768381295e+00 9.287128844478131e+03 + 68120 1.105852428360460e+00 -5.938551888920712e+00 -6.058719691963141e+00 3.991485700989631e+00 4.301463580012578e+00 9.398195115153696e+03 + 68140 1.117195446445403e+00 -5.980746644690299e+00 -6.010306360417205e+00 3.814719025770703e+00 4.644982563715585e+00 9.248728221621162e+03 + 68160 1.079094923508159e+00 -5.962258034166494e+00 -5.994935101414271e+00 3.928942620393838e+00 4.741305843497288e+00 9.201475303563087e+03 + 68180 1.022960723262422e+00 -5.923908053792106e+00 -5.960494292942165e+00 4.168366329812521e+00 4.958282482910667e+00 9.096133470962439e+03 + 68200 9.585438051985593e-01 -5.867967542309847e+00 -6.013710933027940e+00 4.395083836523036e+00 4.558202733302923e+00 9.259158090609058e+03 + 68220 1.070153856184508e+00 -6.068113338160353e+00 -5.968597846446791e+00 3.340033503998526e+00 4.911466857390373e+00 9.120880883758377e+03 + 68240 9.880069422610592e-01 -5.973087248170760e+00 -5.995407175437583e+00 3.846844886548975e+00 4.718680410185296e+00 9.202938534366311e+03 + 68260 1.007799367499914e+00 -6.021647088021457e+00 -6.019345769759562e+00 3.520861469671916e+00 4.534075995259570e+00 9.276552360491722e+03 + 68280 1.010667214230770e+00 -6.040521633712714e+00 -6.024177480165614e+00 3.539706111178801e+00 4.633556770095838e+00 9.291418110519568e+03 + 68300 9.704812877450659e-01 -5.993231819562112e+00 -6.039984524223462e+00 3.681069597082109e+00 4.412608331958971e+00 9.340237516812715e+03 + 68320 9.740335027287123e-01 -6.008506299437751e+00 -6.039262446732052e+00 3.632601115051928e+00 4.455994557789637e+00 9.337975402692264e+03 + 68340 1.041557829587395e+00 -6.115976208677132e+00 -5.968110044434072e+00 3.084359449581695e+00 4.933429846880310e+00 9.119425195244772e+03 + 68360 9.591470654452954e-01 -5.998425190807611e+00 -5.999072632852793e+00 3.685842266160392e+00 4.682124553745621e+00 9.214204913630194e+03 + 68380 9.147543554600593e-01 -5.933413316473539e+00 -6.013931243950524e+00 4.016690751102507e+00 4.554344351420650e+00 9.259860892415572e+03 + 68400 9.624910953020491e-01 -6.000419115996491e+00 -6.034493521770977e+00 3.666801941580529e+00 4.471141430626183e+00 9.323246278852652e+03 + 68420 9.652778807148510e-01 -6.000811497696446e+00 -6.016800220627139e+00 3.664732705372431e+00 4.572922984057520e+00 9.268686995953976e+03 + 68440 9.550755668895630e-01 -5.979311652092239e+00 -6.028409423805362e+00 3.761029133106871e+00 4.479102130074498e+00 9.304477893477066e+03 + 68460 1.041159215439323e+00 -6.097247953482685e+00 -6.034154993129718e+00 3.145535406712026e+00 4.507824948662820e+00 9.322207397598995e+03 + 68480 9.721095945884929e-01 -5.985553720229149e+00 -6.003058535721800e+00 3.701695714038815e+00 4.601180354618565e+00 9.226462787375773e+03 + 68500 9.667722008121157e-01 -5.964862365856964e+00 -5.965486234985314e+00 3.876788942489495e+00 4.873206589411075e+00 9.111379446124642e+03 + 68520 1.017862991400501e+00 -6.017864752707028e+00 -6.016096091225450e+00 3.556934887655836e+00 4.567090815582530e+00 9.266518865516362e+03 + 68540 1.028579212574062e+00 -6.006141758090282e+00 -6.001707558072829e+00 3.667614284118931e+00 4.693076146809381e+00 9.222304830623647e+03 + 68560 1.044070041902980e+00 -5.996127288765649e+00 -6.009839419928474e+00 3.733141097271058e+00 4.654403918188677e+00 9.247280860130231e+03 + 68580 1.056201068147089e+00 -5.974829711530926e+00 -5.999387311150238e+00 3.810025263625354e+00 4.669011726335002e+00 9.215151685520430e+03 + 68600 1.077268258386165e+00 -5.965960417919236e+00 -5.999857966284161e+00 3.868822324552526e+00 4.674177356212470e+00 9.216571930574552e+03 + 68620 1.022937887654411e+00 -5.845113263293216e+00 -6.016577649980578e+00 4.490148141050376e+00 4.505573098663464e+00 9.267992716838227e+03 + 68640 1.102924582639815e+00 -5.932357270652266e+00 -6.007767549684701e+00 4.026235496269465e+00 4.593218004362259e+00 9.240892775362829e+03 + 68660 1.063833538139233e+00 -5.853151871097818e+00 -6.023184893390062e+00 4.496051955946119e+00 4.519696029418895e+00 9.288325071753545e+03 + 68680 1.172491892356842e+00 -6.005782608356718e+00 -5.952373796700607e+00 3.666283947748714e+00 4.972965609264997e+00 9.071413601411577e+03 + 68700 1.031048135885724e+00 -5.798511284780354e+00 -5.963288118215153e+00 4.814330608866713e+00 4.868156532151538e+00 9.104660950449434e+03 + 68720 1.031969781898240e+00 -5.810004205158496e+00 -5.996203882140411e+00 4.746789710085814e+00 4.677602350548767e+00 9.205343112214834e+03 + 68740 1.106598265379271e+00 -5.939219394895012e+00 -5.969942363349176e+00 4.075854971292252e+00 4.899438932064439e+00 9.124958639171578e+03 + 68760 1.031143647261670e+00 -5.856648603940637e+00 -6.009945140710549e+00 4.472735589694690e+00 4.592483152999460e+00 9.247580725756978e+03 + 68780 1.113787694521319e+00 -6.020713644797879e+00 -5.963228585083110e+00 3.599040227607729e+00 4.929128336274170e+00 9.104510043767186e+03 + 68800 1.030959685684618e+00 -5.947121555494259e+00 -6.005457514968761e+00 3.957670855921745e+00 4.622696749158601e+00 9.233818949412806e+03 + 68820 1.047320899711323e+00 -6.020661544814970e+00 -5.994389378393421e+00 3.624582229434301e+00 4.775441074631448e+00 9.199825893821369e+03 + 68840 1.017275824761126e+00 -6.014838586466671e+00 -5.987004421084047e+00 3.587472000329516e+00 4.747300085279718e+00 9.177179532073966e+03 + 68860 1.011735645672689e+00 -6.029469475514320e+00 -5.983202095178306e+00 3.559418148104457e+00 4.825092605847821e+00 9.165541777403114e+03 + 68880 9.039255854469510e-01 -5.880603504826577e+00 -6.048154803535372e+00 4.345052933703627e+00 4.382947448038049e+00 9.365446658451310e+03 + 68900 1.064168037297821e+00 -6.124645769847694e+00 -5.973707631985236e+00 3.054046078688467e+00 4.920756223896051e+00 9.136529162824945e+03 + 68920 9.675957211968103e-01 -5.985366245032504e+00 -6.024620428451745e+00 3.809556106675948e+00 4.584152510917412e+00 9.292766708737408e+03 + 68940 9.761932849515360e-01 -6.000915652923100e+00 -5.978868236394590e+00 3.663667240243435e+00 4.790266917776823e+00 9.152292253078402e+03 + 68960 9.947124765534825e-01 -6.027720303903888e+00 -6.005074094475846e+00 3.554332651561972e+00 4.684370690587370e+00 9.232618487504471e+03 + 68980 9.906057004045660e-01 -6.020411971057026e+00 -6.041885876376416e+00 3.530922331174645e+00 4.407615843754600e+00 9.346084654755450e+03 + 69000 9.763293818763045e-01 -5.996610684776140e+00 -6.023769359011592e+00 3.739079572872795e+00 4.583130262621580e+00 9.290157458996417e+03 + 69020 9.553332442362521e-01 -5.963113664142963e+00 -6.030109120696441e+00 3.879581034914167e+00 4.494882755870702e+00 9.309711289148087e+03 + 69040 9.905965692528158e-01 -6.010250273679377e+00 -6.019074882482570e+00 3.620830552467076e+00 4.570158283115344e+00 9.275727617843337e+03 + 69060 1.014009329505017e+00 -6.040337137167427e+00 -6.020171579017079e+00 3.472817838459469e+00 4.588611593968803e+00 9.279089639608706e+03 + 69080 1.012275793212847e+00 -6.033106740344106e+00 -6.002902161810868e+00 3.523081250198133e+00 4.696520614279406e+00 9.225973955298950e+03 + 69100 1.028565802408747e+00 -6.049058695473033e+00 -6.021349190992324e+00 3.493085446907488e+00 4.652197709667675e+00 9.282707937539701e+03 + 69120 9.945157154226723e-01 -5.992390225114523e+00 -6.040482323287392e+00 3.737167392898005e+00 4.461015122961250e+00 9.341750005780248e+03 + 69140 1.038333255440966e+00 -6.051117268212847e+00 -6.004192447339080e+00 3.416638093764585e+00 4.686087676814315e+00 9.229942028695727e+03 + 69160 9.883890664940971e-01 -5.971726164455381e+00 -6.006988257236001e+00 3.916167956821527e+00 4.713687563283987e+00 9.238504651613111e+03 + 69180 1.057386555966456e+00 -6.068203481263609e+00 -5.979434834898930e+00 3.290323892418878e+00 4.800047196748492e+00 9.154030190014399e+03 + 69200 9.533693440535429e-01 -5.905556989868501e+00 -6.056559726487909e+00 4.151454872947294e+00 4.284373791680681e+00 9.391518643401398e+03 + 69220 1.040738134918848e+00 -6.027782722845318e+00 -6.038829499747291e+00 3.532434850757267e+00 4.469002548302937e+00 9.336662305077858e+03 + 69240 9.713037903605732e-01 -5.918993695912039e+00 -6.059745850353981e+00 4.071832468572653e+00 4.263611816441522e+00 9.401373667541577e+03 + 69260 1.046048801579955e+00 -6.025313467269189e+00 -5.995517501492674e+00 3.597325934507529e+00 4.768418980907084e+00 9.203299953190959e+03 + 69280 1.000497256900058e+00 -5.955059108042871e+00 -6.058987165753200e+00 3.908876720370353e+00 4.312105730182692e+00 9.399006937829910e+03 + 69300 1.011452198015059e+00 -5.971106928925900e+00 -6.051035660728070e+00 3.883820888896827e+00 4.424857741957489e+00 9.374385945518439e+03 + 69320 1.020563688904726e+00 -5.987845203591353e+00 -6.017543382453725e+00 3.768752021802991e+00 4.598220482996918e+00 9.271001934929609e+03 + 69340 1.045943242228663e+00 -6.033502117902223e+00 -6.006721333158722e+00 3.546307784777368e+00 4.700087195087599e+00 9.237695659279701e+03 + 69360 9.806687953149080e-01 -5.948641703923162e+00 -6.045261453173865e+00 3.931574878732899e+00 4.376769326677486e+00 9.356490705408236e+03 + 69380 9.857256539913615e-01 -5.971382391363642e+00 -6.010747401340799e+00 3.832545440674831e+00 4.606505461670391e+00 9.250076428298547e+03 + 69400 1.022409869359430e+00 -6.044027074030524e+00 -6.001708899923193e+00 3.425537261769976e+00 4.668534766210551e+00 9.222314647945832e+03 + 69420 1.035644291220285e+00 -6.087581175133526e+00 -5.958354065124738e+00 3.224902741263812e+00 4.966944804764913e+00 9.089647653689444e+03 + 69440 9.095007837062773e-01 -5.923743736473114e+00 -5.958374519506590e+00 4.132750713076492e+00 4.933895397801920e+00 9.089706482071162e+03 + 69460 1.027389157396801e+00 -6.120124126966548e+00 -5.956904618554155e+00 3.053114838543544e+00 4.990346513984798e+00 9.085238222539620e+03 + 69480 9.683497964535380e-01 -6.051763216451542e+00 -5.997284783304460e+00 3.414135583560245e+00 4.726959177201076e+00 9.208706735175516e+03 + 69500 9.212536250790382e-01 -5.997185319223476e+00 -6.011614979188901e+00 3.718076372814169e+00 4.635219032310035e+00 9.252716032455261e+03 + 69520 9.721843555603263e-01 -6.084044501838047e+00 -6.015748332395084e+00 3.205210678190241e+00 4.597377851929799e+00 9.265464249482458e+03 + 69540 9.590111536189274e-01 -6.073618444084130e+00 -6.010953032221784e+00 3.284581101136580e+00 4.644415593491315e+00 9.250718968163434e+03 + 69560 9.074528081860608e-01 -6.003511697475989e+00 -6.021107183515619e+00 3.605739801222620e+00 4.504703797490398e+00 9.281961481687993e+03 + 69580 9.627918049178775e-01 -6.085899804983935e+00 -5.982005752607584e+00 3.246873528130267e+00 4.843449254427920e+00 9.161898579351817e+03 + 69600 9.578933697392338e-01 -6.071459845416175e+00 -6.007711994427105e+00 3.345017152004345e+00 4.711067177331648e+00 9.240746692495073e+03 + 69620 9.162422527648463e-01 -5.995539496112285e+00 -6.032129723599314e+00 3.678608003307011e+00 4.468501254757083e+00 9.315954445399746e+03 + 69640 9.416143456138271e-01 -6.010515158476538e+00 -5.973266283913429e+00 3.662236788552766e+00 4.876125590538853e+00 9.135160880491110e+03 + 69660 1.027074588764636e+00 -6.100173537029955e+00 -5.973109037536418e+00 3.185278939114705e+00 4.914902958374341e+00 9.134661571271552e+03 + 69680 9.791875397304717e-01 -5.983851139923420e+00 -5.993850303412422e+00 3.821142840621260e+00 4.763726096501858e+00 9.198162543398916e+03 + 69700 9.697375462528828e-01 -5.922042522891428e+00 -5.963026793051449e+00 4.189162596669043e+00 4.953824575114895e+00 9.103881697766557e+03 + 69720 9.705280689973462e-01 -5.882312153407899e+00 -6.035165505383523e+00 4.345987591997969e+00 4.468279990974167e+00 9.325291757147959e+03 + 69740 1.070249888159113e+00 -5.998500338957355e+00 -5.977651785444197e+00 3.735347461609882e+00 4.855063082185666e+00 9.148582692650780e+03 + 69760 1.035725922480138e+00 -5.927823499787365e+00 -6.033416060720538e+00 4.037601983583679e+00 4.431273158309409e+00 9.319910245070272e+03 + 69780 1.085301734272217e+00 -5.990521970151159e+00 -5.997856704985521e+00 3.735857462943937e+00 4.693740280478481e+00 9.210461730390949e+03 + 69800 1.071316322451426e+00 -5.968649423321914e+00 -5.984772924585506e+00 3.884202954031527e+00 4.791619314672223e+00 9.170337491001463e+03 + 69820 1.034915375954556e+00 -5.919132923591999e+00 -6.022728640037766e+00 4.081414592968081e+00 4.486551957751177e+00 9.286893631276196e+03 + 69840 1.017085465824558e+00 -5.901541081957431e+00 -5.983557129569766e+00 4.196777016647249e+00 4.725828179314876e+00 9.166597123580881e+03 + 69860 1.067378374846961e+00 -5.987401345859645e+00 -5.987026055489959e+00 3.807615206262764e+00 4.809770181641498e+00 9.177257793025730e+03 + 69880 1.006665643882750e+00 -5.911918328804356e+00 -6.057418956341202e+00 4.095885398547504e+00 4.260398279081594e+00 9.394134204315485e+03 + 69900 1.043019348693840e+00 -5.986273419824903e+00 -5.991299533259530e+00 3.785403688681771e+00 4.756542967551603e+00 9.190345445302723e+03 + 69920 1.028027544765967e+00 -5.987390533070998e+00 -5.991722359386385e+00 3.776373834394545e+00 4.751499817343636e+00 9.191637105859843e+03 + 69940 1.015912278710633e+00 -5.997006573586981e+00 -5.986648840548153e+00 3.701864269887158e+00 4.761339975850117e+00 9.176092548530603e+03 + 69960 1.045185220598861e+00 -6.063541906188206e+00 -5.974751373127927e+00 3.363915204433888e+00 4.873764185556594e+00 9.139707294393138e+03 + 69980 9.477117614004495e-01 -5.943452371574800e+00 -6.026679157623763e+00 3.982193124407448e+00 4.504292039610784e+00 9.299127058796066e+03 + 70000 9.707915352604647e-01 -5.997467646211382e+00 -5.972020959127436e+00 3.707216247618308e+00 4.853335062716425e+00 9.131360425946097e+03 + 70020 1.015120481064699e+00 -6.078819356331223e+00 -5.983630767330641e+00 3.284250054209212e+00 4.830837662637096e+00 9.166847953507689e+03 + 70040 1.000672012097999e+00 -6.070211256449978e+00 -6.004674633853817e+00 3.340266284909391e+00 4.716587713616121e+00 9.231409250086712e+03 + 70060 9.686696512221833e-01 -6.032853416319805e+00 -6.019663257627252e+00 3.490397418024501e+00 4.566137350407597e+00 9.277522863225144e+03 + 70080 9.693827728203237e-01 -6.041044825893208e+00 -5.977113868821069e+00 3.588547553347973e+00 4.955649002139833e+00 9.146881744358072e+03 + 70100 9.967754524580520e-01 -6.083007609448023e+00 -5.945230989973715e+00 3.326064204642445e+00 5.117198874526879e+00 9.049670714756514e+03 + 70120 9.828767386894930e-01 -6.059066470857852e+00 -5.985857131303471e+00 3.372438585682287e+00 4.792817942512224e+00 9.173679575131982e+03 + 70140 9.660478922086816e-01 -6.027507503199844e+00 -5.988397179497724e+00 3.569471628738232e+00 4.794049159738837e+00 9.181449129958715e+03 + 70160 9.905858216119811e-01 -6.054146956497530e+00 -6.007541078146814e+00 3.415842135823104e+00 4.683460301549282e+00 9.240207099764941e+03 + 70180 8.950074121801050e-01 -5.903327348825036e+00 -6.039728002586196e+00 4.232624189947325e+00 4.449390528117786e+00 9.339417308997656e+03 + 70200 9.794185106957350e-01 -6.018914841736214e+00 -5.993811010639088e+00 3.579670079755907e+00 4.723820162720910e+00 9.198059380683255e+03 + 70220 1.078837683433257e+00 -6.156914232003524e+00 -5.961253571386543e+00 2.847060916209562e+00 4.970574707861644e+00 9.098498049056390e+03 + 70240 9.366281851987736e-01 -5.939655619514205e+00 -5.970678119956508e+00 4.043978709796065e+00 4.865842711539936e+00 9.127237668088896e+03 + 70260 9.752575082414875e-01 -5.990497852886199e+00 -5.992604915988102e+00 3.752548668981822e+00 4.740449586583734e+00 9.194338944782810e+03 + 70280 9.977503004211432e-01 -6.016864548592773e+00 -5.999224733959485e+00 3.638336004035229e+00 4.739626549412058e+00 9.214652885976906e+03 + 70300 1.046315509728615e+00 -6.083932480389105e+00 -5.963565114341437e+00 3.217506786386298e+00 4.908674829021706e+00 9.105543934919517e+03 + 70320 9.613133272941515e-01 -5.951631121426818e+00 -6.020672062458349e+00 3.953707572723203e+00 4.557263805269057e+00 9.280607438591614e+03 + 70340 1.036977662652044e+00 -6.059603673747147e+00 -5.978937081932203e+00 3.396796604012314e+00 4.859996657328457e+00 9.152523746240680e+03 + 70360 9.872912234407855e-01 -5.981937936786707e+00 -6.020763258120032e+00 3.867383395781342e+00 4.644442392486335e+00 9.280888369667431e+03 + 70380 1.008020251973274e+00 -6.009656073949808e+00 -6.000397112871131e+00 3.619545320007460e+00 4.672711707340818e+00 9.218270252549011e+03 + 70400 9.672419385395381e-01 -5.944746366645802e+00 -6.028716125285468e+00 3.968094807388925e+00 4.485927459001807e+00 9.305416550712849e+03 + 70420 1.039108528810288e+00 -6.047971162607112e+00 -5.973185045622053e+00 3.501634726434424e+00 4.931068183276834e+00 9.134909217872908e+03 + 70440 9.948620202841731e-01 -5.978934143725552e+00 -5.988820292240692e+00 3.854529551607751e+00 4.797761756957282e+00 9.182769192243308e+03 + 70460 1.012261133289885e+00 -6.000936856054676e+00 -6.018539852025659e+00 3.725906460470468e+00 4.624827333550267e+00 9.274047005882081e+03 + 70480 1.103871442853379e+00 -6.133849440238432e+00 -5.941750270228090e+00 2.979184411960951e+00 5.082247573410816e+00 9.039121992033910e+03 + 70500 9.653908683193807e-01 -5.925649498347066e+00 -6.034605815376758e+00 4.105814009384024e+00 4.480169976063963e+00 9.323598231267842e+03 + 70520 9.951999102107326e-01 -5.967997848100517e+00 -6.032156397354760e+00 3.869573695621772e+00 4.501165377300497e+00 9.316023326454024e+03 + 70540 1.002694821429421e+00 -5.979047797071523e+00 -6.018978029477211e+00 3.841215552995981e+00 4.611929979339029e+00 9.275397392270268e+03 + 70560 9.875572520475007e-01 -5.956519830569903e+00 -6.038585229625601e+00 3.910299574181157e+00 4.439067353223879e+00 9.335885177063705e+03 + 70580 1.014939997971462e+00 -6.001027241523534e+00 -6.019789987737560e+00 3.725736566909954e+00 4.617997974623425e+00 9.277900414774411e+03 + 70600 1.000818343697304e+00 -5.986433041409258e+00 -6.013303130518302e+00 3.736378894440388e+00 4.582086684643411e+00 9.257933365069375e+03 + 70620 9.740126506711496e-01 -5.956217898819240e+00 -5.962656686060202e+00 4.000065225531714e+00 4.963092712795004e+00 9.102763074815577e+03 + 70640 9.981058339661091e-01 -6.002167301288491e+00 -6.004026576407494e+00 3.661612031579891e+00 4.650935786124684e+00 9.229401136049866e+03 + 70660 9.965906771533984e-01 -6.012427642129120e+00 -5.958140479663692e+00 3.663359967809839e+00 4.975085255597566e+00 9.088988325179287e+03 + 70680 9.382838027365347e-01 -5.939089088221248e+00 -5.999087413120754e+00 4.048350072841886e+00 4.703830406558155e+00 9.214230502644094e+03 + 70700 1.023240153569715e+00 -6.076832120326600e+00 -5.973278143728370e+00 3.268182881565733e+00 4.862805840118853e+00 9.135216608553872e+03 + 70720 9.530975911293852e-01 -5.984648090030053e+00 -6.024151004207491e+00 3.773230103266596e+00 4.546398257003531e+00 9.291303613865319e+03 + 70740 9.992495439373592e-01 -6.067741907079502e+00 -5.979988340058652e+00 3.317441731645641e+00 4.821336293299969e+00 9.155716166945285e+03 + 70760 9.199984095504502e-01 -5.962595449051627e+00 -5.989150323659540e+00 3.946533265366682e+00 4.794051066014477e+00 9.183744982626557e+03 + 70780 9.617289887022529e-01 -6.032282293212178e+00 -5.978354666734342e+00 3.581601087280179e+00 4.891261863789141e+00 9.150720815830018e+03 + 70800 9.783795905178989e-01 -6.060038823915549e+00 -6.043090670015435e+00 3.344089601820642e+00 4.441408524233434e+00 9.349812523472539e+03 + 70820 9.503296099671792e-01 -6.022988382354976e+00 -6.014281410033853e+00 3.601177916992074e+00 4.651174699459578e+00 9.260943300505580e+03 + 70840 9.269698495274009e-01 -5.990169279207143e+00 -5.984208296283782e+00 3.758828763059255e+00 4.793057649464320e+00 9.168641562492510e+03 + 70860 9.502038762661766e-01 -6.019852626647474e+00 -5.980514248844599e+00 3.583575070135891e+00 4.809462123074290e+00 9.157326945480901e+03 + 70880 9.646639112807736e-01 -6.029823085837029e+00 -6.010592778601673e+00 3.508161176736802e+00 4.618584576762640e+00 9.249589621868949e+03 + 70900 1.038008729876569e+00 -6.119866899931527e+00 -5.955381058418338e+00 3.116701280165225e+00 5.061204436235668e+00 9.080587463363865e+03 + 70920 1.000887252368635e+00 -6.040786120019872e+00 -5.974226306834627e+00 3.485646288947786e+00 4.867843036355266e+00 9.138111997870850e+03 + 70940 9.950406566219961e-01 -6.002143253159398e+00 -5.991559806985427e+00 3.734741026954325e+00 4.795512812668273e+00 9.191151206731594e+03 + 70960 1.022482460129016e+00 -6.008666826086580e+00 -5.994843294251231e+00 3.645842485133266e+00 4.725219344116478e+00 9.201234446200129e+03 + 70980 1.057750807985447e+00 -6.026665060525588e+00 -5.971510130506083e+00 3.586058483713317e+00 4.902766627083153e+00 9.129721824753598e+03 + 71000 1.021041222926839e+00 -5.940230591509149e+00 -6.012411958396694e+00 4.004143202725475e+00 4.589666624026768e+00 9.255189507624971e+03 + 71020 1.070634466967631e+00 -5.987429807048340e+00 -6.026043142671919e+00 3.722429889830744e+00 4.500706141285777e+00 9.297179997588075e+03 + 71040 1.066945226785466e+00 -5.963862137476182e+00 -6.027828740851643e+00 3.864838998453726e+00 4.497532863071954e+00 9.302677691768688e+03 + 71060 1.055890863954758e+00 -5.938936219966685e+00 -6.014655210841430e+00 4.013409359351689e+00 4.578619196272935e+00 9.262066503781221e+03 + 71080 1.039855635137347e+00 -5.911400509930479e+00 -6.005082470121936e+00 4.192372071589639e+00 4.654435758933809e+00 9.232641040677694e+03 + 71100 1.053677967158585e+00 -5.934018991247677e+00 -6.036911032500970e+00 4.066469742196070e+00 4.475647718827738e+00 9.330706836157968e+03 + 71120 1.079192384974004e+00 -5.981496709035496e+00 -6.022169759484532e+00 3.776071191946868e+00 4.542520242134289e+00 9.285257127014582e+03 + 71140 1.046337587084948e+00 -5.952422353911435e+00 -6.022329251094123e+00 3.942178836425513e+00 4.540762614745137e+00 9.285735356084175e+03 + 71160 1.009567219050481e+00 -5.926498786025287e+00 -5.995357414956178e+00 4.073330344931237e+00 4.677933441771674e+00 9.202786527801039e+03 + 71180 1.014990170250464e+00 -5.965696261738615e+00 -6.007628315977416e+00 3.835945279178671e+00 4.595164934775055e+00 9.240471974228722e+03 + 71200 1.029173132532460e+00 -6.022011662890177e+00 -5.990208651027154e+00 3.559186033413883e+00 4.741803849031538e+00 9.187019307974540e+03 + 71220 1.012138071985217e+00 -6.033844609239373e+00 -6.011514953121693e+00 3.484155727752280e+00 4.612376068683117e+00 9.252434792298589e+03 + 71240 1.025917967794872e+00 -6.089231769136369e+00 -5.985025697996741e+00 3.217168782824900e+00 4.815536169146036e+00 9.171157539428934e+03 + 71260 9.809942674716783e-01 -6.052012306116996e+00 -5.989470348912601e+00 3.400728671118710e+00 4.759854267722943e+00 9.184750632348270e+03 + 71280 9.021656796980402e-01 -5.954258760076265e+00 -6.004869198070065e+00 3.959333838373098e+00 4.668720871472729e+00 9.232004297132007e+03 + 71300 9.497922217545449e-01 -6.033057306956294e+00 -5.962910687959932e+00 3.559307643167286e+00 4.962100384598612e+00 9.103542218241142e+03 + 71320 9.749837955733420e-01 -6.070326882077335e+00 -6.027363698450371e+00 3.298519424963276e+00 4.545220673880488e+00 9.301243138679869e+03 + 71340 9.660823418425656e-01 -6.055399562706856e+00 -6.027590255915229e+00 3.355539282573889e+00 4.515224625647727e+00 9.301949012358944e+03 + 71360 9.187606548944648e-01 -5.979929752717196e+00 -6.049734439273840e+00 3.781919954718389e+00 4.381090642269799e+00 9.370376242774466e+03 + 71380 1.024283947537621e+00 -6.129366491622552e+00 -6.026736133858835e+00 2.960834979253221e+00 4.550154375529022e+00 9.299334065604191e+03 + 71400 1.002137868858481e+00 -6.089800241413615e+00 -6.004566230915030e+00 3.233014673876009e+00 4.722441552079383e+00 9.231073648795107e+03 + 71420 9.695674030826034e-01 -6.033693207820598e+00 -5.999031680513342e+00 3.517424306674779e+00 4.716456160327053e+00 9.214084663559172e+03 + 71440 9.347608204037869e-01 -5.971319079686294e+00 -6.017244968010957e+00 3.928156929085375e+00 4.664443371316914e+00 9.270063452489039e+03 + 71460 9.885873963879660e-01 -6.036938991973262e+00 -6.008396850466092e+00 3.486755509419020e+00 4.650648902835319e+00 9.242844882882900e+03 + 71480 1.006250283318458e+00 -6.046978007860598e+00 -6.008171242234155e+00 3.432939106299894e+00 4.655773559854502e+00 9.242149331584393e+03 + 71500 9.633713759708148e-01 -5.965819070061725e+00 -5.995256800994655e+00 3.874017261051561e+00 4.704981254560535e+00 9.202488180353943e+03 + 71520 1.056067018329791e+00 -6.081989528969133e+00 -5.998926891446316e+00 3.264828825185319e+00 4.741787343742947e+00 9.213770728463212e+03 + 71540 9.778016502589417e-01 -5.945677647536491e+00 -6.007842032934904e+00 3.952163684048537e+00 4.595206163183301e+00 9.241159800734624e+03 + 71560 1.010022537433354e+00 -5.976759792983303e+00 -5.977544960694596e+00 3.805800442467798e+00 4.801291887965242e+00 9.148221496655919e+03 + 71580 1.001353899717096e+00 -5.944191141072666e+00 -6.001598713213761e+00 3.966863977589671e+00 4.637220814562427e+00 9.221948061761279e+03 + 71600 1.042614861595804e+00 -5.983834060640207e+00 -6.037929670151215e+00 3.719313132468340e+00 4.408687771387614e+00 9.333857102659678e+03 + 71620 1.014360341707726e+00 -5.923486040209365e+00 -6.015373949858654e+00 4.087071567636482e+00 4.559436970822202e+00 9.264272981369902e+03 + 71640 1.060092960321166e+00 -5.976268472739040e+00 -5.988224873490177e+00 3.829401340134444e+00 4.760745836774383e+00 9.180908657025637e+03 + 71660 1.101660772109465e+00 -6.025999638105516e+00 -5.963427114420098e+00 3.561851215342017e+00 4.921152329410431e+00 9.105109841800910e+03 + 71680 1.019476398754853e+00 -5.896646246523181e+00 -5.989380866768085e+00 4.262227235988544e+00 4.729730695906205e+00 9.184429530645475e+03 + 71700 1.013067314508968e+00 -5.880575580475333e+00 -6.009736614047698e+00 4.366492058620811e+00 4.624829416242942e+00 9.246933826535524e+03 + 71720 1.051359132139104e+00 -5.931087566622304e+00 -6.017182311054659e+00 4.027836432239109e+00 4.533467086589882e+00 9.269890314896569e+03 + 71740 1.054603422187828e+00 -5.937443699584298e+00 -6.044248870232007e+00 4.048216016550339e+00 4.434924198644455e+00 9.353374224651739e+03 + 71760 1.039660580793031e+00 -5.927883600115812e+00 -6.016908705301013e+00 4.048569758317579e+00 4.537373827753653e+00 9.269008116703695e+03 + 71780 1.025747930132632e+00 -5.928424739469065e+00 -6.007564996616503e+00 4.085248485645741e+00 4.630812882189934e+00 9.240247936630914e+03 + 71800 1.107578329825317e+00 -6.083312515958898e+00 -6.006293441696588e+00 3.266653212662347e+00 4.708908655739755e+00 9.236370946567660e+03 + 71820 1.016990557480097e+00 -5.995082823234838e+00 -6.023055097502324e+00 3.738706013150396e+00 4.578084885611040e+00 9.287939383405237e+03 + 71840 9.264024913368424e-01 -5.907588749760180e+00 -6.034039089548677e+00 4.148719289400604e+00 4.422621870208213e+00 9.321831661510323e+03 + 71860 1.033909187919626e+00 -6.104585291959766e+00 -5.946695712749326e+00 3.129267105378001e+00 5.035893502537766e+00 9.054149487456509e+03 + 71880 1.001354788509192e+00 -6.084727101703975e+00 -5.982498194001491e+00 3.232948738739945e+00 4.819962946639947e+00 9.163394372863633e+03 + 71900 9.835514598576397e-01 -6.079514307423918e+00 -5.963645123068739e+00 3.248542695858498e+00 4.913881483124266e+00 9.105800189567453e+03 + 71920 8.829928019528501e-01 -5.943089219554238e+00 -5.997490276429883e+00 3.961663549303919e+00 4.649284262187628e+00 9.209324646334553e+03 + 71940 9.627508206191743e-01 -6.068412788000298e+00 -5.961839794832189e+00 3.295080386661994e+00 4.907039005550669e+00 9.100280505853712e+03 + 71960 9.702505683692159e-01 -6.080883011773426e+00 -5.978208058793721e+00 3.282792833683917e+00 4.872368302591010e+00 9.150280517290556e+03 + 71980 8.779140154103519e-01 -5.938386417148360e+00 -6.052222931487897e+00 4.019626740990987e+00 4.365959859509704e+00 9.378057085114166e+03 + 72000 9.692840038197904e-01 -6.064069417931561e+00 -5.971123729960807e+00 3.378974529190282e+00 4.912683052817082e+00 9.128614748407430e+03 + 72020 9.885005812406391e-01 -6.076529438965784e+00 -5.978131809790245e+00 3.243379661361396e+00 4.808394075071244e+00 9.150048352967091e+03 + 72040 1.007114140287485e+00 -6.082095634505736e+00 -6.006816222712280e+00 3.315407309135362e+00 4.747673341104709e+00 9.238004237761434e+03 + 72060 9.436526799685707e-01 -5.961129074014891e+00 -6.069174796479659e+00 3.889357149440118e+00 4.268941891025908e+00 9.430654331575221e+03 + 72080 1.025446156098957e+00 -6.056560286085652e+00 -6.016222071584070e+00 3.380304561053606e+00 4.611932831040212e+00 9.266936970954433e+03 + 72100 9.673429470591209e-01 -5.942926359305398e+00 -6.006071616955257e+00 4.006821794380816e+00 4.644231953258286e+00 9.235687911210844e+03 + 72120 1.076109701708345e+00 -6.075492548551919e+00 -5.951437940083753e+00 3.372147805509516e+00 5.084488564722344e+00 9.068564740289754e+03 + 72140 1.052063419745957e+00 -6.011974858631113e+00 -6.002007187257209e+00 3.641997181415203e+00 4.699233092936321e+00 9.223181051277681e+03 + 72160 9.889327526422871e-01 -5.896777895197650e+00 -6.016254497282827e+00 4.226945622404854e+00 4.540892484287347e+00 9.266988935274836e+03 + 72180 1.030426696758700e+00 -5.941565784478201e+00 -5.975998700735959e+00 4.006227391298908e+00 4.808508257670298e+00 9.143499426995846e+03 + 72200 1.060346588740650e+00 -5.971354774290645e+00 -5.967719282569290e+00 3.835195911823096e+00 4.856071467877639e+00 9.118185723323058e+03 + 72220 1.004155716955443e+00 -5.877994572684685e+00 -6.024969063165532e+00 4.300528195844373e+00 4.456577927274452e+00 9.293835559863985e+03 + 72240 1.024295760753139e+00 -5.904135706042736e+00 -5.935521598883210e+00 4.300478893856221e+00 5.120256240214998e+00 9.020129012012143e+03 + 72260 1.056794444372592e+00 -5.950095911486052e+00 -5.963206819130766e+00 3.967748716473400e+00 4.892463855871050e+00 9.104416390393446e+03 + 72280 9.753259447096679e-01 -5.830845910769913e+00 -6.001928689152051e+00 4.615487269334664e+00 4.633103480890035e+00 9.222913718649555e+03 + 72300 1.024328505548032e+00 -5.909413017359982e+00 -6.048300169600111e+00 4.123846497902045e+00 4.326334977021872e+00 9.365884342484200e+03 + 72320 1.085568188852727e+00 -6.015137226153978e+00 -5.997392990391079e+00 3.616787134683953e+00 4.718677282346134e+00 9.209052618705000e+03 + 72340 1.065595641762248e+00 -6.015008101822858e+00 -5.993867705688645e+00 3.594330813413744e+00 4.715722239482124e+00 9.198223975579322e+03 + 72360 1.019416689152659e+00 -6.001685528748026e+00 -5.987128719805158e+00 3.713848098115320e+00 4.797435547724170e+00 9.177591508713300e+03 + 72380 9.905270035329032e-01 -6.032412090052161e+00 -6.003219528571488e+00 3.509740012945390e+00 4.677368218501700e+00 9.226938711663375e+03 + 72400 9.296240819384755e-01 -6.009041962058177e+00 -5.988165620669675e+00 3.656340740757732e+00 4.776215923613898e+00 9.180777368292824e+03 + 72420 9.328665435652380e-01 -6.051579303338874e+00 -5.987827404840168e+00 3.425846439736976e+00 4.791919706490960e+00 9.179709445583892e+03 + 72440 9.613782984246148e-01 -6.112660007703798e+00 -5.964117939541906e+00 3.083369340119873e+00 4.936320882316211e+00 9.107239036103767e+03 + 72460 9.604834131242277e-01 -6.118326196879747e+00 -5.985339608751298e+00 3.058491114850105e+00 4.822120683491663e+00 9.172110418675380e+03 + 72480 9.679405581378538e-01 -6.129614542692619e+00 -5.977851321883492e+00 3.006005752239879e+00 4.877453651408409e+00 9.149189633129146e+03 + 72500 9.150712450642432e-01 -6.044728725663223e+00 -5.976991795679017e+00 3.501072526666415e+00 4.890028460891764e+00 9.146550699383255e+03 + 72520 9.665448243271305e-01 -6.108039066141674e+00 -5.984367540168226e+00 3.127516779427391e+00 4.837657819673719e+00 9.169120388347383e+03 + 72540 9.183810617074951e-01 -6.017536439154661e+00 -6.014539778119937e+00 3.572982841884646e+00 4.590190133277821e+00 9.261757325341860e+03 + 72560 9.461344392215894e-01 -6.033336571275933e+00 -5.966321956735404e+00 3.547996782444740e+00 4.932805069614542e+00 9.113946458618715e+03 + 72580 9.173246130269320e-01 -5.960539493740429e+00 -6.004286651618675e+00 3.914256168791905e+00 4.663053218404214e+00 9.230191886583694e+03 + 72600 9.393550388652162e-01 -5.959128513907172e+00 -6.033142939610921e+00 3.896589513720402e+00 4.471587227634110e+00 9.319056824929668e+03 + 72620 9.850243104538540e-01 -5.993293763707370e+00 -5.984232442869025e+00 3.738941511217701e+00 4.790973017706341e+00 9.168699224166536e+03 + 72640 1.024325434842339e+00 -6.020519380405931e+00 -5.980483275282700e+00 3.560088519276019e+00 4.789982030460854e+00 9.157229032329880e+03 + 72660 1.015675733732020e+00 -5.980742664226510e+00 -6.019912245363479e+00 3.808606402237166e+00 4.583688605875601e+00 9.278273658364073e+03 + 72680 9.742259500825656e-01 -5.899507991734384e+00 -6.002106289781164e+00 4.195827051378737e+00 4.606691746958822e+00 9.223513298934795e+03 + 72700 1.055969606268226e+00 -6.006207806379660e+00 -5.951536330102525e+00 3.630286793610344e+00 4.944218870777266e+00 9.068868861803923e+03 + 72720 1.021595246853594e+00 -5.943295321379082e+00 -5.992003510911981e+00 3.981949725284911e+00 4.702259763419041e+00 9.192501946840819e+03 + 72740 1.037188966076422e+00 -5.958667751745817e+00 -5.976647656877137e+00 3.916817662971957e+00 4.813574265326590e+00 9.145496850070342e+03 + 72760 1.047833886900276e+00 -5.968758454973336e+00 -5.964551538967227e+00 3.857167827479551e+00 4.881324590204775e+00 9.108534511318219e+03 + 72780 9.658054618636885e-01 -5.846283266235456e+00 -5.969943808516325e+00 4.546419966044327e+00 4.836341995860511e+00 9.124891524893375e+03 + 72800 1.058002979624345e+00 -5.981803573160906e+00 -6.003887959413035e+00 3.776653025189787e+00 4.649841061782335e+00 9.228956293605293e+03 + 72820 1.053777964199003e+00 -5.979188793120241e+00 -5.994141247565545e+00 3.852432135262617e+00 4.766572827952836e+00 9.199054834048617e+03 + 72840 1.022364730638935e+00 -5.941322834362438e+00 -6.016845319761229e+00 4.010401969176714e+00 4.576740170950012e+00 9.268822543281320e+03 + 72860 1.037561485102724e+00 -5.979086308878691e+00 -6.012290618666830e+00 3.817982767730245e+00 4.627318482576417e+00 9.254805997212261e+03 + 72880 1.009164477343931e+00 -5.960241969863128e+00 -6.019878907357963e+00 3.887391883818386e+00 4.544947359936794e+00 9.278187541451096e+03 + 72900 1.066736862082941e+00 -6.080005472524819e+00 -5.975125118827476e+00 3.264824451125244e+00 4.867063672237672e+00 9.140846841802993e+03 + 72920 1.003399253080656e+00 -6.029514267911638e+00 -5.978707241909753e+00 3.509022454205784e+00 4.800764259870475e+00 9.151775325010045e+03 + 72940 9.535761167765118e-01 -6.001615836280941e+00 -5.954632160062701e+00 3.731703458704696e+00 5.001490998250222e+00 9.078290934050972e+03 + 72960 9.196298383619387e-01 -5.987269461269023e+00 -5.978560263851897e+00 3.805059703354952e+00 4.855069262668036e+00 9.151337730454492e+03 + 72980 1.020585762533329e+00 -6.167090803238928e+00 -5.954835678171033e+00 2.831065740004589e+00 5.049867514518892e+00 9.078944507191225e+03 + 73000 9.621241155304027e-01 -6.101125246511409e+00 -5.980738179444289e+00 3.097751160944852e+00 4.789032329882674e+00 9.158019567042968e+03 + 73020 9.090859665793796e-01 -6.032119407713447e+00 -5.978809183999481e+00 3.506135737145520e+00 4.812251291441573e+00 9.152120049149718e+03 + 73040 8.931885141968973e-01 -6.008852108101132e+00 -6.031736567598451e+00 3.592191671398244e+00 4.460785563605972e+00 9.314757023904172e+03 + 73060 9.624623816456107e-01 -6.105908641321625e+00 -6.029303866979906e+00 3.094868196543592e+00 4.534744665364256e+00 9.307232013232511e+03 + 73080 9.589855232223315e-01 -6.092052100563207e+00 -6.012355409949041e+00 3.174713604240505e+00 4.632344334770058e+00 9.255026730558202e+03 + 73100 9.513983614694118e-01 -6.069742644660746e+00 -5.965585402751850e+00 3.349465180483686e+00 4.947552181805662e+00 9.111705695140459e+03 + 73120 9.216360532766519e-01 -6.011555531518292e+00 -5.951396103555972e+00 3.633435605529262e+00 4.978880350530298e+00 9.068431151905388e+03 + 73140 9.081053927870062e-01 -5.972153949279168e+00 -5.994845181372799e+00 3.817844021358846e+00 4.687547455220395e+00 9.201225144622225e+03 + 73160 1.002279091406740e+00 -6.089720883028985e+00 -6.000236091409096e+00 3.208025968660132e+00 4.721861489868288e+00 9.217778013995548e+03 + 73180 9.673261717878381e-01 -6.018428204780073e+00 -6.027708050115123e+00 3.539136878443993e+00 4.485850570478709e+00 9.302321009617306e+03 + 73200 1.024808483069570e+00 -6.088650571211963e+00 -5.973827864871935e+00 3.267029007600742e+00 4.926358756161564e+00 9.136877476772252e+03 + 73220 9.858641202999791e-01 -6.016487656433947e+00 -6.011121119602571e+00 3.567101056749535e+00 4.597916541704189e+00 9.251228372612824e+03 + 73240 9.814061938662246e-01 -5.996627015684751e+00 -6.017187987657898e+00 3.670597748070839e+00 4.552533465200898e+00 9.269870380360822e+03 + 73260 9.223904082799604e-01 -5.896881345748175e+00 -6.030352983516607e+00 4.277463639517563e+00 4.511048840782040e+00 9.310425922711258e+03 + 73280 1.037227289119591e+00 -6.055534268629772e+00 -5.974550961430557e+00 3.504767143951465e+00 4.969785826015649e+00 9.139079517388138e+03 + 73300 1.050128691349970e+00 -6.063639043032901e+00 -6.018493700781201e+00 3.400403793144012e+00 4.659635334572403e+00 9.273915622794624e+03 + 73320 9.565537679956597e-01 -5.919066582445882e+00 -6.082128561031999e+00 4.114059549942152e+00 4.177732435141037e+00 9.470903868989584e+03 + 73340 9.536494504923420e-01 -5.912501590176619e+00 -6.065110791960501e+00 4.177822309905687e+00 4.301516657064988e+00 9.418022999433575e+03 + 73360 9.726176998146778e-01 -5.939386401072793e+00 -5.990000350520825e+00 4.031598440696006e+00 4.740965310482047e+00 9.186365816889293e+03 + 73380 1.010977450629653e+00 -5.993293501225906e+00 -5.974321773710351e+00 3.760093074312020e+00 4.869031669571682e+00 9.138370782448190e+03 + 73400 9.719934782163319e-01 -5.930561070974967e+00 -6.047650188750539e+00 4.033218560437811e+00 4.360874726688064e+00 9.363912091845508e+03 + 73420 1.020520366949907e+00 -6.000284264454055e+00 -6.026836640020360e+00 3.681977815455648e+00 4.529509965987089e+00 9.299645180281510e+03 + 73440 1.006110181453964e+00 -5.980374938229298e+00 -5.980521559818353e+00 3.812154098251699e+00 4.811312174397727e+00 9.157353353892939e+03 + 73460 9.295980156710294e-01 -5.869835617537896e+00 -5.994195610784443e+00 4.445061182457845e+00 4.730966856589410e+00 9.199208535107184e+03 + 73480 1.006779851724471e+00 -5.985638852642568e+00 -6.019184614123278e+00 3.770141649171733e+00 4.577516695559686e+00 9.276028164811356e+03 + 73500 1.080322651491789e+00 -6.095755477394412e+00 -5.977967927656576e+00 3.215581656810278e+00 4.891935994969343e+00 9.149544245588007e+03 + 73520 1.042399140691672e+00 -6.043479119791276e+00 -6.005633269013389e+00 3.533435351456823e+00 4.750752083249935e+00 9.234347564666839e+03 + 73540 9.419937645538990e-01 -5.905377665582979e+00 -6.045831205211638e+00 4.238433128929310e+00 4.431927169266539e+00 9.358241104489192e+03 + 73560 1.008266246960170e+00 -6.019587895413151e+00 -6.032911347174870e+00 3.562899600127392e+00 4.486394278314108e+00 9.318362358035660e+03 + 73580 1.017697861944102e+00 -6.056916279079955e+00 -6.020795597932734e+00 3.437820205151820e+00 4.645230745956508e+00 9.281006407327552e+03 + 73600 9.528381417543579e-01 -5.987310125229060e+00 -6.011506082236833e+00 3.818728210475375e+00 4.679791281024496e+00 9.252411770002522e+03 + 73620 9.897162234087546e-01 -6.069695282451325e+00 -5.987607518882977e+00 3.398423307974358e+00 4.869783949424168e+00 9.179054434023268e+03 + 73640 9.573086088792493e-01 -6.044944960108083e+00 -5.984677652632372e+00 3.493676974322121e+00 4.839741180183347e+00 9.170098310268995e+03 + 73660 9.671914427421177e-01 -6.081794593296113e+00 -5.964148115110261e+00 3.315945392752551e+00 4.991489676229378e+00 9.107318513455997e+03 + 73680 9.390865324405192e-01 -6.055261041865697e+00 -5.942310392565254e+00 3.428115301656125e+00 5.076695408995757e+00 9.040805230159187e+03 + 73700 1.009211813209879e+00 -6.166775701426771e+00 -5.940259775630715e+00 2.832580807951647e+00 5.133270307098836e+00 9.034570102592023e+03 + 73720 9.063290412548513e-01 -6.015951183371519e+00 -5.993448813660751e+00 3.596612841682744e+00 4.725824930792433e+00 9.196949432748070e+03 + 73740 9.028921735355224e-01 -6.006589862600302e+00 -5.972364442960016e+00 3.687328638291888e+00 4.883856294232983e+00 9.132400790806563e+03 + 73760 9.589026309378389e-01 -6.075255982313986e+00 -5.979549216841307e+00 3.289640830425925e+00 4.839203888344140e+00 9.154371203431461e+03 + 73780 9.345316043805485e-01 -6.017158950059915e+00 -5.986514049210983e+00 3.644508353653457e+00 4.820476116611104e+00 9.175684320450217e+03 + 73800 9.231559534117376e-01 -5.972274872762460e+00 -5.970893005163768e+00 3.816613163967305e+00 4.824548061562316e+00 9.127914202483094e+03 + 73820 9.705735591298116e-01 -6.008511345760110e+00 -5.975714046069624e+00 3.624088023084399e+00 4.812415193272894e+00 9.142620859156037e+03 + 73840 9.972819162596961e-01 -6.008389627377813e+00 -5.968518774103595e+00 3.635201492404540e+00 4.864146101899701e+00 9.120653456879274e+03 + 73860 9.817189284040141e-01 -5.949218718504712e+00 -5.976056036574786e+00 3.976773834825202e+00 4.822669801405288e+00 9.143679446530907e+03 + 73880 1.040166414937262e+00 -6.004919505676765e+00 -5.969685342630910e+00 3.679460581479818e+00 4.881780598158228e+00 9.124223152864846e+03 + 73900 1.079914675346431e+00 -6.040884731609309e+00 -6.002124527555193e+00 3.535944619586100e+00 4.758511709387030e+00 9.223569063949006e+03 + 73920 1.047829509588579e+00 -5.979487733011665e+00 -6.032549569633018e+00 3.781282157949619e+00 4.476592880777133e+00 9.317241153472331e+03 + 73940 1.019810193658677e+00 -5.932476392884114e+00 -6.075917325311146e+00 4.039195514559704e+00 4.215535483151132e+00 9.451563527228864e+03 + 73960 1.037729672454579e+00 -5.961426844547875e+00 -6.007704840816306e+00 3.869478786332632e+00 4.603743370262522e+00 9.240701439990828e+03 + 73980 1.102026119111210e+00 -6.061451296932031e+00 -5.953672421070395e+00 3.396197484600524e+00 5.015080468525175e+00 9.075367123104703e+03 + 74000 1.006672094511474e+00 -5.926467505986917e+00 -6.002406971215061e+00 4.095271284290035e+00 4.659215123355766e+00 9.224440497945985e+03 + 74020 1.056884738107506e+00 -6.009632082653363e+00 -6.011765403975296e+00 3.625905269189227e+00 4.613655408028276e+00 9.253209970679931e+03 + 74040 1.039636399233511e+00 -5.998278829677089e+00 -6.001560854848362e+00 3.699170887765238e+00 4.680324991340035e+00 9.221836785987163e+03 + 74060 9.688754430013009e-01 -5.908286021778902e+00 -6.009212893352297e+00 4.242043157154411e+00 4.662505442197076e+00 9.245344872767841e+03 + 74080 1.040483318226725e+00 -6.031770266090712e+00 -5.986843777372107e+00 3.475071136031926e+00 4.733045986605817e+00 9.176712530643745e+03 + 74100 9.645288998075801e-01 -5.937955009317080e+00 -6.008977019358065e+00 4.024033640297134e+00 4.616214268021268e+00 9.244630159261613e+03 + 74120 9.803070171406298e-01 -5.980843609629494e+00 -6.009911909613690e+00 3.803625088395291e+00 4.636710411581150e+00 9.247504755482591e+03 + 74140 9.999997113074159e-01 -6.030798533361322e+00 -5.997983766583035e+00 3.495907900029331e+00 4.684335368939005e+00 9.210857272552896e+03 + 74160 9.264525276868963e-01 -5.942125733020693e+00 -5.970562345907128e+00 4.075630905750844e+00 4.912343474005310e+00 9.126872718634690e+03 + 74180 9.180508610076498e-01 -5.945308621464712e+00 -5.943455882291880e+00 4.044326120048284e+00 5.054964835089151e+00 9.044267248308415e+03 + 74200 9.822562377756259e-01 -6.053687427702259e+00 -5.994404109993441e+00 3.372367880472150e+00 4.712781864819949e+00 9.199869006592580e+03 + 74220 9.485140274067376e-01 -6.018207944563933e+00 -5.967141174133536e+00 3.596376329164537e+00 4.889609627533062e+00 9.116478001217803e+03 + 74240 9.623867966372879e-01 -6.055213430180357e+00 -5.988939693589677e+00 3.373948730077733e+00 4.754502781409008e+00 9.183145481648467e+03 + 74260 9.585272131675899e-01 -6.068527526050202e+00 -5.992391176609820e+00 3.321143495477575e+00 4.758330196026249e+00 9.193725211683433e+03 + 74280 9.196119465426698e-01 -6.036674130672638e+00 -6.017429096414313e+00 3.533322536836802e+00 4.643830501707531e+00 9.270627390581209e+03 + 74300 9.357129504306640e-01 -6.089750562043562e+00 -5.992196571528278e+00 3.190429748988795e+00 4.750599858958802e+00 9.193138774969077e+03 + 74320 9.054852053433827e-01 -6.073520136401093e+00 -6.009740008190021e+00 3.322745827227579e+00 4.688981193358500e+00 9.246972467195035e+03 + 74340 9.627120106480778e-01 -6.182961160617626e+00 -5.947872911458736e+00 2.779982140037472e+00 5.129895246496801e+00 9.057741214538777e+03 + 74360 8.851872224222322e-01 -6.085246424963919e+00 -6.001031785758791e+00 3.220131911266630e+00 4.703705401755777e+00 9.220185250074148e+03 + 74380 8.460306141218816e-01 -6.034933062541751e+00 -5.962794647628597e+00 3.545861187821419e+00 4.960091129636380e+00 9.103155731831766e+03 + 74400 8.821771276803232e-01 -6.083960514819410e+00 -5.946327737813338e+00 3.231417820616046e+00 5.021726524788317e+00 9.053004871906396e+03 + 74420 9.186679364848320e-01 -6.120687508885935e+00 -5.961099991514843e+00 2.987252890226940e+00 4.903629111060251e+00 9.098007552959249e+03 + 74440 9.367573541293815e-01 -6.117978660265644e+00 -5.939682084807707e+00 3.095847103167368e+00 5.119653630752725e+00 9.032803410251776e+03 + 74460 9.159588617796250e-01 -6.046055643208772e+00 -5.981136831691625e+00 3.444249084659588e+00 4.817022946544663e+00 9.159240345208824e+03 + 74480 9.789491483887546e-01 -6.096142293300542e+00 -5.978103552855586e+00 3.194306499672160e+00 4.872103213743146e+00 9.149951415732172e+03 + 74500 9.766268254907194e-01 -6.053118022779135e+00 -5.966927551735280e+00 3.421112342520206e+00 4.916031365186312e+00 9.115796295156959e+03 + 74520 9.787978868597506e-01 -6.022748002520350e+00 -5.985726188705568e+00 3.610194682313442e+00 4.822779666345094e+00 9.173276749880035e+03 + 74540 9.681277366746442e-01 -5.978780734654702e+00 -6.016478609731580e+00 3.759555968043839e+00 4.543088935625092e+00 9.267696902322177e+03 + 74560 9.664053462108696e-01 -5.954560344029079e+00 -6.015148252516609e+00 3.934284866975612e+00 4.586379720491674e+00 9.263594529280615e+03 + 74580 1.020760381627576e+00 -6.016891155567022e+00 -6.001335523185948e+00 3.584228670792708e+00 4.673551519151165e+00 9.221150061831795e+03 + 74600 1.022121115268821e+00 -6.003170132822634e+00 -6.006893670733271e+00 3.659515655526804e+00 4.638134524628292e+00 9.238247565085869e+03 + 74620 1.030144663821612e+00 -6.004008252392195e+00 -5.988346371278444e+00 3.670520968339323e+00 4.760453913362751e+00 9.181291989193436e+03 + 74640 1.013050515429063e+00 -5.969065498348031e+00 -5.965481799243464e+00 3.897376209352586e+00 4.917954364186656e+00 9.111378579113883e+03 + 74660 1.022617120339047e+00 -5.973786728425058e+00 -5.956941673304435e+00 3.848822780665006e+00 4.945549693931481e+00 9.085347157083586e+03 + 74680 1.007914393451495e+00 -5.943951653503214e+00 -6.016348972920043e+00 3.984896380438069e+00 4.569179768897667e+00 9.267283602500569e+03 + 74700 9.986802449413656e-01 -5.923986178274326e+00 -6.016126700048874e+00 4.044904963953804e+00 4.515819829224692e+00 9.266607958886227e+03 + 74720 1.005886916511639e+00 -5.931122117685076e+00 -6.006153544338350e+00 4.054383017028403e+00 4.623540954109557e+00 9.235939919845003e+03 + 74740 1.028329530845373e+00 -5.964032754698774e+00 -6.022562978593945e+00 3.861041022236075e+00 4.524951419107128e+00 9.286410702605079e+03 + 74760 9.803145559323311e-01 -5.896512907028589e+00 -6.008043692727307e+00 4.201627827211692e+00 4.561200796396343e+00 9.241752286097399e+03 + 74780 1.050448019390488e+00 -6.006849466827832e+00 -5.964229877028570e+00 3.674704412337950e+00 4.919432692325519e+00 9.107562003843244e+03 + 74800 1.079249698980009e+00 -6.059677305946659e+00 -5.984593427073376e+00 3.325709555183013e+00 4.756852806866105e+00 9.169823458012339e+03 + 74820 9.799916835240782e-01 -5.929631655063591e+00 -6.001980596002301e+00 4.077363101655057e+00 4.661924286822559e+00 9.223130476131559e+03 + 74840 9.859467339506287e-01 -5.960359460496969e+00 -6.018513611396257e+00 3.929788156432520e+00 4.595858022643043e+00 9.273953206138536e+03 + 74860 1.033635826269025e+00 -6.060767619824266e+00 -6.017822274484399e+00 3.399355091867636e+00 4.645953910579863e+00 9.271863945455072e+03 + 74880 9.759721785558156e-01 -6.013229162277334e+00 -6.053383192980586e+00 3.647891779961840e+00 4.417321121847592e+00 9.381660483482174e+03 + 74900 9.714687453810785e-01 -6.047452204960190e+00 -5.965001404946334e+00 3.455326756932231e+00 4.928772009831857e+00 9.109932519930268e+03 + 74920 9.145583147103661e-01 -5.995908172418925e+00 -6.015023393295445e+00 3.701933716315916e+00 4.592171159972068e+00 9.263217256916281e+03 + 74940 9.653273851456586e-01 -6.096428436032460e+00 -5.985841554844472e+00 3.236334610854196e+00 4.871341595900179e+00 9.173647519578228e+03 + 74960 9.424963885077904e-01 -6.080469848322861e+00 -5.996300981389869e+00 3.353135343584635e+00 4.836446002603942e+00 9.205690801787901e+03 + 74980 9.506503164090532e-01 -6.104357127865349e+00 -5.960936668558809e+00 3.170102272240164e+00 4.993644743822664e+00 9.097503244613514e+03 + 75000 8.700904293810257e-01 -5.987458303524590e+00 -6.010619711951475e+00 3.721728973462096e+00 4.588732582058554e+00 9.249665665565244e+03 + 75020 9.109249801658880e-01 -6.041616508048135e+00 -6.013570361604731e+00 3.451909150539392e+00 4.612954463544551e+00 9.258772582208532e+03 + 75040 9.933322068281094e-01 -6.149541974964728e+00 -6.007680433773741e+00 2.882601495519751e+00 4.697192418040948e+00 9.240679661976419e+03 + 75060 9.609513030287639e-01 -6.082523143000262e+00 -6.027742168932669e+00 3.229558844043006e+00 4.544119674467460e+00 9.302432561895517e+03 + 75080 9.449910725191065e-01 -6.037272041552976e+00 -6.018417057081827e+00 3.507258180847169e+00 4.615526419479927e+00 9.273676977975101e+03 + 75100 9.491350982879939e-01 -6.018734955585298e+00 -6.001417919326830e+00 3.583420173141896e+00 4.682857275140719e+00 9.221403143323339e+03 + 75120 9.535680026247864e-01 -5.995239583519211e+00 -5.937812097532492e+00 3.742362995962986e+00 5.072120507373468e+00 9.027126647794794e+03 + 75140 9.942484227699008e-01 -6.022018546408974e+00 -5.960944055624526e+00 3.603825964486139e+00 4.954525141817343e+00 9.097527379321546e+03 + 75160 1.027873631379090e+00 -6.037984826370608e+00 -6.014628130455152e+00 3.518315957475176e+00 4.652433719858738e+00 9.262003524501955e+03 + 75180 9.962045495131849e-01 -5.968625199310502e+00 -6.095706266078723e+00 3.803277386555143e+00 4.073558235440487e+00 9.513169474446655e+03 + 75200 1.005485192065467e+00 -5.972095288743114e+00 -6.024462460911707e+00 3.831942033980300e+00 4.531241627594541e+00 9.292281309877082e+03 + 75220 9.639440305854408e-01 -5.904765452569521e+00 -6.042682077053646e+00 4.139088241842245e+00 4.347149641525733e+00 9.348546171238233e+03 + 75240 1.100348312849856e+00 -6.105214989262095e+00 -5.964343507400673e+00 3.146828763849312e+00 4.955734612488966e+00 9.107914207085378e+03 + 75260 1.056228523516504e+00 -6.039575006170219e+00 -5.967016735483449e+00 3.521745798166965e+00 4.938386616806499e+00 9.116055523900181e+03 + 75280 1.028838265900209e+00 -6.000037471681031e+00 -6.008139818689394e+00 3.675760589673192e+00 4.629235659317025e+00 9.242072454129033e+03 + 75300 1.018865487876142e+00 -5.989129081903224e+00 -6.048353767935232e+00 3.750205996587058e+00 4.410128684400721e+00 9.366093892289990e+03 + 75320 1.017782367439038e+00 -5.995538006422554e+00 -6.008318703742540e+00 3.749651007813259e+00 4.676262265995383e+00 9.242610486061058e+03 + 75340 1.071290944018869e+00 -6.084598345371083e+00 -5.956463019506284e+00 3.230477810068202e+00 4.966250680061470e+00 9.083892865203470e+03 + 75360 9.877491482691030e-01 -5.971185820990510e+00 -5.971756603105517e+00 3.846847198281965e+00 4.843569679049351e+00 9.130529648337855e+03 + 75380 9.808452817333607e-01 -5.971352607742769e+00 -5.981138097856833e+00 3.894796024025719e+00 4.838606225491058e+00 9.159211078145969e+03 + 75400 1.037038295316925e+00 -6.064265249728187e+00 -5.949850864363729e+00 3.346781622734711e+00 5.003766729066347e+00 9.063731573688070e+03 + 75420 9.840219089987409e-01 -5.993678390346595e+00 -5.973200831648965e+00 3.760001388235666e+00 4.877586699169426e+00 9.134926175657400e+03 + 75440 9.948334277117568e-01 -6.017392759569398e+00 -5.938807060731495e+00 3.615381099452960e+00 5.066632343277792e+00 9.030130276400947e+03 + 75460 9.896458641573308e-01 -6.015972047806883e+00 -5.967456517945833e+00 3.605985471387829e+00 4.884569151603962e+00 9.117398429097395e+03 + 75480 9.934613001299268e-01 -6.025510613901039e+00 -5.970354230591690e+00 3.553212218220808e+00 4.869928706605823e+00 9.126256412388377e+03 + 75500 1.002793901060188e+00 -6.041588045741925e+00 -5.980432002989019e+00 3.481903121725062e+00 4.833070583079277e+00 9.157062131920951e+03 + 75520 9.558324051356426e-01 -5.973735917190573e+00 -5.998751254103208e+00 3.801190804632830e+00 4.657548868969602e+00 9.213244215413853e+03 + 75540 9.856201869383434e-01 -6.017123277830004e+00 -6.022670514561842e+00 3.553919604419966e+00 4.522066512673646e+00 9.286780915758225e+03 + 75560 9.539124603872683e-01 -5.968159645067333e+00 -6.050608970972844e+00 3.865644433700548e+00 4.392207645359153e+00 9.373061011720489e+03 + 75580 9.431429554037259e-01 -5.949508230117665e+00 -6.063763285413580e+00 3.930384795060713e+00 4.274314586638908e+00 9.413828371855889e+03 + 75600 1.034053647388524e+00 -6.080879903000408e+00 -5.981950159149587e+00 3.269247744205254e+00 4.837317642725052e+00 9.161726533907262e+03 + 75620 1.004190179090731e+00 -6.029021373549702e+00 -6.009415077515493e+00 3.595222935501313e+00 4.707805321394249e+00 9.245969720949764e+03 + 75640 9.718085322803021e-01 -5.971874941066882e+00 -5.998909240844970e+00 3.829077901226786e+00 4.673842768356635e+00 9.213697081999937e+03 + 75660 9.730190163301217e-01 -5.960155139837681e+00 -6.040333335692218e+00 3.841720549647667e+00 4.381324941515206e+00 9.341266010075447e+03 + 75680 1.012869534048571e+00 -6.002747971882565e+00 -5.973591583223703e+00 3.705479803676918e+00 4.872900299292669e+00 9.136155279166231e+03 + 75700 1.023855579712104e+00 -6.000208912667226e+00 -6.008372568227969e+00 3.688902714402673e+00 4.642025740851272e+00 9.242749438761124e+03 + 75720 1.041769066119272e+00 -6.006764978630788e+00 -6.035015498849567e+00 3.636503418039051e+00 4.474284559188940e+00 9.324874003337341e+03 + 75740 9.584135189899680e-01 -5.865192773132172e+00 -6.063090906379620e+00 4.409265943954011e+00 4.272904238210019e+00 9.411738152032245e+03 + 75760 1.002279077437801e+00 -5.914305647717590e+00 -6.041233079982685e+00 4.163685211749369e+00 4.434848253726529e+00 9.344074540587113e+03 + 75780 1.059619457402267e+00 -5.985624395891827e+00 -6.038748500824565e+00 3.788756047672038e+00 4.483709216219589e+00 9.336387436068724e+03 + 75800 1.001152575729453e+00 -5.890488791627259e+00 -6.105338308884127e+00 4.249146039746309e+00 4.015446863802031e+00 9.543251916526711e+03 + 75820 1.002694792806448e+00 -5.891353014514380e+00 -6.068105747318249e+00 4.303260862136042e+00 4.288319317979222e+00 9.427300828426283e+03 + 75840 1.060172212791630e+00 -5.982208807021923e+00 -5.978453729784905e+00 3.804545700669832e+00 4.826107935261118e+00 9.151037981985064e+03 + 75860 1.001891310047016e+00 -5.905333660527308e+00 -6.038829661548118e+00 4.203047381384064e+00 4.436492685083180e+00 9.336612782716425e+03 + 75880 1.056839936818774e+00 -6.003078416065223e+00 -6.011501353209184e+00 3.625578885876592e+00 4.577213077350655e+00 9.252382743846909e+03 + 75900 1.036454381224847e+00 -5.998323619011718e+00 -5.966704740524631e+00 3.680800874826888e+00 4.862361368105377e+00 9.115115829592716e+03 + 75920 9.308545586627783e-01 -5.870946164710370e+00 -6.042481757755157e+00 4.395105320588135e+00 4.410121400277737e+00 9.347878252505283e+03 + 75940 9.685868991514517e-01 -5.961776544641721e+00 -6.026809342915873e+00 3.884293556842776e+00 4.510865165359585e+00 9.299528939809330e+03 + 75960 9.432709371698157e-01 -5.961260649655257e+00 -6.028060791513147e+00 3.885047172826419e+00 4.501470420989876e+00 9.303382943355517e+03 + 75980 9.478989028861291e-01 -6.000584462762107e+00 -6.004712975991136e+00 3.696454038647478e+00 4.672747476801037e+00 9.231524987642879e+03 + 76000 9.970805418490873e-01 -6.100005093039072e+00 -6.023827395257143e+00 3.159532416669891e+00 4.596956545794359e+00 9.290325003757849e+03 + 76020 9.307165834568024e-01 -6.023602742724633e+00 -5.992871600527642e+00 3.565116144470216e+00 4.741579118594224e+00 9.195204294598163e+03 + 76040 1.035133617364431e+00 -6.193660547859423e+00 -5.965520092636967e+00 2.614139164365656e+00 4.924156962874343e+00 9.111518630276571e+03 + 76060 9.189639013834705e-01 -6.028719124581639e+00 -5.972871572918073e+00 3.561535542966884e+00 4.882220826999765e+00 9.133965785951170e+03 + 76080 9.039653159019446e-01 -6.006107969407191e+00 -6.006886498564500e+00 3.677520562380957e+00 4.673050127482695e+00 9.238199199890127e+03 + 76100 9.816044131330260e-01 -6.115375541095547e+00 -5.981101084475158e+00 3.061168142632209e+00 4.832192851451490e+00 9.159132247586693e+03 + 76120 9.917282157104250e-01 -6.119952364895518e+00 -5.987866042806566e+00 3.032194841162021e+00 4.790654942889068e+00 9.179848548233413e+03 + 76140 9.866683166815886e-01 -6.096782918954821e+00 -5.990411198123923e+00 3.172624339474438e+00 4.783427221456058e+00 9.187652564717142e+03 + 76160 1.016286866592405e+00 -6.121962609910415e+00 -5.989310646649686e+00 3.009595116474608e+00 4.771303217342686e+00 9.184278300601125e+03 + 76180 9.073114366156748e-01 -5.939094771659452e+00 -6.011830012918007e+00 4.033663372352329e+00 4.616006361303500e+00 9.253389745876337e+03 + 76200 9.272607892783477e-01 -5.943457650205709e+00 -6.034038738651557e+00 3.963349395170041e+00 4.443218767935848e+00 9.321846380787791e+03 + 76220 9.797688687292769e-01 -5.993923800528484e+00 -6.025374403658489e+00 3.802918524110440e+00 4.622324293972848e+00 9.295102978187904e+03 + 76240 1.068949210828011e+00 -6.102751839550146e+00 -5.989361331632303e+00 3.136913512792053e+00 4.788019356380704e+00 9.184423482739288e+03 + 76260 1.032941179821768e+00 -6.032260146230769e+00 -5.964606067763217e+00 3.531540387455571e+00 4.920020575451062e+00 9.108730019293786e+03 + 76280 1.010422647037766e+00 -5.987230551271983e+00 -5.975248957347688e+00 3.829518554361889e+00 4.898318720820861e+00 9.141202766395769e+03 + 76300 9.826665999466337e-01 -5.938329619151382e+00 -5.995993466059112e+00 4.043963769276472e+00 4.712849036880820e+00 9.204734552133135e+03 + 76320 1.038975357599377e+00 -6.016212792170080e+00 -6.006202006382857e+00 3.637623246159619e+00 4.695106727313947e+00 9.236099355224593e+03 + 76340 1.035566086715203e+00 -6.010323195699391e+00 -6.016081781540890e+00 3.634419243299490e+00 4.601352552259319e+00 9.266493131598751e+03 + 76360 1.037550475135629e+00 -6.016540715284439e+00 -6.038028048718242e+00 3.566676184169583e+00 4.443292590438585e+00 9.334175145317326e+03 + 76380 9.909138773456484e-01 -5.952862123002911e+00 -6.020140843316710e+00 3.955034674384347e+00 4.568709850994191e+00 9.278986144962013e+03 + 76400 1.011861820493628e+00 -5.991083348276138e+00 -5.962437852511718e+00 3.759912806094825e+00 4.924399675650275e+00 9.102106940913922e+03 + 76420 1.022021304405100e+00 -6.011338113971354e+00 -5.976782612171760e+00 3.636218604654656e+00 4.834641643434547e+00 9.145877102323833e+03 + 76440 9.414676351261720e-01 -5.896822642094934e+00 -6.023361350568062e+00 4.200200346630318e+00 4.473595500775767e+00 9.288918895120643e+03 + 76460 1.006478598724460e+00 -5.997119061904542e+00 -6.027839507201659e+00 3.685123662747557e+00 4.508722111877965e+00 9.302712258571783e+03 + 76480 1.031694968442922e+00 -6.040604022557227e+00 -6.024623088477257e+00 3.476603660239339e+00 4.568368656768086e+00 9.292801370289211e+03 + 76500 9.624381201586054e-01 -5.947227611602189e+00 -6.060315138924301e+00 4.005376349955112e+00 4.356010267833255e+00 9.403140002497948e+03 + 76520 9.778285260878747e-01 -5.981747265498200e+00 -6.022602841750017e+00 3.812721431268407e+00 4.578122390050478e+00 9.286570984818478e+03 + 76540 9.679030458269198e-01 -5.979190053950963e+00 -5.998795838165444e+00 3.867606476229402e+00 4.755027029284553e+00 9.213326925149458e+03 + 76560 1.023878453132180e+00 -6.074288374033142e+00 -5.970087285798999e+00 3.293356744763868e+00 4.891695518470611e+00 9.125450135002930e+03 + 76580 9.842978815665397e-01 -6.024663970855451e+00 -6.024761520816134e+00 3.533590490874299e+00 4.533030343904251e+00 9.293219360648667e+03 + 76600 9.935504345598720e-01 -6.052369800641815e+00 -5.976084401691383e+00 3.470770565811327e+00 4.908813131712044e+00 9.143771660127029e+03 + 76620 1.008605568746383e+00 -6.088169372154105e+00 -5.961671382026655e+00 3.240731408844999e+00 4.967102443657531e+00 9.099762038200355e+03 + 76640 1.001510717045568e+00 -6.090334289765228e+00 -5.979687391292297e+00 3.217942792821951e+00 4.853294406405725e+00 9.154804744287936e+03 + 76660 9.732512587642480e-01 -6.061787389935800e+00 -5.963240688526579e+00 3.385358593990081e+00 4.951229003534588e+00 9.104543546314215e+03 + 76680 9.604090261013933e-01 -6.053089554960540e+00 -5.988864863648185e+00 3.353289087716155e+00 4.722077203970557e+00 9.182901355375647e+03 + 76700 9.345753650146791e-01 -6.021502345435197e+00 -5.966072163346588e+00 3.671563980322076e+00 4.989852663667822e+00 9.113192111774759e+03 + 76720 9.658598868509626e-01 -6.071572278476234e+00 -6.011075539483307e+00 3.278388840438405e+00 4.625770477575893e+00 9.251095622911058e+03 + 76740 9.242725953504218e-01 -6.009810742278886e+00 -6.029097414876126e+00 3.651246792089217e+00 4.540499733432925e+00 9.306588190395401e+03 + 76760 9.432580747690660e-01 -6.031846918418294e+00 -5.990117591761117e+00 3.519893145858240e+00 4.759509397116179e+00 9.186745839769685e+03 + 76780 9.929383171070868e-01 -6.090675382790504e+00 -6.003359943367769e+00 3.188942249037066e+00 4.690321014222993e+00 9.227381993143721e+03 + 76800 9.512423481561035e-01 -6.007941843120177e+00 -6.043160579896435e+00 3.590986856285561e+00 4.388755419634384e+00 9.350034257514497e+03 + 76820 1.030017380644078e+00 -6.097852273708975e+00 -5.990397493063930e+00 3.129948737393463e+00 4.746970716430875e+00 9.187609386484237e+03 + 76840 9.014301950337887e-01 -5.874824226311594e+00 -6.016750181116633e+00 4.418086928309100e+00 4.603126132848044e+00 9.268556364947779e+03 + 76860 1.059641074422038e+00 -6.073350272459393e+00 -6.010551293563649e+00 3.278751569498670e+00 4.639353024428608e+00 9.249481379358254e+03 + 76880 1.073141595340660e+00 -6.057175771755169e+00 -5.981912793133798e+00 3.397960491043853e+00 4.830132161196063e+00 9.161620118422265e+03 + 76900 9.960642417247977e-01 -5.914974620016306e+00 -6.017160770177630e+00 4.133535145274797e+00 4.546766457792845e+00 9.269779364894697e+03 + 76920 9.998858227000335e-01 -5.898519377431553e+00 -6.022812168229408e+00 4.202083583711725e+00 4.488375144703226e+00 9.287157737108979e+03 + 76940 1.049200594823602e+00 -5.954218654048367e+00 -6.003446477029344e+00 3.942293830653328e+00 4.659620053115568e+00 9.227640210484751e+03 + 76960 1.076997850088828e+00 -5.983166272066539e+00 -6.011182485390131e+00 3.765810415667917e+00 4.604936983268850e+00 9.251415540349350e+03 + 76980 1.046313525807467e+00 -5.932794538243369e+00 -6.033928638756063e+00 4.025290436567843e+00 4.444562780972486e+00 9.321474514059821e+03 + 77000 1.070218571873248e+00 -5.971988986186425e+00 -6.001966085807163e+00 3.870038617211882e+00 4.697905472248435e+00 9.223065679919426e+03 + 77020 1.040367491223628e+00 -5.936908002350227e+00 -6.028230102709736e+00 4.062043300852292e+00 4.537657668538636e+00 9.303893037376198e+03 + 77040 1.030935905723028e+00 -5.938004684832507e+00 -6.006803802815046e+00 4.034249846264656e+00 4.639194664179820e+00 9.237934859465682e+03 + 77060 9.818232820172352e-01 -5.884163213933947e+00 -6.013509802876924e+00 4.342765509325186e+00 4.600037379294661e+00 9.258548940883838e+03 + 77080 1.052890937622306e+00 -6.015308955999066e+00 -5.992379725893143e+00 3.618952748292556e+00 4.750615935847657e+00 9.193664292157426e+03 + 77100 1.000695741104531e+00 -5.969450293300017e+00 -5.996618768199244e+00 3.862766134083425e+00 4.706760546904164e+00 9.206658063263250e+03 + 77120 9.810953773368571e-01 -5.974029890115113e+00 -6.015382847371840e+00 3.804500568002720e+00 4.567045488085140e+00 9.264323310523459e+03 + 77140 9.738470342731991e-01 -5.998905391792707e+00 -6.031828547204700e+00 3.723100234015637e+00 4.534050380798143e+00 9.315005395966811e+03 + 77160 1.077665471789641e+00 -6.190872450679098e+00 -5.938367534322178e+00 2.716682841818992e+00 5.166605146549951e+00 9.028840906547242e+03 + 77180 9.117984638462541e-01 -5.976129095854976e+00 -6.032183680895669e+00 3.796443251533684e+00 4.474569149811026e+00 9.316114569743175e+03 + 77200 8.968290412047899e-01 -5.976796748734516e+00 -6.054221869553881e+00 3.832571044636072e+00 4.387984019392556e+00 9.384234217592500e+03 + 77220 9.542175354742580e-01 -6.074838968198442e+00 -6.029844805097509e+00 3.296669776464889e+00 4.555033223814684e+00 9.308907415975911e+03 + 77240 9.869319200610509e-01 -6.128386911683827e+00 -5.989263632612101e+00 3.036979550349304e+00 4.835846948037015e+00 9.184137856371819e+03 + 77260 9.020075899348160e-01 -6.002087552723443e+00 -6.018939955998020e+00 3.710535747079130e+00 4.613766639575527e+00 9.275300086894984e+03 + 77280 9.811304812337647e-01 -6.115531072428597e+00 -6.006379620394696e+00 3.089308545848877e+00 4.716073074560151e+00 9.236658539063654e+03 + 77300 9.154856231678089e-01 -6.011307939290251e+00 -6.020312901899822e+00 3.653728875762927e+00 4.602020986945312e+00 9.279499555776621e+03 + 77320 9.088646359801265e-01 -5.990875384721905e+00 -6.020940960193702e+00 3.737419922237067e+00 4.564778735245239e+00 9.281449789462811e+03 + 77340 9.617580495484664e-01 -6.055293314466826e+00 -6.020453387388024e+00 3.427216952413656e+00 4.627273205161430e+00 9.279958938866881e+03 + 77360 9.918622494114218e-01 -6.085771288375033e+00 -6.015323047638994e+00 3.249167163685519e+00 4.653691863821882e+00 9.264143519956750e+03 + 77380 9.878430369076583e-01 -6.066049339052080e+00 -5.984609637129328e+00 3.343498989353615e+00 4.811138360547205e+00 9.169868907666480e+03 + 77400 9.881055693255767e-01 -6.049696724138380e+00 -6.029784691044545e+00 3.398505766286097e+00 4.512843741688060e+00 9.308701006247833e+03 + 77420 9.442380569343753e-01 -5.967892521588066e+00 -6.044063971309662e+00 3.871653930749631e+00 4.434265678954483e+00 9.352799284775991e+03 + 77440 9.635302367626096e-01 -5.978097309494858e+00 -5.976516352698919e+00 3.809318551631544e+00 4.818396650206101e+00 9.145095411823604e+03 + 77460 1.031071569587829e+00 -6.057656574983576e+00 -5.956341965539268e+00 3.373677298506261e+00 4.955441464320614e+00 9.083513768963112e+03 + 77480 9.561783210016561e-01 -5.925689405622222e+00 -5.991289881508632e+00 4.146382080806897e+00 4.769693996626294e+00 9.190304699357481e+03 + 77500 9.875461942006877e-01 -5.948762602922740e+00 -6.009947882320335e+00 3.966599929615583e+00 4.615264586923201e+00 9.247613070232639e+03 + 77520 1.011987223196080e+00 -5.965030148313156e+00 -6.016512998064790e+00 3.905044081345964e+00 4.609421591126831e+00 9.267810875947282e+03 + 77540 9.828437310988670e-01 -5.905267705646450e+00 -6.030277334249933e+00 4.156407641238356e+00 4.438583008619652e+00 9.310227962311310e+03 + 77560 1.031844168249039e+00 -5.963551695360975e+00 -6.013748120198509e+00 3.859393563926826e+00 4.571157924638064e+00 9.259299902743554e+03 + 77580 1.025344712619901e+00 -5.943603078798919e+00 -6.001479321445190e+00 3.989168879522360e+00 4.656834537927866e+00 9.221598692723452e+03 + 77600 9.876858960331456e-01 -5.878521182742517e+00 -6.057233169864478e+00 4.373423279690803e+00 4.347231394045875e+00 9.393557726678064e+03 + 77620 1.048405377269466e+00 -5.965283697591902e+00 -6.043820423204854e+00 3.837933183406482e+00 4.386963151417897e+00 9.351969485223646e+03 + 77640 1.049955522935665e+00 -5.970416280113805e+00 -6.004421453615732e+00 3.815161984956450e+00 4.619899016424793e+00 9.230606844709877e+03 + 77660 1.016012943430498e+00 -5.929341770299764e+00 -5.970832653725770e+00 4.094919028946958e+00 4.856671955621375e+00 9.127713636099425e+03 + 77680 1.075730305499723e+00 -6.033618318249268e+00 -5.981874097317982e+00 3.537572920289043e+00 4.834696244268795e+00 9.161474450526517e+03 + 77700 1.003903577665351e+00 -5.957388514035513e+00 -6.018971590985894e+00 3.882014493859845e+00 4.528394936060398e+00 9.275362638712924e+03 + 77720 1.001423546409892e+00 -5.997831458287514e+00 -5.971801816688876e+00 3.724728599868541e+00 4.874194830001944e+00 9.130693350045449e+03 + 77740 9.701279831440369e-01 -6.005169724464868e+00 -6.028549520737738e+00 3.595423176941391e+00 4.461172768730792e+00 9.304917555972950e+03 + 77760 9.037146612667915e-01 -5.960351562793937e+00 -6.063517714322702e+00 3.869888730442883e+00 4.277492723454358e+00 9.413077780618514e+03 + 77780 9.056387633003206e-01 -6.004177817156937e+00 -6.044579374924515e+00 3.635713005101290e+00 4.403721008279000e+00 9.354414398153249e+03 + 77800 9.894580800366596e-01 -6.154292053483897e+00 -5.977088926144186e+00 2.883779277732085e+00 4.901307057012045e+00 9.146869257715724e+03 + 77820 9.276545718061032e-01 -6.075786898284290e+00 -6.016539776362106e+00 3.297559295049870e+00 4.637765437589540e+00 9.267889982641193e+03 + 77840 9.031435911169059e-01 -6.044319129697051e+00 -6.031435691308593e+00 3.422134257207110e+00 4.496112954139288e+00 9.313822246417190e+03 + 77860 9.304128498381903e-01 -6.083465664409365e+00 -5.983680664859659e+00 3.265807380532507e+00 4.838788289625693e+00 9.167028448351466e+03 + 77880 8.966850248779551e-01 -6.025209185929398e+00 -5.984858124352200e+00 3.605387593113622e+00 4.837089632996497e+00 9.170607331043226e+03 + 77900 9.662730650492308e-01 -6.111241630646713e+00 -5.981737843583330e+00 3.062651850535675e+00 4.806282636499903e+00 9.161086712124938e+03 + 77920 9.124033851557393e-01 -6.007066174020688e+00 -6.007644014182054e+00 3.672637988384815e+00 4.669319940757773e+00 9.240520913100581e+03 + 77940 9.433469773732464e-01 -6.025429101271422e+00 -6.014134140360269e+00 3.552608638110908e+00 4.617466051552298e+00 9.260478697458148e+03 + 77960 9.471660061161816e-01 -6.000295273194393e+00 -6.009031366903246e+00 3.732733950107298e+00 4.682569948124932e+00 9.244740220369367e+03 + 77980 9.583237299776859e-01 -5.985520496793974e+00 -6.026397477118721e+00 3.771325309501922e+00 4.536603362784964e+00 9.298273375083591e+03 + 78000 9.822443607144675e-01 -5.994084185622157e+00 -5.990173665022997e+00 3.747826540653387e+00 4.770281355084866e+00 9.186922753955916e+03 + 78020 1.000549554755738e+00 -5.999050137171565e+00 -5.998020982392176e+00 3.679669405921632e+00 4.685578971926073e+00 9.210978037261983e+03 + 78040 9.825939859159107e-01 -5.953431332958740e+00 -6.023834239652474e+00 3.951961590988343e+00 4.547697205938323e+00 9.290361900106423e+03 + 78060 1.027101771833677e+00 -6.003964232450689e+00 -6.009809411093721e+00 3.711772305892965e+00 4.678208385586207e+00 9.247178785062517e+03 + 78080 1.069617088928239e+00 -6.057174288999921e+00 -5.984238791008398e+00 3.412723163734705e+00 4.831530079933869e+00 9.168735239574766e+03 + 78100 1.032931399494156e+00 -5.997870301633825e+00 -6.010926505817864e+00 3.704233028722928e+00 4.629262283857107e+00 9.250623786278969e+03 + 78120 9.990932970363942e-01 -5.947444446628786e+00 -6.044726018402647e+00 3.915198220830202e+00 4.356592381430115e+00 9.354835443281314e+03 + 78140 9.903117753514266e-01 -5.935960214073454e+00 -5.990173628242962e+00 3.969802758347145e+00 4.658500944687098e+00 9.186925646487325e+03 + 78160 9.977142655170520e-01 -5.947548690932602e+00 -6.019109846805618e+00 3.943205430325067e+00 4.532290199249127e+00 9.275813635654033e+03 + 78180 1.061246196682019e+00 -6.043446506513968e+00 -5.957087236284449e+00 3.473468350913270e+00 4.969356644625044e+00 9.085776701744828e+03 + 78200 1.005371703488933e+00 -5.965038839699390e+00 -5.985410284265660e+00 3.935621546664635e+00 4.818645559494254e+00 9.172289322955903e+03 + 78220 1.044507016004814e+00 -6.028994953498604e+00 -5.992003633241251e+00 3.551231967651003e+00 4.763641852957037e+00 9.192494234607775e+03 + 78240 9.705534101886567e-01 -5.927988745686074e+00 -6.011607544835702e+00 4.122688107526733e+00 4.642536022842219e+00 9.252708209183909e+03 + 78260 1.000624460206580e+00 -5.983489532146212e+00 -6.050778853150732e+00 3.738358953341983e+00 4.351973259145254e+00 9.373581434547184e+03 + 78280 9.557989149634782e-01 -5.932252413917265e+00 -6.011991752438707e+00 4.010915216982305e+00 4.553039595569427e+00 9.253901762299187e+03 + 78300 9.459404437062641e-01 -5.936592057873725e+00 -6.004854765275988e+00 4.025714690587525e+00 4.633739661063895e+00 9.231945453136545e+03 + 78320 1.043106579113228e+00 -6.104206618906877e+00 -5.963148331373988e+00 3.138553134941259e+00 4.948531650654555e+00 9.104274402655548e+03 + 78340 9.947840069746099e-01 -6.066715597726089e+00 -6.001840658093563e+00 3.339124872512799e+00 4.711646815247229e+00 9.222715450411288e+03 + 78360 9.603038667107582e-01 -6.060645831723562e+00 -5.977660942267663e+00 3.373144660514535e+00 4.849656737640450e+00 9.148588666718559e+03 + 78380 9.436095248178937e-01 -6.083643291185696e+00 -6.001451077685974e+00 3.193636310179499e+00 4.665596719298840e+00 9.221491694599892e+03 + 78400 9.101945306451855e-01 -6.073358506023091e+00 -5.936509451354990e+00 3.277651655699111e+00 5.063460104926116e+00 9.023161517878330e+03 + 78420 8.898257787199445e-01 -6.066782905595899e+00 -5.903882661858805e+00 3.393592712056678e+00 5.328991120326318e+00 8.924326605064518e+03 + 78440 8.954246888115581e-01 -6.083877341621532e+00 -5.941981781899617e+00 3.278004437190987e+00 5.092790699381125e+00 9.039778252080689e+03 + 78460 9.481381666289637e-01 -6.159163501861797e+00 -5.981107807106949e+00 2.838263825689257e+00 4.860687179001308e+00 9.159146387911785e+03 + 78480 9.411206466284182e-01 -6.137352341169860e+00 -5.995539940113520e+00 2.984783117544954e+00 4.799091869808599e+00 9.203370689247566e+03 + 78500 9.506610438566124e-01 -6.134377798490855e+00 -5.982160552669639e+00 3.006297720229315e+00 4.880352701277397e+00 9.162388881689225e+03 + 78520 9.226601224909358e-01 -6.070160403870820e+00 -5.969137680224539e+00 3.349089851708784e+00 4.929177964101690e+00 9.122566544115467e+03 + 78540 9.350130673781817e-01 -6.060243460879107e+00 -5.986181655315741e+00 3.399993259964893e+00 4.825267608537110e+00 9.174684621282766e+03 + 78560 9.650144846402954e-01 -6.071696093122321e+00 -6.003266095761548e+00 3.390218422333436e+00 4.783154056686861e+00 9.227077553884892e+03 + 78580 9.604910303162029e-01 -6.034092826172119e+00 -6.024613307196831e+00 3.546322036255746e+00 4.600754901162666e+00 9.292756295738118e+03 + 78600 9.686794808081647e-01 -6.021766343567298e+00 -5.977275716772505e+00 3.589974437310432e+00 4.845446501268380e+00 9.147415168214486e+03 + 78620 9.790638855032975e-01 -6.017079485234357e+00 -5.982659144929070e+00 3.628753021305816e+00 4.826399941869219e+00 9.163881743461079e+03 + 78640 9.635405966946655e-01 -5.977130747501815e+00 -6.025142041184683e+00 3.814290538040150e+00 4.538602259989435e+00 9.294379934463390e+03 + 78660 9.707454470410779e-01 -5.974418552402655e+00 -6.025444292159965e+00 3.828578880147194e+00 4.535581186253014e+00 9.295326545242200e+03 + 78680 9.911583826870468e-01 -5.993693794148694e+00 -6.025621108406230e+00 3.755451121332038e+00 4.572119542129353e+00 9.295859183455761e+03 + 78700 9.986527167138837e-01 -5.997600496545068e+00 -6.009593085558130e+00 3.706881924570941e+00 4.638018622610789e+00 9.246516691242879e+03 + 78720 1.026115132203620e+00 -6.031128199173386e+00 -6.012317781529495e+00 3.498664985632630e+00 4.606677314646578e+00 9.254890630268450e+03 + 78740 9.816313985852830e-01 -5.958218054730507e+00 -6.013528870665908e+00 3.912158523236141e+00 4.594555258813961e+00 9.258643861241966e+03 + 78760 1.033620182847291e+00 -6.031627959023227e+00 -5.956249364553392e+00 3.534786418184695e+00 4.967621972430289e+00 9.083234424136646e+03 + 78780 9.830286204954115e-01 -5.951758298407527e+00 -5.993886409160242e+00 3.988301041459746e+00 4.746394910213591e+00 9.198286235509540e+03 + 78800 1.000258120334726e+00 -5.971249567948878e+00 -6.020768879016869e+00 3.825286689582233e+00 4.540939142341202e+00 9.280907900890526e+03 + 78820 9.864972939353344e-01 -5.946243439661701e+00 -6.017824338783822e+00 3.990878233141380e+00 4.579849633273819e+00 9.271846291834496e+03 + 78840 1.021859006135012e+00 -5.995468529602100e+00 -6.001936475707494e+00 3.747306807373122e+00 4.710166859924521e+00 9.222978263265690e+03 + 78860 9.882568805799498e-01 -5.942577623793076e+00 -6.030864900302477e+00 4.001677853742455e+00 4.494718649613587e+00 9.312017305215872e+03 + 78880 9.771441179677272e-01 -5.925778263224009e+00 -5.997743118022825e+00 4.087553837958024e+00 4.674320505177930e+00 9.210126729893587e+03 + 78900 1.015066568996722e+00 -5.979994330427906e+00 -6.010524750307205e+00 3.763688570078540e+00 4.588378174564395e+00 9.249390491771201e+03 + 78920 1.018739460242896e+00 -5.986789341636689e+00 -6.012039733536547e+00 3.771919862252372e+00 4.626928204477868e+00 9.254033481816645e+03 + 78940 1.004836582510179e+00 -5.969766681587550e+00 -5.989581405251473e+00 3.897587970790249e+00 4.783808761193428e+00 9.185084777862216e+03 + 78960 1.000915367395484e+00 -5.969396837968292e+00 -5.998386169842300e+00 3.863985857272187e+00 4.697524627567022e+00 9.212082208171083e+03 + 78980 1.011097346139345e+00 -5.992593794250812e+00 -5.978853168859705e+00 3.755021533955431e+00 4.833922331306077e+00 9.152231479871780e+03 + 79000 1.059666254547746e+00 -6.075228378317800e+00 -5.949276757245159e+00 3.302772307519212e+00 5.026006006668686e+00 9.062012326248185e+03 + 79020 9.404329904009793e-01 -5.912418498441657e+00 -6.022127545440677e+00 4.200550887308586e+00 4.570584562020053e+00 9.285100828118733e+03 + 79040 9.848581356870563e-01 -5.995749291628560e+00 -5.950319121540778e+00 3.770773996085144e+00 5.031641063025294e+00 9.065157216419613e+03 + 79060 9.608603747923385e-01 -5.975710424122484e+00 -5.991968912277589e+00 3.876364743899228e+00 4.783005988919707e+00 9.192405688069553e+03 + 79080 9.762292981095760e-01 -6.013582321367158e+00 -6.020082158499417e+00 3.624525748921560e+00 4.587202678261587e+00 9.278803852728182e+03 + 79100 9.968077163779366e-01 -6.060067062195587e+00 -5.998288605730000e+00 3.336803585265185e+00 4.691545042475827e+00 9.211816924103132e+03 + 79120 9.529428875274224e-01 -6.010522734970114e+00 -5.974924022157747e+00 3.663670102253345e+00 4.868083420104956e+00 9.140240841576147e+03 + 79140 9.873690817848273e-01 -6.074700664243276e+00 -5.987370156791362e+00 3.244204633224945e+00 4.745669921366193e+00 9.178340289386322e+03 + 79160 9.130881549992070e-01 -5.973833669404494e+00 -6.030780650675930e+00 3.822882500084973e+00 4.495884121107514e+00 9.311779785569635e+03 + 79180 9.130059993031368e-01 -5.982160469712809e+00 -6.049699357839504e+00 3.764013437411514e+00 4.376194690178869e+00 9.370240987068373e+03 + 79200 9.144915391394658e-01 -5.989863774478316e+00 -5.996351292292557e+00 3.783542019016778e+00 4.746289687787270e+00 9.205827462468909e+03 + 79220 9.162392675107899e-01 -5.990783865313929e+00 -6.020396209652485e+00 3.687540813334715e+00 4.517502149647247e+00 9.279754746233712e+03 + 79240 9.235177618171081e-01 -5.993583822311699e+00 -5.991157638784288e+00 3.722027338034579e+00 4.735958859299659e+00 9.189928927008819e+03 + 79260 9.122072343294187e-01 -5.960147639003375e+00 -6.017354682230184e+00 3.939842341817747e+00 4.611350646848075e+00 9.270383322164405e+03 + 79280 9.464530382076917e-01 -5.985066495056913e+00 -6.049603975101954e+00 3.736198910912617e+00 4.365614713351233e+00 9.369966592766663e+03 + 79300 1.058102145576381e+00 -6.118124074882580e+00 -5.985462856214184e+00 3.111493438629915e+00 4.873254685481086e+00 9.172484563610771e+03 + 79320 9.953261731051044e-01 -5.990762207761407e+00 -5.966468802080260e+00 3.791395229966537e+00 4.930891724780066e+00 9.114398898363157e+03 + 79340 9.992972109940355e-01 -5.961723229258709e+00 -5.994031798503905e+00 3.928603952261779e+00 4.743083147920930e+00 9.198725379131081e+03 + 79360 9.926349647139661e-01 -5.915070630550414e+00 -6.011796810038751e+00 4.149267309094780e+00 4.593850618144844e+00 9.253295758662978e+03 + 79380 1.037321676282260e+00 -5.948510655240105e+00 -6.047489058921755e+00 3.947058702396041e+00 4.378709391597541e+00 9.363409109803762e+03 + 79400 1.073554589102331e+00 -5.980993106816110e+00 -6.033464135983314e+00 3.789565228428210e+00 4.488268459084602e+00 9.320063210492326e+03 + 79420 1.016620402774436e+00 -5.886967006135101e+00 -6.020426988457193e+00 4.262292675040978e+00 4.495944803682008e+00 9.279841377628121e+03 + 79440 1.068403542474359e+00 -5.960438953669618e+00 -6.006390438935841e+00 3.868462736741713e+00 4.604602197373694e+00 9.236687061558874e+03 + 79460 9.874269650080266e-01 -5.842593843709981e+00 -6.054890823069911e+00 4.549197988529999e+00 4.330155880193897e+00 9.386302095136112e+03 + 79480 1.017759587682552e+00 -5.894621021086714e+00 -6.033039891771820e+00 4.291344042132524e+00 4.496521466407633e+00 9.318743561586927e+03 + 79500 1.105846470791628e+00 -6.036755426472809e+00 -6.017208669404104e+00 3.517414095775697e+00 4.629654599715089e+00 9.269967576930499e+03 + 79520 1.086894678355959e+00 -6.027120172015224e+00 -6.014100530719969e+00 3.533845370601539e+00 4.608606165701871e+00 9.260404330473939e+03 + 79540 1.049454254284310e+00 -5.994584829837050e+00 -6.011042174487166e+00 3.761334105949868e+00 4.666833486203054e+00 9.250999407055326e+03 + 79560 1.030069716704877e+00 -5.991172669794780e+00 -5.984594332761020e+00 3.763498997698880e+00 4.801272826941096e+00 9.169811743421678e+03 + 79580 1.028925048212893e+00 -6.012828622395782e+00 -5.970669021180692e+00 3.659255478289710e+00 4.901342432643959e+00 9.127210901884571e+03 + 79600 9.944584734349552e-01 -5.980683481626457e+00 -5.960911784614881e+00 3.820979842968632e+00 4.934511986869324e+00 9.097417679516766e+03 + 79620 9.901706812860336e-01 -5.987544470704947e+00 -5.987143215339533e+00 3.781052302697437e+00 4.783356373099715e+00 9.177573862144696e+03 + 79640 9.246167639896486e-01 -5.898438492136320e+00 -5.986236757283998e+00 4.267403810189261e+00 4.763252584973672e+00 9.174811103240676e+03 + 79660 9.916679381978120e-01 -6.000523303854512e+00 -6.022122174521691e+00 3.702740003652233e+00 4.578715945866861e+00 9.285052279835410e+03 + 79680 9.845988297280789e-01 -5.990509847177464e+00 -6.040834177254060e+00 3.730551225574747e+00 4.441581134610021e+00 9.342845329404190e+03 + 79700 1.012103464704459e+00 -6.035439240602013e+00 -6.028021986269549e+00 3.442340611003453e+00 4.484931633196864e+00 9.303278711208271e+03 + 79720 1.015763565165914e+00 -6.044095272153485e+00 -5.993496414538418e+00 3.454193648501328e+00 4.744740119074952e+00 9.197082781862344e+03 + 79740 9.222818700668998e-01 -5.906833461994591e+00 -5.985664802016244e+00 4.229068492670546e+00 4.776406739155771e+00 9.173089251397545e+03 + 79760 9.597870572140947e-01 -5.960718976870643e+00 -5.977189763390419e+00 3.844068322181662e+00 4.749490517139135e+00 9.147165028539104e+03 + 79780 9.522985703267357e-01 -5.945043840197743e+00 -6.033792705183500e+00 3.960293430182864e+00 4.450683713592172e+00 9.321040393839516e+03 + 79800 9.833275714694408e-01 -5.986134330689360e+00 -5.992010910363025e+00 3.788435245758111e+00 4.754691015874160e+00 9.192526612755901e+03 + 79820 9.988231391725373e-01 -6.002387319931682e+00 -6.001299313579232e+00 3.724469615070988e+00 4.730717115915194e+00 9.221015132285953e+03 + 79840 1.024379288003904e+00 -6.033932660189155e+00 -5.992003567042530e+00 3.503221755406675e+00 4.743985096760791e+00 9.192521594308335e+03 + 79860 9.827181494933237e-01 -5.965889220469361e+00 -6.043897883407553e+00 3.844590998537356e+00 4.396653184144686e+00 9.352308119905227e+03 + 79880 9.705938199892743e-01 -5.942608933405355e+00 -6.006729211590787e+00 4.010776237453497e+00 4.642587677531767e+00 9.237720442481392e+03 + 79900 9.989592388664118e-01 -5.981314239385885e+00 -5.930071112743315e+00 3.831441066158048e+00 5.125687029187906e+00 9.003625830083804e+03 + 79920 9.509828765130268e-01 -5.903474650230136e+00 -5.959567595188465e+00 4.199545177000271e+00 4.877450806694363e+00 9.093302296884925e+03 + 79940 1.008660626273198e+00 -5.975206559142093e+00 -5.973249874015888e+00 3.852131261379689e+00 4.863366850170403e+00 9.135085691382848e+03 + 79960 1.034057738351715e+00 -5.993540037212778e+00 -5.981668704255794e+00 3.691299380901082e+00 4.759466411822924e+00 9.160865262674994e+03 + 79980 1.002622890907336e+00 -5.922972181137649e+00 -5.998275900307460e+00 4.077008223773470e+00 4.644602615087531e+00 9.211738305864092e+03 + 80000 1.002534478236392e+00 -5.893540385663340e+00 -6.026169635517707e+00 4.283656440432240e+00 4.522078763458380e+00 9.297540298519638e+03 + 80020 1.094687085530008e+00 -5.993440939835718e+00 -5.989813159942677e+00 3.764577229969778e+00 4.785408503512746e+00 9.185780164415793e+03 + 80040 1.055082100139671e+00 -5.898909722028495e+00 -6.025321495774995e+00 4.219677073728563e+00 4.493801106717396e+00 9.294917553481977e+03 + 80060 1.085583131184937e+00 -5.913580248815832e+00 -5.995051811128758e+00 4.192783551086773e+00 4.724961232602432e+00 9.201841630477857e+03 + 80080 1.090025280436168e+00 -5.894810926655870e+00 -6.034197483346787e+00 4.226381129079512e+00 4.426001950560326e+00 9.322316172175941e+03 + 80100 1.047457605914503e+00 -5.819409458044511e+00 -6.024690075875109e+00 4.691037192552955e+00 4.512284117896722e+00 9.292948853051041e+03 + 80120 1.127652005637097e+00 -5.934003334918287e+00 -6.024570493283049e+00 3.995991733415875e+00 4.475941094862951e+00 9.292604433306064e+03 + 80140 1.104842672427734e+00 -5.909465117880103e+00 -6.032670192464904e+00 4.178638676803430e+00 4.471176072613829e+00 9.317603653038059e+03 + 80160 1.054685386192829e+00 -5.861471499217983e+00 -6.053524088219884e+00 4.431970594065964e+00 4.329174907974951e+00 9.382081453747751e+03 + 80180 1.035297912196663e+00 -5.871013411255056e+00 -6.078486687471992e+00 4.326344205160282e+00 4.135000546736907e+00 9.459568903120788e+03 + 80200 1.039432343452146e+00 -5.928553381094001e+00 -6.067840343920899e+00 3.999433392885801e+00 4.199626097745917e+00 9.426493171449256e+03 + 80220 1.020980129054669e+00 -5.954851935059028e+00 -6.027304359714914e+00 3.984153646438417e+00 4.568120612087840e+00 9.301040824812659e+03 + 80240 1.028248837015344e+00 -6.008051184400480e+00 -5.980029095212903e+00 3.666505959114474e+00 4.827413131633823e+00 9.155839579876905e+03 + 80260 1.016907947689166e+00 -6.019854239883813e+00 -5.957577663570278e+00 3.563580640392458e+00 4.921182378853813e+00 9.087269307231058e+03 + 80280 9.097418901123862e-01 -5.877951742464337e+00 -5.983392699645973e+00 4.328354486090709e+00 4.722896193018360e+00 9.166116685071396e+03 + 80300 1.009663701932018e+00 -6.035852982966083e+00 -5.978466560213853e+00 3.532381221631197e+00 4.861902941594719e+00 9.151061221238029e+03 + 80320 9.285183626925706e-01 -5.921999020192650e+00 -6.002108198353142e+00 4.147670149667457e+00 4.687670851814656e+00 9.223509460299141e+03 + 80340 1.007831994203929e+00 -6.043601103086168e+00 -5.977780352600639e+00 3.517883857678721e+00 4.895836792694848e+00 9.148937113911612e+03 + 80360 9.642957607884645e-01 -5.980897211629611e+00 -5.982532881003374e+00 3.826812674468522e+00 4.817420407805358e+00 9.163417897459703e+03 + 80380 1.033425115073918e+00 -6.081161832987428e+00 -5.944446244238369e+00 3.326901110527948e+00 5.111943177794029e+00 9.047286377227612e+03 + 80400 1.027875708381550e+00 -6.067876130161433e+00 -6.003086441082604e+00 3.353305542149515e+00 4.725337963012134e+00 9.226518691529565e+03 + 80420 9.674887958443071e-01 -5.973286478717758e+00 -6.065208317777971e+00 3.846530442086685e+00 4.318701017344315e+00 9.418279230056989e+03 + 80440 9.998988992298777e-01 -6.018633120308276e+00 -6.011400263835027e+00 3.581905373355749e+00 4.623437554506067e+00 9.252071754397144e+03 + 80460 1.004933198700895e+00 -6.021110434000995e+00 -5.989321590057112e+00 3.588034866536607e+00 4.770571327770085e+00 9.184301942079575e+03 + 80480 9.976532533953327e-01 -6.004673382259777e+00 -6.003060639131224e+00 3.642142665363094e+00 4.651403285978436e+00 9.226408371484842e+03 + 80500 9.798480950375431e-01 -5.971116530358305e+00 -5.945787064917397e+00 3.840649288570114e+00 4.986094998853921e+00 9.051365099854220e+03 + 80520 9.898055193963495e-01 -5.973401523394545e+00 -5.987976996693258e+00 3.878651720367064e+00 4.794957097138647e+00 9.180163957994317e+03 + 80540 1.050801412019621e+00 -6.047657297213751e+00 -6.005025064170906e+00 3.439579529413368e+00 4.684380408862127e+00 9.232475198752469e+03 + 80560 1.041895089673064e+00 -6.018026754737074e+00 -5.973835113844153e+00 3.581206497066169e+00 4.834961737707649e+00 9.136912039481398e+03 + 80580 1.075090983815789e+00 -6.046315556615985e+00 -6.010278416441178e+00 3.464119663737547e+00 4.671050499350711e+00 9.248628756520144e+03 + 80600 1.053159998455167e+00 -5.990768187085731e+00 -6.039041567089806e+00 3.693251331109284e+00 4.416058112844473e+00 9.337289001771140e+03 + 80620 1.007437463709463e+00 -5.902097178535293e+00 -6.006333475673088e+00 4.302016993559189e+00 4.703476044879118e+00 9.236494514575365e+03 + 80640 1.080360867172413e+00 -5.990347910656498e+00 -6.039898798100485e+00 3.762741750211048e+00 4.478212886532621e+00 9.339939250690915e+03 + 80660 1.052821680553730e+00 -5.933423739896924e+00 -6.016158862093036e+00 4.089272539094425e+00 4.614194664225566e+00 9.266743212173586e+03 + 80680 1.114786955517762e+00 -6.013250391362781e+00 -6.018128894662110e+00 3.591361164115531e+00 4.563348043224838e+00 9.272794487838173e+03 + 80700 1.082988455053263e+00 -5.961540066326007e+00 -5.987187476722777e+00 3.908364959159268e+00 4.761093559737082e+00 9.177750320377618e+03 + 80720 1.018898805515524e+00 -5.867717667599978e+00 -6.044793834692135e+00 4.408967022727404e+00 4.392168268835941e+00 9.355061661676011e+03 + 80740 1.078535505632103e+00 -5.965057255115155e+00 -6.041002391506717e+00 3.872766586177249e+00 4.436677860545026e+00 9.343339451356544e+03 + 80760 1.122763021347808e+00 -6.052795303069532e+00 -6.006742519703213e+00 3.378097112029223e+00 4.642539320763824e+00 9.237785587126256e+03 + 80780 1.011186157889471e+00 -5.922607857192942e+00 -6.009155469933456e+00 4.102263689982693e+00 4.605293904426870e+00 9.245164321278171e+03 + 80800 1.012676335665791e+00 -5.969998909856515e+00 -5.969015267058977e+00 3.842727275531674e+00 4.848375504693367e+00 9.122162612919192e+03 + 80820 9.839291033142596e-01 -5.970925365618903e+00 -5.961130671494203e+00 3.896228134556838e+00 4.952470783944881e+00 9.098100625334013e+03 + 80840 9.703262031256962e-01 -5.985669552021039e+00 -6.017795474468260e+00 3.758638467439156e+00 4.574166449276784e+00 9.271758987431505e+03 + 80860 9.860307020865687e-01 -6.039540886349507e+00 -6.017438500335203e+00 3.478093158526607e+00 4.605008479353925e+00 9.270667990367545e+03 + 80880 9.493660487190138e-01 -6.007464672391607e+00 -5.977203752048952e+00 3.667988434541938e+00 4.841751322011753e+00 9.147210070761919e+03 + 80900 9.411803354878033e-01 -6.008670311518920e+00 -6.008303553769675e+00 3.633818434487520e+00 4.635924414239258e+00 9.242557081332734e+03 + 80920 9.562927239983039e-01 -6.040237509250625e+00 -5.986487338932350e+00 3.513190510640249e+00 4.821832306419760e+00 9.175612393213398e+03 + 80940 9.391222144072718e-01 -6.018039973091003e+00 -6.013153616723916e+00 3.651819905722478e+00 4.679878120143496e+00 9.257452384859767e+03 + 80960 9.962900101017992e-01 -6.100773704611004e+00 -5.960896700160498e+00 3.160383928109457e+00 4.963579333560741e+00 9.097409582381813e+03 + 80980 9.497343258144788e-01 -6.023199853090263e+00 -6.021134194005993e+00 3.620213444521876e+00 4.632074778643462e+00 9.282052807849825e+03 + 81000 9.591025418906647e-01 -6.026455855685898e+00 -6.065256481137539e+00 3.524178024527893e+00 4.301378828807182e+00 9.418479539948283e+03 + 81020 1.001990028660329e+00 -6.077534127037405e+00 -6.021240361340688e+00 3.282007639689934e+00 4.605255153752570e+00 9.282388103225949e+03 + 81040 9.966016185348995e-01 -6.055363997114036e+00 -6.013132139043764e+00 3.371627171695458e+00 4.614129036093873e+00 9.257419537291769e+03 + 81060 9.659692754691518e-01 -5.992538068302758e+00 -6.004632470471654e+00 3.750914600299199e+00 4.681466671442708e+00 9.231272701576272e+03 + 81080 9.691829504854111e-01 -5.974490335592261e+00 -6.018024527710942e+00 3.850699258365816e+00 4.600719190325892e+00 9.272470340610080e+03 + 81100 1.003573479230278e+00 -5.998331342676080e+00 -6.028882462700820e+00 3.711859255152203e+00 4.536429996199598e+00 9.305931270102272e+03 + 81120 9.652038612407686e-01 -5.913090084011630e+00 -6.032846986355366e+00 4.162974002716716e+00 4.475311337138238e+00 9.318139945958466e+03 + 81140 9.966998233310604e-01 -5.929979100262118e+00 -5.987371099498042e+00 4.028287233705730e+00 4.698733492709875e+00 9.178316486711472e+03 + 81160 9.804020724797735e-01 -5.869939224845761e+00 -5.998623418088206e+00 4.364546399268137e+00 4.625621847855474e+00 9.212795182111613e+03 + 81180 1.126184741962428e+00 -6.047964278793083e+00 -6.006159092705674e+00 3.398152128404014e+00 4.638203976249550e+00 9.235955440699909e+03 + 81200 9.899612490535551e-01 -5.811348463827199e+00 -6.061800894530588e+00 4.637657909690657e+00 4.199521295203407e+00 9.407730864339252e+03 + 81220 1.151403160611242e+00 -6.022118671138731e+00 -5.980063185279393e+00 3.598535440400098e+00 4.840024548269824e+00 9.155959277935875e+03 + 81240 1.067219841122242e+00 -5.877373726253977e+00 -6.004808208624930e+00 4.409997452595479e+00 4.678248934399053e+00 9.231793070179991e+03 + 81260 1.127695639210377e+00 -5.957308129270547e+00 -6.036038080045511e+00 3.954573383865618e+00 4.502493823095270e+00 9.327982579786789e+03 + 81280 1.103028274947716e+00 -5.923413750088998e+00 -6.033437472139344e+00 4.109392321773495e+00 4.477619083644450e+00 9.319956428209549e+03 + 81300 9.469324782446774e-01 -5.708014671570099e+00 -6.087656680911923e+00 5.312427897099631e+00 4.132464730047806e+00 9.488044984776521e+03 + 81320 1.095960453556355e+00 -5.962941065130249e+00 -5.981563294094487e+00 3.884138894529285e+00 4.777207174036013e+00 9.160555130944156e+03 + 81340 9.871654323815087e-01 -5.864591779611393e+00 -6.010560505658964e+00 4.463085211610327e+00 4.624910198057822e+00 9.249510421422576e+03 + 81360 9.991419644136911e-01 -5.968435540664949e+00 -6.023131166643513e+00 3.841009523089968e+00 4.526938774600286e+00 9.288201209487406e+03 + 81380 9.841981835773045e-01 -6.016394145035136e+00 -6.005892497406464e+00 3.663636985831985e+00 4.723939071640539e+00 9.235149739072316e+03 + 81400 9.377169216155408e-01 -5.984331702590624e+00 -6.009919031453745e+00 3.793692120277228e+00 4.646765718318846e+00 9.247522920451795e+03 + 81420 9.400508964306854e-01 -6.006417987786693e+00 -5.985081075780034e+00 3.660709506883469e+00 4.783229357502169e+00 9.171298836560509e+03 + 81440 9.699313219880838e-01 -6.058502217893892e+00 -5.973919960684958e+00 3.395756690421595e+00 4.881441100377295e+00 9.137162347086463e+03 + 81460 9.952068072926994e-01 -6.098024106266205e+00 -6.025599703083651e+00 3.092386996336173e+00 4.508259127050570e+00 9.295823085602729e+03 + 81480 9.716843809594646e-01 -6.064040414707251e+00 -6.004068320993178e+00 3.331259416743575e+00 4.675628459501291e+00 9.229528876136948e+03 + 81500 9.973697415567517e-01 -6.098995123461590e+00 -5.987990150078407e+00 3.131363910149934e+00 4.768771645280289e+00 9.180221700530825e+03 + 81520 9.363162329557408e-01 -6.000394687731413e+00 -6.010277762884474e+00 3.706335535412770e+00 4.649585388482955e+00 9.248637468922027e+03 + 81540 1.013715851668724e+00 -6.102670727235536e+00 -6.012984549917034e+00 3.116204155939033e+00 4.631196064992952e+00 9.256972066950684e+03 + 81560 9.510302311325567e-01 -5.994672440513835e+00 -6.013574746603648e+00 3.744624109953838e+00 4.636084143263719e+00 9.258771042960105e+03 + 81580 9.708791169434510e-01 -6.004990242564016e+00 -6.041103793930236e+00 3.648293076755405e+00 4.440923476256562e+00 9.343675324845555e+03 + 81600 1.021428169911760e+00 -6.059476600844403e+00 -5.998202382908654e+00 3.359272897199406e+00 4.711118938741055e+00 9.211526895989089e+03 + 81620 9.305148611195859e-01 -5.902648955072580e+00 -6.033518732798856e+00 4.210010048227591e+00 4.458535532490664e+00 9.320215109178078e+03 + 81640 1.014309398886776e+00 -6.003115197292328e+00 -6.029667877865016e+00 3.682157316764738e+00 4.529687715902319e+00 9.308349178024167e+03 + 81660 1.006696638584483e+00 -5.968125765168169e+00 -6.020330951914127e+00 3.912362383898142e+00 4.612592122876308e+00 9.279575894128000e+03 + 81680 1.026034166389092e+00 -5.977191967072605e+00 -6.014982134725362e+00 3.873463389942985e+00 4.656466399271307e+00 9.263076324966902e+03 + 81700 1.094026462459199e+00 -6.060979078274961e+00 -5.950776163987039e+00 3.422521797817875e+00 5.055323985504993e+00 9.066556189874063e+03 + 81720 1.048137457130594e+00 -5.979532805375181e+00 -5.984750120562851e+00 3.845341466656847e+00 4.815382835472327e+00 9.170259136790282e+03 + 81740 1.010877405861114e+00 -5.912420587581036e+00 -6.015239526747630e+00 4.123957872404739e+00 4.533555612530746e+00 9.263857837267307e+03 + 81760 1.063602355671527e+00 -5.981784965975486e+00 -5.961487023376864e+00 3.795656960333152e+00 4.912210887830908e+00 9.099205750929392e+03 + 81780 1.027459067509863e+00 -5.921163145430532e+00 -6.023673648014620e+00 4.058302636557103e+00 4.469671467270263e+00 9.289860839464147e+03 + 81800 1.047298626464901e+00 -5.948950629059860e+00 -5.964630498270545e+00 3.988479046460120e+00 4.898442811000447e+00 9.108806831015394e+03 + 81820 1.053501232817847e+00 -5.960230760917948e+00 -6.041431241123340e+00 3.870567163714580e+00 4.404301440641517e+00 9.344676488532747e+03 + 81840 1.017758804170032e+00 -5.918853993517171e+00 -6.028272775372802e+00 4.135177599842575e+00 4.506878021925773e+00 9.304041707423426e+03 + 81860 1.065378349480214e+00 -6.011029377961174e+00 -5.955644283412063e+00 3.656811158679218e+00 4.974840942395896e+00 9.081369206171317e+03 + 81880 9.530192865981795e-01 -5.874220383036375e+00 -5.969743058835002e+00 4.392900279869866e+00 4.844394293347848e+00 9.124360388499763e+03 + 81900 9.574720746808550e-01 -5.916960493551010e+00 -5.939744405874496e+00 4.072727612640648e+00 4.941898862280157e+00 9.032968447348794e+03 + 81920 9.529318163724900e-01 -5.946802134618535e+00 -5.972181862330102e+00 3.934181160248690e+00 4.788446836228703e+00 9.131801220611655e+03 + 81940 1.019255599760301e+00 -6.079390441300234e+00 -5.946349913216288e+00 3.217190862036480e+00 4.981130162249682e+00 9.053053841282081e+03 + 81960 9.963100258212420e-01 -6.076261456517344e+00 -5.922084484074006e+00 3.267929873460421e+00 5.153237908039445e+00 8.979394036684227e+03 + 81980 9.321940921579160e-01 -6.004237872716229e+00 -5.956115850930159e+00 3.672947579610751e+00 4.949271675565172e+00 9.082785007174825e+03 + 82000 9.259020011273168e-01 -6.008560241790538e+00 -5.979530918034305e+00 3.649740939747136e+00 4.816431809028757e+00 9.154312158358503e+03 + 82020 9.926786283717718e-01 -6.116727747828016e+00 -5.988422832370484e+00 3.059525164023740e+00 4.796271843702390e+00 9.181567362273785e+03 + 82040 9.828871294915399e-01 -6.108037307599804e+00 -5.976347622865276e+00 3.122740172608594e+00 4.878922721267100e+00 9.144587367836979e+03 + 82060 9.332089275121657e-01 -6.035190225336102e+00 -5.973657550289307e+00 3.495536034698211e+00 4.848866176967599e+00 9.136365890371884e+03 + 82080 9.348812100568609e-01 -6.031463456902424e+00 -5.965944501090468e+00 3.558135708621652e+00 4.934355691919547e+00 9.112776588740764e+03 + 82100 9.042623824465174e-01 -5.972021615429910e+00 -6.014946941476416e+00 3.796225191740366e+00 4.549741326908593e+00 9.262985345315630e+03 + 82120 9.440190703979477e-01 -6.010011374202128e+00 -5.988159562051030e+00 3.645149472465161e+00 4.770625959393770e+00 9.180738259821084e+03 + 82140 1.011393339427639e+00 -6.080227709102102e+00 -5.961488893125361e+00 3.243112839117767e+00 4.924929495228602e+00 9.099214545140130e+03 + 82160 1.026503718694735e+00 -6.064944977731278e+00 -5.993468428427674e+00 3.350980699018414e+00 4.761410106079966e+00 9.197008429326948e+03 + 82180 1.006157932273557e+00 -5.990239157559158e+00 -5.970433960016605e+00 3.709373784718790e+00 4.823098293852542e+00 9.126514077081361e+03 + 82200 1.016726882499973e+00 -5.960533970645779e+00 -6.014397243383137e+00 3.912150227734968e+00 4.602858980362544e+00 9.261293779520003e+03 + 82220 9.979775544152479e-01 -5.893027751377255e+00 -6.069221251694980e+00 4.212070857692677e+00 4.200340513012240e+00 9.430757019027582e+03 + 82240 1.054341292935148e+00 -5.952133271901108e+00 -6.028138300356474e+00 3.959034853333704e+00 4.522602218202850e+00 9.303626688837259e+03 + 82260 1.086997289403144e+00 -5.988753152456590e+00 -6.013076335256356e+00 3.770394539776795e+00 4.630727060140167e+00 9.257241533574917e+03 + 82280 9.930301270538908e-01 -5.849295966728095e+00 -6.014262164276999e+00 4.557997760641574e+00 4.610736325879201e+00 9.260862944527180e+03 + 82300 1.052704167888893e+00 -5.941650218359268e+00 -6.061094917913366e+00 3.918227059446591e+00 4.232357110599438e+00 9.405546981787807e+03 + 82320 1.035475766103420e+00 -5.925586028161403e+00 -6.009739267844735e+00 4.106886085685982e+00 4.623665160752541e+00 9.246951713316425e+03 + 82340 1.059930091496441e+00 -5.973064455901590e+00 -5.982995502455424e+00 3.844160028408986e+00 4.787134422272385e+00 9.164905895347836e+03 + 82360 1.055375561443872e+00 -5.980016403835411e+00 -5.994561134237355e+00 3.790468925824066e+00 4.706950833066347e+00 9.200351231154134e+03 + 82380 1.021943690518623e+00 -5.945473845969684e+00 -5.998256626271318e+00 4.009937131181599e+00 4.706850238580766e+00 9.211672906131917e+03 + 82400 1.060955343739208e+00 -6.020882436619464e+00 -6.015629788290397e+00 3.532014829274395e+00 4.562176348824597e+00 9.265117486401068e+03 + 82420 1.025085119426230e+00 -5.990890568948218e+00 -6.030370186696810e+00 3.745718874076666e+00 4.519020799513146e+00 9.310516771307657e+03 + 82440 1.034160948772676e+00 -6.030455026508863e+00 -5.984256441678343e+00 3.507182693757268e+00 4.772462117062009e+00 9.168786953885985e+03 + 82460 9.669831020702148e-01 -5.955570659970894e+00 -6.024859108725444e+00 3.907088469367947e+00 4.509223474266530e+00 9.293502499893486e+03 + 82480 9.677544578647109e-01 -5.979622822096868e+00 -5.987621114589913e+00 3.824472741134358e+00 4.778545307907529e+00 9.179071304884421e+03 + 82500 1.000624017605016e+00 -6.047706445230441e+00 -6.003804533381391e+00 3.475564904079214e+00 4.727656475715362e+00 9.228739162402349e+03 + 82520 9.834867481801457e-01 -6.039855188751357e+00 -6.010631886338153e+00 3.568915395297044e+00 4.736720120045091e+00 9.249713937781315e+03 + 82540 9.200750851948417e-01 -5.960130077415306e+00 -6.058719697671354e+00 3.875622144634004e+00 4.309505288429348e+00 9.398189475973371e+03 + 82560 1.015142155413174e+00 -6.113233090351068e+00 -6.014244303187169e+00 3.095668895392885e+00 4.664077829753301e+00 9.260848481965104e+03 + 82580 9.651283856148998e-01 -6.050630456495955e+00 -5.994736860064145e+00 3.459877045518359e+00 4.780826725735905e+00 9.200931563201901e+03 + 82600 9.343478073029360e-01 -6.013896740798929e+00 -5.996300339084693e+00 3.679259350695470e+00 4.780300612372982e+00 9.205716424906679e+03 + 82620 9.805046819622550e-01 -6.086987815585871e+00 -5.998250725993623e+00 3.235972956523999e+00 4.745515056982916e+00 9.211669040801013e+03 + 82640 9.579135776566627e-01 -6.052322091838229e+00 -5.975536083805047e+00 3.455128158427278e+00 4.896045299150146e+00 9.142100696801939e+03 + 82660 9.217363216217590e-01 -5.991623039091014e+00 -6.014127404238494e+00 3.720654568638975e+00 4.591431021422895e+00 9.260445479676475e+03 + 82680 9.200823190905971e-01 -5.973331691857776e+00 -6.012939503868029e+00 3.843812133394743e+00 4.616377947542769e+00 9.256821354123618e+03 + 82700 9.181080846874173e-01 -5.940608261060464e+00 -6.046039584483639e+00 3.992827268280853e+00 4.387424293740414e+00 9.358905391108510e+03 + 82720 9.550676461486908e-01 -5.954477499278572e+00 -6.027071500783741e+00 3.859329371181869e+00 4.442483380653761e+00 9.300322958644376e+03 + 82740 1.051212191232689e+00 -6.043816203611694e+00 -5.964240093459852e+00 3.451319988211083e+00 4.908258327066211e+00 9.107607716343658e+03 + 82760 1.080527458671875e+00 -6.034858787241326e+00 -5.975857016935064e+00 3.514908116887699e+00 4.853705412480707e+00 9.143094409974112e+03 + 82780 1.065867721802160e+00 -5.972207196800955e+00 -6.000939279506110e+00 3.884414564356550e+00 4.719430499188123e+00 9.219905982670060e+03 + 82800 1.052523272866169e+00 -5.926939223415161e+00 -6.010736142715393e+00 4.111207548600879e+00 4.630032670447594e+00 9.250034565973976e+03 + 82820 9.790761495021265e-01 -5.805091854200137e+00 -6.030112461776572e+00 4.713968435861663e+00 4.421865285331293e+00 9.309675124563544e+03 + 82840 1.072317842162483e+00 -5.938347373547508e+00 -6.028438988758931e+00 3.966622329384520e+00 4.449302333208129e+00 9.304549295530356e+03 + 82860 1.098032465784719e+00 -5.976847204493138e+00 -6.029621297466610e+00 3.779956291351105e+00 4.476919282732938e+00 9.308214571702654e+03 + 82880 1.031168314826700e+00 -5.888127731024447e+00 -6.045441663690371e+00 4.329926914296673e+00 4.426605968676536e+00 9.357056401387648e+03 + 82900 1.098124145072300e+00 -6.005107938762134e+00 -6.018898281185869e+00 3.641413284292229e+00 4.562227004046543e+00 9.275154118266630e+03 + 82920 9.772339319791201e-01 -5.849137279902993e+00 -6.099097626583569e+00 4.479894784466588e+00 4.044583792588084e+00 9.523744104256293e+03 + 82940 1.016284127512851e+00 -5.935190976043092e+00 -6.003945305268794e+00 4.088658300341645e+00 4.693860302229603e+00 9.229136237507797e+03 + 82960 1.011590184554013e+00 -5.956104559287598e+00 -6.010599615589779e+00 3.983519312527072e+00 4.670600266157239e+00 9.249577881850169e+03 + 82980 1.019635523430355e+00 -5.994231561974869e+00 -5.977817061969596e+00 3.742812197757780e+00 4.837066796923726e+00 9.149068327652612e+03 + 83000 1.023163973459624e+00 -6.023851710258988e+00 -5.986938804452557e+00 3.553207797951957e+00 4.765167415346193e+00 9.176996183295178e+03 + 83020 1.016000058486344e+00 -6.032735539924692e+00 -5.980069571500186e+00 3.548795249512327e+00 4.851211390238117e+00 9.155959861413776e+03 + 83040 1.055286889144455e+00 -6.109420291545003e+00 -5.921842426374081e+00 3.189105314991783e+00 5.266206444384043e+00 8.978685859894013e+03 + 83060 9.921693802123008e-01 -6.027804127261330e+00 -5.966662590909072e+00 3.562322375169651e+00 4.913406538526488e+00 9.114991642283796e+03 + 83080 1.004513599239578e+00 -6.052576113504093e+00 -5.996800757401754e+00 3.390180146647830e+00 4.710450872595926e+00 9.207238259038486e+03 + 83100 1.011557073208864e+00 -6.067817175105558e+00 -5.996800231397925e+00 3.368347004177421e+00 4.776137284783172e+00 9.207212391906281e+03 + 83120 9.863542858744674e-01 -6.033382933104475e+00 -6.005643490935316e+00 3.491556726831327e+00 4.650840896431443e+00 9.234389091230565e+03 + 83140 1.007968701325409e+00 -6.066710845416040e+00 -6.018792916473425e+00 3.334907248560115e+00 4.610059411824151e+00 9.274810667852491e+03 + 83160 9.454306578277356e-01 -5.973902273167461e+00 -6.008122113649366e+00 3.813481212058842e+00 4.616985592508549e+00 9.242003424773871e+03 + 83180 9.393345218205708e-01 -5.960205312923350e+00 -6.000875430014376e+00 3.915380123803668e+00 4.681846017786715e+00 9.219733949563484e+03 + 83200 9.342837444881428e-01 -5.946678756006410e+00 -6.027762128251698e+00 3.970178004178680e+00 4.504584733134928e+00 9.302459913196921e+03 + 83220 1.002391371332529e+00 -6.039827216977188e+00 -5.982543935289373e+00 3.459256465148587e+00 4.788185933159212e+00 9.163541719853587e+03 + 83240 1.042012832966301e+00 -6.089270615827140e+00 -5.979625027698048e+00 3.233279526021895e+00 4.862881460659072e+00 9.154618413327004e+03 + 83260 9.411776881371352e-01 -5.931121394763776e+00 -5.980408474344442e+00 4.103359056679516e+00 4.820345018576424e+00 9.156992998395635e+03 + 83280 9.990019456534729e-01 -6.008486604331204e+00 -5.984935470351600e+00 3.691009907367030e+00 4.826244163204120e+00 9.170828149950803e+03 + 83300 1.005890894000541e+00 -6.007282532360395e+00 -5.971430991704674e+00 3.725489229634081e+00 4.931354324087215e+00 9.129560756978364e+03 + 83320 1.066331977764432e+00 -6.085778020151919e+00 -5.991899075653709e+00 3.214392996351001e+00 4.753460423379432e+00 9.192204775181423e+03 + 83340 9.952108255693745e-01 -5.971132132138619e+00 -5.992297216404512e+00 3.867050504723726e+00 4.745517315582766e+00 9.193421084102025e+03 + 83360 1.042637261523889e+00 -6.031738320200724e+00 -6.023409425351056e+00 3.550699589797229e+00 4.598525392916340e+00 9.289055074179605e+03 + 83380 1.057991142794505e+00 -6.049273279768072e+00 -6.004321316473352e+00 3.433493109904442e+00 4.691614239436566e+00 9.230317634534364e+03 + 83400 1.018374480229375e+00 -5.989304615874483e+00 -6.010388803782011e+00 3.745965744666484e+00 4.624897074933922e+00 9.248958329614681e+03 + 83420 1.017310267047913e+00 -5.988250806869074e+00 -5.985475692732642e+00 3.770572628824862e+00 4.786507763643774e+00 9.172502599298221e+03 + 83440 1.027109972170316e+00 -6.001867248164055e+00 -6.011046661930910e+00 3.681527723586982e+00 4.628818109228011e+00 9.250997838884088e+03 + 83460 1.051378757212570e+00 -6.039581557052643e+00 -6.004920153848638e+00 3.475280814825332e+00 4.674311955857540e+00 9.232172353426446e+03 + 83480 1.003196982796949e+00 -5.975153730610701e+00 -6.025299069025753e+00 3.822340404142767e+00 4.534398110997499e+00 9.294866215746399e+03 + 83500 1.044714500666520e+00 -6.054451207779666e+00 -5.996335515637911e+00 3.430023114122890e+00 4.763732411775136e+00 9.205818174827999e+03 + 83520 1.077244992578740e+00 -6.141394613836490e+00 -5.971603169493544e+00 2.959526222010450e+00 4.934494970568743e+00 9.130103626703087e+03 + 83540 9.443193519269766e-01 -5.996530282640169e+00 -6.013393366789217e+00 3.710071782779368e+00 4.613241344041700e+00 9.258209558317174e+03 + 83560 9.637349492046307e-01 -6.073843518410907e+00 -5.987380354605710e+00 3.285744638178265e+00 4.782229504879066e+00 9.178359718067331e+03 + 83580 9.009769571844768e-01 -6.020391476635952e+00 -6.019930309946843e+00 3.594460742609467e+00 4.597108833103647e+00 9.278359375037706e+03 + 83600 9.362952394413917e-01 -6.101206490490265e+00 -5.995722657667994e+00 3.145523041026657e+00 4.751227532662513e+00 9.203954581620897e+03 + 83620 9.772607442320609e-01 -6.181099077707755e+00 -5.994311150428404e+00 2.679607572364967e+00 4.752172756141329e+00 9.199618930151602e+03 + 83640 9.052637071157447e-01 -6.084731056994480e+00 -6.021283084808514e+00 3.203229992996955e+00 4.567558067830731e+00 9.282515849714093e+03 + 83660 9.006043932541995e-01 -6.080552089727663e+00 -6.018655969396368e+00 3.209331188755729e+00 4.564748290091693e+00 9.274404754380226e+03 + 83680 8.703930845953498e-01 -6.028773389407351e+00 -5.973023351381444e+00 3.567052815358150e+00 4.887178160993410e+00 9.134417272587318e+03 + 83700 9.577399392663924e-01 -6.140307512277412e+00 -5.968476502973881e+00 2.944683077317322e+00 4.931363323500948e+00 9.120527731315104e+03 + 83720 8.831280135331040e-01 -6.001309658417304e+00 -6.009969226355889e+00 3.682968565989415e+00 4.633243986822256e+00 9.247684530130793e+03 + 83740 9.531656179047132e-01 -6.073126105727603e+00 -6.006790616660993e+00 3.269659579265585e+00 4.650568222869818e+00 9.237913325525917e+03 + 83760 8.797505208143744e-01 -5.924426616752845e+00 -6.041538566203128e+00 4.080016935084467e+00 4.407541998325336e+00 9.345008750229359e+03 + 83780 1.013551321721806e+00 -6.084710376592703e+00 -5.988673597310109e+00 3.246928741110128e+00 4.798386789394345e+00 9.182330317288212e+03 + 83800 1.031117109386899e+00 -6.077189895226326e+00 -5.966029469213874e+00 3.311457058011087e+00 4.949757426194918e+00 9.113059764357653e+03 + 83820 9.811642691953243e-01 -5.973857743013602e+00 -5.988433291407279e+00 3.991437404386761e+00 4.907742349951446e+00 9.181561063983538e+03 + 83840 1.050232721456639e+00 -6.050901051881089e+00 -5.999304702367316e+00 3.382241723433187e+00 4.678515946850557e+00 9.214922009461579e+03 + 83860 1.010195364143056e+00 -5.971661184227782e+00 -5.943191608387906e+00 3.914866705025556e+00 5.078343415150748e+00 9.043465534167453e+03 + 83880 9.538048805608106e-01 -5.870380964658287e+00 -5.998328815644672e+00 4.390128391842755e+00 4.655432031612981e+00 9.211830439570662e+03 + 83900 1.015885132620475e+00 -5.944072892922219e+00 -6.017772079576145e+00 4.005174485742621e+00 4.581982351063504e+00 9.271649891609259e+03 + 83920 1.016023662818928e+00 -5.930076541973777e+00 -6.027069700576364e+00 4.118073208854836e+00 4.561123482515995e+00 9.300324817719189e+03 + 83940 1.039503947318992e+00 -5.955498356897070e+00 -6.054604100984171e+00 3.900409478553727e+00 4.331328959441261e+00 9.385442103957863e+03 + 83960 1.038232833167707e+00 -5.950559270931944e+00 -6.044912979057866e+00 4.040488743171514e+00 4.498695149923322e+00 9.355428090045247e+03 + 83980 9.459637991559319e-01 -5.817938875060586e+00 -6.020034548504183e+00 4.752457378126773e+00 4.591992747009246e+00 9.278628862728083e+03 + 84000 1.044124099682572e+00 -5.968659686960271e+00 -5.988741296764168e+00 3.847945948209775e+00 4.732634237096727e+00 9.182497869539066e+03 + 84020 1.052900947778804e+00 -5.991777500751278e+00 -6.004736396169752e+00 3.732311191466001e+00 4.657899208590540e+00 9.231599472620073e+03 + 84040 1.041928028819528e+00 -5.991492437231734e+00 -6.008704682744217e+00 3.740494417065642e+00 4.641659039746582e+00 9.243778197803338e+03 + 84060 1.042197713597477e+00 -6.015339685702970e+00 -5.984052268796393e+00 3.648425681569691e+00 4.828082871159376e+00 9.168144833581171e+03 + 84080 1.066729856049291e+00 -6.081450282889223e+00 -5.945523706999144e+00 3.234044370047186e+00 5.014555803377659e+00 9.050572208489319e+03 + 84100 9.982259380287439e-01 -6.014882571121378e+00 -5.974107139991982e+00 3.602711728459995e+00 4.836850563982563e+00 9.137727878943129e+03 + 84120 9.448923410865665e-01 -5.972379532932701e+00 -5.989138828381384e+00 3.839895137866479e+00 4.743660669907554e+00 9.183727452094992e+03 + 84140 9.834104122094413e-01 -6.062426887293068e+00 -5.968164133748138e+00 3.344068581450542e+00 4.885339899419499e+00 9.119600243128642e+03 + 84160 9.095635405466753e-01 -5.982046139309189e+00 -5.999992770010598e+00 3.760782766289582e+00 4.657730435569961e+00 9.217021453836081e+03 + 84180 9.666085130773859e-01 -6.085678223529118e+00 -5.957397718021419e+00 3.191539357357197e+00 4.928145871326480e+00 9.086736328410279e+03 + 84200 9.464513493500615e-01 -6.065433228178954e+00 -6.001150705023589e+00 3.341372417380562e+00 4.710492613026974e+00 9.220580627138466e+03 + 84220 9.800516048780994e-01 -6.120607680203458e+00 -6.004264079963592e+00 3.005523860737963e+00 4.673586817429220e+00 9.230162459015934e+03 + 84240 9.289433720816179e-01 -6.045720553875345e+00 -6.028380469387901e+00 3.443839296417994e+00 4.543408744914300e+00 9.304378039546980e+03 + 84260 9.860583349935106e-01 -6.125634006899578e+00 -5.991917688615159e+00 3.034294978923614e+00 4.802114771046123e+00 9.192262534093094e+03 + 84280 9.073210128866678e-01 -5.997739524517145e+00 -6.017181394584211e+00 3.675309212069344e+00 4.563670985524579e+00 9.269891668550816e+03 + 84300 9.743929590715711e-01 -6.082687870102610e+00 -5.981973134090258e+00 3.228653608495410e+00 4.806973208233365e+00 9.161806008165528e+03 + 84320 9.754984196399766e-01 -6.066959956529859e+00 -5.967490305824530e+00 3.341352453611830e+00 4.912522580840527e+00 9.117522788400578e+03 + 84340 9.519406145280928e-01 -6.011329084296095e+00 -5.958945150292056e+00 3.590538752256505e+00 4.891335407695284e+00 9.091449115848001e+03 + 84360 9.651181222089166e-01 -6.006911624190101e+00 -5.970954610796798e+00 3.688776937776117e+00 4.895247673010303e+00 9.128078885046772e+03 + 84380 9.373409626689938e-01 -5.944748563312649e+00 -5.938225668163006e+00 4.054846991663009e+00 5.092302465027020e+00 9.028363585984651e+03 + 84400 1.020056721533188e+00 -6.049251329340729e+00 -5.941041383981572e+00 3.496917318620134e+00 5.118275570307337e+00 9.036913376694534e+03 + 84420 1.003408769926105e+00 -6.011559886117978e+00 -5.967688806283824e+00 3.602451668128482e+00 4.854366197563854e+00 9.118104258315914e+03 + 84440 9.913041937059999e-01 -5.986896237484064e+00 -5.953260754871947e+00 3.790751793382264e+00 4.983891939615158e+00 9.074109789574955e+03 + 84460 9.714101737203035e-01 -5.950882426715223e+00 -6.000859377619379e+00 3.944623712257990e+00 4.657648326258173e+00 9.219619022614919e+03 + 84480 1.020137501536982e+00 -6.014688026667517e+00 -5.969415646555902e+00 3.611765675167401e+00 4.871726687646472e+00 9.123387585673048e+03 + 84500 1.031487898943804e+00 -6.023431488993948e+00 -6.002623245240948e+00 3.549268746153614e+00 4.668752901848653e+00 9.225125904188435e+03 + 84520 1.046821732652058e+00 -6.042233900540487e+00 -6.020495834466696e+00 3.480752709445125e+00 4.605576048795684e+00 9.280100578965830e+03 + 84540 1.019533214941164e+00 -6.001118874361193e+00 -6.024406615751128e+00 3.755172941156812e+00 4.621451126329473e+00 9.292146504990120e+03 + 84560 1.018640993004492e+00 -6.002831281599828e+00 -6.041591622223049e+00 3.651070735209070e+00 4.428502861207212e+00 9.345182786381194e+03 + 84580 9.754619855741278e-01 -5.945244836785481e+00 -6.012388175608156e+00 3.972182215164664e+00 4.586634773246757e+00 9.255101355404604e+03 + 84600 1.002049560804454e+00 -5.991087759816677e+00 -5.972072535687470e+00 3.794279430770098e+00 4.903467790316428e+00 9.131498755425549e+03 + 84620 1.035211422633986e+00 -6.045299705420483e+00 -5.970901632780364e+00 3.466387896293617e+00 4.893593142457715e+00 9.127932787214615e+03 + 84640 9.838960174773487e-01 -5.973468080658742e+00 -6.007830685813532e+00 3.873711984124071e+00 4.676396587729306e+00 9.241101994889386e+03 + 84660 1.020746036897684e+00 -6.036249570059355e+00 -5.988475601127885e+00 3.502796904106389e+00 4.777122426708695e+00 9.181699222024667e+03 + 84680 1.023018153678763e+00 -6.048426279762470e+00 -5.977496932890238e+00 3.446938111040121e+00 4.854225397061434e+00 9.148100893217461e+03 + 84700 9.904069332703888e-01 -6.007655891348171e+00 -6.002840717553000e+00 3.633221535120394e+00 4.660871008198001e+00 9.225744906943140e+03 + 84720 9.617155027752946e-01 -5.973091286248380e+00 -6.000808069082042e+00 3.869925908743951e+00 4.710771852554776e+00 9.219531236639490e+03 + 84740 9.598283987216493e-01 -5.977827886871006e+00 -6.030861355932215e+00 3.815862638277824e+00 4.511336252025549e+00 9.312013517548472e+03 + 84760 9.615179546135877e-01 -5.989041580333941e+00 -6.025692883563925e+00 3.768835685142471e+00 4.558378230225061e+00 9.296079875414351e+03 + 84780 9.724046706631891e-01 -6.014804468887688e+00 -5.988749381817067e+00 3.635526031260907e+00 4.785138373232112e+00 9.182538300734232e+03 + 84800 9.630556102420048e-01 -6.008490732540599e+00 -5.958568304109759e+00 3.717109533490069e+00 5.003771843010785e+00 9.090284924025902e+03 + 84820 9.501450460427124e-01 -5.994837512649916e+00 -5.970548095419467e+00 3.681650617658569e+00 4.821124210170973e+00 9.126877019010688e+03 + 84840 9.750808570589353e-01 -6.034732821054461e+00 -5.982594454947055e+00 3.487911229140004e+00 4.787297795714806e+00 9.163696483298034e+03 + 84860 1.003224300854488e+00 -6.073971138159021e+00 -6.007559356044354e+00 3.304845433194199e+00 4.686192163286689e+00 9.240291228220258e+03 + 84880 9.415768848847114e-01 -5.978121839821540e+00 -6.033156719796853e+00 3.809719854572960e+00 4.493701057134563e+00 9.319121708864039e+03 + 84900 1.002542084280613e+00 -6.062354800836006e+00 -5.973331665704523e+00 3.365948221893009e+00 4.877132840103628e+00 9.135358283086322e+03 + 84920 9.967964468740868e-01 -6.040431996604574e+00 -6.024712492098899e+00 3.472293773255735e+00 4.562557600712777e+00 9.293070555238517e+03 + 84940 1.042009006475382e+00 -6.089374775488833e+00 -5.998485012112412e+00 3.225584497145897e+00 4.747487583598735e+00 9.212416335689999e+03 + 84960 1.009334758208098e+00 -6.021989401121097e+00 -5.997574557246512e+00 3.601332674488382e+00 4.741526486201126e+00 9.209608060746627e+03 + 84980 1.023695923169529e+00 -6.022045823157714e+00 -6.003702242423251e+00 3.640920935104671e+00 4.746252614341903e+00 9.228406397020610e+03 + 85000 1.025140912498226e+00 -5.999955955395373e+00 -6.020272276305761e+00 3.679439771025399e+00 4.562780312417458e+00 9.279342530925025e+03 + 85020 1.049712888297047e+00 -6.010990260513758e+00 -5.956083120001693e+00 3.658764256778189e+00 4.974049554450998e+00 9.082714322792730e+03 + 85040 1.067135619630734e+00 -6.011190660371485e+00 -5.995963073788410e+00 3.620165959911706e+00 4.707605118533129e+00 9.204649320427958e+03 + 85060 1.012621018824054e+00 -5.906377789020186e+00 -6.033194662985345e+00 4.236217825365406e+00 4.508015710209645e+00 9.319229849520594e+03 + 85080 1.104965638185645e+00 -6.025952377511055e+00 -5.976892676815587e+00 3.619815308300068e+00 4.901523701657590e+00 9.146239782585486e+03 + 85100 1.060883339490869e+00 -5.948439435383001e+00 -6.019719638032241e+00 3.989908804460604e+00 4.580606850272961e+00 9.277662045214192e+03 + 85120 1.035198419222132e+00 -5.903572998782171e+00 -6.022849069339911e+00 4.238961621501373e+00 4.554059966446572e+00 9.287319441961199e+03 + 85140 1.032766570409841e+00 -5.900207756610824e+00 -6.006161071934569e+00 4.189036326252777e+00 4.580635993441278e+00 9.235964851776045e+03 + 85160 1.052683898234607e+00 -5.936734167712669e+00 -5.992964626821974e+00 4.003200295560973e+00 4.680316297719922e+00 9.195427776924500e+03 + 85180 1.091730497749301e+00 -6.010240723096389e+00 -5.931040345789839e+00 3.633061587378881e+00 5.087842410091875e+00 9.006542663415106e+03 + 85200 1.055200692173876e+00 -5.976761496284578e+00 -5.963131092901229e+00 3.795400663511414e+00 4.873668549036712e+00 9.104203219031710e+03 + 85220 1.010380908542570e+00 -5.942364520394688e+00 -5.972134188675652e+00 4.046681755258039e+00 4.875739713147467e+00 9.131684424548157e+03 + 85240 1.071649187169908e+00 -6.074593223984648e+00 -5.972715346927812e+00 3.301747754828176e+00 4.886746290439052e+00 9.133462533412825e+03 + 85260 9.645271463270677e-01 -5.963756905951239e+00 -6.055130311922111e+00 3.892955126126217e+00 4.368274889052595e+00 9.387050770149219e+03 + 85280 9.896218866744900e-01 -6.049590660161531e+00 -5.998434917740892e+00 3.467730597829813e+00 4.761474787134678e+00 9.212258717266024e+03 + 85300 1.006119761154299e+00 -6.110714910396021e+00 -5.972453228622769e+00 3.132003830221241e+00 4.925923802889367e+00 9.132692242370897e+03 + 85320 9.389083554610906e-01 -6.035453817879366e+00 -6.004132074974864e+00 3.521667167096321e+00 4.701521461878023e+00 9.229750433269321e+03 + 85340 8.956827525166451e-01 -5.984655961640948e+00 -6.020333936415890e+00 3.800464353862167e+00 4.595595901555702e+00 9.279555921767676e+03 + 85360 9.489316750843187e-01 -6.068485379590001e+00 -5.979942201982908e+00 3.386120897797123e+00 4.894549525629506e+00 9.155574508034588e+03 + 85380 9.962593595932140e-01 -6.136364321397270e+00 -5.973247534300667e+00 2.995963334877548e+00 4.932605168627466e+00 9.135114569067833e+03 + 85400 9.328451405234977e-01 -6.034995650636074e+00 -6.003847464600062e+00 3.555352609039218e+00 4.734210313424210e+00 9.228880306235573e+03 + 85420 9.696502842013216e-01 -6.078410000828127e+00 -6.007029707833505e+00 3.295217757528854e+00 4.705094445968615e+00 9.238645017716421e+03 + 85440 9.845809272958985e-01 -6.085882474075352e+00 -5.993161494531241e+00 3.254615494841687e+00 4.787033707909188e+00 9.196069507275037e+03 + 85460 9.604913012346068e-01 -6.034448168213229e+00 -5.951056897729219e+00 3.485515878661954e+00 4.964361458538540e+00 9.067406415323030e+03 + 85480 9.557087458850798e-01 -6.006609898883384e+00 -5.905626942143614e+00 3.667026396830642e+00 5.246886161492450e+00 8.929592283779679e+03 + 85500 9.421055707656014e-01 -5.959262167360376e+00 -5.929225056995897e+00 3.932459240536193e+00 5.104936976476843e+00 9.001048728066760e+03 + 85520 1.019604941482433e+00 -6.042820253677595e+00 -6.002059056219830e+00 3.454414884012872e+00 4.688471987590283e+00 9.223379967143777e+03 + 85540 1.014193874497937e+00 -6.006067629265862e+00 -6.070236675219164e+00 3.630793647086720e+00 4.262325055095096e+00 9.433934585922538e+03 + 85560 1.028025490372003e+00 -6.008609398803022e+00 -6.029598052943678e+00 3.669944842189591e+00 4.549424742130214e+00 9.308143003113220e+03 + 85580 9.874908934521838e-01 -5.936238344228870e+00 -6.038742798213747e+00 4.010856097041822e+00 4.422259659747666e+00 9.336358056314652e+03 + 85600 1.040852649233886e+00 -6.008479617579724e+00 -5.972247036818793e+00 3.690993492327545e+00 4.899046578030561e+00 9.132026284578316e+03 + 85620 1.024907171199845e+00 -5.979310040853572e+00 -6.002295214845894e+00 3.778022026422577e+00 4.646037600414482e+00 9.224082682806866e+03 + 85640 1.011182903426163e+00 -5.956420915668329e+00 -6.001986740408489e+00 3.927416129065548e+00 4.665770112118965e+00 9.223165949602258e+03 + 85660 1.031805407933575e+00 -5.987980010423803e+00 -6.010811535849584e+00 3.759740034334038e+00 4.628637882172065e+00 9.250264045216632e+03 + 85680 1.065570521660756e+00 -6.041648266922348e+00 -5.952726324152756e+00 3.579438794110779e+00 5.090042350119948e+00 9.072499499002621e+03 + 85700 9.899735219045209e-01 -5.933528699249290e+00 -6.061000975066772e+00 4.030008283618877e+00 4.298042749603970e+00 9.405274915404152e+03 + 85720 1.010790626029513e+00 -5.972076795808787e+00 -6.027043519367846e+00 3.877412986491084e+00 4.561785553741992e+00 9.300253781256333e+03 + 85740 1.012140737560350e+00 -5.982476189801347e+00 -6.021064981656902e+00 3.820558123610719e+00 4.598975309179880e+00 9.281813653763733e+03 + 85760 9.904063765070888e-01 -5.961796574243785e+00 -6.002646527748602e+00 3.902286166860453e+00 4.667719412325920e+00 9.225170823336512e+03 + 85780 9.654416174899025e-01 -5.936139244387406e+00 -6.012030456101350e+00 3.970270996268574e+00 4.534491914480053e+00 9.254023754082400e+03 + 85800 9.220834415892797e-01 -5.879272726113687e+00 -5.999549110366408e+00 4.383723352312729e+00 4.693077741223300e+00 9.215654979503835e+03 + 85820 1.070137575664450e+00 -6.102577013871278e+00 -5.976284734301817e+00 3.120766173941174e+00 4.845955986896117e+00 9.144398814460979e+03 + 85840 1.039410271348715e+00 -6.063000622900189e+00 -6.022926925285347e+00 3.350537430565623e+00 4.580646803654711e+00 9.287560566625649e+03 + 85860 9.788127798733348e-01 -5.981833084669034e+00 -5.969571903376481e+00 3.823396779730797e+00 4.893802380124312e+00 9.123870549459747e+03 + 85880 9.445548474732267e-01 -5.937066231269744e+00 -5.984159618135680e+00 4.039127215112964e+00 4.768709700050688e+00 9.168496594687653e+03 + 85900 9.737440479807421e-01 -5.982473623396023e+00 -6.010519044792919e+00 3.722693431703459e+00 4.561652282027547e+00 9.249370515332750e+03 + 85920 1.021098086207686e+00 -6.053817750533587e+00 -5.981599629422113e+00 3.437064163333184e+00 4.851751790473392e+00 9.160653100599147e+03 + 85940 1.014101077044705e+00 -6.043965310085871e+00 -5.979253873910154e+00 3.459206481764523e+00 4.830789562347872e+00 9.153472697978115e+03 + 85960 9.653543937438015e-01 -5.972749768217161e+00 -5.951829561621254e+00 3.894478438630314e+00 5.014605502295517e+00 9.069767749689345e+03 + 85980 9.574381067900577e-01 -5.958453921377498e+00 -6.028546605264420e+00 3.858587416397727e+00 4.456104378711245e+00 9.304891494146275e+03 + 86000 1.049607449972652e+00 -6.088781783659104e+00 -5.970646440578390e+00 3.227502122724974e+00 4.905853544079688e+00 9.127158456076246e+03 + 86020 9.664643232313821e-01 -5.953129026560147e+00 -5.986792823865769e+00 3.929057446115663e+00 4.735754712530985e+00 9.176542953694781e+03 + 86040 9.737164578932404e-01 -5.946233524655065e+00 -5.984588270478945e+00 3.950261783719589e+00 4.730022897821133e+00 9.169790870680776e+03 + 86060 1.012026336580907e+00 -5.978600059532317e+00 -6.048111007508549e+00 3.837907466328589e+00 4.438764846264628e+00 9.365333401235195e+03 + 86080 9.614888213375391e-01 -5.879777112101827e+00 -6.059722044321640e+00 4.321875243686666e+00 4.288603596492240e+00 9.401286284634536e+03 + 86100 1.006086240972491e+00 -5.926691814202258e+00 -5.992325996576662e+00 4.149981481201238e+00 4.773099849150509e+00 9.193480796803986e+03 + 86120 1.078132187567753e+00 -6.015223000881882e+00 -5.997832116495305e+00 3.617854860790825e+00 4.717716010169214e+00 9.210389864857209e+03 + 86140 1.021442794089578e+00 -5.917290608909196e+00 -6.037396235921623e+00 4.151922307165769e+00 4.462257210574708e+00 9.332201326015384e+03 + 86160 9.454245755677048e-01 -5.795884868436961e+00 -6.021780464842474e+00 4.842451556420145e+00 4.545324084629121e+00 9.283988169030357e+03 + 86180 1.058461500597337e+00 -5.957750064064178e+00 -5.994366665517806e+00 3.911745399718176e+00 4.701487207770680e+00 9.199749779982867e+03 + 86200 1.072211055472916e+00 -5.974644985227602e+00 -5.988087095502099e+00 3.831255205840026e+00 4.754068528484029e+00 9.180507254636017e+03 + 86220 1.061638477029515e+00 -5.960799568384579e+00 -5.993626499145146e+00 3.913926078811438e+00 4.725428762433149e+00 9.197508460806974e+03 + 86240 1.032320568444570e+00 -5.925957504938902e+00 -6.051849832343381e+00 4.090314847967745e+00 4.367421622236524e+00 9.376898420064575e+03 + 86260 1.108259509434101e+00 -6.056484675227417e+00 -5.992360021826116e+00 3.411004846243407e+00 4.779218529331725e+00 9.193613960170289e+03 + 86280 1.021868733516462e+00 -5.955217786226994e+00 -5.987948739349999e+00 3.977296704056950e+00 4.789350506126027e+00 9.180079343736648e+03 + 86300 9.804512159896710e-01 -5.925052994469805e+00 -6.008775912370965e+00 4.038306642545137e+00 4.557556691877008e+00 9.244003430848863e+03 + 86320 9.241534768425457e-01 -5.871063897013840e+00 -5.990498170249738e+00 4.343584653330950e+00 4.657774574016370e+00 9.187863991624641e+03 + 86340 9.898099109054631e-01 -5.993045067327929e+00 -5.906021391233983e+00 3.776234304280840e+00 5.275937719282632e+00 8.930755367665701e+03 + 86360 1.021950021320191e+00 -6.059180130695131e+00 -5.954950281281357e+00 3.413359977032663e+00 5.011863901883626e+00 9.079251950406753e+03 + 86380 9.936442162250293e-01 -6.034597453780576e+00 -5.997221210832190e+00 3.494103046937694e+00 4.708723217902229e+00 9.208525477463329e+03 + 86400 1.008499978027216e+00 -6.073886892019775e+00 -5.963373455668958e+00 3.397043258812694e+00 5.031628512238090e+00 9.104946038093700e+03 + 86420 1.000279607226334e+00 -6.077294341502080e+00 -5.995031486714201e+00 3.290620589906557e+00 4.762986632234193e+00 9.201812692322279e+03 + 86440 9.794215144218869e-01 -6.058146975212030e+00 -5.959582488651546e+00 3.442922385467994e+00 5.008894920103296e+00 9.093381390998034e+03 + 86460 1.002932650655497e+00 -6.100818261849855e+00 -5.967026064770546e+00 3.153494188968733e+00 4.921749688873712e+00 9.116087090705820e+03 + 86480 9.629298035610349e-01 -6.045336114006879e+00 -5.951805452026864e+00 3.493550690552838e+00 5.030618225465251e+00 9.069690537198843e+03 + 86500 9.570375941095383e-01 -6.036345044848684e+00 -5.986533015759589e+00 3.519175459306585e+00 4.805203838722755e+00 9.175735959337488e+03 + 86520 9.626350413571247e-01 -6.038376526649987e+00 -5.971117939646562e+00 3.506602722656396e+00 4.892811937462765e+00 9.128592448150932e+03 + 86540 9.175111776165882e-01 -5.957332650679302e+00 -6.010531402453550e+00 3.903168818296687e+00 4.597693353128721e+00 9.249399731695861e+03 + 86560 9.770515861888720e-01 -6.019579585926222e+00 -5.984871680511342e+00 3.623325635954485e+00 4.822623799877727e+00 9.170650703304313e+03 + 86580 9.666516101448205e-01 -5.963561513317231e+00 -6.029356782415494e+00 3.837813692709877e+00 4.460007075762661e+00 9.307379059293407e+03 + 86600 1.029541239450564e+00 -6.007569271796314e+00 -6.008807891315628e+00 3.625485319348004e+00 4.618372974392349e+00 9.244124238329729e+03 + 86620 1.045315166900856e+00 -5.979538962150380e+00 -5.975697300780869e+00 3.790437690607364e+00 4.812497104686276e+00 9.142607326290525e+03 + 86640 1.045462029899829e+00 -5.938813153908774e+00 -5.987636283807338e+00 4.070424991811309e+00 4.790075024578822e+00 9.179128910916364e+03 + 86660 1.100561383914405e+00 -5.990658734931927e+00 -6.002933530515918e+00 3.737389462362055e+00 4.666905686600296e+00 9.226053008397457e+03 + 86680 1.079488701503597e+00 -5.944112847658735e+00 -5.980500234702088e+00 4.001716477871843e+00 4.792774470538962e+00 9.157266642784129e+03 + 86700 1.091377158890260e+00 -5.954328628779661e+00 -6.001016509314276e+00 3.985236457106538e+00 4.717147422150613e+00 9.220130598473295e+03 + 86720 1.101927305951296e+00 -5.972063416625788e+00 -5.996942550687863e+00 3.843991072690577e+00 4.701131234872586e+00 9.207646121847187e+03 + 86740 1.010636652455776e+00 -5.845479198419683e+00 -6.029712371932505e+00 4.511548740372252e+00 4.453653348070167e+00 9.308476878288988e+03 + 86760 1.124883505593846e+00 -6.029743008157395e+00 -5.991335758575483e+00 3.545875825976158e+00 4.766416196578159e+00 9.190456048938011e+03 + 86780 1.089272446289295e+00 -5.997865796936573e+00 -5.991497067631965e+00 3.690918344941565e+00 4.727488574166301e+00 9.190954458965760e+03 + 86800 1.031320727733791e+00 -5.936358794310585e+00 -5.986188020113010e+00 4.050301650343911e+00 4.764174524738611e+00 9.174695850197331e+03 + 86820 1.061310228842444e+00 -6.007039566209550e+00 -6.011056160916388e+00 3.698208964473271e+00 4.675145056100587e+00 9.251014079436603e+03 + 86840 1.065573659251426e+00 -6.040117381307926e+00 -6.009398719742183e+00 3.480312793345074e+00 4.656704101753083e+00 9.245935885557396e+03 + 86860 9.906169701874008e-01 -5.954873783224105e+00 -6.040596049146923e+00 3.884937499517226e+00 4.392706983110630e+00 9.342091046219573e+03 + 86880 9.901194360364229e-01 -5.976593417966445e+00 -6.006475509797045e+00 3.830706183226233e+00 4.659118587696157e+00 9.236940345642724e+03 + 86900 9.694155181104880e-01 -5.963982091147281e+00 -6.042801586461973e+00 3.840354349493828e+00 4.387760610119388e+00 9.348900138720595e+03 + 86920 1.033607645485485e+00 -6.072309055213420e+00 -5.964350765453144e+00 3.279706431496943e+00 4.899619637791798e+00 9.107927154594216e+03 + 86940 9.620740932282194e-01 -5.974751949279804e+00 -6.035081216024483e+00 3.830865653458031e+00 4.484445667886233e+00 9.325056783270584e+03 + 86960 9.416335866062691e-01 -5.951783973841451e+00 -6.029139200939296e+00 3.909959362541208e+00 4.465773677862678e+00 9.306715163426219e+03 + 86980 9.701089384768642e-01 -5.999077669360892e+00 -5.947056653483918e+00 3.765773978459433e+00 5.064486701851212e+00 9.055225778731905e+03 + 87000 9.855619610342466e-01 -6.019691399706589e+00 -6.004490368333856e+00 3.544888743815253e+00 4.632175418309485e+00 9.230828260867109e+03 + 87020 1.005485939356948e+00 -6.047004482314472e+00 -6.012380032943681e+00 3.407014552845204e+00 4.605833499248513e+00 9.255101230564464e+03 + 87040 1.039726136701127e+00 -6.095161728692049e+00 -5.996835567097877e+00 3.177476284794248e+00 4.742080320592313e+00 9.207357841458339e+03 + 87060 9.755812494814868e-01 -5.998025713819947e+00 -6.022057220825758e+00 3.743346821483694e+00 4.605354189392642e+00 9.284881777742274e+03 + 87080 9.792420814155268e-01 -6.001043776553102e+00 -5.999147876883485e+00 3.735377393884364e+00 4.746263943176833e+00 9.214427588133245e+03 + 87100 9.904919284402425e-01 -6.012260377392130e+00 -6.030762468384287e+00 3.599849744411870e+00 4.493607874745583e+00 9.311732994139586e+03 + 87120 1.041108729138819e+00 -6.080648079593712e+00 -5.981778648740228e+00 3.321345598510230e+00 4.889069170465914e+00 9.161207031126265e+03 + 87140 9.810266546063025e-01 -5.985687539429438e+00 -5.996855063460988e+00 3.789247228782733e+00 4.725121577624812e+00 9.207395473165701e+03 + 87160 9.931645839218823e-01 -5.995391755850245e+00 -5.994532894029733e+00 3.745209416249917e+00 4.750141133731734e+00 9.200279096150816e+03 + 87180 1.068191719899646e+00 -6.095121342896608e+00 -5.980627637323411e+00 3.223872951299079e+00 4.881313526544050e+00 9.157682438958793e+03 + 87200 9.994240349550974e-01 -5.978840889165111e+00 -6.020966468576994e+00 3.792681771969165e+00 4.550790176073789e+00 9.281509867105569e+03 + 87220 1.098737715105727e+00 -6.106746793709878e+00 -5.962989220209625e+00 3.104856646321728e+00 4.930334879772781e+00 9.103791555250842e+03 + 87240 9.743929238433158e-01 -5.892419633538895e+00 -6.010108546930813e+00 4.212734593004964e+00 4.536946640008084e+00 9.248111057241251e+03 + 87260 1.038437066214709e+00 -5.948009171828121e+00 -5.988197886474595e+00 3.973706614635315e+00 4.742936795951763e+00 9.180836330114249e+03 + 87280 1.064394453455502e+00 -5.940301750498324e+00 -5.949848393868467e+00 4.028481973630079e+00 4.973663670060429e+00 9.063726152523703e+03 + 87300 1.028235289934293e+00 -5.840730104757843e+00 -5.994919789682199e+00 4.546754944196573e+00 4.661373912584294e+00 9.201454321528790e+03 + 87320 1.098003489934703e+00 -5.907483809124360e+00 -6.020323829785401e+00 4.162056543786532e+00 4.514111683214074e+00 9.279530292132480e+03 + 87340 1.080052091478396e+00 -5.855498171808327e+00 -6.033360433663347e+00 4.492065304109422e+00 4.470752672441827e+00 9.319722545344102e+03 + 87360 1.185718450684636e+00 -6.002139578696011e+00 -6.019521086397042e+00 3.671483005864709e+00 4.571675698865770e+00 9.277075954316944e+03 + 87380 1.063307304000342e+00 -5.826077583394437e+00 -6.057293218445481e+00 4.619163086853419e+00 4.291487129886442e+00 9.393769948680909e+03 + 87400 1.081903271360594e+00 -5.872278225676268e+00 -6.019615857297940e+00 4.405142834480008e+00 4.559107353283564e+00 9.277352556664273e+03 + 87420 1.120687733459538e+00 -5.958239705478081e+00 -5.994854031909878e+00 3.920234768618709e+00 4.709989640198625e+00 9.201252316864273e+03 + 87440 9.767452828527707e-01 -5.781613256669887e+00 -6.019205540418785e+00 4.829090045962376e+00 4.464798385389123e+00 9.276091055960769e+03 + 87460 1.070604057053881e+00 -5.956096229281000e+00 -6.029554651441989e+00 3.937340669661768e+00 4.515531041959276e+00 9.307984310503936e+03 + 87480 1.102766890945027e+00 -6.046210863513027e+00 -6.072432351709704e+00 3.376049544134260e+00 4.225481701146757e+00 9.440766512635804e+03 + 87500 9.883364426916296e-01 -5.917984939155740e+00 -6.029586460660076e+00 4.142253199794916e+00 4.501419993037389e+00 9.308088700449496e+03 + 87520 9.938560467008314e-01 -5.954078828453053e+00 -5.987654196659008e+00 3.969777936395116e+00 4.776982976385079e+00 9.179175457162126e+03 + 87540 9.376810252954405e-01 -5.887932442066313e+00 -6.018722535776892e+00 4.312225571698859e+00 4.561208613911128e+00 9.274584473413728e+03 + 87560 1.017023053619591e+00 -6.018156731617259e+00 -5.979626679807117e+00 3.626699874397654e+00 4.847945394397738e+00 9.154593214481638e+03 + 87580 1.019763415254892e+00 -6.033072714343209e+00 -5.987097340342457e+00 3.517090772471723e+00 4.781088484650179e+00 9.177486946972494e+03 + 87600 1.032086922016970e+00 -6.058684871303665e+00 -6.017422183484295e+00 3.371250864776802e+00 4.608187603615930e+00 9.270623469580598e+03 + 87620 1.002342363372543e+00 -6.023471787098549e+00 -5.997285444219530e+00 3.590650654545577e+00 4.741016687680368e+00 9.208717875422559e+03 + 87640 1.023962130146442e+00 -6.063929588694057e+00 -5.925244715467689e+00 3.351974914765064e+00 5.148324918245644e+00 8.988985179842024e+03 + 87660 9.426849686415408e-01 -5.948347946413624e+00 -6.001302881486541e+00 3.905273612678665e+00 4.601198180740253e+00 9.221051861000869e+03 + 87680 9.433837386567213e-01 -5.951943417717841e+00 -6.016854088222513e+00 3.912226514076841e+00 4.539499399145216e+00 9.268845382637981e+03 + 87700 9.185573441488417e-01 -5.913795476897024e+00 -6.043812973900074e+00 4.127400763832975e+00 4.380820175898820e+00 9.352017293361330e+03 + 87720 1.031470006786479e+00 -6.077512849350993e+00 -5.983044609121443e+00 3.303667542685393e+00 4.846118796996401e+00 9.165084951606474e+03 + 87740 1.037918622998474e+00 -6.081382304309732e+00 -6.009196926877458e+00 3.303577783777720e+00 4.718077391644893e+00 9.245309982033919e+03 + 87760 1.010216182808845e+00 -6.035345614092986e+00 -5.990411564475682e+00 3.553906144771418e+00 4.811924411195684e+00 9.187648314248903e+03 + 87780 9.779723079411894e-01 -5.981910070564151e+00 -6.051590255827199e+00 3.747961289976455e+00 4.347846883222214e+00 9.376094615194474e+03 + 87800 1.009509693008653e+00 -6.021485364816083e+00 -6.016770220846404e+00 3.562507971338724e+00 4.589583057678799e+00 9.268597185588011e+03 + 87820 9.892667139631877e-01 -5.981174884315873e+00 -6.010436422154455e+00 3.781236207480657e+00 4.613211929003173e+00 9.249114869479732e+03 + 87840 1.046847128148843e+00 -6.053118776592689e+00 -5.954233536767850e+00 3.471197381918711e+00 5.039011731434345e+00 9.077066255642838e+03 + 87860 9.554116842456905e-01 -5.900291638628477e+00 -5.976976944554920e+00 4.249125050266577e+00 4.808786156624206e+00 9.146492175127405e+03 + 87880 1.021292379501556e+00 -5.975558685841905e+00 -5.968274048262773e+00 3.844138159175177e+00 4.885967675448578e+00 9.119906901895449e+03 + 87900 9.931899925782079e-01 -5.901975386050038e+00 -6.036688532120677e+00 4.160212852955652e+00 4.386669121426063e+00 9.330005841505406e+03 + 87920 1.068627480747506e+00 -5.983152613730168e+00 -6.000545590900871e+00 3.739534938425708e+00 4.639661771957011e+00 9.218731577408797e+03 + 87940 1.114107330683832e+00 -6.021331162173616e+00 -6.033623673311300e+00 3.544902430903551e+00 4.474316929691023e+00 9.320581398431421e+03 + 87960 1.068641053150055e+00 -5.934209407403129e+00 -6.063956398092085e+00 3.975188954558745e+00 4.230161655740845e+00 9.414458746494622e+03 + 87980 9.920919027925906e-01 -5.811175323922484e+00 -6.030926052399545e+00 4.727728494132732e+00 4.465885804902118e+00 9.312227350342862e+03 + 88000 1.139653846797910e+00 -6.024430322470007e+00 -6.003582190481590e+00 3.533435979572522e+00 4.653149179688009e+00 9.228058754477084e+03 + 88020 1.099798586894049e+00 -5.968770280846300e+00 -6.036249714995082e+00 3.830739501407201e+00 4.443262148116212e+00 9.328654220145472e+03 + 88040 1.031265553988053e+00 -5.882369938773733e+00 -6.045400733301227e+00 4.324068950080375e+00 4.387920898969591e+00 9.356928446633203e+03 + 88060 1.064556472837362e+00 -5.958011326533017e+00 -6.012031120525530e+00 3.941483465228973e+00 4.631293448587855e+00 9.254002161774555e+03 + 88080 9.691622757832288e-01 -5.852962011133539e+00 -6.008082256169258e+00 4.509637178497927e+00 4.618912726722493e+00 9.241822905599580e+03 + 88100 1.068956313778761e+00 -6.040563795665296e+00 -5.996583107147465e+00 3.476196025534931e+00 4.728739944993866e+00 9.206550326267476e+03 + 88120 9.843913416396393e-01 -5.958877028924325e+00 -6.001830467747716e+00 3.951279225237192e+00 4.704633932490104e+00 9.222671059649711e+03 + 88140 1.023673236249217e+00 -6.056961313113266e+00 -6.015596247436732e+00 3.339324472804074e+00 4.576849081141959e+00 9.265004402417928e+03 + 88160 1.000611996918333e+00 -6.054272032854122e+00 -6.003210546148085e+00 3.418476418171049e+00 4.711679376576646e+00 9.226921910229847e+03 + 88180 1.005192078222208e+00 -6.082931932148595e+00 -5.996273338815759e+00 3.253389392578082e+00 4.750996445869205e+00 9.205632529962299e+03 + 88200 9.290167058131290e-01 -5.984326471723317e+00 -6.025331007420515e+00 3.789934055945123e+00 4.554479666540418e+00 9.294979668216942e+03 + 88220 9.516883114789758e-01 -6.024310540507553e+00 -5.985529208890915e+00 3.620027486724467e+00 4.842715894258875e+00 9.172681859169972e+03 + 88240 1.004731276240237e+00 -6.103927875696463e+00 -5.960152297704725e+00 3.199853742711092e+00 5.025435360738438e+00 9.095136135566852e+03 + 88260 9.926659864236113e-01 -6.083874822827923e+00 -5.955601421906887e+00 3.294438292642492e+00 5.031004010975719e+00 9.081256927125814e+03 + 88280 9.757146796055489e-01 -6.050976490782602e+00 -5.990455724417666e+00 3.481783780075792e+00 4.829303386101582e+00 9.187790603997033e+03 + 88300 1.026599206131546e+00 -6.117088138839598e+00 -5.984150311818936e+00 3.087092223047155e+00 4.850441797862045e+00 9.168465012924249e+03 + 88320 9.959500379792751e-01 -6.060990303142972e+00 -5.998702628992168e+00 3.390136974862183e+00 4.747802438822522e+00 9.213053506853699e+03 + 88340 9.639005829310554e-01 -6.000639961912147e+00 -5.965334124934460e+00 3.679700110413886e+00 4.882431689900384e+00 9.110940801666005e+03 + 88360 1.009830494772786e+00 -6.052774510706263e+00 -5.942327239497365e+00 3.440913413539031e+00 5.075118736480508e+00 9.040836079821560e+03 + 88380 9.827677703557557e-01 -5.993533953794765e+00 -5.971616027217805e+00 3.790131661989318e+00 4.915987788182400e+00 9.130081092429949e+03 + 88400 9.863357831186433e-01 -5.975837626961129e+00 -6.010935044182528e+00 3.817298597453188e+00 4.615763796460151e+00 9.250601590483288e+03 + 88420 1.022797964711116e+00 -6.006055753257874e+00 -5.997366337242936e+00 3.642044837386653e+00 4.691940808827208e+00 9.208977758041070e+03 + 88440 1.007852546971939e+00 -5.961457412479761e+00 -6.000293729544374e+00 3.905157834698996e+00 4.682153692213344e+00 9.217945343884627e+03 + 88460 1.019827198428751e+00 -5.957575321813730e+00 -6.038928189285718e+00 3.902388237329301e+00 4.435247482989591e+00 9.336928144021371e+03 + 88480 1.058705366067213e+00 -5.999991422110526e+00 -6.024070413822935e+00 3.658403073639277e+00 4.520137777014702e+00 9.291086559473364e+03 + 88500 1.042467963243668e+00 -5.964207420497758e+00 -6.004658095810543e+00 3.936646522889638e+00 4.704372485521856e+00 9.231337218298673e+03 + 88520 1.000216310004870e+00 -5.893245992925927e+00 -6.019794635804672e+00 4.310346785086947e+00 4.583684894337995e+00 9.277912297486433e+03 + 88540 1.004953437088703e+00 -5.896657235885146e+00 -5.982405215851580e+00 4.268208600259834e+00 4.775830429835557e+00 9.163083255767737e+03 + 88560 1.017868746837943e+00 -5.912969661958693e+00 -6.003055934958522e+00 4.089558590356763e+00 4.572269269986053e+00 9.226394643453426e+03 + 88580 1.063780659232309e+00 -5.980526076687880e+00 -6.003406252424225e+00 3.789026426926977e+00 4.657644917153135e+00 9.227496002644621e+03 + 88600 1.063418887084190e+00 -5.987045572887839e+00 -5.970365549923864e+00 3.786583357795255e+00 4.882362630879610e+00 9.126279642283471e+03 + 88620 1.008944119140215e+00 -5.922928897714257e+00 -6.021480587715984e+00 4.104738273557393e+00 4.538839218742739e+00 9.283080719681378e+03 + 88640 1.014436237957769e+00 -5.961145123957735e+00 -6.004874781617540e+00 3.905986048301517e+00 4.654883586876270e+00 9.232017428194307e+03 + 88660 1.007816616794463e+00 -5.990051130913432e+00 -6.049334925917770e+00 3.725452327060121e+00 4.385035602007585e+00 9.369121240741029e+03 + 88680 9.777241883307218e-01 -5.991275058641246e+00 -6.040175301174655e+00 3.764189909588552e+00 4.483397149673642e+00 9.340785058066474e+03 + 88700 9.402566822340124e-01 -5.977178516934332e+00 -6.012945559554204e+00 3.783207958404343e+00 4.577828064749084e+00 9.256828284157484e+03 + 88720 9.859510970306447e-01 -6.078175361036213e+00 -5.985134229105450e+00 3.289483005838663e+00 4.823739583453742e+00 9.171485906471011e+03 + 88740 9.566750592182246e-01 -6.059619503565356e+00 -5.992136120332607e+00 3.373206981932115e+00 4.760707011474365e+00 9.192929250897309e+03 + 88760 9.723846578848524e-01 -6.100243381561183e+00 -5.951331892050180e+00 3.185785050337162e+00 5.040857867087871e+00 9.068248654009667e+03 + 88780 9.160547825553692e-01 -6.025572161004696e+00 -6.007835598763481e+00 3.553212663278649e+00 4.655058748391839e+00 9.241124041917183e+03 + 88800 9.221373066194983e-01 -6.038905601691775e+00 -5.994649950149300e+00 3.447324582133140e+00 4.701447381829974e+00 9.200632548380030e+03 + 88820 9.111602895749087e-01 -6.020279644544123e+00 -5.958841671222450e+00 3.580397026685465e+00 4.933183376994158e+00 9.091132652581084e+03 + 88840 9.447638986200360e-01 -6.058593425096966e+00 -5.994782291110129e+00 3.378675813222752e+00 4.745089219316242e+00 9.201038928100284e+03 + 88860 9.621686963095208e-01 -6.064128128103943e+00 -6.014130305647388e+00 3.335945203949383e+00 4.623040437632944e+00 9.260500710913224e+03 + 88880 9.533823188433425e-01 -6.027700071112174e+00 -6.027061638903783e+00 3.501365879886273e+00 4.505031856423924e+00 9.300306325463851e+03 + 88900 9.286886453447538e-01 -5.963797874565456e+00 -6.052421764986242e+00 3.847848663223206e+00 4.338956569924334e+00 9.378672666080338e+03 + 88920 1.034486605810206e+00 -6.089522673173873e+00 -5.981180124712253e+00 3.241089021467134e+00 4.863208700688945e+00 9.159377028948153e+03 + 88940 9.333694007430071e-01 -5.906685620385778e+00 -6.030761515455120e+00 4.155092290708149e+00 4.442629300537283e+00 9.311732770428722e+03 + 88960 9.745406744811306e-01 -5.938845615109351e+00 -6.023616845535398e+00 3.991823776115460e+00 4.505054252703586e+00 9.289702653666138e+03 + 88980 1.050847995976898e+00 -6.026019748515243e+00 -5.992268658872719e+00 3.544165345897158e+00 4.737969325588778e+00 9.193351144761345e+03 + 89000 1.091194783546845e+00 -6.066317379388865e+00 -6.022715600296324e+00 3.326744669633388e+00 4.577112832536262e+00 9.286915208787890e+03 + 89020 1.025376651790601e+00 -5.954878706941137e+00 -6.050664857611599e+00 3.897675955486730e+00 4.347657055478027e+00 9.373238364876617e+03 + 89040 1.034449329454733e+00 -5.961296604181987e+00 -6.041612576074671e+00 3.901733917022659e+00 4.440547177558386e+00 9.345238011718004e+03 + 89060 1.053578683597306e+00 -5.987497930043870e+00 -6.052186399747031e+00 3.789913535366977e+00 4.418462331823090e+00 9.377969444520131e+03 + 89080 1.088609789857573e+00 -6.045277679408265e+00 -6.025607809505185e+00 3.445110472132076e+00 4.558057909018097e+00 9.295827633899828e+03 + 89100 1.014354804333683e+00 -5.945907708767368e+00 -6.014663476287125e+00 4.006140856863784e+00 4.611334599844701e+00 9.262104208138006e+03 + 89120 1.030694599901340e+00 -5.982662575084519e+00 -6.002558161612559e+00 3.814919183720523e+00 4.700675647044454e+00 9.224927327084970e+03 + 89140 1.035832615351562e+00 -6.005389610471985e+00 -6.034598283850535e+00 3.655099512101111e+00 4.487378789533881e+00 9.323577518700882e+03 + 89160 1.001223666780861e+00 -5.973648013701814e+00 -6.032037621218685e+00 3.863076059522212e+00 4.527793897397774e+00 9.315679349590542e+03 + 89180 1.056301502242269e+00 -6.080082903675033e+00 -5.996317896797932e+00 3.237679397896343e+00 4.718671029977575e+00 9.205740963457252e+03 + 89200 9.864695799530404e-01 -5.999553203051855e+00 -5.985478091748534e+00 3.738917793248354e+00 4.819739260468461e+00 9.172507528271042e+03 + 89220 9.958121220599762e-01 -6.035595086620949e+00 -5.972789306695220e+00 3.537320578977160e+00 4.897961086473729e+00 9.133686886392228e+03 + 89240 9.827534786273694e-01 -6.035374447653136e+00 -6.006733957232120e+00 3.452195106410916e+00 4.616653234509961e+00 9.237726656988443e+03 + 89260 9.978457561454224e-01 -6.076252793848736e+00 -5.991876712304973e+00 3.328246636640744e+00 4.812747154021453e+00 9.192135934996903e+03 + 89280 1.000984539935491e+00 -6.096722040792721e+00 -5.973346934586663e+00 3.209902927235905e+00 4.918341879307075e+00 9.135434092226424e+03 + 89300 9.726734108396369e-01 -6.070787689172133e+00 -6.003298867146075e+00 3.380896828786059e+00 4.768428088721139e+00 9.227175045275522e+03 + 89320 8.980039786302488e-01 -5.977982402640011e+00 -6.022857905124383e+00 3.794791837880529e+00 4.537109758153703e+00 9.287364668066552e+03 + 89340 9.124569275158166e-01 -6.021610000751577e+00 -6.036857196918711e+00 3.613821791664993e+00 4.526270031777330e+00 9.330547199884744e+03 + 89360 9.505677002071273e-01 -6.112980829208274e+00 -5.981023367613975e+00 3.097143086269987e+00 4.854863251095637e+00 9.158919754334762e+03 + 89380 8.835754802828850e-01 -6.056607432459284e+00 -6.014480142209756e+00 3.380851226184566e+00 4.622752645974453e+00 9.261565619570036e+03 + 89400 9.311868182314267e-01 -6.173113810427619e+00 -5.995850449778006e+00 2.766860893841996e+00 4.784734542108479e+00 9.204341308670015e+03 + 89420 8.926379618709972e-01 -6.153158704387931e+00 -5.989113241486306e+00 2.878928678228287e+00 4.820903112162757e+00 9.183688275647113e+03 + 89440 9.034645844263177e-01 -6.192378040816404e+00 -5.997189083601254e+00 2.639125139623150e+00 4.759930337346049e+00 9.208442968366977e+03 + 89460 8.078497650344366e-01 -6.058995853015265e+00 -5.994436374700137e+00 3.447855430633417e+00 4.818565945665863e+00 9.199990477736916e+03 + 89480 8.687383238017418e-01 -6.144804281244188e+00 -6.039771105992886e+00 2.886279527615725e+00 4.489396273740045e+00 9.339557377746825e+03 + 89500 8.795539161275706e-01 -6.144799908121779e+00 -6.031580123276200e+00 2.907787985399958e+00 4.557913510688357e+00 9.314277348924295e+03 + 89520 9.185742895547041e-01 -6.175384874103182e+00 -6.012872513468366e+00 2.818457024166792e+00 4.751628147638439e+00 9.256632176442701e+03 + 89540 9.121185615716081e-01 -6.128205981132044e+00 -5.995234885741868e+00 3.047687698266629e+00 4.811228305207531e+00 9.202447682877231e+03 + 89560 8.981567693419910e-01 -6.068285652204358e+00 -5.969624632481840e+00 3.401116792165927e+00 4.967643635156085e+00 9.124028324578945e+03 + 89580 9.538965925454703e-01 -6.109192300880643e+00 -5.957562741751687e+00 3.124704680412757e+00 4.995385073529663e+00 9.087243591682311e+03 + 89600 9.568076348206799e-01 -6.076694532985515e+00 -5.979774505956331e+00 3.268471076937542e+00 4.825000870464826e+00 9.155067673702104e+03 + 89620 9.344364078527727e-01 -6.010450810794744e+00 -6.023962651303363e+00 3.673601463054395e+00 4.596014383903341e+00 9.290749255004304e+03 + 89640 9.559476826108811e-01 -6.015844585295693e+00 -6.015841893130399e+00 3.602388068989919e+00 4.602403527819650e+00 9.265744535080750e+03 + 89660 9.432722675544823e-01 -5.972968778008971e+00 -6.031571561291647e+00 3.862701284047002e+00 4.526195033686472e+00 9.314198168393923e+03 + 89680 1.038452115999587e+00 -6.092947996748592e+00 -5.976524512955755e+00 3.248131947402253e+00 4.916653607816615e+00 9.145122645292628e+03 + 89700 9.364344226334796e-01 -5.922435376029928e+00 -6.009280198302424e+00 4.106082184308841e+00 4.607405775627362e+00 9.245541273794595e+03 + 89720 1.020321246207636e+00 -6.026909758922693e+00 -6.005567733635488e+00 3.528658576100155e+00 4.651207787967025e+00 9.234136289426204e+03 + 89740 1.002997369555049e+00 -5.982397307305829e+00 -5.990870955338476e+00 3.841754080776325e+00 4.793097082480065e+00 9.189041523320402e+03 + 89760 1.019875429605953e+00 -5.991287178700564e+00 -5.976151128059742e+00 3.735935496491687e+00 4.822849041567556e+00 9.143949043183098e+03 + 89780 9.659417653348009e-01 -5.893837676796616e+00 -5.956872284020286e+00 4.292880156405480e+00 4.930925687153223e+00 9.085116825867419e+03 + 89800 1.067507889278141e+00 -6.026141591996270e+00 -5.979135879594249e+00 3.543506739336222e+00 4.813420814059109e+00 9.153104213330065e+03 + 89820 1.016461110703808e+00 -5.934070160417384e+00 -6.036441062550446e+00 4.058463945039723e+00 4.470634383145775e+00 9.329241778731342e+03 + 89840 1.021545955440491e+00 -5.932135223209783e+00 -6.003733951869499e+00 4.054997464015811e+00 4.643866484184266e+00 9.228477708299912e+03 + 89860 1.012304368667983e+00 -5.912724258238515e+00 -5.945923090471743e+00 4.160423190546240e+00 4.969790358360355e+00 9.051766412415578e+03 + 89880 1.009349571373608e+00 -5.902327221719281e+00 -6.015274060152491e+00 4.221780483867496e+00 4.573222259117249e+00 9.263951173272742e+03 + 89900 1.059877415356628e+00 -5.973515902865451e+00 -6.007460153793547e+00 3.858080892425451e+00 4.663167750740469e+00 9.239957886128546e+03 + 89920 1.028721827151096e+00 -5.929312685382344e+00 -6.036465367994974e+00 4.041416676193671e+00 4.426129390807907e+00 9.329291008781787e+03 + 89940 1.061769778903416e+00 -5.987465629507965e+00 -6.007947063290040e+00 3.748887936865745e+00 4.631280374597433e+00 9.241463946916585e+03 + 89960 1.026749455500877e+00 -5.952631914293434e+00 -6.030550613504949e+00 3.935343414929964e+00 4.487922186177713e+00 9.311101392939647e+03 + 89980 9.985306537835112e-01 -5.939324593249129e+00 -6.037223797102552e+00 4.079062898990722e+00 4.516910520611536e+00 9.331667924698937e+03 + 90000 1.024303461225930e+00 -6.014003663076107e+00 -6.041073625141481e+00 3.558345087648665e+00 4.402905176406196e+00 9.343568497326509e+03 + 90020 1.034646635005719e+00 -6.075793244695015e+00 -6.000487977137082e+00 3.318832051186078e+00 4.751246550956226e+00 9.218555286443061e+03 + 90040 9.375046994042263e-01 -5.977239213613165e+00 -6.049672648706040e+00 3.785392775058697e+00 4.369468781717556e+00 9.370181969928688e+03 + 90060 9.393414498017124e-01 -6.016843478693740e+00 -6.001552595482736e+00 3.613208568478016e+00 4.701011186132132e+00 9.221810259070193e+03 + 90080 9.886237650923341e-01 -6.114128435244209e+00 -5.956724725060896e+00 3.132921990849318e+00 5.036758452867325e+00 9.084698226607288e+03 + 90100 9.359396230650860e-01 -6.051916224030545e+00 -5.973167836693648e+00 3.408733294059551e+00 4.860918720421568e+00 9.134891986675006e+03 + 90120 9.213030224778741e-01 -6.036342143192512e+00 -6.034484141908981e+00 3.508563262908007e+00 4.519232193802811e+00 9.323201754677382e+03 + 90140 9.691750381032378e-01 -6.107333655313258e+00 -5.975626793386009e+00 3.150960841903280e+00 4.907242024660560e+00 9.142394246533255e+03 + 90160 9.362748039393037e-01 -6.051258500808715e+00 -6.031631368143954e+00 3.367197432783759e+00 4.479899465833785e+00 9.314430916088635e+03 + 90180 1.023606393051084e+00 -6.171646432815560e+00 -5.988386613595773e+00 2.743361808738928e+00 4.795668050064318e+00 9.181452092393200e+03 + 90200 8.965202306255557e-01 -5.971019738654689e+00 -6.002450495134086e+00 3.873981909839267e+00 4.693501642240723e+00 9.224548233663478e+03 + 90220 9.912407083363978e-01 -6.094866784876505e+00 -5.964981433786996e+00 3.222985721536100e+00 4.968807507185179e+00 9.109851652106971e+03 + 90240 9.194210484907953e-01 -5.965725785216926e+00 -5.993672774669414e+00 3.873569387962822e+00 4.713093449743996e+00 9.197647683556110e+03 + 90260 1.022942669029790e+00 -6.094966474552622e+00 -5.990352770187380e+00 3.131776230468857e+00 4.732484309852506e+00 9.187470389686348e+03 + 90280 9.598475915345579e-01 -5.976255996391490e+00 -6.004487721291891e+00 3.828637738272987e+00 4.666526805049576e+00 9.230855472693691e+03 + 90300 9.833697929842095e-01 -5.988335819990033e+00 -6.046079266650390e+00 3.702951203812830e+00 4.371379397319562e+00 9.359052056094628e+03 + 90320 9.716107664810937e-01 -5.953275285592254e+00 -5.987038183066653e+00 4.003697529177051e+00 4.809825747087554e+00 9.177283581746125e+03 + 90340 1.074137082751893e+00 -6.089271367959201e+00 -5.972302772085334e+00 3.217541817676433e+00 4.889193596015888e+00 9.132211328451316e+03 + 90360 1.016098966118460e+00 -5.991043144588276e+00 -6.032480985601726e+00 3.685672958653950e+00 4.447730463069550e+00 9.317015734702367e+03 + 90380 1.066354097378106e+00 -6.058743083030161e+00 -6.010953691976561e+00 3.411118319337729e+00 4.685532398151865e+00 9.250729187760386e+03 + 90400 1.038109655528592e+00 -6.014432751399296e+00 -6.016741375495410e+00 3.619585622284778e+00 4.606329145466468e+00 9.268538362628660e+03 + 90420 1.089347194063812e+00 -6.092073657066365e+00 -6.014723606648991e+00 3.170904447444652e+00 4.615060406822835e+00 9.262288607536695e+03 + 90440 9.826186260511475e-01 -5.938384338412805e+00 -5.995889022931433e+00 3.951858764523008e+00 4.621657967195876e+00 9.204426624219728e+03 + 90460 9.198887365815542e-01 -5.849296312317502e+00 -5.984405633989783e+00 4.549944800429930e+00 4.774126167287736e+00 9.169178489224554e+03 + 90480 1.028947568384534e+00 -6.011569668234668e+00 -5.959061489303172e+00 3.642869914782858e+00 4.944380003821938e+00 9.091783006664045e+03 + 90500 1.010528638888283e+00 -5.983811687595216e+00 -6.007007533651207e+00 3.778590322060214e+00 4.645396184461136e+00 9.238566667421910e+03 + 90520 1.002408396060063e+00 -5.973760658444693e+00 -5.994266762339804e+00 3.860058983941145e+00 4.742309762066096e+00 9.199451853213550e+03 + 90540 9.967592781390170e-01 -5.969626766562801e+00 -6.023465663720730e+00 3.829834810233811e+00 4.520683531210577e+00 9.289215368435285e+03 + 90560 1.030820743992002e+00 -6.025369105495912e+00 -5.960364888234058e+00 3.553619307486540e+00 4.926883582374217e+00 9.095766288132856e+03 + 90580 1.036072530321406e+00 -6.038286635051412e+00 -5.951358604065693e+00 3.556396243673162e+00 5.055550449662476e+00 9.068310582701370e+03 + 90600 9.786182808608902e-01 -5.956211803264342e+00 -5.996027288802871e+00 3.939763719021178e+00 4.711137039632466e+00 9.204802290152973e+03 + 90620 9.933191744009828e-01 -5.980640519197610e+00 -5.950337010762839e+00 3.777100451367684e+00 4.951107886252910e+00 9.065179984237908e+03 + 90640 9.292807142561006e-01 -5.886262797702089e+00 -6.021866744387946e+00 4.243948031208909e+00 4.465289184695788e+00 9.284262428896407e+03 + 90660 9.650406299661355e-01 -5.936715820262868e+00 -6.032496484010139e+00 4.015923589793119e+00 4.465936196546479e+00 9.317055713567006e+03 + 90680 1.050531218000932e+00 -6.061433032555496e+00 -5.992403215462777e+00 3.383005512875396e+00 4.779385404951462e+00 9.193752020066768e+03 + 90700 9.762284701414574e-01 -5.951754705111686e+00 -6.000157909987371e+00 3.931935954215656e+00 4.653997261447728e+00 9.217555510920278e+03 + 90720 9.730865813932369e-01 -5.948880800967653e+00 -6.025619160412798e+00 3.927005467679864e+00 4.486361932523092e+00 9.295880851512205e+03 + 90740 9.945257205188874e-01 -5.982835100906126e+00 -6.026010291386668e+00 3.802181931863123e+00 4.554263306784716e+00 9.297060779986454e+03 + 90760 1.003163360540065e+00 -6.001579051181630e+00 -5.993541523582849e+00 3.659338245549965e+00 4.705490972825547e+00 9.197234312114146e+03 + 90780 1.022994571594771e+00 -6.039165815664402e+00 -5.965713930067644e+00 3.506573025569127e+00 4.928345119308272e+00 9.112075349175429e+03 + 90800 1.031568195074431e+00 -6.060641228513947e+00 -5.954791949693937e+00 3.368726095672284e+00 4.976529034779740e+00 9.078777212796940e+03 + 90820 9.535186460432611e-01 -5.952597048968745e+00 -5.968770270006238e+00 3.947014892194285e+00 4.854145754199132e+00 9.121408641374748e+03 + 90840 9.966719899217524e-01 -6.022660567783614e+00 -6.011710669426211e+00 3.552785453887374e+00 4.615661464746873e+00 9.253029987229671e+03 + 90860 1.037424376896555e+00 -6.088843965813568e+00 -5.986203331087665e+00 3.254851104158999e+00 4.844229512342025e+00 9.174747438043267e+03 + 90880 1.001718706217761e+00 -6.042627792282501e+00 -5.967607978419724e+00 3.491719063943326e+00 4.922494444422069e+00 9.117888053499082e+03 + 90900 9.924692716293966e-01 -6.033610777954717e+00 -5.977645768426397e+00 3.513448550490725e+00 4.834808295759574e+00 9.148542975709381e+03 + 90920 1.002788082742014e+00 -6.051497853248558e+00 -5.978965518657393e+00 3.451612022956298e+00 4.868103912521272e+00 9.152590919323518e+03 + 90940 9.346567080226954e-01 -5.951801617345334e+00 -6.040881076863970e+00 3.978165170593372e+00 4.466657129035554e+00 9.342966969865483e+03 + 90960 1.006417257920964e+00 -6.057665043052575e+00 -5.989971989840886e+00 3.412489402347643e+00 4.801193389355287e+00 9.186271242194092e+03 + 90980 9.266025958710231e-01 -5.936020686059566e+00 -5.991389145592128e+00 4.061488349360757e+00 4.743554086483365e+00 9.190605902782412e+03 + 91000 9.561958998031014e-01 -5.974519251844402e+00 -5.956189554119632e+00 3.850913763691556e+00 4.956165724538738e+00 9.083015930900578e+03 + 91020 1.006852190472304e+00 -6.037081447093894e+00 -5.962668031196943e+00 3.531574720697960e+00 4.958868070217147e+00 9.102790517107829e+03 + 91040 1.084064826833417e+00 -6.132348484506089e+00 -6.004966882630202e+00 2.984770815770680e+00 4.716215685981204e+00 9.232289876528643e+03 + 91060 1.050857770853919e+00 -6.063940961956239e+00 -6.034379179636496e+00 3.333886126915298e+00 4.503634455666290e+00 9.322899491753331e+03 + 91080 9.689402016060198e-01 -5.926426947085247e+00 -6.013112282870818e+00 4.057269111283589e+00 4.559508498690482e+00 9.257359685365214e+03 + 91100 1.007965309000966e+00 -5.966556789630864e+00 -5.992836106043260e+00 3.894247906854662e+00 4.743348005303618e+00 9.195056557191579e+03 + 91120 1.049055006324135e+00 -6.008017048108677e+00 -6.013893635287411e+00 3.728330988203850e+00 4.694586715224629e+00 9.259752322142920e+03 + 91140 9.708688039707143e-01 -5.874894590971385e+00 -6.017748717768360e+00 4.369681659830153e+00 4.549391157157249e+00 9.271602265881009e+03 + 91160 1.075868852834864e+00 -6.013511951470724e+00 -5.943496308037179e+00 3.627686640786177e+00 5.029727300267395e+00 9.044406061664933e+03 + 91180 1.059319613823336e+00 -5.970374829123527e+00 -6.007194875593621e+00 3.827100509626887e+00 4.615674104911827e+00 9.239133060243434e+03 + 91200 9.997601957782097e-01 -5.866630201576225e+00 -6.052331262586438e+00 4.342801355900750e+00 4.276477126433784e+00 9.378388746015207e+03 + 91220 1.074106812823795e+00 -5.966594803735809e+00 -6.014972928835885e+00 3.907571773378381e+00 4.629777092563080e+00 9.263087883080078e+03 + 91240 1.056563043890102e+00 -5.937453390433897e+00 -6.041432124368221e+00 4.025601854678577e+00 4.428539873770617e+00 9.344673596646817e+03 + 91260 9.673927464386137e-01 -5.809442555762791e+00 -6.038172687854384e+00 4.686600052808972e+00 4.373196238465504e+00 9.334569801943591e+03 + 91280 1.026314689320599e+00 -5.905831243445156e+00 -5.996893489639968e+00 4.183908739826203e+00 4.661015230338535e+00 9.207521791541851e+03 + 91300 1.075276707207644e+00 -5.997378313117030e+00 -5.986383127298366e+00 3.694841340481710e+00 4.757977398951993e+00 9.175277527548546e+03 + 91320 9.988504266107781e-01 -5.915992641816494e+00 -5.989278107552175e+00 4.104210173041773e+00 4.683393687898326e+00 9.184119393641327e+03 + 91340 1.027768691818412e+00 -5.998893877758062e+00 -5.900131971693922e+00 3.688312023937532e+00 5.255418171913394e+00 8.912989294768950e+03 + 91360 9.621798808142551e-01 -5.939150759731340e+00 -5.957055683937511e+00 4.008713963514596e+00 4.905901117944697e+00 9.085676786077009e+03 + 91380 9.701896576178528e-01 -5.989742803372113e+00 -6.028941954315830e+00 3.743368877094144e+00 4.518281286326319e+00 9.306105387359406e+03 + 91400 1.001984311149583e+00 -6.072489784536085e+00 -5.962077002593810e+00 3.314401881251693e+00 4.948409161487016e+00 9.100973175128822e+03 + 91420 9.859174001244723e-01 -6.073820146560882e+00 -5.937568957392716e+00 3.329441269446448e+00 5.111816682453437e+00 9.026347145188178e+03 + 91440 9.614124904150658e-01 -6.053462822048669e+00 -5.942861831048573e+00 3.386120940573419e+00 5.021208946344016e+00 9.042475675901069e+03 + 91460 9.670103158555130e-01 -6.070743619162544e+00 -5.933648690613020e+00 3.377184830711050e+00 5.164405125814044e+00 9.014454027048561e+03 + 91480 9.008382474990118e-01 -5.973793782350654e+00 -5.965319368512162e+00 3.870672255563362e+00 4.919333651235287e+00 9.110823025508298e+03 + 91500 9.591219989821808e-01 -6.051956740980719e+00 -5.989926500521300e+00 3.454309897787438e+00 4.810497137654110e+00 9.186135087441180e+03 + 91520 9.661131503252161e-01 -6.050833822001569e+00 -5.999840865148419e+00 3.405118848500883e+00 4.697928297886243e+00 9.216578363011289e+03 + 91540 8.937297703054529e-01 -5.930071244251935e+00 -6.005635740337473e+00 4.108619775042314e+00 4.674716744951181e+00 9.234347328500715e+03 + 91560 9.799969067742539e-01 -6.040599909445302e+00 -5.960662099820501e+00 3.550566202096759e+00 5.009581475298425e+00 9.096695714667492e+03 + 91580 9.873750124112767e-01 -6.028086772819733e+00 -6.004834183589754e+00 3.566751265155697e+00 4.700271230840789e+00 9.231877289496391e+03 + 91600 1.082632929639991e+00 -6.146293663484569e+00 -5.958830991443607e+00 2.951395790626668e+00 5.027835463240614e+00 9.091102476907727e+03 + 91620 9.835509437271127e-01 -5.975751598991893e+00 -5.969112693998621e+00 3.852004637136334e+00 4.890126256974927e+00 9.122462405839829e+03 + 91640 9.868240085701721e-01 -5.957581419746098e+00 -5.960406298230106e+00 3.942764533184067e+00 4.926543643780357e+00 9.095895630875255e+03 + 91660 1.012945680557856e+00 -5.974648853481462e+00 -5.927285781176846e+00 3.795729037087928e+00 5.067695127672782e+00 8.995189848180058e+03 + 91680 9.546830236004079e-01 -5.866722181878935e+00 -5.963377877854162e+00 4.401831388010221e+00 4.846819424299855e+00 9.104928451371828e+03 + 91700 1.079924212094383e+00 -6.032660971653055e+00 -5.961297462761236e+00 3.525292780679866e+00 4.935073092204003e+00 9.098595157602878e+03 + 91720 1.031800682623850e+00 -5.948899907625007e+00 -5.973379201170015e+00 3.997689673204156e+00 4.857125781510284e+00 9.135481286946795e+03 + 91740 1.030513265118737e+00 -5.940465379478386e+00 -5.966055473714219e+00 4.100670935634315e+00 4.953728654477877e+00 9.113104069212050e+03 + 91760 1.025659166762495e+00 -5.929237322324334e+00 -5.984286292107209e+00 4.115330665787295e+00 4.799230962493486e+00 9.168851386259792e+03 + 91780 1.082557069659960e+00 -6.014303931103578e+00 -6.033960978152489e+00 3.623495632975875e+00 4.510621826902828e+00 9.321602238036563e+03 + 91800 1.003182078429742e+00 -5.904348839074922e+00 -6.083437548805012e+00 4.143724379518756e+00 4.115369294360315e+00 9.474981902139245e+03 + 91820 9.611591244775244e-01 -5.851466200615871e+00 -6.078095881418850e+00 4.442491979451584e+00 4.141149281451120e+00 9.458348791893108e+03 + 91840 9.810486751939274e-01 -5.890567718779295e+00 -6.085071166864841e+00 4.249877633311333e+00 4.133008735092811e+00 9.480054024793450e+03 + 91860 9.883088496339950e-01 -5.914244610631100e+00 -6.053519294110114e+00 4.174736001773017e+00 4.374999216548903e+00 9.382066005516232e+03 + 91880 1.046456369649532e+00 -6.014665267085565e+00 -5.999080695837783e+00 3.633901326500908e+00 4.723390346310278e+00 9.214230545791019e+03 + 91900 1.003776303236456e+00 -5.965143480697046e+00 -5.986415647417244e+00 3.913922335079033e+00 4.791774261914493e+00 9.175380504169860e+03 + 91920 1.064365487704923e+00 -6.069948955234690e+00 -5.975454615829983e+00 3.360725095415205e+00 4.903326215228793e+00 9.141856980291406e+03 + 91940 1.020622467044614e+00 -6.022539869167445e+00 -5.972929856418884e+00 3.634157531301558e+00 4.919025901628455e+00 9.134132134932875e+03 + 91960 1.002008659821900e+00 -6.009604760262583e+00 -5.969346953543777e+00 3.688955577157066e+00 4.920122133211905e+00 9.123155455847071e+03 + 91980 9.620608637716673e-01 -5.962030452242761e+00 -5.972232974649442e+00 3.986652094855626e+00 4.928067632361225e+00 9.131979172402664e+03 + 92000 9.914508885804711e-01 -6.017435245408493e+00 -5.981991827347139e+00 3.578992770346881e+00 4.782514361706397e+00 9.161851054016628e+03 + 92020 1.031219940656133e+00 -6.085829395199574e+00 -6.033983065883395e+00 3.190367268346120e+00 4.488076914473152e+00 9.321673188200464e+03 + 92040 9.470023919509970e-01 -5.972753671237058e+00 -5.997485987713207e+00 3.858853465576396e+00 4.716836677056742e+00 9.209348324127055e+03 + 92060 9.901459853025222e-01 -6.048000802730856e+00 -5.981190643469706e+00 3.422826614678641e+00 4.806460887994896e+00 9.159381719379762e+03 + 92080 9.892625123402107e-01 -6.055392400985992e+00 -5.973320323005632e+00 3.367959388874767e+00 4.839229961251017e+00 9.135339614918730e+03 + 92100 9.942251885664569e-01 -6.070677519711635e+00 -6.001276655692319e+00 3.293982321284305e+00 4.692492822232216e+00 9.220983811836993e+03 + 92120 9.796059744273041e-01 -6.055755330437749e+00 -6.004633721839086e+00 3.391641265565771e+00 4.685189453182660e+00 9.231274349706462e+03 + 92140 9.685389496695308e-01 -6.044966066203763e+00 -5.994043456214458e+00 3.478417308377974e+00 4.770822815184996e+00 9.198773874562114e+03 + 92160 9.971058381255139e-01 -6.091809112638843e+00 -6.016945108530072e+00 3.178159259498971e+00 4.608039956258724e+00 9.269161814159248e+03 + 92180 9.102040642184176e-01 -5.965636140109127e+00 -6.050264327981040e+00 3.846624573986456e+00 4.360676423056182e+00 9.372010871053008e+03 + 92200 9.730694102239341e-01 -6.059255562482457e+00 -5.990610316435148e+00 3.360945076094699e+00 4.755116701715846e+00 9.188251090837746e+03 + 92220 9.609250597398966e-01 -6.035963045762831e+00 -5.979068352225161e+00 3.503246585878892e+00 4.829944720597560e+00 9.152908732737411e+03 + 92240 9.813965926657627e-01 -6.054134460459643e+00 -5.972166447653731e+00 3.342777759032568e+00 4.813450773073109e+00 9.131791451236755e+03 + 92260 9.280162330166271e-01 -5.957532816981169e+00 -5.953826002984674e+00 3.902383816210753e+00 4.923668915806235e+00 9.075828653247287e+03 + 92280 9.276172502440352e-01 -5.929887980095666e+00 -6.022015056763373e+00 4.082572940004829e+00 4.553565009159814e+00 9.284731896026764e+03 + 92300 9.532012165194542e-01 -5.936769699618371e+00 -5.998184009909230e+00 4.023056060451045e+00 4.670405586927133e+00 9.211477219230410e+03 + 92320 1.035297502321760e+00 -6.023670599102213e+00 -5.968854561391465e+00 3.523865146010526e+00 4.838627317300062e+00 9.121696063774549e+03 + 92340 9.856225451581494e-01 -5.917368365205769e+00 -5.987591351253808e+00 4.095005020139521e+00 4.691773767279712e+00 9.178990063114532e+03 + 92360 9.691883179731632e-01 -5.864828783200910e+00 -5.959137490817533e+00 4.406758809293646e+00 4.865223615933657e+00 9.092026176295782e+03 + 92380 1.057793465691297e+00 -5.969967109448820e+00 -6.006931047649975e+00 3.813145727914197e+00 4.600893074612214e+00 9.238305700574771e+03 + 92400 1.062288448715253e+00 -5.956778217032518e+00 -6.043859746744644e+00 3.904384651686155e+00 4.404349032255956e+00 9.352174319457506e+03 + 92420 1.074105156625377e+00 -5.962983204051115e+00 -5.996901182428162e+00 3.864130784450694e+00 4.669368503819502e+00 9.207538184806213e+03 + 92440 1.084904983887666e+00 -5.975856102539982e+00 -6.020229734883625e+00 3.751885715027536e+00 4.497085451312927e+00 9.279260459996854e+03 + 92460 1.034021344767965e+00 -5.903174899802647e+00 -6.049696432717321e+00 4.175661950376023e+00 4.334312634246023e+00 9.370238141193653e+03 + 92480 1.067401439056052e+00 -5.963642759268620e+00 -6.078606051808658e+00 3.876557776984852e+00 4.216420760707932e+00 9.459920775778599e+03 + 92500 1.023907973367928e+00 -5.920663506537450e+00 -6.067634871328995e+00 4.142090295535436e+00 4.298157975157189e+00 9.425835203450679e+03 + 92520 1.036924266254340e+00 -5.970059120876485e+00 -6.038171330775089e+00 3.802624853796866e+00 4.411514004228666e+00 9.334610240732705e+03 + 92540 1.007045049981141e+00 -5.960328298647221e+00 -6.011890966317067e+00 3.845408823536443e+00 4.549328006479155e+00 9.253567831747245e+03 + 92560 9.838734240716901e-01 -5.961448090100680e+00 -6.009349373720204e+00 3.854907023388519e+00 4.579850440145528e+00 9.245751494776272e+03 + 92580 9.896419899321607e-01 -6.001569749707246e+00 -5.979484809670014e+00 3.668201920259528e+00 4.795017063586745e+00 9.154171920371640e+03 + 92600 1.004953484233613e+00 -6.049931156844298e+00 -6.035085567842809e+00 3.407124136140154e+00 4.492369805534183e+00 9.325083308415107e+03 + 92620 1.006391128945778e+00 -6.072982017498060e+00 -6.011929041190021e+00 3.302594879288017e+00 4.653170517166328e+00 9.253736328540872e+03 + 92640 9.789972764932645e-01 -6.047957336862297e+00 -6.032114929293050e+00 3.414582345778536e+00 4.505551901645800e+00 9.315923290693889e+03 + 92660 9.461626952171051e-01 -6.009811360169687e+00 -5.986296767545719e+00 3.653738205978938e+00 4.788762635697214e+00 9.175037327993236e+03 + 92680 9.446613473371800e-01 -6.010331109198454e+00 -5.972037738558966e+00 3.650516188170057e+00 4.870402648261949e+00 9.131395204911447e+03 + 92700 9.823425347821416e-01 -6.063107602293886e+00 -5.992104752822645e+00 3.331030040657935e+00 4.738739389977246e+00 9.192829059814656e+03 + 92720 9.602452118350174e-01 -6.025867822711992e+00 -5.994702749447457e+00 3.540540591297925e+00 4.719495264762381e+00 9.200796138729072e+03 + 92740 1.004653529516145e+00 -6.083319586523846e+00 -5.987313702650987e+00 3.215602691843601e+00 4.766883333904076e+00 9.178157071553222e+03 + 92760 1.001404297490927e+00 -6.068820810355640e+00 -5.991717531857198e+00 3.366944765417203e+00 4.809683722249048e+00 9.191632911101067e+03 + 92780 9.854829547446791e-01 -6.036219387797411e+00 -5.977417204510067e+00 3.530851334411929e+00 4.868502570456318e+00 9.147851885449112e+03 + 92800 9.803022170092226e-01 -6.017489782344901e+00 -5.983101038282072e+00 3.630600932105565e+00 4.828066422155274e+00 9.165231746551121e+03 + 92820 9.187937000228594e-01 -5.913335123656370e+00 -5.987638666854830e+00 4.214431597518744e+00 4.787769154037034e+00 9.179125958015618e+03 + 92840 1.033554831101026e+00 -6.068014248616664e+00 -6.013870602471871e+00 3.340711654570892e+00 4.651612849436454e+00 9.259661903948772e+03 + 92860 1.012463189341645e+00 -6.021264061468067e+00 -6.045012652053485e+00 3.611974694134386e+00 4.475606611910396e+00 9.355735463173278e+03 + 92880 1.004581296136471e+00 -5.996420075218349e+00 -6.025471997185194e+00 3.714439346099119e+00 4.547618714395096e+00 9.295417032892747e+03 + 92900 9.857759685137046e-01 -5.958355182615852e+00 -6.007690993371544e+00 3.985792778795400e+00 4.702498918744176e+00 9.240692014260994e+03 + 92920 1.028490960699423e+00 -6.010366106247150e+00 -6.035132698076771e+00 3.667103915665133e+00 4.524890312761752e+00 9.325213936434031e+03 + 92940 1.008777562154422e+00 -5.972312690938340e+00 -6.041380854379961e+00 3.887137668210854e+00 4.490537585465317e+00 9.344525328648004e+03 + 92960 9.645013787449147e-01 -5.901485973172925e+00 -6.057494986382956e+00 4.188991752329789e+00 4.293163856161018e+00 9.394393394723327e+03 + 92980 1.017737129263546e+00 -5.976809937320182e+00 -5.990106953089164e+00 3.850448897997735e+00 4.774095375745697e+00 9.186710367695368e+03 + 93000 1.060557420600062e+00 -6.039003252470741e+00 -5.965990396013435e+00 3.504455698721114e+00 4.923706819201985e+00 9.112931808621568e+03 + 93020 1.008544236252714e+00 -5.961418514771606e+00 -5.965642033655620e+00 3.882597631934705e+00 4.858345532915264e+00 9.111842481642607e+03 + 93040 9.889182144054177e-01 -5.933186804756262e+00 -5.969071457597715e+00 4.052111079942732e+00 4.846055850195028e+00 9.122339723130011e+03 + 93060 9.874320732284468e-01 -5.930984139632502e+00 -6.016297112883140e+00 4.029786398054670e+00 4.539906103509568e+00 9.267144882185665e+03 + 93080 1.010553254956684e+00 -5.967405115991503e+00 -6.008184730274350e+00 3.861365986358572e+00 4.627203130521546e+00 9.242181388737819e+03 + 93100 9.949077152686254e-01 -5.950695818262894e+00 -6.000764218335084e+00 4.003529954183826e+00 4.716029452909440e+00 9.219387102489603e+03 + 93120 9.806806702284475e-01 -5.937266367213281e+00 -6.014194539276016e+00 4.048052758725163e+00 4.606319290144788e+00 9.260685179103317e+03 + 93140 1.085502879589544e+00 -6.104242871097636e+00 -5.984350706046457e+00 3.115851637767196e+00 4.804291002743647e+00 9.169097938548062e+03 + 93160 9.364837461390464e-01 -5.899020269933563e+00 -6.045497340631674e+00 4.187820284196234e+00 4.346726276994248e+00 9.357245069991197e+03 + 93180 1.006060642316559e+00 -6.019687445639095e+00 -6.004186869886926e+00 3.571344804286159e+00 4.660351508961458e+00 9.229913357892499e+03 + 93200 1.042261952283367e+00 -6.092914355581375e+00 -5.953310930736250e+00 3.237812462605878e+00 5.039436931626764e+00 9.074282106460301e+03 + 93220 1.010187627501127e+00 -6.064732524429517e+00 -5.974343292551766e+00 3.349294254578739e+00 4.868323211709212e+00 9.138464660046033e+03 + 93240 9.392010788669113e-01 -5.977105221764491e+00 -6.004591798316635e+00 3.825233456104951e+00 4.667401280008569e+00 9.231150324293574e+03 + 93260 9.880598977792002e-01 -6.062370786700685e+00 -6.000804069337345e+00 3.331134065731672e+00 4.684659684250685e+00 9.219519721955521e+03 + 93280 1.002683785064957e+00 -6.095715971502671e+00 -5.977673831980426e+00 3.175351514162174e+00 4.853167746260960e+00 9.148664366211286e+03 + 93300 9.815373579779166e-01 -6.073400532892467e+00 -6.000841468632671e+00 3.268373140636519e+00 4.685018516095178e+00 9.219655981412256e+03 + 93320 8.967628851499602e-01 -5.953934275475033e+00 -6.065844436522685e+00 3.963517493467271e+00 4.320912030690204e+00 9.420282818370406e+03 + 93340 9.650180367388053e-01 -6.059272703553784e+00 -6.036237890524257e+00 3.382277637554544e+00 4.514547098595887e+00 9.328639852471500e+03 + 93360 9.133997723522039e-01 -5.984956820553462e+00 -5.988804431726927e+00 3.804813142490417e+00 4.782719563716476e+00 9.182711311763796e+03 + 93380 9.672006771156521e-01 -6.060785326890991e+00 -5.933937686714906e+00 3.412879207130940e+00 5.141257986630896e+00 9.015365199943333e+03 + 93400 9.573483861332684e-01 -6.031713644240075e+00 -5.952259374441527e+00 3.599280777037767e+00 5.055519489729541e+00 9.071066947218089e+03 + 93420 9.499737207554377e-01 -5.997131071455014e+00 -6.015658916148940e+00 3.673980439165735e+00 4.567590687758512e+00 9.265166972664352e+03 + 93440 9.764756422570998e-01 -6.007307395956436e+00 -6.009324617091266e+00 3.612238898664493e+00 4.600655702744334e+00 9.245692799792647e+03 + 93460 1.008345926130646e+00 -6.019633373060527e+00 -5.985669771897202e+00 3.594215903322761e+00 4.789240157052868e+00 9.173104844678172e+03 + 93480 1.016067136227089e+00 -5.996182907934360e+00 -5.983540850052537e+00 3.744190434331495e+00 4.816783087041053e+00 9.166564274083956e+03 + 93500 9.639178344841115e-01 -5.884671582674844e+00 -6.032183454472926e+00 4.282753629477626e+00 4.435717634224658e+00 9.316077537595034e+03 + 93520 1.021339919419579e+00 -5.938087428679887e+00 -5.982737938406218e+00 4.045016750230607e+00 4.788626613737969e+00 9.164147677557643e+03 + 93540 1.017593858473686e+00 -5.907272136866909e+00 -6.068488318229424e+00 4.157490325339080e+00 4.231762063832078e+00 9.428470705432443e+03 + 93560 1.111032182066220e+00 -6.031543101164891e+00 -6.024818480530904e+00 3.543548589356551e+00 4.582162401668587e+00 9.293387268730783e+03 + 93580 1.102723318277440e+00 -6.015145159211359e+00 -5.977036746210840e+00 3.615359789113062e+00 4.834184193819898e+00 9.146710876775605e+03 + 93600 9.785106251226479e-01 -5.832026394304383e+00 -6.029574733162384e+00 4.604330222744467e+00 4.469977090515186e+00 9.308045623371896e+03 + 93620 1.062984092690238e+00 -5.964161719894604e+00 -5.982365150770706e+00 3.924900586355180e+00 4.820373669292780e+00 9.162983848112208e+03 + 93640 1.034313750645376e+00 -5.932503837522007e+00 -6.030733424128543e+00 4.028725575413942e+00 4.464676088139815e+00 9.311628708554819e+03 + 93660 1.044351244001436e+00 -5.962528526770371e+00 -6.015857109202439e+00 3.877600882722589e+00 4.571379909826196e+00 9.265786385459918e+03 + 93680 1.004465231840153e+00 -5.920592027122138e+00 -6.063092552582151e+00 4.083742355781609e+00 4.265482286705173e+00 9.411728894233258e+03 + 93700 1.030319899136181e+00 -5.978023774666565e+00 -6.029318553072333e+00 3.770949173198617e+00 4.476406617751391e+00 9.307275569122856e+03 + 93720 9.788290854771141e-01 -5.922266435427655e+00 -6.037064040407643e+00 4.063991507060271e+00 4.404805894393228e+00 9.331181651633300e+03 + 93740 9.915383753129791e-01 -5.961158374336235e+00 -6.014568272938178e+00 3.935249936125309e+00 4.628562033197857e+00 9.261813793929745e+03 + 93760 1.011449278162475e+00 -6.007006427059477e+00 -6.001390035132625e+00 3.675189039265247e+00 4.707439230843077e+00 9.221240408761621e+03 + 93780 1.014790404783228e+00 -6.023971860774200e+00 -6.028350490761887e+00 3.552629684671025e+00 4.527486913690927e+00 9.304268717897232e+03 + 93800 1.046614046781856e+00 -6.081679149296868e+00 -6.001319474200984e+00 3.206909262096045e+00 4.668346952116141e+00 9.221091027981227e+03 + 93820 1.046023004379359e+00 -6.087299208035068e+00 -5.997389816169339e+00 3.206453289014628e+00 4.722726930541066e+00 9.209042370149880e+03 + 93840 9.772373250310857e-01 -5.990134985587213e+00 -6.030548076353883e+00 3.788309160689592e+00 4.556250939601790e+00 9.311067232641157e+03 + 93860 9.809324447601825e-01 -5.999660836190475e+00 -6.019477668181596e+00 3.676042421305477e+00 4.562251105367620e+00 9.276963773550537e+03 + 93880 9.853275113382277e-01 -6.008927126538873e+00 -5.994575274057046e+00 3.661236347140911e+00 4.743646905033554e+00 9.200406204128070e+03 + 93900 1.012100023492402e+00 -6.049522687916141e+00 -5.978525321410533e+00 3.417051231619836e+00 4.824729096901996e+00 9.151239810160350e+03 + 93920 9.764252869264854e-01 -5.995041333094542e+00 -6.008734208729933e+00 3.715957551656625e+00 4.637330940792553e+00 9.243866746492851e+03 + 93940 1.011385456122951e+00 -6.046491112548694e+00 -5.966629320718687e+00 3.411348163774456e+00 4.869926931034702e+00 9.114885620366760e+03 + 93960 1.004416562619594e+00 -6.032641163506442e+00 -5.943489795657912e+00 3.510647631426788e+00 5.022568581742636e+00 9.044364212980436e+03 + 93980 1.001429908145562e+00 -6.019868053518668e+00 -5.999754152813995e+00 3.568171557313691e+00 4.683668687775998e+00 9.216272971675413e+03 + 94000 9.728678188962449e-01 -5.966881359812236e+00 -6.028114008809513e+00 3.874348986519525e+00 4.522741640255353e+00 9.303556615469761e+03 + 94020 9.918112137080495e-01 -5.985866641874364e+00 -6.014201277273963e+00 3.752615030827087e+00 4.589913169591934e+00 9.260701724888344e+03 + 94040 9.896254362014468e-01 -5.974041342177318e+00 -6.054984098271758e+00 3.798945171760830e+00 4.334159340415536e+00 9.386610836310836e+03 + 94060 1.022763837253207e+00 -6.015961929024996e+00 -6.014485352515462e+00 3.618301860534385e+00 4.626780591351610e+00 9.261571871083170e+03 + 94080 9.515572412162119e-01 -5.901723297763431e+00 -6.058047238173947e+00 4.225339544013002e+00 4.327703287124225e+00 9.396110948344436e+03 + 94100 1.072019058640124e+00 -6.071585055608249e+00 -6.049114608462965e+00 3.260636070689591e+00 4.389664855488272e+00 9.368466866203395e+03 + 94120 1.001397925424088e+00 -5.959418943801853e+00 -6.031495701013929e+00 3.909373197605045e+00 4.495497303851170e+00 9.313985093982144e+03 + 94140 9.788474840834627e-01 -5.919482205330343e+00 -6.004742104303174e+00 4.064075543588864e+00 4.574500009760141e+00 9.231619009202115e+03 + 94160 1.038202240263828e+00 -5.996728530117174e+00 -6.002940464626946e+00 3.703944492213195e+00 4.668274602964324e+00 9.226068644177172e+03 + 94180 1.011872704362228e+00 -5.944855544627819e+00 -6.013472657295749e+00 3.949340509722868e+00 4.555330430319744e+00 9.258470361489417e+03 + 94200 1.001791239388623e+00 -5.917284993207785e+00 -6.049218403057685e+00 4.078172612568047e+00 4.320590556580732e+00 9.368724141612915e+03 + 94220 1.043178995812027e+00 -5.966398986393271e+00 -5.999258776818891e+00 3.865035012354586e+00 4.676349010694541e+00 9.214783871604774e+03 + 94240 1.086759865886004e+00 -6.020117286902556e+00 -5.987968004398911e+00 3.592256566682601e+00 4.776862721903917e+00 9.180132575569392e+03 + 94260 1.037409286681439e+00 -5.938214465042046e+00 -6.027811291774354e+00 4.017338596589564e+00 4.502859752428530e+00 9.302609591450613e+03 + 94280 1.006244579173458e+00 -5.890132426275022e+00 -6.011595900499476e+00 4.311320644292730e+00 4.613858578884028e+00 9.252657117102544e+03 + 94300 1.029522848004898e+00 -5.927171002268328e+00 -6.032980102930266e+00 3.985071509163999e+00 4.377499279257742e+00 9.318558373777050e+03 + 94320 1.023544182138387e+00 -5.924717343666801e+00 -6.041894128843563e+00 4.068948520460923e+00 4.396101286927052e+00 9.346077228467935e+03 + 94340 1.078854758397992e+00 -6.019726137322836e+00 -5.995568721008902e+00 3.582891502528263e+00 4.721607125350964e+00 9.203453336809507e+03 + 94360 9.985238791073830e-01 -5.921506085190272e+00 -6.018089360145955e+00 4.132191033707734e+00 4.577594922698708e+00 9.272643823945167e+03 + 94380 9.425208596321482e-01 -5.863109071815867e+00 -6.065508489315847e+00 4.412485586938010e+00 4.250276810444491e+00 9.419229674071976e+03 + 94400 1.001743486341775e+00 -5.979264956257833e+00 -6.066205505899714e+00 3.768599920585533e+00 4.269373830535280e+00 9.421412841717603e+03 + 94420 1.031921166007715e+00 -6.058579054819293e+00 -6.000515174456029e+00 3.379120276154951e+00 4.712532062557259e+00 9.218636872328767e+03 + 94440 9.905093473382831e-01 -6.028945090391421e+00 -6.008677717469581e+00 3.568926018220313e+00 4.685304409903338e+00 9.243685438939354e+03 + 94460 9.294371777339961e-01 -5.965491218618029e+00 -6.020200501926816e+00 3.871230725834621e+00 4.557081554841334e+00 9.279169227645616e+03 + 94480 9.472144937987326e-01 -6.014230898766314e+00 -6.017870722272560e+00 3.594423942914407e+00 4.573523513080674e+00 9.272016302957793e+03 + 94500 9.748169850549315e-01 -6.072608100625501e+00 -5.991962442897343e+00 3.329591679334465e+00 4.792671525884749e+00 9.192403459146100e+03 + 94520 9.620379858628038e-01 -6.064340346875277e+00 -6.002818994525913e+00 3.334288804140582e+00 4.687553929729137e+00 9.225716808472484e+03 + 94540 1.035317349450902e+00 -6.178428628079831e+00 -5.975123952930877e+00 2.733328801400037e+00 4.900735707402129e+00 9.140854361170754e+03 + 94560 9.172924431458014e-01 -6.005983284445609e+00 -5.990613066904086e+00 3.626390335741632e+00 4.714648503398537e+00 9.188265732898246e+03 + 94580 9.274456650364127e-01 -6.018389185879064e+00 -5.977254456028000e+00 3.586214308287167e+00 4.822416292670848e+00 9.147345331496610e+03 + 94600 9.961123587525400e-01 -6.110148313454233e+00 -5.955230930849533e+00 3.121352688651858e+00 5.010912272955527e+00 9.080135087760751e+03 + 94620 9.538771160146013e-01 -6.029410723299195e+00 -5.985345966632163e+00 3.564575435066573e+00 4.817602086847725e+00 9.172117615145145e+03 + 94640 9.779537144416087e-01 -6.037970838132346e+00 -5.973346809956356e+00 3.512280225691014e+00 4.883361396013592e+00 9.135417457612421e+03 + 94660 9.635853560374307e-01 -5.982475012442880e+00 -6.011765630285341e+00 3.810955236276111e+00 4.642763975916235e+00 9.253218133551483e+03 + 94680 9.693421350540625e-01 -5.952025182920138e+00 -6.012626229819808e+00 3.954493622178805e+00 4.606513032899207e+00 9.255859295174210e+03 + 94700 9.561330647882303e-01 -5.889270784246356e+00 -6.053006098260979e+00 4.282355296158923e+00 4.342161785129004e+00 9.380470447549880e+03 + 94720 1.032725461190824e+00 -5.960776704406916e+00 -6.028078712527181e+00 3.917070561430096e+00 4.530612015851439e+00 9.303450285368790e+03 + 94740 1.072160929804251e+00 -5.987009713109087e+00 -6.024909791452223e+00 3.771250297655964e+00 4.553622182791509e+00 9.293679652671661e+03 + 94760 9.917107198905897e-01 -5.851161038555856e+00 -6.049583291631942e+00 4.505859042114409e+00 4.366487759207095e+00 9.369906207074793e+03 + 94780 1.147636839547698e+00 -6.077004237170510e+00 -6.014495382618255e+00 3.259364836612838e+00 4.618300352665862e+00 9.261627269304825e+03 + 94800 1.036387654386307e+00 -5.914877233977522e+00 -6.041469325940072e+00 4.125969127330555e+00 4.399057745218666e+00 9.344798622833641e+03 + 94820 1.052439569556804e+00 -5.946641727485394e+00 -6.024919258550104e+00 4.000988497730486e+00 4.551506800948141e+00 9.293698459604888e+03 + 94840 1.036874989651425e+00 -5.933914666385353e+00 -6.037101302460485e+00 4.041603634476481e+00 4.449090002052750e+00 9.331270320626674e+03 + 94860 1.067849834427632e+00 -5.995137510371341e+00 -6.018259092406034e+00 3.701959516609794e+00 4.569191814513334e+00 9.273176708559560e+03 + 94880 1.043929809828987e+00 -5.975735665044814e+00 -6.025796091708722e+00 3.809822479867700e+00 4.522367763137550e+00 9.296410581336824e+03 + 94900 1.033030929757794e+00 -5.979223642442232e+00 -6.009979234668259e+00 3.778318536020670e+00 4.601715166046302e+00 9.247718979320069e+03 + 94920 9.788936375586953e-01 -5.918835795865558e+00 -6.008334636619677e+00 4.117883322104674e+00 4.603967128593677e+00 9.242651123768170e+03 + 94940 1.034157341192838e+00 -6.022820593995579e+00 -5.978191823333714e+00 3.609235022929854e+00 4.865500330350224e+00 9.150207111642912e+03 + 94960 9.868032327305877e-01 -5.973066782528702e+00 -5.991717766445730e+00 3.828640713537504e+00 4.721543877655498e+00 9.191637587111290e+03 + 94980 9.950923982998496e-01 -6.001538518876497e+00 -6.024172847422872e+00 3.687179719443317e+00 4.557209902279013e+00 9.291413758839033e+03 + 95000 1.039191951800178e+00 -6.084505603083398e+00 -5.994709922818307e+00 3.183733715922463e+00 4.699354407841225e+00 9.200838071726108e+03 + 95020 9.863695273168366e-01 -6.024459764177291e+00 -5.945118670618758e+00 3.544889954988026e+00 5.000478792195667e+00 9.049342013819447e+03 + 95040 9.790148159532771e-01 -6.027516899664356e+00 -5.961072045012925e+00 3.536891845309338e+00 4.918428483025884e+00 9.097928440629410e+03 + 95060 1.004889348844278e+00 -6.074347669288915e+00 -5.984493475811060e+00 3.320268573842368e+00 4.836225257683715e+00 9.169500873203346e+03 + 95080 9.061042588698062e-01 -5.933258231058335e+00 -6.053076455004544e+00 4.046985597534553e+00 4.358970813825192e+00 9.380688149533045e+03 + 95100 1.037378973413142e+00 -6.131613280288347e+00 -6.010288374640857e+00 2.977350191323140e+00 4.674016574519499e+00 9.248677494698519e+03 + 95120 1.005298875399645e+00 -6.087745632956051e+00 -5.992495358826131e+00 3.250941696619717e+00 4.797883510606003e+00 9.194033717980783e+03 + 95140 9.653588661105028e-01 -6.032255676168957e+00 -5.954921848063564e+00 3.550252288356263e+00 4.994315096708654e+00 9.079186131461272e+03 + 95160 9.522317342758853e-01 -6.009511608566700e+00 -6.011325426688872e+00 3.630727993247413e+00 4.620312768902450e+00 9.251831405178051e+03 + 95180 1.045199464152538e+00 -6.138327558149761e+00 -5.995999677295883e+00 2.897477077823053e+00 4.714745794854407e+00 9.204775997384124e+03 + 95200 9.551809145867169e-01 -5.989093750676144e+00 -5.993229404865721e+00 3.700100177312520e+00 4.676352610965552e+00 9.196258813482867e+03 + 95220 9.410490095545608e-01 -5.940425664606339e+00 -5.995090126259727e+00 4.072279176510538e+00 4.758387378398682e+00 9.201969992232518e+03 + 95240 9.682540518272019e-01 -5.941867037146875e+00 -6.049832054294100e+00 3.975683917925386e+00 4.355732081933615e+00 9.370653768522094e+03 + 95260 1.068435663851634e+00 -6.043754687462051e+00 -6.001264701639419e+00 3.434470092944612e+00 4.678454166842219e+00 9.220926054986119e+03 + 95280 9.786386851305784e-01 -5.868767366149328e+00 -6.066063838431948e+00 4.368876502160305e+00 4.235969626783089e+00 9.420936242365991e+03 + 95300 1.041037302887100e+00 -5.927539251995333e+00 -6.006392803145202e+00 4.039219185155776e+00 4.586429891905631e+00 9.236686875606947e+03 + 95320 1.118274628454253e+00 -6.016295467428438e+00 -5.996689324288653e+00 3.585641680956781e+00 4.698223188906268e+00 9.206917133084335e+03 + 95340 1.124925968656815e+00 -6.011180936624387e+00 -6.027984223892525e+00 3.649927073081644e+00 4.553439997287698e+00 9.303163287906407e+03 + 95360 9.720434139152967e-01 -5.781372901193830e+00 -6.126898294354184e+00 4.787077720048082e+00 3.803017442639544e+00 9.610700490974899e+03 + 95380 1.049329956308732e+00 -5.902293258533724e+00 -6.060882456581475e+00 4.157635002630157e+00 4.246991285840891e+00 9.404891574693022e+03 + 95400 1.077875246277396e+00 -5.958437235491025e+00 -6.008668215506995e+00 3.962424870596290e+00 4.673990810125548e+00 9.243669454586088e+03 + 95420 1.077299865771007e+00 -5.979820739514517e+00 -6.000853401772934e+00 3.799761961586347e+00 4.678989160104552e+00 9.219670038185126e+03 + 95440 1.024540620446329e+00 -5.928331256459124e+00 -6.019028265014335e+00 4.112793930292657e+00 4.591997671851923e+00 9.275551668494671e+03 + 95460 1.072162651932844e+00 -6.032905155369787e+00 -6.005618601667746e+00 3.477579635757002e+00 4.634263249694659e+00 9.234321802145927e+03 + 95480 9.806286197902236e-01 -5.931598482288509e+00 -6.013367629821518e+00 4.081817325969507e+00 4.612286227100284e+00 9.258130196598277e+03 + 95500 9.780690369306915e-01 -5.959892800965847e+00 -6.059878489868689e+00 3.922981752452380e+00 4.348848454036903e+00 9.401770360463137e+03 + 95520 9.655444264650130e-01 -5.968886499450543e+00 -6.000062521579284e+00 3.887621736290389e+00 4.708604192753319e+00 9.217245271376476e+03 + 95540 1.014113167698260e+00 -6.061376583478824e+00 -5.970835304362754e+00 3.411263440270162e+00 4.931165476172297e+00 9.127740253120219e+03 + 95560 9.292153531448616e-01 -5.949142238855487e+00 -6.040167308204596e+00 3.964134965918020e+00 4.441454931631478e+00 9.340741883655019e+03 + 95580 9.818243273530214e-01 -6.035564715343057e+00 -6.003631154887648e+00 3.556738689396817e+00 4.740106135234286e+00 9.228181918064023e+03 + 95600 9.627800891964690e-01 -6.011327826427614e+00 -6.005866053169965e+00 3.644628913891322e+00 4.675991261143426e+00 9.235067609965072e+03 + 95620 9.427010220003110e-01 -5.982197290405413e+00 -6.015830512539170e+00 3.771583957287501e+00 4.578456791071169e+00 9.265705770397371e+03 + 95640 9.837814802647419e-01 -6.040199131622237e+00 -6.002689305453639e+00 3.478452185282878e+00 4.693839411769805e+00 9.225315495372311e+03 + 95660 1.016578520366641e+00 -6.084842951086799e+00 -5.999832159632719e+00 3.238128575479884e+00 4.726273695386669e+00 9.216527488210011e+03 + 95680 9.762944923418237e-01 -6.019817344320343e+00 -5.990313580554903e+00 3.626914361133613e+00 4.796329538367454e+00 9.187334712890060e+03 + 95700 1.012177672306904e+00 -6.065734852790095e+00 -5.974083915110039e+00 3.385240366684378e+00 4.911514233780034e+00 9.137664393981908e+03 + 95720 9.425560359464528e-01 -5.952731647587663e+00 -6.026221154341216e+00 3.982791564305317e+00 4.560803444062004e+00 9.297720652206268e+03 + 95740 9.979401853299903e-01 -6.023905230125738e+00 -6.004404451474244e+00 3.601484047074389e+00 4.713460535827011e+00 9.230582429014166e+03 + 95760 9.634143189579236e-01 -5.961337417072567e+00 -6.036739083676999e+00 3.938341836829431e+00 4.505373798816589e+00 9.330190359369341e+03 + 95780 1.008713068530625e+00 -6.016996510765132e+00 -6.032736948262961e+00 3.626133884309534e+00 4.535749856372168e+00 9.317836082540394e+03 + 95800 1.008128839453141e+00 -6.007070877083601e+00 -5.999691450972664e+00 3.655731583702186e+00 4.698105390393683e+00 9.216126699368675e+03 + 95820 1.047121236382580e+00 -6.053996196693452e+00 -5.995751728255827e+00 3.407515859804413e+00 4.741964610875622e+00 9.204018055290413e+03 + 95840 1.021668218090751e+00 -6.003596510350438e+00 -6.010831539535216e+00 3.666614850562204e+00 4.625070193366062e+00 9.250356542787096e+03 + 95860 9.857684318457050e-01 -5.937464815740464e+00 -6.033366553680223e+00 4.079233758092036e+00 4.528551138095958e+00 9.319760690190664e+03 + 95880 1.055620730429537e+00 -6.024201849827714e+00 -6.041191329584417e+00 3.612207349385387e+00 4.514651127508900e+00 9.343925660345541e+03 + 95900 1.030114000574381e+00 -5.965097063103602e+00 -6.032494583619762e+00 3.898440542777303e+00 4.511433550240923e+00 9.317077082142714e+03 + 95920 1.008959998299059e+00 -5.903538653123416e+00 -6.001139575016886e+00 4.265103460602575e+00 4.704663863396421e+00 9.220553962293936e+03 + 95940 1.004743523254807e+00 -5.859652052594926e+00 -6.022808881706647e+00 4.484913196547193e+00 4.548041435349991e+00 9.287172927004727e+03 + 95960 1.109113814757201e+00 -5.971975813589350e+00 -6.019762642003853e+00 3.861959446638521e+00 4.587560082894651e+00 9.277786156496422e+03 + 95980 1.081809098172053e+00 -5.894121166286050e+00 -5.991155903634440e+00 4.311652379939859e+00 4.754463902008330e+00 9.189887147745361e+03 + 96000 1.078221948216349e+00 -5.862935280021825e+00 -5.996995129601537e+00 4.454945251415989e+00 4.685152849434607e+00 9.207802917640440e+03 + 96020 1.081558862217963e+00 -5.851515743419196e+00 -6.006215295944041e+00 4.496055155182158e+00 4.607746384906114e+00 9.236091251744854e+03 + 96040 1.127401528394117e+00 -5.913445651057885e+00 -6.014190640726810e+00 4.147258014350912e+00 4.568764693435181e+00 9.260659512598462e+03 + 96060 1.055552559828204e+00 -5.812002525491085e+00 -6.064880627073704e+00 4.671521957703023e+00 4.219456765655880e+00 9.417279930679077e+03 + 96080 1.130972306601564e+00 -5.945616944664599e+00 -6.000552345122031e+00 3.980416286614548e+00 4.664968715962229e+00 9.218761958735084e+03 + 96100 1.111369182245397e+00 -5.953103123369417e+00 -6.024395165472960e+00 3.924786258293592e+00 4.515416320127192e+00 9.292024362689079e+03 + 96120 9.893885185556904e-01 -5.815520610055524e+00 -6.042106530355704e+00 4.658733868547314e+00 4.357642450125836e+00 9.346729852098082e+03 + 96140 1.051862670634859e+00 -5.956117731704899e+00 -5.984065128270547e+00 3.905400625793188e+00 4.744922349867595e+00 9.168195215259211e+03 + 96160 9.283417119796045e-01 -5.811985173621415e+00 -6.043834808258894e+00 4.691986564880271e+00 4.360670084176862e+00 9.352068254927903e+03 + 96180 1.011294722281205e+00 -5.963869350915296e+00 -5.998688155480031e+00 3.919537752669737e+00 4.719602788666434e+00 9.213024955758414e+03 + 96200 9.703717620576815e-01 -5.926332332660968e+00 -6.031045785173411e+00 4.080969921371239e+00 4.479689072690385e+00 9.312588550650691e+03 + 96220 1.096409739541277e+00 -6.132196394081985e+00 -5.976031664987493e+00 3.019054808267827e+00 4.915776849142121e+00 9.143586934124427e+03 + 96240 1.016072688623592e+00 -6.029608472800293e+00 -6.008054794185927e+00 3.510769294602604e+00 4.634533852627277e+00 9.241808268025679e+03 + 96260 9.924840700020298e-01 -6.009041925827677e+00 -6.016677877062117e+00 3.583424052180489e+00 4.539577238532702e+00 9.268331975725370e+03 + 96280 9.854048387739255e-01 -6.010461964639181e+00 -6.014308052653753e+00 3.612770708668936e+00 4.590685876109067e+00 9.261042655056835e+03 + 96300 9.935288714490729e-01 -6.032829058820046e+00 -6.033625313102533e+00 3.451186155617016e+00 4.446613940307025e+00 9.320581943287052e+03 + 96320 9.727182388539276e-01 -6.010512266359568e+00 -6.017634812663887e+00 3.566413728502408e+00 4.525514965412525e+00 9.271296543129289e+03 + 96340 9.754224458997623e-01 -6.022893267152931e+00 -5.961991447253067e+00 3.616714909074529e+00 4.966422583465717e+00 9.100724955625717e+03 + 96360 9.889236694517072e-01 -6.046747594583627e+00 -5.940097363868242e+00 3.491684953807612e+00 5.104087082645215e+00 9.034056801828579e+03 + 96380 9.449063748631743e-01 -5.981338173071087e+00 -5.996427031719628e+00 3.793477111783008e+00 4.706834550429761e+00 9.206057707116455e+03 + 96400 9.739044768494231e-01 -6.019338370139322e+00 -5.968221769211402e+00 3.629262923866241e+00 4.922782356662792e+00 9.119738979966711e+03 + 96420 1.054933501009952e+00 -6.130452753808795e+00 -5.964301627751158e+00 2.978088551992480e+00 4.932154029619086e+00 9.107797616472986e+03 + 96440 1.017794073321612e+00 -6.062517610428988e+00 -5.961314866214977e+00 3.426776756622980e+00 5.007898574973888e+00 9.098691779731053e+03 + 96460 1.020797792913761e+00 -6.049434416534933e+00 -5.986890382699793e+00 3.468155064811289e+00 4.827292585750622e+00 9.176840220674856e+03 + 96480 1.001257765520505e+00 -5.995769825578696e+00 -6.030511492070175e+00 3.774912354743128e+00 4.575420329493543e+00 9.310921851294508e+03 + 96500 1.038434276025251e+00 -6.022367719352156e+00 -6.003529013883140e+00 3.590299657939265e+00 4.698474420022603e+00 9.227884671547487e+03 + 96520 1.025504808314756e+00 -5.969783753447263e+00 -5.973076464228741e+00 3.921966100608751e+00 4.903058845756163e+00 9.134574378493195e+03 + 96540 1.072677968577667e+00 -6.000831304256262e+00 -5.998558585937626e+00 3.710702815315893e+00 4.723753115603522e+00 9.212618602103285e+03 + 96560 1.095302786296916e+00 -5.994270455011972e+00 -5.987816838719159e+00 3.720835585826972e+00 4.757893249274200e+00 9.179688470991663e+03 + 96580 1.028358007370847e+00 -5.863480039842547e+00 -5.982980577682591e+00 4.424124301747113e+00 4.737933720821117e+00 9.164858998354910e+03 + 96600 9.832347912817819e-01 -5.772420010579295e+00 -6.051448693028664e+00 4.891625063070288e+00 4.289399188896954e+00 9.375618255688505e+03 + 96620 1.107453068532686e+00 -5.938322601650185e+00 -6.025725456581798e+00 4.055310023663555e+00 4.553429305098145e+00 9.296195269618338e+03 + 96640 1.112449606997082e+00 -5.939676455317764e+00 -6.035724930240765e+00 4.002986913323099e+00 4.451461706861769e+00 9.327031873052316e+03 + 96660 1.059897499091523e+00 -5.866489016852025e+00 -6.066235285695525e+00 4.372734960255665e+00 4.225760973921086e+00 9.421475014513901e+03 + 96680 1.120820480877841e+00 -5.974265044685089e+00 -6.001014714226912e+00 3.805947726624349e+00 4.652346984617225e+00 9.220161407145495e+03 + 96700 1.089454279627355e+00 -5.956148261151749e+00 -6.023309216789858e+00 3.882040091616202e+00 4.496391491217883e+00 9.288722134482839e+03 + 96720 1.069906729559895e+00 -5.965580098406054e+00 -6.005436717012084e+00 3.870426030712698e+00 4.641563158885078e+00 9.233737807438496e+03 + 96740 1.043508990247900e+00 -5.969424900092102e+00 -6.004017278529783e+00 3.884667918125683e+00 4.686033127983260e+00 9.229381427574233e+03 + 96760 1.011166632010569e+00 -5.964075263382282e+00 -6.009592820816739e+00 3.926722554276737e+00 4.665353695668840e+00 9.246525310595189e+03 + 96780 9.586079153103102e-01 -5.919719719475662e+00 -6.028594408180943e+00 4.151017650994562e+00 4.525842340145214e+00 9.305024289706682e+03 + 96800 1.040330631363890e+00 -6.062523332883125e+00 -5.985210514649765e+00 3.330101038906620e+00 4.774043205322528e+00 9.171722552264686e+03 + 96820 9.729421581900336e-01 -5.973832736935395e+00 -5.977264430677341e+00 3.834472823282517e+00 4.814767506763376e+00 9.147407358582348e+03 + 96840 9.396369078315503e-01 -5.929189973707880e+00 -6.011180833887651e+00 4.091853752154607e+00 4.621049544957756e+00 9.251404771070864e+03 + 96860 1.034843812281773e+00 -6.072618259731017e+00 -5.973592602503372e+00 3.336193266022911e+00 4.904813913994984e+00 9.136173734598786e+03 + 96880 9.824158884151885e-01 -5.997502573147915e+00 -5.976224287605893e+00 3.719725617280395e+00 4.841908825666730e+00 9.144231739903169e+03 + 96900 1.001156834173335e+00 -6.026033411458516e+00 -5.977253685496342e+00 3.631268040693720e+00 4.911368775806726e+00 9.147344090686816e+03 + 96920 1.007891931345409e+00 -6.034538358038922e+00 -5.998003397012369e+00 3.525233771653590e+00 4.735023171635013e+00 9.210918988877731e+03 + 96940 1.007098407954526e+00 -6.030943524984806e+00 -6.000617847623023e+00 3.527028981600580e+00 4.701163713895347e+00 9.218956593683050e+03 + 96960 9.612808908110361e-01 -5.959574551992004e+00 -6.068529014987766e+00 3.874793824714617e+00 4.249160437544299e+00 9.428598359808277e+03 + 96980 1.031954993589612e+00 -6.061832144342191e+00 -6.021467899171175e+00 3.388213007478790e+00 4.619990749597512e+00 9.283082166906346e+03 + 97000 1.036378726145275e+00 -6.066357424520712e+00 -6.015845743474706e+00 3.280751495493969e+00 4.570797384717513e+00 9.265774129637794e+03 + 97020 1.036029069822864e+00 -6.065230580902940e+00 -6.005779771987640e+00 3.335942593203881e+00 4.677318337978482e+00 9.234816597357743e+03 + 97040 9.404101531081076e-01 -5.924167157382690e+00 -6.019035687023232e+00 4.084470857802613e+00 4.539721079749104e+00 9.275590987945481e+03 + 97060 9.900406563156293e-01 -5.994442726360379e+00 -6.026985796925365e+00 3.746934623753522e+00 4.560067276545478e+00 9.300087571943115e+03 + 97080 9.742864723688642e-01 -5.968657448451583e+00 -6.023622690596067e+00 3.824926368290273e+00 4.509307442052915e+00 9.289714019549088e+03 + 97100 1.022132105445313e+00 -6.037219643008910e+00 -5.991226185174514e+00 3.478256712942751e+00 4.742358265292452e+00 9.190149498008097e+03 + 97120 9.812514404447160e-01 -5.973659582967019e+00 -6.045485675862284e+00 3.822958043417093e+00 4.410521502960531e+00 9.357201081528792e+03 + 97140 1.038060528129217e+00 -6.056559679630459e+00 -5.983167029282018e+00 3.355925713035497e+00 4.777357668812177e+00 9.165466984157683e+03 + 97160 9.486416620830903e-01 -5.920284819171554e+00 -6.009603644766901e+00 4.141146017503357e+00 4.628263498891285e+00 9.246548226387198e+03 + 97180 9.918684509515497e-01 -5.978028571109824e+00 -6.016035058391356e+00 3.829568921679187e+00 4.611329790223725e+00 9.266344306936999e+03 + 97200 1.015582348394983e+00 -6.007479928152397e+00 -6.001617982446771e+00 3.624432541685052e+00 4.658092741059921e+00 9.222026375495512e+03 + 97220 9.759961853380476e-01 -5.943682930474230e+00 -6.003948633124224e+00 3.910373598727062e+00 4.564318608023446e+00 9.229179659776757e+03 + 97240 1.028089000485561e+00 -6.014236979297579e+00 -5.977667904246795e+00 3.620672743978099e+00 4.830658031965771e+00 9.148600125899056e+03 + 97260 1.002093439087336e+00 -5.965351848760878e+00 -6.044985620611719e+00 3.832152038637391e+00 4.374882597383493e+00 9.355642721938633e+03 + 97280 1.055828253952275e+00 -6.036427711806555e+00 -5.979352309325706e+00 3.483094812137192e+00 4.810830605572217e+00 9.153790033075797e+03 + 97300 1.023354125046505e+00 -5.980251610050233e+00 -6.001405852215700e+00 3.815915380293631e+00 4.694444448171122e+00 9.221370340040978e+03 + 97320 1.005950163656505e+00 -5.948411879680398e+00 -5.976277172322472e+00 3.976986312121758e+00 4.816979489630867e+00 9.144372528188876e+03 + 97340 9.954983593950929e-01 -5.927436962315335e+00 -5.993310719773792e+00 4.072075267137376e+00 4.693817957879900e+00 9.196497594856270e+03 + 97360 9.663805927182868e-01 -5.878260411315221e+00 -6.020621712488904e+00 4.298792096950613e+00 4.481331475271172e+00 9.280445677996198e+03 + 97380 1.039135458487506e+00 -5.981257475991699e+00 -5.988154942498057e+00 3.801553965073036e+00 4.761947645014036e+00 9.180735612853032e+03 + 97400 1.016387446067543e+00 -5.944997099156629e+00 -6.027993304463122e+00 3.937383321130092e+00 4.460806266638953e+00 9.303199044757770e+03 + 97420 1.025608874154870e+00 -5.958827589938553e+00 -6.000925159988955e+00 3.941048678233263e+00 4.699317916425940e+00 9.219903931442599e+03 + 97440 1.009805214369022e+00 -5.940459251688383e+00 -6.046987179062455e+00 3.978504472440545e+00 4.366804628315138e+00 9.361850269449236e+03 + 97460 1.023363340709830e+00 -5.971588209489104e+00 -6.033979060337178e+00 3.827578268323989e+00 4.469320347801381e+00 9.321641447354290e+03 + 97480 1.041720873108652e+00 -6.016967350926728e+00 -6.001489243547574e+00 3.564215237478492e+00 4.653092925278965e+00 9.221623165121218e+03 + 97500 1.013422150903371e+00 -5.999322544671985e+00 -5.963788065538863e+00 3.695291314310045e+00 4.899335792435305e+00 9.106214044651455e+03 + 97520 9.342291070871626e-01 -5.905889380027936e+00 -6.003907733382897e+00 4.188296303695276e+00 4.625459750439929e+00 9.229033847413806e+03 + 97540 1.016855663514936e+00 -6.053414009425374e+00 -5.952100957309972e+00 3.427174480985132e+00 5.008929704375916e+00 9.070600243675637e+03 + 97560 1.024767104611865e+00 -6.090417561292053e+00 -5.970984307193294e+00 3.169353827671107e+00 4.855158054942524e+00 9.128204245286728e+03 + 97580 1.000260272975639e+00 -6.078688688849730e+00 -5.964563834877937e+00 3.279613063122573e+00 4.934935635392685e+00 9.108585177015744e+03 + 97600 9.304725346149983e-01 -5.997545415305487e+00 -5.953875276335522e+00 3.752465992388611e+00 5.003226688286320e+00 9.076004979783796e+03 + 97620 9.169796653952378e-01 -5.993365187425329e+00 -6.000094026160820e+00 3.725504903658204e+00 4.686866870354588e+00 9.217333161902599e+03 + 97640 1.025821932406502e+00 -6.167258060775763e+00 -5.986142985693388e+00 2.773195305405374e+00 4.813186093995661e+00 9.174584387795068e+03 + 97660 9.453599854273633e-01 -6.057219609415547e+00 -6.021970078219187e+00 3.354485856202717e+00 4.556894119179539e+00 9.284632954096322e+03 + 97680 9.670182214891927e-01 -6.094867799649061e+00 -6.002921010888423e+00 3.195201786644938e+00 4.723174476428099e+00 9.226033745756424e+03 + 97700 9.573803154574950e-01 -6.080853997330145e+00 -5.978699733257242e+00 3.321351592138779e+00 4.907937184766661e+00 9.151790597057106e+03 + 97720 8.997219277259076e-01 -5.989816807575658e+00 -6.007511956577875e+00 3.766115152088827e+00 4.664506868202642e+00 9.240117374272781e+03 + 97740 9.092542263205626e-01 -5.988786692745581e+00 -6.046519713980961e+00 3.776807724202730e+00 4.445295782113011e+00 9.360397999471821e+03 + 97760 9.943108871719148e-01 -6.086909512643415e+00 -5.985170219394599e+00 3.205511061924518e+00 4.789713827863970e+00 9.171596922350278e+03 + 97780 9.741282935597191e-01 -6.016969029707860e+00 -6.000588341043747e+00 3.598455722395959e+00 4.692516171608668e+00 9.218831083666322e+03 + 97800 1.004833120805028e+00 -6.011898567644868e+00 -5.974151326902432e+00 3.631839843337761e+00 4.848590341047456e+00 9.137863259055479e+03 + 97820 1.056163825903645e+00 -6.034557638207314e+00 -6.006733258593833e+00 3.505821816262699e+00 4.665593709812137e+00 9.237737140057623e+03 + 97840 1.054733105380857e+00 -5.990187367172522e+00 -5.995084792977376e+00 3.769629717524261e+00 4.741507940678599e+00 9.201953993149038e+03 + 97860 1.013268255992315e+00 -5.900822688481121e+00 -6.032659106531721e+00 4.136661301354537e+00 4.379636187288235e+00 9.317580801327644e+03 + 97880 1.032726419221796e+00 -5.913086618844668e+00 -6.029078998494480e+00 4.232733031329884e+00 4.566686837617925e+00 9.306529560024870e+03 + 97900 1.080020602257417e+00 -5.977082692947832e+00 -6.018776446877732e+00 3.819858778503597e+00 4.580446791350542e+00 9.274788662196926e+03 + 97920 1.024354983874592e+00 -5.896051419985939e+00 -5.977951404107788e+00 4.250556435546633e+00 4.780274052737396e+00 9.149450678008354e+03 + 97940 1.011721189972254e+00 -5.882865579186493e+00 -5.982734179778094e+00 4.310288203705797e+00 4.736827244492830e+00 9.164068891005500e+03 + 97960 1.032120649162857e+00 -5.921344383637122e+00 -5.998492506956529e+00 4.100382539905482e+00 4.657386077171947e+00 9.212397663085736e+03 + 97980 1.058130449404922e+00 -5.971364654642876e+00 -6.018950878014544e+00 3.833026023014181e+00 4.559778564469797e+00 9.275328397215368e+03 + 98000 1.086241297103687e+00 -6.031482933205994e+00 -5.999808588500024e+00 3.517361493379726e+00 4.699240482270408e+00 9.216461113288373e+03 + 98020 1.035048605066627e+00 -5.978908522875317e+00 -6.014422500389925e+00 3.863711148803680e+00 4.659784394144546e+00 9.261390084200510e+03 + 98040 1.000747049994686e+00 -5.957052386290765e+00 -6.024724609371027e+00 3.950686418407725e+00 4.562102041238183e+00 9.293106318749455e+03 + 98060 1.009892016307315e+00 -6.001715208576660e+00 -6.019720403776851e+00 3.655617388726736e+00 4.552228771592284e+00 9.277684230724462e+03 + 98080 9.892178546983000e-01 -5.999912412806907e+00 -6.002815504241202e+00 3.700196268793599e+00 4.683526268525935e+00 9.225693041294609e+03 + 98100 9.777042262457334e-01 -6.006902449413445e+00 -5.985819898570648e+00 3.676751994124003e+00 4.797811263577547e+00 9.173568583566599e+03 + 98120 1.021917104519383e+00 -6.091735907327273e+00 -5.956314341909967e+00 3.241063898824307e+00 5.018675483870000e+00 9.083427662058895e+03 + 98140 9.654364768872122e-01 -6.021881467193346e+00 -5.994918198476523e+00 3.595878542952968e+00 4.750705804477319e+00 9.201457204795652e+03 + 98160 9.383185861281028e-01 -5.990029823192927e+00 -6.020782224132443e+00 3.715459478720731e+00 4.538874433607367e+00 9.280973891482708e+03 + 98180 9.558743401397163e-01 -6.020008030079822e+00 -6.043439778345689e+00 3.581375353388922e+00 4.446826628794990e+00 9.350890199371897e+03 + 98200 9.166454988889265e-01 -5.963588976646081e+00 -6.020444834499007e+00 3.876206197532130e+00 4.549731063325059e+00 9.279921554442937e+03 + 98220 9.941934652382416e-01 -6.076732609604775e+00 -5.974982428886404e+00 3.325448278890172e+00 4.909713562364635e+00 9.140404200020299e+03 + 98240 9.560982347201821e-01 -6.013896624158678e+00 -6.030708542546655e+00 3.578665664197303e+00 4.482129027177570e+00 9.311556441575831e+03 + 98260 9.180798101032112e-01 -5.949788755356236e+00 -6.047451210296520e+00 3.922043447545532e+00 4.361250518062365e+00 9.363306365094897e+03 + 98280 1.011677565853188e+00 -6.080323865163775e+00 -5.995348934304009e+00 3.253705757133587e+00 4.741644959958416e+00 9.202777199217830e+03 + 98300 1.015279689861760e+00 -6.077377682161002e+00 -5.964768830542696e+00 3.296863792085935e+00 4.943481244241713e+00 9.109212408891106e+03 + 98320 9.347986949512265e-01 -5.949678684120199e+00 -5.967414472218403e+00 3.960870383425382e+00 4.859028743561161e+00 9.117279062497752e+03 + 98340 9.803084712194277e-01 -6.006612706188418e+00 -6.004864566937673e+00 3.677180226884425e+00 4.687218312985874e+00 9.231980410676390e+03 + 98360 1.016486201970173e+00 -6.052934301087515e+00 -5.976857341623308e+00 3.411511700474517e+00 4.848357374589422e+00 9.146139826526825e+03 + 98380 1.018034409026686e+00 -6.048116394973777e+00 -5.946472563686092e+00 3.439041285706209e+00 5.022695894292150e+00 9.053462244238783e+03 + 98400 1.006579204881909e+00 -6.022043226259854e+00 -5.983437765972235e+00 3.599368008405599e+00 4.821046535552773e+00 9.166270582270599e+03 + 98420 1.001960338544776e+00 -6.007841311456181e+00 -5.996798358973331e+00 3.655626031230433e+00 4.719036373278331e+00 9.207224264470082e+03 + 98440 1.023173175049365e+00 -6.033903117643932e+00 -6.011214177019870e+00 3.475899691742694e+00 4.606183099908279e+00 9.251521320908010e+03 + 98460 1.032064887024564e+00 -6.044188034693698e+00 -6.016021791008096e+00 3.467691467747521e+00 4.629426397702371e+00 9.266310583296148e+03 + 98480 9.838649092937497e-01 -5.971110518674235e+00 -6.046238118586615e+00 3.870776927680893e+00 4.439382623025491e+00 9.359538476989213e+03 + 98500 1.062977796188171e+00 -6.088573549397275e+00 -5.988330403100729e+00 3.242808862960995e+00 4.818420521572520e+00 9.181280154654934e+03 + 98520 9.688415151358940e-01 -5.950206158801372e+00 -6.023893124155618e+00 3.930494192415849e+00 4.507372234330735e+00 9.290521037461427e+03 + 98540 9.731938621291863e-01 -5.956984171497677e+00 -5.988019825056993e+00 3.968891148847415e+00 4.790679623357958e+00 9.180315016524335e+03 + 98560 1.025279243158647e+00 -6.033344135429354e+00 -6.022340076777047e+00 3.536399404618086e+00 4.599586412272204e+00 9.285751820189274e+03 + 98580 9.889443800818339e-01 -5.979764063390302e+00 -6.035225380937530e+00 3.801660915840567e+00 4.483193447873230e+00 9.325506084268114e+03 + 98600 1.109117721324901e+00 -6.160022430573275e+00 -5.937477564817668e+00 2.828365429752642e+00 5.106252487628016e+00 9.026125675403640e+03 + 98620 1.011477476738488e+00 -6.018533954274060e+00 -6.020683476060125e+00 3.554482887767085e+00 4.542140001034085e+00 9.280644339621796e+03 + 98640 9.713926328542308e-01 -5.964035622650325e+00 -6.001767505006172e+00 3.888333264851116e+00 4.671670957373919e+00 9.222464502890740e+03 + 98660 1.009774659165376e+00 -6.025222776966777e+00 -5.989725659947472e+00 3.571317836634397e+00 4.775147775720351e+00 9.185540797784803e+03 + 98680 1.026127126548551e+00 -6.055558882801074e+00 -6.051617505956560e+00 3.429673698996872e+00 4.452305694764171e+00 9.376207206549667e+03 + 98700 1.008889353842767e+00 -6.043077543416180e+00 -6.006291711750006e+00 3.419456152875053e+00 4.630686090891275e+00 9.236406216502153e+03 + 98720 9.569590893644143e-01 -5.983805666743640e+00 -6.023593683663442e+00 3.857299957048384e+00 4.628831006719163e+00 9.289622756118846e+03 + 98740 9.764601836113681e-01 -6.035633968324732e+00 -6.021698634575593e+00 3.450611467495096e+00 4.530630310368585e+00 9.283796444207037e+03 + 98760 9.304880850891646e-01 -5.992819039784822e+00 -6.026123770010968e+00 3.705741104608923e+00 4.514500189760044e+00 9.297413515795582e+03 + 98780 9.914145825476826e-01 -6.106875530365093e+00 -5.985359078872954e+00 3.069677051601227e+00 4.767443320679183e+00 9.172168613566726e+03 + 98800 9.398019906108321e-01 -6.050047591734813e+00 -5.964545779867475e+00 3.448618534775630e+00 4.939583169880512e+00 9.108526863033694e+03 + 98820 9.399723877516333e-01 -6.063114740046742e+00 -5.994635390498774e+00 3.427658349292085e+00 4.820877371541607e+00 9.200577284727487e+03 + 98840 1.011397549967698e+00 -6.178412494135690e+00 -5.972177331274970e+00 2.773839762780090e+00 4.958073982714651e+00 9.131853960781244e+03 + 98860 9.552732162407155e-01 -6.099642036485355e+00 -6.013198940132094e+00 3.218143102352305e+00 4.714512738638656e+00 9.257620856952559e+03 + 98880 9.834698449498362e-01 -6.141370783699291e+00 -5.977877053390548e+00 2.977619637214818e+00 4.916425937220612e+00 9.149275766112363e+03 + 98900 9.359947995476768e-01 -6.063524623163916e+00 -6.004728172962272e+00 3.364913748162338e+00 4.702532063941439e+00 9.231563398098811e+03 + 98920 9.533481654789383e-01 -6.073496107505829e+00 -6.008180482671216e+00 3.351318393725427e+00 4.726370819086051e+00 9.242181391787384e+03 + 98940 9.693821374461716e-01 -6.073120674234650e+00 -6.028141928414927e+00 3.308705656860747e+00 4.566980575796016e+00 9.303632682308049e+03 + 98960 9.333691044770499e-01 -5.989156438382777e+00 -6.013948475502481e+00 3.781007062376775e+00 4.638647348680085e+00 9.259920622347607e+03 + 98980 9.546576982955435e-01 -5.983648159822955e+00 -6.019341289240465e+00 3.780862410193710e+00 4.575906937584441e+00 9.276501147878176e+03 + 99000 1.018439629242023e+00 -6.041480580309550e+00 -5.983521991842025e+00 3.466799179263270e+00 4.799606363306378e+00 9.166525518643779e+03 + 99020 9.863488100968217e-01 -5.956794143984110e+00 -6.015554692586876e+00 3.969559274498756e+00 4.632147111256169e+00 9.264845420579577e+03 + 99040 9.516775855365567e-01 -5.876726472218452e+00 -6.022043583847335e+00 4.322361634513771e+00 4.487928291790380e+00 9.284829973038497e+03 + 99060 1.033613013563563e+00 -5.975425594641683e+00 -6.013299576338454e+00 3.798924569872923e+00 4.581446305990334e+00 9.257895731208357e+03 + 99080 1.049984179185843e+00 -5.983628870446120e+00 -5.991126311728619e+00 3.810386635555044e+00 4.767335167485644e+00 9.189836143322880e+03 + 99100 1.042008482197529e+00 -5.963073166024972e+00 -6.038403955745011e+00 3.847092187449437e+00 4.414531135474938e+00 9.335322343273265e+03 + 99120 1.075674875929916e+00 -6.010775418098726e+00 -6.008433732229475e+00 3.634650941539628e+00 4.648097264175583e+00 9.242980697833813e+03 + 99140 9.646655243879321e-01 -5.850270166653583e+00 -6.008140637907883e+00 4.484103444506678e+00 4.577586768188021e+00 9.242056467078224e+03 + 99160 1.072342082965299e+00 -6.017103570000937e+00 -5.950896853096074e+00 3.647177721345496e+00 5.027346935269547e+00 9.066913947087336e+03 + 99180 1.037737491505471e+00 -5.973173706418223e+00 -5.998958406089165e+00 3.896621267197399e+00 4.748561531517471e+00 9.213805266073405e+03 + 99200 1.027433843080161e+00 -5.969437554815718e+00 -5.993596830141030e+00 3.862249135718316e+00 4.723522838164599e+00 9.197380704990412e+03 + 99220 9.846170484161580e-01 -5.920742453461324e+00 -5.970730720650545e+00 4.180111931310949e+00 4.893071565451097e+00 9.127364727531796e+03 + 99240 9.895934382872804e-01 -5.939548397415880e+00 -5.978416166312192e+00 4.014227851670335e+00 4.791043107899914e+00 9.150856411870680e+03 + 99260 1.041022485854301e+00 -6.028422371271283e+00 -5.953881005370402e+00 3.602207361892394e+00 5.030235420134344e+00 9.075991580577260e+03 + 99280 9.792232012530421e-01 -5.950859183757307e+00 -5.983256548624174e+00 4.026216267507900e+00 4.840185584966342e+00 9.165715806762391e+03 + 99300 9.821865589147838e-01 -5.970589095443183e+00 -5.985675029354387e+00 3.889853776697830e+00 4.803228009638968e+00 9.173135459615794e+03 + 99320 9.689637035943613e-01 -5.967254762436105e+00 -6.043444744256401e+00 3.854955984489136e+00 4.417461318515414e+00 9.350901723513800e+03 + 99340 1.012457554894574e+00 -6.053410241202108e+00 -6.037709930756126e+00 3.390319752935341e+00 4.480473365131355e+00 9.333191332352697e+03 + 99360 9.848320747893614e-01 -6.043981835951585e+00 -6.030821240369866e+00 3.428810506439684e+00 4.504380682865497e+00 9.311902090165106e+03 + 99380 9.289315747228593e-01 -6.001801786827794e+00 -5.948792679237060e+00 3.726045038570493e+00 5.030431537489372e+00 9.060497751970619e+03 + 99400 9.832856144495494e-01 -6.125391013778289e+00 -5.928341386363908e+00 3.111268351044263e+00 5.242757804988935e+00 8.998366115150327e+03 + 99420 9.229085108338503e-01 -6.080169105957109e+00 -5.969378208910173e+00 3.275363215748874e+00 4.911541691428289e+00 9.123285065993838e+03 + 99440 9.676131680357130e-01 -6.183709504425654e+00 -5.957893914227633e+00 2.718186345827899e+00 5.014854409594583e+00 9.088252429156388e+03 + 99460 8.470242386520049e-01 -6.032024597081533e+00 -5.982730988547097e+00 3.519099763431526e+00 4.802151291797532e+00 9.164128284797434e+03 + 99480 9.375728200385016e-01 -6.179385710587024e+00 -5.942653052889482e+00 2.752111802565556e+00 5.111467357325223e+00 9.041839345920534e+03 + 99500 9.230289450261584e-01 -6.157856929154686e+00 -5.963149460779490e+00 2.850340934820891e+00 4.968381349114622e+00 9.104263603668136e+03 + 99520 8.644103461956270e-01 -6.060802825647688e+00 -5.977187989515356e+00 3.406241104045022e+00 4.886370432470947e+00 9.147152237251901e+03 + 99540 1.023420106567433e+00 -6.278289065314835e+00 -5.919143092517972e+00 2.242627034187699e+00 5.304898787646961e+00 8.970509526300491e+03 + 99560 9.435993826731099e-01 -6.135537611855659e+00 -5.958474095705769e+00 3.016770390492985e+00 5.033496500716224e+00 9.090004595709341e+03 + 99580 9.065196310521605e-01 -6.056443740449343e+00 -5.952394114295688e+00 3.412801416916210e+00 5.010270471918105e+00 9.071474449723557e+03 + 99600 9.002181599584330e-01 -6.022093884574368e+00 -5.970686056404075e+00 3.535107738969026e+00 4.830299443658547e+00 9.127282500799365e+03 + 99620 9.491513108036221e-01 -6.071305638715417e+00 -5.984253689658770e+00 3.284188227190291e+00 4.784053989919138e+00 9.168786508465229e+03 + 99640 1.037491260037351e+00 -6.182416157464623e+00 -5.967934144753496e+00 2.701140930929527e+00 4.932729838901016e+00 9.118910969250155e+03 + 99660 9.883595317496171e-01 -6.093586996888038e+00 -5.989435944826707e+00 3.202196000247847e+00 4.800247458507229e+00 9.184657783372773e+03 + 99680 9.763674946575179e-01 -6.060717661582409e+00 -5.975190304962585e+00 3.386631472979597e+00 4.877742790006284e+00 9.141046845082537e+03 + 99700 9.179109881816536e-01 -5.957781746552671e+00 -5.959524114113943e+00 4.018369948034296e+00 5.008365003866964e+00 9.093194510515801e+03 + 99720 9.188808026055826e-01 -5.939502891706711e+00 -5.990994473617492e+00 4.014224504053912e+00 4.718551872425655e+00 9.189415838096182e+03 + 99740 1.024683736701595e+00 -6.071821253232845e+00 -5.967791395113461e+00 3.293303719638292e+00 4.890659263528312e+00 9.118451332961002e+03 + 99760 9.819498392664172e-01 -5.982504899077096e+00 -6.035991311279027e+00 3.756642031608098e+00 4.449514775749070e+00 9.327877236368000e+03 + 99780 9.997821708094877e-01 -5.986194105923122e+00 -6.011097188303387e+00 3.731617048518482e+00 4.588619695751459e+00 9.251162800153634e+03 + 99800 1.024245285853939e+00 -6.003374220481877e+00 -5.978043535905368e+00 3.694055390855346e+00 4.839508101604430e+00 9.149783710889216e+03 + 99820 1.071870604990866e+00 -6.056917850869024e+00 -5.974441675459739e+00 3.437525864194666e+00 4.911116826541671e+00 9.138735318413077e+03 + 99840 1.080585962653374e+00 -6.055020344708323e+00 -5.969847357662749e+00 3.407112492240884e+00 4.896188964333717e+00 9.124730211591563e+03 + 99860 9.948774790052167e-01 -5.916724131353305e+00 -6.000332859748397e+00 4.116423026973928e+00 4.636328770120412e+00 9.218067217463598e+03 + 99880 9.809240766969762e-01 -5.887570293302043e+00 -6.009656143719923e+00 4.322533898716941e+00 4.621498052893187e+00 9.246699510198116e+03 + 99900 1.047960298437937e+00 -5.979785348453349e+00 -6.004660433010118e+00 3.784556771529712e+00 4.641720186597854e+00 9.231360849205670e+03 + 99920 9.491438232482513e-01 -5.827580878121333e+00 -6.062551541954725e+00 4.607477634025312e+00 4.258239720701268e+00 9.410043469910279e+03 + 99940 1.035680305374418e+00 -5.954232437019303e+00 -5.974280499630940e+00 3.964436979538566e+00 4.849317901594889e+00 9.138264798347460e+03 + 99960 1.079823252796725e+00 -6.021992986434533e+00 -5.973915986796042e+00 3.623728368154147e+00 4.899793939970010e+00 9.137107593449897e+03 + 99980 1.034413408897987e+00 -5.963172288366274e+00 -6.022476536129452e+00 3.858483228189965e+00 4.517949060231115e+00 9.286160394321949e+03 + 100000 1.041207184364491e+00 -5.988325168921166e+00 -6.001447071139587e+00 3.718904485222335e+00 4.643556492076350e+00 9.221507329915157e+03 + 100020 1.022348321133684e+00 -5.984531686920860e+00 -5.964030148315187e+00 3.755977026048429e+00 4.873700033325055e+00 9.106952201848933e+03 + 100040 9.494709868764378e-01 -5.909385921835007e+00 -5.986199300672633e+00 4.156473336513010e+00 4.715399028395405e+00 9.174695908655187e+03 + 100060 9.552362754020651e-01 -5.954181179590964e+00 -5.952515552864179e+00 3.947265264491965e+00 4.956829550912066e+00 9.071837855241440e+03 + 100080 9.576640860223434e-01 -5.995450705437397e+00 -6.010303577597016e+00 3.691549961681881e+00 4.606262471266813e+00 9.248685237753740e+03 + 100100 9.546069367674995e-01 -6.025759841550142e+00 -6.019928069851500e+00 3.554146477063239e+00 4.587633412620598e+00 9.278323576733506e+03 + 100120 1.021162330940387e+00 -6.156097944634729e+00 -5.998904872956183e+00 2.861393704337067e+00 4.764020647464504e+00 9.213696645106451e+03 + 100140 9.127286409704853e-01 -6.019566623678919e+00 -6.007302767943694e+00 3.618584438286073e+00 4.689005395743280e+00 9.239477272204920e+03 + 100160 9.672505282522870e-01 -6.116300109043177e+00 -5.967011015517226e+00 3.077911087937123e+00 4.935152165375696e+00 9.116058469146552e+03 + 100180 9.767787122327640e-01 -6.137654833093974e+00 -5.980725346335312e+00 2.968148277011130e+00 4.869261674738956e+00 9.157998228646351e+03 + 100200 8.862431902802509e-01 -6.003634622454971e+00 -6.029366184915851e+00 3.676042558150514e+00 4.528287944553719e+00 9.307433878232479e+03 + 100220 9.310894656424905e-01 -6.064804108911623e+00 -5.999364237017378e+00 3.365109807351475e+00 4.740875678555678e+00 9.215098897185258e+03 + 100240 9.261790683031853e-01 -6.045323937586662e+00 -5.988180954322764e+00 3.473337347816106e+00 4.801461200565493e+00 9.180810741135667e+03 + 100260 1.035722596857402e+00 -6.190445102667603e+00 -5.951821251452474e+00 2.680982811306113e+00 5.051197891905018e+00 9.069741652847726e+03 + 100280 9.302069900803720e-01 -6.009329750935526e+00 -5.974446861998006e+00 3.624120415879041e+00 4.824423362267902e+00 9.138775984705879e+03 + 100300 1.003159853886130e+00 -6.089793841735156e+00 -5.959049992551279e+00 3.231347168248717e+00 4.982098582807811e+00 9.091737324833688e+03 + 100320 9.360791089747031e-01 -5.957474788065740e+00 -6.001127296159565e+00 3.944780537170216e+00 4.694121080491680e+00 9.220496522220108e+03 + 100340 9.713979019986416e-01 -5.978380220088479e+00 -5.980601351785847e+00 3.821300168544986e+00 4.808546086619677e+00 9.157595934443465e+03 + 100360 1.009346031850552e+00 -6.009535435875813e+00 -5.976044612365881e+00 3.630865973412589e+00 4.823175464694812e+00 9.143675327450466e+03 + 100380 1.020385120993425e+00 -6.005692622041028e+00 -6.010874602876418e+00 3.688950840733790e+00 4.659195104868040e+00 9.250447836091249e+03 + 100400 9.675196126101391e-01 -5.917010245237988e+00 -5.991122244942927e+00 4.131090023544649e+00 4.705527452444001e+00 9.189788495238974e+03 + 100420 1.012712470525639e+00 -5.978665649181520e+00 -5.969669550165827e+00 3.830097700768075e+00 4.881754693458001e+00 9.124136608938616e+03 + 100440 1.024555908066439e+00 -5.991253018589271e+00 -5.997777020949138e+00 3.734847294445896e+00 4.697385463309440e+00 9.210222505632204e+03 + 100460 1.001058985431365e+00 -5.953661443697609e+00 -6.030819610881124e+00 3.970294162174649e+00 4.527240026019125e+00 9.311904659785929e+03 + 100480 9.965409722110948e-01 -5.947567796381205e+00 -6.035831053839189e+00 3.953550390677042e+00 4.446729107658350e+00 9.327363046615499e+03 + 100500 1.019531831148716e+00 -5.985416760398266e+00 -6.006388806199202e+00 3.742488310296382e+00 4.622063577893808e+00 9.236678731158428e+03 + 100520 9.686265208747582e-01 -5.914349471576263e+00 -6.028177987660484e+00 4.099858645857575e+00 4.446237691596046e+00 9.303728860586480e+03 + 100540 9.991991037323487e-01 -5.964970291152945e+00 -6.021201151565627e+00 3.856796053500410e+00 4.533909751313263e+00 9.282230029971422e+03 + 100560 1.055770651779741e+00 -6.057562036625112e+00 -5.958893541889578e+00 3.394234321919237e+00 4.960804087590882e+00 9.091281564767047e+03 + 100580 9.528416349981925e-01 -5.913790603966494e+00 -6.007614071535003e+00 4.143374274662492e+00 4.604625404749434e+00 9.240432139431956e+03 + 100600 1.063340165556967e+00 -6.085911621436664e+00 -5.956312199020678e+00 3.244711718260656e+00 4.988891657219051e+00 9.083432957739478e+03 + 100620 9.556914152180930e-01 -5.935515979324164e+00 -6.023244936355621e+00 4.002096490616372e+00 4.498343243329523e+00 9.288548886130329e+03 + 100640 9.910977621910929e-01 -5.998300223472199e+00 -6.029185819067926e+00 3.706008276989412e+00 4.528658407548281e+00 9.306878835646454e+03 + 100660 1.046120672779060e+00 -6.094519698972517e+00 -6.004686425419096e+00 3.193147061385962e+00 4.708983619783861e+00 9.231473901550362e+03 + 100680 9.758419824082297e-01 -6.008239921372698e+00 -6.002782131093825e+00 3.682519223039108e+00 4.713858699410714e+00 9.225592398940364e+03 + 100700 9.627234239416229e-01 -6.009561925318659e+00 -5.999306308063094e+00 3.659575105290434e+00 4.718464446623530e+00 9.214915527475910e+03 + 100720 9.256857817885412e-01 -5.974661764186345e+00 -6.013904506427108e+00 3.849535889551638e+00 4.624197990810437e+00 9.259760809151632e+03 + 100740 9.662812947742361e-01 -6.054014563571669e+00 -6.025129737241236e+00 3.442482660353172e+00 4.608343803054947e+00 9.294351523207959e+03 + 100760 9.210246700371897e-01 -6.008571042252274e+00 -6.028135888635472e+00 3.652520125237358e+00 4.540175749654844e+00 9.303616602991498e+03 + 100780 9.404074580917622e-01 -6.058182843204968e+00 -5.995689157972770e+00 3.360432645908134e+00 4.719281057377955e+00 9.203784084772571e+03 + 100800 9.645549645652095e-01 -6.110416695600677e+00 -5.967628653146507e+00 3.159989029779607e+00 4.979900065929613e+00 9.117937227834778e+03 + 100820 9.402680513652617e-01 -6.088012683307513e+00 -6.000388938185334e+00 3.241624717279698e+00 4.744773821501985e+00 9.218253664613865e+03 + 100840 8.767945419562222e-01 -6.004105597471897e+00 -5.977960686518763e+00 3.616078749338293e+00 4.766206873943082e+00 9.149533296680347e+03 + 100860 9.254859406422815e-01 -6.078558879391219e+00 -5.959273242860528e+00 3.242923764837246e+00 4.927880349189070e+00 9.092459200831026e+03 + 100880 9.405244365861735e-01 -6.094992975314524e+00 -5.945252343660373e+00 3.168202857905694e+00 5.028036737151686e+00 9.049739707017350e+03 + 100900 9.578699414557837e-01 -6.102335614339848e+00 -5.946149244124996e+00 3.104210445287207e+00 5.001056752823571e+00 9.052460410268694e+03 + 100920 9.388507852816931e-01 -6.042303920617139e+00 -5.938851008647887e+00 3.501676949361337e+00 5.095719579175162e+00 9.030279500674193e+03 + 100940 9.409266990560816e-01 -5.999117434220943e+00 -5.982950585577962e+00 3.677899957775336e+00 4.770732504495076e+00 9.164793867840744e+03 + 100960 9.884077981781987e-01 -6.018809495624783e+00 -5.988334945373238e+00 3.616139390640699e+00 4.791128974106487e+00 9.181273704878469e+03 + 100980 1.017507092451332e+00 -6.016815298606163e+00 -6.002871316493534e+00 3.587602291816578e+00 4.667670794931551e+00 9.225880923203606e+03 + 101000 9.778716542663625e-01 -5.927013705404904e+00 -6.029675590679608e+00 4.084163639905897e+00 4.494663207783149e+00 9.308389589205621e+03 + 101020 9.972275875896273e-01 -5.932890122860426e+00 -6.072589091493946e+00 3.999031569122879e+00 4.196858472883683e+00 9.441208149905924e+03 + 101040 1.075577846317902e+00 -6.034746471689515e+00 -6.041623894025109e+00 3.480032845748368e+00 4.440541622419724e+00 9.345278580546701e+03 + 101060 1.050547986501148e+00 -5.991640786851642e+00 -6.024459374446158e+00 3.708082287878821e+00 4.519632879251092e+00 9.292305752050112e+03 + 101080 1.000229225500147e+00 -5.917583464997133e+00 -5.991043075197593e+00 4.247420104932469e+00 4.825603655323487e+00 9.189558201209102e+03 + 101100 9.556060059994539e-01 -5.854508362419913e+00 -6.012166862793714e+00 4.458813196840723e+00 4.553513690120274e+00 9.254392976090381e+03 + 101120 1.026480755099830e+00 -5.961283565508754e+00 -5.995604018342526e+00 3.896992766720401e+00 4.699919415475977e+00 9.203529334148372e+03 + 101140 1.040768731417746e+00 -5.987304336350205e+00 -5.993911527006718e+00 3.762114729176772e+00 4.724175217967630e+00 9.198364920270264e+03 + 101160 1.049215557843379e+00 -6.007923151618461e+00 -6.024375014171662e+00 3.645225445367191e+00 4.550756304669203e+00 9.292015490960233e+03 + 101180 1.032833808021148e+00 -5.996620294487396e+00 -6.024779789720190e+00 3.676553008750127e+00 4.514856829455621e+00 9.293291872071213e+03 + 101200 1.030105758376669e+00 -6.011669400018858e+00 -6.039363388250905e+00 3.633752103797697e+00 4.474728937738456e+00 9.338278033086610e+03 + 101220 1.055278779035816e+00 -6.074736193368164e+00 -6.001842904161145e+00 3.337778586345041e+00 4.756343133171793e+00 9.222716226152059e+03 + 101240 9.982509060564314e-01 -6.019309380211361e+00 -6.003508616852596e+00 3.604478963515815e+00 4.695209391882070e+00 9.227812453510120e+03 + 101260 9.734106892519498e-01 -6.013048833908670e+00 -6.000190152317533e+00 3.640144534120899e+00 4.713981073691754e+00 9.217632023031672e+03 + 101280 9.590710966190135e-01 -6.021688603862037e+00 -6.007842673228378e+00 3.565929805137581e+00 4.645435281486889e+00 9.241150871535910e+03 + 101300 9.282799370537971e-01 -6.002045596407217e+00 -6.032851704535552e+00 3.651840574922210e+00 4.474947134819484e+00 9.318161286717352e+03 + 101320 9.173710272043901e-01 -6.007157086449578e+00 -5.980661378748843e+00 3.628837570717960e+00 4.780980024533092e+00 9.157791736874748e+03 + 101340 9.675200451290068e-01 -6.099228631177536e+00 -5.969334201782591e+00 3.217204440286755e+00 4.963078354970516e+00 9.123115688489856e+03 + 101360 9.276416470822580e-01 -6.049073300039749e+00 -5.933241691003042e+00 3.465546163168426e+00 5.130669187140767e+00 9.013249017306065e+03 + 101380 9.359439221692375e-01 -6.061417613429819e+00 -5.977137590409339e+00 3.369426290902069e+00 4.853375225377079e+00 9.146974931764038e+03 + 101400 9.235031183164275e-01 -6.034209756143017e+00 -5.990200072155032e+00 3.531500928440607e+00 4.784211344376203e+00 9.186967271292586e+03 + 101420 9.378794844345663e-01 -6.039578097808431e+00 -5.982539667691618e+00 3.524357420544069e+00 4.851880912943340e+00 9.163531282919741e+03 + 101440 1.013998135393958e+00 -6.124771690625905e+00 -5.983772191770639e+00 3.013583663027610e+00 4.823224605056481e+00 9.167316665170300e+03 + 101460 1.009875826010160e+00 -6.075706356621081e+00 -5.974200954270001e+00 3.303369446460396e+00 4.886229174670552e+00 9.138039416765994e+03 + 101480 9.814330969212192e-01 -5.975091738248711e+00 -6.028677540779501e+00 3.806718271738408e+00 4.499020301230471e+00 9.305295467413340e+03 + 101500 1.028544188263586e+00 -5.980922410534715e+00 -6.033683827717725e+00 3.764505623880129e+00 4.461541401612363e+00 9.320748965093346e+03 + 101520 1.023590946061820e+00 -5.924741813342534e+00 -6.006172399573021e+00 4.108639359200025e+00 4.641052331722072e+00 9.235973376661836e+03 + 101540 1.023587068762781e+00 -5.897514494897142e+00 -5.964094830136259e+00 4.285002491042430e+00 4.902687902825845e+00 9.107122505774658e+03 + 101560 1.064153751624140e+00 -5.946076563874168e+00 -5.972927618156721e+00 3.953669939555938e+00 4.799487030678302e+00 9.134110294208376e+03 + 101580 1.044248030803778e+00 -5.911285131881916e+00 -6.000532815248845e+00 4.177438452247864e+00 4.664964443320589e+00 9.218662993828262e+03 + 101600 1.097385986535176e+00 -5.990930833488832e+00 -5.993126546171341e+00 3.724810843648297e+00 4.712202721639893e+00 9.195969411703642e+03 + 101620 1.052996237384245e+00 -5.933551586461709e+00 -6.038435182766503e+00 4.009945335524128e+00 4.407687494857929e+00 9.335404834808711e+03 + 101640 1.097157992515703e+00 -6.014218694096678e+00 -5.966705987869021e+00 3.660433033637044e+00 4.933258345363777e+00 9.115131161407762e+03 + 101660 1.006633849161655e+00 -5.900040718581222e+00 -5.996830927722108e+00 4.319879163088270e+00 4.764094803964841e+00 9.207295130670431e+03 + 101680 1.050736694199744e+00 -5.989788756733670e+00 -5.955231938725676e+00 3.766655080912535e+00 4.965085677564741e+00 9.080141386704230e+03 + 101700 1.036251115463038e+00 -5.994723545775885e+00 -5.994930009203591e+00 3.737736382509174e+00 4.736550837557171e+00 9.201467470123620e+03 + 101720 9.648444674129945e-01 -5.915385236515382e+00 -6.006613683567605e+00 4.187954469513887e+00 4.664106608983468e+00 9.237334820954780e+03 + 101740 1.059481571748788e+00 -6.080584499431502e+00 -5.954935027136213e+00 3.242579954578750e+00 4.964078668691299e+00 9.079226215403429e+03 + 101760 1.012258724398190e+00 -6.033527902123264e+00 -5.965547000861017e+00 3.541177297551902e+00 4.931534152610199e+00 9.111564368160298e+03 + 101780 9.957231965811424e-01 -6.027790159890378e+00 -6.004882011039633e+00 3.591005348017766e+00 4.722547483743316e+00 9.232044468075566e+03 + 101800 9.737138259185678e-01 -6.014803675328157e+00 -6.054814891406533e+00 3.608685853924567e+00 4.378935259486854e+00 9.386069692502624e+03 + 101820 1.040091966183514e+00 -6.132303217670631e+00 -5.985079307618285e+00 2.985298670621598e+00 4.830681144968617e+00 9.171314615723510e+03 + 101840 9.672189405814190e-01 -6.039921993898893e+00 -6.000055268136643e+00 3.493563543143074e+00 4.722484451825780e+00 9.217228101699657e+03 + 101860 9.006165840812461e-01 -5.952696444758821e+00 -6.037006371843027e+00 3.939994914164436e+00 4.455874265927877e+00 9.330994046283002e+03 + 101880 9.754586089618118e-01 -6.071026909320604e+00 -5.973512703243737e+00 3.305233226472873e+00 4.865174888040865e+00 9.135929330973004e+03 + 101900 9.430053054853322e-01 -6.024231957708286e+00 -5.994578612004271e+00 3.618267090647351e+00 4.788541190520226e+00 9.200414655786139e+03 + 101920 9.613526349351434e-01 -6.048681543839590e+00 -5.967945484144638e+00 3.468366215725578e+00 4.931965164358850e+00 9.118896978334493e+03 + 101940 9.452230110491117e-01 -6.015544042695625e+00 -5.995420083379454e+00 3.591610408453808e+00 4.707165297019902e+00 9.202987502726213e+03 + 101960 1.030347513780783e+00 -6.124845572565430e+00 -5.978275492450869e+00 3.023403684186217e+00 4.865031765850619e+00 9.150496951678913e+03 + 101980 9.778282438294913e-01 -6.020308058382945e+00 -6.010099215173690e+00 3.585971592753805e+00 4.644592350274728e+00 9.248081974288141e+03 + 102000 9.818956271789786e-01 -5.989172483123881e+00 -5.974870981308037e+00 3.757933194663202e+00 4.840054631240035e+00 9.140075451597018e+03 + 102020 1.035936468243275e+00 -6.015863931789585e+00 -6.006052016267946e+00 3.605751705207827e+00 4.662093242522101e+00 9.235626186439200e+03 + 102040 1.057089294233649e+00 -5.991150114559504e+00 -6.005859781530422e+00 3.781990793565551e+00 4.697525609504938e+00 9.235052220856733e+03 + 102060 1.051347376504525e+00 -5.937419495905473e+00 -6.046196113768684e+00 4.044612094877625e+00 4.419999921979855e+00 9.359383191979805e+03 + 102080 1.084981875516398e+00 -5.959761527331171e+00 -5.995689298594645e+00 3.928487970289075e+00 4.722185147889570e+00 9.203797550903349e+03 + 102100 1.083631056836609e+00 -5.942782944882389e+00 -5.988263724727164e+00 4.013306706455163e+00 4.752149030458527e+00 9.181019598491292e+03 + 102120 1.082529553172992e+00 -5.935579280397475e+00 -5.982035708830551e+00 4.123485231354381e+00 4.856725230182592e+00 9.161951657359012e+03 + 102140 1.047996159208897e+00 -5.885577318949749e+00 -6.040230654997110e+00 4.261586185608338e+00 4.373542797497982e+00 9.340967356817308e+03 + 102160 1.104304036085869e+00 -5.980359227409762e+00 -6.025177805808021e+00 3.798174069721648e+00 4.540818856906253e+00 9.294524501320371e+03 + 102180 1.082583430345317e+00 -5.967253066268624e+00 -6.026792188548631e+00 3.870321413188171e+00 4.528438559406970e+00 9.299476548545019e+03 + 102200 9.841305042298184e-01 -5.845461581400166e+00 -6.002837665028740e+00 4.568037367464860e+00 4.664359541399350e+00 9.225767408509188e+03 + 102220 9.995182682556932e-01 -5.890928745946875e+00 -6.034236088316025e+00 4.228233658526382e+00 4.405340721903166e+00 9.322439611387555e+03 + 102240 1.011435872267556e+00 -5.934297955159959e+00 -6.037258214557503e+00 4.023869728376523e+00 4.432655985867179e+00 9.331763058513785e+03 + 102260 1.026334316876609e+00 -5.982604275669857e+00 -6.004532985601646e+00 3.767088160023281e+00 4.641170114138054e+00 9.230968267001044e+03 + 102280 1.032443488931104e+00 -6.016732232371707e+00 -5.987468716383765e+00 3.617017538124929e+00 4.785053175442156e+00 9.178625468506341e+03 + 102300 9.693442319713593e-01 -5.942959773709611e+00 -5.973836983252610e+00 3.997674296923653e+00 4.820372581495016e+00 9.136886397524288e+03 + 102320 9.025551197934787e-01 -5.857502221551396e+00 -5.973087043373868e+00 4.488703280691446e+00 4.824997347093447e+00 9.134574531533966e+03 + 102340 1.062979484522036e+00 -6.104241496519524e+00 -5.970550419891234e+00 3.140423611172107e+00 4.908098461798994e+00 9.126871249074404e+03 + 102360 9.836636181508149e-01 -5.993502057436785e+00 -6.051691358972201e+00 3.706024855001952e+00 4.371892880820280e+00 9.376401042634212e+03 + 102380 9.885447284289018e-01 -6.007935020711544e+00 -5.992890073089128e+00 3.668525324290169e+00 4.754915741736204e+00 9.195233739769241e+03 + 102400 1.039976166368926e+00 -6.088159695030552e+00 -5.987064029516945e+00 3.239098951444764e+00 4.819605907327569e+00 9.177385246608255e+03 + 102420 9.793048394408452e-01 -6.003143137072142e+00 -5.973266601781465e+00 3.707149240562441e+00 4.878704929580400e+00 9.135164775567515e+03 + 102440 9.960105032353902e-01 -6.030229242737156e+00 -5.992307661936399e+00 3.544159415457924e+00 4.761911000761536e+00 9.193432917753355e+03 + 102460 9.871004442492680e-01 -6.016201428120822e+00 -6.002061507311437e+00 3.631404640526550e+00 4.712598253959714e+00 9.223371669218874e+03 + 102480 1.020821733036069e+00 -6.063383559255508e+00 -6.050341931847321e+00 3.367343622826524e+00 4.442230665589648e+00 9.372237155531158e+03 + 102500 9.669820182883115e-01 -5.982000300349037e+00 -6.041433405780094e+00 3.813747750897432e+00 4.472473662268961e+00 9.344688594991154e+03 + 102520 9.675845867143908e-01 -5.981444970993582e+00 -5.971539890669462e+00 3.797850327579372e+00 4.854726831606699e+00 9.129914580650506e+03 + 102540 9.878283234899049e-01 -6.005916272363897e+00 -6.006081016703954e+00 3.642863574823491e+00 4.641917587328777e+00 9.235722560147991e+03 + 102560 9.889889218476040e-01 -6.000220045721592e+00 -5.988168868721012e+00 3.717702973693253e+00 4.786902696944194e+00 9.180771059645855e+03 + 102580 9.959711529345525e-01 -5.996417773801714e+00 -6.011134942077716e+00 3.723268444304157e+00 4.638760186588929e+00 9.251279756228063e+03 + 102600 1.042773284765454e+00 -6.040344299031713e+00 -5.975251161299990e+00 3.558766802184994e+00 4.932541672171057e+00 9.141221896902434e+03 + 102620 1.021781125007858e+00 -5.972771173452919e+00 -6.025501424075703e+00 3.881815893138791e+00 4.579030634082860e+00 9.295506583443468e+03 + 102640 1.083711708878293e+00 -6.016304371350754e+00 -6.031817968987445e+00 3.606537334271561e+00 4.517455855920208e+00 9.315001657412764e+03 + 102660 1.065835303228143e+00 -5.947190688664417e+00 -6.053875304787654e+00 3.980806543161708e+00 4.368206967991089e+00 9.383169727282711e+03 + 102680 1.169225889417918e+00 -6.065772496282318e+00 -5.997754119684111e+00 3.307828971155323e+00 4.698401015391990e+00 9.210171831795838e+03 + 102700 1.126781880665355e+00 -5.979399400858209e+00 -6.003892467705795e+00 3.861410725959914e+00 4.720767745831233e+00 9.228993301558516e+03 + 102720 1.075206261957840e+00 -5.891964884371550e+00 -6.000983042299200e+00 4.311329529034166e+00 4.685330395708185e+00 9.220051556256094e+03 + 102740 1.057289525430582e+00 -5.861683921681520e+00 -6.032701513393830e+00 4.411184551518983e+00 4.429175075020109e+00 9.317687375128469e+03 + 102760 1.134804181007357e+00 -5.984120571129761e+00 -6.010360504266322e+00 3.776210541977432e+00 4.625536785290772e+00 9.248890597823731e+03 + 102780 1.058148794018591e+00 -5.890067260847018e+00 -6.024185691903285e+00 4.300331191293499e+00 4.530202405408285e+00 9.291392162850390e+03 + 102800 1.077990353297650e+00 -5.948791061796524e+00 -6.029580482629828e+00 3.951095576914621e+00 4.487190220367324e+00 9.308086929171297e+03 + 102820 1.058611199826975e+00 -5.962213019102329e+00 -6.020573864566537e+00 3.962887171013837e+00 4.627770165046704e+00 9.280308128039464e+03 + 102840 9.820786336025932e-01 -5.890722350964804e+00 -6.005987609896519e+00 4.225618296640874e+00 4.563747342613794e+00 9.235428619212500e+03 + 102860 1.014632743683619e+00 -5.974503566291943e+00 -6.007775413215660e+00 3.780830747861697e+00 4.589778654024046e+00 9.240930110846548e+03 + 102880 1.006359299950356e+00 -5.991954000690792e+00 -6.024152485622160e+00 3.727170963602669e+00 4.542282280427314e+00 9.291333873990910e+03 + 102900 9.336938610123493e-01 -5.907745007490279e+00 -6.003661326972560e+00 4.192806918989044e+00 4.642040569519316e+00 9.228269722508967e+03 + 102920 9.769278533474995e-01 -5.986634462387810e+00 -5.984094714669865e+00 3.783431044911431e+00 4.798014669332558e+00 9.168270157701678e+03 + 102940 9.868477131402178e-01 -6.011272088071292e+00 -5.974835651755944e+00 3.696497517391585e+00 4.905721173234611e+00 9.139965883949488e+03 + 102960 9.740785923934330e-01 -5.998224018652767e+00 -6.018238319916687e+00 3.739952968698047e+00 4.625027753637509e+00 9.273133688769045e+03 + 102980 1.003390932263167e+00 -6.046330366646973e+00 -6.023543403445085e+00 3.443519446810506e+00 4.574365715786905e+00 9.289463245017643e+03 + 103000 1.048456808203557e+00 -6.117335419003452e+00 -5.970781442572803e+00 3.090486508088196e+00 4.932022119907542e+00 9.127580663879335e+03 + 103020 9.717675137604018e-01 -6.005032333235174e+00 -6.009572428684725e+00 3.695422920546460e+00 4.669352989897644e+00 9.246456933090058e+03 + 103040 9.650892979799111e-01 -5.995321626038420e+00 -6.035797446965621e+00 3.749517017523526e+00 4.517098590146498e+00 9.327283963019230e+03 + 103060 9.551831662111111e-01 -5.980692198774838e+00 -6.013382041799082e+00 3.825000492954367e+00 4.637290355572298e+00 9.258187206388813e+03 + 103080 9.944063050725600e-01 -6.035838799593939e+00 -6.002961592294723e+00 3.493669181280160e+00 4.682455193323642e+00 9.226157635995522e+03 + 103100 9.676090763087970e-01 -5.989873080171458e+00 -6.027331573808462e+00 3.761019678012448e+00 4.545927210865610e+00 9.301139921210133e+03 + 103120 9.930409915917640e-01 -6.020318072314565e+00 -6.049558515949376e+00 3.539776624888062e+00 4.371873472592949e+00 9.369798139998426e+03 + 103140 9.634960193435125e-01 -5.967499989299911e+00 -6.026611933373742e+00 3.844097069750231e+00 4.504667139334518e+00 9.298906659092363e+03 + 103160 1.017511280247289e+00 -6.035203560419198e+00 -5.988057727472556e+00 3.494072361732386e+00 4.764791030306074e+00 9.180427334248698e+03 + 103180 1.037748089590008e+00 -6.043392117956689e+00 -5.986337876062423e+00 3.509329297310170e+00 4.836943583382441e+00 9.175163629465984e+03 + 103200 1.017310264915153e+00 -5.987777607810710e+00 -5.985420852798715e+00 3.787019682650757e+00 4.800552534636292e+00 9.172349552718246e+03 + 103220 1.054549616867338e+00 -6.010764117242857e+00 -6.034751998506451e+00 3.624584234095394e+00 4.486842107767208e+00 9.324042027653282e+03 + 103240 1.060155131536222e+00 -5.979131685601505e+00 -6.020372741900596e+00 3.891287019603317e+00 4.654474492301098e+00 9.279690325859225e+03 + 103260 1.108773681805230e+00 -6.014052180301531e+00 -5.999738928054415e+00 3.607840671321150e+00 4.690029580692716e+00 9.216259911958703e+03 + 103280 1.073452186736946e+00 -5.928394572094545e+00 -6.024265770745577e+00 4.130752995731597e+00 4.580245737057324e+00 9.291685443296732e+03 + 103300 1.060801085500384e+00 -5.884402965742423e+00 -6.083624657585718e+00 4.342520183918455e+00 4.198558399897085e+00 9.475558847239563e+03 + 103320 1.084143637435305e+00 -5.906073813083468e+00 -6.041249176092317e+00 4.231308959585786e+00 4.455111106869154e+00 9.344123482655157e+03 + 103340 1.063866916097524e+00 -5.875540709956862e+00 -6.091781318808161e+00 4.360031572755338e+00 4.118344533605106e+00 9.500958280247118e+03 + 103360 1.058791109136880e+00 -5.878794326163305e+00 -6.065634864806523e+00 4.341676348710173e+00 4.268809062340910e+00 9.419642745989962e+03 + 103380 1.080372795180301e+00 -5.936087377793628e+00 -6.027376724028969e+00 4.073976880534168e+00 4.549779327470173e+00 9.301273450067960e+03 + 103400 1.051210837529179e+00 -5.928657098335469e+00 -5.986985235756267e+00 4.069473323245671e+00 4.734544131925356e+00 9.177113316957610e+03 + 103420 1.062944011698172e+00 -5.986828770580052e+00 -5.988204588793001e+00 3.727040819350595e+00 4.719140658264665e+00 9.180869749761030e+03 + 103440 9.771613898596031e-01 -5.901780912450828e+00 -6.054319472795598e+00 4.228891971915006e+00 4.352991953149416e+00 9.384547146257019e+03 + 103460 1.046644068516963e+00 -6.045559483206691e+00 -6.013610565668925e+00 3.430155377038450e+00 4.613611005619315e+00 9.258896302273346e+03 + 103480 9.768096091617940e-01 -5.974026993285950e+00 -6.008726073800950e+00 3.835997912189456e+00 4.636750422206969e+00 9.243864179970800e+03 + 103500 1.068325084821227e+00 -6.129840174833159e+00 -5.958868665488568e+00 3.016587125922736e+00 4.998331990334940e+00 9.091212763601767e+03 + 103520 9.338441806951159e-01 -5.942961687434636e+00 -6.042161416568965e+00 3.923022584163368e+00 4.353402388365577e+00 9.346924145145107e+03 + 103540 9.910314184955752e-01 -6.033434798192250e+00 -6.010624362030164e+00 3.480772080265404e+00 4.611753134611687e+00 9.249693534975968e+03 + 103560 1.054506776119491e+00 -6.130597522194338e+00 -5.966685517820096e+00 3.012730246250972e+00 4.953938340668570e+00 9.115074898234345e+03 + 103580 9.193068191471293e-01 -5.931641052091430e+00 -6.016880672596723e+00 4.098296335091719e+00 4.608837243361687e+00 9.268924256115819e+03 + 103600 1.034838180775984e+00 -6.101734849424806e+00 -5.971957082402476e+00 3.194963653116414e+00 4.940167674403177e+00 9.131150299198747e+03 + 103620 9.638566747064915e-01 -5.992364234300954e+00 -6.023716156862765e+00 3.738293509271219e+00 4.558265918226964e+00 9.290004103261297e+03 + 103640 1.008335283865236e+00 -6.054165027956544e+00 -5.993763967410720e+00 3.447680071503076e+00 4.794512308191110e+00 9.197923670251370e+03 + 103660 9.369335477749456e-01 -5.942428974360362e+00 -6.004431952438962e+00 4.037881873432100e+00 4.681851178374935e+00 9.230662540099080e+03 + 103680 1.000397751847341e+00 -6.028849143143697e+00 -5.992708452854998e+00 3.535498029279189e+00 4.743023465670642e+00 9.194662008354800e+03 + 103700 9.998274351679115e-01 -6.017025511623411e+00 -6.003588170235674e+00 3.574959841409691e+00 4.652119135079933e+00 9.228051353245775e+03 + 103720 9.882500866178275e-01 -5.987072418723219e+00 -5.969824681211004e+00 3.793158123705344e+00 4.892197301579238e+00 9.124640080461859e+03 + 103740 1.072332514603123e+00 -6.093898865661609e+00 -5.974314324469665e+00 3.208741182681638e+00 4.895414123853725e+00 9.138341480224704e+03 + 103760 1.036312685437181e+00 -6.020402318081159e+00 -5.974366487855130e+00 3.580621703205466e+00 4.844966564385027e+00 9.138532460075103e+03 + 103780 9.432848887278310e-01 -5.862389965330649e+00 -6.002692239229547e+00 4.374072520841302e+00 4.568435152407111e+00 9.225277784278092e+03 + 103800 1.092450645763077e+00 -6.058225824482392e+00 -5.969695533386615e+00 3.367392347776260e+00 4.875746979266484e+00 9.124253066693602e+03 + 103820 9.873630067521609e-01 -5.875544169532443e+00 -5.992571563324795e+00 4.339850894846473e+00 4.667861489760131e+00 9.194223100417566e+03 + 103840 1.040378715015674e+00 -5.925496382483080e+00 -6.016554276587552e+00 4.055798363095180e+00 4.532929843983728e+00 9.267910193914460e+03 + 103860 1.034047778373317e+00 -5.885428241794218e+00 -6.035194690420605e+00 4.276072290663445e+00 4.416090166367709e+00 9.325371068318675e+03 + 103880 1.123350971254179e+00 -5.992064295524901e+00 -6.017139412069475e+00 3.737668279529457e+00 4.593683079968766e+00 9.269724643700443e+03 + 103900 1.121179525072143e+00 -5.971886882326563e+00 -5.964576260731553e+00 3.868562777396125e+00 4.910541497909712e+00 9.108612522689313e+03 + 103920 1.047736687199056e+00 -5.851905425583020e+00 -5.999361044546006e+00 4.516787534011293e+00 4.670074551242535e+00 9.215032265267298e+03 + 103940 1.093219859365533e+00 -5.913986225891779e+00 -6.011320460892092e+00 4.152585288688567e+00 4.593677048892584e+00 9.251743280132341e+03 + 103960 1.116213031860014e+00 -5.951101210777447e+00 -5.993060974770392e+00 4.020526351699764e+00 4.779586893599775e+00 9.195735169687277e+03 + 103980 1.085582665433207e+00 -5.921795813764325e+00 -6.032403396506946e+00 4.098178877310032e+00 4.463053020733790e+00 9.316791680483000e+03 + 104000 1.090612384877555e+00 -5.965370675190580e+00 -6.012807157476891e+00 3.898240272316615e+00 4.625852650256706e+00 9.256386215951896e+03 + 104020 9.622510812979671e-01 -5.830761904604348e+00 -6.026662214012947e+00 4.634244917134068e+00 4.509355025034986e+00 9.299052719843938e+03 + 104040 9.833523403916149e-01 -5.920144239180239e+00 -6.009189384597978e+00 4.097243629105590e+00 4.585932624425213e+00 9.245272458804524e+03 + 104060 1.018473876045485e+00 -6.023067789770886e+00 -6.005636882274270e+00 3.552541209196473e+00 4.652632177466263e+00 9.234345296311993e+03 + 104080 9.849308483410752e-01 -6.008013677526687e+00 -5.989084915338987e+00 3.660583917191718e+00 4.769275798889973e+00 9.183565893908210e+03 + 104100 9.534566112345877e-01 -5.983791987296577e+00 -6.020831289378945e+00 3.783282907839578e+00 4.570597503469149e+00 9.281105193723228e+03 + 104120 9.538068341730618e-01 -6.000116496874760e+00 -6.097635304014512e+00 3.626868358716572e+00 4.066900277133487e+00 9.519208021675693e+03 + 104140 1.004018740404711e+00 -6.088509870718161e+00 -6.035351024107600e+00 3.188768753061436e+00 4.494015076604204e+00 9.325902063720559e+03 + 104160 9.438910516156069e-01 -6.010585573742055e+00 -5.981026833377885e+00 3.645735266194954e+00 4.815466127566305e+00 9.158902707758272e+03 + 104180 1.002521747532457e+00 -6.103059784370759e+00 -5.962648441725907e+00 3.150191058212241e+00 4.956454716264026e+00 9.102743854581626e+03 + 104200 1.000407402846631e+00 -6.100897667768255e+00 -5.972176966966805e+00 3.135424257396630e+00 4.874558440862630e+00 9.131863016706671e+03 + 104220 9.105942825081869e-01 -5.964120284046291e+00 -6.045102481626348e+00 3.957049946640324e+00 4.492037636181061e+00 9.356009509652296e+03 + 104240 9.896265856392805e-01 -6.075645112769908e+00 -5.956841501270954e+00 3.362254559053445e+00 5.044443281079901e+00 9.085022161196997e+03 + 104260 9.679778930342043e-01 -6.031300918152281e+00 -5.999453079005837e+00 3.553874701911431e+00 4.736749922727489e+00 9.215350745445403e+03 + 104280 1.053585733734527e+00 -6.140161838263530e+00 -5.962989428964613e+00 2.988483894469572e+00 5.005835286005681e+00 9.103793771604813e+03 + 104300 9.580762111134433e-01 -5.977763645369699e+00 -5.972268476551638e+00 3.821631754267906e+00 4.853185863995836e+00 9.132093570134548e+03 + 104320 9.614165447160054e-01 -5.955721859109301e+00 -6.010832012921746e+00 3.855125469316600e+00 4.538674437856802e+00 9.250327262687004e+03 + 104340 9.978707120370800e-01 -5.980809517192384e+00 -5.971756524593322e+00 3.760161849052813e+00 4.812145533502703e+00 9.130527259422997e+03 + 104360 1.003691390509842e+00 -5.956464642541532e+00 -5.979794582624180e+00 3.914131842882293e+00 4.780167716631166e+00 9.155098595244192e+03 + 104380 1.042812714673834e+00 -5.980999881164638e+00 -5.920075273706122e+00 3.787071617524109e+00 5.136910141603439e+00 8.973302812096053e+03 + 104400 1.004905878597538e+00 -5.897065314890249e+00 -5.929114917594756e+00 4.282586569243566e+00 5.098552790854293e+00 9.000665909144855e+03 + 104420 1.084200813207017e+00 -5.988792549362050e+00 -5.917343311928484e+00 3.780478436746594e+00 5.190751014823892e+00 8.965017256770576e+03 + 104440 1.067685041497781e+00 -5.943914695368707e+00 -5.975351999675030e+00 3.976766723117422e+00 4.796248856883399e+00 9.141512848823933e+03 + 104460 1.009072924834158e+00 -5.846753385055605e+00 -6.011698416380786e+00 4.450814484935847e+00 4.503674589905554e+00 9.252979237126265e+03 + 104480 1.090794891086835e+00 -5.963152355236291e+00 -6.000241935669346e+00 3.936362474234245e+00 4.723388363793619e+00 9.217783676058458e+03 + 104500 1.088892849189606e+00 -5.962223085349251e+00 -6.072367252350402e+00 3.918581558395295e+00 4.286116706719930e+00 9.440556083495328e+03 + 104520 1.101184786284804e+00 -5.996394886053793e+00 -6.026085071683825e+00 3.737038129210180e+00 4.566552488781157e+00 9.297296234432573e+03 + 104540 9.623491012058711e-01 -5.810879194267441e+00 -6.033442484199446e+00 4.774110335202463e+00 4.496117482855085e+00 9.319979948398275e+03 + 104560 1.063573826253906e+00 -5.980356912670027e+00 -6.002790882528508e+00 3.789228704055069e+00 4.660409377482053e+00 9.225612921817146e+03 + 104580 1.035063821151286e+00 -5.957023998347557e+00 -5.959083959936321e+00 3.924437941564540e+00 4.912609323343831e+00 9.091864011713787e+03 + 104600 9.963809883187791e-01 -5.913847680642217e+00 -5.966080652373138e+00 4.204434137890301e+00 4.904504331185099e+00 9.113186770600261e+03 + 104620 1.012643523545416e+00 -5.948921183550852e+00 -6.008174777717499e+00 3.915474491374991e+00 4.575231184206044e+00 9.242126190472427e+03 + 104640 1.025753905908384e+00 -5.976407155874959e+00 -6.003639718393119e+00 3.814428049348299e+00 4.658054461143597e+00 9.228211607302403e+03 + 104660 1.031587339127396e+00 -5.994384589112253e+00 -6.008823959663223e+00 3.727616766047110e+00 4.644703665858069e+00 9.244146308145506e+03 + 104680 9.991967926948347e-01 -5.956506118591316e+00 -6.035369424756711e+00 3.908463881404538e+00 4.455618573345657e+00 9.325934479426027e+03 + 104700 1.080504708143714e+00 -6.088748992601380e+00 -6.006138881719815e+00 3.175337058231030e+00 4.649697098786318e+00 9.235901976792880e+03 + 104720 9.496126061848341e-01 -5.905830493790978e+00 -6.022627672251643e+00 4.201179371503559e+00 4.530511898477467e+00 9.286628446139914e+03 + 104740 9.664466205338205e-01 -5.941128530675103e+00 -6.015342467752293e+00 4.017134401920572e+00 4.590986490653698e+00 9.264207473070075e+03 + 104760 1.029047466468659e+00 -6.044059419680616e+00 -6.017628658389008e+00 3.420360412963983e+00 4.572129934447487e+00 9.271257450331183e+03 + 104780 1.021504818927702e+00 -6.045042220829527e+00 -5.990631401192115e+00 3.481599733534822e+00 4.794035079939970e+00 9.188311584154346e+03 + 104800 9.708371211342164e-01 -5.980846312824614e+00 -5.948615147792021e+00 3.796534680762128e+00 4.981611018135942e+00 9.059958904487277e+03 + 104820 1.020522473914603e+00 -6.061333853422449e+00 -5.967579538394821e+00 3.368053524684610e+00 4.906405310006610e+00 9.117786523678797e+03 + 104840 1.036716278187460e+00 -6.091882076992208e+00 -5.959284958939668e+00 3.236235130392318e+00 4.997628301587705e+00 9.092474469028248e+03 + 104860 9.545077744712391e-01 -5.976090577747242e+00 -6.050175322412450e+00 3.781058210716403e+00 4.355652142271596e+00 9.371708240227716e+03 + 104880 9.402236063444048e-01 -5.959190233782132e+00 -6.040153117394100e+00 3.873378411053286e+00 4.408477004387617e+00 9.340740888112316e+03 + 104900 9.904408800758864e-01 -6.039042830690688e+00 -5.995023001320884e+00 3.491427017689710e+00 4.744195689977708e+00 9.201779293166681e+03 + 104920 9.778090112727499e-01 -6.025318624849101e+00 -5.967846554508566e+00 3.553226195437028e+00 4.883239717106522e+00 9.118584955328177e+03 + 104940 9.670483428968626e-01 -6.011011070305761e+00 -5.975724496959645e+00 3.595858322445496e+00 4.798479287178468e+00 9.142653821593969e+03 + 104960 1.029786244182199e+00 -6.101187895214689e+00 -6.015629719733400e+00 3.110451509342673e+00 4.601739793041105e+00 9.265094544888538e+03 + 104980 9.801875242909042e-01 -6.023857221851897e+00 -5.997273089344724e+00 3.580531632114801e+00 4.733181834852196e+00 9.208697622961316e+03 + 105000 9.646857924264594e-01 -5.993866190948970e+00 -6.008215574075187e+00 3.709736837284904e+00 4.627340458814305e+00 9.242300533978465e+03 + 105020 9.687318499764812e-01 -5.987953987877033e+00 -6.042579435184784e+00 3.774311666386286e+00 4.460643894684528e+00 9.348226753335814e+03 + 105040 1.012311504020663e+00 -6.036604230261915e+00 -6.032764170130305e+00 3.471829972900299e+00 4.493880192423393e+00 9.317901804312112e+03 + 105060 9.270745111230188e-01 -5.892772114293692e+00 -5.994665542845321e+00 4.305310243712978e+00 4.720222409012414e+00 9.200658494543341e+03 + 105080 1.033014156850607e+00 -6.028589276799807e+00 -5.969567384102916e+00 3.587374669486828e+00 4.926287510960750e+00 9.123834909171972e+03 + 105100 1.054176948128016e+00 -6.033594833394838e+00 -5.973103177585704e+00 3.545483374340964e+00 4.892835823050495e+00 9.134653768272405e+03 + 105120 1.039281137685686e+00 -5.988240549705806e+00 -5.982053724521271e+00 3.728277963115716e+00 4.763803670733416e+00 9.162043315712514e+03 + 105140 1.014898584661100e+00 -5.931653803498542e+00 -6.014534017516225e+00 4.067013184070718e+00 4.591102169509514e+00 9.261705648055080e+03 + 105160 9.982857438855486e-01 -5.888857036837893e+00 -6.010178227309966e+00 4.254460580624635e+00 4.557815530540446e+00 9.248327328857127e+03 + 105180 1.011202221953589e+00 -5.891955097468983e+00 -6.027678241286801e+00 4.254890988804073e+00 4.475547693913538e+00 9.302225718079066e+03 + 105200 1.014858533082630e+00 -5.883795723965315e+00 -6.040930699240269e+00 4.285117671243057e+00 4.382824326655436e+00 9.343150118834654e+03 + 105220 1.045719537505392e+00 -5.922255113984400e+00 -6.038937057780220e+00 4.123193170894916e+00 4.453187393146865e+00 9.336966609905021e+03 + 105240 1.043752320324015e+00 -5.919872882778542e+00 -6.025496462360366e+00 4.095619089919219e+00 4.489112150764274e+00 9.295484135444623e+03 + 105260 1.071380916330870e+00 -5.970149782964505e+00 -6.027543699387363e+00 3.825270252937836e+00 4.495705503157923e+00 9.301788075127948e+03 + 105280 1.004826558763849e+00 -5.888980981468689e+00 -6.002561036365729e+00 4.340232783547373e+00 4.688038531871878e+00 9.224894854216227e+03 + 105300 1.019711935595861e+00 -5.935162468038301e+00 -6.035102116531673e+00 4.050303532158432e+00 4.476434604898865e+00 9.325099272691565e+03 + 105320 1.022851179360183e+00 -5.972647152989670e+00 -6.003741584379099e+00 3.858013464985047e+00 4.679464428099242e+00 9.228525191493331e+03 + 105340 1.037891455942812e+00 -6.033002609438154e+00 -5.965892148951660e+00 3.529082812176280e+00 4.914441461599922e+00 9.112639362291173e+03 + 105360 1.065345556844006e+00 -6.113491915059083e+00 -5.957334302741281e+00 3.092379024048653e+00 4.989060199289879e+00 9.086560301736678e+03 + 105380 9.552382328475740e-01 -5.987539559216747e+00 -6.024332040487554e+00 3.767021549823100e+00 4.555753428748050e+00 9.291911276990621e+03 + 105400 9.954292747346277e-01 -6.080023340725983e+00 -6.034258219521531e+00 3.255247862154983e+00 4.518038270240567e+00 9.322503558053131e+03 + 105420 8.988636870073589e-01 -5.960208105435974e+00 -5.996017139219083e+00 3.923218242698733e+00 4.717597229286053e+00 9.204827161084382e+03 + 105440 9.536092069765210e-01 -6.051566608185607e+00 -6.001825378518753e+00 3.440036829310591e+00 4.725658667488078e+00 9.222666110106800e+03 + 105460 9.246393099890596e-01 -6.012930720009395e+00 -6.027408288706358e+00 3.560053393618048e+00 4.476920953763571e+00 9.301377571533081e+03 + 105480 9.340637518889190e-01 -6.027647488670615e+00 -5.988663013715501e+00 3.537302906001762e+00 4.761157794022028e+00 9.182289674432423e+03 + 105500 9.388277518277689e-01 -6.028888098425544e+00 -5.993482688337479e+00 3.524856655990587e+00 4.728159999685762e+00 9.197044511283280e+03 + 105520 9.638068054036103e-01 -6.056767855595536e+00 -5.998123349307123e+00 3.389296706825543e+00 4.726042537141622e+00 9.211308780844345e+03 + 105540 9.907884410405895e-01 -6.084128107283559e+00 -5.952604940912357e+00 3.276159722907576e+00 5.031386097355237e+00 9.072141084197983e+03 + 105560 9.367397583036409e-01 -5.988973543698677e+00 -6.031950322731853e+00 3.719454769334579e+00 4.472675453491021e+00 9.315383295042793e+03 + 105580 1.009146369511426e+00 -6.081228402968879e+00 -5.973223798289354e+00 3.331594814075327e+00 4.951773967803721e+00 9.135037468198947e+03 + 105600 9.810492558495509e-01 -6.022375182683032e+00 -6.027968079263451e+00 3.583361622446372e+00 4.551246344783655e+00 9.303098064401076e+03 + 105620 1.080816186022551e+00 -6.153706834447812e+00 -5.970106619991915e+00 2.857618141877368e+00 4.911878985324492e+00 9.125541638087827e+03 + 105640 1.004659507999043e+00 -6.026158022395069e+00 -6.013893486270311e+00 3.591046327549607e+00 4.661471191908802e+00 9.259755210281472e+03 + 105660 1.040317253916643e+00 -6.066915430384356e+00 -6.001989806536979e+00 3.331677027195162e+00 4.704490006534612e+00 9.223178887340839e+03 + 105680 9.868082663486133e-01 -5.977681417704098e+00 -6.012454309332540e+00 3.871628127180174e+00 4.671956802362073e+00 9.255326175679240e+03 + 105700 9.904778007155083e-01 -5.975548793012452e+00 -6.012594568246773e+00 3.801555516314234e+00 4.588832942103571e+00 9.255762706040892e+03 + 105720 1.011416571890045e+00 -5.999708558223542e+00 -5.975336336090459e+00 3.740485748454055e+00 4.880434819531405e+00 9.141475341956024e+03 + 105740 1.070663287284406e+00 -6.079650414573460e+00 -5.982060380657698e+00 3.288138956434668e+00 4.848516033187916e+00 9.162055965356260e+03 + 105760 9.873978366796070e-01 -5.952778292376298e+00 -6.028195384624786e+00 3.972487999332092e+00 4.539431384883966e+00 9.303815848730364e+03 + 105780 1.038112126011055e+00 -6.026465189661036e+00 -6.015595960013489e+00 3.556998867190234e+00 4.619411665834308e+00 9.264983418473385e+03 + 105800 9.883426412165701e-01 -5.951690243949207e+00 -6.033156925068426e+00 3.988304856690529e+00 4.520510566775813e+00 9.319113408557492e+03 + 105820 1.049490321168270e+00 -6.044209571470263e+00 -6.015285686945532e+00 3.483657996459218e+00 4.649743417356892e+00 9.264042592916163e+03 + 105840 9.669860557087495e-01 -5.926323276994959e+00 -6.038470019347025e+00 4.064796842842580e+00 4.420832893604727e+00 9.335550710578482e+03 + 105860 9.913297283522626e-01 -5.966248993167111e+00 -6.023603989462349e+00 3.968290792197301e+00 4.638949527813049e+00 9.289660785910095e+03 + 105880 1.025856615216100e+00 -6.022835674518021e+00 -6.001009072900041e+00 3.568885631314083e+00 4.694217355460207e+00 9.220141375278974e+03 + 105900 9.310106432921430e-01 -5.886362553663688e+00 -5.997026704109333e+00 4.392910613011570e+00 4.757459935930743e+00 9.207893943474799e+03 + 105920 1.002114825061734e+00 -5.993207875301201e+00 -6.016864368318915e+00 3.731083964779548e+00 4.595244721041371e+00 9.268888137091742e+03 + 105940 1.004535546904735e+00 -5.998515174476382e+00 -6.032619089653663e+00 3.703786816708285e+00 4.507956858196524e+00 9.317458714624845e+03 + 105960 9.704961728865152e-01 -5.951000497594798e+00 -6.041763831778325e+00 3.965185252047061e+00 4.444008141584677e+00 9.345684352876940e+03 + 105980 9.547050733941810e-01 -5.930522472157948e+00 -6.008597750037165e+00 4.050101491309179e+00 4.601781163616512e+00 9.243456013375860e+03 + 106000 1.030197515008515e+00 -6.043182128465009e+00 -6.013181700943112e+00 3.469410569392166e+00 4.641677666774055e+00 9.257556907309625e+03 + 106020 1.054648843293593e+00 -6.080666227117568e+00 -6.004542677255478e+00 3.307669800806388e+00 4.744783004195778e+00 9.230997125901400e+03 + 106040 9.820431790664990e-01 -5.975657366924267e+00 -6.031835035625956e+00 3.807666767939450e+00 4.485085900788220e+00 9.315023226177755e+03 + 106060 9.637519379507277e-01 -5.951052788163842e+00 -5.993857553857437e+00 3.970429097888548e+00 4.724637509259844e+00 9.198172630192268e+03 + 106080 1.036058453110102e+00 -6.058488273734226e+00 -5.997488818540092e+00 3.329110117441885e+00 4.679378428801785e+00 9.209310970261269e+03 + 106100 9.938361326076730e-01 -5.995695875129115e+00 -6.029427900262344e+00 3.761183602531482e+00 4.567489094202465e+00 9.307594603177789e+03 + 106120 9.884403149722286e-01 -5.988838455369597e+00 -6.061755416075568e+00 3.735094126038258e+00 4.316393653801370e+00 9.407579020905265e+03 + 106140 1.046991522935415e+00 -6.077896397997137e+00 -6.009706722820646e+00 3.285958599889592e+00 4.677514267071133e+00 9.246871573909664e+03 + 106160 1.022304590806801e+00 -6.044210941323505e+00 -5.965105545271301e+00 3.515500955099785e+00 4.969736380752012e+00 9.110236684367226e+03 + 106180 9.746870712848359e-01 -5.976501048606917e+00 -6.027258173431431e+00 3.772526282518800e+00 4.481071017136756e+00 9.300894347154832e+03 + 106200 1.006697876559975e+00 -6.026541308635800e+00 -5.997818798966025e+00 3.613114726237345e+00 4.778043821555194e+00 9.210341375407599e+03 + 106220 9.917649340656983e-01 -6.005379183840454e+00 -6.034777941613426e+00 3.601881217392561e+00 4.433069000817094e+00 9.324147627027842e+03 + 106240 9.823525429464952e-01 -5.996085134616224e+00 -5.994998003285888e+00 3.740223178528086e+00 4.746465654859904e+00 9.201693563369117e+03 + 106260 9.872817596452584e-01 -6.007883076430167e+00 -5.955948369254961e+00 3.654570497755134e+00 4.952787623225128e+00 9.082312950190484e+03 + 106280 9.444796671961722e-01 -5.947614457165768e+00 -6.008997976638307e+00 3.965424199052621e+00 4.612950531172367e+00 9.244659454683411e+03 + 106300 9.951661159584837e-01 -6.023672837148204e+00 -5.963506678081031e+00 3.540672094268674e+00 4.886155490315407e+00 9.105351742482240e+03 + 106320 1.010907387953909e+00 -6.043585038563597e+00 -5.986180815431410e+00 3.405200069026474e+00 4.734824001526313e+00 9.174688076584907e+03 + 106340 1.065493788765604e+00 -6.120099708978628e+00 -5.978294086690593e+00 3.032612794874071e+00 4.846882622401099e+00 9.150533840000335e+03 + 106360 1.003448986429121e+00 -6.021402655140225e+00 -6.016121061088942e+00 3.542951757159179e+00 4.573279487525681e+00 9.266614197549015e+03 + 106380 1.002641671974978e+00 -6.014264461372075e+00 -6.008535072180445e+00 3.563719731309110e+00 4.596618770667563e+00 9.243251607275828e+03 + 106400 9.279737268549614e-01 -5.895822523891109e+00 -5.975526871060284e+00 4.248793802027325e+00 4.791119106374060e+00 9.142050886966985e+03 + 106420 1.000511469415614e+00 -5.991984889029911e+00 -5.984288973032861e+00 3.727037483241496e+00 4.771228623835714e+00 9.168865631228966e+03 + 106440 9.835861777889852e-01 -5.949739384102334e+00 -6.005883194165015e+00 3.921691761428319e+00 4.599305315821880e+00 9.235108826196378e+03 + 106460 1.050662975312854e+00 -6.029188679902552e+00 -5.994911488469557e+00 3.519627951839515e+00 4.716452889426002e+00 9.201442797101881e+03 + 106480 1.030473782183092e+00 -5.981755171782851e+00 -6.028877163620118e+00 3.786853333650078e+00 4.516271564415817e+00 9.305904331851314e+03 + 106500 1.017453277908669e+00 -5.947790932210066e+00 -6.000924811388154e+00 4.003100947145302e+00 4.697997990463491e+00 9.219877593014953e+03 + 106520 1.053309832071358e+00 -5.987666597784955e+00 -6.011298139135475e+00 3.748891096535181e+00 4.613195129131291e+00 9.251764921732920e+03 + 106540 1.018222475911422e+00 -5.924562883877633e+00 -6.039652573788025e+00 4.061636749136019e+00 4.400773939598591e+00 9.339176789930914e+03 + 106560 1.013464965020376e+00 -5.909919474581240e+00 -6.041302000064256e+00 4.121479176995491e+00 4.367060384291902e+00 9.344256663350348e+03 + 106580 9.844133247863015e-01 -5.863233457603733e+00 -6.046448895862099e+00 4.413135065774862e+00 4.361083666797883e+00 9.360178556207748e+03 + 106600 1.125416983430933e+00 -6.075255138716305e+00 -5.999918356949862e+00 3.287025047531765e+00 4.719620506763979e+00 9.216795849454071e+03 + 106620 9.800715477619264e-01 -5.869947742509009e+00 -6.041206231557272e+00 4.453444727245820e+00 4.470051980965166e+00 9.343909836229263e+03 + 106640 1.029588968893795e+00 -5.959349476580119e+00 -6.004987079848184e+00 3.899596822081879e+00 4.637538641720369e+00 9.232344652929683e+03 + 106660 1.022254327582659e+00 -5.970233234101824e+00 -6.020706799327738e+00 3.832939726135303e+00 4.543112703849133e+00 9.280740237377804e+03 + 106680 9.965355126400648e-01 -5.965104866034972e+00 -5.941566216773464e+00 3.906658027104028e+00 5.041820593757807e+00 9.038533081418669e+03 + 106700 9.479628593460430e-01 -5.927678978703296e+00 -5.986089229611181e+00 4.052874109948442e+00 4.717473410278248e+00 9.174344544058591e+03 + 106720 9.878409278179748e-01 -6.021256381872699e+00 -5.971148482427555e+00 3.609341725776504e+00 4.897069038562901e+00 9.128663947215771e+03 + 106740 9.647110309369963e-01 -6.018001732827750e+00 -5.967821478471147e+00 3.642180237663950e+00 4.930323023548831e+00 9.118525483468955e+03 + 106760 9.604231182053869e-01 -6.036884988571060e+00 -5.963847823138037e+00 3.504041709011469e+00 4.923432415392709e+00 9.106371562011018e+03 + 106780 9.736867778859050e-01 -6.075594685329187e+00 -5.989027965507365e+00 3.207768120032773e+00 4.704847621406271e+00 9.183404580552089e+03 + 106800 9.795415132308126e-01 -6.096826615164590e+00 -5.962035909409321e+00 3.170790576249405e+00 4.944779667490458e+00 9.100858470586558e+03 + 106820 9.894382069230255e-01 -6.118007711210336e+00 -5.948688875928790e+00 3.097255843703330e+00 5.069510797895051e+00 9.060207518109615e+03 + 106840 9.057082121109746e-01 -5.994644186546645e+00 -5.998203036569234e+00 3.718495248821341e+00 4.698059781261373e+00 9.211527333998798e+03 + 106860 9.614243924928710e-01 -6.072036770849369e+00 -5.974693082391124e+00 3.287626659641437e+00 4.846589182655785e+00 9.139513090363642e+03 + 106880 8.971395128714829e-01 -5.963404945218473e+00 -5.995774060921979e+00 3.916889829849984e+00 4.731021358375988e+00 9.204072774653916e+03 + 106900 9.769633277999034e-01 -6.061600047073168e+00 -5.973592390015140e+00 3.380673213551451e+00 4.886026799519565e+00 9.136153269336550e+03 + 106920 9.996030982500095e-01 -6.067535171167483e+00 -5.992098081647992e+00 3.351345638054198e+00 4.784517079926990e+00 9.192809421459837e+03 + 106940 9.961132400025762e-01 -6.026717034631110e+00 -6.008191161989968e+00 3.565849814874314e+00 4.672228242449277e+00 9.242221262949888e+03 + 106960 9.927340165485766e-01 -5.985321353492718e+00 -5.986912034500752e+00 3.757245746205049e+00 4.748111809699827e+00 9.176884891120773e+03 + 106980 9.628829649058479e-01 -5.901797315336555e+00 -5.968719722633182e+00 4.256582835654033e+00 4.872304016747741e+00 9.121238303566755e+03 + 107000 1.035623542086244e+00 -5.969908569662390e+00 -5.973372281569028e+00 3.902069884983050e+00 4.882180715207451e+00 9.135469905314814e+03 + 107020 1.040463477715462e+00 -5.944795300796596e+00 -6.014082338694076e+00 3.994302165921851e+00 4.596445272180055e+00 9.260318213693703e+03 + 107040 1.028995969339478e+00 -5.908268852783031e+00 -6.036716175863561e+00 4.181015786146869e+00 4.443451379859461e+00 9.330113421030928e+03 + 107060 1.060418468978558e+00 -5.949454771801792e+00 -6.039644242617989e+00 3.979006525754543e+00 4.461124627552444e+00 9.339168239717023e+03 + 107080 1.067358594524347e+00 -5.963302441117300e+00 -6.003665256699011e+00 3.926532052373307e+00 4.694762519177596e+00 9.228292031604615e+03 + 107100 1.046465022092181e+00 -5.939672592289149e+00 -6.002337059283807e+00 4.014763247609567e+00 4.654934180831312e+00 9.224221157301861e+03 + 107120 1.012526109890912e+00 -5.899048751600215e+00 -6.000476171656149e+00 4.268979910145166e+00 4.686567968341466e+00 9.218480488088304e+03 + 107140 1.013402051815730e+00 -5.910525471916527e+00 -5.971011637610404e+00 4.202778568845876e+00 4.855457645227744e+00 9.128250324522200e+03 + 107160 1.034846485581101e+00 -5.953628305613922e+00 -5.994487762161349e+00 3.997696812884353e+00 4.763075490408559e+00 9.200116976089483e+03 + 107180 1.059853327314974e+00 -6.005348015070615e+00 -6.045234537827042e+00 3.625557561559181e+00 4.396522975472324e+00 9.356444694381333e+03 + 107200 1.033869496297085e+00 -5.987168763006242e+00 -6.016240679998546e+00 3.801000965824209e+00 4.634065519589781e+00 9.266981375848542e+03 + 107220 9.852244150515118e-01 -5.939489289226330e+00 -6.040916542744863e+00 4.008549137321374e+00 4.426138151801200e+00 9.343073555526300e+03 + 107240 1.013844090905629e+00 -6.008857860171679e+00 -5.983553359254072e+00 3.715828849111109e+00 4.861131209238866e+00 9.166637908325800e+03 + 107260 1.015559189931036e+00 -6.035360735605936e+00 -5.994304437294349e+00 3.520826830314026e+00 4.756578448660789e+00 9.199576716182648e+03 + 107280 9.562147035292888e-01 -5.968588261113394e+00 -6.033625385572699e+00 3.854368096584470e+00 4.480914863476655e+00 9.320572722588442e+03 + 107300 1.009645328328452e+00 -6.068435037275876e+00 -6.024569467333023e+00 3.284591085847819e+00 4.536473976634690e+00 9.292642273383301e+03 + 107320 9.146252495894051e-01 -5.946411693569997e+00 -6.029012087130187e+00 4.052107648116526e+00 4.577803405924326e+00 9.306320843688811e+03 + 107340 9.476124149439484e-01 -6.010584724572748e+00 -6.016102941683059e+00 3.650506054713292e+00 4.618819598124547e+00 9.266547995034764e+03 + 107360 9.352784354037491e-01 -6.003318496229932e+00 -6.032538833766646e+00 3.683883021338430e+00 4.516095321369999e+00 9.317216343516187e+03 + 107380 9.634289084022633e-01 -6.053840888385078e+00 -6.018440986004136e+00 3.426568221902289e+00 4.629839939490844e+00 9.273767404826822e+03 + 107400 9.286616300454092e-01 -6.005530579178171e+00 -6.064546627614265e+00 3.670727953204970e+00 4.331848670380941e+00 9.416259615791734e+03 + 107420 1.003215887418894e+00 -6.118017065181470e+00 -5.996675051953654e+00 3.074624094809851e+00 4.771388712379833e+00 9.206865297882930e+03 + 107440 9.301043708199275e-01 -6.007777323993952e+00 -6.006412330996461e+00 3.687172121661652e+00 4.695010122685237e+00 9.236736319724539e+03 + 107460 9.650008131171328e-01 -6.052008588259855e+00 -5.971562596233691e+00 3.477948026538123e+00 4.939881361729387e+00 9.129958725290144e+03 + 107480 9.746960505523785e-01 -6.050257981041791e+00 -5.969421910235493e+00 3.499743969490750e+00 4.963917197402044e+00 9.123404346540037e+03 + 107500 9.920305436186564e-01 -6.046119734494104e+00 -5.973195914828948e+00 3.454869391236356e+00 4.873609248678301e+00 9.134947107580472e+03 + 107520 1.031405704983468e+00 -6.057409273160842e+00 -6.005083320822831e+00 3.398500513232424e+00 4.698964228972237e+00 9.232673277378311e+03 + 107540 1.071977350332108e+00 -6.064342191566416e+00 -5.971543666842836e+00 3.416849296873112e+00 4.949712786361202e+00 9.129895876120519e+03 + 107560 1.002352092257063e+00 -5.913223360314874e+00 -6.013460574697477e+00 4.166259053181369e+00 4.590681456537669e+00 9.258409923093333e+03 + 107580 1.030913570804215e+00 -5.916236382028281e+00 -5.985331175677985e+00 4.107513815612239e+00 4.710760818090878e+00 9.172064529596386e+03 + 107600 1.046466238711180e+00 -5.913922853027607e+00 -5.984306943857719e+00 4.138891835809319e+00 4.734735494359957e+00 9.168884991490551e+03 + 107620 1.014335211593006e+00 -5.849535038273675e+00 -6.027108696228034e+00 4.521053558892397e+00 4.501398135483707e+00 9.300409904671216e+03 + 107640 1.031454396975159e+00 -5.866833433289541e+00 -6.021246994063081e+00 4.444031587363989e+00 4.557365025981018e+00 9.282368124664270e+03 + 107660 1.083358212918603e+00 -5.944721045353601e+00 -6.027302978494619e+00 3.950463129907367e+00 4.476264890298788e+00 9.301047140077728e+03 + 107680 1.065461499434571e+00 -5.928001078585021e+00 -6.003024927353788e+00 4.107923092915081e+00 4.677124543381741e+00 9.226327214814457e+03 + 107700 1.031908663640041e+00 -5.893742237687064e+00 -6.009339961454102e+00 4.192824955195509e+00 4.529044936635240e+00 9.245738277363249e+03 + 107720 1.009508188437826e+00 -5.881089222381855e+00 -6.016720155963278e+00 4.265727785875058e+00 4.486913976431391e+00 9.268416545387792e+03 + 107740 1.108133266194467e+00 -6.050570405648134e+00 -5.995267527915063e+00 3.406565747755403e+00 4.724123429791367e+00 9.202520161477692e+03 + 107760 1.017707733793472e+00 -5.943948198197571e+00 -6.037929609689355e+00 3.996844037950534e+00 4.457188229588285e+00 9.333828164800503e+03 + 107780 1.017219874802220e+00 -5.972735933065588e+00 -5.983061200777406e+00 3.783106700196357e+00 4.723817415165080e+00 9.165123974842425e+03 + 107800 9.511000185736797e-01 -5.899872904094328e+00 -6.002330140693330e+00 4.279358913037360e+00 4.691033605279765e+00 9.224192855585610e+03 + 107820 1.052768950401667e+00 -6.072052565842713e+00 -5.999445588483018e+00 3.344356035269695e+00 4.761276535162496e+00 9.215341682580869e+03 + 107840 9.831247658223491e-01 -5.989328049267282e+00 -6.016447045152260e+00 3.727336411617765e+00 4.571614940595170e+00 9.267599714195072e+03 + 107860 1.030649498516089e+00 -6.076911480382435e+00 -5.958101945504277e+00 3.331403401972862e+00 5.013626136959347e+00 9.088848716758030e+03 + 107880 9.670326495097444e-01 -5.993502047794760e+00 -5.987159575070494e+00 3.728231837077242e+00 4.764651296954453e+00 9.177657547700615e+03 + 107900 9.888016930385305e-01 -6.030899506786955e+00 -5.989985455488316e+00 3.501930440163577e+00 4.736865254149339e+00 9.186309039551335e+03 + 107920 9.377144814251274e-01 -5.956644639386639e+00 -5.983851575064303e+00 3.909684051777829e+00 4.753457616856986e+00 9.167528349413118e+03 + 107940 9.787994130944463e-01 -6.015486795063946e+00 -5.996247978634480e+00 3.614481959460570e+00 4.724954220595786e+00 9.205542765617138e+03 + 107960 9.843281532585626e-01 -6.020525992922789e+00 -6.037916112942096e+00 3.587887628327494e+00 4.488030868064256e+00 9.333813053910340e+03 + 107980 1.006577759305637e+00 -6.049906694269257e+00 -6.027051088687731e+00 3.416211189734049e+00 4.547451613876703e+00 9.300292467510315e+03 + 108000 1.007792624113868e+00 -6.051173229009590e+00 -5.975072988625884e+00 3.430511950858073e+00 4.867491307615452e+00 9.140698595960317e+03 + 108020 9.578872610042295e-01 -5.973400339117703e+00 -6.031913058730502e+00 3.809164602480075e+00 4.473175511649285e+00 9.315258989736814e+03 + 108040 1.035394544563628e+00 -6.082945044763728e+00 -5.970581747959491e+00 3.276589751924552e+00 4.921797190338468e+00 9.126969521424789e+03 + 108060 1.007928862634063e+00 -6.035159387982256e+00 -6.026269745332783e+00 3.477362094634328e+00 4.528407798395355e+00 9.297887202563712e+03 + 108080 9.762552055751421e-01 -5.983386764989389e+00 -6.017754570160534e+00 3.813788855095873e+00 4.616443599402495e+00 9.271628634960389e+03 + 108100 9.661842206673655e-01 -5.963424634231467e+00 -5.981938205644773e+00 3.898271788399441e+00 4.791963996378322e+00 9.161687185122346e+03 + 108120 9.983894343341578e-01 -6.003552826818973e+00 -5.974216255353281e+00 3.652919290565791e+00 4.821374423741561e+00 9.138069492753268e+03 + 108140 9.918204197366139e-01 -5.985365584028045e+00 -5.986631483767994e+00 3.788027504392182e+00 4.780758512188047e+00 9.176051185022587e+03 + 108160 1.044218242419497e+00 -6.053045906028509e+00 -5.936193665618321e+00 3.445424861284752e+00 5.116408508545818e+00 9.022218183525503e+03 + 108180 1.049795191774055e+00 -6.046370800901839e+00 -5.986225236722342e+00 3.409262810041716e+00 4.754627947056360e+00 9.174794689781587e+03 + 108200 1.046629344324322e+00 -6.023613088810496e+00 -5.975790030657677e+00 3.603843614739521e+00 4.878451015247338e+00 9.142873346873555e+03 + 108220 1.034026386291538e+00 -5.979832161037760e+00 -5.994817183108070e+00 3.876179207270677e+00 4.790132891618283e+00 9.201131592581303e+03 + 108240 1.042748650185279e+00 -5.954753689730257e+00 -5.972206388978856e+00 3.963363666901098e+00 4.863147567019165e+00 9.131916574201899e+03 + 108260 1.058552655046172e+00 -5.925916149635347e+00 -5.968381135918399e+00 4.118913424849318e+00 4.875072902176639e+00 9.120247407986039e+03 + 108280 1.121228639765208e+00 -5.960510866769003e+00 -6.007732073870708e+00 3.977343474804459e+00 4.706191996168288e+00 9.240791226624277e+03 + 108300 1.119809421473405e+00 -5.912040140189669e+00 -6.009281403595688e+00 4.212513482700720e+00 4.654139100186479e+00 9.245548574075301e+03 + 108320 1.113724628032877e+00 -5.877409984722402e+00 -6.036560791810801e+00 4.350624349947770e+00 4.436755787138385e+00 9.329587536322269e+03 + 108340 1.091997171550659e+00 -5.833247581331335e+00 -6.006654288138211e+00 4.625160148769142e+00 4.629432003682910e+00 9.237466576421702e+03 + 108360 1.136432382695131e+00 -5.901194085098821e+00 -6.067150422643287e+00 4.222657682757301e+00 4.269710710916736e+00 9.424334697421924e+03 + 108380 1.101512320390406e+00 -5.867636369883865e+00 -6.029342995790868e+00 4.425536591651806e+00 4.496992121674306e+00 9.307339610666639e+03 + 108400 1.085866092475554e+00 -5.874114241931119e+00 -6.039171865442360e+00 4.403011681691066e+00 4.455225264904833e+00 9.337643073105202e+03 + 108420 1.046459234034156e+00 -5.856012742676384e+00 -6.036026687931843e+00 4.466510506924799e+00 4.432842576199960e+00 9.327947018098650e+03 + 108440 1.072581349394894e+00 -5.936241393588887e+00 -6.025493230587949e+00 3.970342623407929e+00 4.457844763682177e+00 9.295482492300893e+03 + 108460 1.138263056712605e+00 -6.075177556874140e+00 -5.990105094531449e+00 3.247273241067393e+00 4.735772484760123e+00 9.186705115655610e+03 + 108480 1.043526813056567e+00 -5.970696228775783e+00 -5.958964684950148e+00 3.889321676191568e+00 4.956686016288907e+00 9.091481146536702e+03 + 108500 9.910369997116812e-01 -5.917734707118197e+00 -6.031770501755411e+00 4.163961445622183e+00 4.509150265833111e+00 9.314802584518116e+03 + 108520 1.066360228787311e+00 -6.050117812948556e+00 -5.972036919260441e+00 3.383589081591321e+00 4.831941656127720e+00 9.131436365403984e+03 + 108540 9.935929381917005e-01 -5.960118640667429e+00 -6.000595589085390e+00 3.990072758695040e+00 4.757647857091582e+00 9.218878231269160e+03 + 108560 9.871101838038556e-01 -5.966371144721142e+00 -6.035431255289570e+00 3.875120351084051e+00 4.478566509182566e+00 9.326128842770582e+03 + 108580 9.988027618260510e-01 -5.998485314575362e+00 -6.022675865347211e+00 3.668298895532763e+00 4.529393009525171e+00 9.286817660012268e+03 + 108600 1.008983452209837e+00 -6.028763334400829e+00 -6.022137754317967e+00 3.497072351847761e+00 4.535117457988763e+00 9.285137544068237e+03 + 108620 9.633432379768454e-01 -5.975871408905777e+00 -6.004077066724016e+00 3.878419761373265e+00 4.716458509369494e+00 9.229561802513781e+03 + 108640 9.940138688488573e-01 -6.032284649167714e+00 -5.982738335166887e+00 3.590930254809717e+00 4.875432857069775e+00 9.164132591002854e+03 + 108660 9.413470609314988e-01 -5.962446714797154e+00 -6.069148927231059e+00 3.824436095432274e+00 4.211735479522778e+00 9.430567418916084e+03 + 108680 9.802546471809676e-01 -6.029451730653774e+00 -6.033706477991654e+00 3.473468260914199e+00 4.449036843280070e+00 9.320821398572063e+03 + 108700 1.027725079374186e+00 -6.109278824852630e+00 -5.972851519729304e+00 3.131610960347440e+00 4.914997658422822e+00 9.133905948194630e+03 + 108720 9.490397030800369e-01 -5.998855324861219e+00 -5.980155114859347e+00 3.793680379794549e+00 4.901059879473443e+00 9.156226630644516e+03 + 108740 1.005533854165843e+00 -6.086167705023220e+00 -5.995261894382292e+00 3.290874282801161e+00 4.812869515130106e+00 9.202509299772290e+03 + 108760 1.010690249427180e+00 -6.094657833179383e+00 -5.987690738573860e+00 3.208530691728950e+00 4.822752302058256e+00 9.179294819702964e+03 + 108780 9.780972571275032e-01 -6.043566516002691e+00 -6.014143392552100e+00 3.468346843741565e+00 4.637298971808496e+00 9.260530247554118e+03 + 108800 1.042822132245270e+00 -6.134134434489585e+00 -5.958270316878821e+00 3.023645003871175e+00 5.033483982076431e+00 9.089385316166117e+03 + 108820 9.840846975343055e-01 -6.037083821250082e+00 -5.973136644837989e+00 3.524140168356381e+00 4.891334751108182e+00 9.134750210665215e+03 + 108840 1.039330307557075e+00 -6.101680175406879e+00 -5.950679513766199e+00 3.163229312769438e+00 5.030298479187097e+00 9.066252246320968e+03 + 108860 1.023164587913385e+00 -6.049128019023454e+00 -5.988820307536959e+00 3.445397096546722e+00 4.791693308490370e+00 9.182763730873607e+03 + 108880 1.035348253794887e+00 -6.031856360273241e+00 -5.975833578930996e+00 3.524655196024047e+00 4.846346675988609e+00 9.143027422128192e+03 + 108900 1.047849406190153e+00 -6.011071695086987e+00 -5.988407637742141e+00 3.652764058119518e+00 4.782904582645161e+00 9.181462733942742e+03 + 108920 9.939360892313033e-01 -5.895164686623943e+00 -5.959024703577869e+00 4.232749909249451e+00 4.866055809594319e+00 9.091680178126682e+03 + 108940 9.846035156576868e-01 -5.847345415963871e+00 -6.004547916312609e+00 4.533700038318650e+00 4.631018954307886e+00 9.230977732204572e+03 + 108960 1.131999404142116e+00 -6.035638888288033e+00 -5.992156619310638e+00 3.475027203863869e+00 4.724709121191450e+00 9.193013372943025e+03 + 108980 1.096017075806334e+00 -5.963665985471895e+00 -6.027486368214948e+00 3.926841347343595e+00 4.560374833460671e+00 9.301619228888563e+03 + 109000 1.071374861047102e+00 -5.921857948150428e+00 -6.015731018560206e+00 4.102416160704106e+00 4.563382463600457e+00 9.265394335857378e+03 + 109020 1.050562903862386e+00 -5.893751274170635e+00 -6.044277118128194e+00 4.272204753457613e+00 4.407862063654240e+00 9.353439413579657e+03 + 109040 1.030824868618795e+00 -5.876447335507225e+00 -6.003043499914131e+00 4.353556674639528e+00 4.626621907921945e+00 9.226318264176107e+03 + 109060 1.033604778888065e+00 -5.896443473897992e+00 -6.001981862777876e+00 4.200120510219024e+00 4.594102749257833e+00 9.223115707474957e+03 + 109080 1.106161584843847e+00 -6.024640705380095e+00 -5.981279727269389e+00 3.604383666543284e+00 4.853369112944636e+00 9.159657024244645e+03 + 109100 1.033231964313396e+00 -5.946444455944334e+00 -5.985022142408062e+00 3.978900125120686e+00 4.757381079568274e+00 9.171120154750051e+03 + 109120 9.876269523613225e-01 -5.912758749375993e+00 -6.002815204743119e+00 4.165612512063252e+00 4.648494409153786e+00 9.225660814900870e+03 + 109140 9.796151764542128e-01 -5.931844692645702e+00 -5.982099219874360e+00 4.069923210678621e+00 4.781353938468713e+00 9.162147846492171e+03 + 109160 1.021348174001046e+00 -6.019637389525847e+00 -6.009377132987840e+00 3.558210638735395e+00 4.617126619546204e+00 9.245856325416176e+03 + 109180 9.864313636525568e-01 -5.991396330537551e+00 -5.977123925876591e+00 3.773089372892673e+00 4.855043729103388e+00 9.146955366778560e+03 + 109200 9.992648982807234e-01 -6.027899174426158e+00 -6.006238402199268e+00 3.493128981718361e+00 4.617508487838826e+00 9.236221513557526e+03 + 109220 9.507465321641018e-01 -5.967352609448267e+00 -6.032226782623255e+00 3.831138718120705e+00 4.458621176504074e+00 9.316240680955110e+03 + 109240 9.548286817300414e-01 -5.979306804057134e+00 -6.002111151387452e+00 3.832755142011990e+00 4.701809050679959e+00 9.223519369275626e+03 + 109260 9.884290972072315e-01 -6.031239611695623e+00 -5.998417654467362e+00 3.536534901644072e+00 4.725003659230216e+00 9.212179682770451e+03 + 109280 9.834151871276842e-01 -6.023228864207642e+00 -5.988179589223485e+00 3.587618917715255e+00 4.788877278532059e+00 9.180789194056677e+03 + 109300 1.036567230066173e+00 -6.099299641284405e+00 -5.969092106912140e+00 3.172381708223077e+00 4.920053520139447e+00 9.122413674791265e+03 + 109320 9.679578484946022e-01 -5.994821535565626e+00 -5.955430637689165e+00 3.785556734164111e+00 5.011745365492490e+00 9.080726422925220e+03 + 109340 9.834047512615318e-01 -6.010773621916060e+00 -5.992756886123724e+00 3.690851090318712e+00 4.794305975319160e+00 9.194808689848158e+03 + 109360 9.956012354549679e-01 -6.020395257324511e+00 -6.032364968766105e+00 3.595110540348468e+00 4.526378604943979e+00 9.316679226212851e+03 + 109380 1.035574043301788e+00 -6.073748789494447e+00 -5.979035061685106e+00 3.293287654735710e+00 4.837148536718955e+00 9.152819277393572e+03 + 109400 1.049760804198806e+00 -6.087578085236004e+00 -5.986472840591839e+00 3.236716455522052e+00 4.817278416254890e+00 9.175577657813748e+03 + 109420 9.719260724463334e-01 -5.965723519916740e+00 -6.025300589039885e+00 3.912868587505332e+00 4.570767837078582e+00 9.294854782955441e+03 + 109440 1.018402745089736e+00 -6.026247558939794e+00 -5.991254221683763e+00 3.603880223154861e+00 4.804817380880435e+00 9.190221520398311e+03 + 109460 1.031688983865043e+00 -6.035960991454697e+00 -6.017875043539446e+00 3.525445716562874e+00 4.629298028283642e+00 9.272016881826910e+03 + 109480 9.695572974172975e-01 -5.935224831957745e+00 -6.028537432430114e+00 4.063885587726064e+00 4.528070195735468e+00 9.304867234046753e+03 + 109500 1.046958420043960e+00 -6.041268065038963e+00 -5.966747106560950e+00 3.500767393702673e+00 4.928678269364481e+00 9.115262193163153e+03 + 109520 1.090270988978025e+00 -6.094005153086807e+00 -5.963218423968783e+00 3.208294571520252e+00 4.959292209296867e+00 9.104468293235275e+03 + 109540 1.056001632649307e+00 -6.030414463092251e+00 -5.979046115147068e+00 3.541763183585401e+00 4.836728186712794e+00 9.152820374194976e+03 + 109560 1.038119230920159e+00 -5.988574254866263e+00 -5.950733838970689e+00 3.760596148347378e+00 4.977881672205202e+00 9.066403931545228e+03 + 109580 9.961409078650649e-01 -5.904724053191584e+00 -6.020991573326426e+00 4.120340703945420e+00 4.452714610990567e+00 9.281590406996314e+03 + 109600 1.044063384520297e+00 -5.947882838518247e+00 -5.992967543522778e+00 3.961965887005273e+00 4.703082534033705e+00 9.195480245905896e+03 + 109620 1.040926480769991e+00 -5.914499821219776e+00 -6.032490720204770e+00 4.131191331741499e+00 4.453669330737056e+00 9.317051747331614e+03 + 109640 1.082920502438609e+00 -5.951819894174999e+00 -6.004862717078037e+00 3.931153508749376e+00 4.626573411289817e+00 9.231993134576624e+03 + 109660 1.101285479710887e+00 -5.956814861768744e+00 -6.004983057744803e+00 3.964771896596972e+00 4.688182661298205e+00 9.232363255924425e+03 + 109680 9.614922758609575e-01 -5.733609425866431e+00 -6.116121088020961e+00 5.150074121195966e+00 3.953632963616239e+00 9.576933789071985e+03 + 109700 1.120908431582197e+00 -5.962582493462538e+00 -6.085113253712576e+00 3.809731732313087e+00 4.106141145383499e+00 9.480161421407649e+03 + 109720 1.097393060345488e+00 -5.934305121976575e+00 -6.038324310847176e+00 4.020292379949858e+00 4.422998100537413e+00 9.335074432797139e+03 + 109740 1.092681619239138e+00 -5.945968135621014e+00 -6.029719149121877e+00 3.974578891968682e+00 4.493667612019275e+00 9.308520763876155e+03 + 109760 1.009753177740830e+00 -5.854682898398876e+00 -6.072259685509589e+00 4.434514598894657e+00 4.185155017405952e+00 9.440211450159039e+03 + 109780 1.075444735283184e+00 -5.995001613216040e+00 -6.036343419233195e+00 3.723795064966561e+00 4.486404017192250e+00 9.328969597355430e+03 + 109800 1.057200953712549e+00 -6.018515239191535e+00 -5.975649211794074e+00 3.653962732401921e+00 4.900106095214447e+00 9.142449499845799e+03 + 109820 9.805722317992877e-01 -5.946627074264720e+00 -5.972794562200851e+00 3.989798963415276e+00 4.839541198280342e+00 9.133719750508528e+03 + 109840 1.015715352061382e+00 -6.031256190303548e+00 -6.012091204594137e+00 3.536538821153576e+00 4.646587134868968e+00 9.254199966831578e+03 + 109860 9.619907781113367e-01 -5.975019128796051e+00 -5.998830724125251e+00 3.860446230761955e+00 4.723716365549219e+00 9.213452248074602e+03 + 109880 9.440077034901591e-01 -5.965222098330212e+00 -6.007552001501960e+00 3.918267297324530e+00 4.675202442781013e+00 9.240150764518095e+03 + 109900 9.968722559302153e-01 -6.053399207995785e+00 -5.963856878494955e+00 3.410451152029331e+00 4.924617064653805e+00 9.106425656319872e+03 + 109920 1.020975221889988e+00 -6.093652552225520e+00 -5.989361597218387e+00 3.159559685134366e+00 4.758414487758450e+00 9.184423665767075e+03 + 109940 9.383441653129642e-01 -5.972668072657545e+00 -6.037299545798763e+00 3.822484188034607e+00 4.451360267569582e+00 9.331908492685199e+03 + 109960 9.806844041357176e-01 -6.035170723412321e+00 -6.002684448274636e+00 3.494304317469482e+00 4.680845536544905e+00 9.225290837285782e+03 + 109980 9.990682038725238e-01 -6.060006076587285e+00 -6.016862246907406e+00 3.353712370048687e+00 4.601450916556614e+00 9.268888958842381e+03 + 110000 9.631202086231339e-01 -6.002809976250192e+00 -6.005874094880684e+00 3.659482645654700e+00 4.641888002307587e+00 9.235099313055865e+03 + 110020 9.611245720795852e-01 -5.992889822065468e+00 -6.029167078762120e+00 3.714905329490233e+00 4.506595707650733e+00 9.306803991990879e+03 + 110040 1.028797441788246e+00 -6.082550197076841e+00 -6.006945346122595e+00 3.248726519696023e+00 4.682861273688175e+00 9.238409922028004e+03 + 110060 9.564285780334373e-01 -5.963322714899195e+00 -6.021796413237201e+00 3.913529682973274e+00 4.577764658340870e+00 9.284100803583491e+03 + 110080 9.880434341624579e-01 -5.997711831766342e+00 -6.000700076132957e+00 3.697328671067393e+00 4.680169709484969e+00 9.219196545943134e+03 + 110100 1.006582698211794e+00 -6.008610629086927e+00 -5.955897690913901e+00 3.666002733469244e+00 4.968688581759587e+00 9.082142369547591e+03 + 110120 9.703057559663454e-01 -5.930624168494820e+00 -5.976929453119625e+00 4.057681504556312e+00 4.791789394521046e+00 9.146342408172206e+03 + 110140 9.953056376542930e-01 -5.935332666473962e+00 -6.000599330313023e+00 4.008693505870512e+00 4.633922222123035e+00 9.218893570221764e+03 + 110160 1.049229454858271e+00 -5.973942696374966e+00 -6.036600023041097e+00 3.783620349174940e+00 4.423832283268049e+00 9.329760769761608e+03 + 110180 1.098867978695782e+00 -6.008545090263895e+00 -6.015627252486264e+00 3.590544821860889e+00 4.549877950418982e+00 9.265098357703577e+03 + 110200 1.042750463624591e+00 -5.892782361032745e+00 -6.026762851277297e+00 4.315512578022556e+00 4.546175869624483e+00 9.299367593520377e+03 + 110220 1.040539562264942e+00 -5.863759916786565e+00 -6.037094860470078e+00 4.406341668111525e+00 4.411025597984946e+00 9.331250021292490e+03 + 110240 1.164386694726540e+00 -6.029659843564120e+00 -5.985794098563074e+00 3.489739213850266e+00 4.741623109848378e+00 9.173476536973532e+03 + 110260 1.040737856130779e+00 -5.839594558293899e+00 -6.003955851669151e+00 4.554378784994449e+00 4.610590803605803e+00 9.229149871023656e+03 + 110280 1.069364266719630e+00 -5.884105812880772e+00 -5.994664386278433e+00 4.306675526811829e+00 4.671831089478520e+00 9.200647304044049e+03 + 110300 1.022153390399829e+00 -5.824630657952319e+00 -6.039247674385905e+00 4.537422445217691e+00 4.305058324980089e+00 9.337816893700789e+03 + 110320 1.060252341070120e+00 -5.906430202909847e+00 -5.955022245587648e+00 4.213787169289402e+00 4.934764140639170e+00 9.079425504201674e+03 + 110340 9.718075340336209e-01 -5.808616145030516e+00 -5.958398620750480e+00 4.702556102329972e+00 4.842481947982733e+00 9.089744411220006e+03 + 110360 1.035841199206488e+00 -5.949997274765876e+00 -5.959092543180784e+00 3.991535721389297e+00 4.939309282662661e+00 9.091863519050732e+03 + 110380 9.592101952972271e-01 -5.893121712471011e+00 -6.037116964068937e+00 4.192550958686418e+00 4.365707940817960e+00 9.331316901176097e+03 + 110400 9.823608946914413e-01 -5.984098956251469e+00 -5.972999393487472e+00 3.820829036454195e+00 4.884564443496858e+00 9.134344232084615e+03 + 110420 1.013173491719513e+00 -6.070197521170530e+00 -5.982384214923600e+00 3.253394441209471e+00 4.757632034744567e+00 9.163045137024965e+03 + 110440 9.789675755060403e-01 -6.041473844331204e+00 -5.966118407472591e+00 3.474153674525200e+00 4.906856254183523e+00 9.113337991835855e+03 + 110460 9.635393994322432e-01 -6.029603505291371e+00 -5.989897223155870e+00 3.548134263204532e+00 4.776133879753887e+00 9.186065489485087e+03 + 110480 9.557648819367943e-01 -6.022256242455477e+00 -5.996924896745223e+00 3.634743117029118e+00 4.780199624110476e+00 9.207595312484467e+03 + 110500 9.932126860718657e-01 -6.077263082402734e+00 -5.960563230525356e+00 3.256708408586148e+00 4.926817017309768e+00 9.096398363139187e+03 + 110520 9.902805527745164e-01 -6.069673469241910e+00 -5.949725644403873e+00 3.356427662863234e+00 5.045186634949146e+00 9.063373686886463e+03 + 110540 9.744059797145493e-01 -6.037837112187655e+00 -5.972816523927847e+00 3.517516025508486e+00 4.890874305199823e+00 9.133790109034328e+03 + 110560 1.020632573977142e+00 -6.094825978984220e+00 -5.950030128109451e+00 3.227607768490226e+00 5.059047951298657e+00 9.064272976955621e+03 + 110580 9.452707107029774e-01 -5.967730345072841e+00 -5.970065934599813e+00 3.875500332425703e+00 4.862089015930521e+00 9.125381979718586e+03 + 110600 1.019309082590168e+00 -6.057618538966750e+00 -5.987130422045842e+00 3.436303166811051e+00 4.841056842171743e+00 9.177568719826830e+03 + 110620 1.040498609831277e+00 -6.069505008997652e+00 -5.978609027118043e+00 3.305807019328733e+00 4.827745813389181e+00 9.151501828353839e+03 + 110640 1.050254441300103e+00 -6.063025790303131e+00 -5.933299428676935e+00 3.395923821584967e+00 5.140832665132169e+00 9.013427220328911e+03 + 110660 9.385242646590549e-01 -5.875049096126494e+00 -5.996865651036645e+00 4.344321535441987e+00 4.644832026096958e+00 9.207425008825892e+03 + 110680 1.120336050463750e+00 -6.120194008725425e+00 -5.955580040295480e+00 3.058796599611662e+00 5.004035480265694e+00 9.081201558968443e+03 + 110700 1.013168626702572e+00 -5.939011869429478e+00 -6.068713813266038e+00 4.008094373429469e+00 4.263325740608999e+00 9.429174101791055e+03 + 110720 1.049917044662529e+00 -5.978379985072857e+00 -6.034786454499979e+00 3.780598703830197e+00 4.456704027506726e+00 9.324140410769545e+03 + 110740 1.054238104650073e+00 -5.975061910265833e+00 -6.006857467526606e+00 3.790618550278536e+00 4.608043540140594e+00 9.238117385861266e+03 + 110760 1.039079266365442e+00 -5.944270993740131e+00 -6.005999106233224e+00 4.029051312960261e+00 4.674598938630386e+00 9.235466367755716e+03 + 110780 1.031102060715087e+00 -5.930456790381017e+00 -5.999880637149993e+00 4.076276895731818e+00 4.677634424278790e+00 9.216674770957639e+03 + 110800 1.023358507127717e+00 -5.920963910074263e+00 -6.018916869700291e+00 4.105990386737712e+00 4.543529334393548e+00 9.275235357998505e+03 + 110820 1.006398373435532e+00 -5.904639725831286e+00 -6.049029161825150e+00 4.201478573127780e+00 4.372372087458009e+00 9.368152024239178e+03 + 110840 1.056623712262526e+00 -5.995788987273284e+00 -6.040980236985921e+00 3.698406877903321e+00 4.438911728730065e+00 9.343289900107935e+03 + 110860 9.972251628018030e-01 -5.939796761295446e+00 -6.039693907786966e+00 4.037506353737175e+00 4.463881479549405e+00 9.339297643212347e+03 + 110880 9.592198037513756e-01 -5.927998376000270e+00 -6.023345097382271e+00 4.067756317997795e+00 4.520260688964897e+00 9.288824255847814e+03 + 110900 9.829859962525145e-01 -6.015343280423327e+00 -5.964625489544034e+00 3.596064278488242e+00 4.887293682269918e+00 9.108761485294366e+03 + 110920 9.487454265804381e-01 -6.008173971532840e+00 -5.955185922102647e+00 3.649323551225095e+00 4.953589130927416e+00 9.079979551916234e+03 + 110940 9.511061768808465e-01 -6.044391439362661e+00 -5.984232366907107e+00 3.432620983961473e+00 4.778063687587642e+00 9.168720291183789e+03 + 110960 9.280361683028384e-01 -6.031496510747698e+00 -5.985596211973620e+00 3.568973306901607e+00 4.832539925510641e+00 9.172890537695592e+03 + 110980 9.571644751094749e-01 -6.085219419682263e+00 -6.020541633198145e+00 3.238361646122894e+00 4.609751504969811e+00 9.280217090040311e+03 + 111000 9.701796510896282e-01 -6.110312440209889e+00 -5.989433284400640e+00 3.123573427678453e+00 4.817680246324068e+00 9.184654312588777e+03 + 111020 8.866554673615273e-01 -5.986150088528996e+00 -5.980331904583704e+00 3.833984817101279e+00 4.867393729676204e+00 9.156759282664309e+03 + 111040 9.129432837482182e-01 -6.017205420973212e+00 -5.975712858737922e+00 3.596978092740746e+00 4.835234806049034e+00 9.142617143169262e+03 + 111060 9.844397404442903e-01 -6.109103420142434e+00 -5.975588438591988e+00 3.109072886493152e+00 4.875736571932434e+00 9.142249663007911e+03 + 111080 9.530121645318024e-01 -6.042888832669734e+00 -5.998043567538266e+00 3.449367877648631e+00 4.706876329815865e+00 9.211039492559135e+03 + 111100 9.388601685257981e-01 -5.998881586847782e+00 -6.028894772639929e+00 3.681934574775942e+00 4.509594217431943e+00 9.305958985014502e+03 + 111120 1.039301080855108e+00 -6.122801636773787e+00 -5.987763371704681e+00 3.048530434077743e+00 4.823941049208536e+00 9.179549669897227e+03 + 111140 9.976725214012743e-01 -6.037267850458187e+00 -6.026784643688584e+00 3.472919239415998e+00 4.533115434958059e+00 9.299455626035586e+03 + 111160 1.010210495071028e+00 -6.036294383893769e+00 -5.984181089376712e+00 3.488179901336651e+00 4.787422502959855e+00 9.168530397922417e+03 + 111180 1.072961264572328e+00 -6.110295207886670e+00 -5.952541988131110e+00 3.099949071011195e+00 5.005792471079484e+00 9.071941674169731e+03 + 111200 1.084464179555679e+00 -6.111632032482323e+00 -5.980612463580215e+00 3.101807911846479e+00 4.854142551695144e+00 9.157638050425259e+03 + 111220 9.869635172823698e-01 -5.957175455639652e+00 -5.998248762763737e+00 3.920145342303890e+00 4.684296056723655e+00 9.211662888969862e+03 + 111240 9.965816174347820e-01 -5.963003739288662e+00 -5.967820764741450e+00 3.866999167447280e+00 4.839339061865090e+00 9.118514726182397e+03 + 111260 1.012492559853653e+00 -5.977527193624980e+00 -6.018373124498855e+00 3.790678268627816e+00 4.556134612662652e+00 9.273513239211621e+03 + 111280 1.044198950156115e+00 -6.020191924151532e+00 -5.984378984572420e+00 3.605697593475097e+00 4.811341034572851e+00 9.169129088064741e+03 + 111300 1.054459500615011e+00 -6.033957098565745e+00 -5.985062684108192e+00 3.519905436222747e+00 4.800664730424198e+00 9.171236467575005e+03 + 111320 1.044117566225115e+00 -6.018336685541890e+00 -6.022463271968491e+00 3.588713785517875e+00 4.565018287669155e+00 9.286144370951868e+03 + 111340 1.007505103893710e+00 -5.969370771097360e+00 -6.030745118547811e+00 3.862968864398240e+00 4.510547863688177e+00 9.311681642167521e+03 + 111360 1.003108600947063e+00 -5.968499892922689e+00 -5.994778950783719e+00 3.843908504567358e+00 4.693010087658261e+00 9.201025415808104e+03 + 111380 1.026109068760264e+00 -6.006699294381491e+00 -5.980844906485678e+00 3.667614500320164e+00 4.816074396571518e+00 9.158325321700066e+03 + 111400 1.022221720199890e+00 -6.005759916069312e+00 -5.992151760070488e+00 3.686074965427411e+00 4.764215103027992e+00 9.192970161087935e+03 + 111420 1.011455582069984e+00 -5.995376897274902e+00 -6.024178160360436e+00 3.708988395426534e+00 4.543607085808336e+00 9.291430458242688e+03 + 111440 1.049441418826775e+00 -6.057864876194119e+00 -6.013256880236789e+00 3.405464655671109e+00 4.661610671523157e+00 9.257791986275162e+03 + 111460 9.259409645439901e-01 -5.881603604596744e+00 -6.073774150711185e+00 4.288176323837981e+00 4.184703309752961e+00 9.444901557642659e+03 + 111480 1.002707778261402e+00 -6.002832452463512e+00 -6.022819112622283e+00 3.653955973128906e+00 4.539189477571576e+00 9.287223079423437e+03 + 111500 1.030942942534271e+00 -6.051301508455206e+00 -5.996251029151487e+00 3.415384108086705e+00 4.731492479282798e+00 9.205530545727815e+03 + 111520 1.017076605906306e+00 -6.038812430825541e+00 -5.996189391896944e+00 3.485710396622934e+00 4.730458482044897e+00 9.205353913624833e+03 + 111540 9.581669740423234e-01 -5.959201878599954e+00 -5.982409826241014e+00 3.915453435103102e+00 4.782189808329846e+00 9.163141407581621e+03 + 111560 1.017243167536467e+00 -6.051299809532679e+00 -5.969155447472887e+00 3.433502016922745e+00 4.905187655669017e+00 9.122613020683193e+03 + 111580 9.985404819389064e-01 -6.025588545757175e+00 -5.987357899504442e+00 3.586073755266193e+00 4.805600042222777e+00 9.178262268420607e+03 + 111600 1.008792048849457e+00 -6.042945226690936e+00 -6.003842325118068e+00 3.388512934435357e+00 4.613047846421226e+00 9.228834083556603e+03 + 111620 9.527035071335349e-01 -5.961354796597604e+00 -6.001857780212208e+00 3.874979571285106e+00 4.642405171553591e+00 9.222764819781971e+03 + 111640 9.567940024678132e-01 -5.968390068410855e+00 -6.003901515742824e+00 3.858731864837364e+00 4.654819638878484e+00 9.229022193472048e+03 + 111660 9.581173145250579e-01 -5.969323047754853e+00 -5.994188871407019e+00 3.833245364397062e+00 4.690461957012550e+00 9.199218630461657e+03 + 111680 9.860414743856749e-01 -6.005292048093176e+00 -5.989622569448708e+00 3.641316580426408e+00 4.731293151646927e+00 9.185194623570149e+03 + 111700 9.720208343400414e-01 -5.970871799810975e+00 -5.970053003121384e+00 3.937489624098453e+00 4.942191281398458e+00 9.125328035345126e+03 + 111720 9.858731657196810e-01 -5.971944923805778e+00 -6.010844801838994e+00 3.839557267397587e+00 4.616188147994190e+00 9.250367258129694e+03 + 111740 1.094052766796290e+00 -6.107430667717488e+00 -6.006957755363690e+00 3.151718821167374e+00 4.728649832035826e+00 9.238423671803836e+03 + 111760 9.948237200526550e-01 -5.938078568608679e+00 -5.997890997550368e+00 4.042903115957722e+00 4.699450893031082e+00 9.210590194779254e+03 + 111780 1.024111349153304e+00 -5.961750377572186e+00 -5.995234298828848e+00 3.892964138077342e+00 4.700694280601520e+00 9.202407251249891e+03 + 111800 9.562867134152923e-01 -5.839928141745638e+00 -6.041869790167105e+00 4.522661802155428e+00 4.363081606550264e+00 9.346015868615308e+03 + 111820 1.098943820642986e+00 -6.033955834114106e+00 -5.982584797602132e+00 3.530697631355523e+00 4.825678072649489e+00 9.163655036731603e+03 + 111840 1.021547300916882e+00 -5.908117171073567e+00 -5.992935637187204e+00 4.109151670633766e+00 4.622110912594052e+00 9.195331669872787e+03 + 111860 1.016044433773751e+00 -5.892484894995535e+00 -5.932244639194563e+00 4.306123303678435e+00 5.077816699687089e+00 9.010172580651140e+03 + 111880 1.010193762774610e+00 -5.876438481149404e+00 -5.964775614857632e+00 4.371523695960843e+00 4.864278204080937e+00 9.109146124748642e+03 + 111900 1.042076674799578e+00 -5.918358405720140e+00 -5.982956954619455e+00 4.118932715653557e+00 4.747997851280552e+00 9.164795757627700e+03 + 111920 1.101951494215065e+00 -6.007415611572959e+00 -6.004720752524827e+00 3.626181024245934e+00 4.641655321928397e+00 9.231543827222811e+03 + 111940 1.004792366321632e+00 -5.872560238250436e+00 -6.041681369273295e+00 4.315288843621746e+00 4.344169137878045e+00 9.345428903623328e+03 + 111960 9.891020717787372e-01 -5.866245142782811e+00 -6.020520060679699e+00 4.403258612924962e+00 4.517388160394644e+00 9.280108879642445e+03 + 111980 9.646819048927249e-01 -5.853640718450563e+00 -5.970993329466038e+00 4.481444131807985e+00 4.807587279099266e+00 9.128133336030747e+03 + 112000 1.000273219659092e+00 -5.929848344088561e+00 -5.972209898524761e+00 4.085433511789398e+00 4.842186910787376e+00 9.131891542073889e+03 + 112020 9.952701196776318e-01 -5.949505154545768e+00 -5.994267959804791e+00 3.939901353309772e+00 4.682866398490739e+00 9.199464150612839e+03 + 112040 9.831876944776364e-01 -5.959890807245308e+00 -6.031307682457808e+00 3.898668027070153e+00 4.488581277874252e+00 9.313397451882627e+03 + 112060 9.986925748245677e-01 -6.013158067671665e+00 -6.039441758460333e+00 3.574334089785746e+00 4.423409069889217e+00 9.338501388157551e+03 + 112080 1.024807964931206e+00 -6.080964003575213e+00 -5.982509141959550e+00 3.300827486099337e+00 4.866170537337069e+00 9.163433476880036e+03 + 112100 9.105349109430816e-01 -5.937056575263398e+00 -6.021345737336064e+00 3.997510544095430e+00 4.513509131768506e+00 9.282694683514219e+03 + 112120 9.695689814673774e-01 -6.045278058805998e+00 -5.998874838368845e+00 3.484412889854644e+00 4.750867362479929e+00 9.213614808155491e+03 + 112140 9.719615719381105e-01 -6.066199815492920e+00 -5.991497518718614e+00 3.307013031569649e+00 4.735965179790782e+00 9.190962664530844e+03 + 112160 9.307661445110871e-01 -6.016556900162037e+00 -6.000640175986045e+00 3.589764946361679e+00 4.681161239685331e+00 9.218994746664614e+03 + 112180 9.325026572385275e-01 -6.021276309598633e+00 -5.997920141879403e+00 3.590055352044957e+00 4.724170081444048e+00 9.210656416039723e+03 + 112200 9.402788289074294e-01 -6.029942778492273e+00 -5.958940721581043e+00 3.545442476910298e+00 4.953147275227382e+00 9.091450997725506e+03 + 112220 9.576763992823876e-01 -6.046839152563926e+00 -5.997214110574713e+00 3.458877110045404e+00 4.743831780597896e+00 9.208513415867432e+03 + 112240 1.024740756907708e+00 -6.131991389337621e+00 -6.014747545824420e+00 3.010143687572192e+00 4.683375980451139e+00 9.262398758921778e+03 + 112260 9.563909277022600e-01 -6.015098945706922e+00 -6.032719628221789e+00 3.616988552438676e+00 4.515807866646501e+00 9.317766806810538e+03 + 112280 9.572464347817711e-01 -5.998678167964043e+00 -5.957998505583766e+00 3.741094235931784e+00 4.974683152476743e+00 9.088541376034618e+03 + 112300 9.674091504536828e-01 -5.985701144768317e+00 -5.997355367384297e+00 3.811714774649651e+00 4.744794424903574e+00 9.208926278138148e+03 + 112320 1.030455677508121e+00 -6.041472490241775e+00 -6.003241661392651e+00 3.470111429852910e+00 4.689638765306223e+00 9.227000766063065e+03 + 112340 9.259715049899636e-01 -5.845149207743500e+00 -6.025620199471966e+00 4.545599578502467e+00 4.509307216201907e+00 9.295862684805636e+03 + 112360 1.016585069843441e+00 -5.935024635957183e+00 -5.993456340837836e+00 3.983617054062429e+00 4.648093162360611e+00 9.196945472534971e+03 + 112380 1.073978301749934e+00 -5.972896972143639e+00 -5.967212972542041e+00 3.818121995498756e+00 4.850760400807230e+00 9.116666191331067e+03 + 112400 1.049150561338063e+00 -5.898346710420149e+00 -6.012681530182111e+00 4.214997520913197e+00 4.558469292583829e+00 9.256026383049046e+03 + 112420 1.072697518930334e+00 -5.910679058150886e+00 -6.006899492990800e+00 4.199049556439601e+00 4.646536929524644e+00 9.238239737732440e+03 + 112440 1.057502319052854e+00 -5.882167453298014e+00 -6.036873023796963e+00 4.339670629441702e+00 4.451327303027075e+00 9.330600341851663e+03 + 112460 1.080942491502997e+00 -5.918900218435718e+00 -6.106161044423470e+00 4.064727585682991e+00 3.989446944342151e+00 9.545819753619544e+03 + 112480 1.081764404404194e+00 -5.932614230413456e+00 -6.077612648683335e+00 4.029118237964473e+00 4.196514881826123e+00 9.456854094707858e+03 + 112500 1.052253105512939e+00 -5.907556846406853e+00 -6.019392671500177e+00 4.185554415741237e+00 4.543375801517366e+00 9.276677513339251e+03 + 112520 1.032434575247721e+00 -5.897393171625922e+00 -6.058819443713711e+00 4.201241459216261e+00 4.274306824253308e+00 9.398507687415284e+03 + 112540 1.030545415131917e+00 -5.920357767946715e+00 -6.063940979444839e+00 4.086653014671944e+00 4.262175994819551e+00 9.414385297975292e+03 + 112560 1.086067302305417e+00 -6.031175039114887e+00 -6.009718872193008e+00 3.519374192958451e+00 4.642578823754977e+00 9.246899930044869e+03 + 112580 1.058996149520414e+00 -6.021043951851968e+00 -6.003176345591795e+00 3.614574664025180e+00 4.717173224174222e+00 9.226783560073258e+03 + 112600 9.793396601989561e-01 -5.932216712257886e+00 -6.002587990548997e+00 4.084878919041159e+00 4.680796149173480e+00 9.224964165338599e+03 + 112620 1.004912867593625e+00 -5.995654603937886e+00 -6.028416876949773e+00 3.638560213030026e+00 4.450434171450405e+00 9.304497676896419e+03 + 112640 1.004089811051313e+00 -6.020515042384654e+00 -6.051469922625998e+00 3.558287702813945e+00 4.380539990215913e+00 9.375743901785163e+03 + 112660 9.645723670036118e-01 -5.989006032845529e+00 -5.974320488002284e+00 3.790109563759498e+00 4.874436234830127e+00 9.138380575555060e+03 + 112680 9.884977642803940e-01 -6.043358507795261e+00 -5.954227521119257e+00 3.426433439278175e+00 4.938237357747407e+00 9.077052807491404e+03 + 112700 9.319373496773289e-01 -5.972598627793422e+00 -5.994933681160363e+00 3.838944527040035e+00 4.710693194268723e+00 9.201491819772767e+03 + 112720 9.497699035251898e-01 -6.007924893935157e+00 -6.005452419322860e+00 3.632188662791269e+00 4.646385994629287e+00 9.233772803675696e+03 + 112740 9.659741553597003e-01 -6.035964785071886e+00 -6.002835984412339e+00 3.512736053932863e+00 4.702966753985311e+00 9.225745889049713e+03 + 112760 9.878459137632032e-01 -6.069517415971601e+00 -5.978534584907898e+00 3.352062733278227e+00 4.874500228793618e+00 9.151267776051283e+03 + 112780 9.267327416871275e-01 -5.976193519687730e+00 -6.030640305123512e+00 3.844602990198156e+00 4.531961122613078e+00 9.311363452010466e+03 + 112800 1.030988178292339e+00 -6.124332217241923e+00 -6.024827010025408e+00 2.979627921094329e+00 4.551002219312609e+00 9.293445646786044e+03 + 112820 9.573600814357989e-01 -6.005070676031893e+00 -5.999772476785472e+00 3.669592783018412e+00 4.700015862985047e+00 9.216356461911499e+03 + 112840 9.625066142590142e-01 -5.999313645800932e+00 -5.975394104244506e+00 3.742130623970168e+00 4.879480333124258e+00 9.141658172201494e+03 + 112860 1.000223116435450e+00 -6.035475408564502e+00 -6.011638484268660e+00 3.463992387933259e+00 4.600867695992094e+00 9.252805899575094e+03 + 112880 9.796775322300273e-01 -5.976215615227066e+00 -5.981427231922667e+00 3.803589224342494e+00 4.773663314781273e+00 9.160115322228879e+03 + 112900 1.045075282487091e+00 -6.036851775775834e+00 -5.993635544512214e+00 3.463841315747701e+00 4.711995603353579e+00 9.197515948709299e+03 + 112920 1.048386256654613e+00 -5.996244777719573e+00 -6.046708848945295e+00 3.681009601399425e+00 4.391237095131547e+00 9.360985715208475e+03 + 112940 1.070512408497728e+00 -5.989387822866028e+00 -5.994642261346851e+00 3.738666304127601e+00 4.708494505248989e+00 9.200608828311737e+03 + 112960 1.022283385531610e+00 -5.886939445506356e+00 -6.024126527743179e+00 4.272420778951791e+00 4.484671323115589e+00 9.291247688067033e+03 + 112980 1.115675866707718e+00 -6.002315706637216e+00 -6.014920685509095e+00 3.684365282262843e+00 4.611985542966334e+00 9.262900857708491e+03 + 113000 1.060335582351835e+00 -5.908139866673400e+00 -5.998519895613097e+00 4.173583672431638e+00 4.654607559995626e+00 9.212511049526458e+03 + 113020 1.034670112987123e+00 -5.867353379899839e+00 -6.019409363165813e+00 4.413821900247057e+00 4.540692913746470e+00 9.276715227762228e+03 + 113040 1.141237997598533e+00 -6.029430241886066e+00 -5.997439811172407e+00 3.495613069831209e+00 4.679307073492200e+00 9.209187221529104e+03 + 113060 1.055781843227094e+00 -5.914628454534479e+00 -6.024236306927694e+00 4.148217086546273e+00 4.518831836344092e+00 9.291593436316880e+03 + 113080 1.053783059944841e+00 -5.930180779357594e+00 -6.047270869252380e+00 4.068558972693975e+00 4.396209556885267e+00 9.362729368770046e+03 + 113100 1.041859784514301e+00 -5.936857472160328e+00 -6.042090870579051e+00 4.044925595778864e+00 4.440659137242784e+00 9.346714702184325e+03 + 113120 1.079676503534686e+00 -6.019700875152092e+00 -6.010748165792327e+00 3.615733691687245e+00 4.667141534258310e+00 9.250087480648757e+03 + 113140 1.047653370211837e+00 -5.998932750542533e+00 -6.042124081880833e+00 3.687025797822140e+00 4.439014489440697e+00 9.346827334422460e+03 + 113160 1.061478853278668e+00 -6.042996788701249e+00 -6.011250244469323e+00 3.513862036748704e+00 4.696155606490267e+00 9.251635312133261e+03 + 113180 9.773386402307768e-01 -5.937303601115458e+00 -6.030735758119216e+00 4.057373000202097e+00 4.520871096106948e+00 9.311629600985460e+03 + 113200 9.591626239526742e-01 -5.921650154052769e+00 -6.026521183069956e+00 4.127987753376452e+00 4.525802076020471e+00 9.298639362100696e+03 + 113220 1.045501026155711e+00 -6.058042673847188e+00 -6.005814390518827e+00 3.348485715733249e+00 4.648388600905424e+00 9.234916754292812e+03 + 113240 1.062387515565731e+00 -6.091272855442794e+00 -5.964204541816077e+00 3.210920071218257e+00 4.940565991820851e+00 9.107506990230444e+03 + 113260 1.032691929171520e+00 -6.054171417824201e+00 -5.954454391598771e+00 3.393944449889123e+00 4.966535045635477e+00 9.077771354326114e+03 + 113280 1.011860807162704e+00 -6.028263210383630e+00 -5.958312414939830e+00 3.598670383591397e+00 5.000338675880303e+00 9.089506320760129e+03 + 113300 9.601300087146339e-01 -5.953293501441658e+00 -5.987637308762626e+00 3.976000002018074e+00 4.778792545694070e+00 9.179132820528668e+03 + 113320 9.861743561700556e-01 -5.991146098974784e+00 -6.015228203995212e+00 3.754075165184242e+00 4.615791991463237e+00 9.263838293053153e+03 + 113340 1.051334803800843e+00 -6.088325229166065e+00 -5.981820782825997e+00 3.193558916580670e+00 4.805123928975144e+00 9.161335701550252e+03 + 113360 9.562684887234416e-01 -5.949354374167957e+00 -5.977655338012585e+00 3.986241936244888e+00 4.823733422289032e+00 9.148561663111115e+03 + 113380 9.803688533533917e-01 -5.985197739206146e+00 -5.960369633253324e+00 3.740569820497702e+00 4.883136647015786e+00 9.095780375162751e+03 + 113400 9.058467008821085e-01 -5.869285167229254e+00 -5.975712677969668e+00 4.479524910426859e+00 4.868401674151346e+00 9.142635395726602e+03 + 113420 1.020454566775255e+00 -6.029236701803288e+00 -6.020688044482607e+00 3.539784626989305e+00 4.588872340225105e+00 9.280676011377487e+03 + 113440 9.764899578355382e-01 -5.955350644038475e+00 -6.019236645994813e+00 3.905336091516145e+00 4.538492781956005e+00 9.276220823039212e+03 + 113460 1.001756547813290e+00 -5.982426240245941e+00 -6.057922556079553e+00 3.757750551901283e+00 4.324239023367566e+00 9.395665108339999e+03 + 113480 1.015196367003099e+00 -5.990564479473477e+00 -5.969063691067853e+00 3.733970041229139e+00 4.857430895490484e+00 9.122340691189223e+03 + 113500 1.042225537171450e+00 -6.016077711191711e+00 -5.985921560495115e+00 3.575495813705442e+00 4.748657097654534e+00 9.173872825731221e+03 + 113520 1.007319428514144e+00 -5.946725374094977e+00 -6.003418236148338e+00 3.982075667860210e+00 4.656536480757762e+00 9.227545059481952e+03 + 113540 1.050219067217656e+00 -5.989733901266715e+00 -6.025904823883949e+00 3.747126187631754e+00 4.539427152531409e+00 9.296750135214812e+03 + 113560 1.003340680244085e+00 -5.900939500241304e+00 -6.015415308884916e+00 4.195501414726739e+00 4.538163606420983e+00 9.264405088554324e+03 + 113580 1.022698701296181e+00 -5.909868150688153e+00 -5.987593712232410e+00 4.193811383902975e+00 4.747499181524073e+00 9.178987311308834e+03 + 113600 1.032740644715201e+00 -5.903379258879385e+00 -6.000433707116976e+00 4.203656646855347e+00 4.646354985947773e+00 9.218373224810033e+03 + 113620 1.047077432127802e+00 -5.906702091021727e+00 -6.007059782127608e+00 4.212156969808298e+00 4.635887577175825e+00 9.238708274640712e+03 + 113640 1.052955777376649e+00 -5.900340703230023e+00 -6.041548875597170e+00 4.181817500390880e+00 4.370978322764675e+00 9.345036322525064e+03 + 113660 1.038067852969595e+00 -5.869296930984168e+00 -6.055918359468057e+00 4.371771168167756e+00 4.300162046240543e+00 9.389493057526242e+03 + 113680 1.056589186956626e+00 -5.895449524631271e+00 -6.031407265817788e+00 4.257625785866979e+00 4.476935396581545e+00 9.313717935990524e+03 + 113700 1.050538345841123e+00 -5.895524532352146e+00 -6.044808932132742e+00 4.260273794575599e+00 4.403059669349215e+00 9.355113587131962e+03 + 113720 1.074885998847172e+00 -5.954350361887677e+00 -6.025857223326557e+00 3.914453707121072e+00 4.503850243087978e+00 9.296584508895930e+03 + 113740 1.053075397223026e+00 -5.954744155927774e+00 -6.001508083760733e+00 3.898295665235451e+00 4.629769954924154e+00 9.221686030258621e+03 + 113760 1.025585563791690e+00 -5.957370283479980e+00 -6.001640570047318e+00 3.900885532488576e+00 4.646678696214220e+00 9.222073916126019e+03 + 113780 8.998515792944268e-01 -5.816606662768066e+00 -6.027392709221391e+00 4.645075236218830e+00 4.434709138448574e+00 9.301294051286970e+03 + 113800 9.811905624752199e-01 -5.973878343877914e+00 -5.982605605038614e+00 3.835221682638848e+00 4.785108398514804e+00 9.163714929966771e+03 + 113820 9.934160151628730e-01 -6.021666903517557e+00 -5.997696693279383e+00 3.536254321636803e+00 4.673894978202444e+00 9.210002738143923e+03 + 113840 9.737065389766182e-01 -6.015403846106145e+00 -5.977399969508779e+00 3.644048051755810e+00 4.862272192258784e+00 9.147819552461540e+03 + 113860 9.419595028828395e-01 -5.983252814457114e+00 -5.986243341309979e+00 3.807917441058289e+00 4.790745373086603e+00 9.174864569835896e+03 + 113880 1.014161182161389e+00 -6.099633189523920e+00 -6.020831043642458e+00 3.124665725130521e+00 4.577159841374538e+00 9.281129047288558e+03 + 113900 9.425815441541968e-01 -6.000270028524186e+00 -6.055117291191817e+00 3.625014716736513e+00 4.310073246912506e+00 9.387038041916008e+03 + 113920 9.786022812600489e-01 -6.057628175858474e+00 -6.013084054052003e+00 3.371910455765320e+00 4.627689696358651e+00 9.257257672631400e+03 + 113940 9.867476542686633e-01 -6.068765361976183e+00 -6.000289986208443e+00 3.300645310957464e+00 4.693841515145977e+00 9.217953097546868e+03 + 113960 1.003422502165611e+00 -6.090572723931144e+00 -5.998975343525998e+00 3.197176461449330e+00 4.723142794384483e+00 9.213921152947407e+03 + 113980 9.627326098706298e-01 -6.025589447105665e+00 -6.001838292673305e+00 3.561306535963781e+00 4.697689340193664e+00 9.222713135366852e+03 + 114000 9.796489269414600e-01 -6.041866416395470e+00 -5.989062316660795e+00 3.448739692527652e+00 4.751949004612179e+00 9.183519440488215e+03 + 114020 9.346380606295448e-01 -5.962108933495319e+00 -5.987031048555338e+00 3.921498454817052e+00 4.778391813457584e+00 9.177270822845239e+03 + 114040 9.751387997110569e-01 -6.001678021620756e+00 -5.998260281481974e+00 3.658858094438387e+00 4.678483287208852e+00 9.211716054873848e+03 + 114060 9.860131812443126e-01 -5.991667307521560e+00 -6.027757424382947e+00 3.703877210246245e+00 4.496642174300626e+00 9.302456102718763e+03 + 114080 9.921474886988131e-01 -5.971054936866729e+00 -6.012756016254434e+00 3.824063149614919e+00 4.584609098549535e+00 9.256245319786511e+03 + 114100 1.019828524285505e+00 -5.976747753341808e+00 -6.044445306247016e+00 3.764883925489777e+00 4.376154100545620e+00 9.353989732692255e+03 + 114120 9.882021164453505e-01 -5.889493609194682e+00 -6.077097719552444e+00 4.256889331022283e+00 4.179637497705761e+00 9.455256473250043e+03 + 114140 1.030486584176072e+00 -5.916341212573789e+00 -6.062143370503573e+00 4.123738650521107e+00 4.286520096877266e+00 9.408800733404629e+03 + 114160 1.063359669427315e+00 -5.936238270127506e+00 -6.012069530042528e+00 4.047096240272996e+00 4.611661410991393e+00 9.254142593007815e+03 + 114180 1.050541370107577e+00 -5.893609155871461e+00 -6.025051878750728e+00 4.274310188340356e+00 4.519545732871980e+00 9.294108985563995e+03 + 114200 1.094432762963120e+00 -5.942923317653832e+00 -5.989601917072211e+00 4.032676581092327e+00 4.764640839742079e+00 9.185155980144298e+03 + 114220 1.088926875207340e+00 -5.925776214413763e+00 -6.010835869172358e+00 4.058571577960684e+00 4.570145877397798e+00 9.250367507081599e+03 + 114240 1.069264724042458e+00 -5.899449273746848e+00 -6.032158363066292e+00 4.229375104227945e+00 4.467338976690493e+00 9.315956349086206e+03 + 114260 1.083421741865366e+00 -5.933198956609873e+00 -5.972542681227511e+00 4.065550062417451e+00 4.839632307241267e+00 9.132938352588442e+03 + 114280 1.083022835165377e+00 -5.959972517503360e+00 -6.007257074784797e+00 3.918675217654094e+00 4.647159972482491e+00 9.239334848276543e+03 + 114300 1.082392150885630e+00 -6.012394619496114e+00 -6.009602066305315e+00 3.608715721067218e+00 4.624750993634994e+00 9.246561673501015e+03 + 114320 9.700264706495696e-01 -5.927630750787491e+00 -6.036043276474571e+00 4.120490663887840e+00 4.497969164608500e+00 9.328029763383518e+03 + 114340 9.954101226594214e-01 -6.040689383524455e+00 -5.947270380907034e+00 3.482128612807795e+00 5.018554982380966e+00 9.055872356505424e+03 + 114360 9.292239177038009e-01 -5.982980781215915e+00 -5.994091202285284e+00 3.761922049463488e+00 4.698124292351068e+00 9.198894668707511e+03 + 114380 9.619820502619039e-01 -6.049098354656472e+00 -6.000154781430158e+00 3.409741706612032e+00 4.690783278071005e+00 9.217523716071326e+03 + 114400 9.768387010777391e-01 -6.079741828497829e+00 -6.031865078037186e+00 3.283852798223473e+00 4.558768508271672e+00 9.315147493199109e+03 + 114420 9.629497813635184e-01 -6.064177752355752e+00 -6.009004013035639e+00 3.401914680615440e+00 4.718730829900094e+00 9.244738799006736e+03 + 114440 9.147826953136544e-01 -5.994525523149212e+00 -6.043154360747564e+00 3.713830790271474e+00 4.434596479493442e+00 9.349998078941147e+03 + 114460 9.553838963361226e-01 -6.051923662995337e+00 -5.992843193483983e+00 3.419891406634385e+00 4.759140605241692e+00 9.195092019792442e+03 + 114480 9.452436536673279e-01 -6.029178878870180e+00 -5.975355601258018e+00 3.512169287380464e+00 4.821230876554790e+00 9.141582582355402e+03 + 114500 9.823228282023926e-01 -6.070902426801348e+00 -5.956711942374866e+00 3.317638853818237e+00 4.973338286315450e+00 9.084652138583035e+03 + 114520 1.000876255782605e+00 -6.078013754265454e+00 -5.955857762718504e+00 3.264614436873646e+00 4.966053043914828e+00 9.082039300003080e+03 + 114540 1.014442520101913e+00 -6.073646691955214e+00 -5.978861084486212e+00 3.310197862950817e+00 4.854471489063180e+00 9.152267007072856e+03 + 114560 9.693961845560765e-01 -5.978953256507222e+00 -5.984412319966665e+00 3.853441256137522e+00 4.822094468966064e+00 9.169241941284421e+03 + 114580 1.007929287847707e+00 -6.009380052625222e+00 -5.989660196653920e+00 3.604205485988093e+00 4.717439950613154e+00 9.185339913007292e+03 + 114600 9.725695802139834e-01 -5.928041434326980e+00 -6.027440444911514e+00 4.070928579763370e+00 4.500164079039803e+00 9.301462623733027e+03 + 114620 1.043693670447073e+00 -6.006573145835667e+00 -5.991770925698002e+00 3.693262985818083e+00 4.778259624484720e+00 9.191797036355747e+03 + 114640 1.079952694695270e+00 -6.037249395428407e+00 -5.960907062360873e+00 3.549450785652990e+00 4.987820276064634e+00 9.097429239082783e+03 + 114660 9.383260575810518e-01 -5.809376018439686e+00 -6.023460614362256e+00 4.713333259374333e+00 4.484026380102784e+00 9.289186510785454e+03 + 114680 1.055856191665085e+00 -5.968635032042426e+00 -6.064488785176799e+00 3.851559257967372e+00 4.301152174149445e+00 9.416074901282713e+03 + 114700 1.087402687028027e+00 -6.008766321105809e+00 -6.031468567514963e+00 3.600792002171556e+00 4.470432190128915e+00 9.313916101339617e+03 + 114720 1.064652066092353e+00 -5.974993807848179e+00 -6.000377929022475e+00 3.786046499451994e+00 4.640286947489125e+00 9.218214015278099e+03 + 114740 1.006319703212765e+00 -5.893091868232040e+00 -6.011445934295292e+00 4.272232351077165e+00 4.592624988509443e+00 9.252194207029503e+03 + 114760 1.071149147041094e+00 -6.000529432815002e+00 -5.967311005429825e+00 3.672660602337353e+00 4.863405952918062e+00 9.116976053116683e+03 + 114780 1.016526094179888e+00 -5.934390990105738e+00 -6.004028110364219e+00 4.006024034276619e+00 4.606156913442891e+00 9.229398661319876e+03 + 114800 1.046816526885964e+00 -6.001060693738724e+00 -5.997184541812818e+00 3.627430759602520e+00 4.649688223793648e+00 9.208408159921230e+03 + 114820 1.013846254401766e+00 -5.981779559520774e+00 -6.019890306189137e+00 3.770930768939599e+00 4.552092963950869e+00 9.278222826777095e+03 + 114840 9.964909028261082e-01 -5.996423795028862e+00 -5.999685462779331e+00 3.676494015394494e+00 4.657765014429852e+00 9.216076650422887e+03 + 114860 9.723222901295113e-01 -6.002709096471598e+00 -6.002248431047660e+00 3.655093696980362e+00 4.657738909132361e+00 9.223920683375436e+03 + 114880 9.400416672204666e-01 -5.995245773632248e+00 -5.965695124989861e+00 3.739202590417953e+00 4.908886987870634e+00 9.112022044677051e+03 + 114900 9.510716716685754e-01 -6.041368257058982e+00 -5.972286449209109e+00 3.450129316652240e+00 4.846807747701426e+00 9.132180604290528e+03 + 114920 9.681076098745554e-01 -6.086575142489485e+00 -5.997171769049364e+00 3.224702423195043e+00 4.738070428615547e+00 9.208359732871302e+03 + 114940 9.239029819038312e-01 -6.032451052621890e+00 -6.038879119918727e+00 3.494118426333549e+00 4.457207469174907e+00 9.336769979537325e+03 + 114960 9.480145236825330e-01 -6.071989603815435e+00 -6.011606522188714e+00 3.273176789605037e+00 4.619905788557350e+00 9.252735812887746e+03 + 114980 9.765913709031915e-01 -6.112709121477099e+00 -5.998737288213675e+00 3.062756191339892e+00 4.717200095022669e+00 9.213191822856972e+03 + 115000 9.178963608371304e-01 -6.020827292474923e+00 -6.040121661787843e+00 3.548176375250645e+00 4.437385120861856e+00 9.340643001495084e+03 + 115020 9.241329626305060e-01 -6.020551123817016e+00 -6.017852294230958e+00 3.584223887318436e+00 4.599720984444112e+00 9.271947677248656e+03 + 115040 1.030702678947415e+00 -6.167277443705819e+00 -5.979512353629204e+00 2.738371741343185e+00 4.816547945116891e+00 9.154274337241171e+03 + 115060 8.892205839238039e-01 -5.944257832735749e+00 -5.981175709446179e+00 4.003795115143277e+00 4.791806954049037e+00 9.159352679028119e+03 + 115080 9.509065594376679e-01 -6.019452518676124e+00 -5.987881299725442e+00 3.604992694073274e+00 4.786279518918430e+00 9.179882611404017e+03 + 115100 1.022923552001368e+00 -6.108456411059230e+00 -6.010954280589351e+00 3.103844461030743e+00 4.663716782594715e+00 9.250711568894401e+03 + 115120 9.289438805474236e-01 -5.954300757429904e+00 -6.002013976914299e+00 3.932351804469786e+00 4.658375114593535e+00 9.223225970910233e+03 + 115140 1.015525836753969e+00 -6.068735540084957e+00 -5.980260312572714e+00 3.390255140412124e+00 4.898293588284629e+00 9.156527295758091e+03 + 115160 1.007834078863773e+00 -6.041232032873965e+00 -5.968182306532304e+00 3.494860377152448e+00 4.914323210214880e+00 9.119632628825573e+03 + 115180 9.715186788968777e-01 -5.972541205707669e+00 -6.018480680356728e+00 3.840614558254898e+00 4.576822985709279e+00 9.273845887553160e+03 + 115200 9.958129441781630e-01 -5.996397689835851e+00 -5.972069949272341e+00 3.745179390316250e+00 4.884873041337607e+00 9.131484518209043e+03 + 115220 1.013946942597300e+00 -6.010614831170975e+00 -5.969602480367017e+00 3.632129949919215e+00 4.867629214876313e+00 9.123935382373111e+03 + 115240 1.039725304555369e+00 -6.036923892259118e+00 -5.945281042448188e+00 3.516750523237585e+00 5.042977948537121e+00 9.049791565059724e+03 + 115260 9.610392101527505e-01 -5.910101206941224e+00 -5.977904796235226e+00 4.221064177604167e+00 4.831725475306480e+00 9.149319946515872e+03 + 115280 1.040537989738645e+00 -6.017121927489627e+00 -5.994330812608716e+00 3.605543708755364e+00 4.736413817315186e+00 9.199654132668147e+03 + 115300 1.010127554607323e+00 -5.964317136589941e+00 -5.978448919152290e+00 3.940914263131295e+00 4.859767380772000e+00 9.150987558602437e+03 + 115320 1.000125664603777e+00 -5.944416017618559e+00 -5.962404474578354e+00 3.995346188368585e+00 4.892053684800728e+00 9.101990618025296e+03 + 115340 9.931153703512151e-01 -5.927274894442545e+00 -6.009741719702250e+00 4.083007330843677e+00 4.609470058502484e+00 9.246960898617346e+03 + 115360 1.073291977693205e+00 -6.040532684162450e+00 -6.031359936546205e+00 3.469474878086019e+00 4.522146214376601e+00 9.313593265285479e+03 + 115380 1.048109919180904e+00 -6.004915350070904e+00 -6.041400414563447e+00 3.617605432700438e+00 4.408102546338775e+00 9.344599793286005e+03 + 115400 9.956468140184118e-01 -5.934075115563157e+00 -6.052339705344545e+00 4.006694119212904e+00 4.327600543302053e+00 9.378432410737096e+03 + 115420 1.045542016543026e+00 -6.020079738255394e+00 -5.966234939883172e+00 3.627778386925842e+00 4.936963551634754e+00 9.113689175149106e+03 + 115440 1.023036918712562e+00 -6.005575500060338e+00 -6.025634908647438e+00 3.674140004391016e+00 4.558955776100445e+00 9.295902868185583e+03 + 115460 1.041102068921217e+00 -6.066130058718468e+00 -5.970614857180006e+00 3.382650132749238e+00 4.931113200912749e+00 9.127079476031246e+03 + 115480 9.203568281206690e-01 -5.937358110427454e+00 -6.063543342792972e+00 4.028886514643566e+00 4.304311383299162e+00 9.413143861858012e+03 + 115500 1.012299057173040e+00 -6.138508526522807e+00 -5.975332757155782e+00 2.954050964756214e+00 4.891031483830373e+00 9.141493773589733e+03 + 115520 9.715557378186813e-01 -6.131440044079490e+00 -5.948343655893916e+00 2.975568484961382e+00 5.026936279997447e+00 9.059150696749442e+03 + 115540 9.118730019795683e-01 -6.074393014319377e+00 -5.933607904050456e+00 3.343420723767477e+00 5.151830613357022e+00 9.014379876483645e+03 + 115560 9.207773024323593e-01 -6.101102100523610e+00 -5.972926960673255e+00 3.167902713726190e+00 4.903904201785718e+00 9.134132008995457e+03 + 115580 9.105257102707112e-01 -6.088702938288703e+00 -5.973195826777962e+00 3.261031852617460e+00 4.924291561579876e+00 9.134945660869205e+03 + 115600 9.617326767236335e-01 -6.159179780951208e+00 -5.979350106266597e+00 2.890579478538781e+00 4.923189299130033e+00 9.153777756609581e+03 + 115620 9.042531741561836e-01 -6.060812914187831e+00 -6.013864067497362e+00 3.443164775607219e+00 4.712752318614437e+00 9.259677245368921e+03 + 115640 9.220299390906123e-01 -6.066738135501731e+00 -6.029076957483925e+00 3.338283811096729e+00 4.554540123323434e+00 9.306548153145890e+03 + 115660 9.639084238432762e-01 -6.103610004666057e+00 -6.030305842166404e+00 3.137563352987946e+00 4.558487197843437e+00 9.310341263178330e+03 + 115680 9.145255321660365e-01 -6.001427996233648e+00 -5.998315299153817e+00 3.695667806739961e+00 4.713541395060665e+00 9.211881409428577e+03 + 115700 9.553630288263529e-01 -6.031278051246264e+00 -6.000570034634242e+00 3.594715348471062e+00 4.771045531907507e+00 9.218806326931493e+03 + 115720 9.945925536684486e-01 -6.057798199341484e+00 -6.014929187218487e+00 3.384939433558139e+00 4.631099935126571e+00 9.262938358839685e+03 + 115740 1.021699971541656e+00 -6.070613011459958e+00 -5.975887170163594e+00 3.342474301828525e+00 4.886404741328811e+00 9.143173422459167e+03 + 115760 9.700031369192553e-01 -5.969538574021396e+00 -5.981816074809507e+00 3.857382858321078e+00 4.786883548858633e+00 9.161305689323661e+03 + 115780 9.988289257407426e-01 -5.990131029621454e+00 -5.995432031597927e+00 3.765402913306718e+00 4.734963739630405e+00 9.203041822547688e+03 + 115800 1.052188810888908e+00 -6.050853300296617e+00 -6.000421677675077e+00 3.399083329501546e+00 4.688669510862807e+00 9.218353398333911e+03 + 115820 1.000394795432823e+00 -5.961474652050136e+00 -6.018572811163777e+00 3.904024755551531e+00 4.576158290009444e+00 9.274133751460427e+03 + 115840 1.046020364870198e+00 -6.020010109996225e+00 -5.959430073031417e+00 3.608853199658400e+00 4.956713146640748e+00 9.092934509253093e+03 + 115860 1.034782571185651e+00 -5.996342500305641e+00 -5.979123811717315e+00 3.797170765355629e+00 4.896043139813241e+00 9.153063242848109e+03 + 115880 9.758561317877346e-01 -5.904028988817292e+00 -6.065155162062768e+00 4.197173080486555e+00 4.271961659516314e+00 9.418146942542193e+03 + 115900 1.062677934727908e+00 -6.030077912830269e+00 -6.047957521348196e+00 3.571521267162151e+00 4.468853788191737e+00 9.364843425822442e+03 + 115920 1.081859106295466e+00 -6.061972338223803e+00 -6.039273327423494e+00 3.363877716782011e+00 4.494218949457953e+00 9.338013419243680e+03 + 115940 9.822729082433367e-01 -5.924371721599683e+00 -6.060459688222817e+00 4.089102969013179e+00 4.307664805118370e+00 9.403582946778793e+03 + 115960 1.012957824766927e+00 -5.982550044872101e+00 -6.029521056387285e+00 3.784290604378152e+00 4.514575787517424e+00 9.307912425487641e+03 + 115980 9.396746395141170e-01 -5.889837349008130e+00 -6.062989449392319e+00 4.222877096021850e+00 4.228610940414900e+00 9.411427270345921e+03 + 116000 1.031122994718072e+00 -6.044249450151669e+00 -5.978454520717158e+00 3.483480248621340e+00 4.861284915166725e+00 9.151005894809241e+03 + 116020 9.354646733985654e-01 -5.924129573932783e+00 -6.014962313907153e+00 4.110404833343594e+00 4.588829184089675e+00 9.263015470176391e+03 + 116040 1.030500725489004e+00 -6.091069232017360e+00 -5.993189032585672e+00 3.201235132201953e+00 4.763278384250619e+00 9.196157722487349e+03 + 116060 9.038974239050119e-01 -5.935100148551932e+00 -6.057540246978618e+00 3.980274384780352e+00 4.277204392070320e+00 9.394541130046964e+03 + 116080 9.603086245563205e-01 -6.055080806287993e+00 -5.986830468423485e+00 3.421988336012981e+00 4.813892337736634e+00 9.176665692039935e+03 + 116100 9.513651409710076e-01 -6.081315534991525e+00 -5.996097801529330e+00 3.250767798613162e+00 4.740101211554721e+00 9.205083974735604e+03 + 116120 9.732466298336454e-01 -6.153925038795144e+00 -5.972502966546281e+00 2.865245762611055e+00 4.906999376438975e+00 9.132851135139987e+03 + 116140 9.087552142882209e-01 -6.093302374262454e+00 -5.966527192413406e+00 3.204334551733936e+00 4.932297264307158e+00 9.114587444245022e+03 + 116160 9.099161415141690e-01 -6.119813414145220e+00 -5.966023142919350e+00 3.017447384431484e+00 4.900534920777986e+00 9.113045712964693e+03 + 116180 8.945087717816963e-01 -6.109287518316867e+00 -5.936906726790745e+00 3.118484254954121e+00 5.108321435738388e+00 9.024374313240840e+03 + 116200 9.442702492243973e-01 -6.182475952947275e+00 -5.935906724154090e+00 2.764760376601816e+00 5.180599044797128e+00 9.021350887475619e+03 + 116220 8.854159564291245e-01 -6.082468994502046e+00 -5.996480450526134e+00 3.308289226710735e+00 4.802048752904602e+00 9.206244597715879e+03 + 116240 9.036437257243478e-01 -6.088056612303204e+00 -6.034085430972494e+00 3.188896328684172e+00 4.498807203898425e+00 9.322000641225130e+03 + 116260 9.312384602596577e-01 -6.100188858327566e+00 -6.018578053449547e+00 3.222751164646158e+00 4.691373035486981e+00 9.274188011780099e+03 + 116280 9.119513624836280e-01 -6.040993530577998e+00 -6.008796905818233e+00 3.450438866058345e+00 4.635316867840496e+00 9.244096667457005e+03 + 116300 9.503922175874270e-01 -6.068160574795234e+00 -6.004215902434363e+00 3.342873138108037e+00 4.710053342210228e+00 9.229991900236095e+03 + 116320 9.694570530875718e-01 -6.071954840489939e+00 -5.968731159605627e+00 3.328909412178663e+00 4.921635761629373e+00 9.121319205841346e+03 + 116340 9.172385735394100e-01 -5.975930271502030e+00 -5.987661946743875e+00 3.849655872959238e+00 4.782290778249688e+00 9.179186505018217e+03 + 116360 9.765769197059166e-01 -6.047699254058145e+00 -6.012339402589266e+00 3.449232002462557e+00 4.652273741516193e+00 9.254979434116043e+03 + 116380 1.061250450079728e+00 -6.161175771908096e+00 -5.983660453721100e+00 2.864550918137086e+00 4.883871345573527e+00 9.166986488932809e+03 + 116400 1.018380476412408e+00 -6.089173037608483e+00 -5.975936168469473e+00 3.260554958380084e+00 4.910778584325148e+00 9.143316923376000e+03 + 116420 9.426132546792290e-01 -5.968082801977380e+00 -5.958955050748362e+00 3.857004128806464e+00 4.909417088878424e+00 9.091473477394016e+03 + 116440 9.533238392850396e-01 -5.969158693430990e+00 -5.975431481322770e+00 3.856905639223822e+00 4.820886320438431e+00 9.141767957923632e+03 + 116460 1.030567402346188e+00 -6.064469809608874e+00 -6.012715032029179e+00 3.371759328516851e+00 4.668943270405409e+00 9.256129018983589e+03 + 116480 9.798044679210388e-01 -5.970773611552971e+00 -6.038131959350080e+00 3.832793616999505e+00 4.446011560277872e+00 9.334464675942681e+03 + 116500 1.021665062862286e+00 -6.016053228313108e+00 -6.012362116125058e+00 3.642291667003924e+00 4.663486604385472e+00 9.255036966653033e+03 + 116520 1.059721401741677e+00 -6.057713753944791e+00 -5.966636699588133e+00 3.382092033514646e+00 4.905070573759185e+00 9.114928294018418e+03 + 116540 1.020265898691243e+00 -5.986129155049865e+00 -5.968062657247517e+00 3.738263561832127e+00 4.842004187994711e+00 9.119255103104861e+03 + 116560 1.018987155163338e+00 -5.969628157823351e+00 -5.980931234672534e+00 3.837056926850036e+00 4.772152910436540e+00 9.158592954656555e+03 + 116580 9.630196950285493e-01 -5.871760839952514e+00 -5.985489775502384e+00 4.313443773629960e+00 4.660394626206705e+00 9.172564722253304e+03 + 116600 1.007853862377505e+00 -5.925468670412654e+00 -5.980933827388548e+00 4.120876973894704e+00 4.802387459333818e+00 9.158572455408967e+03 + 116620 1.027999273022305e+00 -5.942720599627634e+00 -5.961575480746031e+00 4.054882312195568e+00 4.946614667030309e+00 9.099457512313644e+03 + 116640 1.051012266785894e+00 -5.964490574057844e+00 -6.004642372790163e+00 3.848970723393814e+00 4.618412881602071e+00 9.231317273956935e+03 + 116660 1.069358629048443e+00 -5.984089386623952e+00 -6.023544518834824e+00 3.762161958572526e+00 4.535604483755720e+00 9.289470948138840e+03 + 116680 1.030723200462149e+00 -5.925157504185580e+00 -6.013246146460805e+00 4.065594384049453e+00 4.559775768431774e+00 9.257708360489298e+03 + 116700 1.064677497428799e+00 -5.976897741760316e+00 -6.021782587703358e+00 3.810142109254636e+00 4.552406377942233e+00 9.284017686560646e+03 + 116720 1.053431909935035e+00 -5.969008086774300e+00 -6.007164747993543e+00 3.834211712869211e+00 4.615110259424076e+00 9.239044620107488e+03 + 116740 1.019202071705839e+00 -5.936751041947703e+00 -6.015839729736149e+00 4.041286538402251e+00 4.587147054186119e+00 9.265709010932214e+03 + 116760 9.846562919879001e-01 -5.912487364498100e+00 -6.011375373325551e+00 4.119300061850528e+00 4.551469812293397e+00 9.251965824402665e+03 + 116780 9.990828682814556e-01 -5.967851934907188e+00 -5.978517796218746e+00 3.859978311109554e+00 4.798733284921882e+00 9.151219367246362e+03 + 116800 9.625785040160860e-01 -5.953987595225881e+00 -5.999382392243342e+00 3.931938094408617e+00 4.671274145112221e+00 9.215126213861276e+03 + 116820 9.621214874782613e-01 -5.993322725926472e+00 -5.947194562347585e+00 3.686240485073444e+00 4.951115538653657e+00 9.055650081906022e+03 + 116840 9.395934667930859e-01 -5.991854408149713e+00 -5.949831094655862e+00 3.769632724077421e+00 5.010937093245857e+00 9.063676772117529e+03 + 116860 9.301236941968620e-01 -6.000833611241911e+00 -5.979386316687211e+00 3.658157756296570e+00 4.781311440587762e+00 9.153881690926941e+03 + 116880 9.479532360604741e-01 -6.042749686270877e+00 -5.949307828546516e+00 3.509093077457403e+00 5.045650684591436e+00 9.062078997674256e+03 + 116900 9.561257927371727e-01 -6.062039846005219e+00 -5.977709160746405e+00 3.379186792956477e+00 4.863426637843956e+00 9.148723679338884e+03 + 116920 9.276129248641349e-01 -6.021286847915617e+00 -6.014267775660543e+00 3.538092806027338e+00 4.578397405113893e+00 9.260914158091413e+03 + 116940 9.510795173945297e-01 -6.052522060911524e+00 -6.026200100035365e+00 3.387940740133729e+00 4.539085512794913e+00 9.297666942854925e+03 + 116960 1.019845104360306e+00 -6.146899968077982e+00 -5.994478259281532e+00 2.866974850124708e+00 4.742203889217126e+00 9.200127906495523e+03 + 116980 9.756781087407516e-01 -6.071723755635213e+00 -5.987901635880116e+00 3.310282088969493e+00 4.791601672034371e+00 9.179962188692736e+03 + 117000 9.281734251934216e-01 -5.985707700554117e+00 -6.025820514553638e+00 3.779199934544983e+00 4.548865949121833e+00 9.296494952279943e+03 + 117020 9.432781024730112e-01 -5.988946390547442e+00 -5.967503209163304e+00 3.822867181271656e+00 4.945997247100969e+00 9.117554767328484e+03 + 117040 9.583512798227373e-01 -5.986573502704617e+00 -6.013298236303530e+00 3.718972500455430e+00 4.565514944491309e+00 9.257902787041034e+03 + 117060 9.882685792889527e-01 -5.998234510687446e+00 -5.983913436038632e+00 3.733254872848073e+00 4.815488699660704e+00 9.167720978088997e+03 + 117080 1.019522954614620e+00 -6.008095744380225e+00 -5.989631725885376e+00 3.664306646126833e+00 4.770329897621882e+00 9.185245978483676e+03 + 117100 1.022742762008697e+00 -5.973591559650266e+00 -6.007460328340685e+00 3.786783460489525e+00 4.592303749494124e+00 9.239978452914109e+03 + 117120 1.066197529122326e+00 -6.007176109228332e+00 -6.014353996465731e+00 3.643914818209212e+00 4.602698278917607e+00 9.261158831768915e+03 + 117140 9.881006967305728e-01 -5.869820476717267e+00 -6.034678817315542e+00 4.399316556402081e+00 4.452674452941031e+00 9.323798062799246e+03 + 117160 1.030539830652059e+00 -5.918659995682388e+00 -6.007462112918757e+00 4.082850316285435e+00 4.572934817030973e+00 9.239979174635508e+03 + 117180 1.131507780672809e+00 -6.062584660096896e+00 -5.983146977382847e+00 3.374884803360044e+00 4.831028270445782e+00 9.165392525640622e+03 + 117200 1.041524498291152e+00 -5.930995373058050e+00 -6.013987333462575e+00 4.120418072988906e+00 4.643865393381756e+00 9.260014118146810e+03 + 117220 1.076369914689623e+00 -5.988610258177175e+00 -6.022164913096231e+00 3.764174554713937e+00 4.571498533602655e+00 9.285205285436094e+03 + 117240 1.036074716018124e+00 -5.938800209731111e+00 -6.014466490743399e+00 4.061964684334772e+00 4.627477189443070e+00 9.261506344802534e+03 + 117260 1.055916133359598e+00 -5.981084700272936e+00 -5.969795488523319e+00 3.821349547303758e+00 4.886173948169929e+00 9.124577962959447e+03 + 117280 1.085826851155927e+00 -6.039298658340408e+00 -5.990179985643739e+00 3.528397137691285e+00 4.810444157405598e+00 9.186932668366620e+03 + 117300 1.049924832951427e+00 -6.001457273730221e+00 -5.987876012477180e+00 3.692035514309885e+00 4.770021218118234e+00 9.179864875685998e+03 + 117320 1.026470608705965e+00 -5.982980079470241e+00 -5.969502006146741e+00 3.856974600582915e+00 4.934367783331554e+00 9.123633021337715e+03 + 117340 9.672647171188222e-01 -5.912660858387021e+00 -6.034321630651412e+00 4.177794553625223e+00 4.479199572339424e+00 9.322673775456522e+03 + 117360 9.756341364402142e-01 -5.943987035462412e+00 -5.984313074083342e+00 4.018318619225488e+00 4.786760265029796e+00 9.168931492484691e+03 + 117380 9.609231430044249e-01 -5.938329974135836e+00 -5.993719327118356e+00 3.999815381952074e+00 4.681761145651766e+00 9.197767197717025e+03 + 117400 1.012353333885247e+00 -6.028035347910292e+00 -6.025025220488160e+00 3.519195750072419e+00 4.536480367546011e+00 9.294032582776907e+03 + 117420 9.489457129313001e-01 -5.951327763350410e+00 -6.037901255242147e+00 3.935758455786677e+00 4.438640068139752e+00 9.333764056221191e+03 + 117440 9.445708759223884e-01 -5.960462189745360e+00 -5.990033745173322e+00 3.910733876302713e+00 4.740929428851942e+00 9.186471787454446e+03 + 117460 9.434124395959006e-01 -5.972933806267852e+00 -6.014846898821684e+00 3.855114146697268e+00 4.614442683223055e+00 9.262685556169990e+03 + 117480 1.029768241905908e+00 -6.111558884935205e+00 -6.005455998739332e+00 3.119073227050341e+00 4.728332418955617e+00 9.233822365403106e+03 + 117500 9.769086919284679e-01 -6.044436604032393e+00 -6.016985916727016e+00 3.444257145916046e+00 4.601883240403650e+00 9.269291867398664e+03 + 117520 9.495039240236921e-01 -6.016010333128997e+00 -6.000226774942446e+00 3.625453953918314e+00 4.716085587523223e+00 9.217724808022625e+03 + 117540 9.526195578239912e-01 -6.030288880329453e+00 -5.946567081999487e+00 3.539158773361602e+00 5.019902295278685e+00 9.053726143636381e+03 + 117560 9.494611283781205e-01 -6.030262580279608e+00 -6.005351518132177e+00 3.547331480145391e+00 4.690374653970347e+00 9.233481450800808e+03 + 117580 1.014718524817938e+00 -6.128983842882715e+00 -5.979754026246431e+00 3.035136986286402e+00 4.892037686651443e+00 9.155014271050281e+03 + 117600 9.611138220754462e-01 -6.047053126315208e+00 -5.980688542331185e+00 3.444807528132988e+00 4.825883239255432e+00 9.157873727707443e+03 + 117620 9.305216831465826e-01 -5.993248371506033e+00 -6.014324861220105e+00 3.769225379941452e+00 4.648200914427006e+00 9.261058161889214e+03 + 117640 9.107588512095844e-01 -5.946925572839532e+00 -6.021597790088206e+00 3.934252666080675e+00 4.505473239150512e+00 9.283451962906158e+03 + 117660 1.016245166873432e+00 -6.074942049556149e+00 -6.008733797041549e+00 3.272143457659779e+00 4.652321489292579e+00 9.243889726021271e+03 + 117680 9.971917289794366e-01 -6.010328255578628e+00 -6.003668020504919e+00 3.650134736154496e+00 4.688378836615781e+00 9.228308466474928e+03 + 117700 1.002784871478584e+00 -5.981739123559359e+00 -6.009413428589382e+00 3.823969782984129e+00 4.665059640916876e+00 9.245969654489380e+03 + 117720 9.621637078652987e-01 -5.881890020335275e+00 -6.027270993673513e+00 4.301841383107339e+00 4.467041336566264e+00 9.300938370291207e+03 + 117740 1.057303598394193e+00 -5.989826227045024e+00 -5.977559459356325e+00 3.788376130882235e+00 4.858813809226908e+00 9.148280814540913e+03 + 117760 1.097135339569717e+00 -6.020186507280268e+00 -6.049025313325066e+00 3.552091849656148e+00 4.386494962556105e+00 9.368162550400513e+03 + 117780 1.071756202961003e+00 -5.966251253205427e+00 -6.055453358625384e+00 3.862280203858887e+00 4.350067910556293e+00 9.388048637247737e+03 + 117800 1.037176040786494e+00 -5.908744485813752e+00 -6.028937634025489e+00 4.188231469395703e+00 4.498063812534339e+00 9.306089888485878e+03 + 117820 1.075759116551152e+00 -5.965853979292499e+00 -5.998193602889000e+00 3.987517445788413e+00 4.801818322556727e+00 9.211474672851486e+03 + 117840 1.070607953867520e+00 -5.964283839229544e+00 -6.007079325810753e+00 3.918557710889191e+00 4.672819404359745e+00 9.238731971347552e+03 + 117860 1.039447639050331e+00 -5.929758603858235e+00 -5.982729653722780e+00 4.024977051983665e+00 4.720809086417975e+00 9.164115693955537e+03 + 117880 1.068408093274025e+00 -5.989968063481235e+00 -6.015422446177435e+00 3.733812854573883e+00 4.587649850079311e+00 9.264451853673787e+03 + 117900 1.023459730636067e+00 -5.949148726159465e+00 -5.995437999351856e+00 4.001604361595851e+00 4.735804191683266e+00 9.203043321360605e+03 + 117920 1.003054202357790e+00 -5.948800062575615e+00 -5.972594525933745e+00 3.994270277794433e+00 4.857638787010742e+00 9.133094934464398e+03 + 117940 1.076917366829456e+00 -6.088786576298965e+00 -5.964100204487521e+00 3.204130494649304e+00 4.920098936744292e+00 9.107175796394788e+03 + 117960 1.009426187367396e+00 -6.020740769972001e+00 -6.027229171985465e+00 3.521448741060190e+00 4.484191332621911e+00 9.300833541108872e+03 + 117980 1.014827856588094e+00 -6.061274947502712e+00 -5.948051444965946e+00 3.334212609600082e+00 4.984359482446584e+00 9.058267320256322e+03 + 118000 9.420980345017893e-01 -5.977968347201312e+00 -5.948668310896842e+00 3.832805054055274e+00 5.001050396681507e+00 9.060130285236870e+03 + 118020 9.837295717468644e-01 -6.055151513391166e+00 -6.001384680721821e+00 3.329633040309653e+00 4.638370513887495e+00 9.221283360198864e+03 + 118040 9.782051809392583e-01 -6.055202942855638e+00 -5.995236865284065e+00 3.393384875188118e+00 4.737719372324602e+00 9.202442127096840e+03 + 118060 9.559909420029702e-01 -6.026317118631438e+00 -6.001352603293189e+00 3.534398705902113e+00 4.677748816220605e+00 9.221202978377753e+03 + 118080 9.238141632561442e-01 -5.979620603081838e+00 -6.010121193926098e+00 3.723199822880957e+00 4.548060710302043e+00 9.248158249304743e+03 + 118100 9.979148898100610e-01 -6.086689492092995e+00 -5.962499461601903e+00 3.224047436948022e+00 4.937165810372981e+00 9.102285822517053e+03 + 118120 9.769872407937902e-01 -6.049696249430857e+00 -5.979424703704497e+00 3.404133601360963e+00 4.807643691408279e+00 9.153984049710158e+03 + 118140 9.793709248393203e-01 -6.045969914860280e+00 -5.979208569559630e+00 3.415412460245272e+00 4.798766436246402e+00 9.153316131159811e+03 + 118160 1.002414579182424e+00 -6.071321047123855e+00 -5.923079617888055e+00 3.359727487332926e+00 5.210952714291926e+00 8.982407725626086e+03 + 118180 1.015529007713820e+00 -6.079627504034958e+00 -5.965796408722426e+00 3.275775659715338e+00 4.929411424304970e+00 9.112337458670465e+03 + 118200 1.022392795794095e+00 -6.078764418991238e+00 -5.975417341579708e+00 3.238645726677692e+00 4.832080638083239e+00 9.141727582228285e+03 + 118220 9.778784698854838e-01 -6.002185319677536e+00 -5.986589954703676e+00 3.677422685290088e+00 4.766973684344918e+00 9.175922169632327e+03 + 118240 9.979285547587164e-01 -6.019132853946044e+00 -5.998169743537391e+00 3.618979914151881e+00 4.739353338149218e+00 9.211434319934260e+03 + 118260 1.089079418958326e+00 -6.142852912115839e+00 -5.992341065775150e+00 2.919298871848323e+00 4.783561185169506e+00 9.193558712780239e+03 + 118280 9.723092668712437e-01 -5.961022814789755e+00 -5.988601516911356e+00 3.934870114141792e+00 4.776508938769194e+00 9.182092018853768e+03 + 118300 9.692718435207140e-01 -5.948706314787096e+00 -6.003359192557741e+00 3.962023505639698e+00 4.648198223975152e+00 9.227371899182259e+03 + 118320 1.067300327405891e+00 -6.085716046620246e+00 -5.963438281250569e+00 3.260324768838095e+00 4.962462620013818e+00 9.105168114403667e+03 + 118340 9.728126005290900e-01 -5.938882982793743e+00 -5.998592789101565e+00 4.015958993984291e+00 4.673096046102115e+00 9.212727288069087e+03 + 118360 9.814526449021093e-01 -5.944494223342439e+00 -5.992145882008586e+00 4.001720819002280e+00 4.728097620870920e+00 9.192923329940139e+03 + 118380 9.921478534320984e-01 -5.950389696021507e+00 -5.974723118284781e+00 3.976611072735090e+00 4.836884796514446e+00 9.139582185971842e+03 + 118400 1.010401258800639e+00 -5.965707088893630e+00 -5.972399359322573e+00 3.888145122788756e+00 4.849717070360267e+00 9.132511605908041e+03 + 118420 1.050587751236012e+00 -6.013236617280777e+00 -5.992408649773625e+00 3.639456146407920e+00 4.759053558951538e+00 9.193781078405975e+03 + 118440 1.078314853473278e+00 -6.042669081472455e+00 -6.005134810633665e+00 3.514116910894562e+00 4.729644502460532e+00 9.232803449364910e+03 + 118460 1.017494142855952e+00 -5.941862066362143e+00 -6.007142172646444e+00 4.066918096552222e+00 4.692069624203967e+00 9.238971323829601e+03 + 118480 1.031951075304278e+00 -5.950067276874099e+00 -6.006618397524604e+00 3.997235465938611e+00 4.672510179905776e+00 9.237361239541915e+03 + 118500 1.054041145044973e+00 -5.965482643987206e+00 -6.003684819156160e+00 3.907656081204672e+00 4.688293279617039e+00 9.228349960772388e+03 + 118520 1.048793168176856e+00 -5.939214742410094e+00 -5.985933567856311e+00 4.032596584286137e+00 4.764329858859091e+00 9.173915945698560e+03 + 118540 1.054153602811155e+00 -5.929835092273697e+00 -6.001512751920159e+00 4.082343216331571e+00 4.670759002559604e+00 9.221676326117520e+03 + 118560 1.085196723945278e+00 -5.959692983144486e+00 -6.030263363992542e+00 3.846535802354050e+00 4.441309754793366e+00 9.310203030581588e+03 + 118580 1.092905293433655e+00 -5.963177097091521e+00 -5.980750697804705e+00 3.871022049203449e+00 4.770111714402422e+00 9.158035535673986e+03 + 118600 1.026287713762927e+00 -5.862589072550952e+00 -5.947405517758163e+00 4.471575264385752e+00 4.984546110703464e+00 9.056221868025001e+03 + 118620 1.017164762353730e+00 -5.852226759885884e+00 -5.952100325753303e+00 4.526712307818545e+00 4.953222837223454e+00 9.070581475234592e+03 + 118640 1.136201678471912e+00 -6.036298063753472e+00 -5.978305344100320e+00 3.505676126666087e+00 4.838679297258846e+00 9.150567320456552e+03 + 118660 1.099069701063826e+00 -6.000562567931905e+00 -5.974617186858535e+00 3.715726479872807e+00 4.864708873030846e+00 9.139295175139892e+03 + 118680 1.033981159695554e+00 -5.930506354926416e+00 -6.027464204860655e+00 4.056558994198462e+00 4.499812015697278e+00 9.301534394957895e+03 + 118700 1.046543833173818e+00 -5.983549236656355e+00 -6.032149148038920e+00 3.793573199148902e+00 4.514504987178229e+00 9.315992497428817e+03 + 118720 1.053252613339676e+00 -6.033588315554017e+00 -6.006508741740481e+00 3.533035069686660e+00 4.688530173074488e+00 9.237031103220352e+03 + 118740 1.008937525338601e+00 -6.005421193875164e+00 -6.035155532631322e+00 3.625112710704530e+00 4.454373536192620e+00 9.325305186813741e+03 + 118760 9.099581511919945e-01 -5.892254248965719e+00 -6.086034533702428e+00 4.198601759794542e+00 4.085885377434213e+00 9.483078692276613e+03 + 118780 9.549841630875712e-01 -5.986494189027875e+00 -6.014575240503912e+00 3.763319674116149e+00 4.602073931012074e+00 9.261845650001322e+03 + 118800 1.014678487630373e+00 -6.095526601897840e+00 -5.983151604543771e+00 3.179508562237563e+00 4.824783187019266e+00 9.165404545506113e+03 + 118820 9.702460890570785e-01 -6.044969650804069e+00 -5.990796540895104e+00 3.479456138753800e+00 4.790526519112740e+00 9.188812266370735e+03 + 118840 9.858588712870096e-01 -6.078167013849701e+00 -5.988690210891744e+00 3.257115961995059e+00 4.770905611070153e+00 9.182379324832718e+03 + 118860 9.503060875717455e-01 -6.030981765418757e+00 -5.970917185641836e+00 3.533909804920747e+00 4.878809916963508e+00 9.127953039879714e+03 + 118880 9.456103758226696e-01 -6.023145373312403e+00 -5.947624917927842e+00 3.604966989923136e+00 5.038617131493981e+00 9.056942849617995e+03 + 118900 9.758390046689390e-01 -6.060941368963034e+00 -5.979246556590564e+00 3.373271776279659e+00 4.842376031153738e+00 9.153435862346154e+03 + 118920 9.693666716480097e-01 -6.039155629609008e+00 -5.987114823880209e+00 3.471405976536767e+00 4.770232336320188e+00 9.177542697363317e+03 + 118940 9.859090056180350e-01 -6.046992975794071e+00 -5.983580854819138e+00 3.472754801065881e+00 4.836877012697950e+00 9.166715838309789e+03 + 118960 9.973112360294156e-01 -6.041343677529918e+00 -6.032212650161722e+00 3.475254181428369e+00 4.527685953598468e+00 9.316185251520847e+03 + 118980 9.643172442073773e-01 -5.969953585231655e+00 -6.001295126004094e+00 3.875643628179499e+00 4.695675650976392e+00 9.221025431532829e+03 + 119000 1.010798279598468e+00 -6.012401787947985e+00 -6.006323496920235e+00 3.598290268706536e+00 4.633192756400370e+00 9.236481850053413e+03 + 119020 1.038385722126180e+00 -6.021563724664233e+00 -6.038044233817327e+00 3.582525719443091e+00 4.487892085535478e+00 9.334201792140433e+03 + 119040 1.051090879994447e+00 -6.012660994003246e+00 -5.980453874930634e+00 3.685092833918517e+00 4.870031095669022e+00 9.157114168562588e+03 + 119060 9.598228858088401e-01 -5.851129606608113e+00 -6.032008933129174e+00 4.473462925659010e+00 4.434825841789764e+00 9.315547118208333e+03 + 119080 1.076436631287748e+00 -5.997764636036068e+00 -5.989333703103078e+00 3.701655750498773e+00 4.750067472082657e+00 9.184345137009488e+03 + 119100 1.064166321921262e+00 -5.954718344693816e+00 -6.021181882950155e+00 3.897480449646486e+00 4.515836527779284e+00 9.282196206310859e+03 + 119120 1.043352933884672e+00 -5.906020635271991e+00 -6.036969487324697e+00 4.219781129839683e+00 4.467852557083683e+00 9.330878459458816e+03 + 119140 1.044786143378554e+00 -5.895997614982479e+00 -6.013166131372079e+00 4.216517611621923e+00 4.543717858743526e+00 9.257509286909048e+03 + 119160 1.041430907256811e+00 -5.884147374428856e+00 -6.030298273892747e+00 4.301017589074577e+00 4.461796507574319e+00 9.310279383851135e+03 + 119180 1.030272975805293e+00 -5.868321362019465e+00 -6.044049964012157e+00 4.350067372067814e+00 4.341006545512506e+00 9.352764149385443e+03 + 119200 1.097097710296557e+00 -5.979554698160427e+00 -5.983761351536383e+00 3.866589681285990e+00 4.842434426623738e+00 9.167255656666495e+03 + 119220 1.008526806230827e+00 -5.878916090911440e+00 -6.072075422308485e+00 4.240585004702059e+00 4.131434232510303e+00 9.439633232113671e+03 + 119240 9.610544771865510e-01 -5.863452859960428e+00 -6.031977556040029e+00 4.460179384493041e+00 4.492484500491531e+00 9.315446377716273e+03 + 119260 1.090909483116227e+00 -6.117342769475410e+00 -5.951332893439723e+00 3.085131932857665e+00 5.038386330999874e+00 9.068257372687727e+03 + 119280 9.748718208942341e-01 -5.999073985028591e+00 -6.000216400146201e+00 3.748809032357737e+00 4.742249107964259e+00 9.217700561077776e+03 + 119300 9.849194729624058e-01 -6.052316567072485e+00 -5.974203321764358e+00 3.423683840916782e+00 4.872222183461695e+00 9.138045144371512e+03 + 119320 9.816753849971117e-01 -6.076028443957259e+00 -6.010869643214338e+00 3.293872021701144e+00 4.668023938858825e+00 9.250457076466922e+03 + 119340 9.939849460704197e-01 -6.114931531151451e+00 -6.006146138184731e+00 3.022658984193077e+00 4.647321545093138e+00 9.235953320039513e+03 + 119360 9.309371617626490e-01 -6.035977597850318e+00 -6.007530238155198e+00 3.493101057116877e+00 4.656450198700942e+00 9.240185300426856e+03 + 119380 1.008158355309710e+00 -6.159174553643037e+00 -5.974798849364122e+00 2.816915740369334e+00 4.875629566386892e+00 9.139866174215229e+03 + 119400 8.794411926872081e-01 -5.971450313439034e+00 -5.974899686500105e+00 3.856453227547429e+00 4.836646393641999e+00 9.140133361061518e+03 + 119420 9.440919293796489e-01 -6.063782786000915e+00 -5.945105073095391e+00 3.358048839107026e+00 5.039514631927260e+00 9.049288214782240e+03 + 119440 9.389686528989794e-01 -6.042905019183673e+00 -5.966176834696231e+00 3.479416561334961e+00 4.920001670310025e+00 9.113511787751444e+03 + 119460 9.368133053923515e-01 -6.017769312640489e+00 -5.993030718783301e+00 3.596098081222711e+00 4.738150915435717e+00 9.195661900274534e+03 + 119480 1.014984236213100e+00 -6.105592258197846e+00 -5.985471816179874e+00 3.113073874567822e+00 4.802824041213341e+00 9.172514673017195e+03 + 119500 9.978945142641790e-01 -6.048438271888010e+00 -6.009615083260899e+00 3.451411741076518e+00 4.674340498042412e+00 9.246592627297228e+03 + 119520 1.007440971008089e+00 -6.032693347091008e+00 -5.984916222391340e+00 3.521414936186707e+00 4.795758579698351e+00 9.170808839105413e+03 + 119540 1.046069880982660e+00 -6.061148104747552e+00 -5.987023456230411e+00 3.380492214641971e+00 4.806127417179686e+00 9.177257487990601e+03 + 119560 9.482920305956614e-01 -5.889088334287274e+00 -6.040435711952207e+00 4.282508908795816e+00 4.413448845312772e+00 9.341609858694357e+03 + 119580 1.049637140530521e+00 -6.017804539306545e+00 -5.961834010236220e+00 3.601930186567791e+00 4.923321625900982e+00 9.100254784628609e+03 + 119600 9.788295524870486e-01 -5.893379040997575e+00 -6.033314336435059e+00 4.222328636388701e+00 4.418798515069682e+00 9.319589840718390e+03 + 119620 1.065663352161337e+00 -6.006429312019749e+00 -6.002467521630189e+00 3.713856813330039e+00 4.736606026831977e+00 9.224638264842219e+03 + 119640 1.013039182266040e+00 -5.919029226798404e+00 -6.048627233973402e+00 4.135599483968107e+00 4.391427671542474e+00 9.366926492454428e+03 + 119660 1.025447719833507e+00 -5.933749485217553e+00 -6.048372165211725e+00 4.050446320926189e+00 4.392265154597252e+00 9.366139524490509e+03 + 119680 1.041247093471711e+00 -5.959777219958424e+00 -6.032024365806345e+00 3.905065809215564e+00 4.490211517547113e+00 9.315634128809752e+03 + 119700 1.034847841346528e+00 -5.959256062660050e+00 -6.056341114680052e+00 3.843643382968927e+00 4.286165990406834e+00 9.390830817313032e+03 + 119720 1.022978895469701e+00 -5.956028175769903e+00 -5.996047055182215e+00 3.975120960118478e+00 4.745326361631408e+00 9.204924072782196e+03 + 119740 1.008798988016486e+00 -5.952442148866107e+00 -6.002133673523078e+00 3.930920748932169e+00 4.645584324613253e+00 9.223600127632284e+03 + 119760 1.015058672695483e+00 -5.983619052638933e+00 -6.031899105987615e+00 3.778571600147131e+00 4.501340062504889e+00 9.315226744015275e+03 + 119780 1.038278375302158e+00 -6.049287116011947e+00 -5.966993682737451e+00 3.474623372738128e+00 4.947165001467924e+00 9.116012735483118e+03 + 119800 1.033857642322377e+00 -6.078056876241071e+00 -5.984923724770832e+00 3.275198581854303e+00 4.809983549905027e+00 9.170815758374491e+03 + 119820 1.007553277827977e+00 -6.079519333998724e+00 -5.973690846763567e+00 3.288279553869230e+00 4.895963104478977e+00 9.136471979499327e+03 + 119840 9.407307859018351e-01 -6.023123385677247e+00 -6.019870197857848e+00 3.574722628693218e+00 4.593402936581393e+00 9.278149399788770e+03 + 119860 9.284640044736524e-01 -6.040676112706596e+00 -5.962133756199496e+00 3.532955885145952e+00 4.983958250600116e+00 9.101162989254217e+03 + 119880 9.205410444224746e-01 -6.053502058245293e+00 -5.991206019477274e+00 3.439660832292857e+00 4.797374327179664e+00 9.190070002716637e+03 + 119900 9.305379406426773e-01 -6.082894968525999e+00 -6.001613015549546e+00 3.268445111568421e+00 4.735178663900786e+00 9.222008946978343e+03 + 119920 1.018397000235681e+00 -6.218699618248187e+00 -5.984494553125563e+00 2.491946370247904e+00 4.836788097298710e+00 9.169543914712178e+03 + 119940 8.695952001570944e-01 -5.997889287429587e+00 -6.013545573525435e+00 3.698434695429785e+00 4.608533877864980e+00 9.258673360755400e+03 + 119960 8.769058638850319e-01 -6.002123878321631e+00 -6.003705905432527e+00 3.660752328074337e+00 4.651668083585664e+00 9.228405976869475e+03 + 119980 9.637374908657271e-01 -6.118567504343105e+00 -5.986002363460525e+00 3.115135871143959e+00 4.876345424480983e+00 9.174096015193030e+03 + 120000 9.209981558754371e-01 -6.040433077089063e+00 -5.966829590857303e+00 3.532443357205042e+00 4.955085965250491e+00 9.115491800124808e+03 + 120020 9.797880787886686e-01 -6.112913259642029e+00 -5.953460904024221e+00 3.108351914551480e+00 5.023952015681216e+00 9.074735489647856e+03 + 120040 9.743944176061097e-01 -6.087200968794580e+00 -6.001055074460147e+00 3.255740674681015e+00 4.750403730983388e+00 9.220290380876953e+03 + 120060 9.474687770952763e-01 -6.030766420465625e+00 -5.996961943701987e+00 3.562696225803922e+00 4.756806762606599e+00 9.207703673565740e+03 + 120080 9.635269268957668e-01 -6.035608965680844e+00 -5.970364013092460e+00 3.569788363896104e+00 4.944434978282388e+00 9.126275253568247e+03 + 120100 9.624385443215485e-01 -6.010789523165797e+00 -6.015449127303000e+00 3.574677697616379e+00 4.547921529589146e+00 9.264530851209998e+03 + 120120 9.429753147628946e-01 -5.960321103667138e+00 -6.017826427054753e+00 3.877879756488266e+00 4.547675290676551e+00 9.271863411029826e+03 + 120140 1.011283470705997e+00 -6.039947070572763e+00 -6.004596662334468e+00 3.507322257931347e+00 4.710309772493631e+00 9.231156942238838e+03 + 120160 9.686997613663088e-01 -5.953692335014338e+00 -6.016348522818806e+00 3.943148627419296e+00 4.583367101032316e+00 9.267308785138475e+03 + 120180 9.575467862576477e-01 -5.917605124731979e+00 -6.012685184361512e+00 4.096141367449238e+00 4.550176951464779e+00 9.256041128199602e+03 + 120200 1.009273883636535e+00 -5.975776196210976e+00 -5.982071900968116e+00 3.857607746837805e+00 4.821456835865146e+00 9.162083510210643e+03 + 120220 1.055267590664103e+00 -6.025290571717587e+00 -6.029172668807332e+00 3.506169855756306e+00 4.483878253514404e+00 9.306830615803847e+03 + 120240 1.042067476728707e+00 -5.990434939449728e+00 -6.026099420437328e+00 3.719074215780396e+00 4.514283246889000e+00 9.297354808025775e+03 + 120260 1.052451334551856e+00 -5.998736109811297e+00 -5.963931078061558e+00 3.697696322909752e+00 4.897552201278009e+00 9.106650109225018e+03 + 120280 9.676878906314603e-01 -5.866906737372149e+00 -6.039372615822825e+00 4.395771356546885e+00 4.405445593474670e+00 9.338272547465192e+03 + 120300 1.117311893178922e+00 -6.086217585950841e+00 -5.968168946102103e+00 3.201906159424730e+00 4.879759717404163e+00 9.119587163442586e+03 + 120320 1.045454173127056e+00 -5.979253797872732e+00 -5.997459434441075e+00 3.781562440026092e+00 4.677022857537512e+00 9.209254314565045e+03 + 120340 9.842563899298871e-01 -5.894214840326756e+00 -6.008920980647911e+00 4.276184602532946e+00 4.617524194091028e+00 9.244440866961606e+03 + 120360 9.737463312282703e-01 -5.887872973783871e+00 -6.022923019989515e+00 4.275931757937270e+00 4.500453493697358e+00 9.287546518902631e+03 + 120380 1.029220987672513e+00 -5.986830238751084e+00 -5.998036692898388e+00 3.723771988763191e+00 4.659422794856197e+00 9.211033246133666e+03 + 120400 1.002827120413883e+00 -5.973252655240296e+00 -6.045427453706200e+00 3.818011529960804e+00 4.403572668155620e+00 9.357022716133644e+03 + 120420 9.639577355682480e-01 -5.952947851042214e+00 -6.029260597378479e+00 3.989212996795939e+00 4.551013397973772e+00 9.307067238504931e+03 + 120440 1.012280707697841e+00 -6.072498928945050e+00 -5.986487059857646e+00 3.329749445557663e+00 4.823642908151260e+00 9.175623033831549e+03 + 120460 9.874503432452649e-01 -6.085600243596560e+00 -6.032029678908675e+00 3.256037968868100e+00 4.563648441324029e+00 9.315645596976066e+03 + 120480 9.252910434772046e-01 -6.037201844175397e+00 -6.026647092763229e+00 3.479351130217347e+00 4.539958146168515e+00 9.299026710336042e+03 + 120500 9.150355233516013e-01 -6.051466504401152e+00 -5.989027262500842e+00 3.421884790812624e+00 4.780420580245660e+00 9.183396415137446e+03 + 120520 9.760963414276158e-01 -6.156408370841838e+00 -5.954839088525535e+00 2.855583909490911e+00 5.013025921296753e+00 9.078937847956266e+03 + 120540 9.385484683364077e-01 -6.105433506033962e+00 -6.004384566216484e+00 3.151107804601957e+00 4.731346454306811e+00 9.230517248368167e+03 + 120560 8.717055688770080e-01 -6.004352848770867e+00 -5.991027886882756e+00 3.669629316224870e+00 4.746143309417590e+00 9.189529092084671e+03 + 120580 9.350214889771606e-01 -6.088597722753363e+00 -5.985533408578309e+00 3.239107963234598e+00 4.830919204378832e+00 9.172689670377735e+03 + 120600 9.943359768953216e-01 -6.158514300021742e+00 -5.955207757368503e+00 2.904014480725748e+00 5.071432110226445e+00 9.080061036663203e+03 + 120620 8.841508229924596e-01 -5.973607529397218e+00 -6.031767420260230e+00 3.781644693636285e+00 4.447681600086844e+00 9.314829873039698e+03 + 120640 9.205719322170441e-01 -6.001583695827840e+00 -6.021116380560878e+00 3.628690748616483e+00 4.516531050206183e+00 9.281991575026874e+03 + 120660 9.546310830259199e-01 -6.022225581024575e+00 -6.008074732029328e+00 3.602014370566023e+00 4.683270735333530e+00 9.241870486314605e+03 + 120680 9.951560055206431e-01 -6.053017697528349e+00 -6.008982999059275e+00 3.409515407543403e+00 4.662369460500389e+00 9.244664440962417e+03 + 120700 1.012288281652514e+00 -6.053772043943967e+00 -5.978283080007419e+00 3.479443584019345e+00 4.912912896822424e+00 9.150490674872572e+03 + 120720 9.600794945489532e-01 -5.956092586799816e+00 -5.988209364204148e+00 3.975702281038694e+00 4.791282775127777e+00 9.180863310283337e+03 + 120740 1.047628779227795e+00 -6.069073636025113e+00 -5.968289779626534e+00 3.296495881059358e+00 4.875212380751368e+00 9.119973694008871e+03 + 120760 1.035513017444710e+00 -6.037138218043567e+00 -6.037774146836355e+00 3.469674543284161e+00 4.466022941746306e+00 9.333378555054891e+03 + 120780 1.008474799565614e+00 -5.987885967553238e+00 -6.009014957184130e+00 3.764431094260363e+00 4.643105166099206e+00 9.244755752452011e+03 + 120800 9.724837142560121e-01 -5.928632597216287e+00 -6.013511965243964e+00 4.092307207965970e+00 4.604916741711301e+00 9.258580077635992e+03 + 120820 1.018412070391606e+00 -5.991323155739472e+00 -6.049288088966235e+00 3.696619277390668e+00 4.363775660758170e+00 9.368980757211102e+03 + 120840 1.071720543868808e+00 -6.072127313261033e+00 -5.990281608638266e+00 3.279738168519700e+00 4.749708870045490e+00 9.187236198343313e+03 + 120860 9.771254852632453e-01 -5.934395356891880e+00 -5.985332950674254e+00 4.054790221061205e+00 4.762298674995649e+00 9.172068193105210e+03 + 120880 1.020295545876077e+00 -6.000802054279295e+00 -5.977939705323814e+00 3.662827322547933e+00 4.794106468187374e+00 9.149442339958128e+03 + 120900 1.010870967593513e+00 -5.988543638247435e+00 -5.975379352089120e+00 3.788371914581656e+00 4.863963282869403e+00 9.141633127721880e+03 + 120920 9.818725469189609e-01 -5.948088666301157e+00 -6.009042004493864e+00 3.990363624201452e+00 4.640360123800329e+00 9.244812656329439e+03 + 120940 1.064826977272341e+00 -6.075353705185368e+00 -5.984638145215103e+00 3.341733994257353e+00 4.862636777794151e+00 9.169943384489818e+03 + 120960 1.018812396298537e+00 -6.014703232459357e+00 -5.931087205805053e+00 3.647873688179973e+00 5.128009852767294e+00 9.006693960994402e+03 + 120980 9.281970365474588e-01 -5.887197828281196e+00 -5.969275907885022e+00 4.305795499370179e+00 4.834490464743241e+00 9.122922652963767e+03 + 121000 9.462889930615317e-01 -5.918451441209609e+00 -6.003188816106798e+00 4.081120969901743e+00 4.594545850175695e+00 9.226817984523535e+03 + 121020 1.027718548890943e+00 -6.044447185486071e+00 -5.978042726443164e+00 3.488484401178244e+00 4.869789081059446e+00 9.149777643455067e+03 + 121040 1.019972218795342e+00 -6.043436318641451e+00 -5.972010087100466e+00 3.502096769103955e+00 4.912237243785893e+00 9.131338920365988e+03 + 121060 1.004227123978435e+00 -6.032072816710746e+00 -5.971812872814963e+00 3.556364527611390e+00 4.902386450657153e+00 9.130732350794937e+03 + 121080 1.044059921152596e+00 -6.105423154946637e+00 -6.029249965784054e+00 3.132805176001399e+00 4.570203415935877e+00 9.307060417974271e+03 + 121100 9.478094492525492e-01 -5.982724273516702e+00 -6.038008073082357e+00 3.788218040677627e+00 4.470769908431302e+00 9.334106738223418e+03 + 121120 1.027326398255241e+00 -6.123847812586209e+00 -5.994122482061491e+00 3.032475912827512e+00 4.777378835630461e+00 9.199030305171029e+03 + 121140 9.417219026265300e-01 -6.019967508865978e+00 -5.977222094679924e+00 3.660077867009940e+00 4.905528650097729e+00 9.147250431548428e+03 + 121160 1.000198538869441e+00 -6.127367359576355e+00 -5.947372171081653e+00 3.047735615348059e+00 5.081295841850032e+00 9.056202012922608e+03 + 121180 9.473426956328034e-01 -6.063796616612604e+00 -6.010042402842043e+00 3.318906202646571e+00 4.627571216554833e+00 9.247912776980575e+03 + 121200 8.783689831293923e-01 -5.971783893969638e+00 -5.999178574812179e+00 3.903805802137828e+00 4.746501305426801e+00 9.214529442162067e+03 + 121220 9.569768166035227e-01 -6.091127469202522e+00 -5.971879351357930e+00 3.245218741650214e+00 4.929959887900462e+00 9.130941488479006e+03 + 121240 9.803391678671258e-01 -6.121629919075924e+00 -6.012086427909022e+00 3.081208763467636e+00 4.710224441548460e+00 9.254202003716455e+03 + 121260 9.355636203667588e-01 -6.046728121294513e+00 -6.025963948697035e+00 3.366949140237053e+00 4.486180232537099e+00 9.296931404074461e+03 + 121280 8.381343951644556e-01 -5.887366358456519e+00 -6.024098102138376e+00 4.259458425185199e+00 4.474323593795023e+00 9.291181247563085e+03 + 121300 1.009195478299509e+00 -6.115987116651512e+00 -5.988168016840021e+00 3.060096273875059e+00 4.794053324934412e+00 9.180792236244391e+03 + 121320 9.460881638219947e-01 -5.989629128548171e+00 -5.991742989570967e+00 3.755696128420623e+00 4.743558011308793e+00 9.191728338437051e+03 + 121340 1.029892999851704e+00 -6.079057016087880e+00 -5.989162753243221e+00 3.254794432999732e+00 4.770981201345983e+00 9.183820863055158e+03 + 121360 9.514238934274937e-01 -5.926068624295748e+00 -6.015477291037216e+00 4.055011388494144e+00 4.541612988118174e+00 9.264625668819675e+03 + 121380 9.806896702378068e-01 -5.937024617400457e+00 -5.989442546710774e+00 4.075283153391390e+00 4.774291291643206e+00 9.184651669275705e+03 + 121400 1.002907485763666e+00 -5.940277195438268e+00 -6.064115731105554e+00 3.961698485444276e+00 4.250598449691260e+00 9.414909956141202e+03 + 121420 1.050174101796645e+00 -5.990713047035623e+00 -6.049784282071744e+00 3.683712540612894e+00 4.344516367791408e+00 9.370501399950033e+03 + 121440 1.067732415208222e+00 -6.005764976834625e+00 -5.993153290721007e+00 3.674833794890723e+00 4.747252048207237e+00 9.196057080798746e+03 + 121460 1.057891878394447e+00 -5.986457057487567e+00 -6.026787660669648e+00 3.770522949820124e+00 4.538938385207942e+00 9.299463976865491e+03 + 121480 1.088195872014811e+00 -6.033115467536007e+00 -6.001197845929197e+00 3.516486695351934e+00 4.699762617854215e+00 9.220719594528915e+03 + 121500 1.021841162282658e+00 -5.940140666739715e+00 -6.023974361829350e+00 4.026212159424689e+00 4.544826108997619e+00 9.290799416461312e+03 + 121520 1.052874672012439e+00 -5.996569107062159e+00 -5.992574701592865e+00 3.721050305995814e+00 4.743986800332748e+00 9.194269037532487e+03 + 121540 9.930289370731258e-01 -5.920225118955974e+00 -6.014556203529160e+00 4.048063973464924e+00 4.506400288157529e+00 9.261775255303022e+03 + 121560 1.044875982242426e+00 -6.011504840563324e+00 -5.973467343526960e+00 3.684408773130088e+00 4.902825967396535e+00 9.135752009909986e+03 + 121580 1.011304992222589e+00 -5.976427129148696e+00 -5.981054563940313e+00 3.834900365620900e+00 4.808328918954218e+00 9.158985704190751e+03 + 121600 1.042125695592204e+00 -6.035800992500590e+00 -5.990845993499123e+00 3.546543520134346e+00 4.804682081164385e+00 9.188969779892801e+03 + 121620 1.033527192132480e+00 -6.039349387612493e+00 -6.014889717085278e+00 3.430940207387507e+00 4.571391420676555e+00 9.262849916570456e+03 + 121640 9.423159415643282e-01 -5.924062507319928e+00 -6.013836737909394e+00 4.143872235158001e+00 4.628374710596002e+00 9.259578505187861e+03 + 121660 9.729372905423213e-01 -5.990009792258607e+00 -6.001375806811071e+00 3.738298162665063e+00 4.673032748219750e+00 9.221244394258079e+03 + 121680 9.809903823783795e-01 -6.020338507080901e+00 -5.987958471578653e+00 3.605547184769109e+00 4.791478359417317e+00 9.180096122922141e+03 + 121700 9.778020122563776e-01 -6.030568173277602e+00 -5.977384485340634e+00 3.520424488425790e+00 4.825813454708966e+00 9.147758041523737e+03 + 121720 9.758121057134208e-01 -6.039933634616521e+00 -5.991878868879057e+00 3.494461161462595e+00 4.770399062778081e+00 9.192145801171517e+03 + 121740 1.010982614319852e+00 -6.107690358915373e+00 -5.981169768117153e+00 3.100566123224136e+00 4.827066934585668e+00 9.159336684973672e+03 + 121760 9.510183134270938e-01 -6.038002816645294e+00 -6.008109474312771e+00 3.456851902847640e+00 4.628504100500763e+00 9.241978029209382e+03 + 121780 8.920619179159005e-01 -5.978078102665229e+00 -6.013311226627407e+00 3.806399576001565e+00 4.604085525902426e+00 9.257964088378983e+03 + 121800 9.938102198696558e-01 -6.167748987942008e+00 -5.975091789595844e+00 2.842348693031621e+00 4.948616139540387e+00 9.140756154825483e+03 + 121820 8.866757569174428e-01 -6.053866567145263e+00 -5.978663026228306e+00 3.412171797879533e+00 4.844002167535047e+00 9.151659210062262e+03 + 121840 9.093505231862662e-01 -6.124588554515836e+00 -5.937308791416124e+00 3.000939450432246e+00 5.076328831600471e+00 9.025621313172338e+03 + 121860 8.902374586426863e-01 -6.121643501776951e+00 -5.918623909304513e+00 3.029870754798961e+00 5.195640671956106e+00 8.968945935654234e+03 + 121880 9.050258394637319e-01 -6.154644913154473e+00 -5.946190486766049e+00 2.923136723197566e+00 5.120114297738125e+00 9.052612489507806e+03 + 121900 9.029497083271938e-01 -6.150982039816471e+00 -5.971586533844656e+00 2.858213085900206e+00 4.888329842555197e+00 9.130048261281341e+03 + 121920 8.604832331806368e-01 -6.077178713361105e+00 -5.994859128997772e+00 3.245723444216935e+00 4.718415236545706e+00 9.201277821007536e+03 + 121940 9.376422981614223e-01 -6.168114025059063e+00 -5.967958902140009e+00 2.764527977837838e+00 4.913849667544215e+00 9.118954881387763e+03 + 121960 9.101516513341555e-01 -6.095437811994779e+00 -5.930974275933783e+00 3.194946217856076e+00 5.139321292568269e+00 9.006369607993951e+03 + 121980 9.346798986038559e-01 -6.089668045233255e+00 -5.952216426641725e+00 3.219714137558170e+00 5.008982602079973e+00 9.070940195702065e+03 + 122000 9.410189873303456e-01 -6.055529195793968e+00 -5.959261712208278e+00 3.364482285276341e+00 4.917265073370309e+00 9.092415827697667e+03 + 122020 9.798991656505787e-01 -6.074905415280423e+00 -5.998302563217940e+00 3.328207445404776e+00 4.768072876200599e+00 9.211843795998626e+03 + 122040 9.609516737032383e-01 -6.017180377735293e+00 -5.981495345601553e+00 3.639810382054740e+00 4.844719358807552e+00 9.160327899001120e+03 + 122060 9.821289830365720e-01 -6.025619003816757e+00 -5.980568237888972e+00 3.574883892959057e+00 4.833572362499896e+00 9.157452699469293e+03 + 122080 9.979085440310806e-01 -6.027320124278249e+00 -5.972595680339477e+00 3.521329597994332e+00 4.835565823671091e+00 9.133096939966934e+03 + 122100 1.002869739644761e+00 -6.016519292147098e+00 -5.993487417398477e+00 3.570940165947724e+00 4.703192754925409e+00 9.197065035637486e+03 + 122120 1.029929193201647e+00 -6.037737507444032e+00 -5.995974800738132e+00 3.461258637346802e+00 4.701066562010054e+00 9.204703177795203e+03 + 122140 1.080917716975854e+00 -6.096908600001250e+00 -5.987229304821057e+00 3.161002420144367e+00 4.790797905885105e+00 9.177899885864827e+03 + 122160 1.088824434160567e+00 -6.094343725205970e+00 -6.014173600427892e+00 3.150131315445810e+00 4.610480578208250e+00 9.260641740470815e+03 + 122180 1.009719376867404e+00 -5.969221736784609e+00 -6.061479394062688e+00 3.835538468577746e+00 4.305780723660699e+00 9.406741467945907e+03 + 122200 9.998825215194708e-01 -5.951323024192961e+00 -5.981435251874603e+00 3.950484643969417e+00 4.777575572769253e+00 9.160134748578779e+03 + 122220 1.036089518310060e+00 -6.001307656786956e+00 -6.000487181402216e+00 3.663072005951427e+00 4.667783302578759e+00 9.218520944961461e+03 + 122240 9.567386705094217e-01 -5.880999696965853e+00 -6.014943654857236e+00 4.294797817507950e+00 4.525670883535137e+00 9.262960183300385e+03 + 122260 1.051291385237442e+00 -6.019350571971252e+00 -6.026025313932031e+00 3.561750288189684e+00 4.523422886937908e+00 9.297094766661421e+03 + 122280 9.819952131167700e-01 -5.918856509009894e+00 -5.978196604981057e+00 4.133510554327278e+00 4.792770540410684e+00 9.150239248376385e+03 + 122300 1.014408627500457e+00 -5.969495803437639e+00 -5.947771479876598e+00 3.846741060775320e+00 4.971485488491024e+00 9.057414634226583e+03 + 122320 1.036374928939502e+00 -6.003183884752712e+00 -5.993049619845838e+00 3.676364567476289e+00 4.734557084843984e+00 9.195732476865509e+03 + 122340 1.012912006670207e+00 -5.972644060084479e+00 -6.020685273428502e+00 3.848397084437621e+00 4.572537003062497e+00 9.280645622427761e+03 + 122360 1.043054828880466e+00 -6.028329656942354e+00 -5.982634289103353e+00 3.542011185060284e+00 4.804401058527150e+00 9.163811519780727e+03 + 122380 9.931228099573532e-01 -5.969653362318398e+00 -5.977369314798119e+00 3.877578842484034e+00 4.833272649305696e+00 9.147694892254143e+03 + 122400 9.769114615291542e-01 -5.965396723851484e+00 -6.021738856648417e+00 3.839666905949836e+00 4.516141660512972e+00 9.283903196216381e+03 + 122420 9.995456258044076e-01 -6.023584583055886e+00 -5.956723650206575e+00 3.578813018039786e+00 4.962738841156447e+00 9.084671686346774e+03 + 122440 1.000567539152121e+00 -6.049675101042125e+00 -5.983043269190605e+00 3.464932813269992e+00 4.847543103004076e+00 9.165068138440483e+03 + 122460 9.247101712025075e-01 -5.964008916073676e+00 -6.016006479125511e+00 3.904296614459505e+00 4.605718560818994e+00 9.266264946022984e+03 + 122480 1.030097384736203e+00 -6.147243639526334e+00 -5.976003457453750e+00 2.960333215438640e+00 4.943620840231949e+00 9.143531422552460e+03 + 122500 8.791260856659509e-01 -5.947377355477783e+00 -6.039615824554296e+00 4.060186438746396e+00 4.530538875452097e+00 9.339043744131923e+03 + 122520 9.870046225568153e-01 -6.126901660136317e+00 -5.991783150080886e+00 3.022569438647797e+00 4.798440832907936e+00 9.191854236752226e+03 + 122540 9.277157605241924e-01 -6.054282811729825e+00 -6.034666970944995e+00 3.428874550976054e+00 4.541511744304097e+00 9.323790557575529e+03 + 122560 9.414313625454815e-01 -6.084676106544887e+00 -6.012577837688470e+00 3.244816440075190e+00 4.658815857019780e+00 9.255722869666548e+03 + 122580 9.874663075425356e-01 -6.157632707266377e+00 -5.998413498572673e+00 2.879290326506329e+00 4.793551661918490e+00 9.212201212512547e+03 + 122600 8.927902172021072e-01 -6.018114954958522e+00 -5.987462944949216e+00 3.644318485212009e+00 4.820327070068656e+00 9.178598133491209e+03 + 122620 9.845891002148218e-01 -6.145555387075291e+00 -5.966205619003479e+00 2.955901429532537e+00 4.985755552087790e+00 9.113598192730165e+03 + 122640 9.488800552739127e-01 -6.073510969596118e+00 -5.997781220383851e+00 3.313690126397181e+00 4.748542065514830e+00 9.210257732474243e+03 + 122660 9.348169316160505e-01 -6.019862831718884e+00 -6.015656372578133e+00 3.612778031639345e+00 4.636932170972986e+00 9.265177024568668e+03 + 122680 8.962433046018666e-01 -5.918897333094039e+00 -6.013782079650056e+00 4.129815517159447e+00 4.584972619067717e+00 9.259399160506771e+03 + 122700 9.765604431988583e-01 -5.984141715566715e+00 -6.019281544516533e+00 3.790329372867823e+00 4.588551037167018e+00 9.276341620635569e+03 + 122720 1.070888754482547e+00 -6.074050727053908e+00 -6.012854685118414e+00 3.284433882673605e+00 4.635831025524094e+00 9.256568533325672e+03 + 122740 1.060499065976080e+00 -6.025078847329861e+00 -6.017952499984123e+00 3.520825867563031e+00 4.561746456820947e+00 9.272247623605417e+03 + 122760 1.032877614827621e+00 -5.966045465613968e+00 -5.959971167854588e+00 3.918363365708214e+00 4.953242923437109e+00 9.094558896081859e+03 + 122780 1.045780770506027e+00 -5.974045944498114e+00 -5.964472206899363e+00 3.760552346466306e+00 4.815526229289437e+00 9.108268160121366e+03 + 122800 1.020885709437235e+00 -5.928936931305628e+00 -6.002098033421676e+00 4.081933191624293e+00 4.661830821629985e+00 9.223464357342311e+03 + 122820 1.045353995968192e+00 -5.962851071167560e+00 -5.983097977452791e+00 3.888408986782205e+00 4.772148117693780e+00 9.165205288475883e+03 + 122840 1.037917843777814e+00 -5.952346323169175e+00 -5.984898218119812e+00 3.968453447757590e+00 4.781535429561570e+00 9.170747462183183e+03 + 122860 1.100136628099640e+00 -6.049922393685627e+00 -6.019428737193754e+00 3.391606223622214e+00 4.566705518076634e+00 9.276782992322409e+03 + 122880 1.001486459018440e+00 -5.914790619809280e+00 -6.039417402940503e+00 4.148054526841458e+00 4.432428252169621e+00 9.338437713746278e+03 + 122900 9.510768414023982e-01 -5.855236463538844e+00 -6.084901732676049e+00 4.383944823306430e+00 4.065171307335063e+00 9.479476874784144e+03 + 122920 1.014382483156633e+00 -5.968151873532575e+00 -6.023529452612203e+00 3.866744391454054e+00 4.548757762726165e+00 9.289396026544913e+03 + 122940 1.075449252843866e+00 -6.081350923668669e+00 -6.003695898174231e+00 3.235975424712325e+00 4.681882598177750e+00 9.228421482934062e+03 + 122960 9.714942785359929e-01 -5.953090315343530e+00 -6.049492708752046e+00 3.959425888868059e+00 4.405868427694189e+00 9.369617837301683e+03 + 122980 9.999830474379393e-01 -6.025682589014585e+00 -5.994326581473207e+00 3.601220545054272e+00 4.781271592683358e+00 9.199615373656792e+03 + 123000 9.353571634814601e-01 -5.956606102626738e+00 -5.993823340707903e+00 3.949316011362501e+00 4.735608870951475e+00 9.198065647158304e+03 + 123020 9.617424523834007e-01 -6.018294446758979e+00 -6.005991531169879e+00 3.577762055775512e+00 4.648407300958162e+00 9.235440106169435e+03 + 123040 9.810338316832351e-01 -6.066546404928065e+00 -6.001685815633303e+00 3.307304637820075e+00 4.679744178694353e+00 9.222196171340556e+03 + 123060 8.981903905473215e-01 -5.959052819680023e+00 -5.989504513536997e+00 3.864250710314789e+00 4.689392371803651e+00 9.184835439848219e+03 + 123080 9.233032421075045e-01 -6.003290590720638e+00 -5.981335205268850e+00 3.611934272222372e+00 4.738005493071453e+00 9.159814924076578e+03 + 123100 8.961786383637401e-01 -5.962948324582951e+00 -5.968887062587974e+00 3.897043500831348e+00 4.862942348189764e+00 9.121751130204519e+03 + 123120 9.589724294120278e-01 -6.048853518712105e+00 -5.952812089967578e+00 3.430442625743459e+00 4.981927371957594e+00 9.072749345895940e+03 + 123140 1.019823544630263e+00 -6.123312589556784e+00 -5.976467318368161e+00 3.038797683442435e+00 4.882005954839786e+00 9.144971738131851e+03 + 123160 9.783873284830409e-01 -6.039639126161354e+00 -6.048053332980606e+00 3.500465954372110e+00 4.452150276721671e+00 9.365153793126658e+03 + 123180 9.753662348907484e-01 -6.011395669193637e+00 -5.982652295932747e+00 3.636373614249070e+00 4.801422511535735e+00 9.163869735313883e+03 + 123200 1.029269657130164e+00 -6.055810762351106e+00 -5.976634323982339e+00 3.401752475085615e+00 4.856395836713313e+00 9.145455917663065e+03 + 123220 9.766531739523108e-01 -5.924274672480021e+00 -6.029502369455225e+00 4.055523035645011e+00 4.451289315679918e+00 9.307820473694181e+03 + 123240 9.760855008512722e-01 -5.858531788725176e+00 -6.012707568320865e+00 4.447625872860448e+00 4.562324687797219e+00 9.256055935077136e+03 + 123260 1.037264087229442e+00 -5.888012098048853e+00 -6.002762768482450e+00 4.265592297963953e+00 4.606676190725380e+00 9.225497171500001e+03 + 123280 1.082225067367437e+00 -5.914933356042854e+00 -5.997152439834236e+00 4.063722409228193e+00 4.591607706735978e+00 9.208277388038296e+03 + 123300 1.086413010269645e+00 -5.904242522291137e+00 -6.017507002555410e+00 4.221280893281145e+00 4.570898719982011e+00 9.270825457388677e+03 + 123320 1.086533403303641e+00 -5.902736523743066e+00 -6.023875064063701e+00 4.219941687159072e+00 4.524345442509454e+00 9.290469691578812e+03 + 123340 1.075121783865439e+00 -5.893722155340365e+00 -6.053518550361066e+00 4.238054818062079e+00 4.320479189441001e+00 9.382054804775635e+03 + 123360 1.130916518602930e+00 -5.993200945748066e+00 -6.015873767076912e+00 3.757967351538693e+00 4.627776502860693e+00 9.265837597208278e+03 + 123380 1.018081394845946e+00 -5.851318013690781e+00 -6.050901102033979e+00 4.420888046642055e+00 4.274851067992308e+00 9.373973593803041e+03 + 123400 9.848739845725890e-01 -5.830803442273425e+00 -6.031570217133051e+00 4.533652417317088e+00 4.380818527515108e+00 9.314207815057445e+03 + 123420 1.023887270737367e+00 -5.919409735109416e+00 -6.037825914218544e+00 4.124323097207048e+00 4.444359071917943e+00 9.333535233108365e+03 + 123440 1.035221388202900e+00 -5.970357855967075e+00 -5.996995743875067e+00 3.798552223506367e+00 4.645593348938850e+00 9.207813600839261e+03 + 123460 1.013800955855953e+00 -5.970559444624490e+00 -6.006196193292432e+00 3.856031991626109e+00 4.651400266005754e+00 9.236072443157367e+03 + 123480 1.062981806146859e+00 -6.072167894436558e+00 -5.989579703220973e+00 3.307259082600848e+00 4.781493257042022e+00 9.185100461183276e+03 + 123500 9.802938354409672e-01 -5.978811813148240e+00 -5.992838082421144e+00 3.858425006691630e+00 4.777883997968462e+00 9.195090379940202e+03 + 123520 9.431878851314405e-01 -5.946473503884246e+00 -6.027745406525801e+00 3.947269333876174e+00 4.480593492122077e+00 9.302416921691001e+03 + 123540 1.003177447096939e+00 -6.053040126858627e+00 -5.995829504914009e+00 3.406671760968773e+00 4.735184005489901e+00 9.204272683740994e+03 + 123560 1.039973595454174e+00 -6.123697155019639e+00 -5.991245078687010e+00 3.010090640529167e+00 4.770650959723691e+00 9.190213983537262e+03 + 123580 9.723041819441364e-01 -6.036397712744627e+00 -5.989526971310569e+00 3.527003023913356e+00 4.796142074451510e+00 9.184941507235135e+03 + 123600 8.786513663463639e-01 -5.905554047788812e+00 -6.053829789942530e+00 4.167239809343012e+00 4.315817552299415e+00 9.383060623138097e+03 + 123620 1.007253991704887e+00 -6.101579265283224e+00 -6.037000009322678e+00 3.128592426213861e+00 4.499416507546880e+00 9.330996097703426e+03 + 123640 9.920399508359660e-01 -6.083113302185224e+00 -6.023941574478631e+00 3.298730677059297e+00 4.638503894345831e+00 9.290717816219178e+03 + 123660 9.767461172764059e-01 -6.063422801863068e+00 -6.012780349513439e+00 3.384849372772928e+00 4.675646171058670e+00 9.256337802428052e+03 + 123680 1.006743890164171e+00 -6.107438909229407e+00 -5.975517978094436e+00 3.122438080739188e+00 4.879948482014306e+00 9.142062286298164e+03 + 123700 9.979922091691785e-01 -6.089791463520310e+00 -6.010443200652583e+00 3.234551768540202e+00 4.690181773030684e+00 9.249132210228405e+03 + 123720 1.017126544827034e+00 -6.110311489777317e+00 -5.942562864492560e+00 3.148672802998337e+00 5.111911368399280e+00 9.041587451238711e+03 + 123740 9.377786304736554e-01 -5.977181395860317e+00 -6.010991290671952e+00 3.807447729491142e+00 4.613306081418419e+00 9.250808640906951e+03 + 123760 1.083944312910552e+00 -6.166235570746960e+00 -5.979232470584986e+00 2.841809092271783e+00 4.915609832038063e+00 9.153423238277472e+03 + 123780 9.587316744157260e-01 -5.945599402925202e+00 -6.018278901199039e+00 3.974607166379101e+00 4.557270240174722e+00 9.273249091001513e+03 + 123800 1.021472519920928e+00 -5.994356981359410e+00 -6.034966183564231e+00 3.708638883822547e+00 4.475454560508732e+00 9.324695275781913e+03 + 123820 1.012722126021111e+00 -5.934705175862732e+00 -6.032610553077223e+00 4.070325354045004e+00 4.508137527271235e+00 9.317403748673705e+03 + 123840 1.048229268904558e+00 -5.948545848719429e+00 -5.989897803875113e+00 3.989815781076932e+00 4.752366455378616e+00 9.186047824070094e+03 + 123860 9.720628159192579e-01 -5.805789434241822e+00 -6.024875465437868e+00 4.723866336246204e+00 4.465840441664752e+00 9.293535047868398e+03 + 123880 1.099858067453143e+00 -5.975067076769561e+00 -5.961241146541541e+00 3.872606932587036e+00 4.951997563512112e+00 9.098431599694331e+03 + 123900 1.097501487090715e+00 -5.958867705275149e+00 -6.002951639614788e+00 3.932932204256019e+00 4.679795431311021e+00 9.226114408316113e+03 + 123920 1.080317660111342e+00 -5.932873808120159e+00 -6.007194519942589e+00 4.079824550973101e+00 4.653063522595725e+00 9.239146092755549e+03 + 123940 1.058119810902120e+00 -5.906593576231476e+00 -6.037324715323791e+00 4.183924755166663e+00 4.433246323920198e+00 9.331986920327610e+03 + 123960 1.053487809124982e+00 -5.913525642412194e+00 -6.020311279822441e+00 4.146375808819167e+00 4.533196153785547e+00 9.279507109512202e+03 + 123980 1.061941219730768e+00 -5.946699513365287e+00 -6.002665700684656e+00 4.036012228432083e+00 4.714645720104769e+00 9.225220351265700e+03 + 124000 1.012274077957281e+00 -5.897146912239277e+00 -6.050321248374281e+00 4.257637395463574e+00 4.378086653724472e+00 9.372141612023126e+03 + 124020 1.085680059621698e+00 -6.032239523861806e+00 -5.990036748671830e+00 3.498025847786092e+00 4.740360713785288e+00 9.186502418393038e+03 + 124040 1.022959445064382e+00 -5.965549981880623e+00 -6.015037502389326e+00 3.882266527122741e+00 4.598101526192719e+00 9.263268334457896e+03 + 124060 9.931326954876774e-01 -5.944988685611698e+00 -6.008312219287410e+00 3.920535993613307e+00 4.556922463962203e+00 9.242595171412024e+03 + 124080 1.057353561950592e+00 -6.059763867882184e+00 -5.988670350776236e+00 3.389567508188625e+00 4.797797485097194e+00 9.182301848971339e+03 + 124100 9.860858845003762e-01 -5.968581534442435e+00 -6.029708915971403e+00 3.835963311580020e+00 4.484960427408964e+00 9.308474208341360e+03 + 124120 1.061590941755535e+00 -6.093015288310814e+00 -5.999832540400881e+00 3.200820403088874e+00 4.735890161571348e+00 9.216546919144843e+03 + 124140 9.662817435301387e-01 -5.963171499859463e+00 -6.024900944515498e+00 3.875060482300348e+00 4.520600458484710e+00 9.293645340266856e+03 + 124160 9.881626582202623e-01 -6.003270910871541e+00 -5.976794962613015e+00 3.720640723439520e+00 4.872669715479725e+00 9.145930727461193e+03 + 124180 9.420939858967305e-01 -5.939318836310806e+00 -6.010773312933384e+00 4.038768325183471e+00 4.628465662872100e+00 9.250123394625247e+03 + 124200 9.934017734789602e-01 -6.015850568389206e+00 -5.963817536660697e+00 3.630940506482832e+00 4.929722226753569e+00 9.106306362934552e+03 + 124220 9.764651631955996e-01 -5.988109143830149e+00 -6.008053979347290e+00 3.749287603562169e+00 4.634761271569426e+00 9.241788763333712e+03 + 124240 9.840243280086807e-01 -5.995880406869042e+00 -6.020968213968503e+00 3.740855524687925e+00 4.596797453997217e+00 9.281542774138152e+03 + 124260 9.455904234278267e-01 -5.936645003790912e+00 -6.058827784888255e+00 4.073631724131467e+00 4.372039287346259e+00 9.398501024624293e+03 + 124280 1.076525222016993e+00 -6.129727327848756e+00 -5.970224897729970e+00 3.015144184634052e+00 4.931031821297410e+00 9.125886647472122e+03 + 124300 1.028786921610537e+00 -6.058171765522241e+00 -5.959352873463576e+00 3.356961891230990e+00 4.924395261605964e+00 9.092714778637652e+03 + 124320 9.899272841505514e-01 -5.997180629092604e+00 -6.007641243055870e+00 3.691021345129546e+00 4.630954880977694e+00 9.240500578839205e+03 + 124340 1.039555768408490e+00 -6.065036819715152e+00 -5.955507943451718e+00 3.379680437452158e+00 5.008612194495617e+00 9.080981140633074e+03 + 124360 9.825832472930974e-01 -5.974527624199014e+00 -5.975736413218733e+00 3.812250640495523e+00 4.805309586884799e+00 9.142711285820058e+03 + 124380 9.980322335042471e-01 -5.986770752267056e+00 -5.985306378016524e+00 3.754519553745834e+00 4.762928217303569e+00 9.172010152928520e+03 + 124400 1.044156042935792e+00 -6.038724291714997e+00 -6.016594664034223e+00 3.495827737133202e+00 4.622899483825025e+00 9.268057505579911e+03 + 124420 1.008758843966250e+00 -5.966960003574558e+00 -6.043515457421063e+00 3.846618743116153e+00 4.407025480211324e+00 9.351117504385731e+03 + 124440 1.070176921641926e+00 -6.033976577163402e+00 -5.980121491141333e+00 3.499725663965798e+00 4.808969901952151e+00 9.156133345841441e+03 + 124460 9.687547762710829e-01 -5.854936462646704e+00 -6.091204725781299e+00 4.470013084408931e+00 4.113324155094525e+00 9.499115901188057e+03 + 124480 1.036390555258667e+00 -5.923838573028403e+00 -6.022000355350316e+00 4.128384730591566e+00 4.564724586012425e+00 9.284686351820284e+03 + 124500 1.077511879157249e+00 -5.954704252766570e+00 -5.999133839975630e+00 3.895802664695853e+00 4.640681099485028e+00 9.214395758764327e+03 + 124520 9.953991383502016e-01 -5.807520480812563e+00 -6.047994305195404e+00 4.652095024823709e+00 4.271257112013383e+00 9.364939454663674e+03 + 124540 1.103043397986634e+00 -5.946767529431950e+00 -6.003041792448391e+00 3.999357860055679e+00 4.676222333401218e+00 9.226390505049303e+03 + 124560 1.185328625152855e+00 -6.056189807233237e+00 -5.996630478980332e+00 3.364306645829181e+00 4.706305525433617e+00 9.206707340062268e+03 + 124580 1.055063125440739e+00 -5.861554272663236e+00 -6.028714716112446e+00 4.467007815042721e+00 4.507146680762335e+00 9.305390820419036e+03 + 124600 1.104701881009136e+00 -5.944126686991133e+00 -6.015340942527543e+00 3.984900490179546e+00 4.575977214519051e+00 9.264202707385744e+03 + 124620 1.123438516348996e+00 -5.996404864448864e+00 -5.952522487754739e+00 3.739715559563866e+00 4.991694957317378e+00 9.071843158278227e+03 + 124640 9.880794721018266e-01 -5.828707062166655e+00 -6.026754623939762e+00 4.585878759020074e+00 4.448659011557758e+00 9.299268423159070e+03 + 124660 9.611105052715775e-01 -5.828862280797315e+00 -6.025052169648831e+00 4.634601284068941e+00 4.508048581996360e+00 9.294081026644240e+03 + 124680 1.073689594477091e+00 -6.039275873682342e+00 -5.994560381599896e+00 3.476525705914460e+00 4.733288981151896e+00 9.200354453593309e+03 + 124700 1.000584873663811e+00 -5.972200184111881e+00 -6.011712062090627e+00 3.768431409911373e+00 4.541548092114057e+00 9.253028618328897e+03 + 124720 9.893961610914653e-01 -5.987684590170650e+00 -6.024597190060384e+00 3.683335744543269e+00 4.471377883770044e+00 9.292703218230341e+03 + 124740 9.767814076171210e-01 -5.991620114108662e+00 -6.000817584938131e+00 3.770828147298456e+00 4.718014846491632e+00 9.219537083458108e+03 + 124760 1.008583611188331e+00 -6.055134777382788e+00 -5.962131998624566e+00 3.443293655654013e+00 4.977330003417229e+00 9.101154378674348e+03 + 124780 1.004712251642494e+00 -6.060629468958676e+00 -5.972598745691249e+00 3.386000263988252e+00 4.891486299700218e+00 9.133125089315479e+03 + 124800 9.513251416107497e-01 -5.988520385929957e+00 -5.989467489666035e+00 3.772880635535071e+00 4.767442219318679e+00 9.184734011475017e+03 + 124820 9.285224611198164e-01 -5.954981763343010e+00 -6.003881627522146e+00 3.932140672107892e+00 4.651350084761767e+00 9.228963818344326e+03 + 124840 9.856680175868193e-01 -6.037245889566232e+00 -5.972432766620466e+00 3.470289073969006e+00 4.842456055721950e+00 9.132612531193368e+03 + 124860 9.820446753741117e-01 -6.025641160062878e+00 -5.994831593049836e+00 3.599242060546033e+00 4.776155362100006e+00 9.201173595634313e+03 + 124880 9.719838054304180e-01 -6.004110762060463e+00 -6.019491239388354e+00 3.655244803399943e+00 4.566927722462021e+00 9.276961003162845e+03 + 124900 9.993336514014178e-01 -6.036433120738961e+00 -5.990876299556321e+00 3.522248426066599e+00 4.783842743192610e+00 9.189051743137688e+03 + 124920 9.760227571907198e-01 -5.990515593656283e+00 -5.987647554355265e+00 3.787178271790977e+00 4.803646997285075e+00 9.179155326055947e+03 + 124940 9.554723263286306e-01 -5.946911489419190e+00 -6.019467089154888e+00 3.968366163028428e+00 4.551740681403272e+00 9.276899071956868e+03 + 124960 1.038749121411120e+00 -6.054603960946668e+00 -5.955746115074043e+00 3.421012064725437e+00 4.988669113928258e+00 9.081704888463535e+03 + 124980 9.813518341174633e-01 -5.950411096188477e+00 -5.982615319779734e+00 3.974584633840274e+00 4.789662998391776e+00 9.163742366609622e+03 + 125000 1.058803600663917e+00 -6.042477251681595e+00 -6.008397168562554e+00 3.469756770881097e+00 4.665449882026449e+00 9.242845901049623e+03 + 125020 1.011004311163601e+00 -5.946555565902699e+00 -5.992371278758494e+00 4.017328654570617e+00 4.754247741393989e+00 9.193654352469128e+03 + 125040 1.128335769362622e+00 -6.093145724125940e+00 -5.982813594951210e+00 3.255061843655502e+00 4.888606003218612e+00 9.164367245017345e+03 + 125060 1.033658255271295e+00 -5.923999791388416e+00 -6.021214713332393e+00 4.077389607437232e+00 4.519166481674371e+00 9.282286635071421e+03 + 125080 1.025966170264179e+00 -5.888257660416938e+00 -6.011463058625383e+00 4.295738492166388e+00 4.588274029679744e+00 9.252226795352315e+03 + 125100 1.113718045768765e+00 -5.990579328552990e+00 -5.958087728954386e+00 3.732188272629949e+00 4.918760065583925e+00 9.088815987963491e+03 + 125120 1.088892424095274e+00 -5.919433775150998e+00 -6.005311331332893e+00 4.120602829942239e+00 4.627480612836932e+00 9.233347157559654e+03 + 125140 1.123476671422095e+00 -5.938802811383860e+00 -6.003112945550227e+00 4.081365768712224e+00 4.712087026367843e+00 9.226581232640488e+03 + 125160 1.108949422776599e+00 -5.890135581963097e+00 -6.008993687416028e+00 4.347248372412208e+00 4.664746737669102e+00 9.244656940776127e+03 + 125180 1.143370688259858e+00 -5.920544147752681e+00 -6.019509448664929e+00 4.161625847191600e+00 4.593351774522647e+00 9.277014287426362e+03 + 125200 1.094110113884833e+00 -5.838998421105206e+00 -6.024589389549471e+00 4.546446071248368e+00 4.480754010331850e+00 9.292663251758731e+03 + 125220 1.038305704692693e+00 -5.760919899281270e+00 -6.026490744578792e+00 4.981287881755168e+00 4.456338991101307e+00 9.298541681479464e+03 + 125240 1.093935211188485e+00 -5.863307236382985e+00 -6.055842015506163e+00 4.460424192384732e+00 4.354859695998669e+00 9.389257707173074e+03 + 125260 1.126232741316094e+00 -5.956377788187481e+00 -6.035169918780081e+00 3.894981494797281e+00 4.442544887891774e+00 9.325341462850929e+03 + 125280 1.060329743271590e+00 -5.921405287826175e+00 -5.997415048166975e+00 4.108176238694208e+00 4.671716432344941e+00 9.209081660912554e+03 + 125300 9.959776766886681e-01 -5.881774580489923e+00 -5.986453988118081e+00 4.367209691398728e+00 4.766124333711869e+00 9.175486083134778e+03 + 125320 1.058343273395161e+00 -6.021569833116390e+00 -6.027113593794644e+00 3.615001761481444e+00 4.583168629772723e+00 9.300447000261905e+03 + 125340 1.032239960784057e+00 -6.019484366065891e+00 -6.013728990104951e+00 3.582298378778156e+00 4.615346638187423e+00 9.259240547244699e+03 + 125360 1.004056682584813e+00 -6.005140857387198e+00 -6.027485510414293e+00 3.750589200923406e+00 4.622282745417943e+00 9.301587421743461e+03 + 125380 9.495696676121819e-01 -5.945150443567941e+00 -6.029309399088422e+00 4.027230015644466e+00 4.543976269489586e+00 9.307266409712036e+03 + 125400 1.004442792203323e+00 -6.041271262809451e+00 -6.019008557231185e+00 3.500140360204990e+00 4.627976260777943e+00 9.275496987756451e+03 + 125420 1.019347572263133e+00 -6.076425444433160e+00 -6.027221883980931e+00 3.303540257994933e+00 4.586074716338003e+00 9.300815091392524e+03 + 125440 9.998373153607814e-01 -6.060262729001812e+00 -6.025429212092256e+00 3.396966124105709e+00 4.596985568669699e+00 9.295280468895882e+03 + 125460 9.742724174621146e-01 -6.033757408641801e+00 -6.025860709988849e+00 3.586384309538112e+00 4.631728375213531e+00 9.296604814371507e+03 + 125480 9.153272335643468e-01 -5.955091350048226e+00 -6.005609558047333e+00 3.982518049293447e+00 4.692434681295154e+00 9.234266505126632e+03 + 125500 9.868012582977953e-01 -6.066774652642710e+00 -5.972992715060176e+00 3.413240324224066e+00 4.951750722530917e+00 9.134312333079199e+03 + 125520 9.985416562089677e-01 -6.083955579526577e+00 -6.019096506027084e+00 3.243013985497389e+00 4.615444822440663e+00 9.275772760288344e+03 + 125540 9.445451434350892e-01 -6.001333626880140e+00 -6.012134515679953e+00 3.760322799775299e+00 4.698302424854639e+00 9.254339058744630e+03 + 125560 9.835987135488923e-01 -6.054060138273593e+00 -5.977890539476261e+00 3.425088351162915e+00 4.862465974664511e+00 9.149283993474472e+03 + 125580 9.708156242733434e-01 -6.024077856301126e+00 -5.971016804859226e+00 3.585428967917394e+00 4.890113736467957e+00 9.128289769474139e+03 + 125600 9.857284541798346e-01 -6.029705592649568e+00 -5.994952979789590e+00 3.560689023068963e+00 4.760243904060419e+00 9.201566393754481e+03 + 125620 9.805411172365961e-01 -6.000845723118795e+00 -5.979062321355821e+00 3.729771165415884e+00 4.854854829309413e+00 9.152871373833053e+03 + 125640 9.934446052095677e-01 -5.992923987257125e+00 -5.983330262727788e+00 3.786043740712754e+00 4.841132391584279e+00 9.165950421119356e+03 + 125660 1.022898881955278e+00 -6.003557834794901e+00 -6.017623691529747e+00 3.650318669887091e+00 4.569550343831317e+00 9.271233004227084e+03 + 125680 9.812225521664235e-01 -5.906446408435178e+00 -6.045647728547983e+00 4.180376924205397e+00 4.381061402783005e+00 9.357719973328123e+03 + 125700 1.038884968407810e+00 -5.961967490074636e+00 -6.027117250243458e+00 3.920760873364321e+00 4.546660868582142e+00 9.300474460682615e+03 + 125720 1.014047045385409e+00 -5.900581840825416e+00 -6.011258037263846e+00 4.215125837972691e+00 4.579605990937181e+00 9.251632841745142e+03 + 125740 1.037712204943780e+00 -5.915738759912657e+00 -6.043271843560960e+00 4.143604827142261e+00 4.411290125152793e+00 9.350347361157903e+03 + 125760 1.005843100422138e+00 -5.855608947953996e+00 -6.027832879838955e+00 4.494285117316235e+00 4.505348648865480e+00 9.302666314612770e+03 + 125780 1.036442332250424e+00 -5.895079259929557e+00 -6.007487392778660e+00 4.242393021369736e+00 4.596928127447848e+00 9.240036300420748e+03 + 125800 1.033653182969207e+00 -5.889618706327971e+00 -5.976926671792755e+00 4.370213115916081e+00 4.868877267353295e+00 9.146316581893683e+03 + 125820 1.082547965046774e+00 -5.966157099810196e+00 -5.993469264419600e+00 3.909754789037940e+00 4.752924113306930e+00 9.197013130416244e+03 + 125840 1.084015407373549e+00 -5.979980014909617e+00 -5.998812477741950e+00 3.875629713342537e+00 4.767490797445076e+00 9.213405186930671e+03 + 125860 1.003395864353425e+00 -5.883054022419498e+00 -6.016418003925783e+00 4.304371042801083e+00 4.538574422982554e+00 9.267524651271990e+03 + 125880 1.038953409490851e+00 -5.974182885231290e+00 -6.016763570687524e+00 3.792090700238202e+00 4.547585815008726e+00 9.268565002541289e+03 + 125900 1.025848325204767e+00 -6.009920869454565e+00 -5.990857512342031e+00 3.625327550425429e+00 4.734792297010582e+00 9.188989005385682e+03 + 125920 9.596258813945371e-01 -5.971204780737382e+00 -6.002307298466624e+00 3.871643566576727e+00 4.693048096676356e+00 9.224135433907537e+03 + 125940 9.468187152049662e-01 -6.004159660645293e+00 -5.990954673519568e+00 3.738623504474289e+00 4.814448584015354e+00 9.189262783893882e+03 + 125960 9.252418716497699e-01 -6.003438821257785e+00 -5.994394916267987e+00 3.688867618492083e+00 4.740799120483282e+00 9.199824549649265e+03 + 125980 9.433694283047944e-01 -6.045222461096742e+00 -5.993417263737068e+00 3.420763689308691e+00 4.718237149376325e+00 9.196846677307958e+03 + 126000 9.074247295366429e-01 -5.997226572508357e+00 -6.031488266485722e+00 3.671191290242314e+00 4.474455341444274e+00 9.313961143393215e+03 + 126020 9.417788512939868e-01 -6.048655753032055e+00 -5.990211702502586e+00 3.431866868207617e+00 4.767461650535415e+00 9.187012355122486e+03 + 126040 9.181244022498743e-01 -6.007371570285549e+00 -5.972997233893471e+00 3.683062796262651e+00 4.880445555237331e+00 9.134345306285408e+03 + 126060 9.140409062871906e-01 -5.989046965932240e+00 -6.025225613837806e+00 3.748907054077019e+00 4.541163659175592e+00 9.294667101149495e+03 + 126080 1.021718872608038e+00 -6.133475266382705e+00 -5.968548278077069e+00 3.006553739935851e+00 4.953590029155766e+00 9.120745260658678e+03 + 126100 1.036007945343511e+00 -6.136547581298867e+00 -5.971573664939749e+00 2.972605432932966e+00 4.919911190298073e+00 9.129985653594542e+03 + 126120 9.840400007309779e-01 -6.037958745068978e+00 -5.998311055281426e+00 3.510391570145234e+00 4.738054740365525e+00 9.211870340881129e+03 + 126140 9.591541988278618e-01 -5.977231370806799e+00 -6.035831487645790e+00 3.809679177326709e+00 4.473188238098448e+00 9.327387610250129e+03 + 126160 9.831623845582614e-01 -5.989809122046782e+00 -6.005626307270774e+00 3.743399847132836e+00 4.652575121875172e+00 9.234333106555781e+03 + 126180 9.831261497659205e-01 -5.965843649577028e+00 -6.060248918319530e+00 3.887280286198827e+00 4.345190623911259e+00 9.402937246209694e+03 + 126200 1.100700991815297e+00 -6.118245281910656e+00 -5.998540302343055e+00 3.093601244710562e+00 4.780965761673448e+00 9.212572041959735e+03 + 126220 1.068825287626537e+00 -6.054677497409041e+00 -5.999042020917519e+00 3.422207399134424e+00 4.741674914710908e+00 9.214105910211345e+03 + 126240 1.034571182758139e+00 -5.991617902713482e+00 -5.980836128841276e+00 3.795915381388534e+00 4.857825995436857e+00 9.158297883393012e+03 + 126260 1.023293506858967e+00 -5.962895328007463e+00 -5.991718378693212e+00 3.957544216841449e+00 4.792037799451193e+00 9.191624687795342e+03 + 126280 1.014627145856603e+00 -5.940210215362608e+00 -6.018133682075455e+00 4.030413921479928e+00 4.582965316997265e+00 9.272783850424348e+03 + 126300 9.837103546122099e-01 -5.886610371647957e+00 -6.020328436126865e+00 4.325706851607530e+00 4.557877032566034e+00 9.279530911443155e+03 + 126320 1.041775249319381e+00 -5.967195202276034e+00 -6.045504061155243e+00 3.822602832692018e+00 4.372941246750855e+00 9.357266769537484e+03 + 126340 1.032482657250843e+00 -5.953581899024300e+00 -6.000539965073119e+00 3.919912582996281e+00 4.650272101006726e+00 9.218701611591128e+03 + 126360 1.074996796693191e+00 -6.020785166852886e+00 -6.017103585694621e+00 3.574730064034863e+00 4.595870272768465e+00 9.269628744233378e+03 + 126380 1.040044141715966e+00 -5.982160316614779e+00 -6.005431420206675e+00 3.784663072232191e+00 4.651036794215885e+00 9.233737403517143e+03 + 126400 1.043615083844873e+00 -6.011658766460149e+00 -5.999620990639462e+00 3.616192333872894e+00 4.685315105475064e+00 9.215880829103737e+03 + 126420 9.493937484818084e-01 -5.908592090418303e+00 -6.023982552886112e+00 4.193688698476589e+00 4.531098806370071e+00 9.290803859937976e+03 + 126440 1.011406119749822e+00 -6.045839445242018e+00 -6.005960103451505e+00 3.432407941876658e+00 4.661401293745983e+00 9.235377222422225e+03 + 126460 1.023678153577608e+00 -6.114306313820338e+00 -6.010621662886549e+00 3.049069872270353e+00 4.644443183080046e+00 9.249703494021627e+03 + 126480 9.540694749489361e-01 -6.055316112252806e+00 -5.981672625444338e+00 3.410059807228490e+00 4.832932104775468e+00 9.160879625706701e+03 + 126500 9.955999900932107e-01 -6.147457260935766e+00 -5.947314333033954e+00 2.912145683520015e+00 5.061397347550221e+00 9.056019583226489e+03 + 126520 9.167819055554327e-01 -6.048334273562610e+00 -5.994541524917432e+00 3.406992279772886e+00 4.715878566894446e+00 9.200290776742981e+03 + 126540 9.522111950455127e-01 -6.108753218698528e+00 -5.959076799027974e+00 3.152969742236919e+00 5.012434906336326e+00 9.091837321232588e+03 + 126560 9.506452207683755e-01 -6.106796466361642e+00 -5.960762548506428e+00 3.109165788454054e+00 4.947715143454448e+00 9.096989888241151e+03 + 126580 9.471114000031166e-01 -6.094382142904365e+00 -5.958676104472291e+00 3.150265834388096e+00 4.929510907506646e+00 9.090647226400770e+03 + 126600 9.487255147836527e-01 -6.081802974480584e+00 -5.987142901727276e+00 3.254514960139605e+00 4.798067746488016e+00 9.177624758793811e+03 + 126620 9.941834773784647e-01 -6.126552186362151e+00 -5.984209160008705e+00 3.056247166330020e+00 4.873602851163648e+00 9.168640290362178e+03 + 126640 9.345920617210182e-01 -6.012617169982644e+00 -5.975473328570888e+00 3.643158156219315e+00 4.856443841596498e+00 9.141914545494041e+03 + 126660 9.706563502237273e-01 -6.037503061292819e+00 -5.967404989428872e+00 3.481696244071721e+00 4.884210220356067e+00 9.117258457561353e+03 + 126680 9.639067441494563e-01 -5.995491733028210e+00 -5.961172398454392e+00 3.774898639708575e+00 4.971965569731302e+00 9.098198319145669e+03 + 126700 1.008261769052061e+00 -6.029658765942020e+00 -5.943176154995239e+00 3.557029441056906e+00 5.053625976254112e+00 9.043412518523703e+03 + 126720 9.970643201092895e-01 -5.984493772983585e+00 -5.972907714916406e+00 3.730276098933138e+00 4.796805037291570e+00 9.134060293682871e+03 + 126740 1.049933145617008e+00 -6.040989452569630e+00 -5.976023063038459e+00 3.447608015976301e+00 4.820655078180573e+00 9.143588036187504e+03 + 126760 9.868219497222818e-01 -5.932048595677825e+00 -5.992948340681076e+00 4.040102658794053e+00 4.690406898780309e+00 9.195407426080634e+03 + 126780 9.980300797949851e-01 -5.938000364645976e+00 -5.989558066145712e+00 4.028415500373043e+00 4.732363199833039e+00 9.185020808859656e+03 + 126800 1.028464457138578e+00 -5.975626108810529e+00 -6.015376970573717e+00 3.786085384605621e+00 4.557829784935413e+00 9.264318200817546e+03 + 126820 1.025703953085985e+00 -5.969627670504784e+00 -6.021912772219588e+00 3.793587152548197e+00 4.493358007408451e+00 9.284442247047527e+03 + 126840 9.984488201142101e-01 -5.930326579934677e+00 -5.993357715621778e+00 4.095930431014089e+00 4.733995895862028e+00 9.196594132604121e+03 + 126860 9.621866375370721e-01 -5.877247972913261e+00 -6.027786235507817e+00 4.331471233858212e+00 4.467057234319422e+00 9.302514322946876e+03 + 126880 1.064593734511871e+00 -6.032495445997998e+00 -5.967204341599871e+00 3.558012482312989e+00 4.932924107532786e+00 9.116648804736615e+03 + 126900 9.737903680949692e-01 -5.902686682178262e+00 -6.032938494603252e+00 4.188780094572940e+00 4.440854031225812e+00 9.318432046980965e+03 + 126920 1.052819996258342e+00 -6.027648730335134e+00 -6.018445143941685e+00 3.479306669440790e+00 4.532155086762362e+00 9.273772356962736e+03 + 126940 9.919873355300870e-01 -5.949833708650692e+00 -6.025178757636807e+00 3.975002013452395e+00 4.542359082565475e+00 9.294517230436159e+03 + 126960 9.917578423447562e-01 -5.965268771509736e+00 -6.021728681872689e+00 3.879071845077743e+00 4.554870302630778e+00 9.283855661434280e+03 + 126980 1.013263728604067e+00 -6.014374353414841e+00 -5.971392284462335e+00 3.636769354757162e+00 4.883579046136122e+00 9.129420355565026e+03 + 127000 1.022603874958202e+00 -6.045912280210102e+00 -5.985798212731823e+00 3.452509324463841e+00 4.797693602545993e+00 9.173515049382457e+03 + 127020 1.015561887116795e+00 -6.058070276800820e+00 -5.978091713976291e+00 3.332012902153485e+00 4.791262186534535e+00 9.149924274270854e+03 + 127040 9.043615711825281e-01 -5.919493354035021e+00 -5.997697410829794e+00 4.120573121927379e+00 4.671513325773114e+00 9.209984103850622e+03 + 127060 1.014252189478500e+00 -6.113931453507769e+00 -6.024172367306615e+00 3.043978774025595e+00 4.559389337166318e+00 9.291423858159529e+03 + 127080 9.593592194692250e-01 -6.072542510234534e+00 -6.009478703103726e+00 3.301243945930372e+00 4.663366085568082e+00 9.246174354934357e+03 + 127100 9.015870049721679e-01 -6.026519446661443e+00 -6.008404230252973e+00 3.541652007734915e+00 4.645672383673035e+00 9.242872514427767e+03 + 127120 9.990307641025947e-01 -6.209352165825001e+00 -5.978437125359591e+00 2.594327263182106e+00 4.920277159521517e+00 9.150983321374553e+03 + 127140 9.084509835110506e-01 -6.107426670704972e+00 -5.989908204527757e+00 3.143938694499359e+00 4.818747913212793e+00 9.186089210668133e+03 + 127160 9.244882007937428e-01 -6.153562771851583e+00 -5.976258070787955e+00 2.877610284849740e+00 4.895721316170906e+00 9.144298236244025e+03 + 127180 8.504790203082592e-01 -6.053395514576076e+00 -5.995470703970223e+00 3.407297225363354e+00 4.739910451697635e+00 9.203141239047183e+03 + 127200 8.885694387093030e-01 -6.107188957488241e+00 -5.973805462804898e+00 3.143428009635155e+00 4.909336677136000e+00 9.136799946080862e+03 + 127220 8.958302941423194e-01 -6.103299302875531e+00 -5.945963605280572e+00 3.146366567383388e+00 5.049812490594155e+00 9.051920415285314e+03 + 127240 8.765755654581900e-01 -6.048673280952560e+00 -5.984944817265025e+00 3.452121226841267e+00 4.818059927282977e+00 9.170890575193031e+03 + 127260 9.759236799546855e-01 -6.164807424510532e+00 -5.961720939526692e+00 2.844803162704984e+00 5.010957187014180e+00 9.099919666177393e+03 + 127280 9.104275537397444e-01 -6.035465354080143e+00 -6.000150608195881e+00 3.520367179473318e+00 4.723149915280015e+00 9.217511210654533e+03 + 127300 9.952333733855508e-01 -6.131981841854936e+00 -5.975538992640811e+00 3.007035452120751e+00 4.905354501760932e+00 9.142124595957663e+03 + 127320 9.346279061661406e-01 -6.020325345258759e+00 -6.021321082679785e+00 3.572377591121918e+00 4.566659912760518e+00 9.282606336470413e+03 + 127340 9.407729467588528e-01 -6.012880996123896e+00 -6.000333076079414e+00 3.580808387125946e+00 4.652860485805715e+00 9.218087695853681e+03 + 127360 9.766444499051924e-01 -6.051322748034778e+00 -6.015891374567842e+00 3.403447400720510e+00 4.606899830154979e+00 9.265889872404841e+03 + 127380 9.543635393758086e-01 -6.004981608993443e+00 -6.031773753968452e+00 3.617535151012880e+00 4.463690508495349e+00 9.314851945013756e+03 + 127400 1.011547457715317e+00 -6.076381021692956e+00 -6.037392279824749e+00 3.248586429482230e+00 4.472465818777787e+00 9.332194335241436e+03 + 127420 1.022351064199831e+00 -6.079483171173040e+00 -5.989005119304127e+00 3.278369098549660e+00 4.797908073814233e+00 9.183334380262815e+03 + 127440 1.056920713897966e+00 -6.118899077014094e+00 -5.980426361778528e+00 3.060688781893487e+00 4.855820541359533e+00 9.157055895969101e+03 + 127460 9.769051316479397e-01 -5.986007062309012e+00 -5.982893078266102e+00 3.761534030257490e+00 4.779415008519356e+00 9.164599861467263e+03 + 127480 9.362620345062764e-01 -5.910264058259147e+00 -6.009392175507827e+00 4.163157782269461e+00 4.593948793000971e+00 9.245856017173834e+03 + 127500 1.037020497505846e+00 -6.040872372215827e+00 -6.000256015503711e+00 3.511144904902483e+00 4.744370310504342e+00 9.217835416183261e+03 + 127520 1.028722671049858e+00 -6.009575557581574e+00 -5.973910512949543e+00 3.709133762458935e+00 4.913927967883874e+00 9.137141834266686e+03 + 127540 9.624747677999433e-01 -5.893757721519711e+00 -6.053484730436590e+00 4.209558613855549e+00 4.292381410980076e+00 9.381938159287627e+03 + 127560 1.090080258347061e+00 -6.066935040616704e+00 -5.994585310292456e+00 3.314684298890981e+00 4.730127646497392e+00 9.200432133342587e+03 + 127580 1.007191360059820e+00 -5.929114689223937e+00 -6.060652352552559e+00 4.057989185868950e+00 4.302679567648384e+00 9.404155847173575e+03 + 127600 1.011812233518575e+00 -5.926219271986834e+00 -6.050407230685113e+00 4.028941558385343e+00 4.315835081515325e+00 9.372437679758055e+03 + 127620 1.070322103340254e+00 -6.008763646443046e+00 -5.991379467544618e+00 3.690863193839013e+00 4.790685839266777e+00 9.190561383893388e+03 + 127640 1.017461155922950e+00 -5.928324726385360e+00 -5.997245953604642e+00 4.057553042525242e+00 4.661796690306682e+00 9.208559534514436e+03 + 127660 1.004773866765832e+00 -5.907992505647534e+00 -5.993893064066500e+00 4.241701974095027e+00 4.748447674584873e+00 9.198291600701936e+03 + 127680 1.026260531868406e+00 -5.941467341365021e+00 -5.998795158406031e+00 4.026789155913205e+00 4.697603959012715e+00 9.213356812865102e+03 + 127700 1.047910136316763e+00 -5.981455137926904e+00 -6.013897593849566e+00 3.758651125176722e+00 4.572361522814967e+00 9.259773576759901e+03 + 127720 1.047184019493177e+00 -5.997153305851448e+00 -6.016812281269359e+00 3.703153671641148e+00 4.590268792574890e+00 9.268716712274882e+03 + 127740 1.008240590328148e+00 -5.965909146258094e+00 -5.988940704785584e+00 3.903280894323582e+00 4.771030121136572e+00 9.183122651570988e+03 + 127760 1.007796344426536e+00 -5.998180202237426e+00 -5.961197743709556e+00 3.771068983624221e+00 4.983427983508212e+00 9.098312622408001e+03 + 127780 1.010228455336822e+00 -6.039499163939140e+00 -6.009429050583632e+00 3.490991029600625e+00 4.663658273822952e+00 9.246016412755722e+03 + 127800 1.010801155267739e+00 -6.079246759812655e+00 -6.033104276329803e+00 3.240175439769998e+00 4.505132720454776e+00 9.318963303286648e+03 + 127820 9.732746016710978e-01 -6.061500255328550e+00 -6.010759082051681e+00 3.354766535290266e+00 4.646130204417235e+00 9.250124965197783e+03 + 127840 1.001492954255722e+00 -6.133948890435713e+00 -5.978817854620903e+00 2.958966478767818e+00 4.849752892866665e+00 9.152147119166935e+03 + 127860 9.082763612129098e-01 -6.016577961495685e+00 -5.975859739036301e+00 3.614132537128376e+00 4.847942871614718e+00 9.143082795671931e+03 + 127880 9.579078061137467e-01 -6.100391848098502e+00 -6.003602501526389e+00 3.174436530605568e+00 4.730215936725611e+00 9.228092336387032e+03 + 127900 9.612172359892955e-01 -6.109962996245846e+00 -5.972415500436060e+00 3.109731815706260e+00 4.899550822052241e+00 9.132558471509383e+03 + 127920 9.059452279812215e-01 -6.024854133018119e+00 -5.996012019907109e+00 3.532553395730067e+00 4.698169272516066e+00 9.204781343721061e+03 + 127940 8.736080385693705e-01 -5.965881818102577e+00 -5.955801721672975e+00 3.930657730869412e+00 4.988539204458069e+00 9.081828736273741e+03 + 127960 9.957576108738313e-01 -6.127172550232813e+00 -5.956140520955687e+00 2.990453315067025e+00 4.972545694297276e+00 9.082913870460263e+03 + 127980 9.754811778341296e-01 -6.071999062819128e+00 -5.985467191231405e+00 3.309645563535001e+00 4.806524960955556e+00 9.172509619449565e+03 + 128000 9.654507645089453e-01 -6.032146535642744e+00 -5.993516840004962e+00 3.506235263517421e+00 4.728052953795648e+00 9.197147331460341e+03 + 128020 9.677328979384587e-01 -6.009809161885104e+00 -5.978228982434555e+00 3.641111929642785e+00 4.822450207064819e+00 9.150338396339881e+03 + 128040 9.448769873186841e-01 -5.950490925886834e+00 -6.009381356753849e+00 3.954088583214701e+00 4.615930615911575e+00 9.245864002718792e+03 + 128060 9.937629834265210e-01 -6.000415420942415e+00 -6.006296574374933e+00 3.667719453242782e+00 4.633948960127714e+00 9.236409200882212e+03 + 128080 1.035050171015811e+00 -6.046072296141639e+00 -6.004840375476181e+00 3.417058006687169e+00 4.653818075767326e+00 9.231916623211149e+03 + 128100 9.764341102110845e-01 -5.949258235763965e+00 -5.990942696128662e+00 4.007458624397588e+00 4.768100002334106e+00 9.189268343743037e+03 + 128120 1.032948509422864e+00 -6.025791829462957e+00 -5.954543688448536e+00 3.557358977398851e+00 4.966476828717846e+00 9.078039496182633e+03 + 128140 1.058648198845030e+00 -6.058106460400031e+00 -5.974338949722354e+00 3.360267291018784e+00 4.841273300310389e+00 9.138449133751052e+03 + 128160 9.676756839569388e-01 -5.920498791139682e+00 -5.980095734338475e+00 4.150359762873517e+00 4.808144892428897e+00 9.156050604161488e+03 + 128180 1.003457117960137e+00 -5.969604234616411e+00 -6.018022183805282e+00 3.885862509873321e+00 4.607839152977399e+00 9.272455500527642e+03 + 128200 1.082234146400672e+00 -6.086439804212803e+00 -5.980373637678067e+00 3.235998617921222e+00 4.845046959849906e+00 9.156897974937894e+03 + 128220 1.033487423352725e+00 -6.016080806067976e+00 -6.002490389994877e+00 3.605248671584007e+00 4.683286943785832e+00 9.224691013326039e+03 + 128240 9.530500556957630e-01 -5.901190313025213e+00 -6.005532935653758e+00 4.211015523616226e+00 4.611864037514460e+00 9.234039109386131e+03 + 128260 9.620994771598668e-01 -5.918121074776619e+00 -6.015097233869730e+00 4.116140220453154e+00 4.559288107928392e+00 9.263458491759042e+03 + 128280 9.974484138168876e-01 -5.973078439384391e+00 -6.025987124040616e+00 3.808759307451641e+00 4.504949452563110e+00 9.296985542199340e+03 + 128300 1.079425612706120e+00 -6.100022684942491e+00 -5.964573825041390e+00 3.178173910770239e+00 4.955942224965689e+00 9.108623733721075e+03 + 128320 1.001142902072301e+00 -5.992161745392119e+00 -5.976209932414944e+00 3.739713133523697e+00 4.831310912173715e+00 9.144153788989503e+03 + 128340 9.872812772178077e-01 -5.980907371555402e+00 -5.933344519637441e+00 3.839081091245891e+00 5.112194347286369e+00 9.013539073314381e+03 + 128360 1.035076673531440e+00 -6.059163323213880e+00 -5.972963122791487e+00 3.406764308367213e+00 4.901739198630491e+00 9.134234134621376e+03 + 128380 9.709245880925518e-01 -5.974499738754015e+00 -6.018367628643727e+00 3.849341795605787e+00 4.597445583325038e+00 9.273532481664237e+03 + 128400 9.737951930847101e-01 -5.994692987035931e+00 -6.022123587434970e+00 3.706591279947901e+00 4.549080527584927e+00 9.285108217157698e+03 + 128420 1.018304878002660e+00 -6.080795237224591e+00 -6.009558886659461e+00 3.244441527166341e+00 4.653491675900943e+00 9.246421812080547e+03 + 128440 1.017113791085324e+00 -6.105703769652395e+00 -5.987110110685302e+00 3.154984730715035e+00 4.835967872813498e+00 9.177528217024319e+03 + 128460 9.208370804711532e-01 -5.994838854076720e+00 -6.027635653970679e+00 3.732711213416429e+00 4.544386913136940e+00 9.302079997682213e+03 + 128480 9.437501303737642e-01 -6.059186659972251e+00 -5.995518537055216e+00 3.406455579933851e+00 4.772047794333647e+00 9.203307725230748e+03 + 128500 9.345167627928597e-01 -6.074359179929963e+00 -6.038465827587848e+00 3.256848914334841e+00 4.462954097961585e+00 9.335522124487714e+03 + 128520 9.559437298619869e-01 -6.129864919985712e+00 -5.980881694606651e+00 3.012849683019882e+00 4.868334418226071e+00 9.158458740557371e+03 + 128540 9.032210429967854e-01 -6.067754081571346e+00 -5.983148123879960e+00 3.324238731292831e+00 4.810059233086402e+00 9.165392135013983e+03 + 128560 8.801647633934440e-01 -6.040105126661830e+00 -6.028453371051267e+00 3.461559256740132e+00 4.528465440559342e+00 9.304589040195979e+03 + 128580 9.619821771486821e-01 -6.160779672898782e+00 -5.955627600524290e+00 2.869238148472404e+00 5.047253095227333e+00 9.081334337549175e+03 + 128600 9.152371521820265e-01 -6.080838248678182e+00 -5.992685305704716e+00 3.262583620737569e+00 4.768771460915049e+00 9.194614869696172e+03 + 128620 8.711415040924867e-01 -5.993613409209078e+00 -6.060355610717561e+00 3.669689219174053e+00 4.286445169790039e+00 9.403268308838455e+03 + 128640 9.824333271557915e-01 -6.127194001682281e+00 -5.992791018057348e+00 3.005057216049078e+00 4.776819946817941e+00 9.194940661165070e+03 + 128660 9.222612616105965e-01 -5.999082189916067e+00 -5.997007016716132e+00 3.684625783707280e+00 4.696541749353321e+00 9.207861049730191e+03 + 128680 9.340841079834711e-01 -5.972921620003774e+00 -6.024309903158194e+00 3.822379048395539e+00 4.527299574211741e+00 9.291835223682332e+03 + 128700 9.157328492946151e-01 -5.903759119694975e+00 -6.067158872259439e+00 4.186523150098655e+00 4.248256484843513e+00 9.424397059378944e+03 + 128720 1.066717470641097e+00 -6.097108327083287e+00 -5.973750410481124e+00 3.180249181555795e+00 4.888589428261316e+00 9.136656564899091e+03 + 128740 1.007049864689797e+00 -5.988831984002792e+00 -6.040468846189336e+00 3.710166940850664e+00 4.413660087396934e+00 9.341646370907192e+03 + 128760 9.969658591018101e-01 -5.961823251049095e+00 -6.009493789809204e+00 3.881072776314035e+00 4.607341165761462e+00 9.246210779813944e+03 + 128780 9.923620390066570e-01 -5.945718529825307e+00 -6.034892190513863e+00 3.901228796042058e+00 4.389179836788976e+00 9.324476397199731e+03 + 128800 1.000106938618093e+00 -5.952020961031598e+00 -6.008491455541188e+00 3.920869816145808e+00 4.596607497890962e+00 9.243130898265372e+03 + 128820 1.057929545241915e+00 -6.033752621115360e+00 -5.987292465947128e+00 3.483913045693549e+00 4.750694446355311e+00 9.178093050968460e+03 + 128840 1.093818700164423e+00 -6.087827329357928e+00 -5.979373053306605e+00 3.229300495308684e+00 4.852061731640362e+00 9.153831815709274e+03 + 128860 1.004423072441234e+00 -5.959710237629121e+00 -5.986134143042574e+00 3.916445360524895e+00 4.764715206554699e+00 9.174524082864375e+03 + 128880 1.008539273848093e+00 -5.971426967829748e+00 -5.966046161291739e+00 3.829963220531481e+00 4.860860644349847e+00 9.113076872415650e+03 + 128900 1.055127142291735e+00 -6.045006030220060e+00 -5.971328645821119e+00 3.456123426335318e+00 4.879190369092423e+00 9.129213445994073e+03 + 128920 1.033422803455056e+00 -6.020032158480019e+00 -5.983043042679641e+00 3.557555100850963e+00 4.769952327823907e+00 9.165057184771174e+03 + 128940 9.680326533134758e-01 -5.931697202826408e+00 -5.971446137863349e+00 4.063665462440170e+00 4.835420926330241e+00 9.129583941881709e+03 + 128960 1.032098293613718e+00 -6.035204683795853e+00 -5.937599786631828e+00 3.535586456827988e+00 5.096048880652843e+00 9.026472335858865e+03 + 128980 1.034493499479607e+00 -6.047042392660358e+00 -5.978627616346857e+00 3.417195312828504e+00 4.810043545573045e+00 9.151558259326528e+03 + 129000 1.006171309796463e+00 -6.017072151163605e+00 -6.008453277886951e+00 3.589886776420461e+00 4.639377680541338e+00 9.243019464982692e+03 + 129020 9.341254896397182e-01 -5.927003425691939e+00 -6.043519348451069e+00 4.045005219864233e+00 4.375952760600536e+00 9.351114945490746e+03 + 129040 9.860075082440577e-01 -6.023469626471840e+00 -6.011024787510211e+00 3.554134424148387e+00 4.625594615298667e+00 9.250914611541668e+03 + 129060 9.639737572455594e-01 -6.013515971868909e+00 -6.019643330006526e+00 3.595186736596333e+00 4.560002497964526e+00 9.277473235405847e+03 + 129080 1.027449794957783e+00 -6.135822720032940e+00 -5.950287107082921e+00 2.986506317536744e+00 5.051880518639070e+00 9.065085653959524e+03 + 129100 9.671836068588365e-01 -6.075413950427336e+00 -5.981393099326080e+00 3.284691332220448e+00 4.824573608923550e+00 9.160033817885675e+03 + 129120 9.245174010955705e-01 -6.039809864423798e+00 -6.012772101914381e+00 3.417489864612519e+00 4.572744881021820e+00 9.256305305909071e+03 + 129140 9.319521892205886e-01 -6.075818290102951e+00 -6.001509498430783e+00 3.283288054236778e+00 4.709980635266713e+00 9.221682915198273e+03 + 129160 9.128937140768254e-01 -6.066282050034484e+00 -5.968855034256105e+00 3.351824504424506e+00 4.911265505805927e+00 9.121675089020244e+03 + 129180 9.245339745460468e-01 -6.094452521603944e+00 -5.939275073879644e+00 3.195222899967907e+00 5.086275818433261e+00 9.031580994046211e+03 + 129200 9.339436463764496e-01 -6.111274533898261e+00 -5.944929720637922e+00 3.083750867182780e+00 5.038928526700305e+00 9.048762819841420e+03 + 129220 9.281593182456351e-01 -6.096148966111992e+00 -5.963632611783428e+00 3.194048492139138e+00 4.954977905533307e+00 9.105701668443924e+03 + 129240 9.072135605278561e-01 -6.047428258397335e+00 -5.977549556699731e+00 3.494317766785595e+00 4.895572085627372e+00 9.148259591521877e+03 + 129260 9.188448161568123e-01 -6.030383439753365e+00 -6.012569169089827e+00 3.538888122043214e+00 4.641180420942727e+00 9.255678301912612e+03 + 129280 9.118224665895619e-01 -5.975026511973351e+00 -6.034644634922781e+00 3.826147766461717e+00 4.483811278611380e+00 9.323727832952020e+03 + 129300 1.025146159059513e+00 -6.092467095814302e+00 -6.009238166402124e+00 3.174732512788587e+00 4.652645905108516e+00 9.245449401255852e+03 + 129320 1.015117929308483e+00 -6.034748045844030e+00 -5.987265010510431e+00 3.515469693270357e+00 4.788124630131859e+00 9.178002971347369e+03 + 129340 9.335812917316212e-01 -5.883384774188620e+00 -6.028421915475858e+00 4.256925559051675e+00 4.424099849355280e+00 9.304497196190774e+03 + 129360 1.036327053993415e+00 -6.013226345842714e+00 -5.991806406730674e+00 3.647047926804245e+00 4.770044531910445e+00 9.191916497315024e+03 + 129380 1.026877672673132e+00 -5.985633070068450e+00 -6.044178648008410e+00 3.783866196613983e+00 4.447688428183825e+00 9.353173429878327e+03 + 129400 1.009276299591125e+00 -5.952149595721756e+00 -6.074857068358862e+00 3.971572498010091e+00 4.266967201207804e+00 9.448279334395809e+03 + 129420 1.040985967185833e+00 -5.997378871524619e+00 -6.018834661637285e+00 3.704365985769367e+00 4.581163518669653e+00 9.274959229231068e+03 + 129440 1.064811273874027e+00 -6.034269001749547e+00 -6.015518683693140e+00 3.506564159441399e+00 4.614231387323635e+00 9.264754660148681e+03 + 129460 1.030975690457545e+00 -5.990966038896381e+00 -6.000567431918346e+00 3.796001994984536e+00 4.740869310441649e+00 9.218776066590895e+03 + 129480 9.844319334987990e-01 -5.929669017065686e+00 -6.029007516140009e+00 4.068563991668848e+00 4.498146957401036e+00 9.306300382415440e+03 + 129500 1.040163420141318e+00 -6.021732011072735e+00 -6.005197732822660e+00 3.579720114122737e+00 4.674662498505955e+00 9.233018287771631e+03 + 129520 1.068082595570755e+00 -6.076563857957208e+00 -5.989158681862374e+00 3.262877359248948e+00 4.764771406292767e+00 9.183806813643550e+03 + 129540 9.709707668020946e-01 -5.947613464711456e+00 -6.050097479269049e+00 4.012325378038756e+00 4.423846307099054e+00 9.371473863153195e+03 + 129560 1.005902038355223e+00 -6.019296624848729e+00 -6.006545328712858e+00 3.569904747741351e+00 4.643124663410221e+00 9.237149443273058e+03 + 129580 9.298289463997406e-01 -5.926954287668595e+00 -5.990481969132403e+00 4.057450089812495e+00 4.692664311970378e+00 9.187839865066184e+03 + 129600 1.030030375407591e+00 -6.091856401712850e+00 -5.996375204697285e+00 3.126557942093946e+00 4.674825751024803e+00 9.205943902130874e+03 + 129620 9.988993340110458e-01 -6.065203333834758e+00 -5.984948430979443e+00 3.324813984874410e+00 4.785650056475708e+00 9.170905414680263e+03 + 129640 9.268190574951019e-01 -5.978073380745987e+00 -6.007460127924151e+00 3.758600261463767e+00 4.589857011582320e+00 9.239966444600755e+03 + 129660 9.686763216865590e-01 -6.059095192291855e+00 -6.013980629797294e+00 3.366554667910996e+00 4.625609467210752e+00 9.260006269246871e+03 + 129680 9.668306824222946e-01 -6.076710071103831e+00 -5.975023260879812e+00 3.275422850373065e+00 4.859324250662405e+00 9.140516175380773e+03 + 129700 8.937728645520689e-01 -5.986472353495123e+00 -5.956749439546799e+00 3.766315100924344e+00 4.936988672421686e+00 9.084752442045874e+03 + 129720 9.200753940898841e-01 -6.038857293263064e+00 -5.995170047948045e+00 3.436581580363463e+00 4.687440503541666e+00 9.202202511019364e+03 + 129740 9.872176668838795e-01 -6.148353661172314e+00 -5.966080318675376e+00 2.917486634089538e+00 4.964128373415550e+00 9.113220184481908e+03 + 129760 9.256531287892650e-01 -6.064358629739904e+00 -5.991256003532211e+00 3.350915626390644e+00 4.770682218670064e+00 9.190245744394666e+03 + 129780 9.714905507034255e-01 -6.134963044584921e+00 -5.978233684249467e+00 2.994586699616590e+00 4.894550940452893e+00 9.150361989080753e+03 + 129800 9.305192445025794e-01 -6.070285205790953e+00 -5.973451413895965e+00 3.366821513068014e+00 4.922856131109901e+00 9.135715927127480e+03 + 129820 8.887904997029160e-01 -5.995156219089777e+00 -5.985576553173556e+00 3.753401586237926e+00 4.808409510377378e+00 9.172808643157929e+03 + 129840 9.876475701062374e-01 -6.113874538717629e+00 -6.004195891854090e+00 3.091400198144704e+00 4.721191961150895e+00 9.229956943211682e+03 + 129860 1.035172078284576e+00 -6.145348753568552e+00 -5.997112737024753e+00 2.925130501964847e+00 4.776324648408766e+00 9.208220066055703e+03 + 129880 9.100978147403386e-01 -5.919461795787170e+00 -6.070923237614566e+00 4.115479402913041e+00 4.245764365357759e+00 9.436062135638471e+03 + 129900 1.040157942737347e+00 -6.072724864014445e+00 -5.987151494239729e+00 3.312684689323380e+00 4.804060221005971e+00 9.177651957818816e+03 + 129920 9.953724396492994e-01 -5.972382261355053e+00 -6.016110802137147e+00 3.788720667499106e+00 4.537624619358505e+00 9.266582569055889e+03 + 129940 1.035336575554755e+00 -6.002960981349743e+00 -6.008213515845567e+00 3.697678840006529e+00 4.667517974104424e+00 9.242274913530824e+03 + 129960 1.022618371383055e+00 -5.961794595014908e+00 -5.992602864713087e+00 4.004190523261604e+00 4.827284671090332e+00 9.194312566764047e+03 + 129980 1.032588886695788e+00 -5.958018635050045e+00 -5.995527108989883e+00 3.908422690084037e+00 4.693043228303905e+00 9.203319157043894e+03 + 130000 1.104169247170680e+00 -6.051172124072947e+00 -5.992990249935561e+00 3.412671128223337e+00 4.746760453136130e+00 9.195562279572714e+03 + 130020 1.000316218995396e+00 -5.892143466740721e+00 -6.022364122956566e+00 4.253596790065225e+00 4.505849630492417e+00 9.285830696154315e+03 + 130040 1.048947475846856e+00 -5.964370614595948e+00 -6.004242905016046e+00 3.864574935602495e+00 4.635622073793296e+00 9.230058375729537e+03 + 130060 9.904828112649209e-01 -5.879937943812184e+00 -6.044182958571730e+00 4.317256268352542e+00 4.374135976769337e+00 9.353154149855442e+03 + 130080 1.029365307274480e+00 -5.944667164374422e+00 -6.011741387629565e+00 3.981629076653193e+00 4.596478507019665e+00 9.253117967692006e+03 + 130100 1.080638449795668e+00 -6.034767466587525e+00 -5.949705089496352e+00 3.518720864561803e+00 5.007162197179633e+00 9.063284305845484e+03 + 130120 1.034259727427872e+00 -5.982712071735659e+00 -5.936224279661723e+00 3.808493362329170e+00 5.075433458380278e+00 9.022303937304468e+03 + 130140 1.056719416506494e+00 -6.036123573529244e+00 -5.966908527277853e+00 3.555804936897505e+00 4.953248443466784e+00 9.115737919893192e+03 + 130160 9.905948052021167e-01 -5.965020390388405e+00 -6.041319455319518e+00 3.901718163797132e+00 4.463597125720543e+00 9.344323849298471e+03 + 130180 9.852535461557632e-01 -5.988795027637960e+00 -6.022957829889998e+00 3.775484125859629e+00 4.579316028651862e+00 9.287624509998550e+03 + 130200 9.617900430711576e-01 -5.988978959765634e+00 -5.991145230193576e+00 3.784477133488790e+00 4.772038073462277e+00 9.189862170572374e+03 + 130220 1.000741158316274e+00 -6.082955040292641e+00 -5.938731713495676e+00 3.345121163728994e+00 5.173273824684863e+00 9.029915307258010e+03 + 130240 9.671098931843203e-01 -6.064675324646883e+00 -5.971642482322729e+00 3.332470274717930e+00 4.866679252129041e+00 9.130198387050483e+03 + 130260 9.470679993183454e-01 -6.059282507156906e+00 -5.970030566175299e+00 3.397346378767563e+00 4.909844835577181e+00 9.125254392793679e+03 + 130280 9.115916060253344e-01 -6.021920827461239e+00 -6.006742320785550e+00 3.587840075765000e+00 4.674997409963122e+00 9.237751664008620e+03 + 130300 9.826911079357723e-01 -6.136374981652850e+00 -5.967887495065792e+00 2.984464477184970e+00 4.951945698522143e+00 9.118737888407073e+03 + 130320 9.413933053210759e-01 -6.076489319074319e+00 -6.004150031652622e+00 3.252367026750905e+00 4.667750409594841e+00 9.229782101381503e+03 + 130340 9.358362672922282e-01 -6.063213732096999e+00 -6.000063702931143e+00 3.331598659599098e+00 4.694215899504872e+00 9.217222123339934e+03 + 130360 9.202683130911380e-01 -6.029777433358518e+00 -5.970868036264891e+00 3.527192629727333e+00 4.865459504038681e+00 9.127836659636167e+03 + 130380 1.007434289069087e+00 -6.141531942369340e+00 -6.015672404605356e+00 2.902121885936533e+00 4.624826828477854e+00 9.265224295447328e+03 + 130400 9.610841965572609e-01 -6.055748746282560e+00 -5.987992894516507e+00 3.458148079893774e+00 4.847212665918621e+00 9.180230892413229e+03 + 130420 9.712142581419018e-01 -6.053999630078730e+00 -5.983516695311410e+00 3.420128726337561e+00 4.824852644970418e+00 9.166492570010927e+03 + 130440 8.914294441318441e-01 -5.917833730222050e+00 -6.012626566155738e+00 4.124695887786398e+00 4.580380754711209e+00 9.255845430501769e+03 + 130460 9.746777641571345e-01 -6.025970631301579e+00 -6.017984819290037e+00 3.538505855539825e+00 4.584361623910514e+00 9.272354104194324e+03 + 130480 9.554933727410769e-01 -5.987034396581089e+00 -6.039768711522166e+00 3.773455777968345e+00 4.470647180967817e+00 9.339527515018615e+03 + 130500 1.009959137325287e+00 -6.060990727859224e+00 -6.013587327288979e+00 3.359058424141346e+00 4.631256085868224e+00 9.258810393314587e+03 + 130520 9.298974331030029e-01 -5.935522818380198e+00 -6.028977878049615e+00 4.097710619651657e+00 4.561077204906124e+00 9.306200844730762e+03 + 130540 9.896155771267494e-01 -6.017766070810324e+00 -5.997970511058551e+00 3.602179310635658e+00 4.715848478083314e+00 9.210837812094398e+03 + 130560 1.063879928018026e+00 -6.120811555752455e+00 -5.988829426599659e+00 3.075477298613058e+00 4.833339108376896e+00 9.182806426970648e+03 + 130580 9.578590312585442e-01 -5.956442928587865e+00 -6.010886961579125e+00 3.948815708574311e+00 4.636189645951619e+00 9.250516146140999e+03 + 130600 9.739441242910462e-01 -5.973072805362641e+00 -6.035849441481784e+00 3.880881009944719e+00 4.520407850695554e+00 9.327425134101979e+03 + 130620 1.048864346095900e+00 -6.077673890480655e+00 -5.977135258139565e+00 3.307249515920778e+00 4.884557901126386e+00 9.147007687428682e+03 + 130640 9.375531545102268e-01 -5.904043950642779e+00 -6.003484146915490e+00 4.208719382000007e+00 4.637718386681465e+00 9.227751053033373e+03 + 130660 1.034946471911228e+00 -6.037881714897889e+00 -6.005444373408693e+00 3.524351024748786e+00 4.710611259242124e+00 9.233775091995743e+03 + 130680 9.980527736920107e-01 -5.973548436107194e+00 -6.015492585124742e+00 3.842910254094558e+00 4.602060459599718e+00 9.264674998671993e+03 + 130700 1.028196710792318e+00 -6.008327543449901e+00 -6.000216270880836e+00 3.641267957900877e+00 4.687844140207821e+00 9.217698524971920e+03 + 130720 1.000472493239456e+00 -5.957097399252117e+00 -5.992470716131067e+00 3.948427920654928e+00 4.745308861132900e+00 9.193945784968475e+03 + 130740 1.028938099898568e+00 -5.989575283487385e+00 -5.998982991710323e+00 3.712144080762183e+00 4.658123564307934e+00 9.213924038575715e+03 + 130760 1.022498028302934e+00 -5.973625808936009e+00 -5.970487614694260e+00 3.839725633422481e+00 4.857745630392595e+00 9.126650229371771e+03 + 130780 9.678498911483023e-01 -5.883692294812350e+00 -5.974707901027978e+00 4.295914099478324e+00 4.773288403968642e+00 9.139557636021002e+03 + 130800 1.055893623337957e+00 -6.002951444357945e+00 -5.996612883958681e+00 3.665229779310629e+00 4.701626774012256e+00 9.206637095838989e+03 + 130820 1.083105300658058e+00 -6.030172810975066e+00 -5.991095705151839e+00 3.498372706007542e+00 4.722759494807097e+00 9.189749086874102e+03 + 130840 9.930522249106003e-01 -5.885538104014326e+00 -6.012472668687282e+00 4.265764627075155e+00 4.536886713662646e+00 9.255387872958439e+03 + 130860 9.837088888554437e-01 -5.864683403278612e+00 -6.063964566549617e+00 4.432434001460917e+00 4.288130723298454e+00 9.414423665507786e+03 + 130880 1.015465813765257e+00 -5.908737858817327e+00 -6.038190531683166e+00 4.217017951591750e+00 4.473680671259716e+00 9.334633392943884e+03 + 130900 1.093378820823633e+00 -6.025616306331575e+00 -5.988783410465001e+00 3.583469388544033e+00 4.794969576482109e+00 9.182629574772362e+03 + 130920 9.844216271553589e-01 -5.870779829866249e+00 -6.012634728848759e+00 4.358465680169422e+00 4.543912898237179e+00 9.255855361041904e+03 + 130940 1.049766353035625e+00 -5.979760622077858e+00 -5.947197157564784e+00 3.882875203683592e+00 5.069859656097518e+00 9.055636036135560e+03 + 130960 1.034808536778568e+00 -5.974453884372552e+00 -5.997634473490846e+00 3.846096663090794e+00 4.712990133188976e+00 9.209765849884041e+03 + 130980 1.058571508920091e+00 -6.034454980228020e+00 -5.991423197730352e+00 3.544955052572833e+00 4.792050206821258e+00 9.190760146519862e+03 + 131000 9.729217140004026e-01 -5.937520976741134e+00 -6.068091635626637e+00 4.003432963641904e+00 4.253676034577194e+00 9.427263012983856e+03 + 131020 1.023117271640621e+00 -6.047900618823444e+00 -6.023523298410036e+00 3.434914323667209e+00 4.574892669859143e+00 9.289423045298492e+03 + 131040 9.792328030079827e-01 -6.017284379289269e+00 -6.026926058847527e+00 3.591996084157357e+00 4.536632068088749e+00 9.299882663117291e+03 + 131060 1.028063036809075e+00 -6.121693854656348e+00 -5.983900863720138e+00 3.033232045018208e+00 4.824460722370358e+00 9.167694330289994e+03 + 131080 9.784915469439992e-01 -6.075070998859776e+00 -5.993393248880324e+00 3.275358059997616e+00 4.744364339970590e+00 9.196799486556767e+03 + 131100 8.929855728145889e-01 -5.968905037673095e+00 -5.983164664511335e+00 3.892831067490689e+00 4.810950083515394e+00 9.165423659265716e+03 + 131120 9.390158082438451e-01 -6.047199449797296e+00 -5.979854739945525e+00 3.469332055524716e+00 4.856035801053755e+00 9.155303080128442e+03 + 131140 9.529250796158291e-01 -6.071186369016491e+00 -5.976791512373100e+00 3.304354348348292e+00 4.846384222751500e+00 9.145948430963761e+03 + 131160 9.628042162825089e-01 -6.084439843649562e+00 -5.952978825050783e+00 3.267995672998639e+00 5.022865185319712e+00 9.073269579074671e+03 + 131180 9.529225121940557e-01 -6.060763829946472e+00 -5.959541543510480e+00 3.334539859213369e+00 4.915773892027037e+00 9.093276760006544e+03 + 131200 9.843104700832480e-01 -6.091784959350332e+00 -5.933433055117296e+00 3.220791236076818e+00 5.130072375060895e+00 9.013840610252479e+03 + 131220 9.632823848209409e-01 -6.037856903994149e+00 -5.984121226546807e+00 3.479249372514864e+00 4.787807947986709e+00 9.168350657808873e+03 + 131240 1.003149601599338e+00 -6.069349974640456e+00 -5.947581458198631e+00 3.336874722842397e+00 5.036088387868378e+00 9.056837350599457e+03 + 131260 1.003882030734760e+00 -6.037010689502744e+00 -6.001101326580766e+00 3.525462472792474e+00 4.731659591646424e+00 9.220435011158090e+03 + 131280 1.011573596948397e+00 -6.016727133510457e+00 -6.031726160174792e+00 3.585877047928306e+00 4.499750315729825e+00 9.314684451544721e+03 + 131300 1.003517268057811e+00 -5.978475278454981e+00 -6.004379727327705e+00 3.835951791675412e+00 4.687204437547726e+00 9.230490125454924e+03 + 131320 1.024670644035960e+00 -5.988018049024664e+00 -5.978881997371198e+00 3.762795335035885e+00 4.815255957429509e+00 9.152337624715574e+03 + 131340 1.013711990584448e+00 -5.954577926499031e+00 -6.035890161482587e+00 3.903169574101386e+00 4.436262137798112e+00 9.327535822650003e+03 + 131360 1.027736378969403e+00 -5.966304505494363e+00 -6.030483259794224e+00 3.863999355027829e+00 4.495475016207898e+00 9.310863441606340e+03 + 131380 1.096662246956929e+00 -6.066370202480748e+00 -6.003530021955664e+00 3.294054089233345e+00 4.654892130294888e+00 9.227920485331419e+03 + 131400 1.002971500064141e+00 -5.929542413956620e+00 -6.052065801018373e+00 4.032331159122984e+00 4.328782910181526e+00 9.377558768115701e+03 + 131420 1.024252901945822e+00 -5.967334963738172e+00 -6.016513718779505e+00 3.890162338614638e+00 4.607770316779557e+00 9.267760171297110e+03 + 131440 9.552777418968104e-01 -5.870043585041251e+00 -6.034664707817273e+00 4.382179863938366e+00 4.436899901922034e+00 9.323758297068562e+03 + 131460 1.111093076941678e+00 -6.107199925980609e+00 -5.984324433964461e+00 3.103530814023912e+00 4.809100904101571e+00 9.169000551798281e+03 + 131480 1.034067381378517e+00 -6.002030817801160e+00 -6.026948078869804e+00 3.680074811773742e+00 4.536996042783896e+00 9.299966314376548e+03 + 131500 9.800802440599204e-01 -5.934208479089004e+00 -6.007206031127135e+00 4.068390366851407e+00 4.649227126713792e+00 9.239187526972961e+03 + 131520 9.904397121340484e-01 -5.961069445252014e+00 -6.021699258602359e+00 3.876805013153832e+00 4.528659242462859e+00 9.283791684599188e+03 + 131540 1.009320208691154e+00 -6.002319489631943e+00 -5.999227060342406e+00 3.674462336076394e+00 4.692219543608804e+00 9.214672691537919e+03 + 131560 9.942509269962964e-01 -5.992841053761710e+00 -5.966336333956363e+00 3.712945304523986e+00 4.865139507238423e+00 9.114004415441399e+03 + 131580 9.922053275991994e-01 -6.000434444788290e+00 -5.995532394467409e+00 3.678733182852928e+00 4.706881514385265e+00 9.203345883124173e+03 + 131600 9.932263045687070e-01 -6.013151342920659e+00 -5.987463116665161e+00 3.661385234279831e+00 4.808891004679062e+00 9.178602529660893e+03 + 131620 9.962850676794905e-01 -6.028378167334931e+00 -5.976142671296111e+00 3.556598190067735e+00 4.856542491739523e+00 9.143951231423700e+03 + 131640 9.892026251246759e-01 -6.026297067608541e+00 -5.987555243024403e+00 3.512244412028348e+00 4.734705964068448e+00 9.178891634993031e+03 + 131660 9.232309999023891e-01 -5.934829297567035e+00 -6.001256226481390e+00 4.039787889919560e+00 4.658354184559303e+00 9.220904008991245e+03 + 131680 9.758791956918986e-01 -6.019050206698671e+00 -6.006221712125369e+00 3.584775615656803e+00 4.658438816699818e+00 9.236177475569066e+03 + 131700 9.379765139869896e-01 -5.968728490081491e+00 -6.025465343664683e+00 3.870589257793169e+00 4.544797464518767e+00 9.295386008157093e+03 + 131720 1.068688699769764e+00 -6.166949710804097e+00 -5.986420234401045e+00 2.767759461580971e+00 4.804387651933485e+00 9.175432835358639e+03 + 131740 1.010672282084292e+00 -6.085201506505737e+00 -6.019034090828414e+00 3.251414644663130e+00 4.631358184856807e+00 9.275590098882094e+03 + 131760 9.672416606802616e-01 -6.027484325782861e+00 -6.010263357789781e+00 3.541324996198633e+00 4.640210459351079e+00 9.248593404961703e+03 + 131780 8.990563676294964e-01 -5.933764814130628e+00 -5.993892673009589e+00 4.046496905119414e+00 4.701233434680330e+00 9.198291125269139e+03 + 131800 1.038125876916316e+00 -6.142920579136632e+00 -5.969092155092786e+00 2.906201421942535e+00 4.904351132663981e+00 9.122428041154088e+03 + 131820 9.336075908135112e-01 -5.986167483097782e+00 -5.988673618617832e+00 3.800672008963500e+00 4.786281390984155e+00 9.182334222898880e+03 + 131840 9.878151102638031e-01 -6.061804369842512e+00 -5.950797403524747e+00 3.393677135780793e+00 5.031096314649919e+00 9.066640535965522e+03 + 131860 9.865914064252586e-01 -6.050376180636450e+00 -5.962026668483629e+00 3.480060342562836e+00 4.987376913387152e+00 9.100823836790238e+03 + 131880 9.445672601381528e-01 -5.972743128378099e+00 -5.976238986286807e+00 3.864576965926697e+00 4.844503208832627e+00 9.144187179621895e+03 + 131900 1.004275211599622e+00 -6.041527336471732e+00 -5.983193338018093e+00 3.504773914341240e+00 4.839736760619123e+00 9.165484007019277e+03 + 131920 9.397166042841005e-01 -5.920827738968568e+00 -6.011634026479029e+00 4.111252523058181e+00 4.589828767945540e+00 9.252783576783117e+03 + 131940 1.014172009258640e+00 -6.001714591919812e+00 -6.004351778834083e+00 3.734970459769611e+00 4.719827324404513e+00 9.230404506783309e+03 + 131960 1.040292781208354e+00 -6.009262734987058e+00 -6.030985741784840e+00 3.628496766306086e+00 4.503759899648781e+00 9.312437086212592e+03 + 131980 1.091325419117280e+00 -6.061280453268994e+00 -5.993701127256977e+00 3.407655214320084e+00 4.795706162147988e+00 9.197734834099634e+03 + 132000 1.065491629368890e+00 -6.006357849481001e+00 -5.988849929763671e+00 3.677192905432705e+00 4.777726089791430e+00 9.182830727780081e+03 + 132020 1.097982224709716e+00 -6.041110335532081e+00 -6.003855494576903e+00 3.442345939596186e+00 4.656269001528827e+00 9.228886558694063e+03 + 132040 1.042641291503157e+00 -5.950442739269262e+00 -6.020862972557248e+00 3.932588006154520e+00 4.528224129119018e+00 9.281198642108719e+03 + 132060 9.670522844470950e-01 -5.834790289531083e+00 -6.010805359870869e+00 4.606704417277696e+00 4.595998645142537e+00 9.250233854253935e+03 + 132080 1.031694068182383e+00 -5.927710078348651e+00 -6.053375662990991e+00 4.075868358367709e+00 4.354277124665022e+00 9.381627841401547e+03 + 132100 1.085594302868293e+00 -6.011336903759373e+00 -6.044093479945431e+00 3.616895930739825e+00 4.428802601215695e+00 9.352913991088779e+03 + 132120 1.004034373578224e+00 -5.904955667835869e+00 -6.038635803351039e+00 4.231354169923298e+00 4.463742144861082e+00 9.336044575848769e+03 + 132140 1.011996683522389e+00 -5.941020581627084e+00 -6.045269578689521e+00 3.936270175725488e+00 4.337656302112824e+00 9.356561771851471e+03 + 132160 1.028914546577905e+00 -5.999003166372002e+00 -6.038518008307820e+00 3.687107321548306e+00 4.460206984250814e+00 9.335667176930072e+03 + 132180 1.019849808999467e+00 -6.026534625272331e+00 -6.022051008064526e+00 3.502165410843935e+00 4.527911034688666e+00 9.284880485476251e+03 + 132200 1.012623171946348e+00 -6.064271342466329e+00 -5.970147196136766e+00 3.395855943493614e+00 4.936331357382537e+00 9.125633440172893e+03 + 132220 9.289310653323588e-01 -5.977806489100574e+00 -5.981984973218800e+00 3.767703268759718e+00 4.743709766334542e+00 9.161829742829306e+03 + 132240 9.788010731458674e-01 -6.078465725720863e+00 -5.974930509937734e+00 3.298154279157154e+00 4.892669510206739e+00 9.140250162495971e+03 + 132260 9.056257970189709e-01 -5.987363499975785e+00 -6.013080522961729e+00 3.721027244242376e+00 4.573356118560641e+00 9.257247613947013e+03 + 132280 9.687206735547004e-01 -6.089846880600771e+00 -5.949337209370480e+00 3.200616543378893e+00 5.007444819384570e+00 9.062177757202646e+03 + 132300 9.837147614891352e-01 -6.113326970592984e+00 -5.927305740322531e+00 3.078358691937990e+00 5.146521382843280e+00 8.995247236102583e+03 + 132320 9.732155548080043e-01 -6.093108531640963e+00 -5.955384602501708e+00 3.204487378155700e+00 4.995319491982460e+00 9.080591460390004e+03 + 132340 9.259666563576376e-01 -6.014169397835060e+00 -5.994024838300223e+00 3.560688462965369e+00 4.676361641174916e+00 9.198708811588360e+03 + 132360 9.468459342125349e-01 -6.032069346177106e+00 -5.962392780363214e+00 3.484453197271210e+00 4.884546820588293e+00 9.101954768722744e+03 + 132380 9.931548021200675e-01 -6.081912210435366e+00 -5.974958340296141e+00 3.263662616668333e+00 4.877808290065678e+00 9.140331218752799e+03 + 132400 9.978232879279847e-01 -6.069466686281583e+00 -5.990065413504260e+00 3.293888703338349e+00 4.749823098932993e+00 9.186611281373320e+03 + 132420 9.755819342792181e-01 -6.020240606927674e+00 -5.991446720606729e+00 3.624056526153888e+00 4.789395477248263e+00 9.190800448748456e+03 + 132440 9.876318718610894e-01 -6.020997067034952e+00 -5.974584813014150e+00 3.539831400726244e+00 4.806337745586788e+00 9.139191490546593e+03 + 132460 9.619286599317186e-01 -5.966008975138416e+00 -5.957216133789147e+00 3.920706737639317e+00 4.971196593354620e+00 9.086167989934866e+03 + 132480 9.684243621514940e-01 -5.959933992194438e+00 -5.988866182920771e+00 3.921830565043568e+00 4.755697448650919e+00 9.182832211999927e+03 + 132500 9.968536327579650e-01 -5.986071645493661e+00 -5.959517372668894e+00 3.816382722590130e+00 4.968861466410383e+00 9.093165898632915e+03 + 132520 1.073760765343268e+00 -6.085755324841104e+00 -5.957761940218028e+00 3.240893678151458e+00 4.975851499569416e+00 9.087804172344389e+03 + 132540 9.503138910657258e-01 -5.890535030509758e+00 -6.016768520279302e+00 4.234925515942152e+00 4.510073283116022e+00 9.268591851678852e+03 + 132560 1.061598141578479e+00 -6.045118774323414e+00 -5.997917878656546e+00 3.462602953580725e+00 4.733637800814882e+00 9.210665034399417e+03 + 132580 1.047073050887451e+00 -6.019174509706593e+00 -6.049116625835873e+00 3.618445616652516e+00 4.446513352310697e+00 9.368457879060266e+03 + 132600 1.012329356064740e+00 -5.967912076320514e+00 -6.044644954614967e+00 3.825554684552512e+00 4.384942623011230e+00 9.354624718448758e+03 + 132620 1.074335375212432e+00 -6.064133231423622e+00 -5.982201753007153e+00 3.412075707702636e+00 4.882538935625304e+00 9.162491119385550e+03 + 132640 1.000683350686506e+00 -5.961894101005387e+00 -6.027278708396974e+00 3.826534434304731e+00 4.451085900426946e+00 9.301002372879384e+03 + 132660 9.952222537251562e-01 -5.960874785455147e+00 -5.976199833273202e+00 3.951452786444573e+00 4.863453990329815e+00 9.144114084491806e+03 + 132680 9.685060113734959e-01 -5.926333978142932e+00 -6.014116595834272e+00 4.059144302285968e+00 4.555082927186105e+00 9.260431053259235e+03 + 132700 1.013015892019874e+00 -5.997578356718474e+00 -6.016209828900536e+00 3.687652617482683e+00 4.580667821002285e+00 9.266901428351002e+03 + 132720 1.017748377019775e+00 -6.010737734397365e+00 -5.999686875342457e+00 3.664312227496306e+00 4.727767970304503e+00 9.216094041071743e+03 + 132740 1.046446692403036e+00 -6.060388098956939e+00 -5.993540975613866e+00 3.323617599800807e+00 4.707464126595641e+00 9.197245332741266e+03 + 132760 1.045636680786479e+00 -6.065083308789472e+00 -5.998838682304964e+00 3.316791909646820e+00 4.697178806243683e+00 9.213499532439931e+03 + 132780 9.910110354007096e-01 -5.989919203249939e+00 -6.037265830415930e+00 3.723955442007225e+00 4.452083781953228e+00 9.331818695346989e+03 + 132800 1.016887882463320e+00 -6.036375968303036e+00 -5.997676989985738e+00 3.467906624911351e+00 4.690122147056814e+00 9.209922307614843e+03 + 132820 9.135835618522420e-01 -5.889363979045744e+00 -6.027805036475682e+00 4.245488445165089e+00 4.450538469717989e+00 9.302587896450643e+03 + 132840 9.963030995598791e-01 -6.015078879046035e+00 -5.986842951038905e+00 3.593917101422632e+00 4.756052169535311e+00 9.176697264218750e+03 + 132860 9.357127828952373e-01 -5.924831562705464e+00 -5.998210431183720e+00 4.084999963413543e+00 4.663647145268200e+00 9.211532445087132e+03 + 132880 9.728254357506572e-01 -5.977886351611906e+00 -5.987861116234787e+00 3.849915674684055e+00 4.792639032629637e+00 9.179817425617102e+03 + 132900 1.010979254693925e+00 -6.032296229543508e+00 -6.018828389152844e+00 3.519305315373654e+00 4.596639739038409e+00 9.274942297706419e+03 + 132920 1.041289677381281e+00 -6.076095047557565e+00 -5.968174778661417e+00 3.300743427986961e+00 4.920438312596279e+00 9.119590342137746e+03 + 132940 9.728509201570851e-01 -5.972934293654172e+00 -6.025700450918322e+00 3.787877109338278e+00 4.484885668791089e+00 9.296115284521691e+03 + 132960 1.042032012706514e+00 -6.075207414533070e+00 -5.983115162766888e+00 3.298392140211113e+00 4.827200101082434e+00 9.165296331132051e+03 + 132980 9.811635603611188e-01 -5.985174268897868e+00 -5.996712030767289e+00 3.790222215670905e+00 4.723970601553814e+00 9.206939770255321e+03 + 133000 1.021611416103556e+00 -6.043127404011926e+00 -6.000875772150067e+00 3.472732417349893e+00 4.715347825919585e+00 9.219744608200876e+03 + 133020 9.614238177046439e-01 -5.952072365826485e+00 -6.015943679661754e+00 3.974120946377314e+00 4.607361978281325e+00 9.266063132773794e+03 + 133040 9.844347216610244e-01 -5.983949154266593e+00 -6.005933623532785e+00 3.761649757279128e+00 4.635411532667028e+00 9.235266744773096e+03 + 133060 1.022024253025465e+00 -6.036225515218599e+00 -5.987645007417905e+00 3.576280397605971e+00 4.855237191206844e+00 9.179146135739655e+03 + 133080 9.944918664090714e-01 -5.992962742917793e+00 -6.002547765177829e+00 3.756715514431574e+00 4.701676833337051e+00 9.224868867186875e+03 + 133100 1.000072931153555e+00 -5.997791882617317e+00 -5.995945400943048e+00 3.722657060183177e+00 4.733259843698946e+00 9.204621778787463e+03 + 133120 9.880038362072485e-01 -5.975057693731678e+00 -5.997654064574769e+00 3.826186152413892e+00 4.696434294255772e+00 9.209845558612440e+03 + 133140 1.007296367605285e+00 -5.998446503964416e+00 -5.992849022749831e+00 3.749199550586853e+00 4.781341153928421e+00 9.195096269403031e+03 + 133160 1.022312113888329e+00 -6.012678510309021e+00 -6.033530965880084e+00 3.675002880202512e+00 4.555264853406396e+00 9.320236927074082e+03 + 133180 9.755465692595282e-01 -5.936087632264056e+00 -6.059905395981245e+00 4.033154525675057e+00 4.322173765673947e+00 9.401864788991856e+03 + 133200 1.010484279731543e+00 -5.983046209162685e+00 -6.011352755255274e+00 3.824557649833385e+00 4.662017081745891e+00 9.251953365905067e+03 + 133220 1.068534883137551e+00 -6.063534430613060e+00 -5.983183235217634e+00 3.452964643342029e+00 4.914353641609862e+00 9.165496817305606e+03 + 133240 9.756001788886215e-01 -5.920824373854352e+00 -6.038898860642904e+00 4.178707734149523e+00 4.500705759041874e+00 9.336820224489678e+03 + 133260 1.018398722836955e+00 -5.978350310281646e+00 -6.031372011106472e+00 3.811479864132397e+00 4.507021052914562e+00 9.313597523188659e+03 + 133280 1.082010886613598e+00 -6.066938973140800e+00 -5.989770017521053e+00 3.384313447468956e+00 4.827429532494830e+00 9.185679887215731e+03 + 133300 1.043756066800481e+00 -6.004157574887813e+00 -6.032215683075380e+00 3.676106735840803e+00 4.514992736649584e+00 9.316205789113486e+03 + 133320 9.988357980798949e-01 -5.939456200701182e+00 -6.028598252945498e+00 4.051652970772368e+00 4.539785512097500e+00 9.305054359362692e+03 + 133340 1.034020073990885e+00 -5.998098615566682e+00 -5.993577173514683e+00 3.750706367783864e+00 4.776669187737340e+00 9.197333115433823e+03 + 133360 9.979772258468070e-01 -5.951276845109858e+00 -6.005027316906256e+00 3.995683337825139e+00 4.687039810911591e+00 9.232480132862082e+03 + 133380 1.092090430819119e+00 -6.100815788967999e+00 -6.004321175711237e+00 3.169559669594496e+00 4.723646671407965e+00 9.230327824027623e+03 + 133400 1.045444614916810e+00 -6.049375438739567e+00 -5.973062956596912e+00 3.434935946066087e+00 4.873134027847652e+00 9.134548708699273e+03 + 133420 1.006400882420135e+00 -6.010395030561625e+00 -5.982295707111049e+00 3.740578819125603e+00 4.901929482735061e+00 9.162715864367174e+03 + 133440 1.006301222965949e+00 -6.030538245893702e+00 -5.980323030988106e+00 3.588832781443134e+00 4.877176316210459e+00 9.156735872814821e+03 + 133460 9.744693481587791e-01 -6.004143449749841e+00 -5.983178983694544e+00 3.755389363523106e+00 4.875770571853257e+00 9.165474057823581e+03 + 133480 9.996493155797510e-01 -6.062088974312039e+00 -5.962109271571446e+00 3.430686766960992e+00 5.004785691906475e+00 9.101108286649629e+03 + 133500 9.392357459343811e-01 -5.990627513504789e+00 -6.025356018297121e+00 3.802708998287035e+00 4.603292549550720e+00 9.295046262874081e+03 + 133520 9.885394959847975e-01 -6.081035520198896e+00 -5.980499073663968e+00 3.332587027680298e+00 4.909882861648676e+00 9.157292879561677e+03 + 133540 9.390579377029294e-01 -6.021898092908790e+00 -6.004083173440559e+00 3.526649485632805e+00 4.628945510069267e+00 9.229587862271745e+03 + 133560 9.568118876994509e-01 -6.057819627929410e+00 -6.008575191448968e+00 3.355825347765805e+00 4.638594522588418e+00 9.243405153077834e+03 + 133580 9.422198224381588e-01 -6.042500190932707e+00 -5.990855018018841e+00 3.550530026956140e+00 4.847084601892239e+00 9.189007222907296e+03 + 133600 9.866663318926765e-01 -6.110453859554553e+00 -6.015472110183592e+00 3.079207693257113e+00 4.624607596523379e+00 9.264618360085222e+03 + 133620 8.758316124251760e-01 -5.944627056473825e+00 -6.021659807009289e+00 4.081627976549974e+00 4.639294002195723e+00 9.283659284282045e+03 + 133640 1.010333598767250e+00 -6.135323771416097e+00 -5.970362842315738e+00 3.034659971061434e+00 4.981891153576972e+00 9.126292925254187e+03 + 133660 1.023747679642860e+00 -6.134972516802505e+00 -6.008692120771023e+00 2.960601719166342e+00 4.685723295007245e+00 9.243765895507302e+03 + 133680 9.675502897781302e-01 -6.024620544959927e+00 -6.011093709865127e+00 3.579170808346773e+00 4.656843988732079e+00 9.251153603818173e+03 + 133700 1.022924529241480e+00 -6.069758163752358e+00 -5.986630012174479e+00 3.359118090977419e+00 4.836452801377478e+00 9.176040616420030e+03 + 133720 9.693445031740692e-01 -5.947312740090167e+00 -5.987320557307003e+00 4.002433028080965e+00 4.772701950432188e+00 9.178168048289728e+03 + 133740 1.014906938909986e+00 -5.969152934584564e+00 -5.991404543873026e+00 3.861593077542620e+00 4.733820893582858e+00 9.190677206076682e+03 + 133760 1.034525676877319e+00 -5.959200510914160e+00 -5.997432855127107e+00 3.973334536627337e+00 4.753798499720453e+00 9.209150405367393e+03 + 133780 1.047551927982597e+00 -5.950047975767287e+00 -5.992221320504731e+00 4.010408989760336e+00 4.768243117973928e+00 9.193165424498096e+03 + 133800 1.047382632163678e+00 -5.930504006402900e+00 -6.077838660065508e+00 4.035907596185502e+00 4.189889214890838e+00 9.457526639036023e+03 + 133820 1.067592633276134e+00 -5.953493670025167e+00 -6.006175135294981e+00 3.999513421773573e+00 4.697008295763895e+00 9.235999133222560e+03 + 133840 1.024598464676316e+00 -5.890901253678570e+00 -6.046346266758817e+00 4.266493200531729e+00 4.373903880386920e+00 9.359821077611796e+03 + 133860 1.089893670702421e+00 -5.994562544421340e+00 -5.979622404804341e+00 3.746664932003067e+00 4.832453525663009e+00 9.154594674828333e+03 + 133880 1.028452736194007e+00 -5.915484211146172e+00 -5.990627659439177e+00 4.144529804704362e+00 4.713044496194885e+00 9.188292095955674e+03 + 133900 1.019130713260869e+00 -5.916355080529220e+00 -6.004676849145951e+00 4.132235759298339e+00 4.625078496151550e+00 9.231388951708464e+03 + 133920 1.069731765673821e+00 -6.008009702309238e+00 -5.996602401607418e+00 3.736181900654938e+00 4.801684386558867e+00 9.206612787295093e+03 + 133940 1.001965224132118e+00 -5.929672060925872e+00 -6.008156038396509e+00 4.088965533100654e+00 4.638298389107995e+00 9.242119761074562e+03 + 133960 1.027490143177410e+00 -5.989894042185160e+00 -6.013890739351978e+00 3.742881808825680e+00 4.605089060216928e+00 9.259715503503076e+03 + 133980 1.067912451512028e+00 -6.073965761799312e+00 -5.975350895065555e+00 3.304502155789173e+00 4.870763981175713e+00 9.141540601346815e+03 + 134000 9.693855976090501e-01 -5.951789062086675e+00 -6.005529549819242e+00 3.978268212404368e+00 4.669682015530370e+00 9.234029073231279e+03 + 134020 9.850179330002994e-01 -5.993880461575698e+00 -6.014831733071897e+00 3.724366163056486e+00 4.604060719926522e+00 9.262602551839103e+03 + 134040 1.022316947304968e+00 -6.065203377117165e+00 -5.998385655778762e+00 3.377530052709362e+00 4.761207748643431e+00 9.212102658197040e+03 + 134060 9.685420893611494e-01 -6.000055978357385e+00 -5.991315750313665e+00 3.672820886631006e+00 4.723008628603967e+00 9.190419090504687e+03 + 134080 9.675016255973119e-01 -6.006777841202176e+00 -5.985332737273795e+00 3.645898136828800e+00 4.769039242204670e+00 9.172091573425259e+03 + 134100 9.987927667428893e-01 -6.057315661192904e+00 -6.006577417620312e+00 3.364101355145591e+00 4.655448201457235e+00 9.237243426216733e+03 + 134120 9.891238694806389e-01 -6.045044431508938e+00 -5.963969130624257e+00 3.470326461442858e+00 4.935873385484958e+00 9.106775270434056e+03 + 134140 1.009325133210154e+00 -6.073557213045891e+00 -5.977243092935130e+00 3.321817926304601e+00 4.874868508542507e+00 9.147330760374400e+03 + 134160 9.900317657755426e-01 -6.042056738018474e+00 -5.962694825111071e+00 3.486470097737828e+00 4.942178482868464e+00 9.102897099848773e+03 + 134180 1.004366147770202e+00 -6.058984551196311e+00 -5.988999906650637e+00 3.393898833703850e+00 4.795761492773851e+00 9.183309098727465e+03 + 134200 9.942767605354268e-01 -6.038701791099617e+00 -5.984676269694502e+00 3.468954368724030e+00 4.779177273054621e+00 9.170048861755786e+03 + 134220 1.021518048426868e+00 -6.072821963655356e+00 -5.960891510292544e+00 3.300673376086620e+00 4.943395360477563e+00 9.097376845939089e+03 + 134240 1.019161672622134e+00 -6.062242265885670e+00 -5.995344438864782e+00 3.367724596338359e+00 4.751862271497576e+00 9.202752845324329e+03 + 134260 9.610888330709214e-01 -5.971615402964286e+00 -5.965934931912919e+00 3.905206002112065e+00 4.937824145939070e+00 9.112744266560085e+03 + 134280 1.018666246237368e+00 -6.048582836219751e+00 -5.964752338175651e+00 3.493342728011412e+00 4.974710420508282e+00 9.109161697702893e+03 + 134300 1.040997337240444e+00 -6.073201000975438e+00 -6.004422058034249e+00 3.305617302833265e+00 4.700556636708588e+00 9.230638335123154e+03 + 134320 9.479888132480758e-01 -5.928743289853869e+00 -6.023495900197874e+00 4.097735703901222e+00 4.553651552386883e+00 9.289308953045289e+03 + 134340 1.005909444483253e+00 -6.007448915618292e+00 -5.981607238275156e+00 3.701910293942968e+00 4.850297204233896e+00 9.160645192752936e+03 + 134360 9.971478318097469e-01 -5.987602592421088e+00 -5.990589133667696e+00 3.770458504570193e+00 4.753309322566405e+00 9.188166196479338e+03 + 134380 9.758011944731900e-01 -5.947960174813698e+00 -6.047862549175901e+00 3.879266638289443e+00 4.305611744859206e+00 9.364546439025322e+03 + 134400 9.607141446627846e-01 -5.918174955671712e+00 -6.038808408901946e+00 4.113751420653486e+00 4.421055464238924e+00 9.336560012845373e+03 + 134420 9.995263430993162e-01 -5.967554043913330e+00 -6.014060722201032e+00 3.863116795134810e+00 4.596068251521615e+00 9.260270346862137e+03 + 134440 1.025596552570541e+00 -5.999110019148148e+00 -5.984945890844894e+00 3.681179126760616e+00 4.762511743369672e+00 9.170897205268937e+03 + 134460 1.009192076701818e+00 -5.967819416353110e+00 -5.991135487223989e+00 3.840461473434199e+00 4.706576986343307e+00 9.189843261634976e+03 + 134480 1.018353642119958e+00 -5.974081819353414e+00 -5.988797655040019e+00 3.825913812738619e+00 4.741413206957921e+00 9.182662543663386e+03 + 134500 1.038082731226579e+00 -5.992792976043125e+00 -5.979571995722969e+00 3.661661158626714e+00 4.737578073565146e+00 9.154429665937147e+03 + 134520 1.039148482053148e+00 -5.977997944494911e+00 -6.009690746063496e+00 3.819613332727813e+00 4.637628361675802e+00 9.246781316351502e+03 + 134540 1.054294598957380e+00 -5.982806259994755e+00 -5.964349953773574e+00 3.795647079058558e+00 4.901626045484734e+00 9.107917711286569e+03 + 134560 1.031685957251909e+00 -5.927442796213885e+00 -5.997511897161767e+00 4.087619037228540e+00 4.685271416427473e+00 9.209379552612036e+03 + 134580 1.050846355528312e+00 -5.933447240556674e+00 -5.956285469426932e+00 4.054840936648051e+00 4.923700292270538e+00 9.083310093397437e+03 + 134600 9.868172858354941e-01 -5.815896147771146e+00 -6.002506264824526e+00 4.672323624231315e+00 4.600779454288520e+00 9.224730547199986e+03 + 134620 1.065319446531914e+00 -5.912389848494087e+00 -6.025652131942617e+00 4.137865906443736e+00 4.487496347600556e+00 9.295958589057031e+03 + 134640 1.165298504725571e+00 -6.044671046841195e+00 -5.999911672135897e+00 3.408936962013492e+00 4.665952218062165e+00 9.216784101410321e+03 + 134660 1.056661575111701e+00 -5.879890672372785e+00 -6.026681419684789e+00 4.273435621857557e+00 4.430540434997297e+00 9.299117143105021e+03 + 134680 1.059135195929530e+00 -5.888783646542569e+00 -5.993277319534114e+00 4.298004629299840e+00 4.697985788638758e+00 9.196421204960492e+03 + 134700 1.105262874123701e+00 -5.972455513418467e+00 -6.029491930187564e+00 3.815172638291730e+00 4.487660706846609e+00 9.307825196991465e+03 + 134720 1.029460959793053e+00 -5.886940553401670e+00 -6.034197054338677e+00 4.274683945490054e+00 4.429114329239887e+00 9.322312014995603e+03 + 134740 1.047640861917031e+00 -5.950784742812106e+00 -5.994652742285909e+00 3.947651232741168e+00 4.695754391211606e+00 9.200615151631762e+03 + 134760 1.085622329303730e+00 -6.046396782389277e+00 -5.951603110781282e+00 3.424977434311804e+00 4.969297365958179e+00 9.069063769672222e+03 + 134780 1.007791660956589e+00 -5.968761765576872e+00 -5.970796670881665e+00 3.925504198953459e+00 4.913819457792757e+00 9.127603499507843e+03 + 134800 9.960253549706910e-01 -5.982698544896148e+00 -6.003733975759372e+00 3.785179708127253e+00 4.664391008888219e+00 9.228523492853761e+03 + 134820 1.031191351411042e+00 -6.062949003318506e+00 -6.005603398817518e+00 3.407445278128759e+00 4.736732613377044e+00 9.234230016667179e+03 + 134840 9.631474975457992e-01 -5.984337695897054e+00 -6.027757915251029e+00 3.846213007832618e+00 4.596887389044864e+00 9.302457301578139e+03 + 134860 1.016100817482414e+00 -6.081246143451756e+00 -5.997187779380221e+00 3.291232671993211e+00 4.773908806481759e+00 9.208428020006540e+03 + 134880 1.001620654917322e+00 -6.074394260780251e+00 -5.988475172941440e+00 3.299860991771201e+00 4.793221690077523e+00 9.181719622016404e+03 + 134900 9.452512744020880e-01 -6.000575100119785e+00 -5.983466728798295e+00 3.715976794340584e+00 4.814215709980489e+00 9.166365370623625e+03 + 134920 1.035858085596521e+00 -6.139903652990537e+00 -5.939406451799563e+00 3.000548275708071e+00 5.151834231788252e+00 9.031966824771089e+03 + 134940 9.806801799775273e-01 -6.056923951259271e+00 -5.982898748014649e+00 3.395202511415492e+00 4.820266683809291e+00 9.164638377278070e+03 + 134960 9.706567946439090e-01 -6.037985796318637e+00 -5.961965732688894e+00 3.494130133908828e+00 4.930649103337642e+00 9.100658891363943e+03 + 134980 1.026500069257789e+00 -6.113504785810966e+00 -5.963035551411349e+00 3.086165500970229e+00 4.950183129931600e+00 9.103922118072915e+03 + 135000 9.441283902600983e-01 -5.980527992136636e+00 -6.032063927690107e+00 3.793453320629696e+00 4.497526003521418e+00 9.315732016160026e+03 + 135020 9.699100370285354e-01 -6.004797800914381e+00 -6.003701178532358e+00 3.685534390018776e+00 4.691831365438119e+00 9.228389407549601e+03 + 135040 1.028570529851006e+00 -6.072643387283338e+00 -6.001737866183896e+00 3.300236171042739e+00 4.707386645789661e+00 9.222378724136333e+03 + 135060 9.511553005823629e-01 -5.935978222331883e+00 -6.032103461830918e+00 3.973370130034900e+00 4.421404129498708e+00 9.315868899307596e+03 + 135080 9.786968550244616e-01 -5.950054624323963e+00 -6.007187707149327e+00 3.921018095882695e+00 4.592951092983462e+00 9.239089218903740e+03 + 135100 1.065759519242730e+00 -6.045741456757829e+00 -5.983953661229345e+00 3.422955427952078e+00 4.777750511507096e+00 9.167864200979138e+03 + 135120 9.873612230474046e-01 -5.892611808302609e+00 -6.008775799516830e+00 4.246267843491736e+00 4.579236229620140e+00 9.243977444242879e+03 + 135140 9.943683144454598e-01 -5.863648102501340e+00 -5.989268644040829e+00 4.454361338075440e+00 4.733028748839721e+00 9.184106023196482e+03 + 135160 1.052177033054590e+00 -5.905560402170901e+00 -6.017199082653247e+00 4.128131152204877e+00 4.487084572845274e+00 9.269941740021002e+03 + 135180 1.112511364232299e+00 -5.955090173022720e+00 -6.065720301258491e+00 3.914548631752203e+00 4.279293315465390e+00 9.419921521966677e+03 + 135200 1.118199811178228e+00 -5.941498463680056e+00 -6.016107444912985e+00 3.998595513854009e+00 4.570179197912005e+00 9.266565141251320e+03 + 135220 1.082082846107906e+00 -5.880305315426551e+00 -6.035921588727494e+00 4.290363606121955e+00 4.396790883287475e+00 9.327649658784549e+03 + 135240 1.144026176979042e+00 -5.976263702709836e+00 -6.024694337569596e+00 3.803687557046655e+00 4.525591357065392e+00 9.293001546020940e+03 + 135260 1.016573477156018e+00 -5.802309068600850e+00 -6.017072038330365e+00 4.776696594798352e+00 4.543494388149321e+00 9.269514108850843e+03 + 135280 1.018464550294152e+00 -5.822165013882079e+00 -6.029245122615507e+00 4.701807362572509e+00 4.512721332681905e+00 9.307006965628820e+03 + 135300 1.078683951858797e+00 -5.929136331625910e+00 -6.036984237087646e+00 4.112693306759055e+00 4.493413944188337e+00 9.330897796232546e+03 + 135320 1.102503338278025e+00 -5.984685412995852e+00 -6.018822574090304e+00 3.767833241336247e+00 4.571812379623298e+00 9.274940708316939e+03 + 135340 1.000381840260648e+00 -5.853480491373474e+00 -6.115997669310183e+00 4.463011276990899e+00 3.955597016876324e+00 9.576558676097997e+03 + 135360 1.036288556508216e+00 -5.927288094729210e+00 -6.039756766939353e+00 4.080553818717797e+00 4.434741298416381e+00 9.339508052467345e+03 + 135380 1.008885702006785e+00 -5.904188662354951e+00 -6.049724396166170e+00 4.118826313818513e+00 4.283137608692473e+00 9.370333197481761e+03 + 135400 1.098850966616866e+00 -6.055269495244323e+00 -5.971049090710268e+00 3.412930332299593e+00 4.896536928199613e+00 9.128370050946889e+03 + 135420 1.012268195559939e+00 -5.944048547938035e+00 -6.019939863975795e+00 3.977758430077702e+00 4.541978749245684e+00 9.278363559132378e+03 + 135440 1.039086573435671e+00 -6.003820155753894e+00 -6.019217687719358e+00 3.680039136395698e+00 4.591624125089632e+00 9.276145469640014e+03 + 135460 9.915039857539619e-01 -5.955711032291807e+00 -6.021888641135829e+00 3.942906216358691e+00 4.562904145424445e+00 9.284372031514735e+03 + 135480 1.012653147205272e+00 -6.009281084948046e+00 -6.031936761153135e+00 3.629216470479775e+00 4.499124071755592e+00 9.315345951659900e+03 + 135500 9.790247544170458e-01 -5.980493464703635e+00 -6.033648457104173e+00 3.791452731743013e+00 4.486228539670636e+00 9.320640111860293e+03 + 135520 1.010916748225532e+00 -6.047868083113204e+00 -5.999066124609559e+00 3.477255838361529e+00 4.757484236168128e+00 9.214180743651013e+03 + 135540 9.365665324388841e-01 -5.957258474512021e+00 -6.044225159663116e+00 3.918145974132976e+00 4.418769809944358e+00 9.353317062263635e+03 + 135560 9.693315292775547e-01 -6.024462184572679e+00 -5.993521650430470e+00 3.563501171764242e+00 4.741166506840991e+00 9.197165381959639e+03 + 135580 9.765809358310944e-01 -6.047971207562903e+00 -5.990114005949865e+00 3.446595496048858e+00 4.778820501083938e+00 9.186735857560681e+03 + 135600 9.756597860699231e-01 -6.057220907372679e+00 -6.021319687129094e+00 3.361019684835315e+00 4.567170047169858e+00 9.282621401419761e+03 + 135620 9.670370181049692e-01 -6.053333161925959e+00 -5.964614562776795e+00 3.422320441254473e+00 4.931756366727821e+00 9.108742352261819e+03 + 135640 9.399305302177708e-01 -6.017128357251917e+00 -5.939335424018664e+00 3.648372712114222e+00 5.095071773157068e+00 9.031742620538071e+03 + 135660 9.698250323518357e-01 -6.058391754585021e+00 -5.935862784866839e+00 3.425009361351492e+00 5.128589666770072e+00 9.021191237886973e+03 + 135680 9.833197398999090e-01 -6.068501608080950e+00 -5.967825743087045e+00 3.322705944823363e+00 4.900802341158123e+00 9.118537588040628e+03 + 135700 9.697748506479794e-01 -6.029664261863756e+00 -5.972275329576894e+00 3.548565837645918e+00 4.878101967745653e+00 9.132151829336684e+03 + 135720 9.947047555983253e-01 -6.039957343609053e+00 -5.990938256300926e+00 3.516689165776619e+00 4.798164350779131e+00 9.189233843014656e+03 + 135740 9.698472589285689e-01 -5.967902484689058e+00 -5.993434706796222e+00 3.887732568236027e+00 4.741122597798088e+00 9.196908758910497e+03 + 135760 9.756602916013396e-01 -5.932776782742335e+00 -6.005688425508307e+00 4.011272950905856e+00 4.592603015103397e+00 9.234502236335253e+03 + 135780 1.058376787479655e+00 -6.006723029622833e+00 -5.964605190247257e+00 3.721560020129755e+00 4.963407171538896e+00 9.108721712377755e+03 + 135800 1.054884865080725e+00 -5.959966577596602e+00 -6.049179584955121e+00 3.872290064920249e+00 4.360015170999358e+00 9.368615350093904e+03 + 135820 1.131695902005475e+00 -6.046891975041634e+00 -6.012002662872479e+00 3.429582244673742e+00 4.629922074252640e+00 9.253933026855324e+03 + 135840 1.026233991138003e+00 -5.877476038899651e+00 -6.004968319904576e+00 4.350833547327445e+00 4.618753140430443e+00 9.232303994951715e+03 + 135860 1.080899336777158e+00 -5.953675157549505e+00 -5.979208715582567e+00 3.936517614843690e+00 4.789899973312506e+00 9.153329870916816e+03 + 135880 1.115068463555549e+00 -6.007393651003335e+00 -5.942931160761962e+00 3.699596641466969e+00 5.069750235971062e+00 9.042677861279537e+03 + 135900 1.047323664768908e+00 -5.913983911730012e+00 -5.979347272339563e+00 4.182371091289316e+00 4.807044559721915e+00 9.153727755913891e+03 + 135920 1.042555090627455e+00 -5.917647004575754e+00 -6.014038745590931e+00 4.143961400175561e+00 4.590465106692701e+00 9.260173957358707e+03 + 135940 1.086599288545800e+00 -5.998660037815684e+00 -6.017376928826088e+00 3.598879879528782e+00 4.491404594917522e+00 9.270466009296541e+03 + 135960 1.028703449135273e+00 -5.933017058571592e+00 -5.952720001181738e+00 4.096143166726923e+00 4.983005821238952e+00 9.072455452798426e+03 + 135980 9.884316537942814e-01 -5.894173497068046e+00 -5.978731971672183e+00 4.251315682267518e+00 4.765767835708909e+00 9.151854119570376e+03 + 136000 1.068829454451514e+00 -6.031925359048610e+00 -5.974268403934760e+00 3.514698260619154e+00 4.845773419267852e+00 9.138208440017092e+03 + 136020 9.923740732413736e-01 -5.937253905537931e+00 -6.023377624458455e+00 3.998437318276388e+00 4.503901596632307e+00 9.288936771605182e+03 + 136040 9.831399858522880e-01 -5.941776456375737e+00 -6.005777535823306e+00 3.987437445958242e+00 4.619933343635267e+00 9.234783891962534e+03 + 136060 1.029582504137016e+00 -6.027464969864919e+00 -5.991915725529092e+00 3.551348362954362e+00 4.755477625158465e+00 9.192247975908940e+03 + 136080 1.079615942437887e+00 -6.115691952261560e+00 -5.990161401319341e+00 3.076929676701972e+00 4.797745526002171e+00 9.186881068693207e+03 + 136100 9.804265967112398e-01 -5.979844360952997e+00 -6.035738125105898e+00 3.792516532201380e+00 4.471565888903374e+00 9.327069084425008e+03 + 136120 1.018159779493264e+00 -6.047949349649494e+00 -5.974251079190813e+00 3.515632131807721e+00 4.938819005551964e+00 9.138161194984836e+03 + 136140 1.031754214405736e+00 -6.075394080199154e+00 -5.966401892107920e+00 3.357477421468967e+00 4.983327431975427e+00 9.114209044339868e+03 + 136160 9.881896471347161e-01 -6.018045594737544e+00 -6.019437011769536e+00 3.603040908526334e+00 4.595051176607541e+00 9.276813628054977e+03 + 136180 1.025537463870473e+00 -6.076541186602233e+00 -5.981423473805411e+00 3.311111287621318e+00 4.857291913919154e+00 9.160138673985983e+03 + 136200 1.049294905017373e+00 -6.112936852459408e+00 -5.997469061609136e+00 3.134222761881956e+00 4.797256685527103e+00 9.209286596863099e+03 + 136220 1.030480316237187e+00 -6.088448563352166e+00 -6.000950707215428e+00 3.179935868201008e+00 4.682362098387634e+00 9.219983242503758e+03 + 136240 9.800394824228993e-01 -6.015279309471921e+00 -5.985659644916852e+00 3.604335380663481e+00 4.774416078166961e+00 9.173060881181395e+03 + 136260 9.327598249139613e-01 -5.943701726181975e+00 -5.984420254801326e+00 3.996657198520198e+00 4.762845106015947e+00 9.169249325679388e+03 + 136280 9.947544090140791e-01 -6.030327406915912e+00 -5.957359847416629e+00 3.548048417552612e+00 4.967039435890837e+00 9.086614322854315e+03 + 136300 1.035373375075447e+00 -6.083595145491326e+00 -5.987623166447296e+00 3.215321843233778e+00 4.766407798520362e+00 9.179102025234037e+03 + 136320 1.043303927466342e+00 -6.088843917815097e+00 -5.995982418005545e+00 3.181694769188292e+00 4.714919871365394e+00 9.204740844845363e+03 + 136340 9.859887317825763e-01 -5.999058807247710e+00 -6.018569316120496e+00 3.737448838558730e+00 4.625416477369705e+00 9.274135586794842e+03 + 136360 1.022032885797105e+00 -6.049153231499328e+00 -5.976708572228217e+00 3.423478069706188e+00 4.839466514015696e+00 9.145700717058980e+03 + 136380 1.016252438895692e+00 -6.036684514363619e+00 -5.996698208227883e+00 3.503198113690507e+00 4.732805671382783e+00 9.206924383055019e+03 + 136400 1.014482498470448e+00 -6.029549134088272e+00 -6.011645242074867e+00 3.548935445464845e+00 4.651742364024158e+00 9.252832395275582e+03 + 136420 9.533320776774808e-01 -5.935803778719102e+00 -6.058946885636515e+00 4.044018890980732e+00 4.336912114726741e+00 9.398874558101950e+03 + 136440 1.043551046472035e+00 -6.067790238199271e+00 -5.988998273047525e+00 3.351066890789775e+00 4.803502547708301e+00 9.183293640561616e+03 + 136460 1.009567018459496e+00 -6.015804172106607e+00 -6.018914666286268e+00 3.575053416593328e+00 4.557192477666303e+00 9.275181320537002e+03 + 136480 1.055207706873927e+00 -6.083637818639451e+00 -5.980840702918184e+00 3.231200825890635e+00 4.821477772164396e+00 9.158313885694066e+03 + 136500 9.769912277580959e-01 -5.966508622928183e+00 -6.000414632927589e+00 3.895634315256324e+00 4.700940758901644e+00 9.218302952114913e+03 + 136520 9.592987908398813e-01 -5.938047514754180e+00 -5.999560604571658e+00 4.019184505718325e+00 4.665966824866481e+00 9.215701098857555e+03 + 136540 9.930154643752914e-01 -5.986656723328995e+00 -6.001034322119532e+00 3.829639475082289e+00 4.747081077900802e+00 9.220236615551896e+03 + 136560 9.393170316115811e-01 -5.906753013072812e+00 -6.046785262528307e+00 4.217883368264553e+00 4.413796521970531e+00 9.361217317982031e+03 + 136580 1.014361554918613e+00 -6.017548869094822e+00 -5.987257307178396e+00 3.640287334015340e+00 4.814226170143519e+00 9.177976036951895e+03 + 136600 1.049508309133553e+00 -6.068130563942215e+00 -5.998809841904775e+00 3.336706849374489e+00 4.734757162660538e+00 9.213396969624082e+03 + 136620 1.050224248707701e+00 -6.069998407104860e+00 -6.014946134142451e+00 3.312019151792184e+00 4.628137822454043e+00 9.262983528208568e+03 + 136640 9.938130468497640e-01 -5.987928601449500e+00 -6.052697156356228e+00 3.784227532066514e+00 4.412316466890602e+00 9.379521414192508e+03 + 136660 1.003249465753937e+00 -6.004862845175831e+00 -6.023081911109543e+00 3.639795031304911e+00 4.535178335322192e+00 9.288055932018675e+03 + 136680 8.663398807591594e-01 -5.805993617139563e+00 -6.023344023454684e+00 4.754316060158915e+00 4.506256392230812e+00 9.288835057160612e+03 + 136700 1.022852591551916e+00 -6.038842254689841e+00 -5.996160786648855e+00 3.457662613733013e+00 4.702746208160193e+00 9.205251547359612e+03 + 136720 1.031042785058859e+00 -6.050082347954968e+00 -5.943424205858021e+00 3.470149467673318e+00 5.082597024888136e+00 9.044178437805391e+03 + 136740 1.010345902938224e+00 -6.017956916554642e+00 -5.965156673192554e+00 3.551413347304666e+00 4.854600515501026e+00 9.110381177025030e+03 + 136760 9.969983523697701e-01 -5.994849308984442e+00 -5.988292709296669e+00 3.757334273116612e+00 4.794983283154327e+00 9.181129682060484e+03 + 136780 9.383349662954873e-01 -5.905015326955368e+00 -6.011508165907759e+00 4.224583027785691e+00 4.613084666807500e+00 9.252373547788882e+03 + 136800 1.056538955588018e+00 -6.076730027265558e+00 -5.950642221161815e+00 3.279762704018359e+00 5.003778398690987e+00 9.066150266720502e+03 + 136820 1.017433314496651e+00 -6.014737072655810e+00 -6.006742345649879e+00 3.634895106788549e+00 4.680802066436617e+00 9.237753621280091e+03 + 136840 1.053938348691172e+00 -6.068721751190915e+00 -5.998458840856856e+00 3.284280317697745e+00 4.687740821986146e+00 9.212336201006718e+03 + 136860 1.023933812072702e+00 -6.024727097400055e+00 -5.971149597429758e+00 3.565893577135892e+00 4.873543873056660e+00 9.128714584627225e+03 + 136880 9.171326666869494e-01 -5.866192653570816e+00 -6.037496800703400e+00 4.378759660371657e+00 4.395104738305262e+00 9.332470430465688e+03 + 136900 9.731781716433238e-01 -5.949051863263223e+00 -5.991726823775732e+00 4.013442234542912e+00 4.768396007351291e+00 9.191602766661701e+03 + 136920 1.003551197297427e+00 -5.992529006678416e+00 -5.994521466068285e+00 3.699616592392836e+00 4.688175582244117e+00 9.200240724413039e+03 + 136940 9.850617178139464e-01 -5.962408810751944e+00 -6.043124128283266e+00 3.912542448450152e+00 4.449062604530285e+00 9.349917536960749e+03 + 136960 9.814483441930956e-01 -5.957777023111169e+00 -6.037393199660933e+00 3.945938427809754e+00 4.488770021497510e+00 9.332170957164843e+03 + 136980 1.010788853924944e+00 -6.002811659139951e+00 -6.039851389527048e+00 3.650797052169974e+00 4.438109188407505e+00 9.339761497556856e+03 + 137000 9.991509272069224e-01 -5.987039792058004e+00 -6.039458329302597e+00 3.722407626844988e+00 4.421412274244115e+00 9.338576042741306e+03 + 137020 9.425519045384113e-01 -5.908139262995117e+00 -6.007241296622684e+00 4.165716854978040e+00 4.596657641898414e+00 9.239278192523421e+03 + 137040 9.847560173297604e-01 -5.975791591805898e+00 -5.961302530805293e+00 3.843737093029719e+00 4.926935523470135e+00 9.098587468652093e+03 + 137060 9.500754724545072e-01 -5.924315410507564e+00 -6.022354792423129e+00 4.050512891230443e+00 4.487555588725950e+00 9.285745949651615e+03 + 137080 9.787311358600240e-01 -5.966735096419446e+00 -5.985952574586157e+00 3.871478261902932e+00 4.761128528374536e+00 9.173935144261697e+03 + 137100 1.016092318549220e+00 -6.019859542490249e+00 -5.994218071076720e+00 3.602587206573203e+00 4.749824503434564e+00 9.199289705744904e+03 + 137120 1.009299135336053e+00 -6.002109285396493e+00 -6.066207364882803e+00 3.632647272468966e+00 4.264586180912826e+00 9.421401557511925e+03 + 137140 9.693261549808431e-01 -5.935282326772901e+00 -6.050631331699191e+00 4.008602142591174e+00 4.346250306103594e+00 9.373166693150031e+03 + 137160 1.057429804314449e+00 -6.059033954811825e+00 -6.014690726511027e+00 3.335773955671503e+00 4.590399634667089e+00 9.262235012547486e+03 + 137180 1.007707836587857e+00 -5.980127180827967e+00 -5.991922505446376e+00 3.810327277476088e+00 4.742596698196599e+00 9.192257296548027e+03 + 137200 9.722190211236019e-01 -5.920930844757012e+00 -6.012102045310597e+00 4.064921501791073e+00 4.541402359514700e+00 9.254197411327381e+03 + 137220 1.045125957836011e+00 -6.023307613043908e+00 -6.001630501505958e+00 3.524311414399945e+00 4.648784743373024e+00 9.222004912192220e+03 + 137240 1.025203195130222e+00 -5.989980039138755e+00 -6.010233472738074e+00 3.678825906634024e+00 4.562527556698010e+00 9.248490975439730e+03 + 137260 1.036443409954271e+00 -6.005486639700235e+00 -5.997011005150795e+00 3.606393478573316e+00 4.655061883756412e+00 9.207865168493468e+03 + 137280 9.880746729940637e-01 -5.934209034861803e+00 -6.002298174611841e+00 4.043693242958551e+00 4.652714865753514e+00 9.224111538711813e+03 + 137300 1.035012770052782e+00 -6.006504461609005e+00 -6.006042723025380e+00 3.653046953024022e+00 4.655698327425010e+00 9.235595868857026e+03 + 137320 9.933715614793592e-01 -5.948430477397632e+00 -5.989252760354288e+00 3.952962838567592e+00 4.718554972602598e+00 9.184085904773186e+03 + 137340 1.103067595199341e+00 -6.116679781961702e+00 -5.965442594243738e+00 3.131336592246091e+00 4.999763928001799e+00 9.111275839451793e+03 + 137360 9.801011743172191e-01 -5.943571899264999e+00 -6.011131453011259e+00 3.989239786796552e+00 4.601302374378373e+00 9.251263111601284e+03 + 137380 1.012125873004371e+00 -6.001266297558162e+00 -5.985256174862652e+00 3.749443764772908e+00 4.841376366849010e+00 9.171826151075013e+03 + 137400 1.015875855811291e+00 -6.017101832974991e+00 -6.032300689227538e+00 3.607433456874138e+00 4.520159272256610e+00 9.316476143471064e+03 + 137420 9.390818254618089e-01 -5.916933309184474e+00 -6.041277744760224e+00 4.190523796161138e+00 4.476518804845963e+00 9.344182118599329e+03 + 137440 9.268913129030821e-01 -5.913492943034760e+00 -6.063421331249753e+00 4.122571215880407e+00 4.261659209406823e+00 9.412755554742398e+03 + 137460 1.003693176782576e+00 -6.042348121349740e+00 -5.994641690231393e+00 3.475401720344188e+00 4.749339430372093e+00 9.200607425135258e+03 + 137480 1.014275253891363e+00 -6.070996583992850e+00 -5.971843635295945e+00 3.307995106593990e+00 4.877346681880843e+00 9.130837578405924e+03 + 137500 9.761930896543723e-01 -6.026664991074238e+00 -6.010681756831959e+00 3.582038777376604e+00 4.673816981793274e+00 9.249880208489782e+03 + 137520 9.261329957568745e-01 -5.963818183670790e+00 -6.012757357767892e+00 3.869548783529076e+00 4.588532472550796e+00 9.256276857838908e+03 + 137540 9.529555810347632e-01 -6.013414472810366e+00 -6.034240429970730e+00 3.571359099086399e+00 4.451773230265137e+00 9.322463771785577e+03 + 137560 9.632833903457236e-01 -6.036060639208438e+00 -5.983217216545308e+00 3.500313336870534e+00 4.803748447295461e+00 9.165601287729743e+03 + 137580 1.005613619977791e+00 -6.102785852834947e+00 -5.936403440720850e+00 3.185644342267028e+00 5.141037900221228e+00 9.022854526544124e+03 + 137600 9.316863074455614e-01 -5.991482601766986e+00 -6.002945903811332e+00 3.708371628200380e+00 4.642547573921487e+00 9.226085325274686e+03 + 137620 1.013644838625650e+00 -6.107177497048085e+00 -5.953069854233986e+00 3.139964784029895e+00 5.024874717149101e+00 9.073544232524080e+03 + 137640 9.985450496543775e-01 -6.073395807523471e+00 -5.979357647802161e+00 3.259493673137089e+00 4.799475338615038e+00 9.153780635259969e+03 + 137660 9.538997279997700e-01 -5.986399366319057e+00 -5.998530414692991e+00 3.769194535355457e+00 4.699536178318662e+00 9.212541867476628e+03 + 137680 9.513754178153582e-01 -5.955048421416341e+00 -6.046653284192769e+00 3.898340496978556e+00 4.372331199109609e+00 9.360844776769673e+03 + 137700 9.863946398659318e-01 -5.973181949033245e+00 -6.033878264688854e+00 3.839927821726656e+00 4.491400184507654e+00 9.321327363211572e+03 + 137720 1.052721075930549e+00 -6.038316993780059e+00 -6.000194311327752e+00 3.458011377695419e+00 4.676917719802614e+00 9.217624122263445e+03 + 137740 1.028975455613955e+00 -5.969280478631759e+00 -5.979167010943874e+00 3.872767590713560e+00 4.815997592241470e+00 9.153197746047375e+03 + 137760 1.045228388056955e+00 -5.962669358035461e+00 -5.934527932839773e+00 3.930638129736055e+00 5.092230548081174e+00 9.017114825166649e+03 + 137780 9.638230810847727e-01 -5.815198992629285e+00 -6.011218332099558e+00 4.662011530033492e+00 4.536438148900440e+00 9.251381311769286e+03 + 137800 1.054819274374448e+00 -5.925484529122527e+00 -5.965691044621343e+00 4.084184783166855e+00 4.853312749234491e+00 9.111992791914519e+03 + 137820 1.080693730775991e+00 -5.945972798286506e+00 -5.993049876208326e+00 3.984154664931423e+00 4.713830798350070e+00 9.195714321888952e+03 + 137840 1.068536481653145e+00 -5.921304782566994e+00 -6.039717230122331e+00 4.082052087496232e+00 4.402109489366443e+00 9.339345817118980e+03 + 137860 1.042696320296683e+00 -5.886808703348026e+00 -5.961230830388187e+00 4.304113337225914e+00 4.876769966974368e+00 9.098429385891070e+03 + 137880 1.049047846503601e+00 -5.904242853294108e+00 -5.987238653431401e+00 4.203162089807955e+00 4.726587361861054e+00 9.177896004437242e+03 + 137900 1.032368797295968e+00 -5.891545802812154e+00 -6.030010601036810e+00 4.252995971438995e+00 4.457909672674750e+00 9.309401280316724e+03 + 137920 1.031320840278714e+00 -5.909493258160772e+00 -6.035571399722849e+00 4.182827649848450e+00 4.458867450469655e+00 9.326573258441604e+03 + 137940 1.084386338774264e+00 -6.014917637770553e+00 -6.046534799593216e+00 3.574527503588335e+00 4.392976867662629e+00 9.360462651654494e+03 + 137960 9.806100879962542e-01 -5.894508259018193e+00 -6.072894439720367e+00 4.275916158171389e+00 4.251595103407255e+00 9.442169637758463e+03 + 137980 9.746444907094887e-01 -5.918124582160170e+00 -6.026824729304174e+00 4.117214500329135e+00 4.493041434134859e+00 9.299594320245291e+03 + 138000 1.002655025271267e+00 -5.985561745014941e+00 -6.028884666879778e+00 3.800473275896725e+00 4.551706354348342e+00 9.305930415170416e+03 + 138020 1.021587260246894e+00 -6.032710394794419e+00 -6.052026040993356e+00 3.537139517368584e+00 4.426226087807702e+00 9.377437905892188e+03 + 138040 1.003598909513602e+00 -6.021678344218886e+00 -5.975921254573771e+00 3.678027742021504e+00 4.940772031650495e+00 9.143274972527448e+03 + 138060 1.036855406240606e+00 -6.079145838427833e+00 -5.956767916724377e+00 3.353368691316671e+00 5.056081655660101e+00 9.084799581062793e+03 + 138080 9.692985466900462e-01 -5.982011384036091e+00 -5.969046473801894e+00 3.829320036532633e+00 4.903766557410764e+00 9.122279449202002e+03 + 138100 9.705385883862624e-01 -5.983871693693493e+00 -6.022801306091651e+00 3.763650142845127e+00 4.540110284116850e+00 9.287171819150723e+03 + 138120 1.004241753919461e+00 -6.033933026100030e+00 -5.987717956306110e+00 3.460306635150106e+00 4.725680717665734e+00 9.179402358871139e+03 + 138140 1.004430960219895e+00 -6.033118093050096e+00 -5.950079721520694e+00 3.546348541405741e+00 5.023167720874033e+00 9.064448063266120e+03 + 138160 9.448985344343350e-01 -5.940255046665037e+00 -6.005938809572994e+00 3.973507301390738e+00 4.596340970243789e+00 9.235287171347456e+03 + 138180 9.637906311211420e-01 -5.961740620637454e+00 -6.032187939712964e+00 3.958748128401083e+00 4.554228720582112e+00 9.316092890239892e+03 + 138200 1.041595366902554e+00 -6.069537852135358e+00 -5.976082909544226e+00 3.325321252180357e+00 4.861953994644269e+00 9.143780259532145e+03 + 138220 1.038763545836012e+00 -6.055755800306680e+00 -5.991239620572197e+00 3.389417197040455e+00 4.759879084922408e+00 9.190184767276489e+03 + 138240 1.020484566701619e+00 -6.020246891444675e+00 -6.028169760272017e+00 3.561484315241386e+00 4.515989976374799e+00 9.303717100691145e+03 + 138260 9.846594290080384e-01 -5.960587759450487e+00 -5.995623723902191e+00 3.909500125317707e+00 4.708318195638046e+00 9.203616775346487e+03 + 138280 1.039759743207341e+00 -6.032964843821327e+00 -6.012656656190168e+00 3.501704569987524e+00 4.618317326047523e+00 9.255952399805512e+03 + 138300 1.084784439111142e+00 -6.091616299301173e+00 -5.980096095560764e+00 3.211652031174335e+00 4.852018298747520e+00 9.156063042812691e+03 + 138320 9.879542921735197e-01 -5.941809809663524e+00 -6.007566030336269e+00 4.001272010257619e+00 4.623689615412450e+00 9.240291643761675e+03 + 138340 1.046189547665074e+00 -6.020601061450487e+00 -6.035305597768387e+00 3.583694215661820e+00 4.499258492604799e+00 9.325743325774547e+03 + 138360 1.068618341087495e+00 -6.048931712658112e+00 -6.004940092340472e+00 3.397381311920565e+00 4.649988003465699e+00 9.232243802107501e+03 + 138380 1.022370128481884e+00 -5.977514290134662e+00 -6.006153562918412e+00 3.879671595288193e+00 4.715220459050766e+00 9.235941490792888e+03 + 138400 1.001460545296459e+00 -5.945620486254661e+00 -5.985203637428327e+00 4.053029792299196e+00 4.825737212787161e+00 9.171681104954676e+03 + 138420 9.812835069223571e-01 -5.916991081304393e+00 -6.006818866024022e+00 4.192546932533500e+00 4.676741891868629e+00 9.237985897473292e+03 + 138440 9.953844457100985e-01 -5.939052170580297e+00 -6.004218045245167e+00 4.081524110721523e+00 4.707331574009327e+00 9.230005080993293e+03 + 138460 1.064159170383417e+00 -6.046071940492279e+00 -6.012421881285512e+00 3.469317511262850e+00 4.662541358557942e+00 9.255223193440588e+03 + 138480 9.432464641669073e-01 -5.877711681396527e+00 -6.040010978526224e+00 4.373021298605189e+00 4.441073618751409e+00 9.340290989251767e+03 + 138500 1.008942094328704e+00 -5.990392563598535e+00 -5.991600202403768e+00 3.802662279441262e+00 4.795727830540112e+00 9.191271955658051e+03 + 138520 9.358043935023291e-01 -5.898106111662854e+00 -6.022678769913165e+00 4.268944926179107e+00 4.553629444949263e+00 9.286778958091843e+03 + 138540 1.044815194930107e+00 -6.077730035631197e+00 -6.006793263512779e+00 3.254680231093122e+00 4.662010154027083e+00 9.237919679964583e+03 + 138560 1.029685823305845e+00 -6.077118343001547e+00 -5.978525901160941e+00 3.307503684641595e+00 4.873636742821419e+00 9.151254881921288e+03 + 138580 1.041986097576706e+00 -6.118899287609727e+00 -5.982773793551007e+00 3.121123305329147e+00 4.902776957566441e+00 9.164254938415968e+03 + 138600 9.434210668659752e-01 -5.997978123939192e+00 -5.989008340254092e+00 3.714647691383093e+00 4.766153577372479e+00 9.183327121603985e+03 + 138620 9.778652783946806e-01 -6.073034833166809e+00 -5.932014614208673e+00 3.407782252884164e+00 5.217542172950139e+00 9.009489686534414e+03 + 138640 8.673369738455792e-01 -5.925262866408961e+00 -5.969771041935225e+00 4.084711828119826e+00 4.829138996630116e+00 9.124446694627542e+03 + 138660 9.174413039729665e-01 -6.005559085466901e+00 -5.961579496322836e+00 3.670581823392223e+00 4.923119430076870e+00 9.099464190790106e+03 + 138680 1.009182807692230e+00 -6.140629772894999e+00 -5.991452622781026e+00 2.919654585254289e+00 4.776252866298099e+00 9.190822974973729e+03 + 138700 8.819863618150909e-01 -5.948426511265433e+00 -6.000359121455020e+00 3.978633197593742e+00 4.680428113339682e+00 9.218166923918370e+03 + 138720 9.407669504974367e-01 -6.025366141121287e+00 -6.043016302486016e+00 3.490896523069382e+00 4.389546565159463e+00 9.349561206106628e+03 + 138740 1.011927435349186e+00 -6.113459499682836e+00 -5.998734152976636e+00 3.055954881164031e+00 4.714725575641056e+00 9.213187814071629e+03 + 138760 9.283232574156345e-01 -5.964693016350180e+00 -6.016168090356844e+00 3.882199355770090e+00 4.586621515081868e+00 9.266759278513631e+03 + 138780 9.569219939692702e-01 -5.973720322636479e+00 -6.037206229427882e+00 3.825852656197193e+00 4.461306754988635e+00 9.331608585942515e+03 + 138800 1.043105661801749e+00 -6.060855863922247e+00 -6.003814847363433e+00 3.401724719217296e+00 4.729263063366788e+00 9.228763191977489e+03 + 138820 9.937292131565840e-01 -5.943337266582921e+00 -6.008948677897992e+00 4.025990558698645e+00 4.649239681594417e+00 9.244548890601902e+03 + 138840 9.406335730223223e-01 -5.827071053885653e+00 -6.074870368496941e+00 4.620240162521058e+00 4.197338151203037e+00 9.448311864407284e+03 + 138860 1.093336986825499e+00 -6.023944676421438e+00 -5.979663963811009e+00 3.533800493852026e+00 4.788067198079241e+00 9.154742781016363e+03 + 138880 1.077618088895531e+00 -5.979999476624354e+00 -6.030896311568420e+00 3.755452120840701e+00 4.463194618332118e+00 9.312148974158610e+03 + 138900 1.025076721348547e+00 -5.893375333804697e+00 -6.070243049612462e+00 4.170109718994785e+00 4.154507924636035e+00 9.433957516822491e+03 + 138920 1.066802855599658e+00 -5.956322259872403e+00 -6.028999958571063e+00 3.991306853848634e+00 4.573980261083403e+00 9.306288592703144e+03 + 138940 1.105810857849289e+00 -6.020293704888637e+00 -6.021312005501794e+00 3.574513108108667e+00 4.568665868406411e+00 9.282603560394917e+03 + 138960 1.001323654027588e+00 -5.879914577305163e+00 -6.024592106800130e+00 4.283075902127582e+00 4.452315138992148e+00 9.292703584699679e+03 + 138980 1.016703981596852e+00 -5.917372767650296e+00 -5.985478221033047e+00 4.119432188960545e+00 4.728360136351933e+00 9.172518502835144e+03 + 139000 9.969975007127980e-01 -5.901972861624685e+00 -6.012017579144143e+00 4.247640206581140e+00 4.615746409219418e+00 9.253977629274381e+03 + 139020 1.070860151517397e+00 -6.028146528194418e+00 -5.998492167324613e+00 3.546228308199573e+00 4.716508237311502e+00 9.212402734487845e+03 + 139040 9.665655290721255e-01 -5.890514600040862e+00 -6.009347325674596e+00 4.252227442690048e+00 4.569871542796289e+00 9.245736486230961e+03 + 139060 9.739695294179109e-01 -5.917192747182552e+00 -5.988390402281745e+00 4.173887493334298e+00 4.765059539953216e+00 9.181415268287930e+03 + 139080 1.016564594898197e+00 -5.993829685212724e+00 -5.973671336891360e+00 3.742823090910468e+00 4.858575446466062e+00 9.136375153600749e+03 + 139100 9.919120175399586e-01 -5.967905339242114e+00 -5.960571862941193e+00 3.849810611086823e+00 4.891920566858506e+00 9.096385732133824e+03 + 139120 9.593431401980245e-01 -5.927740052867414e+00 -5.989763380468634e+00 4.081457245404864e+00 4.725309700239735e+00 9.185641248078313e+03 + 139140 1.029260602735118e+00 -6.038429149571138e+00 -5.987843712715988e+00 3.452830170317347e+00 4.743299576810673e+00 9.179757957045314e+03 + 139160 1.007602529722866e+00 -6.013369668526346e+00 -5.997165788775633e+00 3.640375003335248e+00 4.733420188406130e+00 9.208353816702804e+03 + 139180 1.005751298805370e+00 -6.016636340406102e+00 -5.982758828792088e+00 3.585977554120060e+00 4.780507468335709e+00 9.164211451440220e+03 + 139200 1.012859047746622e+00 -6.032285668830134e+00 -6.007847296346293e+00 3.541653493668940e+00 4.681982410297072e+00 9.241136555172676e+03 + 139220 9.412601307221020e-01 -5.929863041632634e+00 -6.030119315717780e+00 4.106342520559301e+00 4.530655480154121e+00 9.309724776983961e+03 + 139240 1.039867683526883e+00 -6.078774398843350e+00 -6.000508568280813e+00 3.283556733968843e+00 4.732971244657071e+00 9.218616700334074e+03 + 139260 9.579760975566122e-01 -5.960302341834712e+00 -6.017738175606967e+00 3.966804398253108e+00 4.636998952566271e+00 9.271579522465128e+03 + 139280 1.006513485075464e+00 -6.035688213205995e+00 -6.027483372912727e+00 3.532560273749913e+00 4.579673736408793e+00 9.301609465580883e+03 + 139300 9.413413535085295e-01 -5.941315067493709e+00 -6.035004718854179e+00 3.953206693070244e+00 4.415226216531734e+00 9.324799873752816e+03 + 139320 1.036604837790182e+00 -6.085094896611094e+00 -5.958378488481497e+00 3.260980158272331e+00 4.988605383053264e+00 9.089712485498809e+03 + 139340 9.602035904648629e-01 -5.970819675345785e+00 -5.981712978074727e+00 3.862568968958901e+00 4.800017938956170e+00 9.160994394184114e+03 + 139360 9.555371278452660e-01 -5.960854684823919e+00 -6.004735016827692e+00 3.925630273042839e+00 4.673662616217740e+00 9.231568127956347e+03 + 139380 1.041683927286453e+00 -6.078293093063744e+00 -5.962992567082728e+00 3.324131167721012e+00 4.986204630602735e+00 9.103783677294819e+03 + 139400 1.008814371850416e+00 -6.008775004673254e+00 -5.980103053268999e+00 3.639574031765455e+00 4.804212813698829e+00 9.156058797477979e+03 + 139420 1.018405908523166e+00 -5.989106267237901e+00 -5.967593905722952e+00 3.754195921302007e+00 4.877723230148027e+00 9.117810849008187e+03 + 139440 1.026589314700578e+00 -5.959363941247018e+00 -5.950992857716891e+00 3.936936231434696e+00 4.985004288485678e+00 9.067206479068494e+03 + 139460 1.058996101984110e+00 -5.961220186556544e+00 -5.992187929920552e+00 3.916145616186856e+00 4.738324041547919e+00 9.193067210214364e+03 + 139480 1.057187127234161e+00 -5.918014733182435e+00 -6.037050520730308e+00 4.135955587373111e+00 4.452433674544634e+00 9.331141309028935e+03 + 139500 1.060839069856907e+00 -5.894758090857223e+00 -6.043060071204196e+00 4.233914976503533e+00 4.382342055693925e+00 9.349694142146733e+03 + 139520 1.069032013165838e+00 -5.890548527149431e+00 -6.021337900824861e+00 4.259769335976289e+00 4.508756512741805e+00 9.282658669001094e+03 + 139540 1.047311496178486e+00 -5.850123600122386e+00 -6.073504708125919e+00 4.445543681402930e+00 4.162854791131896e+00 9.444039534669551e+03 + 139560 1.071327160342137e+00 -5.889239343635555e+00 -6.040401216516305e+00 4.263145443432229e+00 4.395150577126740e+00 9.341486027049808e+03 + 139580 1.121221342033233e+00 -5.979564799131463e+00 -5.958737164783913e+00 3.797898436561423e+00 4.917493936051053e+00 9.090816094392132e+03 + 139600 1.063692413359104e+00 -5.917159640320579e+00 -6.006363360616401e+00 4.132521552781726e+00 4.620299986612008e+00 9.236588354938336e+03 + 139620 1.084823498349184e+00 -5.981191321971450e+00 -6.041709383644728e+00 3.721161804040230e+00 4.373657728772494e+00 9.345544496698485e+03 + 139640 9.905322450335997e-01 -5.881280409533627e+00 -6.005254813588605e+00 4.311662510868109e+00 4.599782297807402e+00 9.233194272476068e+03 + 139660 1.021144749275619e+00 -5.966474441909938e+00 -6.012886819951032e+00 3.894619190388229e+00 4.628112133383977e+00 9.256633330416696e+03 + 139680 9.633283261434359e-01 -5.914937797774867e+00 -6.030870314345679e+00 4.136103828051098e+00 4.470401377402542e+00 9.312047847433660e+03 + 139700 1.031224508358351e+00 -6.046010203432660e+00 -6.008185940397095e+00 3.408265564828944e+00 4.625458336464947e+00 9.242204062429020e+03 + 139720 9.835376527396956e-01 -6.000598169744826e+00 -6.006803270722343e+00 3.672060804250850e+00 4.636430154201676e+00 9.237958176929886e+03 + 139740 1.037252904784985e+00 -6.099637402106771e+00 -5.973884537289730e+00 3.176311832843171e+00 4.898404242815557e+00 9.137052912916975e+03 + 139760 9.710522183907180e-01 -6.015795025050281e+00 -5.987860510203809e+00 3.602875718061262e+00 4.763280025161905e+00 9.179784302628845e+03 + 139780 9.628781758015147e-01 -6.012300674185990e+00 -6.009910026788692e+00 3.633670400817359e+00 4.647397868124134e+00 9.247501150983402e+03 + 139800 9.251426510128338e-01 -5.961898783981693e+00 -6.044961014792069e+00 3.914760062295630e+00 4.437803879143777e+00 9.355577989612069e+03 + 139820 9.111794078438058e-01 -5.943203107269698e+00 -6.033744682280211e+00 4.008448155365498e+00 4.488544420391674e+00 9.320927061407769e+03 + 139840 1.010410791248123e+00 -6.089584368775077e+00 -5.980213761559461e+00 3.200264222750792e+00 4.828287174429628e+00 9.156419337689182e+03 + 139860 9.890780792576576e-01 -6.053689281354137e+00 -5.998952167624942e+00 3.371121898652071e+00 4.685430876226085e+00 9.213837128099700e+03 + 139880 1.020476860372789e+00 -6.093270882862875e+00 -6.012202981566916e+00 3.177106716043943e+00 4.642611150502521e+00 9.254559113163687e+03 + 139900 9.381846549064705e-01 -5.961654492799696e+00 -6.011679781752263e+00 3.863185179100062e+00 4.575932228545980e+00 9.252931766910113e+03 + 139920 1.078120048000827e+00 -6.155622852792122e+00 -5.974382907820118e+00 2.871242399158222e+00 4.911950209978311e+00 9.138578302428348e+03 + 139940 1.012277511651776e+00 -6.040295660276224e+00 -6.018938546770022e+00 3.418404196668437e+00 4.541040047423682e+00 9.275278756475209e+03 + 139960 9.837023350126741e-01 -5.976340485370481e+00 -5.974034036775229e+00 3.862664182041054e+00 4.875908166796759e+00 9.137412638484386e+03 + 139980 9.897853041003999e-01 -5.953432011634995e+00 -5.988309437539861e+00 3.907579020859092e+00 4.707307444049130e+00 9.181193269775307e+03 + 140000 9.788193215398436e-01 -5.898574522652016e+00 -6.021652540946462e+00 4.198561371742542e+00 4.491828344434055e+00 9.283616034230648e+03 + 140020 1.008471367237756e+00 -5.895193949358843e+00 -6.030760004478312e+00 4.202796580545804e+00 4.424355313270582e+00 9.311714060576729e+03 + 140040 1.081658994576293e+00 -5.958535139447593e+00 -6.021997897689684e+00 3.887060779285941e+00 4.522647800629755e+00 9.284688273059926e+03 + 140060 1.085007409799589e+00 -5.930830541671099e+00 -5.977621087107359e+00 4.082940093156421e+00 4.814261540447915e+00 9.148440811459113e+03 + 140080 1.054751194101547e+00 -5.865046221644407e+00 -5.966547831393621e+00 4.430732242558745e+00 4.847894292055416e+00 9.114616009324458e+03 + 140100 1.062840565039670e+00 -5.865858224838235e+00 -5.958679053611625e+00 4.450954182416525e+00 4.917962619622888e+00 9.090603062603448e+03 + 140120 1.089002408052415e+00 -5.900774906675563e+00 -5.967981992874171e+00 4.256486673931043e+00 4.870573184715660e+00 9.119009899836290e+03 + 140140 1.101494017388322e+00 -5.923305071183652e+00 -6.031510824903899e+00 4.069028146953702e+00 4.447693964305776e+00 9.314041442297921e+03 + 140160 1.059511841788898e+00 -5.876515788766618e+00 -6.085020664064515e+00 4.323714984927514e+00 4.126447724941817e+00 9.479895542089440e+03 + 140180 1.055811097029639e+00 -5.895141315342804e+00 -6.048825302839449e+00 4.236943274327874e+00 4.354466035601938e+00 9.367555721373099e+03 + 140200 1.077080582811771e+00 -5.956175741882549e+00 -5.991816381960835e+00 3.951605360287705e+00 4.746951289586966e+00 9.191936144123456e+03 + 140220 1.013577984007188e+00 -5.888480011771967e+00 -5.990719679491425e+00 4.338743698699642e+00 4.751667705117069e+00 9.188566570094565e+03 + 140240 1.014807061416192e+00 -5.911937573848485e+00 -6.015297004913188e+00 4.113462445488429e+00 4.519956597494644e+00 9.264047713150818e+03 + 140260 1.011870125922103e+00 -5.925393132056071e+00 -6.006478961283511e+00 4.041827625931523e+00 4.576220246516042e+00 9.236894733949674e+03 + 140280 1.037888241080970e+00 -5.978495142178147e+00 -5.989560141606611e+00 3.804515528069345e+00 4.740978589047979e+00 9.185000174563103e+03 + 140300 1.059458314577908e+00 -6.022170766720881e+00 -6.007795162030860e+00 3.593462577633149e+00 4.676009524380891e+00 9.240987028045221e+03 + 140320 9.928459108879778e-01 -5.937889506755788e+00 -5.996343098227166e+00 3.975954882125606e+00 4.640305314232902e+00 9.205826055707430e+03 + 140340 9.414358892970871e-01 -5.873705785645719e+00 -6.016098786212575e+00 4.392744974476403e+00 4.575102329975897e+00 9.266510395859012e+03 + 140360 1.093373903859890e+00 -6.110343039601594e+00 -5.955036651650448e+00 3.097671364319747e+00 4.989464677521092e+00 9.079545273787515e+03 + 140380 9.922463446956121e-01 -5.972117021342447e+00 -5.998829289255700e+00 3.844684661258877e+00 4.691298685190879e+00 9.213439607026763e+03 + 140400 9.559224387258649e-01 -5.928162493654090e+00 -6.052052777752324e+00 4.065038849151660e+00 4.353641665900105e+00 9.377543267164880e+03 + 140420 1.028093704335014e+00 -6.048228259499221e+00 -6.016331087746416e+00 3.431095685859646e+00 4.614254182135628e+00 9.267257262237585e+03 + 140440 9.450772014969973e-01 -5.939134386186402e+00 -6.019081920188301e+00 4.014089781500839e+00 4.555018669421037e+00 9.275704016104866e+03 + 140460 1.015908355243267e+00 -6.056892853905057e+00 -5.993002516316306e+00 3.389698334626581e+00 4.756566540058983e+00 9.195577686742017e+03 + 140480 9.647227394242229e-01 -5.992419198496027e+00 -6.002366616130443e+00 3.767405665334308e+00 4.710286053919589e+00 9.224303478137925e+03 + 140500 9.366416597217013e-01 -5.960324618634110e+00 -6.000612400208841e+00 3.946551785190970e+00 4.715213108874821e+00 9.218906527237963e+03 + 140520 9.726252299728879e-01 -6.019858129595307e+00 -6.019665326027194e+00 3.576291190045314e+00 4.577398297969672e+00 9.277539908694649e+03 + 140540 1.009385246964118e+00 -6.080886184857526e+00 -5.995840122695757e+00 3.250973229134085e+00 4.739320878902546e+00 9.204303632552141e+03 + 140560 9.539913150621055e-01 -6.005898857533337e+00 -6.006363848199791e+00 3.693699383504472e+00 4.691029335140621e+00 9.236578667269458e+03 + 140580 9.227247949162940e-01 -5.965080602331487e+00 -5.975026034680650e+00 3.866811972823949e+00 4.809703761224377e+00 9.140518207064582e+03 + 140600 1.037740492441840e+00 -6.136212861319004e+00 -5.949213254971285e+00 2.980900110661939e+00 5.054680788406097e+00 9.061796572884432e+03 + 140620 9.787228143780681e-01 -6.045927634867674e+00 -5.989167562199748e+00 3.390185558412396e+00 4.716110679264485e+00 9.183835726612167e+03 + 140640 9.557002688564795e-01 -6.004246027041735e+00 -6.000561403767816e+00 3.666952759430593e+00 4.688110436463047e+00 9.218773042713676e+03 + 140660 9.426766024006065e-01 -5.970222813042710e+00 -5.987534453734143e+00 3.925270740590129e+00 4.825864620772182e+00 9.178806425668810e+03 + 140680 9.986807348933981e-01 -6.030919755454440e+00 -6.014774377601023e+00 3.460506042119018e+00 4.553215300242492e+00 9.262486633880677e+03 + 140700 1.016887322057612e+00 -6.029932147385885e+00 -5.993680414850035e+00 3.553574627788989e+00 4.761737685947323e+00 9.197661951509031e+03 + 140720 1.000472705871802e+00 -5.975758663559182e+00 -6.027681450178287e+00 3.801847112263010e+00 4.503698436470849e+00 9.302218832366023e+03 + 140740 1.001973364321476e+00 -5.947302567451344e+00 -6.009000630967154e+00 3.984556031641565e+00 4.630276203189314e+00 9.244700495838237e+03 + 140760 9.681501632530367e-01 -5.868471974583949e+00 -6.033635741875741e+00 4.432636094611668e+00 4.484240183811815e+00 9.320570995451511e+03 + 140780 1.034248566292155e+00 -5.942229175413677e+00 -5.978082685144418e+00 4.031093606834003e+00 4.825217205647383e+00 9.149873088407252e+03 + 140800 1.058140341021698e+00 -5.953095906468089e+00 -6.024186750079615e+00 3.962987038897569e+00 4.554772413607699e+00 9.291434277284676e+03 + 140820 1.099336863563966e+00 -5.996971844636814e+00 -5.998072564186392e+00 3.755171062362095e+00 4.748850560372616e+00 9.211127408571156e+03 + 140840 1.024683675855185e+00 -5.878286826960359e+00 -6.044496268919011e+00 4.333211804644463e+00 4.378811468089865e+00 9.354137605622242e+03 + 140860 1.047304959649211e+00 -5.912891585353480e+00 -6.024671465848774e+00 4.109030859434010e+00 4.467173487749429e+00 9.292908974942040e+03 + 140880 1.068801363808031e+00 -5.951779825137063e+00 -6.009736274695192e+00 3.975985901427654e+00 4.643190999333292e+00 9.246938773748656e+03 + 140900 1.057245026878601e+00 -5.947500703666660e+00 -6.023847464513727e+00 3.986849720346205e+00 4.548454804939289e+00 9.290388251615086e+03 + 140920 1.020892057826922e+00 -5.915475163943222e+00 -6.017124508921835e+00 4.165330246031246e+00 4.581643976978750e+00 9.269685559645030e+03 + 140940 1.080815778321744e+00 -6.034227627796374e+00 -6.007622734535374e+00 3.495954007815252e+00 4.648723422013837e+00 9.240469447319761e+03 + 140960 1.038798334836277e+00 -6.015374902291191e+00 -5.998582371447091e+00 3.630212588720040e+00 4.726637899462610e+00 9.212711608191994e+03 + 140980 9.846476907999268e-01 -5.977725911144168e+00 -5.969058226808738e+00 3.831910974285732e+00 4.881682159059583e+00 9.122306711057085e+03 + 141000 1.012782988623940e+00 -6.056358123216759e+00 -5.981927082762950e+00 3.382684468068678e+00 4.810079020520734e+00 9.161645465491947e+03 + 141020 9.331963290987556e-01 -5.966837015806142e+00 -5.998211895047554e+00 3.880286940358214e+00 4.700127528507155e+00 9.211550377967083e+03 + 141040 9.725698411944492e-01 -6.042824452769178e+00 -5.964668686558828e+00 3.513912276968919e+00 4.962694781114483e+00 9.108897483434388e+03 + 141060 9.537777346531708e-01 -6.024603945271705e+00 -5.989731729349669e+00 3.627969236650291e+00 4.828210896932591e+00 9.185469231339333e+03 + 141080 9.125449879887032e-01 -5.967204689353025e+00 -5.944220701510270e+00 3.868266407372017e+00 5.000244022325738e+00 9.046577184114920e+03 + 141100 9.496454377090862e-01 -6.017469537974544e+00 -5.980613062874609e+00 3.577687722714566e+00 4.789323306259485e+00 9.157614873322362e+03 + 141120 1.022608858818241e+00 -6.117334194985709e+00 -5.970021056435797e+00 3.058069603344914e+00 4.903964441533018e+00 9.125255897962623e+03 + 141140 9.422624947674526e-01 -5.988318403748321e+00 -5.995116197180967e+00 3.744915328758613e+00 4.705881346913229e+00 9.202047737251341e+03 + 141160 9.318497058825266e-01 -5.961813257693670e+00 -6.030668081679886e+00 3.916895673474701e+00 4.521520618896270e+00 9.311418934605976e+03 + 141180 9.524203649108555e-01 -5.979643797843841e+00 -6.004447479106374e+00 3.852015169154395e+00 4.709588592987660e+00 9.230692083684376e+03 + 141200 1.014496659151786e+00 -6.056633779084986e+00 -6.033242699549225e+00 3.353348863298372e+00 4.487664061750570e+00 9.319395643766569e+03 + 141220 9.736842024005447e-01 -5.982301170022232e+00 -6.067746071573859e+00 3.712569755154459e+00 4.221931907889236e+00 9.426186998773475e+03 + 141240 9.617641525119370e-01 -5.951982066857266e+00 -6.035442762282052e+00 3.974889991080258e+00 4.495645762450260e+00 9.326158613294971e+03 + 141260 1.029320540777737e+00 -6.040648165187566e+00 -5.959920431303212e+00 3.505469023021348e+00 4.969020163561749e+00 9.094427259907759e+03 + 141280 9.875343725921770e-01 -5.967881427458170e+00 -6.009298894153105e+00 3.892703649416815e+00 4.654878146322243e+00 9.245608769350609e+03 + 141300 1.004000578093182e+00 -5.980530047746252e+00 -6.019062288346904e+00 3.738870420153007e+00 4.517612331779099e+00 9.275663200677953e+03 + 141320 9.898567604551874e-01 -5.946921836710097e+00 -6.055306890354071e+00 3.960407259145301e+00 4.338043508588762e+00 9.387600233710555e+03 + 141340 1.003409714762444e+00 -5.954736996179795e+00 -6.025439686042429e+00 4.000539419814517e+00 4.594553633417381e+00 9.295323515626227e+03 + 141360 1.050138721125615e+00 -6.014553387524312e+00 -6.037529100276554e+00 3.620434675669820e+00 4.488504577566387e+00 9.332599284020900e+03 + 141380 1.014948745599096e+00 -5.956235385869240e+00 -5.988026770453421e+00 3.970006449783819e+00 4.787455399800590e+00 9.180324299223661e+03 + 141400 1.008376528857462e+00 -5.940272961427265e+00 -6.000319095568400e+00 4.046751586574173e+00 4.701957392226553e+00 9.217984286201090e+03 + 141420 1.042282943946845e+00 -5.981289389704787e+00 -6.009819210059625e+00 3.785965672385986e+00 4.622143028933072e+00 9.247200175719410e+03 + 141440 1.043389738560972e+00 -5.973973967391723e+00 -5.998117719773798e+00 3.796829680706877e+00 4.658192518295397e+00 9.211284237683783e+03 + 141460 1.049973237070911e+00 -5.974610867961662e+00 -6.010088325621212e+00 3.832711939192586e+00 4.628994887192618e+00 9.248045090373784e+03 + 141480 9.856353910073936e-01 -5.872350682940461e+00 -6.030281705590166e+00 4.430477351003837e+00 4.523612979202460e+00 9.310221950251613e+03 + 141500 1.094852320423915e+00 -6.030770292825814e+00 -6.002127256903139e+00 3.575721172615216e+00 4.740193917378697e+00 9.223560225688245e+03 + 141520 1.002548746000000e+00 -5.893710241434317e+00 -6.010223148557893e+00 4.240847041340434e+00 4.571811898322761e+00 9.248444762372636e+03 + 141540 1.096090919969329e+00 -6.036114783093078e+00 -5.958350855130687e+00 3.551108919685816e+00 4.997641427974829e+00 9.089632304879780e+03 + 141560 1.045250521026980e+00 -5.970255347940622e+00 -6.008056563159828e+00 3.889484182805476e+00 4.672423755297642e+00 9.241781394227923e+03 + 141580 1.030683709581593e+00 -5.964883530541449e+00 -6.034062025869428e+00 3.902590036932113e+00 4.505356411421309e+00 9.321891699754453e+03 + 141600 1.051152989156530e+00 -6.019141668627091e+00 -5.997305045410230e+00 3.581932894701833e+00 4.707322164419569e+00 9.208781417289596e+03 + 141620 9.923238020042643e-01 -5.957025928739258e+00 -5.963957881092998e+00 3.970087832479134e+00 4.930283489347799e+00 9.106713194566510e+03 + 141640 9.815858782634215e-01 -5.965825807573410e+00 -6.000506403483266e+00 3.844340741284245e+00 4.645199392764978e+00 9.218591295164460e+03 + 141660 1.019925299904355e+00 -6.048205966553680e+00 -5.958491160784597e+00 3.456635971742735e+00 4.971792269790132e+00 9.090066627262768e+03 + 141680 1.001210581587734e+00 -6.044873883275864e+00 -5.978163979940311e+00 3.491459476902040e+00 4.874518065178965e+00 9.150121781112641e+03 + 141700 1.024266102268441e+00 -6.100128644344905e+00 -5.977549582267455e+00 3.150897502713097e+00 4.854765446210365e+00 9.148249470543460e+03 + 141720 8.916198222627948e-01 -5.920832729548112e+00 -6.021505051829986e+00 4.105865387718702e+00 4.527789334184658e+00 9.283189159539441e+03 + 141740 9.998075039834057e-01 -6.095855681469897e+00 -6.001302177405094e+00 3.174716221088308e+00 4.717657073535867e+00 9.221065941595492e+03 + 141760 9.192097224682672e-01 -5.987577876302164e+00 -6.046774304328042e+00 3.799407642252626e+00 4.459492591910403e+00 9.361195924863256e+03 + 141780 9.445068678504496e-01 -6.034281019726019e+00 -6.044552441291101e+00 3.504477944360279e+00 4.445497852236227e+00 9.354320379923614e+03 + 141800 9.850064074616284e-01 -6.099480375510989e+00 -6.001499315171895e+00 3.123502340826925e+00 4.686124751814091e+00 9.221661916059093e+03 + 141820 9.353130997985565e-01 -6.026393856622533e+00 -6.022079995445178e+00 3.564320443441181e+00 4.589091301889416e+00 9.284955839328552e+03 + 141840 9.768670996770961e-01 -6.082097873160181e+00 -6.028410819218248e+00 3.220268853999540e+00 4.528548225778868e+00 9.304474137151225e+03 + 141860 9.340788116085329e-01 -6.006797864839420e+00 -6.007033555084535e+00 3.658235856278199e+00 4.656882486417803e+00 9.238666043791689e+03 + 141880 1.032612029671214e+00 -6.135757858655850e+00 -5.946721232059984e+00 3.005109744250366e+00 5.090587307487256e+00 9.054206587493045e+03 + 141900 9.694995961509025e-01 -6.014555211385390e+00 -5.975979135865552e+00 3.655149753707003e+00 4.876659548970305e+00 9.143453577473605e+03 + 141920 1.018078996903040e+00 -6.046732447701013e+00 -5.973917602483297e+00 3.471901531389994e+00 4.890015640690995e+00 9.137141519424158e+03 + 141940 1.039177700143413e+00 -6.031613439680869e+00 -5.985591131026885e+00 3.546934726198931e+00 4.811201944419356e+00 9.172872084839390e+03 + 141960 1.033790809398444e+00 -5.973328423817815e+00 -6.017317592531891e+00 3.806633526622475e+00 4.554040912564389e+00 9.270306603429259e+03 + 141980 1.010613518134506e+00 -5.902777376837367e+00 -5.998089968504837e+00 4.188496949899607e+00 4.641197298969103e+00 9.211200695012167e+03 + 142000 1.085989377118981e+00 -5.988551024929858e+00 -6.037586731496352e+00 3.740986665128835e+00 4.459416049772964e+00 9.332799712749376e+03 + 142020 1.075967449344958e+00 -5.962875558030481e+00 -6.017958792207370e+00 3.896025813869053e+00 4.579729359122413e+00 9.272263114751131e+03 + 142040 1.050914389592182e+00 -5.923077000341830e+00 -6.023369420478124e+00 4.108783720181778e+00 4.532889123557322e+00 9.288921579586791e+03 + 142060 9.898549394867717e-01 -5.835474626863780e+00 -6.059301056624584e+00 4.544648944894635e+00 4.259402948180038e+00 9.399960356058997e+03 + 142080 1.007299785204346e+00 -5.871988965834976e+00 -6.010120530617906e+00 4.353042719287075e+00 4.559869898512924e+00 9.248131814015062e+03 + 142100 1.028874016260903e+00 -5.915968114960552e+00 -5.993505069272464e+00 4.169829871874262e+00 4.724600681410362e+00 9.197103460815284e+03 + 142120 1.041062544570025e+00 -5.949924961931789e+00 -6.040554018836059e+00 3.952181820744643e+00 4.431775751199092e+00 9.341917643926519e+03 + 142140 1.038253447292529e+00 -5.965403382672638e+00 -6.000938914415531e+00 3.848457240493013e+00 4.644406718119555e+00 9.219946602703412e+03 + 142160 9.717387905417684e-01 -5.889732832903052e+00 -6.065346806235516e+00 4.308769550061026e+00 4.300366939011473e+00 9.418740722976783e+03 + 142180 9.600550569993933e-01 -5.896121343948279e+00 -6.055001655958865e+00 4.252474326961165e+00 4.340158988747556e+00 9.386663050480975e+03 + 142200 9.989612713387177e-01 -5.978506378029313e+00 -6.024550376888639e+00 3.798361880046777e+00 4.533970113310733e+00 9.292582508432160e+03 + 142220 9.701679759790333e-01 -5.956276431651458e+00 -6.043077060742815e+00 3.914791548917440e+00 4.416368904320928e+00 9.349771173021309e+03 + 142240 9.864297481616576e-01 -5.999418203416937e+00 -6.025839808031574e+00 3.710761903742735e+00 4.559044961315392e+00 9.296547119568961e+03 + 142260 1.031589454125466e+00 -6.082048271402744e+00 -6.008292101447406e+00 3.259860461572296e+00 4.683379803186260e+00 9.242529125631792e+03 + 142280 1.016206748975860e+00 -6.072456171134401e+00 -6.022243432512639e+00 3.318849047931903e+00 4.607178363494247e+00 9.285466238119976e+03 + 142300 9.858973379806485e-01 -6.038551832869407e+00 -5.985631719274734e+00 3.480776706664734e+00 4.784652188286460e+00 9.173000170833815e+03 + 142320 9.534620895438528e-01 -5.995974948553473e+00 -6.009262741024678e+00 3.677424332527555e+00 4.601123771878659e+00 9.245485222882207e+03 + 142340 9.489995838093430e-01 -5.989588171874563e+00 -5.979357207521215e+00 3.810090324967979e+00 4.868838105521526e+00 9.153762590515036e+03 + 142360 9.500831472902470e-01 -5.987758019551035e+00 -6.008425495397796e+00 3.769934879740749e+00 4.651259035147090e+00 9.242938058384516e+03 + 142380 1.023676604158108e+00 -6.091337946633017e+00 -6.002438846524937e+00 3.216520128650160e+00 4.726992518562037e+00 9.224551582208713e+03 + 142400 1.013586864427438e+00 -6.072448578674462e+00 -5.983697261469882e+00 3.319816177805480e+00 4.829439975416133e+00 9.167087563257079e+03 + 142420 1.022026477152856e+00 -6.080068177248421e+00 -5.983484283676161e+00 3.259589680829872e+00 4.814189344031015e+00 9.166428147024097e+03 + 142440 9.895899956530062e-01 -6.026610351980243e+00 -5.971528076764933e+00 3.567814229968127e+00 4.884105178208978e+00 9.129851227510797e+03 + 142460 1.010728375195445e+00 -6.050949332534872e+00 -5.977266161939693e+00 3.442969799816917e+00 4.866069967808233e+00 9.147411440921094e+03 + 142480 9.812315753803259e-01 -6.001184729880938e+00 -6.020532297198506e+00 3.701712320875436e+00 4.590615595311595e+00 9.280150625260138e+03 + 142500 1.019444973036665e+00 -6.050085042662143e+00 -6.005232460303950e+00 3.391845757584712e+00 4.649396226400144e+00 9.233115279460686e+03 + 142520 1.029499258447256e+00 -6.057401513283143e+00 -6.000540998176605e+00 3.433233313639404e+00 4.759735190517420e+00 9.218714593633642e+03 + 142540 9.618571081634936e-01 -5.951746004969213e+00 -5.999166428194438e+00 3.941791989701279e+00 4.669496581255256e+00 9.214502083700158e+03 + 142560 1.001727373234672e+00 -6.004722465743097e+00 -5.996221575610094e+00 3.678935239312044e+00 4.727748665964242e+00 9.205436810204093e+03 + 142580 9.480885807851986e-01 -5.918878042020682e+00 -5.998090536997521e+00 4.113115086089448e+00 4.658264681838456e+00 9.211156645162946e+03 + 142600 1.048312946464728e+00 -6.060417564157462e+00 -5.975054610638480e+00 3.367626782042234e+00 4.857794071022595e+00 9.140636609128493e+03 + 142620 1.019216192891963e+00 -6.011375754087511e+00 -6.003825778553175e+00 3.639902134216960e+00 4.683255262090052e+00 9.228783407872977e+03 + 142640 9.882163786831829e-01 -5.962273561268762e+00 -5.964831452257936e+00 3.842188508273817e+00 4.827500702381627e+00 9.109373022364780e+03 + 142660 1.022600669047640e+00 -6.006887851033656e+00 -5.956866279247644e+00 3.665691168348492e+00 4.952922774356986e+00 9.085086920442895e+03 + 142680 1.049926383602889e+00 -6.037773493208575e+00 -5.947468761277122e+00 3.514185640661143e+00 5.032729386023646e+00 9.056488991712788e+03 + 142700 1.021219795649507e+00 -5.981882270770957e+00 -5.995665069764787e+00 3.788894575842684e+00 4.709751611138866e+00 9.203741779564223e+03 + 142720 1.024966490489663e+00 -5.969496319399387e+00 -5.988248490353747e+00 3.868447438090159e+00 4.760769570581144e+00 9.180991001768512e+03 + 142740 1.055866591551193e+00 -5.989928265178365e+00 -5.958941048449887e+00 3.730951483933304e+00 4.908884877644520e+00 9.091422519873271e+03 + 142760 1.095657879687061e+00 -6.008336664920087e+00 -5.982331836525477e+00 3.605687774639610e+00 4.755011523515647e+00 9.162888183519692e+03 + 142780 9.958254094129426e-01 -5.815371353214683e+00 -5.995108840829507e+00 4.717870584141266e+00 4.685790115970634e+00 9.201999632085857e+03 + 142800 1.068792494073418e+00 -5.880290535489213e+00 -5.953758514181800e+00 4.398506087079436e+00 4.976641584293638e+00 9.075588118607597e+03 + 142820 1.171344088723258e+00 -5.992870329852718e+00 -5.985252137904786e+00 3.701995812048761e+00 4.745740649125178e+00 9.171834879952445e+03 + 142840 1.038292397008148e+00 -5.769439035492558e+00 -6.093083061941872e+00 4.920606220133546e+00 4.062192136510355e+00 9.505003950539349e+03 + 142860 1.040854983894000e+00 -5.765640372611668e+00 -6.070115187477225e+00 4.925792759288347e+00 4.177451255004997e+00 9.433558859541592e+03 + 142880 1.083892364367855e+00 -5.837398419737574e+00 -6.043075261630007e+00 4.540640632548518e+00 4.359612378013749e+00 9.349745829748987e+03 + 142900 1.083050220023592e+00 -5.855956581785444e+00 -6.024990393755004e+00 4.474023076753097e+00 4.503404770526022e+00 9.293906311276118e+03 + 142920 1.058499636185399e+00 -5.850904018880387e+00 -6.039179486100780e+00 4.516723776860369e+00 4.435616908546479e+00 9.337695721105898e+03 + 142940 1.093233512574005e+00 -5.942965610034361e+00 -6.016498762209756e+00 4.027711076425636e+00 4.605472337415993e+00 9.267773322001169e+03 + 142960 1.074025373600346e+00 -5.962304428774550e+00 -6.017148776779352e+00 3.914921311431216e+00 4.599996578052219e+00 9.269772369297718e+03 + 142980 1.114653814353787e+00 -6.067129309714629e+00 -5.966810141681367e+00 3.310872852441630e+00 4.886921039629700e+00 9.115440435412678e+03 + 143000 9.644143239396895e-01 -5.879117943352171e+00 -5.991867773820264e+00 4.378232663692804e+00 4.730805689165137e+00 9.192091812818011e+03 + 143020 1.019796335116242e+00 -5.985815115387457e+00 -5.980709999230152e+00 3.805512179011711e+00 4.834826546001127e+00 9.157916864582157e+03 + 143040 1.035987757969618e+00 -6.030734295820723e+00 -5.981186633486726e+00 3.551762044729329e+00 4.836272389327107e+00 9.159381494778885e+03 + 143060 9.884198835724802e-01 -5.977048389649038e+00 -5.969308873895418e+00 3.838289753524994e+00 4.882731250668472e+00 9.123058810185208e+03 + 143080 9.953583068783813e-01 -5.999776818724980e+00 -5.960280502096255e+00 3.726740549890734e+00 4.953534512008114e+00 9.095497602818015e+03 + 143100 9.920789540924153e-01 -6.002597878325419e+00 -5.978398854958395e+00 3.704329074406661e+00 4.843283611366878e+00 9.150840018443323e+03 + 143120 9.908955265973325e-01 -6.007824424275439e+00 -5.992937248101034e+00 3.657266956603045e+00 4.742751425979547e+00 9.195388443355501e+03 + 143140 9.938459515122293e-01 -6.019248223096881e+00 -6.000418311489446e+00 3.616649479811765e+00 4.724773746181054e+00 9.218315976803462e+03 + 143160 1.019046575549265e+00 -6.061282033957120e+00 -6.004059930903273e+00 3.360345409239273e+00 4.688923580066292e+00 9.229520592024382e+03 + 143180 9.908524969450737e-01 -6.023884561524197e+00 -6.029648822217053e+00 3.586266130925079e+00 4.553166854010239e+00 9.308297737400046e+03 + 143200 1.019004037398567e+00 -6.071859029278377e+00 -5.973011158537732e+00 3.320662602099191e+00 4.888262372550537e+00 9.134391687265306e+03 + 143220 1.013192699346962e+00 -6.067033069506929e+00 -5.981346321444700e+00 3.355770482760747e+00 4.847797050115471e+00 9.159877250343457e+03 + 143240 9.703230209736557e-01 -6.005240798331498e+00 -6.000551397854529e+00 3.758893499769442e+00 4.785820762990580e+00 9.218731755714207e+03 + 143260 9.777612806289899e-01 -6.015686162632171e+00 -6.020828834811243e+00 3.599351322991653e+00 4.569821303513477e+00 9.281111852829643e+03 + 143280 1.037132512269292e+00 -6.101701990771929e+00 -5.984046903817799e+00 3.137331009936041e+00 4.812924726292515e+00 9.168160908455964e+03 + 143300 1.017483713298927e+00 -6.067810860020703e+00 -5.975745111138258e+00 3.429310495775940e+00 4.957966272987539e+00 9.142747554677597e+03 + 143320 1.001701053967201e+00 -6.039020616099960e+00 -6.010316649574150e+00 3.481512072326722e+00 4.646334690042393e+00 9.248732795863594e+03 + 143340 9.429618201607630e-01 -5.942260997003803e+00 -5.981227165646139e+00 4.053180597943015e+00 4.829430827603613e+00 9.159484370498229e+03 + 143360 9.573825642428547e-01 -5.947405151181627e+00 -5.964103275443799e+00 3.953679777623731e+00 4.857796564083962e+00 9.107178738114002e+03 + 143380 9.909587528747177e-01 -5.971671506017308e+00 -5.958668849105213e+00 3.875537923630510e+00 4.950201191774413e+00 9.090567240228469e+03 + 143400 9.728773850022959e-01 -5.912766620098158e+00 -6.045065966579863e+00 4.111757837808510e+00 4.352074517052866e+00 9.355909839969980e+03 + 143420 1.039247182666702e+00 -5.976327385477138e+00 -5.968749075673207e+00 3.785697706329996e+00 4.829213533963820e+00 9.121369585638840e+03 + 143440 9.910360917759028e-01 -5.873124420696885e+00 -6.005601026030686e+00 4.357691327980401e+00 4.596990159465297e+00 9.234241727177148e+03 + 143460 1.039106640999686e+00 -5.915652273699784e+00 -6.020688190551758e+00 4.159732232187347e+00 4.556599743367712e+00 9.280629548374067e+03 + 143480 1.059320112497310e+00 -5.920105466146627e+00 -6.051041610130254e+00 4.080998883592365e+00 4.329143282535579e+00 9.374380273595882e+03 + 143500 1.028989859516793e+00 -5.861530406938961e+00 -5.994089601992082e+00 4.442579873633837e+00 4.681404462169681e+00 9.198894362493518e+03 + 143520 1.005064874320691e+00 -5.819507195159078e+00 -5.991548112444883e+00 4.656026098072791e+00 4.668140527771795e+00 9.191080956019543e+03 + 143540 1.023443437908404e+00 -5.845007038240031e+00 -6.039265476144996e+00 4.477523671901001e+00 4.362061660054576e+00 9.337974898463488e+03 + 143560 1.141437484198878e+00 -6.024625374393328e+00 -6.020050064001441e+00 3.523847795420421e+00 4.550119935717634e+00 9.278706092752509e+03 + 143580 1.037560196757685e+00 -5.889292628200973e+00 -6.036716455520191e+00 4.227397161992857e+00 4.380866731762366e+00 9.330108210897586e+03 + 143600 1.074574940066438e+00 -5.974381151766103e+00 -5.969536640676546e+00 3.804035273672960e+00 4.831853206034862e+00 9.123761100624386e+03 + 143620 1.025863708981987e+00 -5.939372409630199e+00 -5.966803862184516e+00 4.031281334753073e+00 4.873765689182622e+00 9.115379252716872e+03 + 143640 9.965258894866950e-01 -5.933248211228533e+00 -5.990476190842358e+00 4.054289056186426e+00 4.725677141242621e+00 9.187818645921463e+03 + 143660 1.016271450202795e+00 -6.001761796687785e+00 -5.971560938256169e+00 3.722598472716184e+00 4.896016475398263e+00 9.129934479923877e+03 + 143680 1.054378766366740e+00 -6.092996396786535e+00 -5.988905248468065e+00 3.143331870482801e+00 4.741039352180602e+00 9.183026145573014e+03 + 143700 9.456376595879629e-01 -5.960515907759085e+00 -6.044429421667810e+00 3.851721803474777e+00 4.369877421036568e+00 9.353925453000766e+03 + 143720 9.631501900113086e-01 -6.005923202668134e+00 -5.977990645994030e+00 3.649647463359674e+00 4.810040526331557e+00 9.149608182424976e+03 + 143740 9.040649337756710e-01 -5.926686671724698e+00 -6.000311243950444e+00 4.112443082967743e+00 4.689679395881781e+00 9.217953821855735e+03 + 143760 9.599376745611714e-01 -6.011369168994648e+00 -5.959550385350087e+00 3.605930623228148e+00 4.903482097846068e+00 9.093287827184857e+03 + 143780 9.874584965527364e-01 -6.049215391736672e+00 -6.004565222820297e+00 3.360445156225188e+00 4.616833335734320e+00 9.231071411556037e+03 + 143800 1.060655303099585e+00 -6.153037678239428e+00 -5.970254833759023e+00 2.872069574249736e+00 4.921636952809988e+00 9.125977779248944e+03 + 143820 9.330518483103182e-01 -5.959911877105672e+00 -5.995723343930269e+00 3.912969435908378e+00 4.707334451594957e+00 9.203905125697520e+03 + 143840 9.816754693393441e-01 -6.025141425626161e+00 -5.980401404740652e+00 3.638088979206262e+00 4.894993102626707e+00 9.156965128476388e+03 + 143860 1.058628340156113e+00 -6.129267750195740e+00 -5.976833341808441e+00 3.010949824351136e+00 4.886251786459464e+00 9.146074848882672e+03 + 143880 9.904539789550721e-01 -6.018650270942724e+00 -5.992525777153535e+00 3.570262962020410e+00 4.720273848110282e+00 9.194114196513798e+03 + 143900 9.858467773739675e-01 -6.001806244166477e+00 -5.990046620022056e+00 3.674666049900069e+00 4.742191631533284e+00 9.186490743652348e+03 + 143920 9.706999507522228e-01 -5.965324733470921e+00 -6.014089077404838e+00 3.886196252471652e+00 4.606183843345264e+00 9.260327842593188e+03 + 143940 1.074541068784169e+00 -6.102902188370853e+00 -5.989193402554600e+00 3.145894188303734e+00 4.798827632838398e+00 9.183895265783778e+03 + 143960 9.896227914799409e-01 -5.960522621961890e+00 -6.037138986237969e+00 3.887453232460321e+00 4.447510212443023e+00 9.331416781630693e+03 + 143980 1.017054348292765e+00 -5.987057445264989e+00 -5.991647073566656e+00 3.736126215753573e+00 4.709771859802719e+00 9.191431309678665e+03 + 144000 1.022210512030115e+00 -5.979876391222276e+00 -5.978317748697746e+00 3.804485241539632e+00 4.813435208114633e+00 9.150575148061374e+03 + 144020 1.019506348873456e+00 -5.957407019379268e+00 -5.991794151450773e+00 3.908318973119612e+00 4.710862739373541e+00 9.191880949439386e+03 + 144040 1.081909361299180e+00 -6.027101171231140e+00 -6.005364235839410e+00 3.508432198633287e+00 4.633249045432477e+00 9.233525483210513e+03 + 144060 1.058050817585162e+00 -5.970070189010050e+00 -5.995677086120103e+00 3.865495883729396e+00 4.718457117868953e+00 9.203789048286679e+03 + 144080 1.045439195547904e+00 -5.930207067719433e+00 -5.990963257512362e+00 4.100621600936991e+00 4.751750157156009e+00 9.189324728198761e+03 + 144100 1.002310321649499e+00 -5.843141820207396e+00 -6.017425792052732e+00 4.587162958620532e+00 4.586397421927137e+00 9.270568640940879e+03 + 144120 1.113194084908791e+00 -5.977711090998692e+00 -6.014225874473762e+00 3.789250978116157e+00 4.579577440757830e+00 9.260756263992034e+03 + 144140 1.074339933024374e+00 -5.892846716401976e+00 -6.058872254665230e+00 4.227364878080413e+00 4.274020545003800e+00 9.398661326688747e+03 + 144160 1.084576815986524e+00 -5.885817982326344e+00 -6.080039586433305e+00 4.267204894341847e+00 4.151954387863579e+00 9.464390209110636e+03 + 144180 1.099266312391600e+00 -5.896018113260707e+00 -6.025156422859846e+00 4.256711920881668e+00 4.515179763074593e+00 9.294407779454898e+03 + 144200 1.139527688894762e+00 -5.956281023152593e+00 -5.969595845379710e+00 3.963682963740604e+00 4.887227194050419e+00 9.123904570726650e+03 + 144220 1.088409644539106e+00 -5.889807148574015e+00 -5.998751155450886e+00 4.321051029984109e+00 4.695477683466536e+00 9.213197423590684e+03 + 144240 1.090722640484478e+00 -5.915033335285470e+00 -6.058294199434290e+00 4.166893839248626e+00 4.344267787759019e+00 9.396848877641376e+03 + 144260 1.031690603948053e+00 -5.866787428604852e+00 -6.087184945505877e+00 4.342914940429584e+00 4.077358291978386e+00 9.486639844870337e+03 + 144280 1.081580318112931e+00 -5.995840430430276e+00 -6.040969974633354e+00 3.638987312003587e+00 4.379846485415114e+00 9.343237265402704e+03 + 144300 9.895424516891865e-01 -5.914372512536897e+00 -5.997117801620967e+00 4.161830789921556e+00 4.686694535208722e+00 9.208177127617755e+03 + 144320 1.028894866350819e+00 -6.014172289051032e+00 -5.940742022683645e+00 3.675536627769886e+00 5.097184580548415e+00 9.036010459950436e+03 + 144340 1.003021136453330e+00 -6.004606227890990e+00 -5.969709671151866e+00 3.665370519414098e+00 4.865751948434852e+00 9.124293362559742e+03 + 144360 1.009401528671106e+00 -6.033870525334589e+00 -5.989728921704151e+00 3.515393466631568e+00 4.768861385568625e+00 9.185540045976764e+03 + 144380 9.632569665107366e-01 -5.981185782711842e+00 -6.013656363404124e+00 3.773713924353793e+00 4.587262825212588e+00 9.259018927265357e+03 + 144400 9.753166321323964e-01 -6.011151492597649e+00 -5.979733154133045e+00 3.588571784611976e+00 4.768980746047892e+00 9.154947755014713e+03 + 144420 1.045682136508665e+00 -6.123657601323297e+00 -5.957476263850237e+00 3.018691810421093e+00 4.972930766670261e+00 9.086967654820019e+03 + 144440 9.535999721654209e-01 -5.992495236923250e+00 -5.984232388350178e+00 3.728768940104316e+00 4.776215495282580e+00 9.168702510670742e+03 + 144460 9.513768366710755e-01 -5.990304478016673e+00 -5.990258613430318e+00 3.761729979195532e+00 4.761993340747908e+00 9.187182371330233e+03 + 144480 9.806073741835450e-01 -6.032380883743617e+00 -6.006958534409096e+00 3.496343115530336e+00 4.642322179505001e+00 9.238429535308773e+03 + 144500 9.745920288590990e-01 -6.020277490444245e+00 -5.992884226306334e+00 3.543309841916659e+00 4.700606203690469e+00 9.195208122482767e+03 + 144520 9.340482544890468e-01 -5.951720121933333e+00 -6.026634266697121e+00 3.888694646812982e+00 4.458526034652875e+00 9.299007190604298e+03 + 144540 1.019799356386708e+00 -6.067388832615380e+00 -5.997753120263240e+00 3.304281100630583e+00 4.704140137048229e+00 9.210178536369178e+03 + 144560 9.479756135049967e-01 -5.947418971767434e+00 -6.009805578760052e+00 3.945855066478356e+00 4.587621514830509e+00 9.247168177007085e+03 + 144580 1.068742493181399e+00 -6.109168809382945e+00 -5.993523557016772e+00 3.097755680432335e+00 4.761808615563867e+00 9.197164489598061e+03 + 144600 1.074366698628719e+00 -6.094852414082236e+00 -5.954083720782201e+00 3.243482759870324e+00 5.051798380684007e+00 9.076618156033925e+03 + 144620 9.272528846528260e-01 -5.852761415177568e+00 -6.010219164835382e+00 4.519477897279837e+00 4.615331132236661e+00 9.248373320994437e+03 + 144640 1.021122445897783e+00 -5.963309523337470e+00 -5.973642789842378e+00 3.885903857799278e+00 4.826568642460275e+00 9.136313122453925e+03 + 144660 1.053579758318158e+00 -5.978359457042215e+00 -6.022590149626675e+00 3.751495968461701e+00 4.497516486964179e+00 9.286524824209167e+03 + 144680 1.087530503184823e+00 -5.995616671637519e+00 -5.975483328181280e+00 3.734232699615602e+00 4.849841473366154e+00 9.141954048594871e+03 + 144700 1.058618305535936e+00 -5.923067438614238e+00 -6.007527054110591e+00 4.105628317559749e+00 4.620648135296428e+00 9.240172208885006e+03 + 144720 1.014105610612681e+00 -5.834858279590419e+00 -6.039659591302023e+00 4.548796176677758e+00 4.372795351929168e+00 9.339182477500692e+03 + 144740 1.065971384166577e+00 -5.895465308475139e+00 -5.987356337836994e+00 4.226817112511135e+00 4.699164601824532e+00 9.178278897593535e+03 + 144760 1.089920194613861e+00 -5.924744779308169e+00 -6.011976713913104e+00 4.073906463849817e+00 4.573007196250026e+00 9.253854196730705e+03 + 144780 1.081875838801640e+00 -5.914778047749969e+00 -5.993459270111188e+00 4.157130119845022e+00 4.705330365167094e+00 9.196961348463303e+03 + 144800 1.030758418947701e+00 -5.848285047751322e+00 -6.066881885614263e+00 4.472339368284453e+00 4.217122497524109e+00 9.423451258036243e+03 + 144820 1.046777032082592e+00 -5.896318539539203e+00 -6.000549380695677e+00 4.299794026186107e+00 4.701284406595089e+00 9.218693037413834e+03 + 144840 9.174913557389572e-01 -5.745428229510479e+00 -6.034182019329323e+00 5.071579430675111e+00 4.413510485030745e+00 9.322295719849444e+03 + 144860 1.033346144513867e+00 -5.977513232519722e+00 -5.991807082905179e+00 3.870698576724243e+00 4.788621075844745e+00 9.191910749924802e+03 + 144880 1.029691638621359e+00 -6.035682330906645e+00 -6.007862760977277e+00 3.465442370621318e+00 4.625186646220284e+00 9.241197659497673e+03 + 144900 9.014181341543103e-01 -5.895490161570365e+00 -6.065428932962612e+00 4.244541878251824e+00 4.268727154977660e+00 9.418986874853807e+03 + 144920 1.022773368964170e+00 -6.107727929010672e+00 -5.963183272421752e+00 3.103350451936961e+00 4.933348238283855e+00 9.104377040485999e+03 + 144940 9.202254579638478e-01 -5.971516355608389e+00 -6.029853712228320e+00 3.823675503586328e+00 4.488693374197928e+00 9.308916647082553e+03 + 144960 9.999674536031598e-01 -6.098616511009944e+00 -6.020479729250301e+00 3.161547198417656e+00 4.610220690909427e+00 9.280032580656794e+03 + 144980 9.353313826043863e-01 -6.008271943074234e+00 -6.014039800343128e+00 3.649184272402096e+00 4.616064343391082e+00 9.260241115020186e+03 + 145000 9.402824927763279e-01 -6.016044062625248e+00 -6.030840056288740e+00 3.671387140918637e+00 4.586426255630248e+00 9.311966398989898e+03 + 145020 1.014612525758448e+00 -6.123028949670284e+00 -5.990771384741592e+00 3.098717688129210e+00 4.858161092741788e+00 9.188756428489314e+03 + 145040 9.856358195201276e-01 -6.074171252950487e+00 -6.037138641460466e+00 3.280297313348916e+00 4.492944299302723e+00 9.331433168950050e+03 + 145060 9.910961800157465e-01 -6.075562049968168e+00 -5.994832907714406e+00 3.302435634549190e+00 4.765994862164682e+00 9.201189289772547e+03 + 145080 9.265106746528887e-01 -5.968652506652664e+00 -6.004093556596342e+00 3.867260839283770e+00 4.663752846022420e+00 9.229619171935434e+03 + 145100 1.007630389315747e+00 -6.069471706922844e+00 -6.032385342674567e+00 3.326692324012121e+00 4.539647966622047e+00 9.316717724349959e+03 + 145120 1.004489994047310e+00 -6.045466677972623e+00 -5.975574500915295e+00 3.470004175051850e+00 4.871335871494471e+00 9.142236971032236e+03 + 145140 1.000361597229159e+00 -6.017020275008067e+00 -5.984367488565338e+00 3.600245583138165e+00 4.787742935894690e+00 9.169119170233715e+03 + 145160 1.043492840104798e+00 -6.056080637472655e+00 -5.976283730272459e+00 3.392190540375252e+00 4.850396730050258e+00 9.144377773847245e+03 + 145180 1.030687016017780e+00 -6.009220651392867e+00 -5.979208818897622e+00 3.693689881858887e+00 4.866022468362649e+00 9.153332159257750e+03 + 145200 1.084739891407558e+00 -6.060862086425541e+00 -6.000773103772461e+00 3.364293719803807e+00 4.709333956937799e+00 9.219431255154874e+03 + 145220 1.013861317247316e+00 -5.933185849791751e+00 -6.026473335328024e+00 4.073713051270901e+00 4.538041873129889e+00 9.298475839618830e+03 + 145240 1.024210170290731e+00 -5.928930607336943e+00 -6.008524868250376e+00 4.051050670610904e+00 4.594008107273903e+00 9.243223955405769e+03 + 145260 1.033253249543048e+00 -5.926389871113110e+00 -6.038677174131772e+00 4.082437446982111e+00 4.437666376644970e+00 9.336150055767594e+03 + 145280 1.024330032871510e+00 -5.903576431191135e+00 -6.010641276595285e+00 4.196602034441721e+00 4.581819123899811e+00 9.249739792479517e+03 + 145300 1.075815503310104e+00 -5.974940125914619e+00 -6.035925724369997e+00 3.865753458469554e+00 4.515564714647917e+00 9.327554911388850e+03 + 145320 1.050802755703566e+00 -5.938989548900341e+00 -6.016315849371900e+00 4.014762494409170e+00 4.570742910895151e+00 9.267183335682712e+03 + 145340 1.035284839996167e+00 -5.924478064644788e+00 -6.000709660989774e+00 4.127435987219649e+00 4.689702364205336e+00 9.219203640200816e+03 + 145360 1.096100206323709e+00 -6.032225134913777e+00 -5.999096805512743e+00 3.522833711056095e+00 4.713061705069236e+00 9.214278796387667e+03 + 145380 1.057844779514080e+00 -6.010001178175404e+00 -6.000964599435188e+00 3.659233380557971e+00 4.711122814090331e+00 9.220005172006977e+03 + 145400 9.812983468918689e-01 -5.951284538609361e+00 -6.013485944670389e+00 3.949656890903705e+00 4.592486791664799e+00 9.258465446992779e+03 + 145420 9.695403398682304e-01 -5.995059824520369e+00 -5.972667062485584e+00 3.749535344019309e+00 4.878118048891769e+00 9.133288935937293e+03 + 145440 9.492126248428828e-01 -6.011315618752801e+00 -5.949965760116690e+00 3.669124776310314e+00 5.021405158458803e+00 9.064105518136528e+03 + 145460 9.963536766049228e-01 -6.112316346535594e+00 -5.984779539855507e+00 3.151921438033155e+00 4.884257518247265e+00 9.170399251879613e+03 + 145480 9.768848009823462e-01 -6.105319595678480e+00 -6.000018195779527e+00 3.136104217100899e+00 4.740761150659663e+00 9.217126239879466e+03 + 145500 9.536619736909214e-01 -6.082586736577495e+00 -6.015892782011670e+00 3.183637609306931e+00 4.566604617280014e+00 9.265920349722568e+03 + 145520 9.315211007725590e-01 -6.054779123871855e+00 -5.991251516370577e+00 3.364999255031987e+00 4.729784608169813e+00 9.190217088988478e+03 + 145540 9.563276649230867e-01 -6.087915213814458e+00 -5.991565169624117e+00 3.201539102471016e+00 4.754795966333106e+00 9.191178015771033e+03 + 145560 9.464222445353853e-01 -6.063952163193084e+00 -6.006552729487130e+00 3.377321730575746e+00 4.706918161448993e+00 9.237150529073073e+03 + 145580 9.828026523752563e-01 -6.104394685498788e+00 -5.977180053670898e+00 3.115625257835192e+00 4.846111360191591e+00 9.147130278504867e+03 + 145600 9.419860758394146e-01 -6.026533706947342e+00 -5.959135884320141e+00 3.572825870383506e+00 4.959834597688239e+00 9.092038538306422e+03 + 145620 9.264686217235986e-01 -5.979390641820293e+00 -5.999140303428212e+00 3.836116567089472e+00 4.722710953886545e+00 9.214397839794090e+03 + 145640 9.718506940803160e-01 -6.018292394312661e+00 -5.992363561094612e+00 3.628937168428922e+00 4.777824541240939e+00 9.193604643203998e+03 + 145660 9.673341232956011e-01 -5.980989476808312e+00 -6.011925309605004e+00 3.811075606634886e+00 4.633437267411626e+00 9.253693502129914e+03 + 145680 1.017150124093664e+00 -6.026598991360386e+00 -5.998791858387049e+00 3.533938548676491e+00 4.693611409349309e+00 9.213365494635496e+03 + 145700 1.036336776721640e+00 -6.030979473267756e+00 -5.985283951640790e+00 3.513344734289950e+00 4.775735490831108e+00 9.171919334673577e+03 + 145720 1.008424842964302e+00 -5.970666558281130e+00 -6.016868246825199e+00 3.803343818416237e+00 4.538046573108002e+00 9.268903704054819e+03 + 145740 1.092679012282497e+00 -6.080622457259713e+00 -5.963750656243575e+00 3.281056566107306e+00 4.952152533394724e+00 9.106102564002424e+03 + 145760 9.896663383496291e-01 -5.917941202575729e+00 -6.032257001989129e+00 4.125334342474461e+00 4.468915331929934e+00 9.316303544804752e+03 + 145780 1.024669244691494e+00 -5.964500725380759e+00 -5.970629716091297e+00 3.845350468436670e+00 4.810156855318517e+00 9.127117786387407e+03 + 145800 1.033974309198313e+00 -5.975203785341843e+00 -6.021644452705235e+00 3.795847204324480e+00 4.529177705653829e+00 9.283610288832748e+03 + 145820 1.053974900331853e+00 -6.006010319967837e+00 -5.987273548350285e+00 3.634791705710557e+00 4.742381147844577e+00 9.178028983136453e+03 + 145840 9.686296009404674e-01 -5.881863325669591e+00 -6.009877685312694e+00 4.295581742821562e+00 4.560503479592733e+00 9.247382788318540e+03 + 145860 9.918676002531757e-01 -5.919795120908255e+00 -6.019832179645833e+00 4.068950686820813e+00 4.494522414864828e+00 9.278038021576484e+03 + 145880 1.012636813102866e+00 -5.956361530280740e+00 -6.073651006220183e+00 3.914609825497327e+00 4.241115504165304e+00 9.444522555556372e+03 + 145900 1.019826426751164e+00 -5.978890025242512e+00 -6.074609364966562e+00 3.745134671314812e+00 4.195499410099369e+00 9.447520761164520e+03 + 145920 9.596632627022854e-01 -5.904969280523870e+00 -6.074766042607113e+00 4.209163400356357e+00 4.234164116510363e+00 9.448006437426937e+03 + 145940 9.166657448468659e-01 -5.859188295659235e+00 -6.118582576476643e+00 4.396656850731762e+00 3.907174749142977e+00 9.584659018303391e+03 + 145960 9.451047375814985e-01 -5.918498155660906e+00 -6.042971738802627e+00 4.166058255374759e+00 4.451311678750261e+00 9.349436115981409e+03 + 145980 1.029244736227485e+00 -6.061080400523420e+00 -5.991988577991420e+00 3.338908209363752e+00 4.735644146267480e+00 9.192495451212404e+03 + 146000 9.342851060260058e-01 -5.934926355011434e+00 -6.031473250344757e+00 3.999009562269385e+00 4.444622348681677e+00 9.313919966606927e+03 + 146020 1.036109983915124e+00 -6.098624775872919e+00 -5.991098744529488e+00 3.200533173107086e+00 4.817964284680640e+00 9.189752132059140e+03 + 146040 1.004844848805031e+00 -6.064070847854333e+00 -5.971360041954200e+00 3.340589182457312e+00 4.872948976886724e+00 9.129357455780539e+03 + 146060 9.220943852611928e-01 -5.949768947245596e+00 -6.036265380636284e+00 3.988821093952277e+00 4.492145188143146e+00 9.328692514496652e+03 + 146080 9.394140042392169e-01 -5.980500558987492e+00 -6.012567318522181e+00 3.870543017006704e+00 4.686410721443521e+00 9.255631927328368e+03 + 146100 1.007636365126500e+00 -6.081441286611076e+00 -6.000896493096358e+00 3.246992156974399e+00 4.709492825602419e+00 9.219805047034175e+03 + 146120 1.010934195611452e+00 -6.084485848711070e+00 -6.006276504836556e+00 3.240557420672793e+00 4.689647576057099e+00 9.236349451632273e+03 + 146140 9.530579177429476e-01 -5.997143773545310e+00 -6.022395723529105e+00 3.703991101034936e+00 4.558990496501350e+00 9.285930150874072e+03 + 146160 9.153430128449697e-01 -5.935614127046904e+00 -6.039403185116655e+00 4.021666789973533e+00 4.425693957232191e+00 9.338408267679031e+03 + 146180 9.715258362893063e-01 -6.010076478124630e+00 -6.016760744284140e+00 3.625956441152251e+00 4.587574350477501e+00 9.268589037019037e+03 + 146200 9.912515427010384e-01 -6.030202372210554e+00 -5.980692373218643e+00 3.599761923024462e+00 4.884055998883595e+00 9.157864262854146e+03 + 146220 1.024582103101166e+00 -6.067747915930495e+00 -5.954168125094353e+00 3.358224248756162e+00 5.010416984153117e+00 9.076873524453042e+03 + 146240 9.670679323961847e-01 -5.963396194687419e+00 -6.002328294838356e+00 3.911769445813695e+00 4.688215302023986e+00 9.224167475698501e+03 + 146260 1.008773283356508e+00 -5.993052056678286e+00 -5.985069600499534e+00 3.719968805595022e+00 4.765805304254516e+00 9.171265388962431e+03 + 146280 1.027288565056898e+00 -5.947802140321048e+00 -6.015801507295537e+00 3.965727396987771e+00 4.575264508952228e+00 9.265604784411173e+03 + 146300 1.111955114151632e+00 -5.959920671568852e+00 -6.050366921944659e+00 3.891647098214544e+00 4.372290732044654e+00 9.372294528523209e+03 + 146320 1.087208159887513e+00 -5.848605863574324e+00 -6.040435353471667e+00 4.456346697323673e+00 4.354832080815507e+00 9.341605921023394e+03 + 146340 1.043880534879352e+00 -5.754364875933859e+00 -6.072309229424271e+00 4.926875901588481e+00 4.101190222116844e+00 9.440353048889740e+03 + 146360 1.169809082914887e+00 -5.930774781233576e+00 -6.016153246938061e+00 4.112759487924408e+00 4.622503125574386e+00 9.266667810748861e+03 + 146380 1.101922384045817e+00 -5.836258983292675e+00 -6.036339890320859e+00 4.507378846789016e+00 4.358483316212886e+00 9.328892319920233e+03 + 146400 1.116708983005252e+00 -5.877251382618168e+00 -6.006907448438943e+00 4.371097275739075e+00 4.626592081584846e+00 9.238199891018883e+03 + 146420 1.160910734506137e+00 -5.974314684826933e+00 -6.009129376328239e+00 3.891575052098006e+00 4.691663705941401e+00 9.245081919875582e+03 + 146440 1.079686478738224e+00 -5.901251396800552e+00 -6.009321596623297e+00 4.238402309887483e+00 4.617846498695905e+00 9.245667919054637e+03 + 146460 1.000436535070707e+00 -5.832051175285336e+00 -6.007973260775412e+00 4.533844618934726e+00 4.523672780195964e+00 9.241507304548446e+03 + 146480 1.043528295530512e+00 -5.937287004014801e+00 -5.964442604232580e+00 4.057515353812769e+00 4.901583695046736e+00 9.108179071638870e+03 + 146500 1.052968497102157e+00 -5.991292262785580e+00 -5.978799920304808e+00 3.744663598178206e+00 4.816396561886551e+00 9.152073395797621e+03 + 146520 9.450617676091623e-01 -5.866320667628278e+00 -6.044881260346232e+00 4.374563642292497e+00 4.349241086743588e+00 9.355310905864157e+03 + 146540 1.059459729669544e+00 -6.068117757063598e+00 -6.004002751691242e+00 3.325600830293661e+00 4.693759112906747e+00 9.229349639658469e+03 + 146560 9.762615968622409e-01 -5.976841463301147e+00 -6.021815879598275e+00 3.827370158705786e+00 4.569120100559249e+00 9.284153061544215e+03 + 146580 9.837622833302723e-01 -6.015081557244224e+00 -6.000876733763139e+00 3.659985856438309e+00 4.741552151056032e+00 9.219730120251721e+03 + 146600 9.895468458199043e-01 -6.047286768419053e+00 -5.980933209117491e+00 3.467008554364013e+00 4.848020960053704e+00 9.158608221394285e+03 + 146620 9.268175425018635e-01 -5.972631948408539e+00 -5.993802967006736e+00 3.904449500121281e+00 4.782882235125896e+00 9.198040363791337e+03 + 146640 9.730050360575444e-01 -6.054932920029318e+00 -5.991519495867454e+00 3.386141549431748e+00 4.750271244164841e+00 9.191037916374617e+03 + 146660 9.435965040782058e-01 -6.021032396404289e+00 -5.949270850708078e+00 3.600375730651872e+00 5.012441631102821e+00 9.061965545065597e+03 + 146680 9.069092825532131e-01 -5.968753422099710e+00 -6.001533519528506e+00 3.831560764744709e+00 4.643332372604881e+00 9.221760422436364e+03 + 146700 1.023129760213275e+00 -6.138774815565306e+00 -5.976199038212815e+00 2.906689225728219e+00 4.840224497806453e+00 9.144127640002300e+03 + 146720 9.106533745834371e-01 -5.964969595488947e+00 -6.027678269566131e+00 3.888959026707203e+00 4.528876116020059e+00 9.302208635157644e+03 + 146740 9.816642441512673e-01 -6.058059572114021e+00 -6.008261649549547e+00 3.448765028940618e+00 4.734712406509441e+00 9.242441817963208e+03 + 146760 9.602061028990557e-01 -6.009836657078118e+00 -6.030841297446315e+00 3.694795097062862e+00 4.574183201611086e+00 9.311973111244853e+03 + 146780 9.465773008191593e-01 -5.970769631690213e+00 -6.024705174694003e+00 3.890791281949823e+00 4.581085047523753e+00 9.293055208687261e+03 + 146800 1.051881201774814e+00 -6.102172420625910e+00 -5.968781686874832e+00 3.170689257803601e+00 4.936639493151633e+00 9.121459156711924e+03 + 146820 1.030034153027777e+00 -6.043764254290242e+00 -5.969213939520788e+00 3.450765145634434e+00 4.878844589664564e+00 9.122766742847803e+03 + 146840 9.578559505898195e-01 -5.907396640882239e+00 -5.982610396859833e+00 4.203198468786928e+00 4.771309442672460e+00 9.163731504778136e+03 + 146860 9.835758747559161e-01 -5.915158701652629e+00 -6.024708435846550e+00 4.089430708818883e+00 4.460379182310808e+00 9.293035843837541e+03 + 146880 1.041698229453244e+00 -5.973637069850342e+00 -5.969037742336551e+00 3.868327679966797e+00 4.894737730294616e+00 9.122227505274044e+03 + 146900 1.036591265634566e+00 -5.940698445555705e+00 -5.981523925160052e+00 4.046236107206683e+00 4.811809885595975e+00 9.160384753972750e+03 + 146920 1.137507595585855e+00 -6.068260593515021e+00 -5.980472154791829e+00 3.333383379054134e+00 4.837478179419690e+00 9.157186841484103e+03 + 146940 1.060253650914079e+00 -5.939315938293372e+00 -6.003284998534792e+00 4.033492218615823e+00 4.666171975529508e+00 9.227131020809828e+03 + 146960 1.078809901012547e+00 -5.962229592209948e+00 -5.983384166629034e+00 3.941872529699975e+00 4.820399689725773e+00 9.166109483097316e+03 + 146980 1.076939042687234e+00 -5.963376231277841e+00 -6.021608163384031e+00 3.844729617554468e+00 4.510352852038351e+00 9.283502056754358e+03 + 147000 1.065575680493418e+00 -5.957056636055171e+00 -5.988477482670197e+00 3.929533801357894e+00 4.749110437734119e+00 9.181704382120643e+03 + 147020 1.038781878793479e+00 -5.931090521878517e+00 -6.014556670254990e+00 4.016933121431184e+00 4.537657581108758e+00 9.261784148521132e+03 + 147040 1.054521931198552e+00 -5.974860904767612e+00 -6.032177421541622e+00 3.793301625074341e+00 4.464181316055677e+00 9.316115124706421e+03 + 147060 1.038106267173353e+00 -5.983094594282507e+00 -6.031167052647656e+00 3.750372570441196e+00 4.474333075319620e+00 9.312988281615584e+03 + 147080 9.994126646414436e-01 -5.965684668715010e+00 -6.050155479140535e+00 3.837214694255285e+00 4.352170228976258e+00 9.371652230757254e+03 + 147100 1.014509075177281e+00 -6.035644222920311e+00 -6.002347598644500e+00 3.488514158277843e+00 4.679708527505507e+00 9.224262476350224e+03 + 147120 9.005830134463917e-01 -5.908052361275734e+00 -6.023322909968011e+00 4.207686203989504e+00 4.545784875338691e+00 9.288758475968454e+03 + 147140 9.664849589515255e-01 -6.035920220072896e+00 -5.985951064684791e+00 3.488929921140056e+00 4.775860544080357e+00 9.173989277730780e+03 + 147160 9.833159863705071e-01 -6.077120020470039e+00 -5.993662525977967e+00 3.268260743270071e+00 4.747486591649080e+00 9.197618573484098e+03 + 147180 1.071702441569530e+00 -6.215868830488357e+00 -5.963522215591906e+00 2.507723693578843e+00 4.956737006826712e+00 9.105428332483261e+03 + 147200 9.063400326202361e-01 -5.972899672621519e+00 -5.979447507094841e+00 3.892546192647443e+00 4.854947513827520e+00 9.154057849802955e+03 + 147220 9.238033691271338e-01 -5.994680416787252e+00 -5.973492394366275e+00 3.736256850303139e+00 4.857921753880263e+00 9.135848601139942e+03 + 147240 9.849302506238601e-01 -6.075127673092194e+00 -6.019546359866382e+00 3.248494218628837e+00 4.567650720351875e+00 9.277155519780332e+03 + 147260 9.900832801166953e-01 -6.073425549873228e+00 -5.999914128183327e+00 3.254102506932759e+00 4.676216466131912e+00 9.216800582905278e+03 + 147280 9.358519618907827e-01 -5.981461744723795e+00 -6.009364514814460e+00 3.813151173951300e+00 4.652929150150985e+00 9.245796517852639e+03 + 147300 9.620424738932651e-01 -6.005351367794629e+00 -5.958462514590823e+00 3.720610079839340e+00 4.989853130962174e+00 9.089975349374659e+03 + 147320 9.517193564429207e-01 -5.969286434528465e+00 -6.019167643720662e+00 3.843229661656856e+00 4.556804039383088e+00 9.275993883675023e+03 + 147340 9.761731745966711e-01 -5.982982948636804e+00 -6.034665513054563e+00 3.764026743959082e+00 4.467257461221319e+00 9.323774966314444e+03 + 147360 9.620806314382306e-01 -5.940894605468012e+00 -6.018795472709902e+00 4.003762599551262e+00 4.556443764728082e+00 9.274835982946093e+03 + 147380 1.053950414784084e+00 -6.055378410997507e+00 -5.998590259523348e+00 3.405511401523996e+00 4.731597755226661e+00 9.212730034656228e+03 + 147400 9.746849345650567e-01 -5.917286345482706e+00 -6.023482603312237e+00 4.133236107743421e+00 4.523440761468467e+00 9.289277242842885e+03 + 147420 1.002034272145176e+00 -5.938845063052676e+00 -6.010563860946154e+00 4.007221108667495e+00 4.595400672715038e+00 9.249519886817592e+03 + 147440 1.063516812609236e+00 -6.011986556318882e+00 -6.009990314305742e+00 3.609276332790502e+00 4.620739063347401e+00 9.247748070705702e+03 + 147460 1.046558709219932e+00 -5.973582295562760e+00 -5.992184964819701e+00 3.893349586993884e+00 4.786530181366762e+00 9.193069295768459e+03 + 147480 1.003200678486407e+00 -5.900412400235664e+00 -6.036925115245118e+00 4.233603799659062e+00 4.449726664800409e+00 9.330755391530533e+03 + 147500 1.033195957798800e+00 -5.941454520431762e+00 -6.008884689188932e+00 4.020420489456436e+00 4.633226025667877e+00 9.244332840296043e+03 + 147520 1.064224873673664e+00 -5.988247667743936e+00 -5.941558246238659e+00 3.701368962373131e+00 4.969466845821056e+00 9.038510936037195e+03 + 147540 9.900921216704990e-01 -5.879983190819305e+00 -6.012190578809145e+00 4.329706245102539e+00 4.570550964237704e+00 9.254477856492844e+03 + 147560 1.027615365927224e+00 -5.943513842298212e+00 -5.993355259057427e+00 3.940937225420726e+00 4.654740097454996e+00 9.196638944863356e+03 + 147580 1.022876803181970e+00 -5.950417256321040e+00 -5.988910148648042e+00 3.957827220099767e+00 4.736795075602284e+00 9.183013458760865e+03 + 147600 1.021630542410002e+00 -5.970076544807824e+00 -6.004554534990737e+00 3.839002992449868e+00 4.641025037367847e+00 9.231042900396122e+03 + 147620 1.013971619028438e+00 -5.992951406702041e+00 -6.021127145486098e+00 3.724278026759573e+00 4.562488574480028e+00 9.282000749989444e+03 + 147640 9.973840496026797e-01 -6.013352510834546e+00 -6.013440113448819e+00 3.614213577279701e+00 4.613710549512083e+00 9.258335593894883e+03 + 147660 9.659350174744817e-01 -6.013427311245348e+00 -6.010615253451397e+00 3.604307670926669e+00 4.620454941944070e+00 9.249667257046320e+03 + 147680 9.326462148087226e-01 -6.006166824762192e+00 -6.007304268134179e+00 3.656508337030825e+00 4.649976961170085e+00 9.239487153383199e+03 + 147700 8.762308564632937e-01 -5.952200555265967e+00 -5.997181539113994e+00 3.917996625372281e+00 4.659708855332154e+00 9.208391797685956e+03 + 147720 9.631774218283768e-01 -6.098232115861881e+00 -5.955396384148790e+00 3.206463354235003e+00 5.026648229489616e+00 9.080612763524956e+03 + 147740 1.006732566218577e+00 -6.169690765988399e+00 -5.966564313123426e+00 2.791608017057621e+00 4.957991543125289e+00 9.114692745410408e+03 + 147760 9.582760488326885e-01 -6.098627338073102e+00 -5.977817635701862e+00 3.151518502508643e+00 4.845226508765329e+00 9.149088868060491e+03 + 147780 9.124698496834842e-01 -6.026244475273343e+00 -5.996217592543302e+00 3.511200658943180e+00 4.683619666224157e+00 9.205457175119485e+03 + 147800 9.619191808835996e-01 -6.088770859700382e+00 -5.980713946478601e+00 3.200835481023085e+00 4.821314998495833e+00 9.157946998757323e+03 + 147820 9.643448144814772e-01 -6.075806403219199e+00 -5.970229967586068e+00 3.316718521734194e+00 4.922954753040242e+00 9.125889863179658e+03 + 147840 9.945182932585239e-01 -6.098257931198596e+00 -5.978582328889623e+00 3.146310545172474e+00 4.833506373370197e+00 9.151440790382949e+03 + 147860 9.659590021196989e-01 -6.029853890456608e+00 -6.023860722850536e+00 3.553677313261809e+00 4.588091009095567e+00 9.290448549146882e+03 + 147880 1.008633885569229e+00 -6.067012649180972e+00 -5.992863839636564e+00 3.380044035580053e+00 4.805817974475240e+00 9.195178686062993e+03 + 147900 9.739620046932055e-01 -5.990595908688277e+00 -6.006056025127406e+00 3.772206202857211e+00 4.683431821818449e+00 9.235654066938181e+03 + 147920 9.549093951965635e-01 -5.937644596725423e+00 -6.002175842041855e+00 4.041788017124788e+00 4.671239620339900e+00 9.223738745119814e+03 + 147940 1.102483691256749e+00 -6.134570095467152e+00 -5.971418594391340e+00 3.015390527356396e+00 4.952231694146906e+00 9.129529188449993e+03 + 147960 1.012972697169058e+00 -5.986470560179397e+00 -6.019681031939598e+00 3.776799564435340e+00 4.586099896284371e+00 9.277571518651042e+03 + 147980 9.749425719556081e-01 -5.921756953769655e+00 -6.011932315107870e+00 4.098352750917704e+00 4.580551871521605e+00 9.253713896591165e+03 + 148000 1.070109286821341e+00 -6.056461821687487e+00 -6.004682316373098e+00 3.387248628629103e+00 4.684574560996876e+00 9.231433618198329e+03 + 148020 9.902638893803355e-01 -5.934004418055082e+00 -6.055515975046729e+00 3.999620939125487e+00 4.301882775026778e+00 9.388262209456941e+03 + 148040 9.897615351195371e-01 -5.935095973336256e+00 -6.032618998503080e+00 4.060936000445651e+00 4.500943698298376e+00 9.317412069560112e+03 + 148060 1.085238530396146e+00 -6.080636314945125e+00 -5.973808091320646e+00 3.317256016635258e+00 4.930680208301196e+00 9.136809844629766e+03 + 148080 1.044579815054365e+00 -6.023698084897552e+00 -6.016759152074973e+00 3.546902630688328e+00 4.586747056751956e+00 9.268580222813556e+03 + 148100 9.777590692165292e-01 -5.931180533100734e+00 -6.005818790237676e+00 4.076376993264252e+00 4.647792570550965e+00 9.234911934408750e+03 + 148120 1.017846441823961e+00 -5.995942894019807e+00 -5.974599481775986e+00 3.712939888816869e+00 4.835497064803263e+00 9.139252034248559e+03 + 148140 9.687294014955719e-01 -5.927740579051606e+00 -6.004043646354701e+00 4.091859878097296e+00 4.653715857781419e+00 9.229462204884001e+03 + 148160 9.568014478491175e-01 -5.915720381028480e+00 -6.031999256519079e+00 4.133053586156850e+00 4.465362288992003e+00 9.315513469276739e+03 + 148180 1.040862425197149e+00 -6.044900724036706e+00 -5.967284382335305e+00 3.485574211159155e+00 4.931259256298662e+00 9.116904444728318e+03 + 148200 1.093514159926527e+00 -6.127858350442940e+00 -6.021650884542738e+00 2.977264262886303e+00 4.587123967637496e+00 9.283648161511939e+03 + 148220 9.929950509154217e-01 -5.988609665090152e+00 -6.010066238327926e+00 3.740932442519514e+00 4.617725478594238e+00 9.247974064104626e+03 + 148240 9.666243152533401e-01 -5.959223132149596e+00 -5.982976106263047e+00 3.951427961839134e+00 4.815034708718830e+00 9.164839325451787e+03 + 148260 1.002547017168844e+00 -6.019288246549095e+00 -5.993514408845407e+00 3.576722223395052e+00 4.724719587978129e+00 9.197137975280353e+03 + 148280 9.976035775731529e-01 -6.020089016037030e+00 -6.006557711453492e+00 3.634055163049969e+00 4.711754007931258e+00 9.237197792729736e+03 + 148300 9.540656092471164e-01 -5.965740245904180e+00 -6.034828531490184e+00 3.841916967584449e+00 4.445201340371968e+00 9.324276101881456e+03 + 148320 9.969973121791984e-01 -6.042946331290940e+00 -5.965635073050022e+00 3.459791514901797e+00 4.903724723599694e+00 9.111821305377945e+03 + 148340 9.175811620376667e-01 -5.936979560581555e+00 -5.987864776537041e+00 4.026215869347523e+00 4.734025084869402e+00 9.179822746833552e+03 + 148360 1.025532050027586e+00 -6.112464981045278e+00 -5.982841078788863e+00 3.134623639762816e+00 4.878944145753195e+00 9.164432509077413e+03 + 148380 9.880441680680256e-01 -6.078765111875846e+00 -5.988947983625831e+00 3.285995029152028e+00 4.801738878719291e+00 9.183153073458876e+03 + 148400 9.352657659337830e-01 -6.026375731617719e+00 -6.019747673759342e+00 3.511084420148667e+00 4.549143754060107e+00 9.277771379252350e+03 + 148420 1.013464001358629e+00 -6.171507172323161e+00 -5.960602172133965e+00 2.811034647558906e+00 5.022083796088568e+00 9.096513191541651e+03 + 148440 8.658300657255028e-01 -5.978487883916946e+00 -5.984699938558352e+00 3.860848085377656e+00 4.825177506314352e+00 9.170132059299083e+03 + 148460 8.880314509268985e-01 -6.028685999159032e+00 -5.944306759751037e+00 3.577305355727041e+00 5.061824006052845e+00 9.046871231343488e+03 + 148480 9.499737271605003e-01 -6.127431368286963e+00 -5.971024592361706e+00 3.012914314268948e+00 4.911026225502125e+00 9.128325516498280e+03 + 148500 9.200298726309915e-01 -6.082194985358914e+00 -6.012535216179670e+00 3.214402611523302e+00 4.614399785964961e+00 9.255582319247356e+03 + 148520 9.095102014506612e-01 -6.058969412480756e+00 -5.975625303661701e+00 3.359088080670662e+00 4.837662850968830e+00 9.142397685464090e+03 + 148540 9.319930251231311e-01 -6.076202214124780e+00 -5.999378835731135e+00 3.264479304566550e+00 4.705611031682246e+00 9.215142340782442e+03 + 148560 9.185771989205889e-01 -6.030133724783111e+00 -5.990288760691397e+00 3.488318908989651e+00 4.717114858792534e+00 9.187262146434723e+03 + 148580 9.933580252418474e-01 -6.107932558055012e+00 -5.958759244047257e+00 3.104452653946216e+00 4.961028907474484e+00 9.090881840822160e+03 + 148600 9.652521055641422e-01 -6.025656040751643e+00 -6.003783164317905e+00 3.505971389677570e+00 4.631568830976778e+00 9.228652813772884e+03 + 148620 9.646374783845550e-01 -5.985273385677446e+00 -6.016797800565131e+00 3.765343663714059e+00 4.584325595041532e+00 9.268684762820349e+03 + 148640 1.001975721026050e+00 -6.006255588601622e+00 -6.043902065070998e+00 3.607918458961228e+00 4.391746565300664e+00 9.352320249103474e+03 + 148660 9.782465868450666e-01 -5.946126578793100e+00 -6.012126025975050e+00 4.021860133346900e+00 4.642881094246701e+00 9.254300808336084e+03 + 148680 1.022760238256472e+00 -5.992994312313469e+00 -6.006713354730621e+00 3.703611086925390e+00 4.624834222351147e+00 9.237673139326453e+03 + 148700 1.034743026161218e+00 -5.996271033619035e+00 -6.017194727830335e+00 3.699215474075153e+00 4.579068383982657e+00 9.269890653597382e+03 + 148720 9.387954426731207e-01 -5.843726190093903e+00 -6.048000820985521e+00 4.512763240338693e+00 4.339786698362054e+00 9.364984567096795e+03 + 148740 9.677469747871864e-01 -5.879972586521713e+00 -6.060071170627753e+00 4.335937562442474e+00 4.301783622339769e+00 9.402358684882523e+03 + 148760 9.971600232127474e-01 -5.920728958438067e+00 -6.043774029824622e+00 4.109844174453989e+00 4.403300333389136e+00 9.351904209580603e+03 + 148780 1.047498724932693e+00 -5.997544673534498e+00 -6.006933432583651e+00 3.679303634103386e+00 4.625391926737386e+00 9.238340299851656e+03 + 148800 9.916242281609570e-01 -5.919892821259730e+00 -6.011215512767518e+00 4.106615615668069e+00 4.582226588889511e+00 9.251487443974584e+03 + 148820 1.062032548363734e+00 -6.030909085956646e+00 -5.942137054137520e+00 3.589417414724179e+00 5.099160158857122e+00 9.040259916154726e+03 + 148840 9.889760202788839e-01 -5.930878951691304e+00 -6.052217116120625e+00 4.065889967477486e+00 4.369147450304069e+00 9.378030385070228e+03 + 148860 1.071976316426278e+00 -6.065252806374444e+00 -6.052835209810787e+00 3.340097495650378e+00 4.411401256735749e+00 9.379960253764222e+03 + 148880 9.882297925071922e-01 -5.963903461326367e+00 -6.013592048739210e+00 3.894300214978604e+00 4.608980656770004e+00 9.258818132621109e+03 + 148900 9.871604654665437e-01 -5.986731541088610e+00 -5.989215707812895e+00 3.825310274147645e+00 4.811045804393244e+00 9.183966735012884e+03 + 148920 9.777326463762732e-01 -6.003538379710181e+00 -6.023180842145290e+00 3.638972515173342e+00 4.526182456209707e+00 9.288348106427902e+03 + 148940 9.495409983705687e-01 -5.994488103511454e+00 -6.014997420916482e+00 3.726118397581784e+00 4.608350723235501e+00 9.263135443837726e+03 + 148960 9.319298647783092e-01 -6.002202821176582e+00 -6.001387315318129e+00 3.654518268516340e+00 4.659201029354701e+00 9.221308722505426e+03 + 148980 9.702531358586300e-01 -6.091171752653831e+00 -5.990256878513732e+00 3.205448550181603e+00 4.784917374020354e+00 9.187166954510483e+03 + 149000 9.555480309803654e-01 -6.100320506180590e+00 -6.003177801217802e+00 3.162452934140269e+00 4.720261378821602e+00 9.226823093561648e+03 + 149020 9.591630989133524e-01 -6.132941951060305e+00 -5.969454774439789e+00 2.948138390893425e+00 4.886907058607241e+00 9.123537672225229e+03 + 149040 9.140790069492226e-01 -6.083851962012092e+00 -5.979621453797276e+00 3.159510866347591e+00 4.758018574136085e+00 9.154615912074874e+03 + 149060 9.117785071603963e-01 -6.089485847995926e+00 -5.972103891576873e+00 3.198406760948568e+00 4.872432119505814e+00 9.131607181773656e+03 + 149080 8.583247656209404e-01 -6.010624228428672e+00 -5.966538034642333e+00 3.640939604770538e+00 4.894089351808131e+00 9.114589635427281e+03 + 149100 9.501773447563995e-01 -6.135318296125980e+00 -5.930370335609149e+00 3.005573517974896e+00 5.182416422856931e+00 9.004543364281204e+03 + 149120 9.264847934953789e-01 -6.072462028013182e+00 -5.978967278175997e+00 3.336631522709883e+00 4.873492844540779e+00 9.152596373130513e+03 + 149140 9.355808766771774e-01 -6.040604153960872e+00 -6.032395586041773e+00 3.465258771190565e+00 4.512393638453808e+00 9.316779311326984e+03 + 149160 9.884416968087282e-01 -6.055404590142630e+00 -6.005520307828047e+00 3.396294796824091e+00 4.682738065442166e+00 9.234011761123716e+03 + 149180 9.867515331203045e-01 -5.990610590998948e+00 -5.977677466831366e+00 3.801426784502123e+00 4.875690784866874e+00 9.148650647885794e+03 + 149200 1.020920510450418e+00 -5.999172827693941e+00 -6.013765568103580e+00 3.690198444107339e+00 4.606404670455915e+00 9.259346967431886e+03 + 149220 1.036985912253243e+00 -6.001431769816188e+00 -5.999273197546904e+00 3.706843581318633e+00 4.719238437326844e+00 9.214827103708058e+03 + 149240 1.001393952414178e+00 -5.937612394299311e+00 -6.085626569206395e+00 3.979500050982625e+00 4.129579753546606e+00 9.481763069203724e+03 + 149260 1.038083052648653e+00 -5.988403336767922e+00 -6.013168730324876e+00 3.742238449915355e+00 4.600031727679052e+00 9.257517256108127e+03 + 149280 1.037310504143736e+00 -5.986417597222532e+00 -6.031912138781911e+00 3.731747438689307e+00 4.470510740797804e+00 9.315272311562769e+03 + 149300 1.041967014936237e+00 -5.998017109849537e+00 -6.012996483587679e+00 3.660581895853194e+00 4.574568013798186e+00 9.256970636369058e+03 + 149320 9.908451584400902e-01 -5.929769545863131e+00 -6.007679407669706e+00 4.027420204523898e+00 4.580049721518400e+00 9.240626411628657e+03 + 149340 1.001830568977747e+00 -5.955565987267375e+00 -6.002386047659849e+00 3.928199807384543e+00 4.659351775230032e+00 9.224378226870338e+03 + 149360 1.063645601089322e+00 -6.057813144452950e+00 -5.978726939641605e+00 3.409230508741682e+00 4.863355735319066e+00 9.151850529137759e+03 + 149380 9.833041858305926e-01 -5.950701212686327e+00 -6.018840682235790e+00 3.957597870671585e+00 4.566330491969732e+00 9.274981058467969e+03 + 149400 1.078167837241122e+00 -6.106101913856929e+00 -5.992282548280976e+00 3.145612108179131e+00 4.799180518806155e+00 9.193382353133262e+03 + 149420 9.755743138805277e-01 -5.971023819325926e+00 -6.039032650222440e+00 3.829550099223270e+00 4.439032867882920e+00 9.337265770922233e+03 + 149440 1.014931793493759e+00 -6.049210875425539e+00 -6.011248871591116e+00 3.445051931484599e+00 4.663035632102963e+00 9.251618942493558e+03 + 149460 9.774026326215259e-01 -6.014053303605452e+00 -5.999158755489930e+00 3.654169457951653e+00 4.739696258154851e+00 9.214467735918312e+03 + 149480 9.847264595742603e-01 -6.043244683192965e+00 -5.981946429175494e+00 3.532139633569160e+00 4.884123694011631e+00 9.161709560640547e+03 + 149500 9.632228593569714e-01 -6.027641463495756e+00 -5.987627714814349e+00 3.537491705154677e+00 4.767256842190916e+00 9.179110272909693e+03 + 149520 9.915909337872482e-01 -6.083030043256894e+00 -5.951728909570742e+00 3.325629221041859e+00 5.079580649452518e+00 9.069443639713385e+03 + 149540 9.725159434259926e-01 -6.063826628035661e+00 -5.979826651131965e+00 3.383129321255899e+00 4.865470187591337e+00 9.155238416776147e+03 + 149560 9.717511553640832e-01 -6.068794314393019e+00 -5.995228782927384e+00 3.316295938762303e+00 4.738720604667180e+00 9.202414602310961e+03 + 149580 9.994400049201998e-01 -6.112574230212691e+00 -5.957922970474870e+00 3.142641462993562e+00 5.030672928613227e+00 9.088330817529939e+03 + 149600 9.513113547820288e-01 -6.037909897300880e+00 -5.964561762916744e+00 3.542207855021135e+00 4.963384193241955e+00 9.108579069419260e+03 + 149620 9.375791821707874e-01 -6.008700076293080e+00 -5.983504837305659e+00 3.721800116843144e+00 4.866475078059546e+00 9.166455537760432e+03 + 149640 8.888240276595070e-01 -5.917267942746625e+00 -6.005005717301918e+00 4.088296276718696e+00 4.584492397845471e+00 9.232410213825611e+03 + 149660 1.009800773049985e+00 -6.064530962323119e+00 -6.003779253352840e+00 3.337498257860947e+00 4.686343972064872e+00 9.228673241704328e+03 + 149680 9.193357898233663e-01 -5.891054566751519e+00 -6.087553056543850e+00 4.245092694024150e+00 4.116767957593565e+00 9.487783593235583e+03 + 149700 9.787528916850636e-01 -5.936026885089722e+00 -6.049497378526199e+00 4.044486983728270e+00 4.392921850913903e+00 9.369628379168274e+03 + 149720 1.072466895120564e+00 -6.033003489680712e+00 -6.005129751853829e+00 3.493390171887607e+00 4.653445487936553e+00 9.232798612643783e+03 + 149740 1.038466236429112e+00 -5.949317558955997e+00 -6.024779434142694e+00 3.926345429696016e+00 4.493031664686553e+00 9.293275561486022e+03 + 149760 1.036670938581995e+00 -5.924329651562857e+00 -6.002892079101688e+00 4.139888742640146e+00 4.688771126215812e+00 9.225881688195797e+03 + 149780 9.806966176860448e-01 -5.827433295578679e+00 -5.994457425476673e+00 4.670729796033187e+00 4.711651395258335e+00 9.199998395170323e+03 + 149800 1.057798340113215e+00 -5.931999799765908e+00 -6.007535645936189e+00 4.024585721051024e+00 4.590847203206855e+00 9.240198847355317e+03 + 149820 1.073693507750809e+00 -5.953218678511425e+00 -6.030547813270803e+00 3.957610270984331e+00 4.513574412551055e+00 9.311058448744236e+03 + 149840 1.025149097673004e+00 -5.888863406411859e+00 -6.017017231332128e+00 4.271739025066626e+00 4.535859930634131e+00 9.269363188716614e+03 + 149860 1.109093960834532e+00 -6.025474583973589e+00 -5.969561222567913e+00 3.638966087782962e+00 4.960029261539067e+00 9.123836889986344e+03 + 149880 1.042197706272741e+00 -5.943459064003320e+00 -6.000979797891327e+00 4.008828459277579e+00 4.678535503987839e+00 9.220061135477297e+03 + 149900 1.005023587935166e+00 -5.909418153165021e+00 -6.012822217676428e+00 4.189358427481056e+00 4.595596287329291e+00 9.256430575993565e+03 + 149920 1.023595695931044e+00 -5.958653209371946e+00 -5.986424501881814e+00 3.947681562046709e+00 4.788214502861420e+00 9.175419226850287e+03 + 149940 1.037728898461327e+00 -6.001910845855869e+00 -5.964693530483965e+00 3.674134047309070e+00 4.887841631535485e+00 9.108977499518473e+03 + 149960 1.036291945791406e+00 -6.018534218417487e+00 -5.970547045372105e+00 3.598908720968963e+00 4.874458494586575e+00 9.126824168694717e+03 + 149980 9.749912919555134e-01 -5.944265280159549e+00 -5.981527251371983e+00 4.035816310930693e+00 4.821852305957482e+00 9.160422363548916e+03 + 150000 1.000746349859700e+00 -5.995105229027912e+00 -5.990612669802424e+00 3.751209043129280e+00 4.777006013423326e+00 9.188260787544164e+03 + 150020 1.009603466233564e+00 -6.018629198197260e+00 -6.036802247050409e+00 3.542910449175948e+00 4.438557990390946e+00 9.330382329884915e+03 + 150040 9.836447938387544e-01 -5.989361828706469e+00 -6.033672867363838e+00 3.721827478535733e+00 4.467386637454053e+00 9.320703486986977e+03 + 150060 9.682959386008054e-01 -5.972433656819764e+00 -6.017577125455869e+00 3.808675339552505e+00 4.549454556714792e+00 9.271096659975286e+03 + 150080 9.913470011297861e-01 -6.010796410608586e+00 -5.999179344801330e+00 3.657421045325327e+00 4.724128034925714e+00 9.214521491659189e+03 + 150100 1.002680263297291e+00 -6.029727691708482e+00 -5.982564618148485e+00 3.553567764419905e+00 4.824385431263449e+00 9.163604274640982e+03 + 150120 9.885494621538494e-01 -6.008486574460028e+00 -5.988226887899067e+00 3.665169241879245e+00 4.781503497288641e+00 9.180950021348504e+03 + 150140 9.854882495488646e-01 -6.003111420752450e+00 -6.004734622407958e+00 3.673081871635125e+00 4.663761196539555e+00 9.231582999484290e+03 + 150160 1.001620122669466e+00 -6.024787143490674e+00 -5.966297787391675e+00 3.565151430961454e+00 4.901006364880510e+00 9.113887872352245e+03 + 150180 1.006850765052086e+00 -6.029272273626804e+00 -6.002492806843060e+00 3.568478557346657e+00 4.722250399728006e+00 9.224672881719383e+03 + 150200 1.069526029800845e+00 -6.118678166112872e+00 -5.970627143627156e+00 3.088102318475911e+00 4.938234200410579e+00 9.127100687385555e+03 + 150220 9.781274685791935e-01 -5.979278314600574e+00 -5.979121257550968e+00 3.829296643927057e+00 4.830198489810392e+00 9.153053027941969e+03 + 150240 9.798517785923420e-01 -5.977052730942283e+00 -6.015042033294630e+00 3.861029414290817e+00 4.642888961358103e+00 9.263278214659425e+03 + 150260 9.913663567693438e-01 -5.990582008605550e+00 -5.975565499295971e+00 3.781550438150769e+00 4.867777558403677e+00 9.142185886324654e+03 + 150280 1.012050797497780e+00 -6.015109069964392e+00 -6.021130178125844e+00 3.638982806793945e+00 4.604408671967409e+00 9.282021712660486e+03 + 150300 1.029540921495488e+00 -6.034392888289961e+00 -5.986448426344984e+00 3.559541937392017e+00 4.834846457261585e+00 9.175491254244005e+03 + 150320 9.978671226835317e-01 -5.982908181390681e+00 -5.972123789735834e+00 3.803116241090053e+00 4.865041886851404e+00 9.131652337420877e+03 + 150340 9.381223577589265e-01 -5.885865212881697e+00 -6.020214775705394e+00 4.319582601652487e+00 4.548126621391163e+00 9.279175175170591e+03 + 150360 9.352425656863960e-01 -5.868417254345248e+00 -6.002190784166351e+00 4.449764373080928e+00 4.681616063461318e+00 9.223755515455765e+03 + 150380 1.057054880633936e+00 -6.027909476075520e+00 -5.980814780400161e+00 3.535939825062264e+00 4.806364855510777e+00 9.158244685302805e+03 + 150400 1.001193349014441e+00 -5.916284104545692e+00 -6.063316047368043e+00 4.057038005090810e+00 4.212757836285252e+00 9.412459852805780e+03 + 150420 1.103224072128724e+00 -6.030423665264951e+00 -6.025890324804283e+00 3.542312920547334e+00 4.568344063004659e+00 9.296699708782435e+03 + 150440 1.068042584619465e+00 -5.940288506571102e+00 -6.023882524146398e+00 4.054847110345259e+00 4.574837325295502e+00 9.290482814981440e+03 + 150460 1.028568924415552e+00 -5.849764074165900e+00 -6.017967045616854e+00 4.491420788369796e+00 4.525573296972710e+00 9.272274902596249e+03 + 150480 1.084235660274938e+00 -5.905153815394046e+00 -5.955591223289929e+00 4.211413696916372e+00 4.921794295614568e+00 9.081206241346359e+03 + 150500 1.094939847214556e+00 -5.897740067211156e+00 -5.971194970466074e+00 4.274782874112671e+00 4.852993452513390e+00 9.128806988302778e+03 + 150520 1.060008473138131e+00 -5.829648248098029e+00 -6.059722497898953e+00 4.625197545053721e+00 4.304075598821727e+00 9.401288103742056e+03 + 150540 1.136285198194765e+00 -5.941342614665860e+00 -6.035066194293719e+00 4.009425257606282e+00 4.471249959706038e+00 9.325021519130018e+03 + 150560 1.046491546269421e+00 -5.821540823654393e+00 -6.019268157367252e+00 4.673651547476949e+00 4.538270599091711e+00 9.276288455753749e+03 + 150580 1.092924541058410e+00 -5.916316963423075e+00 -6.020332770608984e+00 4.081090575929458e+00 4.483815714673825e+00 9.279564841650561e+03 + 150600 1.077246319718537e+00 -5.930027000145854e+00 -6.040420973581192e+00 4.070501726875413e+00 4.436602447997526e+00 9.341555576119184e+03 + 150620 1.081387906507317e+00 -5.987286941151554e+00 -6.032736518740514e+00 3.737841324369370e+00 4.476862816554158e+00 9.317815934375285e+03 + 150640 1.023219331424679e+00 -5.951808265275351e+00 -6.014570848949219e+00 3.954020418633097e+00 4.593627950699307e+00 9.261829989445889e+03 + 150660 1.014746412120589e+00 -5.978792372843383e+00 -6.013589318559614e+00 3.795706367186674e+00 4.595896920074132e+00 9.258799497109085e+03 + 150680 1.017859844087429e+00 -6.011506238431652e+00 -5.989162073297894e+00 3.618121464770067e+00 4.746425118716484e+00 9.183805419742781e+03 + 150700 1.060636454275692e+00 -6.094071834431030e+00 -6.021455591352630e+00 3.152929558368030e+00 4.569903263451500e+00 9.283021814229569e+03 + 150720 9.821993193527552e-01 -5.992657394375923e+00 -5.994080561695123e+00 3.744938196799296e+00 4.736766149818022e+00 9.198891160476036e+03 + 150740 9.635046167031955e-01 -5.974920530622235e+00 -6.024096479542361e+00 3.823787941086658e+00 4.541412032433788e+00 9.291175671679908e+03 + 150760 1.042071127438678e+00 -6.098107566615688e+00 -6.016159517634082e+00 3.203109982586342e+00 4.673668361258318e+00 9.266728194264100e+03 + 150780 1.011272806120310e+00 -6.060286492676744e+00 -6.006288543062744e+00 3.399615054123844e+00 4.709679636963134e+00 9.236370023235317e+03 + 150800 9.555380627667490e-01 -5.984971494940432e+00 -5.980547607617535e+00 3.772756442785968e+00 4.798159088388392e+00 9.157430516894054e+03 + 150820 9.880269080683777e-01 -6.037741707127041e+00 -5.985799948641088e+00 3.447923292194662e+00 4.746180907382150e+00 9.173472128589383e+03 + 150840 9.148411601213425e-01 -5.929302776842778e+00 -6.016592279999100e+00 4.025868009781565e+00 4.524638174651007e+00 9.268053518418810e+03 + 150860 9.321045864257766e-01 -5.952194765918282e+00 -6.011620012060129e+00 3.939221379425699e+00 4.597992420052098e+00 9.252745622296132e+03 + 150880 9.728569281342325e-01 -6.006241222399943e+00 -5.986137395386181e+00 3.704225050593066e+00 4.819664336363266e+00 9.174531479800720e+03 + 150900 9.893637918491844e-01 -6.019609921429345e+00 -5.955452140312008e+00 3.590855052966243e+00 4.959258960526535e+00 9.080794259479362e+03 + 150920 1.008402946986077e+00 -6.030958457477076e+00 -5.995343764100028e+00 3.546702795087030e+00 4.751207875814027e+00 9.202760372928915e+03 + 150940 1.022731407626673e+00 -6.032584004146097e+00 -5.978275517940849e+00 3.506725739959434e+00 4.818573471961047e+00 9.150501377640547e+03 + 150960 1.021737826429853e+00 -6.009138179770336e+00 -5.998419615855447e+00 3.650294408842746e+00 4.711842061534446e+00 9.212190929214590e+03 + 150980 9.855800317423309e-01 -5.928319463220397e+00 -6.039809292605836e+00 4.103228238858790e+00 4.463036385532257e+00 9.339661018993216e+03 + 151000 1.050683322057888e+00 -5.995094499545748e+00 -6.017637894544511e+00 3.718395229882715e+00 4.588947567220716e+00 9.271282799102430e+03 + 151020 1.039756909373752e+00 -5.950449733795551e+00 -6.041610032516839e+00 3.953006807920958e+00 4.429550265652687e+00 9.345226937602096e+03 + 151040 1.004350151788975e+00 -5.870714517990969e+00 -6.071100218273487e+00 4.374976780474732e+00 4.224331079865612e+00 9.436603161260675e+03 + 151060 1.035419117880078e+00 -5.895318297519967e+00 -6.031860348723509e+00 4.238822721477089e+00 4.454777133652220e+00 9.315085216248077e+03 + 151080 1.013239379056700e+00 -5.845526081629730e+00 -6.020885361710429e+00 4.562613153395092e+00 4.555673030410825e+00 9.281248897543073e+03 + 151100 1.089987410997262e+00 -5.945447472461987e+00 -6.040801766408169e+00 3.921136500382726e+00 4.373597388514450e+00 9.342736046459726e+03 + 151120 1.046933333672284e+00 -5.876016179774455e+00 -6.016227262640525e+00 4.413409645981955e+00 4.608295910570028e+00 9.266894558813861e+03 + 151140 9.997341997972827e-01 -5.809299877916972e+00 -6.037906275497038e+00 4.728736593388832e+00 4.416043281758401e+00 9.333752132077156e+03 + 151160 1.054316638405036e+00 -5.901428653358761e+00 -6.037300865957439e+00 4.232211390203929e+00 4.452012119305372e+00 9.331882616571107e+03 + 151180 1.089892910539441e+00 -5.980809869769407e+00 -6.026353267570629e+00 3.875352355195365e+00 4.613835117202721e+00 9.298120899873840e+03 + 151200 1.111558855991609e+00 -6.061577603584464e+00 -5.979556420188363e+00 3.395930232750122e+00 4.866908560547642e+00 9.154412026811136e+03 + 151220 1.038555593839252e+00 -6.013742703627779e+00 -6.018848756443674e+00 3.651552032497980e+00 4.622232287069993e+00 9.275003443206826e+03 + 151240 9.537137507573855e-01 -5.945284433539432e+00 -6.030055523776670e+00 3.972891672558619e+00 4.486122954132580e+00 9.309532999795378e+03 + 151260 9.608485051562297e-01 -5.993885626088748e+00 -5.943001539665609e+00 3.740501935153751e+00 5.032686233682341e+00 9.042909555079072e+03 + 151280 9.885008514243666e-01 -6.057868271828751e+00 -5.972277873604152e+00 3.395122078017342e+00 4.886595389694306e+00 9.132140561423039e+03 + 151300 1.022368306136238e+00 -6.124591808290953e+00 -5.966443700180272e+00 3.056367475744671e+00 4.964478385856838e+00 9.114332302103292e+03 + 151320 9.277085231573764e-01 -5.995926366840009e+00 -5.955245322107059e+00 3.750064700879829e+00 4.983661555107751e+00 9.080166409642865e+03 + 151340 9.080652603581796e-01 -5.970086408282470e+00 -6.001645538076616e+00 3.856741655205158e+00 4.675524248167622e+00 9.222076994487079e+03 + 151360 9.686739199831036e-01 -6.057474377292611e+00 -5.985852268852433e+00 3.385588171691384e+00 4.796853401840345e+00 9.173653816994352e+03 + 151380 9.498473788330186e-01 -6.023202979297734e+00 -5.941977970994039e+00 3.626665844597869e+00 5.093072411807098e+00 9.039764843709552e+03 + 151400 8.855328462794647e-01 -5.913053894147227e+00 -6.006844887595846e+00 4.121425079999998e+00 4.582862681508700e+00 9.238051998011737e+03 + 151420 1.042985979738206e+00 -6.123439052208607e+00 -5.984627929134223e+00 3.037999781587738e+00 4.835074731232725e+00 9.169953202528999e+03 + 151440 1.029442640730459e+00 -6.079459701929698e+00 -5.998923613769241e+00 3.263824303145713e+00 4.726274984282420e+00 9.213764793352764e+03 + 151460 9.508834342594117e-01 -5.942930283648078e+00 -6.005044776252562e+00 3.924978776569339e+00 4.568307747847728e+00 9.232530797675730e+03 + 151480 9.573613764998928e-01 -5.930364706034017e+00 -5.992060578919617e+00 4.067218508461268e+00 4.712951258946686e+00 9.192688381108583e+03 + 151500 1.050669843975219e+00 -6.043460816906126e+00 -5.989097317499439e+00 3.436287346052890e+00 4.748450972370430e+00 9.183582736164168e+03 + 151520 9.754121981980741e-01 -5.905724162552630e+00 -5.960108389391514e+00 4.235842388922688e+00 4.923559742481914e+00 9.094966612387749e+03 + 151540 1.046768753281480e+00 -5.985679061813991e+00 -5.945752296412028e+00 3.735635685041546e+00 4.964901350626601e+00 9.051269500635104e+03 + 151560 1.039619638059015e+00 -5.952393851155655e+00 -5.967376942602351e+00 3.979164584042289e+00 4.893129354329457e+00 9.117156867652677e+03 + 151580 1.094868753602539e+00 -6.016869995758238e+00 -5.985187022377287e+00 3.576338436330576e+00 4.758266972408279e+00 9.171650158144310e+03 + 151600 9.808656533992882e-01 -5.837423940619686e+00 -6.059900664333373e+00 4.547602721991810e+00 4.270106946266093e+00 9.401837026703997e+03 + 151620 1.005518223028536e+00 -5.869103954008161e+00 -5.983765814729772e+00 4.347297826150006e+00 4.688891678020918e+00 9.167252386327955e+03 + 151640 9.979406654387901e-01 -5.854790864603054e+00 -5.962540505830664e+00 4.517827004764499e+00 4.899111890632467e+00 9.102389696456972e+03 + 151660 1.090934673361515e+00 -5.992366462405522e+00 -6.008079897274205e+00 3.713876612203406e+00 4.623647637541244e+00 9.241834854397872e+03 + 151680 1.127731640294702e+00 -6.056094071076554e+00 -6.013456467352157e+00 3.350252870857004e+00 4.595084589590345e+00 9.258417637162349e+03 + 151700 9.688795251540822e-01 -5.842611912661931e+00 -6.062191743688187e+00 4.526159033567650e+00 4.265297663945856e+00 9.408947638814087e+03 + 151720 1.040962093349269e+00 -5.986177187411456e+00 -6.000021611171896e+00 3.775798356841198e+00 4.696301533191095e+00 9.217116453050055e+03 + 151740 9.985513396979232e-01 -5.978220100310472e+00 -6.019107118908904e+00 3.790253302049563e+00 4.555473714011690e+00 9.275802348232399e+03 + 151760 9.814636402093748e-01 -6.016737616388793e+00 -6.014098625587303e+00 3.618262176150427e+00 4.633415669715092e+00 9.260364008094855e+03 + 151780 9.497965227361332e-01 -6.025017881645683e+00 -6.011111935756190e+00 3.550634300379274e+00 4.630484393614910e+00 9.251201689018544e+03 + 151800 1.017309151803874e+00 -6.160230993182501e+00 -5.989701302592079e+00 2.823899115914128e+00 4.803106988668665e+00 9.185481732898510e+03 + 151820 9.080378795330997e-01 -6.019383029669922e+00 -5.982483163606519e+00 3.606382410596440e+00 4.818267151768318e+00 9.163371781458760e+03 + 151840 9.930165723566796e-01 -6.152805521028907e+00 -5.968809347419153e+00 2.921526963881445e+00 4.978061466064498e+00 9.121554539774961e+03 + 151860 9.287734568370655e-01 -6.056796138967373e+00 -5.976438043134815e+00 3.401485337586604e+00 4.862913959232293e+00 9.144853252147526e+03 + 151880 8.915203591566058e-01 -5.992765054561088e+00 -5.992568796550957e+00 3.697035225486222e+00 4.698162169351218e+00 9.194250967014876e+03 + 151900 9.865639182463944e-01 -6.118455592844485e+00 -5.954648309205840e+00 3.094322897933846e+00 5.034929669682163e+00 9.078350893013456e+03 + 151920 1.001897570064303e+00 -6.121695840513720e+00 -5.976914558390227e+00 3.040967131320513e+00 4.872323658104604e+00 9.146346032762878e+03 + 151940 9.776868465406648e-01 -6.063825616327211e+00 -5.979907732020536e+00 3.404329185811634e+00 4.886198663751187e+00 9.155467200339654e+03 + 151960 9.073038871709135e-01 -5.936366178977369e+00 -5.994652868809597e+00 4.082329953395200e+00 4.747638760542449e+00 9.200629070096418e+03 + 151980 9.593235549090360e-01 -5.985631880952491e+00 -5.978098256306125e+00 3.834230342906069e+00 4.877489581450149e+00 9.149910388174412e+03 + 152000 9.650688264619897e-01 -5.963330700456472e+00 -6.001100713295623e+00 3.812159882421151e+00 4.595278623808152e+00 9.220422354491822e+03 + 152020 1.009724315320795e+00 -6.000263569253713e+00 -6.011478655281321e+00 3.686647499036401e+00 4.622248739536921e+00 9.252322948016867e+03 + 152040 9.934536845042076e-01 -5.949933688814662e+00 -6.042872261414586e+00 3.956901327389128e+00 4.423233661322735e+00 9.349125320160934e+03 + 152060 1.038646279971501e+00 -5.998375483227020e+00 -5.985524209543942e+00 3.793262239484405e+00 4.867056241700816e+00 9.172654466487344e+03 + 152080 1.007490496990422e+00 -5.936832301570265e+00 -5.968376994437580e+00 4.070109301632755e+00 4.888974793663186e+00 9.120228344967505e+03 + 152100 1.011568116049612e+00 -5.930314944141040e+00 -6.008801603758715e+00 4.133566190075120e+00 4.682883644779108e+00 9.244093624613079e+03 + 152120 1.089849109918662e+00 -6.038442299063486e+00 -5.976042066626178e+00 3.547514689886591e+00 4.905826480946375e+00 9.143648413596991e+03 + 152140 1.040920804665440e+00 -5.963328535396206e+00 -6.007955121633658e+00 3.855764435307505e+00 4.599511671190157e+00 9.241453813885266e+03 + 152160 1.047741791748945e+00 -5.975004945024188e+00 -5.978016821206632e+00 3.866764577567192e+00 4.849469918441265e+00 9.149680885955409e+03 + 152180 1.017126808175849e+00 -5.933604854760050e+00 -5.968031940034569e+00 4.073359382756071e+00 4.875673731535552e+00 9.119140063977700e+03 + 152200 1.021413381180211e+00 -5.948419546313046e+00 -5.963405267335819e+00 4.009993215434157e+00 4.923942886288559e+00 9.105003205990231e+03 + 152220 1.037872248559532e+00 -5.983546293985240e+00 -5.995322205007122e+00 3.777482503338159e+00 4.709863399934175e+00 9.202664858758279e+03 + 152240 1.061344235020368e+00 -6.033536530420349e+00 -5.991134365940708e+00 3.497017339121199e+00 4.740497129277045e+00 9.189875020405578e+03 + 152260 9.724242737112576e-01 -5.928111150760007e+00 -6.020780719955232e+00 4.089356035912435e+00 4.557233029023970e+00 9.280965346086998e+03 + 152280 9.734181061354155e-01 -5.966542651882375e+00 -5.993346222180249e+00 3.850110323903590e+00 4.696200075414102e+00 9.196629206981708e+03 + 152300 9.807074969776035e-01 -6.022257177696241e+00 -5.958537805692300e+00 3.555958694945168e+00 4.921845189532741e+00 9.090187518500117e+03 + 152320 9.460268187827032e-01 -6.016364302611555e+00 -5.973304536783368e+00 3.571136876652202e+00 4.818392715514877e+00 9.135253987750337e+03 + 152340 9.957645920621123e-01 -6.130277785117588e+00 -5.977897921213822e+00 3.004723448662648e+00 4.879712207905805e+00 9.149334862484138e+03 + 152360 9.144244795561043e-01 -6.041463363314792e+00 -6.021737881943308e+00 3.417869459376813e+00 4.531136225920255e+00 9.283916961003186e+03 + 152380 9.510485177636557e-01 -6.114906766791842e+00 -6.004633345103129e+00 3.044412846917959e+00 4.677619899011404e+00 9.231302258434202e+03 + 152400 9.317684506012232e-01 -6.096622610461853e+00 -5.988198460511848e+00 3.179959371542298e+00 4.802547619138210e+00 9.180876413758879e+03 + 152420 8.724421049795216e-01 -6.009025872905376e+00 -6.021322321277962e+00 3.618627483867034e+00 4.548019374442407e+00 9.282610690357960e+03 + 152440 9.278044059932564e-01 -6.083522531374467e+00 -6.000600214443496e+00 3.241127958462223e+00 4.717280734466926e+00 9.218911000992346e+03 + 152460 9.739913095595303e-01 -6.139071521827939e+00 -5.978511003789442e+00 2.964543850684228e+00 4.886507191921142e+00 9.151220578373835e+03 + 152480 9.361620388874895e-01 -6.067622955364333e+00 -6.024047368880511e+00 3.319519718284912e+00 4.569737479175231e+00 9.291006311304318e+03 + 152500 9.540451158088731e-01 -6.076768471437614e+00 -5.974522921512234e+00 3.303998949968892e+00 4.891108720088138e+00 9.138992676441019e+03 + 152520 9.185414480152624e-01 -6.004646483188917e+00 -5.928134737535126e+00 3.722372169990082e+00 5.161714453688522e+00 8.997740183010006e+03 + 152540 9.863562788746199e-01 -6.082725699831085e+00 -5.934148425122495e+00 3.273914974415125e+00 5.127068678050805e+00 9.016007954111856e+03 + 152560 1.004814774849207e+00 -6.086531350468787e+00 -6.011405818296346e+00 3.173742848924284e+00 4.605125280296972e+00 9.252097471347273e+03 + 152580 9.724440988292451e-01 -6.018943348303868e+00 -6.009122779820667e+00 3.592253950329463e+00 4.648645174288061e+00 9.245076340146414e+03 + 152600 1.033754263615396e+00 -6.092347320427087e+00 -5.959597241149662e+00 3.236919587692019e+00 4.999191085911371e+00 9.093435170841292e+03 + 152620 9.832708279676347e-01 -6.001726916928268e+00 -5.978932706055276e+00 3.662625009478275e+00 4.793512895703728e+00 9.152486293960792e+03 + 152640 9.716104636217388e-01 -5.969749055036559e+00 -6.019513617082342e+00 3.842058719808273e+00 4.556302903500299e+00 9.277023090367182e+03 + 152660 9.757009670874064e-01 -5.962129251666004e+00 -5.992517099610720e+00 3.950687596414144e+00 4.776195871011311e+00 9.194101945122809e+03 + 152680 1.004161888860337e+00 -5.991635062758340e+00 -6.054511815855344e+00 3.717348725455260e+00 4.356300679026173e+00 9.385120210703290e+03 + 152700 9.849092733880136e-01 -5.953640991704454e+00 -6.006415400989546e+00 3.933780779134803e+00 4.630741954206361e+00 9.236747968713547e+03 + 152720 1.026322183232623e+00 -6.007382823888434e+00 -5.985048788064599e+00 3.696211335283707e+00 4.824456825165035e+00 9.171196855116852e+03 + 152740 1.052263435778194e+00 -6.038387555637335e+00 -6.033193424914826e+00 3.490718082539106e+00 4.520543584936887e+00 9.319197854678241e+03 + 152760 9.561111621181165e-01 -5.891348247350078e+00 -6.023021860351321e+00 4.285514320438153e+00 4.529424058159259e+00 9.287844235709686e+03 + 152780 1.006205264120804e+00 -5.962621026212300e+00 -6.033340631720892e+00 3.889779627724578e+00 4.483696709070665e+00 9.319673505356963e+03 + 152800 1.035678310114099e+00 -6.004849970007421e+00 -6.023470710147678e+00 3.621365234606639e+00 4.514442063171058e+00 9.289249773610716e+03 + 152820 1.002909960394694e+00 -5.958295830262862e+00 -5.996574135811009e+00 3.945221405634840e+00 4.725421451628737e+00 9.206521534613526e+03 + 152840 1.049340940448883e+00 -6.032053488185921e+00 -6.013369327541003e+00 3.499621224820776e+00 4.606908566608410e+00 9.258149517155152e+03 + 152860 9.552944572485400e-01 -5.901413573379068e+00 -6.033433121129609e+00 4.235641316391090e+00 4.477564643248500e+00 9.319962416598990e+03 + 152880 1.001238933322254e+00 -5.983068787004171e+00 -6.018187951148816e+00 3.804326385125058e+00 4.602666709933416e+00 9.272958364873710e+03 + 152900 1.045583396787685e+00 -6.071694065072273e+00 -6.017245159213985e+00 3.320603455657172e+00 4.633257499036409e+00 9.270084911892520e+03 + 152920 9.760510207340989e-01 -6.003371857535328e+00 -6.032117048297929e+00 3.645590097358416e+00 4.480530763695667e+00 9.315895805861030e+03 + 152940 9.613747960673488e-01 -6.023372271324771e+00 -6.023539436153528e+00 3.545728457187481e+00 4.544768570872083e+00 9.289441006479201e+03 + 152960 9.626213296228121e-01 -6.066835953596167e+00 -5.976457042763319e+00 3.381964561721490e+00 4.900934253814952e+00 9.144934496002877e+03 + 152980 9.462104689922540e-01 -6.078670493013249e+00 -5.992996153318811e+00 3.269370609250515e+00 4.761325925837198e+00 9.195588810865202e+03 + 153000 8.788373256814356e-01 -6.003928805939038e+00 -6.026385224462270e+00 3.670973573715602e+00 4.542025343435670e+00 9.298241825249623e+03 + 153020 9.969368942648322e-01 -6.195097486899137e+00 -5.964046704298610e+00 2.684114957557548e+00 5.010844306242821e+00 9.107040314229964e+03 + 153040 9.392618986218996e-01 -6.118829865922464e+00 -6.017933183328455e+00 3.013374984096410e+00 4.592739349262380e+00 9.272210405991475e+03 + 153060 9.363078166696888e-01 -6.116291488023835e+00 -6.024341624858243e+00 2.983314381357895e+00 4.511304724850061e+00 9.291958710900117e+03 + 153080 9.667008446549012e-01 -6.156012141110791e+00 -5.954260735141370e+00 2.849142343835590e+00 5.007630137841177e+00 9.077190872755367e+03 + 153100 8.735992339277909e-01 -6.003954867271736e+00 -6.024908054785431e+00 3.669088021983172e+00 4.548771576784240e+00 9.293644363126283e+03 + 153120 9.039768161870817e-01 -6.024754910643693e+00 -5.994577505375348e+00 3.575777958844550e+00 4.749061289833756e+00 9.200402349783340e+03 + 153140 9.547856047857561e-01 -6.067868999869823e+00 -6.043347971778338e+00 3.285486207986787e+00 4.426289745904927e+00 9.350588048143516e+03 + 153160 9.771029646153233e-01 -6.064148449236200e+00 -6.015580131006017e+00 3.357869905991578e+00 4.636756705192246e+00 9.264944697437861e+03 + 153180 9.637103805507405e-01 -6.009981024979293e+00 -6.019870740815078e+00 3.585822138419163e+00 4.529033859661505e+00 9.278148140457253e+03 + 153200 9.447780169096544e-01 -5.951049849357537e+00 -6.019395218710231e+00 3.942259326149399e+00 4.549809638914505e+00 9.276686561150704e+03 + 153220 9.735626733495769e-01 -5.969420498445515e+00 -6.025300587178010e+00 3.892122876535245e+00 4.571250759617479e+00 9.294876883141364e+03 + 153240 9.610265611767959e-01 -5.934415803918671e+00 -6.040945926586103e+00 4.040212877577897e+00 4.428500427738298e+00 9.343156908080618e+03 + 153260 9.481231927026337e-01 -5.904789393837875e+00 -5.999381544992257e+00 4.193810701909038e+00 4.650647931892496e+00 9.215140899030426e+03 + 153280 9.782213688880540e-01 -5.940314088004233e+00 -6.001259531361214e+00 4.039418387068326e+00 4.689460220035664e+00 9.220901398364244e+03 + 153300 1.003123243523314e+00 -5.970006846398224e+00 -5.992294591299472e+00 3.810476608074689e+00 4.682496927834348e+00 9.193389325536124e+03 + 153320 9.904573086532718e-01 -5.944207594545228e+00 -6.002229146828857e+00 3.955461907968220e+00 4.622293175949421e+00 9.223889945072231e+03 + 153340 1.002449493439268e+00 -5.955147782143270e+00 -5.974535999241034e+00 3.957435482893847e+00 4.846105340001587e+00 9.139064671872025e+03 + 153360 1.059985694239380e+00 -6.037180141995123e+00 -6.010640438044944e+00 3.444855186736093e+00 4.597250273823934e+00 9.249747995055330e+03 + 153380 1.022722290656006e+00 -5.983609956418340e+00 -5.980134805934759e+00 3.799816603384638e+00 4.819771455239158e+00 9.156169821518946e+03 + 153400 1.097037367047074e+00 -6.096309468548624e+00 -5.996465429942455e+00 3.222164099945383e+00 4.795484020437044e+00 9.206194016866068e+03 + 153420 1.030770880464101e+00 -6.003380074113911e+00 -5.989654575423401e+00 3.695056555980212e+00 4.773870493475172e+00 9.185325590239227e+03 + 153440 9.908544557560722e-01 -5.952598274952019e+00 -6.028928235556302e+00 3.937371861010150e+00 4.499073415197122e+00 9.306069028368243e+03 + 153460 9.829452643138996e-01 -5.952253397929202e+00 -6.010844794705353e+00 3.957797720682790e+00 4.621356853404786e+00 9.250368403505921e+03 + 153480 1.027339726141806e+00 -6.030433789177856e+00 -6.024391935516743e+00 3.537387005737943e+00 4.572080264433890e+00 9.292084529715423e+03 + 153500 1.023849961036998e+00 -6.044975767954078e+00 -5.990247144830064e+00 3.445910683335350e+00 4.760170906540494e+00 9.187150619517564e+03 + 153520 9.547442190166811e-01 -5.965966181443966e+00 -6.035065954131987e+00 3.828242526057328e+00 4.431460938127449e+00 9.325017367878658e+03 + 153540 1.019553052641491e+00 -6.092683179443765e+00 -5.986958359559166e+00 3.179270945097727e+00 4.786359221738092e+00 9.177067918133298e+03 + 153560 9.661256427502110e-01 -6.048467106918759e+00 -5.982163206343514e+00 3.423966649087431e+00 4.804693906685943e+00 9.162362600295761e+03 + 153580 9.175701559950632e-01 -6.012024366023091e+00 -5.936124898335567e+00 3.652763329656314e+00 5.088589818522743e+00 9.021990595011657e+03 + 153600 9.022807241043519e-01 -6.016378919778482e+00 -5.965886617405851e+00 3.619955482293023e+00 4.909890096175211e+00 9.112631575299682e+03 + 153620 9.573449953944353e-01 -6.121536261596678e+00 -5.978906736587676e+00 3.088905269802506e+00 4.907906074251850e+00 9.152424743540423e+03 + 153640 9.272487411317598e-01 -6.095656336233136e+00 -5.949675136093950e+00 3.147663190549060e+00 4.985909832265980e+00 9.063214169415332e+03 + 153660 8.767374418213179e-01 -6.029544094242864e+00 -6.018545095497592e+00 3.454139121203798e+00 4.517297074088706e+00 9.274063761594572e+03 + 153680 9.666683368634530e-01 -6.164456121813123e+00 -5.955218010683176e+00 2.782526596188335e+00 4.984004209789537e+00 9.080082666283019e+03 + 153700 8.794937894475620e-01 -6.027258036991245e+00 -5.971929843182073e+00 3.590246663221222e+00 4.907949714083814e+00 9.131076505607400e+03 + 153720 9.641473479542558e-01 -6.131525861154378e+00 -5.949849627419757e+00 3.047983097016624e+00 5.091196145427130e+00 9.063735016651513e+03 + 153740 9.473542403892279e-01 -6.068086599518979e+00 -5.952590971779626e+00 3.337317960086676e+00 5.000511727456669e+00 9.072094896664770e+03 + 153760 9.969739157248306e-01 -6.085985269030145e+00 -5.986071301259081e+00 3.204821608077544e+00 4.778543072655536e+00 9.174316988321079e+03 + 153780 9.676419825191406e-01 -5.982243014527521e+00 -6.000636628308075e+00 3.799938448870523e+00 4.694319472140048e+00 9.218997498861174e+03 + 153800 9.941716391912007e-01 -5.973791920685066e+00 -5.986089372779013e+00 3.880624619365888e+00 4.810010746417884e+00 9.174371035872664e+03 + 153820 9.626057239374757e-01 -5.897159334753761e+00 -6.032827387437418e+00 4.246392525307648e+00 4.467365572234788e+00 9.318049720931374e+03 + 153840 1.003440677831400e+00 -5.940320484278769e+00 -5.944564562322978e+00 4.059856484249380e+00 5.035486331350576e+00 9.047629498799410e+03 + 153860 1.044376643708210e+00 -5.989244937005662e+00 -5.970829355362403e+00 3.804426409425975e+00 4.910171529023620e+00 9.127703964085449e+03 + 153880 1.092648252342945e+00 -6.053321206300581e+00 -6.020163700156647e+00 3.453030192198693e+00 4.643425723584648e+00 9.279038146164243e+03 + 153900 9.935389305330289e-01 -5.905550950552178e+00 -6.037455237535251e+00 4.235294584885150e+00 4.477879756905899e+00 9.332399147615497e+03 + 153920 1.054973676932879e+00 -6.000626110001885e+00 -6.048369914216551e+00 3.648781496459367e+00 4.374629184328930e+00 9.366144515964897e+03 + 153940 1.028336474424619e+00 -5.970130267083856e+00 -6.008690719962944e+00 3.895340055551937e+00 4.673919967909415e+00 9.243768101206140e+03 + 153960 1.043782559703057e+00 -6.006934579772891e+00 -5.990275543346154e+00 3.711313767348333e+00 4.806972532488210e+00 9.187187738415490e+03 + 153980 1.032681045868201e+00 -6.005836048067446e+00 -5.978672109091969e+00 3.649075586495680e+00 4.805055127698843e+00 9.151680134737024e+03 + 154000 1.006080890299680e+00 -5.982756562088112e+00 -6.009717087762290e+00 3.798318232553808e+00 4.643506722004813e+00 9.246902604799121e+03 + 154020 9.938012898309097e-01 -5.984191769701455e+00 -6.030521179340216e+00 3.751615145645855e+00 4.485584506047119e+00 9.310983881207705e+03 + 154040 1.029228187109917e+00 -6.057995793930031e+00 -5.977659898696462e+00 3.418668609902217e+00 4.879969752272980e+00 9.148584361984618e+03 + 154060 9.448789164223784e-01 -5.953630557006893e+00 -6.010437846705200e+00 3.996607726730534e+00 4.670411478383182e+00 9.249109060347453e+03 + 154080 1.009757339626900e+00 -6.068588255829212e+00 -5.980761570543135e+00 3.376924354305031e+00 4.881238772353312e+00 9.158100821936592e+03 + 154100 9.392274216121579e-01 -5.981859031018712e+00 -6.030878378208710e+00 3.811658282361489e+00 4.530181605077063e+00 9.312090458607387e+03 + 154120 1.013398561154043e+00 -6.108927377502023e+00 -5.981959008347394e+00 3.139203651328573e+00 4.868275675306080e+00 9.161776405733168e+03 + 154140 9.847284461100466e-01 -6.082163747212057e+00 -6.002491596351607e+00 3.232770344824009e+00 4.690260164290210e+00 9.224723281347957e+03 + 154160 8.891249252763935e-01 -5.954036926601228e+00 -5.999353912640581e+00 3.973152165212837e+00 4.712935018593948e+00 9.215051434976633e+03 + 154180 1.010695062991616e+00 -6.144228698042324e+00 -5.986388248200079e+00 2.893246582419514e+00 4.799590871144355e+00 9.175297550585898e+03 + 154200 8.976551954383657e-01 -5.982154802278624e+00 -6.034669217880718e+00 3.777458515093786e+00 4.475912614127008e+00 9.323771414901508e+03 + 154220 9.267975141770829e-01 -6.025942909113143e+00 -6.025102861691266e+00 3.522290435190690e+00 4.527114117484023e+00 9.294273133982944e+03 + 154240 9.747091464879393e-01 -6.090851176663282e+00 -6.017697597758962e+00 3.223524536828151e+00 4.643583707376502e+00 9.271463412809058e+03 + 154260 8.991316002943195e-01 -5.966303028795561e+00 -5.997456858739715e+00 3.904234604861705e+00 4.725344492282767e+00 9.209245800359011e+03 + 154280 9.517127353987361e-01 -6.019742815986369e+00 -5.990321042541113e+00 3.580771024045219e+00 4.749715400172608e+00 9.187364369645513e+03 + 154300 1.022103448853994e+00 -6.082870360477687e+00 -6.003676220204540e+00 3.265347900906856e+00 4.720092909608873e+00 9.228369775409104e+03 + 154320 1.009698595177319e+00 -6.015308589739647e+00 -6.065904331185815e+00 3.580529316953831e+00 4.290000739904252e+00 9.420493181511301e+03 + 154340 9.520899029581139e-01 -5.885820376740973e+00 -6.031291122647040e+00 4.297842788383287e+00 4.462527253865482e+00 9.313362351734597e+03 + 154360 1.039817945788410e+00 -5.979074963860912e+00 -5.965693378358049e+00 3.873264613599658e+00 4.950103748350764e+00 9.112019940709477e+03 + 154380 1.042665236396224e+00 -5.952602664287590e+00 -6.035252045076518e+00 3.901890441206923e+00 4.427304906766555e+00 9.325587652223721e+03 + 154400 1.056671231701882e+00 -5.953477353435457e+00 -6.031531570526425e+00 3.932524534342086e+00 4.484325140954686e+00 9.314086686568638e+03 + 154420 1.041206936490361e+00 -5.919790783163110e+00 -6.036283992811867e+00 4.122831491696986e+00 4.453909454627898e+00 9.328766334648357e+03 + 154440 1.077353464080280e+00 -5.971906687747246e+00 -6.020854921047511e+00 3.799361646520855e+00 4.518293316196107e+00 9.281176911086073e+03 + 154460 1.050662359765104e+00 -5.938111412813444e+00 -5.997530544599448e+00 3.992707872859653e+00 4.651514023063493e+00 9.209470160265948e+03 + 154480 1.044188756724534e+00 -5.939293008700773e+00 -5.995886893698918e+00 3.996457685880661e+00 4.671486840345914e+00 9.204413585341727e+03 + 154500 1.056411966800912e+00 -5.971606862999575e+00 -5.988314213086397e+00 3.881084573767780e+00 4.785148384115178e+00 9.181176802076287e+03 + 154520 1.006109171421546e+00 -5.914268114855199e+00 -6.038180177857820e+00 4.117815343033474e+00 4.406293101942648e+00 9.334595006468091e+03 + 154540 1.052493294595480e+00 -6.005321365856107e+00 -6.001714903300647e+00 3.713800387418453e+00 4.734509253510177e+00 9.222313349846541e+03 + 154560 1.017567024626996e+00 -5.980702188931515e+00 -6.021083183032514e+00 3.782711302634873e+00 4.550837385568290e+00 9.281897505798352e+03 + 154580 1.029368401639717e+00 -6.029537199522997e+00 -6.002248626779322e+00 3.514687021347194e+00 4.671382228934362e+00 9.223962022826190e+03 + 154600 1.016554670475315e+00 -6.041754999992593e+00 -5.973443823636511e+00 3.477049771702257e+00 4.869303117459255e+00 9.135707477755164e+03 + 154620 1.002347071816549e+00 -6.046517669782873e+00 -5.961707286988086e+00 3.441065667171873e+00 4.928060009543863e+00 9.099875812788687e+03 + 154640 9.526002382775833e-01 -5.993792867952488e+00 -6.037056613503819e+00 3.745990949928134e+00 4.497563827929403e+00 9.331169596918073e+03 + 154660 1.006998132780232e+00 -6.091282498006998e+00 -5.987972692843293e+00 3.198479097300505e+00 4.791699985691179e+00 9.180191744120095e+03 + 154680 9.855735511252161e-01 -6.071082940301535e+00 -6.024602928029518e+00 3.280315971981467e+00 4.547211395206045e+00 9.292754343494769e+03 + 154700 9.987860882714890e-01 -6.097433771488230e+00 -6.001418740183117e+00 3.187286408718414e+00 4.738619576750452e+00 9.221422727191490e+03 + 154720 9.885942687883705e-01 -6.086037059760309e+00 -6.005148637832950e+00 3.262154145199430e+00 4.726627981349163e+00 9.232872842498065e+03 + 154740 1.000484362593262e+00 -6.102551110553986e+00 -5.969756779877024e+00 3.132820338525222e+00 4.895345935128592e+00 9.124454428296962e+03 + 154760 9.623357330313957e-01 -6.041942160877678e+00 -5.998271164052441e+00 3.477105226686450e+00 4.727870848521878e+00 9.211747087016871e+03 + 154780 9.120489470733505e-01 -5.961673508596509e+00 -6.027722346101544e+00 3.880697314254594e+00 4.501434668276116e+00 9.302337071551781e+03 + 154800 9.446420730459519e-01 -6.001939354056098e+00 -5.985688169431195e+00 3.730754405218601e+00 4.824071222197489e+00 9.173143066909055e+03 + 154820 9.364642473442250e-01 -5.978841645601251e+00 -5.978854311216190e+00 3.787346787231974e+00 4.787274059310996e+00 9.152254800597519e+03 + 154840 9.903654985101851e-01 -6.045655042458341e+00 -5.993477139563081e+00 3.422808995321298e+00 4.722422588250257e+00 9.197051251903724e+03 + 154860 9.836687708530971e-01 -6.022210411091764e+00 -6.043196821196949e+00 3.596496089502685e+00 4.475988875042244e+00 9.350140963723992e+03 + 154880 9.337780692557968e-01 -5.938960945611880e+00 -6.062915981825025e+00 3.959821812262275e+00 4.248052812346536e+00 9.411213393050923e+03 + 154900 1.039395085132604e+00 -6.087293198703271e+00 -5.987438224943905e+00 3.275703609341793e+00 4.849086321175315e+00 9.178534791128577e+03 + 154920 9.883209247688736e-01 -6.002477573116246e+00 -6.015988151753326e+00 3.694977102334287e+00 4.617397269044886e+00 9.266177920584181e+03 + 154940 9.686264342623134e-01 -5.963883416001982e+00 -6.008055264186673e+00 3.836715109180907e+00 4.583073521332997e+00 9.241812636574761e+03 + 154960 1.043631862460856e+00 -6.063973094014504e+00 -5.986436178312775e+00 3.369834934786154e+00 4.815063903544408e+00 9.175480488115734e+03 + 154980 9.650582382571515e-01 -5.936681899378245e+00 -6.034724945559202e+00 4.037046001893794e+00 4.474067658610376e+00 9.323953457007387e+03 + 155000 1.035056902793770e+00 -6.033265329854432e+00 -5.966780518779539e+00 3.537344406204184e+00 4.919110479887483e+00 9.115359997335991e+03 + 155020 1.010303888629375e+00 -5.989269439649504e+00 -6.006877358014536e+00 3.743124013928789e+00 4.642016621860209e+00 9.238151058921952e+03 + 155040 9.914973223094834e-01 -5.952485873759290e+00 -6.033725944173218e+00 3.900639786064115e+00 4.434146729887075e+00 9.320854594971821e+03 + 155060 1.057460335104942e+00 -6.042651673292700e+00 -5.993463286420224e+00 3.484674397250779e+00 4.767121726550806e+00 9.197003528155330e+03 + 155080 9.722620562372843e-01 -5.908752667586335e+00 -5.990254974933360e+00 4.226402970241930e+00 4.758404109014014e+00 9.187158956624247e+03 + 155100 1.041578493503403e+00 -6.002341114401576e+00 -6.009647876754705e+00 3.714135324297154e+00 4.672178764147660e+00 9.246681870184239e+03 + 155120 1.041435836887612e+00 -5.990281481912597e+00 -6.024638969735434e+00 3.765918469679080e+00 4.568632457796296e+00 9.292837383047796e+03 + 155140 1.061291202962360e+00 -6.008097191518011e+00 -6.024181590967688e+00 3.679163574624073e+00 4.586804463931262e+00 9.291426788958108e+03 + 155160 1.047448198177473e+00 -5.976095052715634e+00 -6.035215607405886e+00 3.819167572829837e+00 4.479688198922140e+00 9.325473718520625e+03 + 155180 1.088754246874466e+00 -6.028814091855928e+00 -5.971248585753687e+00 3.566744401615643e+00 4.897294445887988e+00 9.129009412207473e+03 + 155200 1.016608044376245e+00 -5.913871592854204e+00 -6.039546291258212e+00 4.124355575520633e+00 4.402712009188101e+00 9.338849999580167e+03 + 155220 1.011504184395611e+00 -5.903366027331806e+00 -6.047389268381857e+00 4.231320649803256e+00 4.404316912169343e+00 9.363070355941267e+03 + 155240 1.071295279424158e+00 -5.994786209954467e+00 -6.046987099676588e+00 3.690052896497691e+00 4.390307309651690e+00 9.361871414390405e+03 + 155260 1.053722524360117e+00 -5.980221197072319e+00 -6.021875025487752e+00 3.801849016046261e+00 4.562666287375727e+00 9.284310905088021e+03 + 155280 1.090790198209860e+00 -6.053838519153247e+00 -5.951289482473940e+00 3.459922729628629e+00 5.048775167653350e+00 9.068101084046541e+03 + 155300 1.011207572895067e+00 -5.956988867562002e+00 -5.985985380735051e+00 3.961867090381518e+00 4.795364624545959e+00 9.174064775328492e+03 + 155320 1.006504407648036e+00 -5.974424589579948e+00 -6.042376941808323e+00 3.797678113692786e+00 4.407485191604939e+00 9.347612098864491e+03 + 155340 1.038854880366614e+00 -6.051189301147229e+00 -6.005123966939442e+00 3.396812090312909e+00 4.661326367921458e+00 9.232811217379762e+03 + 155360 1.022489040317271e+00 -6.058836749789315e+00 -5.969386158484447e+00 3.475717352507204e+00 4.989356490214021e+00 9.123301553288591e+03 + 155380 1.014544281163765e+00 -6.075096379394166e+00 -5.995218061641643e+00 3.296395204902759e+00 4.755068866567466e+00 9.202378480461513e+03 + 155400 9.559461935484818e-01 -6.013778226130894e+00 -5.982696124984864e+00 3.584693535240283e+00 4.763171769960392e+00 9.164016333722568e+03 + 155420 9.742975685088897e-01 -6.059866047811530e+00 -5.949499880338741e+00 3.403033160974968e+00 5.036772773712944e+00 9.062665376014393e+03 + 155440 9.883034321457554e-01 -6.094304241457007e+00 -5.968940994276501e+00 3.201747554784375e+00 4.921602719994638e+00 9.121945987859974e+03 + 155460 9.863232496103932e-01 -6.099621375215275e+00 -5.972986819736896e+00 3.168361648924166e+00 4.895516863115143e+00 9.134319448441529e+03 + 155480 9.077974402566161e-01 -5.985752506666948e+00 -6.031573625243134e+00 3.816336240832210e+00 4.553224287172574e+00 9.314220576921434e+03 + 155500 9.885345826337424e-01 -6.104095591786633e+00 -5.975247824185892e+00 3.110402238683869e+00 4.850266059374921e+00 9.141233940022905e+03 + 155520 1.015824948648091e+00 -6.138532878060566e+00 -5.952567812812851e+00 2.950721416822712e+00 5.018561599475936e+00 9.072009584539368e+03 + 155540 9.812670754642160e-01 -6.072861301059818e+00 -6.003457304417253e+00 3.320607243375947e+00 4.719135732331329e+00 9.227688118560482e+03 + 155560 9.546894915921815e-01 -6.013897599782829e+00 -6.028821599306686e+00 3.630530302899227e+00 4.544834388151776e+00 9.305763706607768e+03 + 155580 9.624324658799677e-01 -5.998873025801113e+00 -6.023930486324878e+00 3.667067601244392e+00 4.523183785287447e+00 9.290656488576948e+03 + 155600 1.033203170669302e+00 -6.068753016955212e+00 -5.998868482269229e+00 3.295825791295843e+00 4.697113604059545e+00 9.213593200067369e+03 + 155620 1.106133514291326e+00 -6.133681148039849e+00 -5.981476204342202e+00 2.995949345124469e+00 4.869933685475274e+00 9.160273873662969e+03 + 155640 1.024351242360092e+00 -5.969707618402991e+00 -6.003469187820439e+00 3.863905056946735e+00 4.670040900765763e+00 9.227702651371414e+03 + 155660 9.601339179608509e-01 -5.837627598919338e+00 -6.065888349858691e+00 4.531111896348618e+00 4.220403341217808e+00 9.420342824656331e+03 + 155680 1.015983081776965e+00 -5.891613233582048e+00 -6.006185725404034e+00 4.229429852934018e+00 4.571536874856371e+00 9.236040997258324e+03 + 155700 1.093403137191323e+00 -5.984000314471436e+00 -5.993919306734241e+00 3.837977404279981e+00 4.781021015747863e+00 9.198376782757394e+03 + 155720 9.964840804970309e-01 -5.830294643931099e+00 -5.988778879480504e+00 4.599105167342852e+00 4.689064161461975e+00 9.182612104095408e+03 + 155740 1.132352218787188e+00 -6.028278700333013e+00 -5.994184507249237e+00 3.557687517078174e+00 4.753461649824546e+00 9.199177121952112e+03 + 155760 1.052859249978167e+00 -5.915467756682727e+00 -6.058292093411502e+00 4.163582927811536e+00 4.343463484320232e+00 9.396857416898505e+03 + 155780 1.098535808826655e+00 -5.997014267934558e+00 -6.009639015376395e+00 3.703876900104375e+00 4.631383646619994e+00 9.246661503300144e+03 + 155800 1.007069154100690e+00 -5.877486615868667e+00 -5.981380048376424e+00 4.398729458987925e+00 4.802157292071667e+00 9.159947486844745e+03 + 155820 1.023878129901651e+00 -5.915327796069828e+00 -6.006949935625534e+00 4.174690608207760e+00 4.648582104398625e+00 9.238348513479963e+03 + 155840 1.059814095847255e+00 -5.980261146204718e+00 -6.051766594778003e+00 3.774650120958275e+00 4.364054769818067e+00 9.376625730390850e+03 + 155860 1.139290421738917e+00 -6.115998943307925e+00 -5.975275989028055e+00 3.056520302391248e+00 4.864573282673060e+00 9.141341782463545e+03 + 155880 9.981908238546902e-01 -5.926913117107254e+00 -5.994911366547557e+00 4.165780225675929e+00 4.775323754694614e+00 9.201437247012262e+03 + 155900 1.002792510749386e+00 -5.953124735761390e+00 -6.042992285277506e+00 3.926649903096367e+00 4.410616526816483e+00 9.349523469527163e+03 + 155920 9.945031672500202e-01 -5.959463760407226e+00 -6.037594810679018e+00 3.944078838937155e+00 4.495438257535570e+00 9.332804785542416e+03 + 155940 9.850905384689252e-01 -5.962716826341114e+00 -6.024792714950874e+00 3.891147331570772e+00 4.534697972960814e+00 9.293316680392380e+03 + 155960 1.011653132141998e+00 -6.018644201957330e+00 -6.014584062783694e+00 3.571068042134197e+00 4.594381989573719e+00 9.261883706508699e+03 + 155980 9.371380778417941e-01 -5.922981565632353e+00 -5.996843727456358e+00 4.135278859213571e+00 4.711150895887531e+00 9.207359068338445e+03 + 156000 9.851230987112951e-01 -6.004878197790578e+00 -5.962133440557000e+00 3.652274632626282e+00 4.897721643391293e+00 9.101169737538214e+03 + 156020 9.990774585533788e-01 -6.032995610621001e+00 -6.012875936001409e+00 3.510112531514966e+00 4.625642816690249e+00 9.256619978974708e+03 + 156040 1.011747495597885e+00 -6.057249728880647e+00 -5.999241132703499e+00 3.367203003745300e+00 4.700297339795726e+00 9.214735036419277e+03 + 156060 1.063585064737059e+00 -6.139408995420933e+00 -5.969327801771431e+00 2.989396851156600e+00 4.966029385071694e+00 9.123138460588090e+03 + 156080 9.641798038935850e-01 -5.995343728123187e+00 -6.023021890624529e+00 3.771814504942692e+00 4.612882212678183e+00 9.287839999837002e+03 + 156100 1.003090409415947e+00 -6.055691296501591e+00 -5.999080117361984e+00 3.417468219278377e+00 4.742538370449654e+00 9.214222853198764e+03 + 156120 9.390381197776414e-01 -5.961113833621155e+00 -6.040690526836850e+00 3.869743148953634e+00 4.412801462055636e+00 9.342394299930696e+03 + 156140 9.109249101219047e-01 -5.917681603447852e+00 -6.038896976955733e+00 4.073734085726843e+00 4.377696653026162e+00 9.336826763981226e+03 + 156160 1.019794619009582e+00 -6.073377437246371e+00 -5.961722555472705e+00 3.349387993824565e+00 4.990527603506070e+00 9.099930599153546e+03 + 156180 1.019154207653741e+00 -6.058072738377920e+00 -6.021262427045079e+00 3.410416214388498e+00 4.621786718438941e+00 9.282441997596097e+03 + 156200 9.609526069457154e-01 -5.952472589226481e+00 -6.025903173115400e+00 3.932921154646199e+00 4.511271378609896e+00 9.296741948251791e+03 + 156220 1.001043112834890e+00 -5.982341694331422e+00 -5.988434244038456e+00 3.829648002381205e+00 4.794663639144392e+00 9.181553288765843e+03 + 156240 9.952326640482679e-01 -5.929245085809661e+00 -6.048950060377127e+00 4.081486999461239e+00 4.394122511209905e+00 9.367919609744566e+03 + 156260 1.072756704655115e+00 -5.996960179455620e+00 -6.029950125559624e+00 3.690207862303613e+00 4.500774486596763e+00 9.309227207156920e+03 + 156280 1.013614955635552e+00 -5.870773792142417e+00 -6.037293102255300e+00 4.402582445094914e+00 4.446402797646784e+00 9.331883622983794e+03 + 156300 1.055384163672764e+00 -5.904465956091917e+00 -5.995221977014692e+00 4.203043360599409e+00 4.681908244011982e+00 9.202356617316394e+03 + 156320 1.015397216574106e+00 -5.823621163102004e+00 -5.993618855450769e+00 4.624205993379015e+00 4.648052936854535e+00 9.197408735938725e+03 + 156340 1.087146289081227e+00 -5.915924775817325e+00 -5.962802958618751e+00 4.090276423514592e+00 4.821094643493460e+00 9.103186919996086e+03 + 156360 1.038832348907501e+00 -5.836962326337999e+00 -6.014769479880101e+00 4.503902970224948e+00 4.482906779018111e+00 9.262429412176094e+03 + 156380 1.117641657109536e+00 -5.956120259857387e+00 -5.995846331590268e+00 3.941174450640115e+00 4.713061199160181e+00 9.204267095964839e+03 + 156400 1.080602510073727e+00 -5.912883905079114e+00 -6.005055901154387e+00 4.135881484286486e+00 4.606615619251970e+00 9.232550863667015e+03 + 156420 1.015369853445159e+00 -5.837795996599421e+00 -6.018230258854945e+00 4.571552135200927e+00 4.535470679217863e+00 9.273087401370789e+03 + 156440 1.116103947650118e+00 -6.017424889882971e+00 -5.976440752276223e+00 3.682639541668831e+00 4.917976802081576e+00 9.144858400394629e+03 + 156460 1.092769064215351e+00 -6.023542121639212e+00 -5.999008060798825e+00 3.584859023385814e+00 4.725737397364965e+00 9.214003906910191e+03 + 156480 1.037669976125390e+00 -5.984915596349691e+00 -6.013467000131739e+00 3.753439163514512e+00 4.589492584682533e+00 9.258432795034898e+03 + 156500 1.046553427409252e+00 -6.035946978274758e+00 -6.021143740525937e+00 3.502290793866459e+00 4.587293275813829e+00 9.282065351618279e+03 + 156520 1.015782283051081e+00 -6.022934476135940e+00 -6.025768095866501e+00 3.561401748456954e+00 4.545130665462838e+00 9.296287322666318e+03 + 156540 9.432264844886296e-01 -5.939019675339206e+00 -6.031603387012860e+00 4.004180264741649e+00 4.472550265028447e+00 9.314293213354391e+03 + 156560 9.805687936000543e-01 -6.009118622692423e+00 -6.011476841579672e+00 3.663701995120478e+00 4.650160737336702e+00 9.252287208458176e+03 + 156580 9.829337792183133e-01 -6.021831343743437e+00 -5.999291391585315e+00 3.587518559512631e+00 4.716946452850889e+00 9.214860689132303e+03 + 156600 9.913589372530340e-01 -6.038629645227829e+00 -5.971977789750348e+00 3.494821393812114e+00 4.877546662305112e+00 9.131222593573433e+03 + 156620 9.967725493112850e-01 -6.048315203686377e+00 -5.976963443925165e+00 3.436716227430488e+00 4.846429073628507e+00 9.146456864043907e+03 + 156640 1.026767591212955e+00 -6.091996373300296e+00 -5.975948420162380e+00 3.219090266285857e+00 4.885455571566478e+00 9.143343084268938e+03 + 156660 9.291764153782525e-01 -5.944657951602942e+00 -6.009470843749691e+00 4.015882142928965e+00 4.643716486459685e+00 9.246117237877334e+03 + 156680 1.005280362309762e+00 -6.051563900604213e+00 -5.974686341121933e+00 3.417543912404411e+00 4.858986755715549e+00 9.139484794370057e+03 + 156700 9.992639319888027e-01 -6.034749473561571e+00 -5.972288352867204e+00 3.518288975098570e+00 4.876950395952816e+00 9.132190167618193e+03 + 156720 9.516052486632066e-01 -5.953114996471902e+00 -6.017959103336563e+00 3.971312914206007e+00 4.598968017996016e+00 9.272251518344594e+03 + 156740 9.751507718386345e-01 -5.974512103796578e+00 -6.023987043353328e+00 3.874348379813012e+00 4.590255620656001e+00 9.290822372255067e+03 + 156760 9.646689384553735e-01 -5.944008880182968e+00 -6.041119270709475e+00 3.962089644884244e+00 4.404466754696675e+00 9.343713441704891e+03 + 156780 9.870792174785599e-01 -5.961074132495041e+00 -5.999057298311868e+00 3.903521554840482e+00 4.685416338844347e+00 9.214152307847327e+03 + 156800 1.069617506845110e+00 -6.063495803781873e+00 -5.955635750534007e+00 3.362699799617932e+00 4.982048916656476e+00 9.081371265339438e+03 + 156820 1.014449764805830e+00 -5.957839963746443e+00 -5.998112598996258e+00 3.947334018542061e+00 4.716082314767458e+00 9.211243456001532e+03 + 156840 1.096186385861377e+00 -6.051851488654359e+00 -5.970996054770513e+00 3.441937311837814e+00 4.906221725536811e+00 9.128208772096474e+03 + 156860 9.951249893995683e-01 -5.873342655746431e+00 -6.010071723735328e+00 4.353436779631140e+00 4.568317312484000e+00 9.247935734267356e+03 + 156880 1.048712750449049e+00 -5.920499500150036e+00 -5.952384535590358e+00 4.137844818474079e+00 4.954756010782457e+00 9.071406467579274e+03 + 156900 1.056515038695708e+00 -5.895690937675800e+00 -5.982991389947125e+00 4.284984816990825e+00 4.783692110347554e+00 9.164867015284124e+03 + 156920 1.105078396103916e+00 -5.931851520081457e+00 -6.030796998413899e+00 4.034788088542762e+00 4.466627840194596e+00 9.311795850556864e+03 + 156940 1.099777838596810e+00 -5.895211644363241e+00 -6.056351713464003e+00 4.182153284508842e+00 4.256862071387165e+00 9.390838665671847e+03 + 156960 1.071742439975349e+00 -5.836578673374818e+00 -6.051888869362928e+00 4.544513562631026e+00 4.308169098122154e+00 9.376986452750667e+03 + 156980 1.054475492560718e+00 -5.805955899100940e+00 -6.020717472631752e+00 4.737430004809797e+00 4.504235815349783e+00 9.280706229068415e+03 + 157000 1.142860433472879e+00 -5.941816423490788e+00 -6.019534558078012e+00 4.032950823108855e+00 4.586681267466561e+00 9.277066605409145e+03 + 157020 1.062622493338061e+00 -5.843525353233388e+00 -6.064790475018648e+00 4.498348373514592e+00 4.227809803556694e+00 9.416989485221964e+03 + 157040 1.091539414494438e+00 -5.931480737932060e+00 -6.005510042661849e+00 4.023203317868013e+00 4.598115594111680e+00 9.233967471476586e+03 + 157060 1.032116976829460e+00 -5.906596294733038e+00 -6.012549521037408e+00 4.163786529025667e+00 4.555386707377198e+00 9.255568719159790e+03 + 157080 1.007582193526400e+00 -5.933097264583997e+00 -5.995729330970470e+00 4.039702297778644e+00 4.680059280306573e+00 9.203955471330619e+03 + 157100 9.896826739414173e-01 -5.955258450748525e+00 -6.030704566855634e+00 3.905376156660423e+00 4.472152882724675e+00 9.311559972260700e+03 + 157120 1.042940571472123e+00 -6.065074415784890e+00 -5.983400746921841e+00 3.339358764897483e+00 4.808341610468521e+00 9.166164208962065e+03 + 157140 9.589700562608268e-01 -5.959330021442903e+00 -6.042723456121260e+00 3.912986425373518e+00 4.434128418358083e+00 9.348678495264727e+03 + 157160 9.629021088978623e-01 -5.979889871749885e+00 -6.011243202394236e+00 3.785441285732074e+00 4.605405609259972e+00 9.251609294110604e+03 + 157180 1.005790794598529e+00 -6.054794439742697e+00 -5.997737756898220e+00 3.385317515781769e+00 4.712945818167891e+00 9.210113343501733e+03 + 157200 9.902741142434432e-01 -6.040599465257844e+00 -6.026831781891191e+00 3.403359778422529e+00 4.482415946855964e+00 9.299609918739154e+03 + 157220 9.800126280290037e-01 -6.031103688883891e+00 -6.003087114168600e+00 3.543813984901270e+00 4.704689492467397e+00 9.226510883837142e+03 + 157240 9.670576831069158e-01 -6.013250071269490e+00 -6.022343809787680e+00 3.637639795407150e+00 4.585422141584218e+00 9.285761266061034e+03 + 157260 9.967855240684532e-01 -6.058884703230060e+00 -5.957752991741849e+00 3.413495841172593e+00 4.994209778619673e+00 9.087824545238231e+03 + 157280 9.454745252467858e-01 -5.982260287942500e+00 -5.981484619526378e+00 3.798255854708663e+00 4.802709862788335e+00 9.160293606043782e+03 + 157300 9.623262530696711e-01 -6.000526819987513e+00 -6.013050354267374e+00 3.713587493944276e+00 4.641675422098647e+00 9.257150123927047e+03 + 157320 1.003892435471925e+00 -6.052968344125878e+00 -5.982609639753900e+00 3.420042741725688e+00 4.824053310203900e+00 9.163737228298145e+03 + 157340 9.770093710873025e-01 -6.000808518935791e+00 -5.975172066354933e+00 3.737081720305492e+00 4.884290198252994e+00 9.140971816895339e+03 + 157360 1.002396486050873e+00 -6.020820637139413e+00 -6.004899937567920e+00 3.570229333651800e+00 4.661648454311607e+00 9.232116354268739e+03 + 157380 1.014581446087795e+00 -6.018282131158774e+00 -6.005542311517429e+00 3.620896720460178e+00 4.694050736321502e+00 9.234075132789141e+03 + 157400 1.015772543770686e+00 -5.999227493910452e+00 -5.998751406932449e+00 3.672347133385771e+00 4.675080898487686e+00 9.213197655499147e+03 + 157420 9.641884629082225e-01 -5.901067266356829e+00 -5.959531839648802e+00 4.236735552452531e+00 4.901022925246545e+00 9.093201611283204e+03 + 157440 1.043660013327860e+00 -5.992911390122451e+00 -5.951062171620124e+00 3.737972606031273e+00 4.978277294817271e+00 9.067395098640267e+03 + 157460 1.080946425449140e+00 -6.019129689234010e+00 -6.003343981889150e+00 3.586051732349769e+00 4.676695706754275e+00 9.227313490413826e+03 + 157480 1.059580570669120e+00 -5.962573665041109e+00 -6.009518433795272e+00 3.884656352882016e+00 4.615092226016130e+00 9.246289929634040e+03 + 157500 1.073895919835061e+00 -5.965259108893285e+00 -5.988595082300522e+00 3.841443506353528e+00 4.707444735818962e+00 9.182057263372242e+03 + 157520 1.087095053756703e+00 -5.968328290356059e+00 -5.977469044991816e+00 3.879557852510749e+00 4.827070224865023e+00 9.148005575274461e+03 + 157540 1.046790518674720e+00 -5.899398356682418e+00 -6.023693505008726e+00 4.219877654449749e+00 4.506155678148043e+00 9.289868774807712e+03 + 157560 9.858667654243174e-01 -5.806736446224214e+00 -6.051392685082196e+00 4.673292311813251e+00 4.268438327860115e+00 9.375438258802145e+03 + 157580 1.014169505772033e+00 -5.849674274562933e+00 -6.041268313736410e+00 4.490780234777486e+00 4.390617612761640e+00 9.344155731429628e+03 + 157600 1.073579895392337e+00 -5.948411847254055e+00 -6.031069790684841e+00 3.993135125270185e+00 4.518500422815203e+00 9.312660407838483e+03 + 157620 1.060948921897720e+00 -5.957738740207255e+00 -6.015871045644660e+00 3.894432896759985e+00 4.560628202993212e+00 9.265849596706144e+03 + 157640 1.018651875212477e+00 -5.940475884283983e+00 -6.035871716338974e+00 4.029635524696809e+00 4.481857894579750e+00 9.327499059654652e+03 + 157660 1.023956115205057e+00 -6.009112570955598e+00 -5.990857469993908e+00 3.657233957042197e+00 4.762057571731969e+00 9.189033214915740e+03 + 157680 9.782283330662809e-01 -5.996392640005429e+00 -5.975330285400696e+00 3.771299830009306e+00 4.892243129538520e+00 9.141452511621786e+03 + 157700 9.939484311924264e-01 -6.058966906573394e+00 -5.980862014497862e+00 3.391460253657961e+00 4.839950630648655e+00 9.158395900710702e+03 + 157720 9.756425815958355e-01 -6.058841117112107e+00 -6.009186634022923e+00 3.342149142517113e+00 4.627272868421632e+00 9.245287967890446e+03 + 157740 9.646589861040111e-01 -6.059712509620677e+00 -5.993620358889970e+00 3.436472401788079e+00 4.815983759011072e+00 9.197469804168268e+03 + 157760 9.613737819772491e-01 -6.063125334986598e+00 -5.988268235161698e+00 3.320922153074384e+00 4.750763204367719e+00 9.181082802705461e+03 + 157780 9.625500320501665e-01 -6.066815997706712e+00 -5.990562865126814e+00 3.325962737128431e+00 4.763820024536335e+00 9.188100963701669e+03 + 157800 1.022087329745438e+00 -6.153884731326552e+00 -5.942189012114458e+00 2.857369112609981e+00 5.072958692132499e+00 9.040447524138366e+03 + 157820 9.978150040337113e-01 -6.111529153150520e+00 -5.947888774436050e+00 3.088894297865399e+00 5.028542675710651e+00 9.057773441798623e+03 + 157840 9.407446312539284e-01 -6.015528327942970e+00 -5.952729876741563e+00 3.643472157293244e+00 5.004070582120645e+00 9.072482056962537e+03 + 157860 9.350562956983784e-01 -5.989508458687986e+00 -5.960701331769544e+00 3.821825595734427e+00 4.987240576388604e+00 9.096763013474938e+03 + 157880 9.550630295046345e-01 -5.992371069393723e+00 -5.990153699102807e+00 3.777817724310727e+00 4.790550207658109e+00 9.186828678357941e+03 + 157900 9.755250067435878e-01 -5.991959042102112e+00 -6.013474078158187e+00 3.739912097623486e+00 4.616369431148437e+00 9.258454284395735e+03 + 157920 1.024941017091621e+00 -6.035556728790546e+00 -5.994157061413688e+00 3.521672488838974e+00 4.759395785494716e+00 9.199123681315332e+03 + 157940 9.454635831627758e-01 -5.891170429540308e+00 -6.014663494851695e+00 4.268405609881385e+00 4.559289318373303e+00 9.262089778772828e+03 + 157960 9.957779863941147e-01 -5.941597585078336e+00 -6.024278996086787e+00 4.002900694119536e+00 4.528131237202006e+00 9.291731613424263e+03 + 157980 1.050495329301911e+00 -6.002257385002910e+00 -6.025301513883567e+00 3.666018030769961e+00 4.533695076669806e+00 9.294855478650623e+03 + 158000 9.698185724622979e-01 -5.869176786915680e+00 -6.017472669924018e+00 4.376136550976426e+00 4.524598642028819e+00 9.270737902847235e+03 + 158020 1.032633288821288e+00 -5.950669958080143e+00 -5.994446726052686e+00 3.941764849501035e+00 4.690391873369741e+00 9.200009749124796e+03 + 158040 1.085090562188813e+00 -6.023712472208288e+00 -5.953465824692144e+00 3.575160450331492e+00 4.978527571002761e+00 9.074740954529479e+03 + 158060 1.039398072442566e+00 -5.955771632537167e+00 -5.952403081663143e+00 3.916547869641785e+00 4.935890610041992e+00 9.071470558075376e+03 + 158080 1.020344296430323e+00 -5.929683977951738e+00 -5.973634010680438e+00 4.050953615819965e+00 4.798585726646187e+00 9.136245722753114e+03 + 158100 1.067627277999520e+00 -6.004010661859183e+00 -5.957357615035038e+00 3.652847703928093e+00 4.920736718327997e+00 9.086596888298684e+03 + 158120 1.042881421161178e+00 -5.972462623051247e+00 -6.001229601875482e+00 3.808570653913294e+00 4.643386209828949e+00 9.220821322064876e+03 + 158140 1.072667243458804e+00 -6.027703539520227e+00 -5.974441970125278e+00 3.573126807869461e+00 4.878962981536479e+00 9.138760292479083e+03 + 158160 1.048168839899823e+00 -6.005713444124058e+00 -6.008588401400798e+00 3.678853515766183e+00 4.662345066184936e+00 9.243422356220099e+03 + 158180 1.060366561411537e+00 -6.043937768609987e+00 -6.010964443056160e+00 3.452111023799575e+00 4.641448961735285e+00 9.250749211328673e+03 + 158200 9.776658767950973e-01 -5.946275128586545e+00 -6.016941603289514e+00 3.964826016180015e+00 4.559048182833948e+00 9.269150190978158e+03 + 158220 1.020086316005639e+00 -6.040907800079610e+00 -6.003933599130631e+00 3.451126891732048e+00 4.663438475320190e+00 9.229133284875383e+03 + 158240 1.021325134759740e+00 -6.079672339620037e+00 -5.974486900869338e+00 3.320844984225048e+00 4.924836050925604e+00 9.138900320806220e+03 + 158260 9.161689065857410e-01 -5.968827483032936e+00 -6.012396526623854e+00 3.850452050867154e+00 4.600271860280403e+00 9.255131694898164e+03 + 158280 9.426781278613302e-01 -6.054562862578303e+00 -5.964708033150391e+00 3.428870340549007e+00 4.944830676113991e+00 9.109006829536500e+03 + 158300 9.790282043227638e-01 -6.150694730819888e+00 -5.958508512859213e+00 2.875746586960437e+00 4.979309591211742e+00 9.090125796181685e+03 + 158320 8.980618658862692e-01 -6.065861929724618e+00 -5.994323240427315e+00 3.363357041507202e+00 4.774143266028704e+00 9.199638762810440e+03 + 158340 8.949410516783209e-01 -6.083477048113374e+00 -5.968932891367418e+00 3.227466862076468e+00 4.885197135762718e+00 9.121938773333924e+03 + 158360 8.531442364011002e-01 -6.028693901857788e+00 -5.997213428183141e+00 3.578751132784344e+00 4.759516884211727e+00 9.208498037958292e+03 + 158380 9.241902415858100e-01 -6.130309695472032e+00 -5.961924006310128e+00 3.017155425236606e+00 4.984052110005443e+00 9.100547865954792e+03 + 158400 9.095897398262726e-01 -6.099708613894931e+00 -5.963978659142244e+00 3.205322223059933e+00 4.984704627392478e+00 9.106805862778992e+03 + 158420 9.065996692855635e-01 -6.082180295015280e+00 -6.000835312572480e+00 3.232637406543037e+00 4.699732883824946e+00 9.219622693090068e+03 + 158440 9.294654550530256e-01 -6.099991924158820e+00 -6.002313179401304e+00 3.149974714866301e+00 4.710861183000858e+00 9.224173475072310e+03 + 158460 9.240822581442983e-01 -6.072126577793190e+00 -6.036657482961953e+00 3.291887749826989e+00 4.495556781172642e+00 9.329924481496093e+03 + 158480 9.468913179119914e-01 -6.084488987246747e+00 -5.978316316802198e+00 3.281656096775646e+00 4.891316000635898e+00 9.150620534826561e+03 + 158500 9.839264305867028e-01 -6.114237078041051e+00 -5.972119704242506e+00 3.070480955598124e+00 4.886540908541887e+00 9.131670398010121e+03 + 158520 1.010979775314062e+00 -6.125263916798614e+00 -5.991283179086526e+00 3.044787362668500e+00 4.814125492063464e+00 9.190321363440762e+03 + 158540 9.909010778225573e-01 -6.063811131265357e+00 -6.016122076839816e+00 3.346642761813308e+00 4.620480692182084e+00 9.266600931273646e+03 + 158560 9.571952874803844e-01 -5.985301152924057e+00 -5.979481582211760e+00 3.771525315825901e+00 4.804942191431566e+00 9.154174364629211e+03 + 158580 9.920684074527284e-01 -6.008712052400680e+00 -5.968203758110633e+00 3.632963100724110e+00 4.865567995175843e+00 9.119699281018815e+03 + 158600 9.989102527852459e-01 -5.991708309621817e+00 -5.955680767336299e+00 3.707039443044082e+00 4.913915166091678e+00 9.081494116017602e+03 + 158620 1.005162862822301e+00 -5.973762160664369e+00 -6.014949402934308e+00 3.844388802048698e+00 4.607885283229568e+00 9.262982760303898e+03 + 158640 1.027875873140508e+00 -5.982673711345784e+00 -6.052555561051894e+00 3.771019404431059e+00 4.369747009237286e+00 9.379083534990732e+03 + 158660 1.006954342488638e+00 -5.935395511469149e+00 -6.007357057332980e+00 4.050875722791834e+00 4.637661390428487e+00 9.239647944973871e+03 + 158680 1.031770710038963e+00 -5.957832436595398e+00 -6.021689334912185e+00 3.909770625854558e+00 4.543094433896485e+00 9.283743383240924e+03 + 158700 1.020328030889193e+00 -5.932970435236313e+00 -6.007872490048541e+00 4.041990063276682e+00 4.611890873489346e+00 9.241230613592103e+03 + 158720 1.035463099820945e+00 -5.953096438086517e+00 -5.952570477438250e+00 3.937944883621341e+00 4.940965031055839e+00 9.072020805996906e+03 + 158740 1.100983881691858e+00 -6.048415803114295e+00 -5.959993574025052e+00 3.425164540635564e+00 4.932898663361731e+00 9.094628464352367e+03 + 158760 1.018089901529338e+00 -5.924844136717158e+00 -6.033699119425405e+00 4.073398543418013e+00 4.448336387453126e+00 9.320794991134151e+03 + 158780 1.070094255683429e+00 -6.009791942715301e+00 -6.051597774702209e+00 3.594276678779418e+00 4.354221122079004e+00 9.376117729893031e+03 + 158800 1.005281925885868e+00 -5.929447453481468e+00 -6.012629751863898e+00 4.070988178858575e+00 4.593342549127589e+00 9.255855874346180e+03 + 158820 9.844486790304082e-01 -5.920190225694405e+00 -6.020447967814114e+00 4.108428498242470e+00 4.532733028155648e+00 9.279896487268943e+03 + 158840 9.947874331775804e-01 -5.962872634193308e+00 -5.992007322819468e+00 3.925205044087492e+00 4.757909153417587e+00 9.192510573524043e+03 + 158860 9.536421822604666e-01 -5.935118249111079e+00 -5.991344291944224e+00 4.009110593162378e+00 4.686251954262455e+00 9.190469448891381e+03 + 158880 1.001697364435717e+00 -6.042267105089044e+00 -5.990121739043472e+00 3.484094970948362e+00 4.783521732251350e+00 9.186723689807653e+03 + 158900 9.821260124535123e-01 -6.052076029873674e+00 -5.976294209351318e+00 3.385840081654259e+00 4.820991022292454e+00 9.144418008954171e+03 + 158920 9.800563033996513e-01 -6.083679542532979e+00 -5.931704657018589e+00 3.234123315384951e+00 5.106786626046103e+00 9.008572994314689e+03 + 158940 9.453378554396978e-01 -6.055517786947956e+00 -5.951523075087072e+00 3.367073661486960e+00 4.964227390121801e+00 9.068816259929932e+03 + 158960 9.183194234918602e-01 -6.030274066284863e+00 -5.963388720268366e+00 3.505405111967062e+00 4.889471119267633e+00 9.105006479886822e+03 + 158980 9.126891152927652e-01 -6.025952434668577e+00 -6.015804977111930e+00 3.564433225702099e+00 4.622701497306345e+00 9.265627871321640e+03 + 159000 9.574023039379355e-01 -6.090968685459745e+00 -5.986059658243648e+00 3.186990415435055e+00 4.789394284329378e+00 9.174327513660752e+03 + 159020 9.338634701600146e-01 -6.049487700583299e+00 -6.025074514639975e+00 3.406561045978134e+00 4.546745337593014e+00 9.294200606572480e+03 + 159040 9.497499552541671e-01 -6.062356375862340e+00 -5.967912789255150e+00 3.364845249591674e+00 4.907154938987953e+00 9.118829538016544e+03 + 159060 9.291331683151399e-01 -6.018346994214162e+00 -5.971687335072648e+00 3.672896301806937e+00 4.940823285156423e+00 9.130332301470755e+03 + 159080 9.327323548618007e-01 -6.005346218796013e+00 -6.001468995519174e+00 3.621687516848646e+00 4.643951132902616e+00 9.221579900993625e+03 + 159100 9.658529261993256e-01 -6.036228716760505e+00 -5.981581770198186e+00 3.459461455758329e+00 4.773252679506811e+00 9.160599188258953e+03 + 159120 9.930394104017475e-01 -6.058229466871088e+00 -5.990166246926133e+00 3.338472742601765e+00 4.729302284274946e+00 9.186894165598032e+03 + 159140 9.687481329010974e-01 -6.007264968623776e+00 -5.992069636039571e+00 3.648510832326164e+00 4.735764783494787e+00 9.192726842436599e+03 + 159160 9.393100468971451e-01 -5.951719583285605e+00 -5.990789246063790e+00 3.927488978869504e+00 4.703144929186392e+00 9.188808127944205e+03 + 159180 1.008148806105042e+00 -6.043776954201796e+00 -5.987327606801935e+00 3.486657469521689e+00 4.810798357799967e+00 9.178197147528897e+03 + 159200 1.043895727716148e+00 -6.088607786360543e+00 -6.001600833485251e+00 3.207884693706381e+00 4.707492081398751e+00 9.221976831795466e+03 + 159220 1.027531575574081e+00 -6.058056338133317e+00 -5.995398302403984e+00 3.381509605141324e+00 4.741301742598846e+00 9.202946216369197e+03 + 159240 9.670711286624439e-01 -5.963916353923217e+00 -6.014529141706108e+00 3.893071908086724e+00 4.602445448333771e+00 9.261708371145958e+03 + 159260 1.022381810423875e+00 -6.041431179755431e+00 -5.991409475790287e+00 3.510677774090294e+00 4.797910139091821e+00 9.190683546397486e+03 + 159280 9.538689555042004e-01 -5.935029051290416e+00 -6.000224938954323e+00 4.061118798841687e+00 4.686753922844527e+00 9.217727800950513e+03 + 159300 1.063401750480270e+00 -6.091578373326209e+00 -5.990921590545755e+00 3.247495820929431e+00 4.825482644241597e+00 9.189202276873406e+03 + 159320 1.051631545493499e+00 -6.068501240727747e+00 -5.962053964874337e+00 3.440409464319489e+00 5.051646194932469e+00 9.100918783270406e+03 + 159340 1.000910531331261e+00 -5.988587805239485e+00 -5.980584139514930e+00 3.772755206433410e+00 4.818713493587076e+00 9.157510804807414e+03 + 159360 9.276062800403968e-01 -5.873564395741175e+00 -5.980142675667549e+00 4.370427949176535e+00 4.758438972903780e+00 9.156168686584733e+03 + 159380 1.062201382367013e+00 -6.064281415510985e+00 -5.997127493649803e+00 3.384681756099790e+00 4.770289967462524e+00 9.208250764233722e+03 + 159400 1.038971017768886e+00 -6.022563540251824e+00 -6.016250514167800e+00 3.568286733837204e+00 4.604537106549294e+00 9.266996222634793e+03 + 159420 9.745996276905634e-01 -5.920809750920212e+00 -5.992494666315149e+00 4.136071602099553e+00 4.724445724697019e+00 9.193997368614011e+03 + 159440 9.613447103771818e-01 -5.893569825920785e+00 -6.014976022176231e+00 4.228930716564085e+00 4.531797550117163e+00 9.263034225329211e+03 + 159460 1.010892513962043e+00 -5.957306837663056e+00 -6.001824092913458e+00 3.959663822128458e+00 4.704038853457664e+00 9.222654003809221e+03 + 159480 1.064000134859606e+00 -6.023128623084922e+00 -6.025400498569198e+00 3.599708031191319e+00 4.586662570589015e+00 9.295193800481640e+03 + 159500 1.023653290739963e+00 -5.952984821435278e+00 -6.026750666996509e+00 3.896827077914089e+00 4.473252177473794e+00 9.299367149065953e+03 + 159520 1.077727945413640e+00 -6.026183895727552e+00 -5.969153564394150e+00 3.639525070552029e+00 4.967002058483674e+00 9.122584894472646e+03 + 159540 1.022149245490557e+00 -5.936596285475908e+00 -5.975825546811525e+00 4.085428225979533e+00 4.860167736681842e+00 9.142971009948527e+03 + 159560 9.548649937218950e-01 -5.832012094490262e+00 -5.969697946339539e+00 4.630876095790996e+00 4.840262627655737e+00 9.124224710860404e+03 + 159580 1.017324377014077e+00 -5.919492096502819e+00 -5.986173380288712e+00 4.112187248420714e+00 4.729292998026802e+00 9.174603009088736e+03 + 159600 9.972050533204111e-01 -5.887084119261441e+00 -6.025905238909279e+00 4.331632249396554e+00 4.534499897879836e+00 9.296701012265892e+03 + 159620 1.056463019567889e+00 -5.976273522614386e+00 -5.989412494728974e+00 3.855194918797115e+00 4.779748907665790e+00 9.184563180244366e+03 + 159640 1.039988914097818e+00 -5.956396710662003e+00 -6.024147688285371e+00 3.869268251296258e+00 4.480231653352977e+00 9.291347759398524e+03 + 159660 9.990985558041287e-01 -5.906098175636922e+00 -6.038094933699151e+00 4.228839982954566e+00 4.470894171728957e+00 9.334355441528402e+03 + 159680 1.070810920018540e+00 -6.031887753356043e+00 -6.009084002243419e+00 3.514381899471780e+00 4.645324567229546e+00 9.244941302366133e+03 + 159700 1.013664331595894e+00 -5.973047570121448e+00 -5.999151885718473e+00 3.865761031476089e+00 4.715866011688188e+00 9.214423110061796e+03 + 159720 1.050428051773329e+00 -6.059159425274064e+00 -5.973407644129782e+00 3.371121668321620e+00 4.863521665697336e+00 9.135587118528250e+03 + 159740 9.420157403576664e-01 -5.929782663791087e+00 -6.041043727355316e+00 4.075586640379653e+00 4.436708395799916e+00 9.343452573242312e+03 + 159760 9.965734877245368e-01 -6.039326866822048e+00 -5.994747595599556e+00 3.510248619240187e+00 4.766229693219664e+00 9.200919158888595e+03 + 159780 9.574404155866684e-01 -6.006558207472702e+00 -6.029806051851946e+00 3.678271507007243e+00 4.544778786989334e+00 9.308775540567196e+03 + 159800 9.452665991817946e-01 -6.011948649831208e+00 -6.053274421738664e+00 3.593589063570510e+00 4.356290086135365e+00 9.381322278933862e+03 + 159820 9.091029020000138e-01 -5.975808471078857e+00 -6.027570455182249e+00 3.840434064369721e+00 4.543208741506888e+00 9.301849317929635e+03 + 159840 9.971198159711572e-01 -6.119354546773181e+00 -5.992108139009541e+00 3.072085735306334e+00 4.802754300003119e+00 9.192853132830116e+03 + 159860 9.804063308342029e-01 -6.103343053013414e+00 -6.006949287693869e+00 3.144688053238382e+00 4.698195970590178e+00 9.238404822877916e+03 + 159880 9.446173079473499e-01 -6.053101553558562e+00 -5.996845182817244e+00 3.400413689815231e+00 4.723446476257116e+00 9.207363258792982e+03 + 159900 9.510357417197004e-01 -6.060683611881169e+00 -5.969738366836815e+00 3.411552378737357e+00 4.933774049513227e+00 9.124392891491303e+03 + 159920 1.004361373099638e+00 -6.131972324548982e+00 -5.945974572216656e+00 2.979194320136722e+00 5.047222197088090e+00 9.051934613123145e+03 + 159940 9.800600845119262e-01 -6.080648984605929e+00 -5.955888857139600e+00 3.282550087754632e+00 4.998942046233624e+00 9.082133205843687e+03 + 159960 9.499070351325912e-01 -6.011240856017125e+00 -5.974883352000113e+00 3.622166056485997e+00 4.830936470857243e+00 9.140115658337303e+03 + 159980 1.025320917373206e+00 -6.086917500840879e+00 -5.973464779074217e+00 3.257558909381542e+00 4.909021994517669e+00 9.135762131581945e+03 + 160000 9.399726349497040e-01 -5.910740771447418e+00 -6.035194781093599e+00 4.155913175762048e+00 4.441278993177932e+00 9.325404989728439e+03 + 160020 9.808920085636095e-01 -5.923903630536819e+00 -6.013507269238785e+00 4.079274055618663e+00 4.564756096073703e+00 9.258568049523979e+03 + 160040 1.065148542957790e+00 -6.003394834333378e+00 -6.014647621517323e+00 3.697861319765574e+00 4.633246074392169e+00 9.262078721675405e+03 + 160060 1.036509315605115e+00 -5.930734556587509e+00 -6.068474424248012e+00 4.025698345647426e+00 4.234774710365184e+00 9.428467977067377e+03 + 160080 9.986574143694632e-01 -5.860132375430748e+00 -6.095727228994482e+00 4.435737279348197e+00 4.082915171999475e+00 9.513252239280928e+03 + 160100 1.057493993860023e+00 -5.944650045686870e+00 -6.053291503628516e+00 3.978804372125293e+00 4.354968308413073e+00 9.381371065593459e+03 + 160120 1.052212184098265e+00 -5.941857759545673e+00 -6.028639366116957e+00 4.053962638335351e+00 4.555649223992820e+00 9.305180000221208e+03 + 160140 1.017491853209114e+00 -5.901617512446663e+00 -6.003675549404427e+00 4.278426631121257e+00 4.692393589479599e+00 9.228285586306805e+03 + 160160 9.791654557562276e-01 -5.855609235464485e+00 -5.973325718023437e+00 4.536092429398531e+00 4.860146169978225e+00 9.135264649153161e+03 + 160180 1.095994711489422e+00 -6.037513118562012e+00 -5.960767352412127e+00 3.481593433887382e+00 4.922279499488957e+00 9.096994428698439e+03 + 160200 1.053799120668693e+00 -5.987936220346573e+00 -6.047982774660277e+00 3.708529214351842e+00 4.363732607308308e+00 9.364933927499453e+03 + 160220 1.047072173451426e+00 -5.997601215741199e+00 -6.002957818730445e+00 3.709241942998267e+00 4.678483499702381e+00 9.226128524552238e+03 + 160240 1.007853289775680e+00 -5.961014124217182e+00 -6.033149370916704e+00 3.856195382193625e+00 4.441983632751616e+00 9.319123918226442e+03 + 160260 1.044218442731836e+00 -6.040386458405478e+00 -5.993579754171064e+00 3.488178732192756e+00 4.756950071220832e+00 9.197353155516843e+03 + 160280 9.561921292371524e-01 -5.934954516875090e+00 -5.977752599378698e+00 4.014986200241479e+00 4.769232987523892e+00 9.148892748376975e+03 + 160300 9.650283231047512e-01 -5.967732005004477e+00 -5.987432743890053e+00 3.835277321086950e+00 4.722152629726483e+00 9.178512168747106e+03 + 160320 1.041443695491874e+00 -6.096653630432838e+00 -5.964776719247878e+00 3.197489199747568e+00 4.954746831657663e+00 9.109235828863255e+03 + 160340 9.595100222858196e-01 -5.990386753872547e+00 -6.000379344409385e+00 3.737981361209295e+00 4.680602359998387e+00 9.218206210027241e+03 + 160360 9.966715658915174e-01 -6.057632720004217e+00 -5.971681098620000e+00 3.352322298545487e+00 4.845869809504086e+00 9.130310835549568e+03 + 160380 9.698672318965091e-01 -6.025950170767810e+00 -5.996191706043236e+00 3.583284759457562e+00 4.754162469013600e+00 9.205347882400329e+03 + 160400 9.750661845594895e-01 -6.038076024889579e+00 -5.949183696649925e+00 3.567781410237071e+00 5.078214915032502e+00 9.061714911713314e+03 + 160420 9.504862556509137e-01 -6.000361372350707e+00 -6.031722968009812e+00 3.677507659512000e+00 4.497424524046173e+00 9.314706480592376e+03 + 160440 9.971736506237416e-01 -6.067113054819553e+00 -6.012780722434808e+00 3.348230036217724e+00 4.660214696672194e+00 9.256341101273021e+03 + 160460 1.001479739154472e+00 -6.069819799750714e+00 -5.994696750068682e+00 3.339191165034122e+00 4.770559341562715e+00 9.200779702808306e+03 + 160480 9.564938174999156e-01 -5.994312774362599e+00 -5.988638164242287e+00 3.766604937791448e+00 4.799189427245357e+00 9.182207656800912e+03 + 160500 9.934674670159975e-01 -6.031413888062776e+00 -5.962698018766941e+00 3.572768729850547e+00 4.967345885093634e+00 9.102875221400574e+03 + 160520 9.579322317094875e-01 -5.947641901992867e+00 -5.980913849176217e+00 4.008267249217449e+00 4.817214579673471e+00 9.158520943450236e+03 + 160540 1.001411437362417e+00 -5.962620033507650e+00 -6.029181027881346e+00 3.883005665693516e+00 4.500802135719164e+00 9.306777406061126e+03 + 160560 1.072154562169849e+00 -6.007601534537461e+00 -6.031837288462196e+00 3.606404889638196e+00 4.467239440131570e+00 9.315050419287367e+03 + 160580 1.065367513281493e+00 -5.950269846249613e+00 -6.025662146306662e+00 3.913073823884455e+00 4.480159570036149e+00 9.295996615153270e+03 + 160600 1.023156314797608e+00 -5.853436719747481e+00 -6.056259558562024e+00 4.511096110820650e+00 4.346455983614677e+00 9.390541371979407e+03 + 160620 1.108521218243921e+00 -5.960403549679981e+00 -6.011061236342114e+00 3.900431023395397e+00 4.609546747329754e+00 9.251037212159106e+03 + 160640 1.041664426070571e+00 -5.854826465500003e+00 -6.023640094876265e+00 4.419901255771438e+00 4.450547272068221e+00 9.289734251419204e+03 + 160660 1.101880677810955e+00 -5.946492223116513e+00 -5.993345317246210e+00 4.007792713548893e+00 4.738754996563288e+00 9.196626130011464e+03 + 160680 1.076894909434662e+00 -5.920475471324465e+00 -6.028586424941093e+00 4.121331298468577e+00 4.500541472685897e+00 9.305013863627040e+03 + 160700 1.039924343699047e+00 -5.885838855470521e+00 -6.033771446075315e+00 4.345586602243795e+00 4.496134774496659e+00 9.321017230226955e+03 + 160720 1.033109188213106e+00 -5.901688568146314e+00 -6.027632987598209e+00 4.149746621513352e+00 4.426554275184649e+00 9.302081175740801e+03 + 160740 1.055795991988790e+00 -5.968754017575486e+00 -6.008396885310666e+00 3.881201764204100e+00 4.653566282954738e+00 9.242850910236340e+03 + 160760 1.005657058590011e+00 -5.930945630554363e+00 -5.991396744807606e+00 4.110108913563457e+00 4.762989260741637e+00 9.190642611609095e+03 + 160780 1.047128139263350e+00 -6.024881822075962e+00 -5.986025082602841e+00 3.642220686665044e+00 4.865342097780706e+00 9.174176803123368e+03 + 160800 1.038033506410136e+00 -6.037933130582186e+00 -6.003687842944122e+00 3.523335465563875e+00 4.719977206622772e+00 9.228375266649809e+03 + 160820 1.026438968370604e+00 -6.045312037897373e+00 -5.985528204346414e+00 3.483584265867951e+00 4.826872289635902e+00 9.172686698052670e+03 + 160840 9.819314297618624e-01 -5.997757320524366e+00 -6.009319229046188e+00 3.706066603577276e+00 4.639676335645417e+00 9.245684817886509e+03 + 160860 9.865099471253355e-01 -6.019217011164370e+00 -6.002126942729442e+00 3.608106866782074e+00 4.706240684414976e+00 9.223568952985232e+03 + 160880 1.003490227940993e+00 -6.052252346477676e+00 -6.001000178956694e+00 3.473617481615153e+00 4.767915358767921e+00 9.220099861589757e+03 + 160900 1.033831578292342e+00 -6.102674140787588e+00 -5.986236340333356e+00 3.192548712220606e+00 4.861152581120193e+00 9.174852205339032e+03 + 160920 9.877879709790602e-01 -6.039577545036948e+00 -6.021829451924027e+00 3.462233215760839e+00 4.564145512923762e+00 9.284190916455666e+03 + 160940 1.003202730067998e+00 -6.064640309068633e+00 -6.016864567180445e+00 3.394063939451140e+00 4.668399642645277e+00 9.268892874852019e+03 + 160960 9.394893143762911e-01 -5.971590657858687e+00 -5.988223327177643e+00 3.827300425481030e+00 4.731793064354324e+00 9.180940710155710e+03 + 160980 9.409703868796269e-01 -5.971003163812262e+00 -6.036246774011047e+00 3.830486941631595e+00 4.455848035454123e+00 9.328639830906464e+03 + 161000 9.708156717767303e-01 -6.009126362490987e+00 -6.023133701080456e+00 3.616296527028270e+00 4.535864221218900e+00 9.288207111996324e+03 + 161020 9.803835337611397e-01 -6.016142088238199e+00 -5.982685656006312e+00 3.615912330522665e+00 4.808024341764314e+00 9.163972493795498e+03 + 161040 9.912036111736192e-01 -6.020111742100628e+00 -6.023137924535320e+00 3.580833254371037e+00 4.563456446530819e+00 9.288214468707169e+03 + 161060 1.007247788663592e+00 -6.031522988784685e+00 -5.984037426045887e+00 3.515081277932560e+00 4.787750727545820e+00 9.168111851972055e+03 + 161080 9.941703140772706e-01 -5.996897824409364e+00 -5.955783707200983e+00 3.738043551690800e+00 4.974127175090395e+00 9.081814054131844e+03 + 161100 1.041144155839224e+00 -6.042665605408391e+00 -5.987789750795847e+00 3.463199004378587e+00 4.778304653574872e+00 9.179619799429467e+03 + 161120 1.003228008124460e+00 -5.955664536248199e+00 -5.979833367790728e+00 4.013706182354063e+00 4.874925011522271e+00 9.155225522564757e+03 + 161140 1.053873104186462e+00 -5.990723308399001e+00 -5.970237127546789e+00 3.751522224389894e+00 4.869157045069532e+00 9.125914120683730e+03 + 161160 9.711971601396562e-01 -5.815006118209706e+00 -6.059764845129257e+00 4.652992557679636e+00 4.247550071416997e+00 9.401428075491054e+03 + 161180 1.076232786561651e+00 -5.919729725969598e+00 -6.052277810770425e+00 4.141339580785396e+00 4.380227966109214e+00 9.378219414113324e+03 + 161200 1.102478600776878e+00 -5.918939173091913e+00 -6.062966916165484e+00 4.098653823415916e+00 4.271624234466265e+00 9.411349492884570e+03 + 161220 1.087251821297010e+00 -5.872943969150382e+00 -6.052002709838185e+00 4.339039174720669e+00 4.310856176440743e+00 9.377364946321166e+03 + 161240 1.010038870370776e+00 -5.751883298449872e+00 -6.052651816946000e+00 4.992777834656559e+00 4.265718457673985e+00 9.379376127483230e+03 + 161260 1.092599400223713e+00 -5.878835482960334e+00 -6.047670588932738e+00 4.335873326989935e+00 4.366396021348177e+00 9.363976786162893e+03 + 161280 1.084309675459875e+00 -5.881574324362872e+00 -6.048779934330901e+00 4.331803912420803e+00 4.371683424999864e+00 9.367393763993594e+03 + 161300 1.083054630717559e+00 -5.904025840408231e+00 -5.981216079485799e+00 4.168912162836286e+00 4.725673864901995e+00 9.159481642676992e+03 + 161320 1.089238637785522e+00 -5.938940085155091e+00 -6.025843863736573e+00 4.003922411401782e+00 4.504907466470638e+00 9.296556731791641e+03 + 161340 1.094741144549793e+00 -5.977280323077478e+00 -5.989027667307621e+00 3.888883368785610e+00 4.821428300320486e+00 9.183389539732872e+03 + 161360 1.002433399857184e+00 -5.866408797689527e+00 -6.020463333224148e+00 4.515605193060317e+00 4.631000210158193e+00 9.279957809169156e+03 + 161380 1.069717626176580e+00 -5.989761164545700e+00 -5.991813440212421e+00 3.779622457217072e+00 4.767837972750129e+00 9.191906529255770e+03 + 161400 1.036607959465053e+00 -5.961685189584067e+00 -5.973940221693836e+00 3.910205465669518e+00 4.839835174835138e+00 9.137216994004928e+03 + 161420 1.036008049049247e+00 -5.978567918804394e+00 -5.957337190186822e+00 3.806524805115132e+00 4.928434934281873e+00 9.086509463076527e+03 + 161440 9.233165003702806e-01 -5.825415582903469e+00 -5.977681983932461e+00 4.590717028059786e+00 4.716379790201908e+00 9.148628344724959e+03 + 161460 1.039073858469874e+00 -6.007136585109272e+00 -5.993217609563757e+00 3.587403591307345e+00 4.667328502844198e+00 9.196238231714016e+03 + 161480 1.017204898915156e+00 -5.985206545687710e+00 -5.972777629751076e+00 3.756896376605481e+00 4.828265135282159e+00 9.133677866926437e+03 + 161500 1.011045809337130e+00 -5.987127517334615e+00 -5.997052415887040e+00 3.745331922755134e+00 4.688341619394020e+00 9.208006793062505e+03 + 161520 1.075955436738055e+00 -6.094939250460896e+00 -5.994855152878284e+00 3.201717703082086e+00 4.776416079365493e+00 9.201262470830143e+03 + 161540 9.804809611294001e-01 -5.969904269843672e+00 -5.989713940893435e+00 3.803458656122169e+00 4.689708459417744e+00 9.185515332449426e+03 + 161560 9.542997730278802e-01 -5.945333924503183e+00 -5.978979729920486e+00 4.003636229772132e+00 4.810436808394418e+00 9.152627566044854e+03 + 161580 9.954382265371100e-01 -6.016620446548646e+00 -6.017369959915347e+00 3.609289019640756e+00 4.604985197902337e+00 9.270445037385824e+03 + 161600 1.023052618253661e+00 -6.070537376854359e+00 -5.971149206409000e+00 3.335147646904189e+00 4.905849901871113e+00 9.128709230426122e+03 + 161620 9.559154289258309e-01 -5.984327243815384e+00 -6.006284460924181e+00 3.753234911970152e+00 4.627153173463073e+00 9.236355363501631e+03 + 161640 9.301064820608891e-01 -5.956916214580928e+00 -6.005798635502968e+00 3.929836143746811e+00 4.649145718282265e+00 9.234850720143731e+03 + 161660 9.544315365814562e-01 -6.004722230707030e+00 -6.000822251623513e+00 3.653195954069851e+00 4.675590237487221e+00 9.219577069506189e+03 + 161680 9.750722119711537e-01 -6.043415077828495e+00 -5.996494157860504e+00 3.492293358496461e+00 4.761720541941571e+00 9.206278370435914e+03 + 161700 9.592481487377785e-01 -6.027084765412924e+00 -5.970724854277306e+00 3.578356362547953e+00 4.901983693956735e+00 9.127399684698054e+03 + 161720 9.002501508128924e-01 -5.944684248776280e+00 -5.991249021568359e+00 4.034861511527800e+00 4.767479380280383e+00 9.190168318791628e+03 + 161740 1.001883629854006e+00 -6.094110312873083e+00 -5.996470533764364e+00 3.166244760042566e+00 4.726907481391816e+00 9.206223504308293e+03 + 161760 9.975313097936616e-01 -6.081090060810471e+00 -6.007397432976460e+00 3.241698165261540e+00 4.664852638181733e+00 9.239778184048339e+03 + 161780 9.901650455971855e-01 -6.060824341825948e+00 -5.931792038258775e+00 3.429390834077759e+00 5.170314288844907e+00 9.008847735059595e+03 + 161800 9.342815008725615e-01 -5.959479322963702e+00 -5.963645823978852e+00 3.958276672375436e+00 4.934351978782499e+00 9.105772301568250e+03 + 161820 1.003337790695439e+00 -6.031461911781351e+00 -6.009896406658520e+00 3.490326660264591e+00 4.614159127931023e+00 9.247469021326797e+03 + 161840 9.429672754115861e-01 -5.905467627887485e+00 -6.094812719473669e+00 4.137373231936531e+00 4.050124414990434e+00 9.510410937374623e+03 + 161860 1.008867675163742e+00 -5.967990708076190e+00 -6.036551124913268e+00 3.871667467270503e+00 4.477982944101785e+00 9.329601031816937e+03 + 161880 1.033564994462538e+00 -5.975229430855498e+00 -5.989492420306222e+00 3.841818782805249e+00 4.759918490188708e+00 9.184797495883629e+03 + 161900 1.012463535767002e+00 -5.917264121085976e+00 -6.012237759203172e+00 4.151879144351999e+00 4.606525817160057e+00 9.254624147964782e+03 + 161920 1.035793713795176e+00 -5.927309368062039e+00 -6.021068230881504e+00 4.085098149310301e+00 4.546720249863802e+00 9.281819132235256e+03 + 161940 1.014886284306586e+00 -5.878313629094414e+00 -6.039625489921086e+00 4.394507747408183e+00 4.468230079611650e+00 9.339073050093089e+03 + 161960 1.123320963045888e+00 -6.030759050811043e+00 -5.953032198667207e+00 3.535861294502571e+00 4.982180907703976e+00 9.073424121250044e+03 + 161980 9.712971382020206e-01 -5.801294388589707e+00 -6.006142349174405e+00 4.799197804467099e+00 4.622929114670304e+00 9.235874048058628e+03 + 162000 1.007187872745212e+00 -5.854830436464284e+00 -6.062711950370902e+00 4.423821683232126e+00 4.230133860820012e+00 9.410524392657537e+03 + 162020 1.043729535736961e+00 -5.916487663651502e+00 -6.062048453354465e+00 4.128027198831600e+00 4.292194618897777e+00 9.408492423717807e+03 + 162040 1.030181452747277e+00 -5.911299444782066e+00 -6.065102217139168e+00 4.128956829845008e+00 4.245797510068424e+00 9.417974524707075e+03 + 162060 1.051243718307378e+00 -5.970609469780458e+00 -6.015886573114088e+00 3.866381796140712e+00 4.606393662189912e+00 9.265889226221949e+03 + 162080 1.010595824561274e+00 -5.946106826207853e+00 -6.049166334506747e+00 3.971186256439839e+00 4.379402611380222e+00 9.368588262875059e+03 + 162100 1.091320185823295e+00 -6.109419579965328e+00 -5.987112702523140e+00 3.105926312692027e+00 4.808231329893188e+00 9.177527352951554e+03 + 162120 9.650218503099308e-01 -5.965718561470987e+00 -6.018597216614165e+00 3.867625765566373e+00 4.563988344788804e+00 9.274212820527171e+03 + 162140 9.382335992437946e-01 -5.962217237872146e+00 -6.021462994470992e+00 3.919332706275117e+00 4.579134403633340e+00 9.283040067927392e+03 + 162160 9.015658370091538e-01 -5.931817713342571e+00 -6.034152972722895e+00 4.074571726123598e+00 4.486946830431573e+00 9.322179538115653e+03 + 162180 9.870960004589449e-01 -6.073547684052460e+00 -5.985446769899948e+00 3.244163274806891e+00 4.750052357443015e+00 9.172460878150367e+03 + 162200 9.806954074150837e-01 -6.070659784019922e+00 -6.019900101503564e+00 3.257848213705265e+00 4.549318165749670e+00 9.278259956232831e+03 + 162220 9.415940802769128e-01 -6.015741467183267e+00 -6.015657183116738e+00 3.620427132522930e+00 4.620911104675853e+00 9.265178082287170e+03 + 162240 9.749002984887419e-01 -6.065077502915942e+00 -5.965775573238829e+00 3.397652395716909e+00 4.967859442846850e+00 9.112281635094740e+03 + 162260 9.889995182611527e-01 -6.081689653391416e+00 -5.976828389816245e+00 3.223283733187179e+00 4.825413335863905e+00 9.146066123104461e+03 + 162280 9.344341437202388e-01 -5.992352692059560e+00 -5.987020613918317e+00 3.710118717084685e+00 4.740736334908128e+00 9.177231419058156e+03 + 162300 9.748656193246829e-01 -6.039307216165382e+00 -5.962005535830837e+00 3.483346037034853e+00 4.927224247912178e+00 9.100782666108676e+03 + 162320 1.000511510262489e+00 -6.060706311073877e+00 -5.990930068892450e+00 3.346330598700934e+00 4.746996579145275e+00 9.189224630975214e+03 + 162340 9.906717483345594e-01 -6.027900119262839e+00 -6.032071275693019e+00 3.505914000390729e+00 4.481962574684265e+00 9.315762758155262e+03 + 162360 9.727389429867523e-01 -5.983967006256304e+00 -5.989064642592261e+00 3.801439040447745e+00 4.772167623750006e+00 9.183528046182884e+03 + 162380 9.370000143472786e-01 -5.913474909046638e+00 -6.035654044730349e+00 4.109943677610943e+00 4.408372173354930e+00 9.326823156736391e+03 + 162400 9.607207698266811e-01 -5.930186910741354e+00 -6.066258682470469e+00 3.990067896322882e+00 4.208722726015680e+00 9.421559271683584e+03 + 162420 1.000904807420621e+00 -5.971153518175170e+00 -6.057198375997512e+00 3.812306540882992e+00 4.318223651868392e+00 9.393471207788283e+03 + 162440 1.063074931926065e+00 -6.048736308084578e+00 -5.991308515390546e+00 3.430154329686826e+00 4.759913602258157e+00 9.190407123757783e+03 + 162460 9.783235345045167e-01 -5.911536007488039e+00 -5.982771402991423e+00 4.197940171006210e+00 4.788895506383949e+00 9.164226324964749e+03 + 162480 1.011798587374074e+00 -5.949626275063929e+00 -6.025236910598455e+00 3.981421250705631e+00 4.547253280758354e+00 9.294657758259456e+03 + 162500 1.016236411617874e+00 -5.947600424656504e+00 -5.999474315669458e+00 3.963100354754034e+00 4.665232445098963e+00 9.215409672207938e+03 + 162520 1.014916187515347e+00 -5.938687135030134e+00 -5.962578543382540e+00 4.078835293853333e+00 4.941647129910330e+00 9.102468206135665e+03 + 162540 1.008018019160987e+00 -5.918492239783259e+00 -5.987581061233589e+00 4.111699167341499e+00 4.714980463113134e+00 9.178958902441862e+03 + 162560 1.075500680822997e+00 -6.008890143605986e+00 -5.999530025082767e+00 3.679337182058734e+00 4.733084431092717e+00 9.215602650410605e+03 + 162580 1.046367660064607e+00 -5.956329045255175e+00 -5.997003458955055e+00 3.923805538148841e+00 4.690246760338953e+00 9.207877056072901e+03 + 162600 1.087556120179716e+00 -6.007516013950550e+00 -5.988984877335006e+00 3.637780239090524e+00 4.744188893221100e+00 9.183284567118908e+03 + 162620 1.074638278292985e+00 -5.980528004659189e+00 -5.990371906421180e+00 3.803971028188393e+00 4.747445820932164e+00 9.187519502313087e+03 + 162640 1.043245900752999e+00 -5.929067782757871e+00 -6.038736157925413e+00 4.070866911396108e+00 4.441134130057871e+00 9.336366868949150e+03 + 162660 1.039160521047207e+00 -5.925900257140243e+00 -6.061902816142956e+00 4.077720034921594e+00 4.296772294800028e+00 9.408020127743672e+03 + 162680 9.843928189401719e-01 -5.855541284014834e+00 -6.047677127327080e+00 4.370688942718738e+00 4.267415197494159e+00 9.363972771180583e+03 + 162700 1.038018619339763e+00 -5.951056317868337e+00 -5.980928776035093e+00 3.958068627462837e+00 4.786536349921367e+00 9.158612889732603e+03 + 162720 1.049498226791958e+00 -5.990085082577055e+00 -5.966924115112179e+00 3.789037949087968e+00 4.922031808419417e+00 9.115780009034026e+03 + 162740 9.764649042420084e-01 -5.907579579280620e+00 -6.037014865277660e+00 4.171276711596098e+00 4.428039269355322e+00 9.331027849809743e+03 + 162760 1.002280575925416e+00 -5.974896049653909e+00 -6.047898239725459e+00 3.841069605753654e+00 4.421879733310411e+00 9.364679554737717e+03 + 162780 9.367232431622372e-01 -5.909315200303888e+00 -6.045374339919769e+00 4.127957742065977e+00 4.346685107307781e+00 9.356869139275375e+03 + 162800 1.023337490167012e+00 -6.065619190998289e+00 -6.009631096296134e+00 3.334828258651403e+00 4.656320562560828e+00 9.246637182675086e+03 + 162820 9.391641230340534e-01 -5.967936573542799e+00 -6.035175401876685e+00 3.871653509728072e+00 4.485557752259838e+00 9.325342649251603e+03 + 162840 9.982406249938827e-01 -6.079851641695286e+00 -5.982850326483566e+00 3.304433983555319e+00 4.861430546406030e+00 9.164484404631756e+03 + 162860 1.022149825200615e+00 -6.134635905823668e+00 -5.984323793753211e+00 2.989265996587172e+00 4.852381404819903e+00 9.168963871110949e+03 + 162880 9.028867144036470e-01 -5.972253582737718e+00 -5.990519603305319e+00 3.809507049772508e+00 4.704620733015791e+00 9.187978040069118e+03 + 162900 9.537243737902877e-01 -6.055545623705087e+00 -5.958638302897511e+00 3.417649402424467e+00 4.974106234860998e+00 9.090493009951697e+03 + 162920 9.009353873168511e-01 -5.977845546355162e+00 -6.030962599127580e+00 3.780049695205938e+00 4.475043358349366e+00 9.312317056532735e+03 + 162940 9.967274890825212e-01 -6.116238309874726e+00 -5.939075910105414e+00 3.079320189116680e+00 5.096614104384832e+00 9.030980376435722e+03 + 162960 9.551150106241686e-01 -6.043028906705282e+00 -6.022971725019599e+00 3.426091861007310e+00 4.541263302085335e+00 9.287708103959878e+03 + 162980 9.707844465767645e-01 -6.051298961933812e+00 -6.012937630540158e+00 3.429905733231805e+00 4.650182434491017e+00 9.256828261315619e+03 + 163000 9.504721624089499e-01 -6.000733888022360e+00 -6.024943153645596e+00 3.712058724167435e+00 4.573045374587065e+00 9.293786215797070e+03 + 163020 1.001942816810722e+00 -6.048358344867216e+00 -6.024779372655132e+00 3.415443266654861e+00 4.550837373930808e+00 9.293287172301116e+03 + 163040 9.726448810858962e-01 -5.971070356433644e+00 -6.031209885034774e+00 3.809993257082643e+00 4.464662777292978e+00 9.313111383930927e+03 + 163060 1.056822004940084e+00 -6.061268990986827e+00 -5.950807381318343e+00 3.394930007475542e+00 5.029217664070826e+00 9.066655622604640e+03 + 163080 1.035023577269626e+00 -5.990718993146752e+00 -6.009953136395916e+00 3.749205675072043e+00 4.638760248061291e+00 9.247619149178794e+03 + 163100 1.083404748665865e+00 -6.031484699168294e+00 -6.002797823024695e+00 3.472551910400550e+00 4.637276392496831e+00 9.225636273521766e+03 + 163120 1.029961737571383e+00 -5.930643402033360e+00 -5.994299745684120e+00 4.058275067483287e+00 4.692750491453282e+00 9.199456140779150e+03 + 163140 1.006500044492990e+00 -5.880168599127322e+00 -5.954088086758197e+00 4.374508783451136e+00 4.950051646470915e+00 9.076459707518168e+03 + 163160 1.021341420796735e+00 -5.889087167535349e+00 -5.952612909463833e+00 4.265637056045781e+00 4.900862415315632e+00 9.072118951004088e+03 + 163180 1.102174255070495e+00 -5.999582200395922e+00 -5.975082221480998e+00 3.687789116719556e+00 4.828471787008535e+00 9.140685184366535e+03 + 163200 1.074916227910037e+00 -5.958459344725615e+00 -6.007456019503113e+00 3.864988627576227e+00 4.583642138792912e+00 9.239929494730493e+03 + 163220 1.031999183212925e+00 -5.901256730511313e+00 -6.039509482859098e+00 4.173074084110078e+00 4.379205385584814e+00 9.338698303599080e+03 + 163240 9.908129333680146e-01 -5.849090945856749e+00 -6.043172879333421e+00 4.428039190756482e+00 4.313590694651291e+00 9.350069083270386e+03 + 163260 1.040035000549079e+00 -5.935327100027491e+00 -6.041383804940069e+00 3.991431255174567e+00 4.382437243344500e+00 9.344542838127043e+03 + 163280 1.012914866324482e+00 -5.909814323401996e+00 -6.056114883836060e+00 4.106170293320459e+00 4.266089835369502e+00 9.390097151539754e+03 + 163300 1.063950438858502e+00 -5.999699037718605e+00 -6.055104291589891e+00 3.635699495233416e+00 4.317553953569163e+00 9.386972210261274e+03 + 163320 1.020800939242729e+00 -5.951973579899263e+00 -5.999686509363075e+00 3.969407830436209e+00 4.695432805903026e+00 9.216079268812577e+03 + 163340 1.004198250813433e+00 -5.942349523135688e+00 -5.975567724521582e+00 4.000018613344225e+00 4.809274560486369e+00 9.142192276741494e+03 + 163360 9.604055335673590e-01 -5.888358760189602e+00 -6.038963129165378e+00 4.251672387025591e+00 4.386878794415906e+00 9.337035962611268e+03 + 163380 1.016118400904988e+00 -5.981573031122268e+00 -5.994832466311181e+00 3.781432786486708e+00 4.705295057741006e+00 9.201192776818678e+03 + 163400 1.069696318362005e+00 -6.070502946795155e+00 -5.977702371866958e+00 3.388543999708812e+00 4.921419261789080e+00 9.148717463480289e+03 + 163420 1.111639600391405e+00 -6.145131111428213e+00 -6.004611883163761e+00 2.889668092215974e+00 4.696551246190753e+00 9.231208042546805e+03 + 163440 9.410377197886891e-01 -5.905795474056436e+00 -6.014161036369930e+00 4.190751682706500e+00 4.568499854385847e+00 9.260571642272547e+03 + 163460 9.895054382125503e-01 -5.990045920506423e+00 -6.037143975034377e+00 3.706011206910298e+00 4.435566889410406e+00 9.331416250419768e+03 + 163480 1.012164183693893e+00 -6.035941493527857e+00 -5.997356744330350e+00 3.524375446480637e+00 4.745935047343364e+00 9.208938264206592e+03 + 163500 1.009824435500284e+00 -6.044733377523796e+00 -6.019256821638966e+00 3.476964849352322e+00 4.623255175727297e+00 9.276249603657676e+03 + 163520 9.743764793974828e-01 -6.005105155025115e+00 -5.982160951466256e+00 3.665357292354739e+00 4.797106459793731e+00 9.162372246012150e+03 + 163540 9.782538670304899e-01 -6.020339025114633e+00 -5.999060753610401e+00 3.514038853206116e+00 4.636221980985290e+00 9.214173151657869e+03 + 163560 9.637708838276348e-01 -6.006527977701047e+00 -5.999440828134971e+00 3.753456031126198e+00 4.794151540667455e+00 9.215318125149292e+03 + 163580 1.012948912259935e+00 -6.087057005986865e+00 -6.011785567369873e+00 3.238329190610547e+00 4.670549439366794e+00 9.253226830884154e+03 + 163600 9.380379958622476e-01 -5.982619258804082e+00 -5.991296877345834e+00 3.784789312703692e+00 4.734961084179819e+00 9.190315034937281e+03 + 163620 9.624239808206947e-01 -6.021986798087871e+00 -5.991574979313138e+00 3.602498921907172e+00 4.777128291525436e+00 9.191181330905007e+03 + 163640 9.915729883211112e-01 -6.065524940923495e+00 -6.005984682884772e+00 3.349817759623881e+00 4.691707135107386e+00 9.235430180974377e+03 + 163660 1.005791539039243e+00 -6.085055932118293e+00 -6.003594864534932e+00 3.221428110129323e+00 4.689190166252452e+00 9.228088257513855e+03 + 163680 9.738318964451762e-01 -6.031220400339741e+00 -5.972310972530724e+00 3.567312627226158e+00 4.905579677910029e+00 9.132249963818969e+03 + 163700 9.857612394836859e-01 -6.035898444142392e+00 -5.952929092829885e+00 3.532227757573354e+00 5.008650612275389e+00 9.073126169602065e+03 + 163720 9.899998083844502e-01 -6.019467234702422e+00 -6.000647515531145e+00 3.601929945657505e+00 4.709995685481106e+00 9.219030059041561e+03 + 163740 1.066477508583124e+00 -6.103649339581274e+00 -6.003910916709473e+00 3.164713055754777e+00 4.737426514355716e+00 9.229075151320347e+03 + 163760 9.984553751449995e-01 -5.973839283435900e+00 -6.065037219126345e+00 3.794368292184085e+00 4.270695632614611e+00 9.417753478146624e+03 + 163780 1.035742081107139e+00 -6.002217223004647e+00 -5.997819008268923e+00 3.706574422898288e+00 4.731829652532344e+00 9.210348058884816e+03 + 163800 1.046386270690945e+00 -5.991119700147747e+00 -5.995770362459373e+00 3.764985494557457e+00 4.738280671876437e+00 9.204076931247673e+03 + 163820 1.151657135190971e+00 -6.122836776228781e+00 -5.977467925448167e+00 3.067773491001744e+00 4.902503927940989e+00 9.148023866124824e+03 + 163840 1.053706559533024e+00 -5.961099759632146e+00 -6.033319466515727e+00 3.924052514855764e+00 4.509355781966719e+00 9.319617174997644e+03 + 163860 1.042518197407502e+00 -5.935913522725601e+00 -6.001547241426177e+00 4.060920516326876e+00 4.684041546763023e+00 9.221775979511598e+03 + 163880 9.474003437533657e-01 -5.788736288713352e+00 -6.031544196341009e+00 4.819735099313832e+00 4.425494519313554e+00 9.314097677476497e+03 + 163900 1.074305405256065e+00 -5.974523492726554e+00 -6.002309762607679e+00 3.846298831682461e+00 4.686745770113680e+00 9.224108107634556e+03 + 163920 1.007889602799791e+00 -5.879505993959864e+00 -6.016892886227452e+00 4.356405732296503e+00 4.567508936343146e+00 9.268957715356177e+03 + 163940 1.044677559747021e+00 -5.944481281121458e+00 -5.969636942903729e+00 4.021563067632306e+00 4.877115364852428e+00 9.124055508774458e+03 + 163960 1.027221349500734e+00 -5.933512550382947e+00 -6.039450931366778e+00 4.027148086532865e+00 4.418833509012229e+00 9.338538845344274e+03 + 163980 1.026723684419981e+00 -5.957187232066660e+00 -6.026554121701439e+00 3.924717028387941e+00 4.526401613613565e+00 9.298743483845719e+03 + 164000 1.001148612301440e+00 -5.952602981436852e+00 -5.995009058622275e+00 3.951127922985032e+00 4.707625665467098e+00 9.201737551174761e+03 + 164020 1.040598814036212e+00 -6.048149602228094e+00 -5.975575534250233e+00 3.445808164569852e+00 4.862539693699450e+00 9.142228015816350e+03 + 164040 1.010157865196069e+00 -6.042591860654753e+00 -6.000380442097256e+00 3.499593780260511e+00 4.741978277813566e+00 9.218223949433162e+03 + 164060 9.965545557205129e-01 -6.059411183244029e+00 -5.964776344971131e+00 3.383255836678075e+00 4.926663722734948e+00 9.109225091795615e+03 + 164080 9.205590259938137e-01 -5.975087765848401e+00 -6.013266413811673e+00 3.839013493531330e+00 4.619785788799541e+00 9.257828210865206e+03 + 164100 9.997428379265941e-01 -6.112717387232392e+00 -6.012282938153333e+00 3.149495914512092e+00 4.726206063304814e+00 9.254813795169808e+03 + 164120 9.391943001321162e-01 -6.037898976185831e+00 -6.013095508585970e+00 3.507864354232978e+00 4.650289703515588e+00 9.257307591381996e+03 + 164140 9.347531602786676e-01 -6.039330059431107e+00 -5.983529677842435e+00 3.497932409314997e+00 4.818346835478291e+00 9.166555652878609e+03 + 164160 9.077495228524818e-01 -5.998095474941739e+00 -6.024148291068508e+00 3.709718487983231e+00 4.560119186123057e+00 9.291326496648680e+03 + 164180 9.710037681415328e-01 -6.085741722473275e+00 -5.980047733764549e+00 3.232545829565282e+00 4.839457068822682e+00 9.155924905455342e+03 + 164200 9.634742117934106e-01 -6.066054884551777e+00 -5.952609868592730e+00 3.327433674254823e+00 4.978852511451155e+00 9.072155088132542e+03 + 164220 9.737657226828359e-01 -6.068103944819762e+00 -5.970419811463053e+00 3.361890691509720e+00 4.922808101814725e+00 9.126465421560255e+03 + 164240 1.025347507824341e+00 -6.128879148094189e+00 -5.983761560738776e+00 3.003276549986028e+00 4.836564193454880e+00 9.167272355147448e+03 + 164260 9.260151703808808e-01 -5.966032701227707e+00 -6.002290116897621e+00 3.880061557804798e+00 4.671865866211210e+00 9.224058387521420e+03 + 164280 9.088679675065678e-01 -5.924787733715312e+00 -6.000522737883025e+00 4.053639161160117e+00 4.618757047275091e+00 9.218631627012866e+03 + 164300 9.554343924527755e-01 -5.975371484028456e+00 -6.017784914026086e+00 3.750014138007297e+00 4.506469659503828e+00 9.271733924403037e+03 + 164320 1.014999190760925e+00 -6.046400218696409e+00 -5.991700840111424e+00 3.471863304258410e+00 4.785955600794876e+00 9.191590606560843e+03 + 164340 9.794605932056099e-01 -5.980502060234826e+00 -6.024036767281658e+00 3.789713980745391e+00 4.539730955908339e+00 9.290988044515761e+03 + 164360 9.912905336467982e-01 -5.986967607936889e+00 -5.984658931851858e+00 3.796646585534019e+00 4.809903360880736e+00 9.170028376931246e+03 + 164380 1.006306591423076e+00 -6.001104509033086e+00 -6.014904668087472e+00 3.679786444106994e+00 4.600543795248997e+00 9.262877483234090e+03 + 164400 1.023377649365099e+00 -6.020564607445333e+00 -6.011410892923048e+00 3.550192290467698e+00 4.602754335787404e+00 9.252107682440335e+03 + 164420 9.328673012246472e-01 -5.882695046251074e+00 -6.014718068248436e+00 4.259696954859773e+00 4.501600332054296e+00 9.262299805309734e+03 + 164440 1.016827232579926e+00 -6.002194922242476e+00 -6.034617342442528e+00 3.656985956588251e+00 4.470811402446243e+00 9.323616686241223e+03 + 164460 1.036338013709010e+00 -6.029480616399830e+00 -5.999909087190472e+00 3.503187913894854e+00 4.672992210794343e+00 9.216784916911967e+03 + 164480 9.610438520059726e-01 -5.919402168658439e+00 -6.019990138650178e+00 4.090134813549580e+00 4.512543123918968e+00 9.278522845314883e+03 + 164500 1.042346296799027e+00 -6.041818960537751e+00 -5.989303552405087e+00 3.465550893079034e+00 4.767102493309937e+00 9.184224768918019e+03 + 164520 9.762053677456177e-01 -5.944723295874420e+00 -6.025092125807031e+00 3.999874366942788e+00 4.538384108433495e+00 9.294241550477514e+03 + 164540 1.037437641964744e+00 -6.037301361740465e+00 -5.987910667368582e+00 3.509147787793486e+00 4.792756798062086e+00 9.179982193796408e+03 + 164560 1.060507657566253e+00 -6.074512083154907e+00 -5.981489187004776e+00 3.287400022563187e+00 4.821551887503898e+00 9.160326733794582e+03 + 164580 1.009953483709239e+00 -6.003884889041220e+00 -6.013491818410135e+00 3.693848692357249e+00 4.638684217253424e+00 9.258526161231974e+03 + 164600 9.703800688783961e-01 -5.952020150220163e+00 -6.021571695190870e+00 3.927894452199904e+00 4.528518717911304e+00 9.283393265132390e+03 + 164620 9.951182734581367e-01 -5.997277524847433e+00 -5.996937044888913e+00 3.686348807113879e+00 4.688303895724805e+00 9.207645375072056e+03 + 164640 1.029900498279307e+00 -6.057829276102006e+00 -5.952125688131627e+00 3.381679036543445e+00 4.988645396246739e+00 9.070667870623885e+03 + 164660 9.339333962974141e-01 -5.925518548549439e+00 -6.014936134552197e+00 4.085988492614581e+00 4.572538876460029e+00 9.262940150209461e+03 + 164680 9.928042499109493e-01 -6.025634291130154e+00 -6.012632213811476e+00 3.523739563686708e+00 4.598399503715518e+00 9.255880830550444e+03 + 164700 1.022314980096026e+00 -6.090985547840610e+00 -5.984038935122218e+00 3.191665881802741e+00 4.805769881966578e+00 9.168151685712606e+03 + 164720 9.493251713294495e-01 -6.015061655732826e+00 -5.984521171268804e+00 3.581558311207185e+00 4.756926499124303e+00 9.169599027051994e+03 + 164740 9.250030631040805e-01 -6.014946754057609e+00 -5.968548873147141e+00 3.618237799755583e+00 4.884661611992358e+00 9.120745128924173e+03 + 164760 8.957604227974576e-01 -6.004346797579313e+00 -6.010089347757078e+00 3.618362590556935e+00 4.585387978779440e+00 9.248045875397547e+03 + 164780 9.401081050610942e-01 -6.097435501725895e+00 -5.949538169053088e+00 3.188825300592019e+00 5.038074671837544e+00 9.062791390288863e+03 + 164800 8.849313242926307e-01 -6.030885700530975e+00 -6.015866383026191e+00 3.513869384682043e+00 4.600112630026387e+00 9.265812984024480e+03 + 164820 9.475376462877442e-01 -6.131912072496372e+00 -6.013788327782378e+00 2.978734588237069e+00 4.657019409975243e+00 9.259441202083273e+03 + 164840 9.288246417134460e-01 -6.107607674129375e+00 -5.968807078753969e+00 3.126700918370944e+00 4.923715416339245e+00 9.121543472544719e+03 + 164860 8.765253427884372e-01 -6.024618913805066e+00 -5.967463707459770e+00 3.596783259771603e+00 4.924977299345887e+00 9.117402470339419e+03 + 164880 9.202121176437905e-01 -6.073162655874746e+00 -5.961746781654242e+00 3.294948835127963e+00 4.934716026452906e+00 9.099971335902635e+03 + 164900 9.225935698921532e-01 -6.047898331563763e+00 -5.964556484191908e+00 3.432668908872099e+00 4.911230693590493e+00 9.108568582994296e+03 + 164920 9.433908401047710e-01 -6.040104701714657e+00 -5.997534226405241e+00 3.498194863076288e+00 4.742641120062720e+00 9.209466001798819e+03 + 164940 1.003673116050245e+00 -6.088890538275883e+00 -5.990985992603713e+00 3.227549940054497e+00 4.789732991983572e+00 9.189398745604778e+03 + 164960 9.730000155384259e-01 -6.006727427412576e+00 -6.017739379305995e+00 3.636382543039278e+00 4.573150211173221e+00 9.271600044158855e+03 + 164980 1.040226228389026e+00 -6.075652661830345e+00 -6.016192965888443e+00 3.249952193294599e+00 4.591378968751208e+00 9.266818130837146e+03 + 165000 9.485760128758511e-01 -5.916739880682917e+00 -6.038211848633807e+00 4.164629848290448e+00 4.467119010590152e+00 9.334698910870449e+03 + 165020 1.004338661138920e+00 -5.982342819411682e+00 -5.975416570285288e+00 3.803168766846267e+00 4.842940361163604e+00 9.141716379336685e+03 + 165040 1.025798720264593e+00 -5.998951243390087e+00 -5.974936944294774e+00 3.688833833790155e+00 4.826727655396210e+00 9.140272108101739e+03 + 165060 1.003435804799144e+00 -5.953229585891919e+00 -6.019721463272913e+00 3.939700335542775e+00 4.557893686036337e+00 9.277688599837869e+03 + 165080 1.023505971491609e+00 -5.975407418081673e+00 -6.007931373477128e+00 3.833526532175669e+00 4.646768947229137e+00 9.241432874286229e+03 + 165100 1.049064042629113e+00 -6.007848012516179e+00 -6.053515481276627e+00 3.656771876136098e+00 4.394542203495659e+00 9.382071146334752e+03 + 165120 1.019383119958062e+00 -5.965030087726134e+00 -6.020341984081133e+00 3.858953390254117e+00 4.541343921895418e+00 9.279629926039319e+03 + 165140 1.001690158256775e+00 -5.944295090482152e+00 -6.015005865600621e+00 3.976859745164647e+00 4.570827531977312e+00 9.263186794054638e+03 + 165160 1.049738465969482e+00 -6.023729097383256e+00 -5.983651347700286e+00 3.590806562212399e+00 4.820939202903736e+00 9.166898929423471e+03 + 165180 9.636501491588934e-01 -5.904744065965029e+00 -5.992244146206106e+00 4.242949301047306e+00 4.740510299709388e+00 9.193212975310804e+03 + 165200 1.025258224193686e+00 -6.005928149157295e+00 -6.005127683896401e+00 3.671514549545745e+00 4.676110944945404e+00 9.232777493005377e+03 + 165220 1.026234815562151e+00 -6.019981500497336e+00 -5.994403415447916e+00 3.594339374152157e+00 4.741212696701792e+00 9.199879284976867e+03 + 165240 1.010692402426985e+00 -6.015280687912606e+00 -6.008938028854272e+00 3.579800376329372e+00 4.616220906165644e+00 9.244489875345780e+03 + 165260 9.958459826280568e-01 -6.015420466235421e+00 -5.971628744385946e+00 3.620178211255779e+00 4.871637054862516e+00 9.130148866101130e+03 + 165280 9.733309830510544e-01 -6.008105975359985e+00 -6.027081888650535e+00 3.600676876682349e+00 4.491714246054918e+00 9.300375430227881e+03 + 165300 1.009737757280632e+00 -6.096129980779802e+00 -6.004700124643508e+00 3.193487373427120e+00 4.718491756086231e+00 9.231496998792160e+03 + 165320 9.843741141344144e-01 -6.098210700652363e+00 -5.983104493293110e+00 3.183509056415958e+00 4.844466711700806e+00 9.165263948996804e+03 + 165340 9.243284270515657e-01 -6.048056412374070e+00 -5.956390524854450e+00 3.484450559373542e+00 5.010810270761450e+00 9.083659881976448e+03 + 165360 8.907231733043808e-01 -6.027316084208714e+00 -5.946632306464855e+00 3.564474273568815e+00 5.027773011148309e+00 9.053936257339396e+03 + 165380 9.621516755979446e-01 -6.152900710350401e+00 -5.951159655485034e+00 2.893534183699023e+00 5.051962540063306e+00 9.067717135272927e+03 + 165400 8.786023297483069e-01 -6.039175390218580e+00 -5.991528408780200e+00 3.462821029995646e+00 4.736417370761376e+00 9.191044603199283e+03 + 165420 9.030535142006715e-01 -6.076824625405761e+00 -5.978259638960235e+00 3.278941126633664e+00 4.844916531686232e+00 9.150417225317613e+03 + 165440 9.384210810024903e-01 -6.121828135819438e+00 -5.957243171617885e+00 3.050192133929255e+00 4.995264467815471e+00 9.086251331064666e+03 + 165460 8.897762294335501e-01 -6.030886984251786e+00 -5.994055922660507e+00 3.523830702489797e+00 4.735320357735280e+00 9.198799518438182e+03 + 165480 9.994282040887725e-01 -6.162191113867421e+00 -5.958386898306436e+00 2.861773097965289e+00 5.032048442316897e+00 9.089761991079800e+03 + 165500 9.971206320466740e-01 -6.117940729250219e+00 -5.980881733164880e+00 3.040590299405847e+00 4.827604264738960e+00 9.158465804244204e+03 + 165520 9.761711005018174e-01 -6.043970069606521e+00 -5.990739964630398e+00 3.475112546174070e+00 4.780768046279094e+00 9.188647761458376e+03 + 165540 1.035273136539422e+00 -6.096296131011345e+00 -5.963290698379604e+00 3.177971886619802e+00 4.941709663315441e+00 9.104703643051987e+03 + 165560 9.758216236204874e-01 -5.981089681071365e+00 -5.979377071309673e+00 3.804930472451016e+00 4.814764542728158e+00 9.153819705760734e+03 + 165580 1.010461771277313e+00 -6.015165521565926e+00 -5.988342935810744e+00 3.636819254900908e+00 4.790838693088898e+00 9.181291453791784e+03 + 165600 9.691019331948778e-01 -5.942450293628315e+00 -6.024751028018762e+00 3.999089459184135e+00 4.526505906316706e+00 9.293183347706548e+03 + 165620 9.923186158230185e-01 -5.971314126292355e+00 -5.983936831730908e+00 3.855936055244825e+00 4.783454527259301e+00 9.167791615474473e+03 + 165640 1.078302801599700e+00 -6.095078609793026e+00 -5.955873158699093e+00 3.177685714815525e+00 4.977024956970819e+00 9.082071313609280e+03 + 165660 9.311821229559124e-01 -5.872082565210619e+00 -6.010247587926930e+00 4.401036049932481e+00 4.607671108527259e+00 9.248523414495688e+03 + 165680 1.062579220576476e+00 -6.062358379254521e+00 -6.005014808535655e+00 3.330944881450582e+00 4.660220538407195e+00 9.232457077471350e+03 + 165700 1.056556873137881e+00 -6.051107923708167e+00 -6.022292625386584e+00 3.406200374179809e+00 4.571662276295347e+00 9.285641918822525e+03 + 165720 1.017147101764566e+00 -5.995754872314279e+00 -5.986917525336507e+00 3.734607246423048e+00 4.785352660344440e+00 9.176915713326454e+03 + 165740 9.154976146008741e-01 -5.849176589367297e+00 -5.992772070926649e+00 4.456924663485013e+00 4.632377187042262e+00 9.194835858946353e+03 + 165760 9.994773796181111e-01 -5.975322884928745e+00 -5.954680514831860e+00 3.802068202129567e+00 4.920599885622325e+00 9.078437063705951e+03 + 165780 1.025981430479790e+00 -6.014688574115288e+00 -5.986742110563571e+00 3.581903365967659e+00 4.742376284382876e+00 9.176373960366840e+03 + 165800 1.040793690792459e+00 -6.037164619001456e+00 -5.997674810553200e+00 3.465291107940094e+00 4.692047699078093e+00 9.209909844156758e+03 + 165820 1.028193796465471e+00 -6.021265251375336e+00 -6.002239333211423e+00 3.582886274775400e+00 4.692136041123907e+00 9.223905635943906e+03 + 165840 9.671673989090588e-01 -5.936378308552662e+00 -5.990152221977931e+00 4.033979973435962e+00 4.725201841061856e+00 9.186836173859780e+03 + 165860 1.016879579298759e+00 -6.015934692656344e+00 -5.979798755952325e+00 3.609186145655891e+00 4.816684286228492e+00 9.155129209536721e+03 + 165880 1.045847695708238e+00 -6.064474956963316e+00 -5.986080002468832e+00 3.387261563671946e+00 4.837417523959281e+00 9.174363202115013e+03 + 165900 9.840096485733572e-01 -5.980526574397962e+00 -6.012525239080682e+00 3.817919011668978e+00 4.634177727283443e+00 9.255534862722076e+03 + 165920 9.836662868989957e-01 -5.993755372664696e+00 -5.969842218126887e+00 3.724982345242907e+00 4.862295379147708e+00 9.124678526388039e+03 + 165940 9.376646757167715e-01 -5.938448252698278e+00 -5.930985424463248e+00 4.021063405800198e+00 5.063916120394680e+00 9.006367349024009e+03 + 165960 1.003719267699708e+00 -6.045209768493768e+00 -5.939359758519990e+00 3.439377934603434e+00 5.047185072108976e+00 9.031819383049238e+03 + 165980 9.676595887333380e-01 -5.996591003719549e+00 -6.001336576957520e+00 3.723151808293415e+00 4.695901992385897e+00 9.221154791038958e+03 + 166000 1.021366316972018e+00 -6.082467577148750e+00 -6.003992326809521e+00 3.229732615779352e+00 4.680349647232950e+00 9.229308378019481e+03 + 166020 9.440426354839239e-01 -5.977383035533467e+00 -6.019238950417140e+00 3.790183026642150e+00 4.549839886198208e+00 9.276200143157472e+03 + 166040 9.751121998279721e-01 -6.031536130121589e+00 -5.991020218366491e+00 3.533733545618579e+00 4.766382180733433e+00 9.189493859998036e+03 + 166060 9.649609600857295e-01 -6.019596152418438e+00 -5.993805589669060e+00 3.627872069775775e+00 4.775965472159387e+00 9.198049828115123e+03 + 166080 9.350322020480325e-01 -5.976007141489054e+00 -6.067549605675595e+00 3.814129630663037e+00 4.288478635153376e+00 9.425590718367283e+03 + 166100 9.912352340088673e-01 -6.059413109288780e+00 -6.037082652096245e+00 3.342639164059880e+00 4.470864104886497e+00 9.331270677846542e+03 + 166120 9.507049665548862e-01 -5.999048629952195e+00 -6.041236210851309e+00 3.689741999403311e+00 4.447494381373552e+00 9.344080585791826e+03 + 166140 9.819722596252993e-01 -6.043576922555983e+00 -6.004579298161347e+00 3.480617597250158e+00 4.704547991387032e+00 9.231114877500484e+03 + 166160 9.557712411997997e-01 -5.999369111723094e+00 -5.973979568266683e+00 3.706688377090788e+00 4.852479064636650e+00 9.137339074114507e+03 + 166180 1.003077320573980e+00 -6.057801007173517e+00 -5.964311998649931e+00 3.436887417319133e+00 4.973715771638879e+00 9.107813309499033e+03 + 166200 9.152244053688136e-01 -5.908978929244306e+00 -6.017054069704354e+00 4.122658528053699e+00 4.502074346958165e+00 9.269448511866913e+03 + 166220 9.714002374921845e-01 -5.967641067178317e+00 -6.001563904275963e+00 3.861004831247579e+00 4.666214651090817e+00 9.221831840107876e+03 + 166240 9.971245341694073e-01 -5.974991837373670e+00 -6.016655496592596e+00 3.841406129410745e+00 4.602166950745240e+00 9.268244341449330e+03 + 166260 1.051456546306953e+00 -6.026465305352705e+00 -5.968869464768817e+00 3.566897372991253e+00 4.897621602551460e+00 9.121744803038897e+03 + 166280 1.004488020071721e+00 -5.925882122745504e+00 -6.083361639638611e+00 4.094150598519088e+00 4.189878842642391e+00 9.474728525577404e+03 + 166300 9.842792119752980e-01 -5.871339428089427e+00 -6.069480596534211e+00 4.376974357391578e+00 4.239217105934907e+00 9.431564871169452e+03 + 166320 1.030207135606775e+00 -5.922576725769554e+00 -5.989827256061607e+00 4.114561309872214e+00 4.728398357949320e+00 9.185793698699012e+03 + 166340 1.063656322893622e+00 -5.958060562323180e+00 -5.942610165168730e+00 3.974204318523167e+00 5.062922889925245e+00 9.041646359999131e+03 + 166360 1.071397678600928e+00 -5.958258573659499e+00 -5.986942524807199e+00 3.863721868287424e+00 4.699014181970236e+00 9.176972899437131e+03 + 166380 1.097541656331303e+00 -5.989807609216938e+00 -5.992178885235467e+00 3.742659406972492e+00 4.729043173120321e+00 9.193050677276737e+03 + 166400 1.121987518250165e+00 -6.026945032909869e+00 -5.970920856527115e+00 3.556489521463527e+00 4.878189011966573e+00 9.127998598703743e+03 + 166420 1.038093856137929e+00 -5.912192707342580e+00 -6.002538626660161e+00 4.161345894572353e+00 4.642565644864971e+00 9.224840489406277e+03 + 166440 1.043058568671170e+00 -5.936622088711750e+00 -6.017635117648088e+00 4.010469484408535e+00 4.545280135530371e+00 9.271276504949272e+03 + 166460 1.042397914242696e+00 -5.965482401389670e+00 -6.050521041420506e+00 3.877607491651559e+00 4.389302460907484e+00 9.372788220511211e+03 + 166480 1.026712458978544e+00 -5.986581902237359e+00 -6.016849614825443e+00 3.741897054845425e+00 4.568095165251261e+00 9.268845068668041e+03 + 166500 1.030073489694778e+00 -6.044981602779193e+00 -5.996304298543407e+00 3.460624364526777e+00 4.740136978237145e+00 9.205716339442963e+03 + 166520 1.002267262515550e+00 -6.055665248128250e+00 -6.011079803452339e+00 3.351035604290656e+00 4.607052127195001e+00 9.251100767203128e+03 + 166540 9.592375394269405e-01 -6.033233902651163e+00 -5.950490857213076e+00 3.497809037074869e+00 4.972932408425262e+00 9.065707169327261e+03 + 166560 9.472764038207523e-01 -6.038211383848202e+00 -5.958668491001109e+00 3.526911076595662e+00 4.983658676546556e+00 9.090605348840838e+03 + 166580 9.270077687206861e-01 -6.019051814326366e+00 -5.950050050054109e+00 3.603569626881888e+00 4.999788435321699e+00 9.064331488556565e+03 + 166600 9.228004999978331e-01 -6.013671360073827e+00 -5.977781850685394e+00 3.564564131077238e+00 4.770647247869245e+00 9.148956876736127e+03 + 166620 9.685289094344968e-01 -6.074926482056385e+00 -5.971458416785779e+00 3.265825589064309e+00 4.859955231479478e+00 9.129638468680505e+03 + 166640 9.762603787504949e-01 -6.076111251644694e+00 -5.979794794979989e+00 3.255178013768556e+00 4.808242012860784e+00 9.155144633554966e+03 + 166660 1.019411900711306e+00 -6.127186351758633e+00 -5.916042015315389e+00 3.057790550030562e+00 5.270214004368135e+00 8.961096202900406e+03 + 166680 9.692385627129526e-01 -6.036882221095866e+00 -5.944396484792606e+00 3.499580141075626e+00 5.030647551050384e+00 9.047153373532828e+03 + 166700 9.141862075137208e-01 -5.935025342098744e+00 -6.034331232236426e+00 3.967617875059701e+00 4.397388086352304e+00 9.322700541313099e+03 + 166720 9.955375652140142e-01 -6.031958649147912e+00 -5.980999679462830e+00 3.511817739817498e+00 4.804432029624312e+00 9.158805744051988e+03 + 166740 9.974304841977606e-01 -6.008119636069985e+00 -6.010248397196195e+00 3.692433476967455e+00 4.680209801156035e+00 9.248524825898457e+03 + 166760 1.014849478741141e+00 -6.010245509209287e+00 -6.061228281768240e+00 3.584302821255048e+00 4.291551851662985e+00 9.405970151684685e+03 + 166780 1.116486067605308e+00 -6.142537936685952e+00 -6.008389928090300e+00 2.920718904131308e+00 4.691017528824783e+00 9.242844523710173e+03 + 166800 9.726967910680372e-01 -5.914687152553438e+00 -6.072939760129119e+00 4.171232737603592e+00 4.262521775392160e+00 9.442322836636364e+03 + 166820 1.021159149251269e+00 -5.977277267235523e+00 -6.031061574467302e+00 3.816795440882591e+00 4.507957625663070e+00 9.312648860731306e+03 + 166840 1.032641269512210e+00 -5.988898225387757e+00 -6.003084020282319e+00 3.762444657011272e+00 4.680987627482033e+00 9.226522254052457e+03 + 166860 1.035296046602321e+00 -5.990472795353280e+00 -5.972710721262479e+00 3.733542399200416e+00 4.835534977301874e+00 9.133455359394957e+03 + 166880 1.010769852092382e+00 -5.952499687129150e+00 -5.989172944022894e+00 3.964594425943198e+00 4.754010909691152e+00 9.183815733280160e+03 + 166900 1.025041371477794e+00 -5.975494767215718e+00 -5.951337652547778e+00 3.904908425522170e+00 5.043622316246894e+00 9.068231702300574e+03 + 166920 9.982603960559440e-01 -5.937353199110719e+00 -6.047248092926822e+00 3.944199734460505e+00 4.313166247988589e+00 9.362655713611073e+03 + 166940 1.038186110608346e+00 -6.000671641367780e+00 -6.011229584403312e+00 3.676776295503718e+00 4.616150952757289e+00 9.251574028540548e+03 + 166960 1.053805846686334e+00 -6.034809236768497e+00 -6.003875027399162e+00 3.499874733533840e+00 4.677503750785995e+00 9.228934532508389e+03 + 166980 1.021046552157900e+00 -6.007452666074796e+00 -5.958075905203686e+00 3.702218895373908e+00 4.985747897324869e+00 9.088780451363531e+03 + 167000 1.058406708839200e+00 -6.096007104866924e+00 -5.936283977704912e+00 3.213383007150781e+00 5.130537920389100e+00 9.022493762529441e+03 + 167020 9.631677268727427e-01 -5.994995669486617e+00 -6.012774544480179e+00 3.682705195888725e+00 4.580616144403674e+00 9.256319593386395e+03 + 167040 1.025524366499356e+00 -6.133849350657677e+00 -6.014520316725015e+00 2.947590070846558e+00 4.632795849796224e+00 9.261700125021669e+03 + 167060 9.516034436000417e-01 -6.067584461345720e+00 -6.031384134722598e+00 3.294033303253995e+00 4.501901180706399e+00 9.313655522175761e+03 + 167080 9.369818092597044e-01 -6.079162554677797e+00 -5.965355963107049e+00 3.335535843350514e+00 4.989030903662877e+00 9.111013686531536e+03 + 167100 9.387693991862996e-01 -6.102566939777946e+00 -5.993747292175476e+00 3.136142104779732e+00 4.761001361099158e+00 9.197852729205526e+03 + 167120 9.762403772719263e-01 -6.169835888702647e+00 -5.953476235616520e+00 2.819866626558796e+00 5.062237236127438e+00 9.074790791055389e+03 + 167140 9.574426153331849e-01 -6.144455533093416e+00 -5.959471085236828e+00 2.942496597572488e+00 5.004705923415806e+00 9.093057633339347e+03 + 167160 8.452208070026784e-01 -5.971302993692965e+00 -6.029120632117292e+00 3.836383768446855e+00 4.504385941363742e+00 9.306655335361873e+03 + 167180 9.535842207485695e-01 -6.117304545157376e+00 -5.965657711521173e+00 3.065158750668746e+00 4.935938336679490e+00 9.111940371713146e+03 + 167200 9.585362162398349e-01 -6.102063705455821e+00 -5.975129860558967e+00 3.130370999535465e+00 4.859244779882214e+00 9.140870279055116e+03 + 167220 9.402637813005357e-01 -6.045862280474664e+00 -5.990854421503414e+00 3.445122223785953e+00 4.760985862437529e+00 9.189004042558718e+03 + 167240 8.999909555870045e-01 -5.952940066288223e+00 -6.017175143322012e+00 3.963132074831851e+00 4.594284322157789e+00 9.269837289146264e+03 + 167260 1.013687076921721e+00 -6.087656353722195e+00 -5.954547218874366e+00 3.244767600092489e+00 5.009100850960769e+00 9.078032959650005e+03 + 167280 9.998027532802858e-01 -6.035106525257122e+00 -5.969369665105679e+00 3.547843176442008e+00 4.925314400177822e+00 9.123244960390515e+03 + 167300 1.007914329766234e+00 -6.018987260135010e+00 -5.999330177143257e+00 3.617849083151666e+00 4.730723095614070e+00 9.215010904356996e+03 + 167320 1.011417681646572e+00 -6.004726918262120e+00 -6.025997927082499e+00 3.608721374586011e+00 4.486579950261421e+00 9.297046788001833e+03 + 167340 1.003446829367902e+00 -5.980070465071472e+00 -6.011936653972316e+00 3.809171141926820e+00 4.626190553981383e+00 9.253712767476109e+03 + 167360 9.903574759227143e-01 -5.950768614455566e+00 -6.052274018039512e+00 3.904944832716994e+00 4.322085097427538e+00 9.378197493337326e+03 + 167380 1.010566060085903e+00 -5.973195831889321e+00 -6.017103920727397e+00 3.801283325499440e+00 4.549156284636419e+00 9.269618602832132e+03 + 167400 9.774959730960828e-01 -5.921148474866386e+00 -6.002474510068009e+00 4.128252878710813e+00 4.661266199419825e+00 9.224636344063545e+03 + 167420 1.048433102258171e+00 -6.024653560956384e+00 -5.972886282625062e+00 3.592090975599926e+00 4.889346698738814e+00 9.133970276666967e+03 + 167440 1.056492335413519e+00 -6.034803065721652e+00 -5.996897033842286e+00 3.532379288666400e+00 4.750041589657197e+00 9.207504246120096e+03 + 167460 9.526873521994242e-01 -5.882505268868856e+00 -6.046656464811663e+00 4.317864062436735e+00 4.375282493017663e+00 9.360784036133218e+03 + 167480 9.505860375494879e-01 -5.881276836129248e+00 -5.993896826470424e+00 4.352946850190014e+00 4.706265437763800e+00 9.198313576162969e+03 + 167500 1.007152896698728e+00 -5.966713902806125e+00 -6.010089472973124e+00 3.884763490087220e+00 4.635694253840521e+00 9.248060470260079e+03 + 167520 1.057109516430551e+00 -6.044631923699367e+00 -6.029809928152686e+00 3.444728922808973e+00 4.529839114934411e+00 9.308803046954694e+03 + 167540 1.015474586731282e+00 -5.993295151067107e+00 -6.056419809972598e+00 3.741122389383079e+00 4.378650829438352e+00 9.391061344039941e+03 + 167560 1.103267502638440e+00 -6.138543478410689e+00 -5.968111758702340e+00 2.983487948368567e+00 4.962133257157295e+00 9.119428193562093e+03 + 167580 1.011987943917144e+00 -6.024388011722388e+00 -6.006618311686128e+00 3.593598372312561e+00 4.695634739772963e+00 9.237382299443971e+03 + 167600 1.020786890643810e+00 -6.068583823415978e+00 -5.996521771877996e+00 3.346971566202682e+00 4.760763017700211e+00 9.206379033979807e+03 + 167620 8.999776465660398e-01 -5.927674270559208e+00 -5.999975762190043e+00 4.097070472115647e+00 4.681904118551723e+00 9.216960410620663e+03 + 167640 9.786029393546344e-01 -6.083334419564388e+00 -5.983659550959781e+00 3.212855431234266e+00 4.785203951397988e+00 9.166949701106143e+03 + 167660 9.488041937863054e-01 -6.077434899922848e+00 -5.980856045509015e+00 3.262791056525370e+00 4.817361784099014e+00 9.158348848080563e+03 + 167680 8.871397692184833e-01 -6.014336746801713e+00 -5.959679735002371e+00 3.627789458318813e+00 4.941638478215874e+00 9.093675271537535e+03 + 167700 9.141447462819622e-01 -6.071520657001473e+00 -5.976921396863204e+00 3.319198288999456e+00 4.862401879901592e+00 9.146343176722963e+03 + 167720 9.671712224205127e-01 -6.158148273061348e+00 -5.988713835169087e+00 2.804674118247454e+00 4.777592880519349e+00 9.182475964308078e+03 + 167740 9.130737767028931e-01 -6.078627818928707e+00 -6.020615104540776e+00 3.287285658987119e+00 4.620403642441155e+00 9.280455902872303e+03 + 167760 9.320927445643246e-01 -6.102086887639029e+00 -5.974653966135145e+00 3.155649319668052e+00 4.887388875124222e+00 9.139420861768966e+03 + 167780 9.664646798899579e-01 -6.140207428405105e+00 -5.954241852029272e+00 2.938077136890087e+00 5.005920254520065e+00 9.077115456775997e+03 + 167800 8.905025489346398e-01 -6.004700266883127e+00 -6.006646736190191e+00 3.662914725014806e+00 4.651737797038487e+00 9.237477529598349e+03 + 167820 9.671711076156827e-01 -6.086194227380280e+00 -5.963895725388481e+00 3.249074669388143e+00 4.951331593457073e+00 9.106557671901859e+03 + 167840 9.558555888222361e-01 -6.031571023274830e+00 -5.984322812136201e+00 3.548695828035738e+00 4.820002368030786e+00 9.168996103421545e+03 + 167860 9.941312425570010e-01 -6.047917239170769e+00 -6.029744249511456e+00 3.453411552599492e+00 4.557763671484326e+00 9.308580789661381e+03 + 167880 1.047614694329666e+00 -6.097049477962578e+00 -6.018168012326317e+00 3.158363218168950e+00 4.611312800719716e+00 9.272914644139581e+03 + 167900 9.595174620958807e-01 -5.948446997521113e+00 -6.028974482131387e+00 4.037311392084650e+00 4.574910113864489e+00 9.306211059498162e+03 + 167920 1.038409102290184e+00 -6.053425900963605e+00 -6.016100138807943e+00 3.441980861536831e+00 4.656311163977666e+00 9.266559779257997e+03 + 167940 9.962512785341822e-01 -5.985124061638791e+00 -6.033148323377055e+00 3.784261858671432e+00 4.508499116039836e+00 9.319109479660707e+03 + 167960 1.018469306023284e+00 -6.015143995841250e+00 -6.027995037155034e+00 3.616134726292700e+00 4.542342058376736e+00 9.303157278189256e+03 + 167980 1.049402970640187e+00 -6.060302199423786e+00 -5.992139241841528e+00 3.436971627707801e+00 4.828373878328723e+00 9.192947828240067e+03 + 168000 9.810102854473706e-01 -5.959454075944157e+00 -6.001272661122109e+00 3.971674009441736e+00 4.731545221944793e+00 9.220964176139823e+03 + 168020 1.027339122616754e+00 -6.028270509025845e+00 -6.010649510898904e+00 3.508332426604620e+00 4.609514924690163e+00 9.249773796119012e+03 + 168040 1.034033703170494e+00 -6.040498727702604e+00 -6.009356623121044e+00 3.467739382983012e+00 4.646562166715440e+00 9.245791153997341e+03 + 168060 9.520555741662647e-01 -5.923569241307943e+00 -5.988082677962063e+00 4.107520246933445e+00 4.737074110243433e+00 9.180511942955938e+03 + 168080 1.016959251833817e+00 -6.023453010255251e+00 -6.015697184080325e+00 3.580621352052153e+00 4.625156506158796e+00 9.265283188786789e+03 + 168100 9.984689731714895e-01 -5.998755417719217e+00 -6.055864365979149e+00 3.623059074325277e+00 4.295130655835569e+00 9.389328111051282e+03 + 168120 9.757081330891263e-01 -5.970650392196534e+00 -6.008033443939251e+00 3.861285452328307e+00 4.646626184213067e+00 9.241711358461636e+03 + 168140 9.861241669275939e-01 -5.991287377986544e+00 -6.007568997474019e+00 3.671226416002647e+00 4.577734837333092e+00 9.240297505670715e+03 + 168160 9.778128663578285e-01 -5.983571235197211e+00 -6.003639025888869e+00 3.784273120176002e+00 4.669040760543927e+00 9.228210706856087e+03 + 168180 1.044519331894726e+00 -6.088520745503303e+00 -5.956292894847333e+00 3.259283094860483e+00 5.018555875520824e+00 9.083350055795743e+03 + 168200 9.377800452558145e-01 -5.935408606860237e+00 -6.003015630216781e+00 4.077871895754400e+00 4.689661905488074e+00 9.226293974903292e+03 + 168220 1.072530314689263e+00 -6.138867244651243e+00 -5.953603597436825e+00 2.954670599197508e+00 5.018483130959449e+00 9.075174345837298e+03 + 168240 9.808247169928299e-01 -6.006585189957734e+00 -6.001640716948886e+00 3.660879879451366e+00 4.689271808622896e+00 9.222079349980893e+03 + 168260 1.000376286024474e+00 -6.037847122274918e+00 -6.010104851547267e+00 3.520947280061504e+00 4.680247691682200e+00 9.248092504845697e+03 + 168280 1.010439001539138e+00 -6.055742097090139e+00 -6.009041819850434e+00 3.398951912358957e+00 4.667112131113891e+00 9.244812776782532e+03 + 168300 1.042353503862047e+00 -6.104719885806098e+00 -5.997880846171707e+00 3.109765936572489e+00 4.723252235441109e+00 9.210564947470917e+03 + 168320 9.935891748776303e-01 -6.035610177520040e+00 -5.990057732488337e+00 3.498544185900603e+00 4.760113374490726e+00 9.186561152285543e+03 + 168340 9.611495047384812e-01 -5.988846742589476e+00 -5.983136582137884e+00 3.735327609300682e+00 4.768116234258200e+00 9.165348258366777e+03 + 168360 9.707427382250238e-01 -5.999500290035220e+00 -6.006961493859886e+00 3.676198481923273e+00 4.633355094944481e+00 9.238438804099200e+03 + 168380 1.042075067849303e+00 -6.098648417545730e+00 -5.991809276489709e+00 3.142750414753324e+00 4.756237296000641e+00 9.191949974342535e+03 + 168400 9.802296402726708e-01 -5.999549474264470e+00 -6.035658282494889e+00 3.670165180356594e+00 4.462822815677519e+00 9.326851174692405e+03 + 168420 1.007137935107914e+00 -6.029918607969732e+00 -6.058748470091388e+00 3.506850541790652e+00 4.341305012081363e+00 9.398280787341233e+03 + 168440 9.789750800120962e-01 -5.978419048411698e+00 -6.040901308924353e+00 3.805216908241625e+00 4.446434099279401e+00 9.343057002513098e+03 + 168460 9.631040551368775e-01 -5.944281233465803e+00 -6.028174838415723e+00 3.989436173143411e+00 4.507706111027568e+00 9.303734860161732e+03 + 168480 9.970167376710625e-01 -5.980929738077193e+00 -6.006000165177396e+00 3.795835380595850e+00 4.651877108550428e+00 9.235481093744935e+03 + 168500 1.004185904761261e+00 -5.974531590324310e+00 -6.080890709891098e+00 3.782247089743209e+00 4.171516566170155e+00 9.467023569189076e+03 + 168520 1.013827236428084e+00 -5.973049311141013e+00 -6.012419485385690e+00 3.840984825903659e+00 4.614915192875946e+00 9.255221235073066e+03 + 168540 1.076859101202937e+00 -6.053186792390386e+00 -5.995586413061469e+00 3.418400539656923e+00 4.749150831393460e+00 9.203507131764953e+03 + 168560 1.043881651533439e+00 -5.992707235612097e+00 -5.996168097459625e+00 3.726689913047351e+00 4.706817108752205e+00 9.205279692437851e+03 + 168580 9.737186113369496e-01 -5.876932466512167e+00 -5.991104755771518e+00 4.338427004733473e+00 4.682832051701614e+00 9.189740656006938e+03 + 168600 1.094596503803888e+00 -6.042894973784376e+00 -5.970877966879069e+00 3.427454269791486e+00 4.840987068037563e+00 9.127860232527708e+03 + 168620 1.033729774112933e+00 -5.941687711327800e+00 -5.974789717065383e+00 4.019444731563217e+00 4.829367892099186e+00 9.139822181709802e+03 + 168640 1.050341511893878e+00 -5.960504392549590e+00 -6.003942140054882e+00 3.839880874428225e+00 4.590454606283140e+00 9.229131651380329e+03 + 168660 1.007979209796018e+00 -5.896037139427145e+00 -5.973113176423912e+00 4.250819036897588e+00 4.808236504983981e+00 9.134662441056038e+03 + 168680 1.055534606159882e+00 -5.965412039415228e+00 -5.991132780259292e+00 3.833686406117894e+00 4.685993931919493e+00 9.189846381055224e+03 + 168700 1.017491393242823e+00 -5.914795220899256e+00 -5.983688675467978e+00 4.135292024947770e+00 4.739695147586528e+00 9.167016774283409e+03 + 168720 9.929851922165435e-01 -5.888202690553465e+00 -6.029376041529388e+00 4.256356292265606e+00 4.445717064456397e+00 9.307439504389782e+03 + 168740 1.041436389252518e+00 -5.976004549909236e+00 -6.020341615956690e+00 3.776569617870068e+00 4.521979323486788e+00 9.279594800672634e+03 + 168760 1.057589580365572e+00 -6.026361774466510e+00 -6.006984956455374e+00 3.546126247343759e+00 4.657390934916603e+00 9.238515712228700e+03 + 168780 9.315622772572537e-01 -5.875895303441302e+00 -6.037901775604793e+00 4.382418388768011e+00 4.452152155184701e+00 9.333740528929004e+03 + 168800 1.022258214850825e+00 -6.048001483303411e+00 -5.983452342384318e+00 3.395455104104973e+00 4.766106260209681e+00 9.166319157999251e+03 + 168820 1.011169067048232e+00 -6.067326144909360e+00 -5.959810764013612e+00 3.339739661489530e+00 4.957109616544337e+00 9.094099565584142e+03 + 168840 1.025020236976436e+00 -6.117665487057854e+00 -5.973190723675447e+00 3.121478401817856e+00 4.951074850557013e+00 9.134927349190359e+03 + 168860 9.463644152986400e-01 -6.025476332915616e+00 -6.008009633252114e+00 3.518262851117608e+00 4.618559343548475e+00 9.241654430254257e+03 + 168880 9.334698927256949e-01 -6.023383396928434e+00 -5.985452456730509e+00 3.566078145444812e+00 4.783883473855324e+00 9.172436467963322e+03 + 168900 9.510709456428174e-01 -6.060016525786116e+00 -5.997483369874761e+00 3.361660532797660e+00 4.720735591015265e+00 9.209320555277578e+03 + 168920 9.730250911305984e-01 -6.097095521270990e+00 -5.977041073949358e+00 3.158828303504729e+00 4.848199518391223e+00 9.146695280216542e+03 + 168940 9.558141948268647e-01 -6.070433359706711e+00 -5.924860591364033e+00 3.365261151523176e+00 5.201162514659930e+00 8.987807619985155e+03 + 168960 9.258467656357104e-01 -6.016408193529506e+00 -5.966268312549667e+00 3.620941408309057e+00 4.908852364016791e+00 9.113779585905784e+03 + 168980 9.841433380522656e-01 -6.085575134652720e+00 -5.988611291840447e+00 3.297175115354938e+00 4.853956505889187e+00 9.182116048274267e+03 + 169000 8.978617716414307e-01 -5.936027897521306e+00 -6.034526833937395e+00 4.020281557852432e+00 4.454685422290102e+00 9.323360812508037e+03 + 169020 9.772038054029044e-01 -6.027909326832266e+00 -5.977939674347870e+00 3.567197332494232e+00 4.854130809838366e+00 9.149454308838647e+03 + 169040 1.021951532861171e+00 -6.064897671267945e+00 -5.978235666492353e+00 3.358109575201783e+00 4.855736217525131e+00 9.150343781253187e+03 + 169060 1.027576518727818e+00 -6.039430666740722e+00 -6.038217903364465e+00 3.466189915985461e+00 4.473153790966458e+00 9.334751237827581e+03 + 169080 9.936332127660447e-01 -5.960300019132356e+00 -6.007500849921213e+00 3.888822860662688e+00 4.617788385968119e+00 9.240081895516532e+03 + 169100 1.008692332085153e+00 -5.958893362928133e+00 -5.972862347851516e+00 3.958697756062315e+00 4.878485682938816e+00 9.133933559378087e+03 + 169120 1.065751004338330e+00 -6.026793979216103e+00 -5.992995966686865e+00 3.548386346339673e+00 4.742459764508095e+00 9.195553317278525e+03 + 169140 9.637628816064123e-01 -5.865746658181116e+00 -6.016361843763390e+00 4.409256881206532e+00 4.544401177968477e+00 9.267298699769202e+03 + 169160 1.027750194272457e+00 -5.954994367432889e+00 -5.976955404581854e+00 3.902922321199174e+00 4.776818647430296e+00 9.146435278467725e+03 + 169180 1.128221251554644e+00 -6.101370439026750e+00 -5.965054609424826e+00 3.140868604709728e+00 4.923615193090438e+00 9.110101371640070e+03 + 169200 1.037485058988604e+00 -5.970499850173887e+00 -5.994522205262080e+00 3.847419957191451e+00 4.709479876827610e+00 9.200239128053541e+03 + 169220 1.026562875976002e+00 -5.959905423906728e+00 -5.984367609292732e+00 3.939443560982471e+00 4.798977906985083e+00 9.169113652909171e+03 + 169240 1.022930598386316e+00 -5.961382394625726e+00 -6.014960333826480e+00 3.916507386401036e+00 4.608854568351015e+00 9.263028590828702e+03 + 169260 1.042237202648395e+00 -5.999814228241953e+00 -6.008424093610194e+00 3.704738004342276e+00 4.655298825025476e+00 9.242919865925160e+03 + 169280 1.005654422619085e+00 -5.957692906086175e+00 -5.976610996054559e+00 3.930174927904944e+00 4.821544327741522e+00 9.145374825744408e+03 + 169300 9.979623960856984e-01 -5.957912585152604e+00 -5.969106859230363e+00 3.998932413969210e+00 4.934653159906402e+00 9.122417324779897e+03 + 169320 9.838781255130404e-01 -5.944658283632568e+00 -6.012119863251195e+00 3.982506766202607e+00 4.595131936386737e+00 9.254252914936042e+03 + 169340 1.069551239447834e+00 -6.079052070554599e+00 -6.003008584182153e+00 3.232291238937528e+00 4.668944705379598e+00 9.226297176781885e+03 + 169360 1.019714566427577e+00 -6.017843870035239e+00 -5.988410119814670e+00 3.697530376212716e+00 4.866543524837349e+00 9.181503408217062e+03 + 169380 1.077089134624681e+00 -6.119744161902767e+00 -5.973935150311946e+00 3.057553216642677e+00 4.894811125068795e+00 9.137221788073928e+03 + 169400 9.577590763724352e-01 -5.959558895049918e+00 -6.005931164278123e+00 3.870048780070473e+00 4.603772034076651e+00 9.235263983211778e+03 + 169420 9.546099549913467e-01 -5.972970617552560e+00 -5.989378003475453e+00 3.843704376425677e+00 4.749490627421661e+00 9.184445871356631e+03 + 169440 9.672922474783208e-01 -6.005900824195700e+00 -5.971360899209590e+00 3.633824356255846e+00 4.832157950562207e+00 9.129318504588613e+03 + 169460 9.354970541407890e-01 -5.970578711854884e+00 -6.000636329624539e+00 3.812118517886766e+00 4.639523025252087e+00 9.218981922734605e+03 + 169480 9.953037596837457e-01 -6.070517429784870e+00 -5.976620285869886e+00 3.303890140160079e+00 4.843062071055979e+00 9.145421165819649e+03 + 169500 9.564261778725953e-01 -6.022296634215536e+00 -6.031265855771065e+00 3.599158273446532e+00 4.547655615292133e+00 9.313299574930305e+03 + 169520 9.533002482044989e-01 -6.030344533034954e+00 -6.026914756366521e+00 3.546636195897941e+00 4.566330504284306e+00 9.299856867630253e+03 + 169540 9.218347217271218e-01 -5.998368876769133e+00 -6.025615504681825e+00 3.668216240239366e+00 4.511761886362640e+00 9.295853291617765e+03 + 169560 9.970559879286637e-01 -6.125110979886927e+00 -5.943626387791891e+00 3.067991154854963e+00 5.110103767314515e+00 9.044798171844053e+03 + 169580 9.550985687257757e-01 -6.073919422849407e+00 -5.984582365077939e+00 3.243198781281949e+00 4.756185991870728e+00 9.169784803673725e+03 + 169600 9.311614749439289e-01 -6.047510906199292e+00 -6.021211109473283e+00 3.457211866767605e+00 4.608229369448740e+00 9.282278198268095e+03 + 169620 9.019674994514773e-01 -6.009569091682552e+00 -6.017872915283037e+00 3.629534565919198e+00 4.581852725792661e+00 9.271998904310905e+03 + 169640 9.522675028193525e-01 -6.085120252150315e+00 -6.004010619599317e+00 3.259685877287144e+00 4.725429939070047e+00 9.229370620903808e+03 + 169660 9.264916004470432e-01 -6.040990000734582e+00 -6.037216595039303e+00 3.474287987107039e+00 4.495955466541976e+00 9.331662576823261e+03 + 169680 9.785989703150859e-01 -6.105472746408179e+00 -6.021695295434523e+00 3.186747334445674e+00 4.667810422455044e+00 9.283782332778919e+03 + 169700 9.870105024731289e-01 -6.098338022542421e+00 -6.002827259316935e+00 3.213789575474086e+00 4.762227158157670e+00 9.225746824955111e+03 + 169720 9.182129516544071e-01 -5.969224699657318e+00 -6.057334169015666e+00 3.835441249474334e+00 4.329503041522386e+00 9.393895922368396e+03 + 169740 9.974687210385852e-01 -6.055082459020586e+00 -6.020458804828923e+00 3.431463891969735e+00 4.630278272331433e+00 9.279961816751680e+03 + 169760 1.021385387971490e+00 -6.056482306478014e+00 -6.006646682111493e+00 3.401112389342596e+00 4.687276256493101e+00 9.237479916116761e+03 + 169780 1.005925873913511e+00 -6.000150629030334e+00 -6.039839651959369e+00 3.692585628624745e+00 4.464685117109781e+00 9.339754958972273e+03 + 169800 1.002885685681158e+00 -5.966996381172388e+00 -6.016671378939895e+00 3.832653335258377e+00 4.547411810896292e+00 9.268309010774403e+03 + 169820 1.039585889759940e+00 -5.997117770090741e+00 -5.978297105817553e+00 3.788923728624128e+00 4.896994895369154e+00 9.150511463674646e+03 + 169840 1.017496821679604e+00 -5.943228357664990e+00 -6.010509730835819e+00 4.020314623350593e+00 4.633974566844847e+00 9.249331137594687e+03 + 169860 1.025020312609788e+00 -5.939911742171553e+00 -5.999544790537533e+00 4.038334767737267e+00 4.695912575835396e+00 9.215648442947095e+03 + 169880 1.011619743944109e+00 -5.909615454877444e+00 -6.045946159889828e+00 4.140251660776395e+00 4.357419655486868e+00 9.358641939391624e+03 + 169900 1.067311876306702e+00 -5.987281956574188e+00 -6.022711241456910e+00 3.765956892797317e+00 4.562516456336613e+00 9.286894571414674e+03 + 169920 1.071050380397811e+00 -5.993606732514963e+00 -5.988683256433588e+00 3.737303577495812e+00 4.765574939060531e+00 9.182334570723609e+03 + 169940 1.018181681648257e+00 -5.919219557523519e+00 -6.028111609099024e+00 4.112787327412216e+00 4.487512316275146e+00 9.303567603645566e+03 + 169960 1.013170091625445e+00 -5.924718278791855e+00 -6.022180148726331e+00 4.124126533580051e+00 4.564485394240660e+00 9.285263092257750e+03 + 169980 1.024407579775419e+00 -5.958604125805228e+00 -6.021702508177075e+00 3.915670025512649e+00 4.553349349490384e+00 9.283781335469925e+03 + 170000 1.018221192148465e+00 -5.974353792418123e+00 -5.992193393705416e+00 3.875008256311948e+00 4.772570505050933e+00 9.193095161753770e+03 + 170020 1.042351238870336e+00 -6.040995409880978e+00 -5.967316672444354e+00 3.539749464400567e+00 4.962824176509429e+00 9.116976629634582e+03 + 170040 9.914209667031570e-01 -6.000229857265493e+00 -6.015963302892558e+00 3.763617544290198e+00 4.673273664756747e+00 9.266097844712569e+03 + 170060 1.034733042854603e+00 -6.108384503132043e+00 -5.992481709315068e+00 3.121527774890239e+00 4.787059552886689e+00 9.193993903196844e+03 + 170080 9.397373283605081e-01 -6.008796477040999e+00 -6.008299563487647e+00 3.670538985807122e+00 4.673392340327594e+00 9.242554854003269e+03 + 170100 9.352200444151164e-01 -6.038648732118046e+00 -6.020744318654856e+00 3.484430594380992e+00 4.587240507185653e+00 9.280833482084103e+03 + 170120 9.726439827333372e-01 -6.119245213331881e+00 -5.979838494630489e+00 3.043759069244617e+00 4.844254021148005e+00 9.155249791550972e+03 + 170140 9.365000991102005e-01 -6.077795023780181e+00 -5.953330799722764e+00 3.286489709675720e+00 5.001182544989835e+00 9.074341722270015e+03 + 170160 9.212522219931480e-01 -6.055304792727600e+00 -6.004308962263983e+00 3.394383719948365e+00 4.687209670049709e+00 9.230267798148687e+03 + 170180 9.505445827871878e-01 -6.094214281864375e+00 -5.989592201276027e+00 3.204766873049646e+00 4.805523050002586e+00 9.185130020262563e+03 + 170200 9.475438158188727e-01 -6.082536845979496e+00 -5.978685669002435e+00 3.255276816197649e+00 4.851606345317627e+00 9.151715745272320e+03 + 170220 9.365147047407512e-01 -6.054555728385830e+00 -5.972135302775057e+00 3.386753793811953e+00 4.860024632188656e+00 9.131707405131336e+03 + 170240 8.520528527270319e-01 -5.912648696059914e+00 -6.036098843721047e+00 4.138482661585984e+00 4.429612809867154e+00 9.328167936163900e+03 + 170260 9.655707814947831e-01 -6.063383800585354e+00 -5.973893656488170e+00 3.308452200066950e+00 4.822318456028022e+00 9.137059108571249e+03 + 170280 9.658195758693514e-01 -6.042798930721443e+00 -5.996895059592011e+00 3.459088733852861e+00 4.722675865479163e+00 9.207521676412576e+03 + 170300 9.655323730554030e-01 -6.022222176450374e+00 -5.992159985702391e+00 3.617594932778368e+00 4.790216684162269e+00 9.192993655791328e+03 + 170320 9.969409238888579e-01 -6.047682970368264e+00 -6.026712116822573e+00 3.407681285848283e+00 4.528099172136741e+00 9.299238123761106e+03 + 170340 1.056188440360386e+00 -6.115237168691078e+00 -6.024364968501036e+00 3.001026442965414e+00 4.522828678884165e+00 9.292035398565024e+03 + 170360 9.417937044665678e-01 -5.930126822977082e+00 -6.037268202716104e+00 4.086599967621773e+00 4.471377585085380e+00 9.331800989362053e+03 + 170380 1.051925507588887e+00 -6.079820776615825e+00 -5.984995621274686e+00 3.202561953040747e+00 4.747062669154930e+00 9.171054398337639e+03 + 170400 9.652766409689445e-01 -5.936211614938637e+00 -6.003397019223716e+00 4.008972473514619e+00 4.623183485201980e+00 9.227466927209005e+03 + 170420 1.001022974229388e+00 -5.975566925739768e+00 -5.969215429048081e+00 3.832364615754913e+00 4.868835892649520e+00 9.122764755413333e+03 + 170440 1.044591770065379e+00 -6.025616577307121e+00 -5.980008715900333e+00 3.584136800093449e+00 4.846024198084964e+00 9.155758362128547e+03 + 170460 1.039327592966997e+00 -6.004824447409662e+00 -6.027695085848128e+00 3.641528299341432e+00 4.510201554207904e+00 9.302222086343778e+03 + 170480 1.083905516160292e+00 -6.059933331954823e+00 -5.986993198291197e+00 3.352879390417891e+00 4.771712925363636e+00 9.177179313635452e+03 + 170500 1.040192586591136e+00 -5.989210795734403e+00 -6.003708880742542e+00 3.726949239355794e+00 4.643698991667658e+00 9.228430037821292e+03 + 170520 1.009668855808574e+00 -5.941197257203990e+00 -5.991555922496095e+00 4.078132853750395e+00 4.788965604664853e+00 9.191114581704445e+03 + 170540 9.794286743542329e-01 -5.893361148285857e+00 -6.028724292342002e+00 4.220531656966072e+00 4.443255536416843e+00 9.305427561850074e+03 + 170560 9.683814571543250e-01 -5.876273132851452e+00 -5.956318728816906e+00 4.328514568905150e+00 4.868880369855570e+00 9.083458697188480e+03 + 170580 1.041584915052905e+00 -5.986711679326891e+00 -5.994869938065093e+00 3.803110961162459e+00 4.756264977001248e+00 9.201265125865752e+03 + 170600 1.000801476284196e+00 -5.930760088746859e+00 -6.033649264170018e+00 4.060299604464596e+00 4.469494037136382e+00 9.320627320544390e+03 + 170620 1.034878622800377e+00 -5.993368645355741e+00 -5.998714396326448e+00 3.702534832039707e+00 4.671838702713617e+00 9.213082586816368e+03 + 170640 1.018440253400480e+00 -5.988772905030628e+00 -5.997579079468695e+00 3.735111911505739e+00 4.684545495131271e+00 9.209601416923637e+03 + 170660 1.003222454235318e+00 -5.993249722684387e+00 -5.992579331378779e+00 3.726248424739012e+00 4.730097915358535e+00 9.194272502888114e+03 + 170680 9.961471764107238e-01 -6.014585870520928e+00 -5.976859986420358e+00 3.620276912922983e+00 4.836904777490152e+00 9.146143205257018e+03 + 170700 9.927600260838007e-01 -6.042574584515392e+00 -5.973265898090660e+00 3.456337300682211e+00 4.854318503617582e+00 9.135182543616163e+03 + 170720 9.652652722411914e-01 -6.032711425074404e+00 -5.985171522998706e+00 3.524352331372965e+00 4.797333805867694e+00 9.171596569254334e+03 + 170740 9.260347572933402e-01 -5.999983936473900e+00 -5.984081319808709e+00 3.690953964378742e+00 4.782269250192242e+00 9.168234199792883e+03 + 170760 9.385566099388128e-01 -6.038227980073770e+00 -5.997435810930737e+00 3.453983154860438e+00 4.688218102647502e+00 9.209182772539596e+03 + 170780 1.008800387357944e+00 -6.155627896394275e+00 -5.978586685943808e+00 2.878235196751189e+00 4.894833224196544e+00 9.151445606785259e+03 + 170800 9.339674148239079e-01 -6.052114016151570e+00 -6.022707390301278e+00 3.432626475263452e+00 4.601483871556477e+00 9.286887343452872e+03 + 170820 9.026841480509497e-01 -6.008609767442591e+00 -6.016128722704627e+00 3.615436672391678e+00 4.572261667722504e+00 9.266636552998798e+03 + 170840 9.614351384338152e-01 -6.093136964397873e+00 -5.956578103927869e+00 3.211300276043321e+00 4.995442385277443e+00 9.084248488319894e+03 + 170860 9.494609892774311e-01 -6.064744278935260e+00 -5.989757627916260e+00 3.332614604343507e+00 4.763199558641342e+00 9.185644572006644e+03 + 170880 9.758723107783824e-01 -6.086596242950184e+00 -5.963794901251054e+00 3.181849094124565e+00 4.886993401607175e+00 9.106245891304350e+03 + 170900 9.443564440876259e-01 -6.013023523779257e+00 -5.991066015571589e+00 3.595247305250703e+00 4.721330715292543e+00 9.189636401065081e+03 + 170920 9.979735738741532e-01 -6.057433059651650e+00 -5.998401222332658e+00 3.359855507634828e+00 4.698825452667784e+00 9.212152075969656e+03 + 170940 1.021561085619873e+00 -6.052757243599248e+00 -6.034398194398078e+00 3.406388056103865e+00 4.511808557670667e+00 9.322956882158285e+03 + 170960 9.910188057034205e-01 -5.970757000806626e+00 -6.028199268858287e+00 3.814860649949634e+00 4.485018257634742e+00 9.303807957927480e+03 + 170980 1.014363910710538e+00 -5.977264986747066e+00 -5.978052909270562e+00 3.859526915253322e+00 4.855002542192791e+00 9.149782643402903e+03 + 171000 1.084497722298993e+00 -6.058373537128502e+00 -5.968757823358532e+00 3.395168191396990e+00 4.909755487851051e+00 9.121380774248420e+03 + 171020 9.276966639107868e-01 -5.810107943743019e+00 -6.012651724672794e+00 4.652525348393491e+00 4.489487614745926e+00 9.255870450664617e+03 + 171040 1.045145576062407e+00 -5.971755310255063e+00 -5.975066130884569e+00 3.863180548851889e+00 4.844169304449434e+00 9.140636691907986e+03 + 171060 1.029475837236159e+00 -5.939465731492257e+00 -6.008012805490893e+00 3.995523271580218e+00 4.601915365054635e+00 9.241665426773423e+03 + 171080 1.072865108081996e+00 -6.000119805814780e+00 -6.016181997813996e+00 3.660709544658617e+00 4.568477952582938e+00 9.266809198092127e+03 + 171100 1.034307016829046e+00 -5.947771556199718e+00 -6.043228510943781e+00 3.990405546480476e+00 4.442276940424062e+00 9.350232372443277e+03 + 171120 9.909806713831958e-01 -5.893630259803997e+00 -6.004482228143315e+00 4.268158226041095e+00 4.631629069550068e+00 9.230814562618483e+03 + 171140 1.095352219066863e+00 -6.058963998309231e+00 -6.034920213769887e+00 3.354800989796277e+00 4.492864121384822e+00 9.324546417283334e+03 + 171160 9.361818597836059e-01 -5.837702006150529e+00 -6.074215658044883e+00 4.543063798914179e+00 4.184965809367458e+00 9.446259669591762e+03 + 171180 1.063586238159527e+00 -6.041074751836959e+00 -5.993216660738875e+00 3.475828806547899e+00 4.750637371648756e+00 9.196230146157655e+03 + 171200 9.223231871640362e-01 -5.845355329042358e+00 -6.038626205803416e+00 4.454368731478369e+00 4.344577448544857e+00 9.336025105847053e+03 + 171220 1.001657265629783e+00 -5.977460492764368e+00 -6.037023127197168e+00 3.810550129172141e+00 4.468532264971110e+00 9.331074181307609e+03 + 171240 1.005827042537463e+00 -5.999050556772287e+00 -6.021340289169739e+00 3.687283384524524e+00 4.559292291773414e+00 9.282681492792377e+03 + 171260 1.001987463006701e+00 -6.007314462474951e+00 -6.000273816219245e+00 3.656292073567790e+00 4.696720553904538e+00 9.217883179848644e+03 + 171280 9.391827089957673e-01 -5.925549663450369e+00 -6.027063977593748e+00 4.073394302550900e+00 4.490483401450274e+00 9.300322702355819e+03 + 171300 1.019392492956403e+00 -6.053581334082163e+00 -6.001521994477442e+00 3.365681927440092e+00 4.664614711607167e+00 9.221744281017252e+03 + 171320 1.043979530262219e+00 -6.097425445007454e+00 -6.000371943071759e+00 3.206867108916930e+00 4.764163336012579e+00 9.218200644254624e+03 + 171340 9.669808066950646e-01 -5.989453513208580e+00 -6.011425453621453e+00 3.738455560082376e+00 4.612289278084866e+00 9.252138444819684e+03 + 171360 9.489642931133299e-01 -5.966098076171398e+00 -6.034651487722937e+00 3.841932536420052e+00 4.448288238684961e+00 9.323725841115664e+03 + 171380 9.937773520064063e-01 -6.034596647015252e+00 -5.987116854457822e+00 3.513693630166775e+00 4.786329946505689e+00 9.177552623595084e+03 + 171400 9.693534057665260e-01 -5.999670653650709e+00 -5.941421223222612e+00 3.736992166098672e+00 5.071469409687032e+00 9.038096113695467e+03 + 171420 9.554796697473289e-01 -5.974817086276644e+00 -5.984861273439644e+00 3.811510434577100e+00 4.753835157554215e+00 9.170617582354420e+03 + 171440 1.006728585824680e+00 -6.044963394225207e+00 -5.956203933333204e+00 3.458599687376750e+00 4.968270247300817e+00 9.083086999592480e+03 + 171460 9.952638910946333e-01 -6.022079869660653e+00 -5.993659030556267e+00 3.572420916997035e+00 4.735617773245061e+00 9.197578902818570e+03 + 171480 1.000897589531404e+00 -6.025654491205266e+00 -5.964523484370750e+00 3.529465204783151e+00 4.880488906019679e+00 9.108460581256915e+03 + 171500 8.851589681811243e-01 -5.847968305863181e+00 -6.038696579494841e+00 4.471370755269139e+00 4.376179492971192e+00 9.336175048552645e+03 + 171520 9.747771986418258e-01 -5.973323182732736e+00 -5.986960188578504e+00 3.820354647736007e+00 4.742048849849779e+00 9.177045450884305e+03 + 171540 1.024118150039167e+00 -6.039158840368815e+00 -5.987859842372965e+00 3.495607699408173e+00 4.790174484394631e+00 9.179826495095242e+03 + 171560 1.054708707629149e+00 -6.079628563944896e+00 -5.994265628718345e+00 3.319600567337748e+00 4.809767751280133e+00 9.199437620177328e+03 + 171580 9.654746301756072e-01 -5.944464419688822e+00 -6.015722557509570e+00 3.975020445735633e+00 4.565845191207707e+00 9.265375345004941e+03 + 171600 9.934451304520083e-01 -5.983428454092348e+00 -6.039299735468349e+00 3.763111637289891e+00 4.442290093576043e+00 9.338091574357446e+03 + 171620 1.017559659825727e+00 -6.017085151594062e+00 -5.992653914417639e+00 3.626361415854595e+00 4.766649360443346e+00 9.194515109745516e+03 + 171640 9.709030598019428e-01 -5.946862077441454e+00 -6.011799143925126e+00 3.975992419417954e+00 4.603113734690144e+00 9.253298900456324e+03 + 171660 1.025282394828877e+00 -6.026472431076947e+00 -6.003703376045156e+00 3.610320431112913e+00 4.741063868605333e+00 9.228398495997293e+03 + 171680 9.797543814871998e-01 -5.959089858204219e+00 -5.980995277290864e+00 3.957445529865331e+00 4.831661223617166e+00 9.158790095591123e+03 + 171700 9.879801297184002e-01 -5.969363242232961e+00 -5.976911486548956e+00 3.938516059477347e+00 4.895172872527871e+00 9.146281707245815e+03 + 171720 1.001725550943119e+00 -5.987246185676660e+00 -6.043439976764630e+00 3.656076930229333e+00 4.333403485841139e+00 9.350856420682028e+03 + 171740 1.007051566544903e+00 -5.994115571265025e+00 -5.971141406770496e+00 3.754958249862434e+00 4.886879457630489e+00 9.128675402733710e+03 + 171760 1.018446533448224e+00 -6.008468265866791e+00 -5.978347989306979e+00 3.690532377804710e+00 4.863487666908890e+00 9.150695006217993e+03 + 171780 1.002158495960799e+00 -5.978755835794822e+00 -6.039174383172543e+00 3.755089604884001e+00 4.408156956101141e+00 9.337707619621324e+03 + 171800 1.009484596766189e+00 -5.986760190431491e+00 -5.992087566815591e+00 3.816200457989901e+00 4.785609838383573e+00 9.192796906804604e+03 + 171820 1.041604118544639e+00 -6.032403206145791e+00 -6.002896833464178e+00 3.521867967333264e+00 4.691298125367497e+00 9.225953927108612e+03 + 171840 9.665822786040212e-01 -5.920381871429842e+00 -6.043708844495072e+00 4.088432370134125e+00 4.380269806006170e+00 9.351693299077364e+03 + 171860 1.074678360988256e+00 -6.080659785731807e+00 -5.981246488845114e+00 3.249144402998712e+00 4.819990937880080e+00 9.159573559695207e+03 + 171880 1.021758790337151e+00 -6.002998917291436e+00 -6.038845177180287e+00 3.664133224065047e+00 4.458298452592475e+00 9.336675552161771e+03 + 171900 9.773372821515389e-01 -5.943025881703281e+00 -6.001987395753183e+00 4.010165381458823e+00 4.671599243519475e+00 9.223153033009939e+03 + 171920 1.031542957852331e+00 -6.028838780742541e+00 -6.004602094285159e+00 3.521817174616015e+00 4.660987978869406e+00 9.231195388797376e+03 + 171940 9.931641978527259e-01 -5.981737343578180e+00 -6.025112956408787e+00 3.760827828149687e+00 4.511758346921954e+00 9.294312047528045e+03 + 171960 9.942910999199028e-01 -5.995904350195556e+00 -5.999471829507865e+00 3.752050717800490e+00 4.731565699523570e+00 9.215432487080032e+03 + 171980 9.763760373089337e-01 -5.982684865313786e+00 -6.024086023079970e+00 3.737813051981539e+00 4.500081197279654e+00 9.291146887632491e+03 + 172000 9.890078617169029e-01 -6.014780413382620e+00 -5.970289022350176e+00 3.656029403532166e+00 4.911505855860971e+00 9.126064556626347e+03 + 172020 1.030418325087919e+00 -6.089505935786843e+00 -6.008572171970718e+00 3.196709946469086e+00 4.661444142760746e+00 9.243373255725261e+03 + 172040 9.113729681880006e-01 -5.926264147339674e+00 -6.045669303285655e+00 4.059907602402332e+00 4.374264719072340e+00 9.357753761197173e+03 + 172060 1.037731908280993e+00 -6.127639944662689e+00 -5.943297243257048e+00 2.998114652903837e+00 5.056638971315880e+00 9.043819576115819e+03 + 172080 9.664889632182478e-01 -6.031891814831638e+00 -5.956363317556741e+00 3.505287301688137e+00 4.938983621037777e+00 9.083559367768732e+03 + 172100 9.675846243518632e-01 -6.039486628621668e+00 -5.981788502176136e+00 3.488376645873756e+00 4.819688216680213e+00 9.161235017877274e+03 + 172120 9.427911565687183e-01 -6.002596525330778e+00 -6.065851509203759e+00 3.635868782999956e+00 4.272648876924187e+00 9.420302608302583e+03 + 172140 1.025710259579387e+00 -6.124028208938828e+00 -5.995221513746751e+00 3.033499318125382e+00 4.773127294689953e+00 9.202414933250018e+03 + 172160 1.022930234879329e+00 -6.117667476990171e+00 -6.005436978973149e+00 3.064685001424672e+00 4.709129888651852e+00 9.233765814712531e+03 + 172180 9.528841140287684e-01 -6.010462711715466e+00 -6.008392079401310e+00 3.599722870796881e+00 4.611612761974078e+00 9.242849098932280e+03 + 172200 9.769086256639007e-01 -6.037469267969271e+00 -5.993920472892267e+00 3.540402981661931e+00 4.790466902148351e+00 9.198372194122510e+03 + 172220 1.001685117511323e+00 -6.057814855343692e+00 -6.007727948729677e+00 3.373897329674729e+00 4.661504098376156e+00 9.240784063165436e+03 + 172240 1.000293486810821e+00 -6.033765832241881e+00 -5.985063958971355e+00 3.541511843009716e+00 4.821165535919611e+00 9.171247080303594e+03 + 172260 1.029843233002278e+00 -6.050375412886610e+00 -5.931952273062092e+00 3.475083819945331e+00 5.155087814739376e+00 9.009317550731905e+03 + 172280 9.979083500795413e-01 -5.968938097493893e+00 -5.996681256075377e+00 3.900376482313927e+00 4.741070972499131e+00 9.206856415300068e+03 + 172300 9.910953191488213e-01 -5.920612380312593e+00 -6.039534535713416e+00 4.146052007954139e+00 4.463182588498543e+00 9.338811746995858e+03 + 172320 1.059253938255195e+00 -5.987092018009369e+00 -6.003790633122820e+00 3.793123860490346e+00 4.697237828406570e+00 9.228688296592190e+03 + 172340 1.048394965046214e+00 -5.943226468609465e+00 -6.037081333647786e+00 4.010430358619571e+00 4.471501199576102e+00 9.331212543504442e+03 + 172360 1.048798603325881e+00 -5.923953548004551e+00 -6.019785239773594e+00 4.132316830279241e+00 4.582036426235025e+00 9.277880432263342e+03 + 172380 1.054822752980198e+00 -5.921160533112129e+00 -6.040287114743693e+00 4.201034368739275e+00 4.516991102231910e+00 9.341122409992860e+03 + 172400 1.070624697258100e+00 -5.943701495588893e+00 -6.006700808958228e+00 4.022619710845968e+00 4.660867904367014e+00 9.237616575151951e+03 + 172420 1.087665722417053e+00 -5.973309647536586e+00 -5.990742047255759e+00 3.855704375234299e+00 4.755604838391663e+00 9.188625658294219e+03 + 172440 1.082671555508895e+00 -5.975098137206616e+00 -6.032851852051314e+00 3.835652335015956e+00 4.504021567019214e+00 9.318158082155564e+03 + 172460 1.075880443809336e+00 -5.984550528514778e+00 -6.016158023779798e+00 3.787897836809965e+00 4.606402707754134e+00 9.266728491515081e+03 + 172480 1.030377831704585e+00 -5.946548995702058e+00 -6.011534811357571e+00 4.005989054705988e+00 4.632830444689559e+00 9.252487485879567e+03 + 172500 1.009986612423348e+00 -5.949526728630444e+00 -6.017141988862014e+00 3.995566411707327e+00 4.607309124029947e+00 9.269747940604722e+03 + 172520 1.032006171283480e+00 -6.017425392705233e+00 -6.013504647391644e+00 3.628234371708197e+00 4.650747898032203e+00 9.258578016736792e+03 + 172540 1.045127023049643e+00 -6.075682116403290e+00 -6.004701169464201e+00 3.353530151080817e+00 4.761113732671108e+00 9.231503742012002e+03 + 172560 9.328167180436451e-01 -5.942895991482249e+00 -6.040270540398437e+00 3.993177521342875e+00 4.434037792803384e+00 9.341109408519034e+03 + 172580 9.569570424580628e-01 -6.001283495106502e+00 -6.029771398867808e+00 3.650117188354000e+00 4.486535236467725e+00 9.308641086014748e+03 + 172600 9.711383143553693e-01 -6.034969535257957e+00 -6.002105787817385e+00 3.525292281998686e+00 4.714001005450935e+00 9.223513315950806e+03 + 172620 9.695345062701345e-01 -6.037660094581866e+00 -5.981064015227295e+00 3.557403469660122e+00 4.882386915529040e+00 9.159005824058595e+03 + 172640 9.262001757590222e-01 -5.973060304432867e+00 -5.997804083077527e+00 3.883306133553282e+00 4.741223527488275e+00 9.210291180478478e+03 + 172660 9.807106669965060e-01 -6.049597162517309e+00 -5.981247828085527e+00 3.469973749691794e+00 4.862446205024409e+00 9.159565589861624e+03 + 172680 9.514318914662905e-01 -5.999393397720797e+00 -6.036095332866749e+00 3.733845237342295e+00 4.523097046128131e+00 9.328189204685377e+03 + 172700 9.539407440784161e-01 -5.995231582357144e+00 -6.022609409682798e+00 3.737461398108739e+00 4.580253676899749e+00 9.286606942001843e+03 + 172720 9.801825496110435e-01 -6.026928550237892e+00 -5.997009518303758e+00 3.577571027635955e+00 4.749370738956975e+00 9.207857850063427e+03 + 172740 9.858211385633077e-01 -6.024066985329942e+00 -5.997241331361455e+00 3.567562514191609e+00 4.721599570535195e+00 9.208577849712383e+03 + 172760 1.027614273873148e+00 -6.070526706382096e+00 -6.000133456637364e+00 3.331638996131673e+00 4.735847929486113e+00 9.217463963702086e+03 + 172780 9.924021303201925e-01 -6.003649369653463e+00 -6.017113068579690e+00 3.727382623388439e+00 4.650071980653369e+00 9.269652267904345e+03 + 172800 9.822262316195856e-01 -5.973445616491210e+00 -6.047312994501391e+00 3.866678748033224e+00 4.442520832558955e+00 9.362873375793612e+03 + 172820 1.045701315700432e+00 -6.051834337745269e+00 -6.010285318213351e+00 3.423894521653975e+00 4.662475421496242e+00 9.248659991004879e+03 + 172840 9.932735794916475e-01 -5.960201368732760e+00 -6.005699352140431e+00 3.975203653402160e+00 4.713947191885136e+00 9.234537887363775e+03 + 172860 9.767187191188476e-01 -5.921345331474637e+00 -6.019146440161713e+00 4.128508824574022e+00 4.566919723820175e+00 9.275910407278221e+03 + 172880 1.037488936465995e+00 -5.994567586924026e+00 -5.987900519717890e+00 3.830838451594528e+00 4.869121783217475e+00 9.179943528156775e+03 + 172900 1.034260541130848e+00 -5.972910243693983e+00 -6.038777378763229e+00 3.793055317253698e+00 4.414836034779875e+00 9.336484724653827e+03 + 172920 1.037315623599830e+00 -5.963630706909944e+00 -6.018265155122256e+00 3.893719876292875e+00 4.580000420004242e+00 9.273218014629445e+03 + 172940 1.055160987536114e+00 -5.978988893475173e+00 -5.987824119486614e+00 3.801986179482366e+00 4.751252944477866e+00 9.179687414965316e+03 + 172960 9.702833095912661e-01 -5.840991960859178e+00 -6.031057769142107e+00 4.524497354666903e+00 4.433110070917548e+00 9.312626508725054e+03 + 172980 1.095999026118134e+00 -6.015260597932206e+00 -6.019661736591093e+00 3.592142107342071e+00 4.566870088088737e+00 9.277510732199004e+03 + 173000 1.059105901226753e+00 -5.954643219047735e+00 -6.037985020293568e+00 3.945239107761918e+00 4.466677587906290e+00 9.334008061221604e+03 + 173020 1.040382771581557e+00 -5.925256495979632e+00 -6.065720095080787e+00 4.027556589492034e+00 4.220992866781489e+00 9.419890129539695e+03 + 173040 1.065033415603978e+00 -5.966439556451606e+00 -6.041543398258449e+00 3.894009558650715e+00 4.462751676713863e+00 9.344996423570939e+03 + 173060 9.828180189809057e-01 -5.860201626399448e+00 -6.064714023509033e+00 4.372721395332970e+00 4.198379562938558e+00 9.416790512609132e+03 + 173080 1.085337289523845e+00 -6.038428248566185e+00 -6.005454351652530e+00 3.534491882486018e+00 4.723833101258279e+00 9.233790642084487e+03 + 173100 9.990484560066603e-01 -5.945884859694917e+00 -6.056270077558128e+00 4.015952910086753e+00 4.382103907058945e+00 9.390601555318568e+03 + 173120 1.015634147231315e+00 -6.011858284024379e+00 -6.023865377686884e+00 3.622815174183521e+00 4.553868584281678e+00 9.290458094768865e+03 + 173140 9.552580740726015e-01 -5.961412638041280e+00 -5.971241894836776e+00 3.908114150496128e+00 4.851673036903812e+00 9.128981571337610e+03 + 173160 9.305778856185259e-01 -5.954230577838489e+00 -6.011161779187345e+00 3.958894878622979e+00 4.631987110402910e+00 9.251346829643579e+03 + 173180 1.004265136632929e+00 -6.090516674166908e+00 -6.012856916614709e+00 3.194386654755098e+00 4.640321000428470e+00 9.256550708127948e+03 + 173200 8.990016148434702e-01 -5.955769491476167e+00 -6.038204461943130e+00 3.858051786474328e+00 4.384697429282569e+00 9.334686274128735e+03 + 173220 9.791377970712588e-01 -6.086829828988833e+00 -5.985064166714954e+00 3.186556580349054e+00 4.770910761311004e+00 9.171271558508854e+03 + 173240 9.178561836157619e-01 -6.000873112545937e+00 -6.019295793190077e+00 3.673941804461277e+00 4.568155921302013e+00 9.276399978438039e+03 + 173260 1.024461387080682e+00 -6.161088725650881e+00 -5.955357648241751e+00 2.825248896394360e+00 5.006588579658922e+00 9.080528074449341e+03 + 173280 9.401720232504444e-01 -6.034173748647902e+00 -5.978445835631708e+00 3.519538817437126e+00 4.839537117842782e+00 9.150998687050354e+03 + 173300 9.470540276866289e-01 -6.037068525726442e+00 -5.972023956749140e+00 3.501390940657594e+00 4.874886921339779e+00 9.131367269831122e+03 + 173320 9.108501766157171e-01 -5.968946882093755e+00 -6.015118299458585e+00 3.816558113533273e+00 4.551434690020675e+00 9.263511983231312e+03 + 173340 1.029235403157530e+00 -6.122762203149047e+00 -5.954753905417141e+00 3.027174268288450e+00 4.991903913065103e+00 9.078686758177966e+03 + 173360 9.818262960992878e-01 -6.023412690631263e+00 -6.015999275447353e+00 3.564654286904957e+00 4.607223264113264e+00 9.266200376867040e+03 + 173380 1.001159147502946e+00 -6.016922699347793e+00 -6.013974089907674e+00 3.635101728305686e+00 4.652033100006684e+00 9.260001572950863e+03 + 173400 1.027042410060890e+00 -6.018981695469641e+00 -6.025554783804002e+00 3.635558655327230e+00 4.597814964929199e+00 9.295677307233909e+03 + 173420 1.004062108728824e+00 -5.953600053463845e+00 -6.055777283455601e+00 3.977742863076556e+00 4.391025396588654e+00 9.389066569268389e+03 + 173440 1.003151985130466e+00 -5.928628000133264e+00 -6.056167081024177e+00 4.097540783854696e+00 4.365191644770091e+00 9.390260647780548e+03 + 173460 1.052210238382461e+00 -5.984234005807235e+00 -6.004828848866408e+00 3.743388821908794e+00 4.625130046021358e+00 9.231869410027091e+03 + 173480 9.871523806603745e-01 -5.877989579162440e+00 -6.033214628513395e+00 4.314775876070700e+00 4.423449621698764e+00 9.319235962218390e+03 + 173500 1.031525440889237e+00 -5.937048709049370e+00 -5.996162679946292e+00 4.059574712262241e+00 4.720133143514684e+00 9.205260683628650e+03 + 173520 1.006552588570192e+00 -5.898841603488368e+00 -6.034626629368055e+00 4.191335493886501e+00 4.411636862620495e+00 9.323635224091404e+03 + 173540 1.038771599441801e+00 -5.949209941983998e+00 -5.988878061605327e+00 4.037638616402416e+00 4.809858134915078e+00 9.182896220146396e+03 + 173560 1.061288698208912e+00 -5.985945902691494e+00 -6.016114399520863e+00 3.768115648683763e+00 4.594883471329727e+00 9.266583752364602e+03 + 173580 1.103606726850638e+00 -6.058110321408405e+00 -6.034439221645863e+00 3.356107795104212e+00 4.492030913031579e+00 9.323087448367194e+03 + 173600 9.889032319626195e-01 -5.901157331932627e+00 -6.073112700582467e+00 4.141101452704678e+00 4.153707115909998e+00 9.442863274692640e+03 + 173620 1.053724298458657e+00 -6.011179843180615e+00 -6.022403942206569e+00 3.655945020991484e+00 4.591494507460746e+00 9.285963464590632e+03 + 173640 1.052470906114627e+00 -6.023753451526209e+00 -5.973077801713588e+00 3.597244847251640e+00 4.888232270507174e+00 9.134582364346446e+03 + 173660 9.999558623766148e-01 -5.958130706256950e+00 -5.970517611813904e+00 3.936885342070613e+00 4.865757813495144e+00 9.126757577108681e+03 + 173680 9.741656194470899e-01 -5.929609314306802e+00 -5.963471490823021e+00 4.115023158883413e+00 4.920581301172404e+00 9.105219226846948e+03 + 173700 1.001649616539517e+00 -5.976186939960305e+00 -5.985031663926883e+00 3.816147745517227e+00 4.765359971784532e+00 9.171139630054591e+03 + 173720 9.928822207895293e-01 -5.967897433565623e+00 -6.016209217170697e+00 3.842270758697348e+00 4.564857021012658e+00 9.266860247535784e+03 + 173740 1.000305238398981e+00 -5.984764448073079e+00 -5.981043178806662e+00 3.775660073722656e+00 4.797028177714984e+00 9.158943933196617e+03 + 173760 1.030708470277271e+00 -6.035614638130282e+00 -5.994197637306218e+00 3.481364037871348e+00 4.719186865863287e+00 9.199246769754171e+03 + 173780 1.024563620353439e+00 -6.035096106001772e+00 -5.975507566403075e+00 3.496529323497055e+00 4.838695939169474e+00 9.141988281766386e+03 + 173800 9.577741359538310e-01 -5.943629092969581e+00 -5.979990568174130e+00 3.943286083773390e+00 4.734492866228766e+00 9.155685231236090e+03 + 173820 9.530738206765744e-01 -5.939991473691727e+00 -5.974018787309910e+00 4.000676412601569e+00 4.805286312096201e+00 9.137454207099527e+03 + 173840 9.799106825999193e-01 -5.981760307817236e+00 -6.005063955990226e+00 3.807349945732891e+00 4.673536791695682e+00 9.232600264701590e+03 + 173860 9.883661500418113e-01 -5.995776082610538e+00 -6.024574548531402e+00 3.706975394264605e+00 4.541610146398807e+00 9.292622184133701e+03 + 173880 9.750428267315292e-01 -5.978233142818242e+00 -6.026572478828854e+00 3.792798227115356e+00 4.515226279254351e+00 9.298775776116358e+03 + 173900 1.008640543466448e+00 -6.031628694671824e+00 -5.961455403589120e+00 3.521709321975823e+00 4.924655218654406e+00 9.099091088598856e+03 + 173920 9.847806395747991e-01 -5.999545610604539e+00 -5.999357727614077e+00 3.714825439528858e+00 4.715904292734889e+00 9.215079945701889e+03 + 173940 1.011804177466070e+00 -6.042197219856634e+00 -5.979821766380606e+00 3.513723847601102e+00 4.871893354030680e+00 9.155222915216162e+03 + 173960 9.527390450684928e-01 -5.956866396877421e+00 -5.998209698267011e+00 3.939743157503088e+00 4.702343523068853e+00 9.211540220545190e+03 + 173980 9.611787608566198e-01 -5.969444628549403e+00 -6.014124102973319e+00 3.833460308970261e+00 4.576903852701816e+00 9.260452304897100e+03 + 174000 1.051438175025631e+00 -6.101382917722644e+00 -6.003234890590925e+00 3.125614704336761e+00 4.689195864485206e+00 9.226992653992756e+03 + 174020 1.016491565054876e+00 -6.048832191926746e+00 -5.973604720634263e+00 3.429651843891688e+00 4.861619625466684e+00 9.136208237788278e+03 + 174040 1.000615219460889e+00 -6.022916712535356e+00 -6.018932770809801e+00 3.552661413143449e+00 4.575537823044573e+00 9.275264680312906e+03 + 174060 9.683843814119234e-01 -5.971381302071002e+00 -6.053135284238339e+00 3.846189532850520e+00 4.376745515857817e+00 9.380898409580950e+03 + 174080 9.440087991074108e-01 -5.932881217537550e+00 -6.010467723524440e+00 4.043986458314921e+00 4.598472734465202e+00 9.249210889651768e+03 + 174100 1.010613704460070e+00 -6.025771438071368e+00 -5.987825841603489e+00 3.555497855165043e+00 4.773387342145679e+00 9.179729078363245e+03 + 174120 1.044133563438923e+00 -6.066505358172167e+00 -6.022882286755126e+00 3.347819597293139e+00 4.598310024018271e+00 9.287433117890796e+03 + 174140 9.781586743719261e-01 -5.962621385295517e+00 -6.012283321628204e+00 3.897399002924013e+00 4.612232479341911e+00 9.254789936498002e+03 + 174160 9.746014350685996e-01 -5.951307679885520e+00 -5.996050783033438e+00 4.043306056995272e+00 4.786384234747093e+00 9.204905530435886e+03 + 174180 9.954889584992697e-01 -5.972316759932900e+00 -5.991811845423159e+00 3.871242491866175e+00 4.759298694126375e+00 9.191928984663662e+03 + 174200 1.050772740077655e+00 -6.043639672419418e+00 -6.008547542641598e+00 3.428222748864688e+00 4.629727188538461e+00 9.243315068976488e+03 + 174220 1.023765236847365e+00 -5.992055408819955e+00 -6.044657515823374e+00 3.675631547964270e+00 4.373582109400885e+00 9.354640277300208e+03 + 174240 1.046392339188033e+00 -6.018924473130356e+00 -5.989769492875867e+00 3.586276002306303e+00 4.753688410646192e+00 9.185683497784485e+03 + 174260 1.015108843710412e+00 -5.966860520289887e+00 -5.960978674007062e+00 3.946954180268471e+00 4.980728651837222e+00 9.097635091524840e+03 + 174280 9.791716693996031e-01 -5.908854050837242e+00 -6.011248726672193e+00 4.165476439013407e+00 4.577510364844246e+00 9.251571178905018e+03 + 174300 1.038695613666949e+00 -5.990839533370369e+00 -5.967136105700257e+00 3.800935307660985e+00 4.937044057436346e+00 9.116373765497350e+03 + 174320 9.965467827563848e-01 -5.923973165205544e+00 -5.990357262825743e+00 4.094499312234920e+00 4.713311550793828e+00 9.187446228327795e+03 + 174340 1.004870379091036e+00 -5.931437159618277e+00 -6.030649982531689e+00 4.080061508381705e+00 4.510366126078165e+00 9.311346253472977e+03 + 174360 1.039917780731387e+00 -5.981886101720000e+00 -6.015883526583417e+00 3.729054536575616e+00 4.533836061925374e+00 9.265885258379683e+03 + 174380 9.864902931081017e-01 -5.904987221705570e+00 -5.995007862683268e+00 4.204464325481234e+00 4.687551874338120e+00 9.201712856755988e+03 + 174400 1.036104906486244e+00 -5.983643905546630e+00 -5.990473119218975e+00 3.842928683472250e+00 4.803714281748247e+00 9.187813735658379e+03 + 174420 1.003709915709491e+00 -5.944024347502874e+00 -6.064263319361854e+00 3.949481236278648e+00 4.259050452943626e+00 9.415375589778439e+03 + 174440 1.035179221244382e+00 -6.007218921436386e+00 -5.987037150584401e+00 3.643566192744809e+00 4.759453044095853e+00 9.177292378937995e+03 + 174460 1.032568640147012e+00 -6.025253982723124e+00 -5.959459799333843e+00 3.613638531334762e+00 4.991438913972989e+00 9.093013390533764e+03 + 174480 1.034758135363307e+00 -6.056483161167654e+00 -5.956797817264913e+00 3.367561156090326e+00 4.939969827036978e+00 9.084863152663405e+03 + 174500 9.196981530775679e-01 -5.911737234803506e+00 -6.005054952600645e+00 4.143747774606792e+00 4.607902998145462e+00 9.232559543681442e+03 + 174520 9.186762584221807e-01 -5.934538794441067e+00 -6.017212927833728e+00 3.983370363519943e+00 4.508642695798492e+00 9.269946957236350e+03 + 174540 1.054070701226391e+00 -6.159082686582558e+00 -5.948702974845154e+00 2.846051611761915e+00 5.054084472713264e+00 9.060248691763456e+03 + 174560 9.653389608377355e-01 -6.047864038211833e+00 -5.998909702758517e+00 3.383337965918037e+00 4.664441335749903e+00 9.213709426951667e+03 + 174580 9.609617113016398e-01 -6.060096881273115e+00 -5.999233143679163e+00 3.371268706760870e+00 4.720757706658293e+00 9.214699745737607e+03 + 174600 9.640280626724278e-01 -6.079687569308292e+00 -5.965564758009998e+00 3.305317521218256e+00 4.960628364141036e+00 9.111628775419680e+03 + 174620 8.648201632019097e-01 -5.942520591153901e+00 -6.015367135856446e+00 3.958944951082072e+00 4.540648818433698e+00 9.264260838278611e+03 + 174640 9.966821325964648e-01 -6.141581028176240e+00 -5.940414868496555e+00 2.915045098074807e+00 5.070172317318164e+00 9.035034622079773e+03 + 174660 9.375379632826779e-01 -6.050012130192616e+00 -5.959288314281568e+00 3.437096688120009e+00 4.958046878546384e+00 9.092442633435885e+03 + 174680 9.402071521268851e-01 -6.039928341001955e+00 -5.963789853082072e+00 3.458500257663897e+00 4.895699237692793e+00 9.106223561114526e+03 + 174700 9.848713248346646e-01 -6.080797328449105e+00 -5.963189804564539e+00 3.278305398508512e+00 4.953626000359188e+00 9.104389550779115e+03 + 174720 9.134862840435471e-01 -5.938020371764987e+00 -6.018670984795548e+00 4.038019027102622e+00 4.574910726439102e+00 9.274437411386276e+03 + 174740 9.918059173549123e-01 -6.003528785476028e+00 -6.027559199170959e+00 3.633407768602843e+00 4.495421414472050e+00 9.301853169693930e+03 + 174760 1.046236361776978e+00 -6.033584970788386e+00 -6.002572232957873e+00 3.505975897682127e+00 4.684055837510599e+00 9.224929913832821e+03 + 174780 1.026536954946409e+00 -5.964337774800743e+00 -5.996648400491042e+00 3.882036033494087e+00 4.696503420727224e+00 9.206735205194431e+03 + 174800 1.084339524756345e+00 -6.022329183800460e+00 -5.946243816464033e+00 3.627730291026798e+00 5.064624244445101e+00 9.052741459188614e+03 + 174820 9.705829365599744e-01 -5.835133533409908e+00 -6.002905084077506e+00 4.579543052273783e+00 4.616172845776875e+00 9.225917121868259e+03 + 174840 1.003618385241124e+00 -5.872887151328572e+00 -6.020347355932135e+00 4.347036130216428e+00 4.500296815989860e+00 9.279596161391304e+03 + 174860 1.124632892657651e+00 -6.047845871847927e+00 -6.001254562064416e+00 3.437623482441562e+00 4.705157993200368e+00 9.220912164663565e+03 + 174880 1.122434057187399e+00 -6.049354473347607e+00 -5.975891564693987e+00 3.409980578362641e+00 4.831815968200102e+00 9.143204342338193e+03 + 174900 9.801290169801421e-01 -5.849277232551999e+00 -6.029348891493987e+00 4.514139284328269e+00 4.480139952684211e+00 9.307344192485067e+03 + 174920 1.032719377264109e+00 -5.940230774000820e+00 -5.989712455552693e+00 4.063940079187157e+00 4.779808606450834e+00 9.185480392842705e+03 + 174940 1.036620814058223e+00 -5.961077583644971e+00 -6.021414603589954e+00 3.917361549819090e+00 4.570897044171337e+00 9.282897857713866e+03 + 174960 1.046173343168461e+00 -5.994651099924696e+00 -5.977765948548530e+00 3.788646984347273e+00 4.885604136517953e+00 9.148905303487192e+03 + 174980 1.066887151945785e+00 -6.046693930554738e+00 -5.976806756855856e+00 3.464881400249225e+00 4.866184366633382e+00 9.145973718675545e+03 + 175000 1.000710526864937e+00 -5.970307709516566e+00 -5.989446526025936e+00 3.894959334436430e+00 4.785061288317347e+00 9.184671606008205e+03 + 175020 9.775454083726365e-01 -5.958385814941584e+00 -6.004343035156874e+00 3.884475759038880e+00 4.620582288705840e+00 9.230388023585576e+03 + 175040 9.830730462118193e-01 -5.987286225679458e+00 -5.975990249816544e+00 3.774741637620947e+00 4.839604879072418e+00 9.143480689260336e+03 + 175060 9.770876779713118e-01 -5.995262846676658e+00 -5.974285484680803e+00 3.667110575280606e+00 4.787565834097081e+00 9.138280230687616e+03 + 175080 1.008433059375599e+00 -6.054041858716727e+00 -5.984187716979234e+00 3.431176829447673e+00 4.832290121197854e+00 9.168557627911840e+03 + 175100 1.012544572260639e+00 -6.070806627686350e+00 -5.960550001377166e+00 3.387002748465409e+00 5.020113358890521e+00 9.096328707431903e+03 + 175120 9.457104303326398e-01 -5.981896725781137e+00 -5.990034511386096e+00 3.812743803782181e+00 4.766015379520256e+00 9.186455998206689e+03 + 175140 9.901723248783303e-01 -6.053372113003624e+00 -5.970401680727641e+00 3.427390519694038e+00 4.903819581455630e+00 9.126376517540111e+03 + 175160 9.105977381562370e-01 -5.937229540437806e+00 -6.041491990471892e+00 3.989999477549876e+00 4.391308354892160e+00 9.344828725476253e+03 + 175180 9.346449595561432e-01 -5.970543129578758e+00 -6.012433855370110e+00 3.884182477457053e+00 4.643639447394243e+00 9.255234843052860e+03 + 175200 9.619354393067603e-01 -6.003731864892144e+00 -6.015603559588437e+00 3.629736310019110e+00 4.561567201934178e+00 9.265004999719466e+03 + 175220 1.031730129615966e+00 -6.092073548663091e+00 -5.981688868927734e+00 3.247071611270102e+00 4.880917524284503e+00 9.160918358558509e+03 + 175240 9.457385376413708e-01 -5.937483004834699e+00 -6.034841563558111e+00 4.013534442346124e+00 4.454486531968022e+00 9.324314622484324e+03 + 175260 1.012972497910468e+00 -5.994558380105588e+00 -6.009786930500825e+00 3.711645215171383e+00 4.624200522191371e+00 9.247131831875433e+03 + 175280 1.003584735572427e+00 -5.921112349079406e+00 -6.081134247764435e+00 4.062600621226110e+00 4.143730115667882e+00 9.467781070915198e+03 + 175300 1.001031001508667e+00 -5.861733416348391e+00 -6.031672343984603e+00 4.454540800532521e+00 4.478725180081338e+00 9.314496723622646e+03 + 175320 1.056642167777405e+00 -5.899986891600236e+00 -6.004215103270684e+00 4.216724305335988e+00 4.618229784660646e+00 9.229971515848923e+03 + 175340 1.091861734789924e+00 -5.923828467016058e+00 -5.975814622623737e+00 4.119329665720839e+00 4.820817115389967e+00 9.142915281666857e+03 + 175360 1.066226409453938e+00 -5.869065064436087e+00 -5.978308551463122e+00 4.443489954410609e+00 4.816196946526393e+00 9.150515809697854e+03 + 175380 1.144911718039423e+00 -5.979671441717842e+00 -6.026195100798812e+00 3.804716255831831e+00 4.537570205875923e+00 9.297610076281011e+03 + 175400 1.033354659246867e+00 -5.822725272432550e+00 -6.042786533036471e+00 4.656808118801401e+00 4.393182306043671e+00 9.348839203743337e+03 + 175420 1.109544362252024e+00 -5.951296098484495e+00 -6.033321436471180e+00 3.910276971212790e+00 4.439274787113215e+00 9.319617883291057e+03 + 175440 1.062850555364077e+00 -5.907162775872243e+00 -6.041347555090574e+00 4.157358564480340e+00 4.386848797181212e+00 9.344415303713013e+03 + 175460 1.075002272985246e+00 -5.960393817222204e+00 -6.009637022726769e+00 3.934101823188168e+00 4.651339716819525e+00 9.246629526333079e+03 + 175480 1.021938543006268e+00 -5.921093195689862e+00 -5.988745078032901e+00 4.062814465657575e+00 4.674346888148887e+00 9.182513953795018e+03 + 175500 9.987453139703080e-01 -5.922379602060656e+00 -5.986081945471948e+00 4.125142750548127e+00 4.759354036774703e+00 9.174330922403329e+03 + 175520 1.020453678554516e+00 -5.983061328708857e+00 -5.968122554244326e+00 3.841198042199659e+00 4.926978796942874e+00 9.119425134199761e+03 + 175540 1.025513757223260e+00 -6.015797202584976e+00 -5.997697370047124e+00 3.591707465398155e+00 4.695639504770533e+00 9.209997574847857e+03 + 175560 1.018133941626763e+00 -6.024306924599324e+00 -6.029329235264163e+00 3.546374429573762e+00 4.517535544536194e+00 9.307318223390999e+03 + 175580 9.586621654685762e-01 -5.954183021503569e+00 -6.031661103540634e+00 3.963072989877570e+00 4.518181853126295e+00 9.314496373553340e+03 + 175600 9.800920068637435e-01 -6.001319793732035e+00 -6.026396171640499e+00 3.697645212429957e+00 4.553652769922615e+00 9.298260736428507e+03 + 175620 1.029637790698154e+00 -6.086308613894776e+00 -6.009066787202578e+00 3.228830682581238e+00 4.672365204581885e+00 9.244896601364308e+03 + 175640 9.460856754323483e-01 -5.971146168053560e+00 -6.007965581383676e+00 3.872803776223288e+00 4.661381007095963e+00 9.241513036849856e+03 + 175660 9.997255227824924e-01 -6.057172672975602e+00 -6.006545521433639e+00 3.377394644511017e+00 4.668103583191350e+00 9.237155894386980e+03 + 175680 8.881222878087094e-01 -5.896644933169255e+00 -6.010190353652395e+00 4.243896774127259e+00 4.591901398616035e+00 9.248368530499807e+03 + 175700 1.016139285236189e+00 -6.086475322073271e+00 -5.967858223507587e+00 3.224705360119309e+00 4.905823096020146e+00 9.118645974995596e+03 + 175720 9.943715633449440e-01 -6.050491674057533e+00 -5.990869989750486e+00 3.414166946570640e+00 4.756523884287532e+00 9.189028426020182e+03 + 175740 9.480831658741777e-01 -5.977383845204230e+00 -6.003339017836144e+00 3.793076244676183e+00 4.644037626873747e+00 9.227294540942050e+03 + 175760 9.970700890635151e-01 -6.041754131880070e+00 -5.981340974978751e+00 3.510561003255094e+00 4.857462699088286e+00 9.159857290699631e+03 + 175780 9.790998228482189e-01 -6.001181957410349e+00 -6.019864608270336e+00 3.686404009208094e+00 4.579125336839176e+00 9.278136806449240e+03 + 175800 9.677190489862882e-01 -5.965389307404235e+00 -5.990184518348505e+00 3.878820303891608e+00 4.736442365603116e+00 9.186949330478750e+03 + 175820 1.044705951696796e+00 -6.053403556383961e+00 -5.979683117312389e+00 3.484712117504333e+00 4.908026286854376e+00 9.154781708963681e+03 + 175840 1.046097542900421e+00 -6.018640834513687e+00 -5.966626313496580e+00 3.604308665550589e+00 4.902984094451928e+00 9.114878091651126e+03 + 175860 1.000242432396510e+00 -5.906264228308455e+00 -6.010406804582970e+00 4.181953776284132e+00 4.583950987304275e+00 9.249000359784266e+03 + 175880 1.054316828390019e+00 -5.936402992096022e+00 -6.015761754548665e+00 4.028854131628155e+00 4.573163836896279e+00 9.265473418437932e+03 + 175900 1.088605765230973e+00 -5.943114097928319e+00 -6.004792210642015e+00 4.019314978523613e+00 4.665149710664475e+00 9.231758686099753e+03 + 175920 1.086609816987527e+00 -5.907812103631249e+00 -6.026342603817763e+00 4.114872996985561e+00 4.434252522378981e+00 9.298090660710135e+03 + 175940 1.074783091139512e+00 -5.874169416303852e+00 -6.021550897748083e+00 4.356994936820788e+00 4.510707663157466e+00 9.283305550768608e+03 + 175960 1.092242401119250e+00 -5.895716158204312e+00 -6.101785680884506e+00 4.158701970801515e+00 3.975418882416272e+00 9.532056761467878e+03 + 175980 1.116263327577770e+00 -5.940814747651736e+00 -6.015184684509078e+00 3.996220318235415e+00 4.569176632090020e+00 9.263730319385841e+03 + 176000 1.109632120473638e+00 -5.950042204112828e+00 -6.004534405858630e+00 3.992186064095210e+00 4.679283409029845e+00 9.230964814967951e+03 + 176020 1.078421036665945e+00 -5.929606917918194e+00 -6.023226265874472e+00 3.995224357861306e+00 4.457647574349087e+00 9.288475337227044e+03 + 176040 1.089183685495825e+00 -5.972300284285479e+00 -6.038626412495281e+00 3.843434743682260e+00 4.462579851566411e+00 9.335989096482193e+03 + 176060 1.028621714309083e+00 -5.911061017809054e+00 -6.025826702272282e+00 4.126329997226906e+00 4.467327677106783e+00 9.296512425232298e+03 + 176080 1.032484923622059e+00 -5.941999586291912e+00 -6.030737965588086e+00 3.967788058282404e+00 4.458238552143957e+00 9.311634476454554e+03 + 176100 1.000346346053875e+00 -5.917385736397415e+00 -6.022379067836454e+00 4.141023870018723e+00 4.538135913230236e+00 9.285877076878300e+03 + 176120 9.907863038399976e-01 -5.920858200637586e+00 -6.027186737683641e+00 4.108262621518233e+00 4.497707707511856e+00 9.300703326128982e+03 + 176140 1.030127425217976e+00 -5.995320820277602e+00 -6.010240704737175e+00 3.762558043271528e+00 4.676885757860003e+00 9.248530117809683e+03 + 176160 1.001469631235880e+00 -5.968358162170704e+00 -6.020893456238717e+00 3.867311525270922e+00 4.565645736921910e+00 9.281298381999868e+03 + 176180 9.861023187916214e-01 -5.959891103579418e+00 -6.007170983730911e+00 3.901818371226619e+00 4.630329982858936e+00 9.239073630909852e+03 + 176200 9.676868595179293e-01 -5.944009392864858e+00 -6.022903273239253e+00 3.974225570758102e+00 4.521204700859796e+00 9.287485077511168e+03 + 176220 9.961086074878160e-01 -5.997022086628611e+00 -6.032849961525577e+00 3.688708529109916e+00 4.482979327105816e+00 9.318184406272921e+03 + 176240 1.003521119184531e+00 -6.020374307953215e+00 -6.035752397114171e+00 3.543669494974224e+00 4.455366127260410e+00 9.327135617608368e+03 + 176260 1.049445826905085e+00 -6.100331440871149e+00 -6.001687709666906e+00 3.178646439268678e+00 4.745074008911510e+00 9.222247831171415e+03 + 176280 9.304152442435101e-01 -5.936853336784266e+00 -6.035222111993854e+00 4.022335427589333e+00 4.457486697817111e+00 9.325502537390321e+03 + 176300 9.919521147608475e-01 -6.039292925507530e+00 -5.980012731203749e+00 3.490974673891608e+00 4.831370723164338e+00 9.155804749826439e+03 + 176320 9.889326945046298e-01 -6.042719643211468e+00 -5.990087657258148e+00 3.495091046344956e+00 4.797312054462420e+00 9.186650645564809e+03 + 176340 1.012797120684468e+00 -6.085172225638020e+00 -5.986788016657047e+00 3.270011846732740e+00 4.834949199608625e+00 9.176522149947785e+03 + 176360 9.339033703110842e-01 -5.972993437124924e+00 -6.032256277936183e+00 3.837640000092903e+00 4.497343597259674e+00 9.316325549267805e+03 + 176380 9.846652605715701e-01 -6.054059306436207e+00 -5.958659787445218e+00 3.448735536685144e+00 4.996534337759251e+00 9.090578849482810e+03 + 176400 9.898238632856670e-01 -6.063255214420408e+00 -5.987903837003699e+00 3.350592743061065e+00 4.783272012775784e+00 9.179952107726216e+03 + 176420 9.752420409159185e-01 -6.038513925687624e+00 -6.002139437781365e+00 3.495712837578977e+00 4.704580776070534e+00 9.223617258692728e+03 + 176440 9.623368452274625e-01 -6.012076370197827e+00 -5.993416249482086e+00 3.637705549017666e+00 4.744854849811802e+00 9.196845794188621e+03 + 176460 9.829739726867087e-01 -6.029124383339026e+00 -5.970076906039211e+00 3.548897139321295e+00 4.887956891544410e+00 9.125415844777861e+03 + 176480 9.434184563697375e-01 -5.948326693832302e+00 -6.003672148520301e+00 4.000118877203260e+00 4.682316711703336e+00 9.228324025556083e+03 + 176500 1.020903602935919e+00 -6.030570855847295e+00 -6.012838222869147e+00 3.531277554939288e+00 4.633101077615895e+00 9.256492617676869e+03 + 176520 1.041157740788483e+00 -6.024462006861803e+00 -6.000023802202747e+00 3.518125088874237e+00 4.658453041826485e+00 9.217121919067016e+03 + 176540 9.885446321914746e-01 -5.912488136321778e+00 -5.998059024564729e+00 4.176267031684067e+00 4.684905749340886e+00 9.211056058985025e+03 + 176560 1.019211598928082e+00 -5.923168346125426e+00 -5.975467176051110e+00 4.094090942725782e+00 4.793782968074728e+00 9.141861813032156e+03 + 176580 1.046262050848526e+00 -5.932111273781900e+00 -5.998576865808968e+00 4.054873943383560e+00 4.673218228447018e+00 9.212660283321111e+03 + 176600 1.094198817674762e+00 -5.980592932138750e+00 -5.982265230489157e+00 3.789368601939811e+00 4.779766006024443e+00 9.162681433676655e+03 + 176620 1.144036926844769e+00 -6.039499449329122e+00 -6.041077094657560e+00 3.448166253911479e+00 4.439107170295763e+00 9.343582179703148e+03 + 176640 1.015826449234961e+00 -5.845995524822099e+00 -6.080071605721557e+00 4.539104969559908e+00 4.195003889878768e+00 9.464485260019594e+03 + 176660 1.068903655369921e+00 -5.933398317612209e+00 -6.026524129849493e+00 4.064913612758023e+00 4.530170787718666e+00 9.298655357001109e+03 + 176680 1.042335464583136e+00 -5.909138833097207e+00 -6.008001050059379e+00 4.213451726743071e+00 4.645769578067648e+00 9.241585458936632e+03 + 176700 1.054838247228415e+00 -5.947566625699009e+00 -6.015614469966804e+00 3.956035996362650e+00 4.565294744207099e+00 9.265039340065476e+03 + 176720 1.010585820093854e+00 -5.909291001078947e+00 -6.036197143903490e+00 4.223009109780649e+00 4.494294399019990e+00 9.328496685001453e+03 + 176740 1.024935890387010e+00 -5.964553993998748e+00 -6.046978085499459e+00 3.812202251898193e+00 4.338910363414167e+00 9.361844099192565e+03 + 176760 1.032955855329152e+00 -6.013630558067927e+00 -5.992743868922451e+00 3.664167446867828e+00 4.784102048145847e+00 9.194793731877868e+03 + 176780 1.015702155291322e+00 -6.023582254176080e+00 -5.988060437293352e+00 3.568790454196646e+00 4.772762223720670e+00 9.180450950871207e+03 + 176800 9.587992457634591e-01 -5.967923337852767e+00 -6.050356877200164e+00 3.831061966600240e+00 4.357715827118497e+00 9.372267789593247e+03 + 176820 9.057334169722548e-01 -5.911152453380048e+00 -6.021327960792380e+00 4.113804789551304e+00 4.481159976385020e+00 9.282619203786388e+03 + 176840 9.253725696381762e-01 -5.951228405233462e+00 -5.975896332577704e+00 3.954259784589748e+00 4.812612728429695e+00 9.143198735919039e+03 + 176860 9.958595942756007e-01 -6.060661339434910e+00 -5.979854510759387e+00 3.398385578652649e+00 4.862390893723823e+00 9.155314261816042e+03 + 176880 9.951409545049615e-01 -6.060962384969407e+00 -5.979132465929501e+00 3.387431193729884e+00 4.857311251996065e+00 9.153094063287826e+03 + 176900 9.604499276401842e-01 -6.009151490382777e+00 -5.984545398335742e+00 3.641704250916129e+00 4.782996239230640e+00 9.169648239551898e+03 + 176920 9.932908889533425e-01 -6.053472347547421e+00 -5.954090715217832e+00 3.402284798574061e+00 4.972949510668457e+00 9.076655038186400e+03 + 176940 1.003959483201050e+00 -6.060411794872726e+00 -5.996195360801592e+00 3.369629164576939e+00 4.738369866474446e+00 9.205374443881312e+03 + 176960 8.879174592637858e-01 -5.880378407857701e+00 -6.018077533846760e+00 4.366143355231262e+00 4.575453664931200e+00 9.272602072860253e+03 + 176980 9.569869173001665e-01 -5.972653037483554e+00 -5.948757935673378e+00 3.864029074762670e+00 5.001238447111757e+00 9.060410588216237e+03 + 177000 1.025009921400114e+00 -6.058869601562160e+00 -5.971779043241307e+00 3.417710025648805e+00 4.917797488747487e+00 9.130595134542145e+03 + 177020 9.770813333579562e-01 -5.972324209956359e+00 -5.998364475588362e+00 3.852326693956853e+00 4.702799458979809e+00 9.212005759796386e+03 + 177040 1.033041421879915e+00 -6.038905980303069e+00 -5.999000514180917e+00 3.473329607938361e+00 4.702472969762679e+00 9.213959620118105e+03 + 177060 9.358887080073058e-01 -5.879440202138515e+00 -6.016089211764699e+00 4.293435743110912e+00 4.508775983471466e+00 9.266486696279606e+03 + 177080 1.022610411925349e+00 -5.990866024105470e+00 -5.959726207114985e+00 3.732076395855455e+00 4.910886043885927e+00 9.093832555554698e+03 + 177100 1.018316063280657e+00 -5.968168347240160e+00 -6.020305346999251e+00 3.885013064574077e+00 4.585634343782734e+00 9.279479099246808e+03 + 177120 1.060334019644992e+00 -6.017921702327977e+00 -6.016307792011372e+00 3.591169070464986e+00 4.600436393254742e+00 9.267178831706275e+03 + 177140 1.054710743130254e+00 -6.001142282717915e+00 -5.965714095548419e+00 3.685721270697461e+00 4.889155403918955e+00 9.112080287406094e+03 + 177160 9.902798929068691e-01 -5.895154121377912e+00 -5.979802282916824e+00 4.247611118536998e+00 4.761548275719900e+00 9.155132633282670e+03 + 177180 1.046634933802410e+00 -5.964525053478533e+00 -6.027610807971170e+00 3.960939507633245e+00 4.598691342847565e+00 9.301978974383754e+03 + 177200 1.090327003457063e+00 -6.016843589101904e+00 -5.952534782686925e+00 3.656960370487808e+00 5.026231488678246e+00 9.071910343298921e+03 + 177220 1.084027245568444e+00 -5.994815749818553e+00 -5.953292807972153e+00 3.805708285148143e+00 5.044139442884658e+00 9.074188515101399e+03 + 177240 1.103031039301715e+00 -6.010048904830867e+00 -5.937531330529599e+00 3.656319475013450e+00 5.072726608709687e+00 9.026256216822110e+03 + 177260 9.881482659632953e-01 -5.825115442706624e+00 -5.967880875616761e+00 4.628722179143905e+00 4.808940970494555e+00 9.118680963545545e+03 + 177280 1.016450235729778e+00 -5.852312487233776e+00 -5.976867513190966e+00 4.379287234597777e+00 4.664073000723621e+00 9.146167039301348e+03 + 177300 1.080457456213344e+00 -5.930038048700706e+00 -6.021269063125199e+00 4.066440519930861e+00 4.542577917151563e+00 9.282432909878635e+03 + 177320 1.032146904119835e+00 -5.847702839189421e+00 -6.059461591587430e+00 4.508238525452911e+00 4.292286999622518e+00 9.400481958068412e+03 + 177340 1.022983394585840e+00 -5.835168440933270e+00 -6.036955747083208e+00 4.609936268180052e+00 4.451242329782398e+00 9.330828331742805e+03 + 177360 1.061481071179172e+00 -5.902012186680889e+00 -6.046083182413493e+00 4.222838701523507e+00 4.395560749112365e+00 9.359051361055010e+03 + 177380 1.078061668237210e+00 -5.945693215916322e+00 -6.051708281002705e+00 3.963592467604568e+00 4.354837558100249e+00 9.376441564235211e+03 + 177400 1.053302126279887e+00 -5.939355203345316e+00 -6.048328443610584e+00 3.990667566743017e+00 4.364926357585411e+00 9.366010571919971e+03 + 177420 1.038594496708761e+00 -5.956840189659104e+00 -6.006354053055609e+00 3.938017671683525e+00 4.653701405815197e+00 9.236561302523593e+03 + 177440 1.057505893323009e+00 -6.025660750493481e+00 -5.980326373660249e+00 3.585032790757059e+00 4.845349798005616e+00 9.156744067816739e+03 + 177460 9.798993824035245e-01 -5.948052592141694e+00 -6.019007701042168e+00 3.969040104618309e+00 4.561604889044177e+00 9.275493316331642e+03 + 177480 1.007900865813226e+00 -6.020866779681768e+00 -6.002652765595409e+00 3.623550694843643e+00 4.728138382337091e+00 9.225205416851000e+03 + 177500 9.827410028235338e-01 -6.011552832826689e+00 -5.990913395954755e+00 3.646367325042319e+00 4.764882165503501e+00 9.189170144136448e+03 + 177520 9.745882306055479e-01 -6.020663894292174e+00 -5.968532377183299e+00 3.581281620159346e+00 4.880628858724706e+00 9.120667928880510e+03 + 177540 9.617101252266793e-01 -6.015401286785862e+00 -5.963016447525351e+00 3.646522457772365e+00 4.947324311333899e+00 9.103854653632645e+03 + 177560 9.875521959621576e-01 -6.060754785144141e+00 -6.009534739115063e+00 3.365353186925578e+00 4.659466617501054e+00 9.246342174373014e+03 + 177580 9.585731607667553e-01 -6.022231416145212e+00 -6.033618684370011e+00 3.605405451644674e+00 4.540017995323816e+00 9.320552204449381e+03 + 177600 9.882730993536900e-01 -6.070486759216120e+00 -6.003981598929437e+00 3.336267997116926e+00 4.718150919123354e+00 9.229301735724761e+03 + 177620 9.495987695028141e-01 -6.014530968173483e+00 -6.004223250417935e+00 3.702739830560975e+00 4.761928341027501e+00 9.230002749515586e+03 + 177640 1.019682660515718e+00 -6.114165521585603e+00 -5.979122165174360e+00 3.115754050745100e+00 4.891193901150324e+00 9.153080738540582e+03 + 177660 9.130751625668337e-01 -5.947369198254375e+00 -6.049527200572304e+00 3.987106863032013e+00 4.400499804822696e+00 9.369716425601639e+03 + 177680 1.010432072999256e+00 -6.080670459888448e+00 -5.992256167333132e+00 3.265163968135851e+00 4.772852518056032e+00 9.193290909892527e+03 + 177700 9.690236044088988e-01 -6.002950836043820e+00 -6.015287614585615e+00 3.648979430566451e+00 4.578139739069158e+00 9.264033589939781e+03 + 177720 9.862075045301948e-01 -6.008358717766985e+00 -5.954820700285494e+00 3.729559108552533e+00 5.036982689912681e+00 9.078815612412331e+03 + 177740 9.792000461456802e-01 -5.968763978649007e+00 -5.952058907481518e+00 3.841710418891771e+00 4.937633522636903e+00 9.070423244955695e+03 + 177760 1.020061046420733e+00 -5.988931226244473e+00 -5.969067553318995e+00 3.752942403269245e+00 4.867002687100790e+00 9.122312864469493e+03 + 177780 1.013311688687711e+00 -5.931657799006251e+00 -5.994612189606086e+00 4.048896008644920e+00 4.687402155660204e+00 9.200511696261054e+03 + 177800 1.013301033402241e+00 -5.889609282854146e+00 -6.021042068806055e+00 4.320203219902625e+00 4.565495823808870e+00 9.281761131401325e+03 + 177820 1.106136498388638e+00 -5.997910789973972e+00 -6.011933961278374e+00 3.723701137241830e+00 4.643177917533206e+00 9.253717584491502e+03 + 177840 1.056492996152001e+00 -5.906204467294977e+00 -6.012284225770157e+00 4.153139846505487e+00 4.544013457551432e+00 9.254787524293697e+03 + 177860 1.035313283682176e+00 -5.867726694668173e+00 -5.959240961702406e+00 4.414596928065888e+00 4.889107844968268e+00 9.092327472356461e+03 + 177880 1.050119961312785e+00 -5.885394818547150e+00 -5.988633025832117e+00 4.357475770672719e+00 4.764666008381490e+00 9.182171941056080e+03 + 177900 1.113317530100131e+00 -5.982303536242167e+00 -5.990825655052387e+00 3.749697563530506e+00 4.700762238528605e+00 9.188901536926813e+03 + 177920 1.131103180235899e+00 -6.021336895453932e+00 -6.032318709090001e+00 3.589199165750570e+00 4.526139892422092e+00 9.316531014804159e+03 + 177940 1.039296219489151e+00 -5.907997350392710e+00 -6.040929046484202e+00 4.250964467968370e+00 4.487650097897543e+00 9.343090536807427e+03 + 177960 1.016752457239048e+00 -5.895266113901704e+00 -5.978103470687304e+00 4.278011214006379e+00 4.802346292303927e+00 9.149917493664763e+03 + 177980 1.076325480205031e+00 -6.002470930504447e+00 -6.010928617646244e+00 3.645485435017899e+00 4.596920086626849e+00 9.250648565883175e+03 + 178000 1.049912998115743e+00 -5.985146315398543e+00 -6.012210272729718e+00 3.807455115033521e+00 4.652049683904059e+00 9.254547597775098e+03 + 178020 1.020664112264212e+00 -5.962819665328294e+00 -5.965913946075620e+00 3.889065540257290e+00 4.871297701367750e+00 9.112701885328697e+03 + 178040 9.866252508687497e-01 -5.927940405766451e+00 -6.005816059847609e+00 4.094029983257268e+00 4.646855926304739e+00 9.234892066796041e+03 + 178060 1.017538023763460e+00 -5.986518078459097e+00 -6.020304484519027e+00 3.780401967783485e+00 4.586395195757927e+00 9.279486181846476e+03 + 178080 9.914996228478319e-01 -5.960699413383012e+00 -6.002160369826623e+00 3.918929311807851e+00 4.680854083846361e+00 9.223671973404065e+03 + 178100 1.023077510959729e+00 -6.018079559694416e+00 -5.990833849176520e+00 3.598830438147247e+00 4.755279524201089e+00 9.188912235268097e+03 + 178120 9.739313324187965e-01 -5.954455430513685e+00 -5.983525386285719e+00 3.941006994707139e+00 4.774082810103003e+00 9.166545825636676e+03 + 178140 1.039030751253139e+00 -6.057993247153625e+00 -5.967173197065491e+00 3.437639895496197e+00 4.959142677459594e+00 9.116560619394751e+03 + 178160 1.024271712008636e+00 -6.044007664614893e+00 -5.984727746972809e+00 3.429545770471989e+00 4.769940231110443e+00 9.170228152779446e+03 + 178180 1.038225068698104e+00 -6.072393376001667e+00 -5.957680663106505e+00 3.307112454238144e+00 4.965810603417115e+00 9.087579896938811e+03 + 178200 9.876023595098380e-01 -6.003155146069703e+00 -5.989286176991743e+00 3.701745143414262e+00 4.781382910075942e+00 9.184171768824084e+03 + 178220 1.025309394593949e+00 -6.062053287081526e+00 -5.972066170026809e+00 3.343456549566668e+00 4.860176501156219e+00 9.131496360839108e+03 + 178240 1.008415938885669e+00 -6.038491462437518e+00 -5.972393454322969e+00 3.505633754208940e+00 4.885178745436377e+00 9.132482764760189e+03 + 178260 9.810733857967525e-01 -5.997250640816810e+00 -6.007794333024505e+00 3.709508440633500e+00 4.648964928345817e+00 9.240991140741015e+03 + 178280 1.029430127637681e+00 -6.068294424510865e+00 -5.988540619196494e+00 3.299921547416364e+00 4.757880239392975e+00 9.181922499519484e+03 + 178300 9.795956104556666e-01 -5.992222493516088e+00 -6.005270538060213e+00 3.741055067736794e+00 4.666131176786061e+00 9.233228164287322e+03 + 178320 9.761041251076085e-01 -5.984890928112428e+00 -5.996650369351490e+00 3.766182588390559e+00 4.698658057028218e+00 9.206743637201160e+03 + 178340 1.007560883082137e+00 -6.026189148128525e+00 -5.986284192401719e+00 3.534246507370133e+00 4.763386938425393e+00 9.174986631651833e+03 + 178360 9.661643222374150e-01 -5.951196534330817e+00 -6.073781202962037e+00 3.867189625840211e+00 4.163289488643582e+00 9.444937990699609e+03 + 178380 1.036588790853904e+00 -6.038682155347941e+00 -6.030591728293103e+00 3.481939657473787e+00 4.528396141612204e+00 9.311204075383161e+03 + 178400 9.811053256602159e-01 -5.936825954768733e+00 -6.006574457379378e+00 4.053703798018720e+00 4.653197102482499e+00 9.237241349341162e+03 + 178420 1.014230630914596e+00 -5.963308186994956e+00 -5.976489479690434e+00 3.923031739294143e+00 4.847342716838255e+00 9.145013825967719e+03 + 178440 1.014891518514339e+00 -5.938243148997521e+00 -6.045235037090563e+00 4.039909979610042e+00 4.425546001238620e+00 9.356402450227621e+03 + 178460 1.025205128362773e+00 -5.930727592861884e+00 -5.999553240217312e+00 4.091827949924691e+00 4.696620432075316e+00 9.215653733060099e+03 + 178480 1.031304785829340e+00 -5.919381296402983e+00 -5.938413326626785e+00 4.127019982066699e+00 5.017735119324477e+00 9.028927111561710e+03 + 178500 1.002026526561253e+00 -5.854412742000912e+00 -5.964723374542423e+00 4.524903996272007e+00 4.891483273703437e+00 9.109020815274826e+03 + 178520 1.051121192789698e+00 -5.907075578058452e+00 -6.031214054178282e+00 4.158710488521642e+00 4.445888148274483e+00 9.313075315239599e+03 + 178540 1.033296495232992e+00 -5.867595673519162e+00 -6.021215763569765e+00 4.393659483725644e+00 4.511549154022981e+00 9.282274525149747e+03 + 178560 1.053584616793111e+00 -5.893024602178700e+00 -6.065211011266779e+00 4.232776329563904e+00 4.244055322819461e+00 9.418279501916308e+03 + 178580 1.120250113067785e+00 -5.998180702951038e+00 -5.988690801858783e+00 3.687073950663053e+00 4.741566431292232e+00 9.182354724242168e+03 + 178600 1.009390129991587e+00 -5.848038822714061e+00 -6.031044570371574e+00 4.513521076829045e+00 4.462673753731688e+00 9.312571196669442e+03 + 178620 1.018901890639166e+00 -5.885124155639941e+00 -5.989451538270686e+00 4.333224568703253e+00 4.734160593027233e+00 9.184668290300149e+03 + 178640 1.061454289004453e+00 -5.977464918813215e+00 -5.988253776177325e+00 3.769888303502095e+00 4.707937014947094e+00 9.181017685620633e+03 + 178660 9.963541925685615e-01 -5.914436344333303e+00 -6.021457466300760e+00 4.139996450521616e+00 4.525464606719383e+00 9.283029996831667e+03 + 178680 1.085717262167000e+00 -6.088901634842970e+00 -5.998204532105190e+00 3.228613063664555e+00 4.749409862916175e+00 9.211559129958203e+03 + 178700 9.790254375194649e-01 -5.975114500142242e+00 -6.008262610980734e+00 3.809056280535124e+00 4.618714698446929e+00 9.242448539905065e+03 + 178720 9.682338145768683e-01 -5.992616889360279e+00 -6.006162222551238e+00 3.691598859522338e+00 4.613819460206313e+00 9.235974691955236e+03 + 178740 9.666742776875273e-01 -6.012858823233547e+00 -5.977324017044870e+00 3.655844523785202e+00 4.859890879914071e+00 9.147586832780678e+03 + 178760 9.627152974033564e-01 -6.022546907993776e+00 -6.003023094192944e+00 3.608810220138910e+00 4.720918980283709e+00 9.226328965985926e+03 + 178780 9.655701205818503e-01 -6.034855459368957e+00 -5.994283150866871e+00 3.514038553717074e+00 4.747011027680502e+00 9.199501238284882e+03 + 178800 9.416645786675479e-01 -6.002637842850691e+00 -5.994889434521459e+00 3.656344061440584e+00 4.700836621129342e+00 9.201360418317568e+03 + 178820 9.588913304688526e-01 -6.026798382561734e+00 -5.992574659355109e+00 3.503130260629898e+00 4.699648175386389e+00 9.194283247053703e+03 + 178840 9.479200886603818e-01 -6.005791731186609e+00 -5.996943620055413e+00 3.634678558777769e+00 4.685485782133870e+00 9.207668499774536e+03 + 178860 9.485461644605615e-01 -5.997774830205608e+00 -6.008109689371725e+00 3.667434549614244e+00 4.608090188968113e+00 9.241954077193468e+03 + 178880 9.827662878359871e-01 -6.036433729504010e+00 -6.015910432531350e+00 3.481666114173510e+00 4.599514061360464e+00 9.265959590761777e+03 + 178900 9.935916504865916e-01 -6.041543001828783e+00 -6.010359719469600e+00 3.507629966499176e+00 4.686689199402958e+00 9.248874215666485e+03 + 178920 9.466490159337945e-01 -5.959535279680732e+00 -6.011378564188592e+00 3.914864425089416e+00 4.617172262722930e+00 9.251971942333561e+03 + 178940 9.896121235014427e-01 -6.006846766313679e+00 -6.010968826415185e+00 3.604596959235963e+00 4.580927452246375e+00 9.250749588808776e+03 + 178960 9.939686666479026e-01 -5.994896758983690e+00 -5.989534609625403e+00 3.729853267536776e+00 4.760643558941987e+00 9.184923661083600e+03 + 178980 9.548563913133278e-01 -5.917162620373237e+00 -6.012012072403470e+00 4.129352549254127e+00 4.584712317791269e+00 9.253931566940682e+03 + 179000 9.774606757168747e-01 -5.927382066564416e+00 -6.053995020383422e+00 4.078579470954653e+00 4.351548296834644e+00 9.383532790250505e+03 + 179020 1.046952091355962e+00 -6.008757444002383e+00 -6.018686516494840e+00 3.639906115832221e+00 4.582891845061532e+00 9.274504500645327e+03 + 179040 1.036609430692788e+00 -5.973254558448725e+00 -5.992141629145463e+00 3.863082422401268e+00 4.754629939695857e+00 9.192911664572319e+03 + 179060 1.048765002866066e+00 -5.974059236403223e+00 -5.968602903436663e+00 3.792558794723447e+00 4.823889902982233e+00 9.120871580184334e+03 + 179080 1.008118343371213e+00 -5.894381220275415e+00 -5.962682958894735e+00 4.291121631611891e+00 4.898922478799862e+00 9.102815373024136e+03 + 179100 9.845124210627896e-01 -5.833970389845003e+00 -6.011786987451313e+00 4.513995487648748e+00 4.492945067163769e+00 9.253238010766636e+03 + 179120 1.072437769755122e+00 -5.931199693407397e+00 -5.995218721846892e+00 4.104570232884326e+00 4.736963064672111e+00 9.202349724725153e+03 + 179140 1.087599942076391e+00 -5.911302616185481e+00 -6.037730371950281e+00 4.082037605165597e+00 4.356069866932144e+00 9.333207043313270e+03 + 179160 1.159924825293056e+00 -5.973178625032077e+00 -5.979538598384348e+00 3.844262777381127e+00 4.807742826189688e+00 9.154320380111898e+03 + 179180 1.079864959925007e+00 -5.811342270592492e+00 -5.991227210104730e+00 4.674675665519170e+00 4.641748505735476e+00 9.190094655457411e+03 + 179200 1.094663459872127e+00 -5.799174096416000e+00 -5.965781600797892e+00 4.778738181193113e+00 4.822052108604312e+00 9.112197436082915e+03 + 179220 1.126776355936258e+00 -5.822365844157098e+00 -5.975574398333231e+00 4.639224179293446e+00 4.759476952266953e+00 9.142126718327112e+03 + 179240 1.108733868113785e+00 -5.784329381030785e+00 -5.981835139084190e+00 4.841839071545041e+00 4.707730444885112e+00 9.161301772065679e+03 + 179260 1.157252343974405e+00 -5.860423604095528e+00 -5.981557347358155e+00 4.474619147027831e+00 4.779050447827639e+00 9.160492423520394e+03 + 179280 1.050759677168004e+00 -5.725083400195427e+00 -6.030463589043251e+00 5.108584302833474e+00 4.355044001037776e+00 9.310804999435015e+03 + 179300 1.153099017755405e+00 -5.917281624519756e+00 -6.037427122771275e+00 4.144906584518203e+00 4.455012541102215e+00 9.332258387281250e+03 + 179320 1.066281899149278e+00 -5.852393396124542e+00 -6.039406855123252e+00 4.477501357795260e+00 4.403641135985422e+00 9.338414358479926e+03 + 179340 1.055117509048732e+00 -5.895101540476739e+00 -6.029988675915589e+00 4.196186873142757e+00 4.421644067736137e+00 9.309335999159755e+03 + 179360 1.088628877604191e+00 -5.992859793628127e+00 -5.991680388486882e+00 3.762991400237708e+00 4.769763727071091e+00 9.191524924205680e+03 + 179380 1.006057422025108e+00 -5.902516707851793e+00 -6.042189643344285e+00 4.224186164882139e+00 4.422162554967344e+00 9.347007224092378e+03 + 179400 1.067073471864699e+00 -6.017593386754417e+00 -5.968831456357947e+00 3.654690582391890e+00 4.934689132612762e+00 9.121615772709421e+03 + 179420 9.493469236958167e-01 -5.863158978390316e+00 -5.998355935410769e+00 4.493491455020175e+00 4.717169606147252e+00 9.211989755451956e+03 + 179440 1.024690346442564e+00 -5.991189180023664e+00 -6.012499892494338e+00 3.736200917484644e+00 4.613831508655938e+00 9.255444942789482e+03 + 179460 9.905185285712660e-01 -5.958052786732432e+00 -6.050145850787127e+00 3.902420488171484e+00 4.373607863013828e+00 9.371607982112311e+03 + 179480 1.012203309279417e+00 -6.009620545167718e+00 -6.001013786568098e+00 3.599234047747770e+00 4.648655387518377e+00 9.220135003691834e+03 + 179500 9.756329817127348e-01 -5.972854496973094e+00 -5.998357695805740e+00 3.864152014737036e+00 4.717708700432719e+00 9.211969405689615e+03 + 179520 1.063906395039762e+00 -6.119163207934124e+00 -5.970129535078084e+00 3.072165763851364e+00 4.927940176277087e+00 9.125588011098829e+03 + 179540 9.405744271454427e-01 -5.953925041191678e+00 -6.000955331397253e+00 3.958556565781662e+00 4.688501361507360e+00 9.219977193239692e+03 + 179560 9.849918780386494e-01 -6.033790864231099e+00 -5.973498460515798e+00 3.541092306195253e+00 4.887300618547831e+00 9.135886662054645e+03 + 179580 9.766016973973498e-01 -6.032001375606143e+00 -6.000941688112572e+00 3.528842145271762e+00 4.707191677330949e+00 9.219938326157522e+03 + 179600 9.562399358420326e-01 -6.010195896672728e+00 -5.997453217565448e+00 3.697014515803902e+00 4.770184951161127e+00 9.209240453682105e+03 + 179620 9.960619207915347e-01 -6.075289030892755e+00 -5.981247386562478e+00 3.253358468996880e+00 4.793360143638755e+00 9.159591783229735e+03 + 179640 9.716103013073514e-01 -6.042232182611457e+00 -6.026227255174946e+00 3.442828609664788e+00 4.534731379759752e+00 9.297734506423863e+03 + 179660 9.552420684467672e-01 -6.019866844546089e+00 -6.013878302465820e+00 3.611844376103451e+00 4.646231511452244e+00 9.259710082880933e+03 + 179680 9.266938994253918e-01 -5.975106750472463e+00 -5.997410301576512e+00 3.847217937193010e+00 4.719147495290188e+00 9.209119052820750e+03 + 179700 9.438634623097828e-01 -5.993285815372074e+00 -6.020584974776908e+00 3.686683256369400e+00 4.529927258535582e+00 9.280348006930735e+03 + 179720 1.013962611103239e+00 -6.083485666507359e+00 -6.020305982913003e+00 3.230143604732655e+00 4.592931124955888e+00 9.279507794570471e+03 + 179740 9.960948714186612e-01 -6.039042695708099e+00 -6.011399618238673e+00 3.508025351148733e+00 4.666756179730594e+00 9.252093022876128e+03 + 179760 9.777158998479560e-01 -5.991301067610372e+00 -6.004030443417117e+00 3.756724766710816e+00 4.683630720963947e+00 9.229430659112102e+03 + 179780 9.987071503097394e-01 -5.995807221375340e+00 -5.999022852931034e+00 3.704311004565095e+00 4.685846350554923e+00 9.214049534507742e+03 + 179800 1.015541225126704e+00 -5.987711881670568e+00 -6.028896461834986e+00 3.757709283605004e+00 4.521221051007732e+00 9.305969300247589e+03 + 179820 1.028860904465860e+00 -5.971150371284462e+00 -6.049700792316487e+00 3.804833857091046e+00 4.353785183886794e+00 9.370269859923446e+03 + 179840 1.000550535697526e+00 -5.896608786478920e+00 -6.061727664921485e+00 4.248849244782436e+00 4.300711092701366e+00 9.407507613248490e+03 + 179860 1.056696099303076e+00 -5.953794645637642e+00 -6.008726151023369e+00 3.980390862933721e+00 4.664965658385894e+00 9.243856354602514e+03 + 179880 1.057240979065718e+00 -5.935570772799001e+00 -6.021250393418533e+00 4.015752913671358e+00 4.523767273195567e+00 9.282412600299058e+03 + 179900 1.120549265292441e+00 -6.016716129814172e+00 -6.037219057522423e+00 3.536374825471076e+00 4.418643841752495e+00 9.331639481452701e+03 + 179920 1.019449897934293e+00 -5.864620969248749e+00 -6.027432864496088e+00 4.426358685091675e+00 4.491467587522092e+00 9.301417253097643e+03 + 179940 1.063034029699103e+00 -5.934078810947814e+00 -5.960638495884524e+00 4.052504515142052e+00 4.899994694137503e+00 9.096592949531385e+03 + 179960 1.039740719005494e+00 -5.909306513036979e+00 -6.023456819279144e+00 4.230111827237595e+00 4.574643104092284e+00 9.289184221885396e+03 + 179980 1.076107557885185e+00 -5.981579552764204e+00 -6.013247463443655e+00 3.771960594497863e+00 4.590118550783118e+00 9.257755134303496e+03 + 180000 1.125421404175584e+00 -6.085968025914815e+00 -5.993606785513094e+00 3.223085671505041e+00 4.753438206747486e+00 9.197421878711461e+03 + 180020 9.913221772149444e-01 -5.932501751885166e+00 -6.008979852863348e+00 4.118210015318938e+00 4.679060924554343e+00 9.244633695269851e+03 + 180040 9.653988223105963e-01 -5.948516840407977e+00 -6.031587231318644e+00 3.984058623317844e+00 4.507055583607344e+00 9.314239828369922e+03 + 180060 9.986620192815925e-01 -6.047377353568788e+00 -5.999813741405408e+00 3.411792750496912e+00 4.684910371984237e+00 9.216485518753385e+03 + 180080 9.448802166799275e-01 -6.005760266482371e+00 -6.014363156470528e+00 3.643047108458528e+00 4.593647982853600e+00 9.261186589794068e+03 + 180100 1.001341353680793e+00 -6.110810269308422e+00 -5.949083770314513e+00 3.090503695395500e+00 5.019162279713354e+00 9.061404095381333e+03 + 180120 9.299581804089481e-01 -6.013988834245307e+00 -5.962317047744852e+00 3.635105198618713e+00 4.931812592887443e+00 9.101745247127130e+03 + 180140 9.638827220680215e-01 -6.065461973945254e+00 -5.965576643573652e+00 3.360499190895905e+00 4.934056215094563e+00 9.111667412037092e+03 + 180160 9.782190348152016e-01 -6.082095963041246e+00 -5.953448674714096e+00 3.260113302422796e+00 4.998825940100817e+00 9.074702574970917e+03 + 180180 9.233719232405143e-01 -5.991614092881761e+00 -5.962665681788380e+00 3.738755722331895e+00 4.904981978582231e+00 9.102792258098307e+03 + 180200 9.340234955887675e-01 -5.994663038346721e+00 -5.995551730692926e+00 3.696295159558013e+00 4.691192150581402e+00 9.203403657845156e+03 + 180220 9.998598897263635e-01 -6.076309704171266e+00 -6.019594603152853e+00 3.274489030246864e+00 4.600155916928115e+00 9.277313333831849e+03 + 180240 1.004637648004705e+00 -6.065358548623474e+00 -6.018882220206416e+00 3.317249463327768e+00 4.584123733287092e+00 9.275119190255426e+03 + 180260 9.140358557284201e-01 -5.913743166992745e+00 -6.050507478014527e+00 4.115038039785730e+00 4.329716201689925e+00 9.372735275506027e+03 + 180280 9.504128454372901e-01 -5.946921224160363e+00 -6.019924946092878e+00 4.014906948323338e+00 4.595708279697375e+00 9.278289147806650e+03 + 180300 9.955057992839643e-01 -5.991191950976859e+00 -6.031813146029588e+00 3.775132985903218e+00 4.541879797800828e+00 9.314970387136289e+03 + 180320 1.038086217098168e+00 -6.032738523484217e+00 -6.031843260940660e+00 3.541326183624400e+00 4.546466919690935e+00 9.315071414834885e+03 + 180340 9.814040669012805e-01 -5.930386226000901e+00 -6.042050315964517e+00 4.049195524198636e+00 4.408003039665475e+00 9.346601217574911e+03 + 180360 1.047879431956461e+00 -6.013010299762059e+00 -6.043940529203699e+00 3.594948528078496e+00 4.417342364187065e+00 9.352436173879929e+03 + 180380 1.027204192272059e+00 -5.970956026261110e+00 -6.010311474391696e+00 3.864662232589248e+00 4.638677159187505e+00 9.248715701734483e+03 + 180400 9.865789025789117e-01 -5.901172920863145e+00 -6.022101230227761e+00 4.165503004116772e+00 4.471113938149751e+00 9.284986017861145e+03 + 180420 1.015911017697820e+00 -5.936081645743652e+00 -6.052055803979870e+00 3.995830472190482e+00 4.329888908655136e+00 9.377499928077836e+03 + 180440 1.025610344802659e+00 -5.943830544495004e+00 -5.968647004380312e+00 4.046964197987646e+00 4.904464244991452e+00 9.121041661909290e+03 + 180460 1.091639965437210e+00 -6.037476042009661e+00 -6.020683791906936e+00 3.525609162083694e+00 4.622032860765850e+00 9.280644127461339e+03 + 180480 1.004995671747160e+00 -5.910121904438055e+00 -6.034021232946737e+00 4.155591211680798e+00 4.444142094024826e+00 9.321800643674747e+03 + 180500 1.037650957236568e+00 -5.966103607909934e+00 -6.043241321583285e+00 3.863551050522339e+00 4.420614361587351e+00 9.350274424950541e+03 + 180520 1.050038963324319e+00 -6.003953765909282e+00 -6.039391287993084e+00 3.662328622192842e+00 4.458840886448829e+00 9.338383615130062e+03 + 180540 9.915689712192942e-01 -5.950127446817041e+00 -5.991119688023770e+00 3.969049991971632e+00 4.733666199433772e+00 9.189816930724404e+03 + 180560 9.968365549273531e-01 -5.996951601235232e+00 -6.005202592116648e+00 3.737937451221171e+00 4.690558984743369e+00 9.233029473009072e+03 + 180580 1.022850048243853e+00 -6.081493030290620e+00 -6.019854983715596e+00 3.273939425566257e+00 4.627874627456928e+00 9.278110643972086e+03 + 180600 9.673253678583703e-01 -6.043222685009202e+00 -6.006990898047782e+00 3.487984697026506e+00 4.696033224609891e+00 9.238535507917653e+03 + 180620 9.130043827356075e-01 -5.996538830222480e+00 -6.052268587011494e+00 3.686164608785946e+00 4.366155721151436e+00 9.378187555666180e+03 + 180640 9.443766292908865e-01 -6.068685046904566e+00 -5.982508910144664e+00 3.300461091922872e+00 4.795297804912294e+00 9.163446624817416e+03 + 180660 8.701562468933893e-01 -5.972241463864579e+00 -5.967321019397588e+00 3.843693780889991e+00 4.871947734455777e+00 9.117011773639222e+03 + 180680 9.514773545243300e-01 -6.096613534870450e+00 -5.981227844278083e+00 3.211338752091921e+00 4.873901243351202e+00 9.159510830644731e+03 + 180700 9.058303090571815e-01 -6.024313798326060e+00 -6.001161544673757e+00 3.607811346197257e+00 4.740755169468456e+00 9.220620680508207e+03 + 180720 9.290727136485980e-01 -6.049150166104898e+00 -5.975689433510163e+00 3.403279214462404e+00 4.825102109033002e+00 9.142583706787240e+03 + 180740 9.324953553023744e-01 -6.037878139155898e+00 -5.963261386182763e+00 3.503737107125956e+00 4.932198049602897e+00 9.104626628440999e+03 + 180760 9.343066694848940e-01 -6.017516299990763e+00 -5.999546246205599e+00 3.611596700090432e+00 4.714783529781680e+00 9.215642372700175e+03 + 180780 9.639711637325877e-01 -6.032249107436899e+00 -5.996627373481408e+00 3.480356127134967e+00 4.684901635952908e+00 9.206707951471177e+03 + 180800 9.614517521289969e-01 -5.995363885380623e+00 -6.001052380607915e+00 3.758697549686905e+00 4.726033329800001e+00 9.220261531279049e+03 + 180820 1.026855300177598e+00 -6.061057180173231e+00 -5.981450471276252e+00 3.395749156205141e+00 4.852863197789981e+00 9.160191346300924e+03 + 180840 1.016742308594960e+00 -6.017777740616434e+00 -6.017843521608612e+00 3.614784570555419e+00 4.614406845918755e+00 9.271903497567455e+03 + 180860 9.598269151110441e-01 -5.911964366635502e+00 -6.022243237137112e+00 4.186222851143889e+00 4.552984511123583e+00 9.285455372202970e+03 + 180880 1.002722684794844e+00 -5.961716793005307e+00 -6.019558922476595e+00 3.865187806356758e+00 4.533049347892014e+00 9.277180178931494e+03 + 180900 1.046379800253978e+00 -6.015224534558715e+00 -6.006456132163017e+00 3.592023894417100e+00 4.642373417879085e+00 9.236869396908458e+03 + 180920 9.970554810146385e-01 -5.935102661524946e+00 -6.023218496272721e+00 4.028023722187161e+00 4.522048963184077e+00 9.288445026950883e+03 + 180940 1.011203324394180e+00 -5.953842743406380e+00 -6.035022009806198e+00 3.935708705127477e+00 4.469564795008845e+00 9.324871255177608e+03 + 180960 1.066170903186995e+00 -6.037285389211596e+00 -6.011338872604016e+00 3.513267075448850e+00 4.662255989020046e+00 9.251848390542702e+03 + 180980 1.022694318436432e+00 -5.977692528751573e+00 -6.009175393001126e+00 3.830827380005613e+00 4.650047901527188e+00 9.245231439748079e+03 + 181000 1.034961924456969e+00 -6.001779995912164e+00 -6.010284718278571e+00 3.689523617872284e+00 4.640688185942842e+00 9.248647610236281e+03 + 181020 1.026810033396168e+00 -5.997263531486535e+00 -6.004291827620186e+00 3.723401964280419e+00 4.683044400255682e+00 9.230241780176573e+03 + 181040 9.804031346278518e-01 -5.937073717236286e+00 -6.034438702078535e+00 4.067700415001844e+00 4.508615604854936e+00 9.323068168013077e+03 + 181060 1.039851783436849e+00 -6.035979728872313e+00 -6.004116623480322e+00 3.514686471501187e+00 4.697649353461620e+00 9.229703798412140e+03 + 181080 1.033040025606348e+00 -6.038778997979981e+00 -6.001434796116058e+00 3.475648797779997e+00 4.690084983879205e+00 9.221448835374671e+03 + 181100 1.033507833197241e+00 -6.053159380093524e+00 -5.985074307750543e+00 3.407894125392784e+00 4.798849146917072e+00 9.171288838114617e+03 + 181120 9.969357198094637e-01 -6.012982435253976e+00 -6.009382161123741e+00 3.593225227786296e+00 4.613898558982725e+00 9.245876091373377e+03 + 181140 9.982846919832451e-01 -6.030380113627192e+00 -5.974680103092503e+00 3.554222551509219e+00 4.874060631548177e+00 9.139490971491072e+03 + 181160 9.421994365518558e-01 -5.961705253898592e+00 -6.016957260464529e+00 3.879061280752804e+00 4.561795708830813e+00 9.269159035816336e+03 + 181180 9.774436339880400e-01 -6.028891534586135e+00 -6.018560788954730e+00 3.473155861176168e+00 4.532476601269416e+00 9.274125502040955e+03 + 181200 9.927633887557642e-01 -6.069571935294340e+00 -5.974638821217621e+00 3.371996019863215e+00 4.917116651743664e+00 9.139363015209634e+03 + 181220 9.726828831700212e-01 -6.064099161709088e+00 -5.984873484400010e+00 3.317905002741819e+00 4.772831101984485e+00 9.170693903605745e+03 + 181240 9.437891248539668e-01 -6.053950855937367e+00 -6.004152569766916e+00 3.435713003311629e+00 4.721662468762235e+00 9.229792756376513e+03 + 181260 9.608334786304651e-01 -6.119763141484224e+00 -6.015103620339307e+00 3.066593407992396e+00 4.667564574415064e+00 9.263481524973848e+03 + 181280 9.019207094144750e-01 -6.077102424171327e+00 -6.013285396171963e+00 3.259574067958527e+00 4.626021318384048e+00 9.257886567491509e+03 + 181300 8.936973742317200e-01 -6.100053003912221e+00 -5.996814674143701e+00 3.144766412054914e+00 4.737576877665652e+00 9.207289289537144e+03 + 181320 9.100568746739061e-01 -6.149481302277849e+00 -5.994642580200656e+00 2.879717827210444e+00 4.768825730592487e+00 9.200635124114659e+03 + 181340 8.800653825952511e-01 -6.118979960054954e+00 -5.994741207337619e+00 3.022288895558907e+00 4.735687039546693e+00 9.200939050143530e+03 + 181360 8.351205731705921e-01 -6.053320931461045e+00 -6.013307295879164e+00 3.390418836210975e+00 4.620183323812224e+00 9.257967641631794e+03 + 181380 8.896019121328670e-01 -6.123720865255657e+00 -6.014197575234633e+00 3.011383500560150e+00 4.640283180535226e+00 9.260687987328974e+03 + 181400 9.140412800009025e-01 -6.139902444982267e+00 -5.971674415745955e+00 2.947432952075728e+00 4.913424329154024e+00 9.130324250536150e+03 + 181420 8.628342615565623e-01 -6.033889438192309e+00 -5.973026226407151e+00 3.502942118204216e+00 4.852428098826179e+00 9.134430826065634e+03 + 181440 9.256285000643992e-01 -6.088529603232922e+00 -5.945158927853521e+00 3.295458907263929e+00 5.118715511832757e+00 9.049457855344832e+03 + 181460 9.415491294923307e-01 -6.068621345371437e+00 -5.996079238005941e+00 3.343030296026801e+00 4.759578302374318e+00 9.205020170948526e+03 + 181480 9.911251649508644e-01 -6.104881485605352e+00 -5.959889012494896e+00 3.158686417927005e+00 4.991255636039944e+00 9.094310103409998e+03 + 181500 9.386703973013569e-01 -5.999669278295515e+00 -5.992197154079760e+00 3.701122455180400e+00 4.744028548734752e+00 9.193118363798327e+03 + 181520 9.709752550783157e-01 -6.024223410957008e+00 -6.035802155111824e+00 3.548545125139667e+00 4.482058184397848e+00 9.327293231385385e+03 + 181540 9.641803582799450e-01 -5.996942640876028e+00 -6.014787214455438e+00 3.740699188836333e+00 4.638232885904519e+00 9.262505834364767e+03 + 181560 9.759908150220242e-01 -5.999752521652729e+00 -6.011224667211032e+00 3.684332047474408e+00 4.618457212369844e+00 9.251540289516433e+03 + 181580 9.730523394290131e-01 -5.980340678994457e+00 -5.994630445882089e+00 3.797988431670070e+00 4.715934378867008e+00 9.200566221276064e+03 + 181600 9.922259010250978e-01 -5.992307729420636e+00 -5.994807275657577e+00 3.788666581122309e+00 4.774313799826270e+00 9.201088159728963e+03 + 181620 1.024734629795362e+00 -6.023836930280693e+00 -6.005070978818349e+00 3.537965090685463e+00 4.645722088003846e+00 9.232621243018730e+03 + 181640 9.476716807509727e-01 -5.893287536047615e+00 -6.028809688865383e+00 4.289063305741166e+00 4.510874132276170e+00 9.305712211848717e+03 + 181660 1.007705689979440e+00 -5.967292709368282e+00 -6.027315623568732e+00 3.896843639264795e+00 4.552182777409853e+00 9.301100273893862e+03 + 181680 9.948290999588609e-01 -5.935225817735478e+00 -6.048499166884421e+00 4.063475261790677e+00 4.413042161983324e+00 9.366535231242346e+03 + 181700 1.057762420597955e+00 -6.019425899228712e+00 -6.033145446176822e+00 3.604505064602411e+00 4.525725302933335e+00 9.319080586248412e+03 + 181720 1.065828124030555e+00 -6.025897715005232e+00 -6.001589154902350e+00 3.561013087282940e+00 4.700596601131213e+00 9.221940570660796e+03 + 181740 9.670976860416579e-01 -5.879209048945593e+00 -6.022321361815548e+00 4.366850275500990e+00 4.545077228442870e+00 9.285687598831506e+03 + 181760 1.014831224613179e+00 -5.949645957338634e+00 -6.024826293346750e+00 3.864529488974774e+00 4.432832365496771e+00 9.293414259146552e+03 + 181780 1.033522577357795e+00 -5.980750346560871e+00 -5.999495271666475e+00 3.787685903271255e+00 4.680049642547096e+00 9.215502539762370e+03 + 181800 9.760676000770202e-01 -5.903055509685956e+00 -6.007945443344893e+00 4.224935303616530e+00 4.622641072882137e+00 9.241457358804264e+03 + 181820 9.628423259909821e-01 -5.895559375821137e+00 -6.028200632522810e+00 4.227904734093922e+00 4.466258111944780e+00 9.303797019279371e+03 + 181840 1.004632299599707e+00 -5.977182932813477e+00 -5.983487567904758e+00 3.846378811904008e+00 4.810176621570744e+00 9.166396868966467e+03 + 181860 1.000637274111631e+00 -5.992729982203437e+00 -5.972519341505672e+00 3.770203876096978e+00 4.886256502570091e+00 9.132865625951643e+03 + 181880 1.000968757102357e+00 -6.019676131962095e+00 -5.971099905394277e+00 3.595931910844122e+00 4.874864120943302e+00 9.128532571267064e+03 + 181900 9.943822118448582e-01 -6.042329420760476e+00 -5.950118841222725e+00 3.492641264733741e+00 5.022128681980573e+00 9.064547890073829e+03 + 181920 9.509009486225022e-01 -6.009284036946914e+00 -6.001010045070011e+00 3.595621610694612e+00 4.643132152447895e+00 9.220124150339174e+03 + 181940 9.640261589274948e-01 -6.057726239945605e+00 -5.942244232324349e+00 3.429837357705744e+00 5.092952916249926e+00 9.040582476612153e+03 + 181960 9.556198166713632e-01 -6.068523922199570e+00 -5.972846780969221e+00 3.328443946284227e+00 4.877836897218652e+00 9.133902591650038e+03 + 181980 9.205975274375046e-01 -6.035687790830488e+00 -6.018216507122204e+00 3.457267094312269e+00 4.557589909037647e+00 9.273069088132621e+03 + 182000 9.092847204146728e-01 -6.033061985401256e+00 -5.967132899963322e+00 3.526192316645555e+00 4.904767327723169e+00 9.116426496260070e+03 + 182020 9.451764137513948e-01 -6.090705591156501e+00 -5.958829882959080e+00 3.273493194957166e+00 5.030743919126650e+00 9.091075975346628e+03 + 182040 8.527114361738871e-01 -5.948658044663998e+00 -6.089683480935885e+00 3.963260159238467e+00 4.153470280549560e+00 9.494390287868422e+03 + 182060 9.396643653636382e-01 -6.068486733793518e+00 -6.031157935789227e+00 3.340147394319639e+00 4.554495129073097e+00 9.312941185847112e+03 + 182080 9.575131070140854e-01 -6.077625724672888e+00 -6.009996609000997e+00 3.272910111979643e+00 4.661246959739467e+00 9.247767864699133e+03 + 182100 9.208155532903834e-01 -5.995175869056211e+00 -6.021359315727283e+00 3.732314283393104e+00 4.581964880732528e+00 9.282719461112672e+03 + 182120 1.003986353811705e+00 -6.075659119257620e+00 -6.024067327676457e+00 3.226029051833506e+00 4.522277102896487e+00 9.291055757864491e+03 + 182140 9.596345583736023e-01 -5.958865454126673e+00 -6.021609424102346e+00 3.935689045748638e+00 4.575403460550351e+00 9.283499207195933e+03 + 182160 1.038161002125665e+00 -6.022287893741444e+00 -6.008877960936134e+00 3.630745518646675e+00 4.707747427995160e+00 9.244327378943810e+03 + 182180 1.038766359938085e+00 -5.982080068189855e+00 -6.032124945224610e+00 3.795283981242434e+00 4.507918552889180e+00 9.315924433733193e+03 + 182200 1.097354821803763e+00 -6.047100933383801e+00 -6.007640724794521e+00 3.423950426663027e+00 4.650537050830216e+00 9.240526136137129e+03 + 182220 1.037630195085614e+00 -5.948404359040689e+00 -6.037398857422440e+00 3.930745581669599e+00 4.419725400107470e+00 9.332208242367906e+03 + 182240 9.980981943497592e-01 -5.887581941566524e+00 -5.997086264481874e+00 4.266753195340176e+00 4.637962427421036e+00 9.208073557800413e+03 + 182260 1.015156081367137e+00 -5.911922238064271e+00 -5.960855052407324e+00 4.226026120474256e+00 4.945046328187900e+00 9.097235328356561e+03 + 182280 1.085619397997308e+00 -6.017531383885437e+00 -5.978495392569972e+00 3.612630568118046e+00 4.836781271051581e+00 9.151144825762951e+03 + 182300 1.041657901787031e+00 -5.959996567619565e+00 -6.016244510140841e+00 3.888494455072252e+00 4.565510064774112e+00 9.266987443649163e+03 + 182320 1.065477873461993e+00 -6.008850312936737e+00 -5.999875733966373e+00 3.620792468928576e+00 4.672325890188010e+00 9.216652494203507e+03 + 182340 1.038130279452357e+00 -5.984766817780004e+00 -5.947172652557769e+00 3.801532616012624e+00 5.017404130396965e+00 9.055573047543021e+03 + 182360 9.927442724458968e-01 -5.934054925695696e+00 -5.936661410547272e+00 4.090282078728653e+00 5.075315239358678e+00 9.023623477054431e+03 + 182380 9.885691098897834e-01 -5.943539026770265e+00 -5.962090975748258e+00 3.974204234348758e+00 4.867676072412299e+00 9.101034071285543e+03 + 182400 1.010170362051772e+00 -5.990898180052040e+00 -6.011395017024995e+00 3.702858965442329e+00 4.585162955668352e+00 9.252047436767594e+03 + 182420 9.628682229100015e-01 -5.939113311982030e+00 -6.046757477562593e+00 4.028047253273160e+00 4.409937796628779e+00 9.361127099358822e+03 + 182440 1.037001329506324e+00 -6.069564591617658e+00 -5.964943167607914e+00 3.343723575721161e+00 4.944475982498152e+00 9.109759226191385e+03 + 182460 9.600789418251379e-01 -5.975903137652145e+00 -6.023302846267487e+00 3.855991458634700e+00 4.583814996684197e+00 9.288704180610326e+03 + 182480 9.778646620103488e-01 -6.024079995783051e+00 -6.005296386751924e+00 3.540055005205066e+00 4.647913395015901e+00 9.233324857474610e+03 + 182500 9.957557160515575e-01 -6.071591666086233e+00 -5.974154681995539e+00 3.370210400637615e+00 4.929708641610941e+00 9.137882616331639e+03 + 182520 1.013325417394368e+00 -6.118047820343834e+00 -5.975339156813394e+00 3.078019194855379e+00 4.897474424941468e+00 9.141508124314574e+03 + 182540 9.613240598370664e-01 -6.061677844223954e+00 -6.009592888465038e+00 3.376534819403375e+00 4.675614695491929e+00 9.246504140606903e+03 + 182560 9.617654015954540e-01 -6.081063719797248e+00 -5.982361662175835e+00 3.277796105263663e+00 4.844558594219871e+00 9.162983298053527e+03 + 182580 9.594098643635102e-01 -6.093744497442604e+00 -5.990320539733304e+00 3.177423600274917e+00 4.771299970247446e+00 9.187383874962499e+03 + 182600 9.497451495577089e-01 -6.095427173149379e+00 -5.996070252507400e+00 3.204007521222534e+00 4.774530334982556e+00 9.205012574430339e+03 + 182620 9.573688775996365e-01 -6.123038709052206e+00 -6.001865206875396e+00 3.049202062236197e+00 4.744999063274300e+00 9.222808399023968e+03 + 182640 8.664541792424135e-01 -6.005982223020002e+00 -6.049353358631251e+00 3.734610787240868e+00 4.485567014899529e+00 9.369171635410001e+03 + 182660 9.375517716114481e-01 -6.127673878863621e+00 -5.986889371149994e+00 3.020911417051582e+00 4.829317846675385e+00 9.176856986943652e+03 + 182680 9.542033162293304e-01 -6.163652850380975e+00 -5.989981148480254e+00 2.827329966624821e+00 4.824579754547773e+00 9.186345057329394e+03 + 182700 8.907672037867657e-01 -6.075169465346674e+00 -6.015855579770943e+00 3.286519169470169e+00 4.627108679240144e+00 9.265792099413395e+03 + 182720 9.522489418475915e-01 -6.164499173195958e+00 -5.974007236244782e+00 2.821288621963502e+00 4.915122802469128e+00 9.137453950196372e+03 + 182740 9.171069863368213e-01 -6.099004952098431e+00 -5.994686665292605e+00 3.194626120653698e+00 4.793637866695464e+00 9.200752811985540e+03 + 182760 1.009850135217530e+00 -6.210106083450473e+00 -5.975706558111641e+00 2.553277377512090e+00 4.899235725216977e+00 9.142665386615898e+03 + 182780 9.033878153086177e-01 -6.018592788233847e+00 -6.034564683207395e+00 3.556617139290597e+00 4.464904046709727e+00 9.323433001476336e+03 + 182800 9.333965571682911e-01 -6.024413175908081e+00 -5.998025762073112e+00 3.525744998976313e+00 4.677265612655801e+00 9.210993073101467e+03 + 182820 9.867772757962188e-01 -6.059120723071954e+00 -5.993772073276403e+00 3.383007862082665e+00 4.758249921879597e+00 9.197944292885690e+03 + 182840 1.003767031592404e+00 -6.045447409391301e+00 -5.971886935895461e+00 3.419944180460007e+00 4.842339802719602e+00 9.130949863239864e+03 + 182860 1.011828891863232e+00 -6.025200376837055e+00 -6.002443913195602e+00 3.548344742068656e+00 4.679015877849244e+00 9.224544093170924e+03 + 182880 9.871520108714894e-01 -5.961223240183211e+00 -6.026562622126217e+00 3.891081131039785e+00 4.515892288686365e+00 9.298767393333714e+03 + 182900 1.005301953050382e+00 -5.967290282470310e+00 -6.045786421458040e+00 3.814054396272449e+00 4.363317418966654e+00 9.358152078470661e+03 + 182920 1.015613564543907e+00 -5.968050868607349e+00 -6.060904531574825e+00 3.826824915361818e+00 4.293644813544667e+00 9.404949274246454e+03 + 182940 9.969716708539996e-01 -5.931123384339414e+00 -6.014241296501447e+00 4.075206707600547e+00 4.597930793510819e+00 9.260819731382779e+03 + 182960 1.060537865677831e+00 -6.019367173577299e+00 -5.977793615209092e+00 3.587407651604850e+00 4.826129457242462e+00 9.148989400562497e+03 + 182980 1.022625105231310e+00 -5.957877138585613e+00 -6.016767132936128e+00 3.974366214218911e+00 4.636210753461081e+00 9.268586020405126e+03 + 183000 9.684773287633293e-01 -5.876876887352115e+00 -6.054699949295212e+00 4.353707550284700e+00 4.332620010577529e+00 9.385732056240946e+03 + 183020 1.020727142661099e+00 -5.958063270001578e+00 -6.020554289981227e+00 3.928433995752505e+00 4.569600888575266e+00 9.280264834202590e+03 + 183040 9.880035495949384e-01 -5.916004221742985e+00 -6.103653582651074e+00 4.092692618517393e+00 4.015180949538397e+00 9.537974668507883e+03 + 183060 1.022242628823166e+00 -5.980092836724189e+00 -6.006519187213458e+00 3.831760600373085e+00 4.680016406399178e+00 9.237082033021474e+03 + 183080 1.039545886716792e+00 -6.023733054906250e+00 -6.029721835420217e+00 3.583538027710625e+00 4.549149523238642e+00 9.308532809260447e+03 + 183100 1.024180695182789e+00 -6.025497882006650e+00 -6.004890319711416e+00 3.578946135833577e+00 4.697277947542775e+00 9.232075672394185e+03 + 183120 1.001278174104750e+00 -6.021736612040046e+00 -5.999684612436123e+00 3.591359579268254e+00 4.717985573529890e+00 9.216079003670620e+03 + 183140 9.874100598659102e-01 -6.034737467594228e+00 -5.988819981406456e+00 3.512523950341049e+00 4.776189261739258e+00 9.182770713788766e+03 + 183160 1.003855482111840e+00 -6.090995565314183e+00 -5.965986545609766e+00 3.207348821615689e+00 4.925169957841730e+00 9.112938000938619e+03 + 183180 9.126786489754910e-01 -5.985258903960299e+00 -6.002868345603831e+00 3.793088291915336e+00 4.691972152945887e+00 9.225858751670539e+03 + 183200 9.476196599666125e-01 -6.061428688049135e+00 -5.986781706509492e+00 3.354329282525161e+00 4.782963802108851e+00 9.176512968531300e+03 + 183220 9.276450905201146e-01 -6.047813059089366e+00 -5.987852265994707e+00 3.460258387845239e+00 4.804562540697511e+00 9.179791576862553e+03 + 183240 9.974596717293623e-01 -6.160287482512414e+00 -5.979503677967003e+00 2.881390773358254e+00 4.919479355261344e+00 9.154252378065508e+03 + 183260 9.024733952084930e-01 -6.022562244245775e+00 -6.014707626239056e+00 3.601092192538271e+00 4.646194624631065e+00 9.262269785166551e+03 + 183280 9.354355866101309e-01 -6.067988331930275e+00 -6.037457162152712e+00 3.306313799609485e+00 4.481628501155508e+00 9.332402819647072e+03 + 183300 9.912144764911170e-01 -6.140766837073901e+00 -6.026079484419021e+00 2.880689388980709e+00 4.539241915735498e+00 9.297292946517144e+03 + 183320 9.573525510056339e-01 -6.076441766210662e+00 -6.000451067900589e+00 3.258711100386248e+00 4.695061449605246e+00 9.218433566758509e+03 + 183340 9.794943047673691e-01 -6.083421368270191e+00 -5.974187773070541e+00 3.237160892247332e+00 4.864397099727950e+00 9.138006155026749e+03 + 183360 9.374945370235039e-01 -5.975324776641306e+00 -5.977263931856917e+00 3.876990851325654e+00 4.865855921994314e+00 9.147378801722516e+03 + 183380 1.033576184941678e+00 -6.052115913652509e+00 -6.010657803713789e+00 3.428947865434389e+00 4.667006748324300e+00 9.249799307607205e+03 + 183400 1.050309019596442e+00 -6.011844847878848e+00 -6.035040490469532e+00 3.607044458772885e+00 4.473851489503090e+00 9.324938532836812e+03 + 183420 1.058184751047710e+00 -5.982364982797669e+00 -6.000145833086636e+00 3.840937241827181e+00 4.738836847890239e+00 9.217494883170712e+03 + 183440 1.022510178995043e+00 -5.907744355534378e+00 -6.046476844947712e+00 4.177877572785197e+00 4.381254149790482e+00 9.360241055560129e+03 + 183460 1.005756208910567e+00 -5.872344383362115e+00 -6.029155866048146e+00 4.336195564640567e+00 4.435759764558855e+00 9.306746104273585e+03 + 183480 1.098128936456117e+00 -6.006494259882746e+00 -5.992820343235844e+00 3.691013146415995e+00 4.769530891834271e+00 9.195007047584664e+03 + 183500 1.109547364595911e+00 -6.027351801680505e+00 -5.977702490108150e+00 3.592268746077262e+00 4.877362776331857e+00 9.148728692541106e+03 + 183520 1.040899474111211e+00 -5.936046909980776e+00 -6.056858040651310e+00 4.001067257951492e+00 4.307351050179240e+00 9.392383460341536e+03 + 183540 1.016404860640310e+00 -5.916789564396753e+00 -6.002957616567284e+00 4.115201500142506e+00 4.620411210116340e+00 9.226105412144669e+03 + 183560 9.964895139143400e-01 -5.904767782410787e+00 -6.015469089938182e+00 4.199076185642051e+00 4.563412146847776e+00 9.264588304500072e+03 + 183580 1.026024237613868e+00 -5.969904100590394e+00 -6.019342353079809e+00 3.836522004443575e+00 4.552639908104508e+00 9.276514908208346e+03 + 183600 9.929863832337298e-01 -5.945018137316734e+00 -6.020135456266216e+00 4.040664090568213e+00 4.609328820792752e+00 9.278937209780821e+03 + 183620 1.009605475727610e+00 -5.994809859954065e+00 -6.015070670984768e+00 3.749209434340291e+00 4.632868722051627e+00 9.263361547595365e+03 + 183640 1.016991316532674e+00 -6.031522013883414e+00 -6.019121750592094e+00 3.509567074543125e+00 4.580771305296426e+00 9.275854911539114e+03 + 183660 1.024970281485106e+00 -6.069571913364922e+00 -5.949147297140289e+00 3.372577490470559e+00 5.064074272481536e+00 9.061602150983947e+03 + 183680 9.559523738005318e-01 -5.989262682868043e+00 -6.025532581653927e+00 3.769603565832827e+00 4.561336194255585e+00 9.295582465247586e+03 + 183700 1.001171884324846e+00 -6.076427704436652e+00 -5.986707354749227e+00 3.280415293477588e+00 4.795603425562023e+00 9.176291942424505e+03 + 183720 9.338436823009627e-01 -5.990915870870106e+00 -6.017387957385110e+00 3.794089510342202e+00 4.642082693030899e+00 9.270509615304130e+03 + 183740 9.808999832662227e-01 -6.070804908010293e+00 -5.999573647115786e+00 3.338184544323380e+00 4.747205467381642e+00 9.215726502040370e+03 + 183760 9.878853033790093e-01 -6.087115585656086e+00 -5.988500133135667e+00 3.230313118596940e+00 4.796578307661146e+00 9.181795846634226e+03 + 183780 1.001340792909470e+00 -6.110109487642375e+00 -5.976282559712478e+00 3.150483278003567e+00 4.918938207827197e+00 9.144373783845755e+03 + 183800 9.630575831544059e-01 -6.050893490699070e+00 -6.046150251815641e+00 3.399706865363983e+00 4.426943277046474e+00 9.359279691317544e+03 + 183820 9.716988953583182e-01 -6.059234507583635e+00 -6.026871326297243e+00 3.355836834305882e+00 4.541671229438458e+00 9.299752638170059e+03 + 183840 9.677341744770432e-01 -6.044961835207429e+00 -6.010863063751893e+00 3.466204454295096e+00 4.662004876760617e+00 9.250417008032908e+03 + 183860 9.505173415080799e-01 -6.004550261477382e+00 -6.014292159809347e+00 3.679686700749218e+00 4.623747212973175e+00 9.260959693419783e+03 + 183880 9.709762195571179e-01 -6.005940097291234e+00 -6.040195931063629e+00 3.655143550610627e+00 4.458441252016392e+00 9.340857365227454e+03 + 183900 1.046195560098781e+00 -6.074134774482527e+00 -5.969052686330778e+00 3.336096493197444e+00 4.939494104765375e+00 9.122316611304615e+03 + 183920 1.010900233183605e+00 -5.968147151589728e+00 -6.024823274136601e+00 3.888544948699880e+00 4.563101882434117e+00 9.293399598891627e+03 + 183940 9.838686943026379e-01 -5.873701632503632e+00 -6.065610282697635e+00 4.367544241598011e+00 4.265575074416405e+00 9.419557749610267e+03 + 183960 1.053601058613419e+00 -5.934416635874749e+00 -6.015361332600828e+00 4.085531834369297e+00 4.620734859616814e+00 9.264244314409852e+03 + 183980 1.011713937995149e+00 -5.845058757127666e+00 -6.026299590386820e+00 4.545111459469327e+00 4.504398547966959e+00 9.297965546287960e+03 + 184000 1.110118649392717e+00 -5.977154801176939e+00 -6.016064671568905e+00 3.822194408857061e+00 4.598767911783404e+00 9.266414810016317e+03 + 184020 1.051991651443827e+00 -5.887919308189043e+00 -5.969747358485749e+00 4.336434634397450e+00 4.866565306743907e+00 9.124398638239798e+03 + 184040 1.098882870242725e+00 -5.961505800250821e+00 -5.994440542809387e+00 3.927392050169627e+00 4.738275661763404e+00 9.199950091105951e+03 + 184060 1.035466889658421e+00 -5.877081148298771e+00 -6.008914917518497e+00 4.327248302342611e+00 4.570238398273092e+00 9.244436230156527e+03 + 184080 1.078515627536226e+00 -5.957127649137883e+00 -6.027585810914584e+00 3.906109584918595e+00 4.501527916631483e+00 9.301912791213688e+03 + 184100 1.038223650467996e+00 -5.922731292643221e+00 -6.016237441399646e+00 4.078836444662191e+00 4.541909668473037e+00 9.266945569870393e+03 + 184120 1.045827628646379e+00 -5.960567978324763e+00 -5.994701987418697e+00 3.901278722376712e+00 4.705275959938502e+00 9.200792113875821e+03 + 184140 9.781605051897939e-01 -5.890310313094882e+00 -6.061824887689260e+00 4.286155935048116e+00 4.301292705932555e+00 9.407790869116872e+03 + 184160 1.056042822797573e+00 -6.036098395732020e+00 -5.997356861890220e+00 3.482171159039827e+00 4.704631041592435e+00 9.208951458281343e+03 + 184180 1.010173470243720e+00 -5.993577471525382e+00 -5.979013488970035e+00 3.767665540684176e+00 4.851294182285996e+00 9.152737805472940e+03 + 184200 1.052497175969134e+00 -6.077715936045644e+00 -5.993202739870577e+00 3.258547978767605e+00 4.743835829579681e+00 9.196208432942707e+03 + 184220 9.528297002243094e-01 -5.947130735282414e+00 -6.054568476559050e+00 3.973568236234311e+00 4.356644099887139e+00 9.385330635655017e+03 + 184240 9.871815263813776e-01 -6.013568698915368e+00 -5.976166471482038e+00 3.617475615620102e+00 4.832244993518279e+00 9.144036756662159e+03 + 184260 9.156574686081256e-01 -5.916953406055957e+00 -5.976295841734558e+00 4.189211475938760e+00 4.848458027059992e+00 9.144421104854828e+03 + 184280 1.016007496502646e+00 -6.069215417145420e+00 -5.976527635665899e+00 3.361635366090836e+00 4.893862950734074e+00 9.145123706294808e+03 + 184300 9.587601734473629e-01 -5.984931827692202e+00 -6.028795732127411e+00 3.799501875034164e+00 4.547628547849924e+00 9.305642792755758e+03 + 184320 9.779364809249865e-01 -6.012838660069846e+00 -5.993899466867044e+00 3.621211936441520e+00 4.729963714642690e+00 9.198315642655483e+03 + 184340 9.838778107739444e-01 -6.019186284178160e+00 -5.987568351101640e+00 3.618496039141967e+00 4.800051103726674e+00 9.178923062461423e+03 + 184360 1.007402964405228e+00 -6.050066346971223e+00 -5.979259145830998e+00 3.458541357484671e+00 4.865127263810805e+00 9.153483656530809e+03 + 184380 9.725585467029291e-01 -5.992889577430406e+00 -6.011237588541381e+00 3.723886529336675e+00 4.618529410191910e+00 9.251563542096173e+03 + 184400 1.021473705158710e+00 -6.057491639632749e+00 -5.993936964538010e+00 3.403705209743035e+00 4.768645989191213e+00 9.198466726327053e+03 + 184420 1.031311436481565e+00 -6.063377039869460e+00 -5.984060694662572e+00 3.355107476477176e+00 4.810554204819880e+00 9.168197121373743e+03 + 184440 1.004252072994218e+00 -6.015217316621763e+00 -6.005317682447428e+00 3.621679639035548e+00 4.678524870428019e+00 9.233379560720236e+03 + 184460 1.061588354928094e+00 -6.091589738317410e+00 -5.992360688078429e+00 3.252827474314339e+00 4.822616036432461e+00 9.193600706931946e+03 + 184480 1.030105727896354e+00 -6.037179347538536e+00 -6.012622642106184e+00 3.526688944047745e+00 4.667697346778196e+00 9.255855248811540e+03 + 184500 1.033458043315452e+00 -6.031617222320730e+00 -6.010430519006556e+00 3.557499510714897e+00 4.679156839776622e+00 9.249111225743338e+03 + 184520 9.515787209968618e-01 -5.898384525323422e+00 -6.041580344699914e+00 4.263032265388995e+00 4.440779711047750e+00 9.345128493099972e+03 + 184540 1.043170403146162e+00 -6.016641265845783e+00 -6.001275422443378e+00 3.611001612074698e+00 4.699234662747891e+00 9.220962024485900e+03 + 184560 1.061498061712716e+00 -6.017157297070371e+00 -5.988500025645300e+00 3.634983681002874e+00 4.799538168224052e+00 9.181787301083905e+03 + 184580 1.029236570540878e+00 -5.935119534523276e+00 -6.009329218064535e+00 4.071734706055832e+00 4.645611219250510e+00 9.245693139762319e+03 + 184600 1.031029692956090e+00 -5.898842704358213e+00 -6.052419752307454e+00 4.240394899101300e+00 4.358531723805397e+00 9.378631798380102e+03 + 184620 1.027657499595159e+00 -5.856948109936418e+00 -6.035054848421307e+00 4.465709329421095e+00 4.442992875112158e+00 9.324977177317289e+03 + 184640 1.104726445797538e+00 -5.939627487930865e+00 -6.022776481123362e+00 4.030826570073442e+00 4.553372183897015e+00 9.287096981394527e+03 + 184660 1.141292422252629e+00 -5.973499914847106e+00 -6.070501804633727e+00 3.785968828479118e+00 4.228968966330410e+00 9.434749428820847e+03 + 184680 1.063035697725606e+00 -5.852230676329455e+00 -6.096132746732304e+00 4.440706608270899e+00 4.040183176294328e+00 9.514523448591759e+03 + 184700 1.090900584087680e+00 -5.902678074258304e+00 -6.032605910353370e+00 4.164460582410079e+00 4.418394841284562e+00 9.317411845991241e+03 + 184720 1.019292156284217e+00 -5.816645029941313e+00 -6.047532460795942e+00 4.690344496563575e+00 4.364553138881845e+00 9.363499143213323e+03 + 184740 1.109292941476850e+00 -5.978299616272839e+00 -6.016480121935713e+00 3.768633158980165e+00 4.549394787049787e+00 9.267688742788072e+03 + 184760 1.045214074605613e+00 -5.922398334334043e+00 -6.048715268296599e+00 4.070183196182008e+00 4.344851813886655e+00 9.367219773828210e+03 + 184780 1.043895848461791e+00 -5.966536341474749e+00 -6.026614929669050e+00 3.855342169246426e+00 4.510361618703282e+00 9.298921883190262e+03 + 184800 9.742464213411808e-01 -5.903780444945077e+00 -6.030961090535593e+00 4.216161437121597e+00 4.485870488999557e+00 9.312326457237796e+03 + 184820 1.038251467987524e+00 -6.031569277917167e+00 -6.003827057036464e+00 3.539413738191214e+00 4.698713863583020e+00 9.228801977052244e+03 + 184840 1.025315054422569e+00 -6.037849753889736e+00 -5.979074358714123e+00 3.494896697030291e+00 4.832394111591670e+00 9.152941723144519e+03 + 184860 9.341307659176772e-01 -5.922828443192557e+00 -5.987095997602385e+00 4.140913908536599e+00 4.771879665743467e+00 9.177450819495547e+03 + 184880 9.695440296921758e-01 -5.986407863705953e+00 -5.997480225262516e+00 3.777991843041167e+00 4.714412629540968e+00 9.209296196999187e+03 + 184900 9.884508013782041e-01 -6.020796918118061e+00 -6.035543564959017e+00 3.568378334528847e+00 4.483700806331854e+00 9.326466286159031e+03 + 184920 9.671258445295973e-01 -5.996011725792417e+00 -5.989397384119241e+00 3.700816978502375e+00 4.738797551955822e+00 9.184532495014910e+03 + 184940 9.456525612851926e-01 -5.968067622676734e+00 -5.971647299665113e+00 3.885257606414527e+00 4.864702547194026e+00 9.130208380158592e+03 + 184960 9.975889583994834e-01 -6.045253738329905e+00 -5.979336686852395e+00 3.472394740796420e+00 4.850900651011025e+00 9.153713012575279e+03 + 184980 9.401807168448983e-01 -5.956360517021791e+00 -5.997952494561053e+00 3.863198791041339e+00 4.624371219673171e+00 9.210767712803021e+03 + 185000 9.041176593845776e-01 -5.895822743639059e+00 -6.008804947158706e+00 4.218115625420680e+00 4.569354328871377e+00 9.244071266898658e+03 + 185020 1.003982056674882e+00 -6.032854501747692e+00 -6.004398498254497e+00 3.544184918044214e+00 4.707583693654446e+00 9.230550271948190e+03 + 185040 1.015873229456205e+00 -6.037025625825211e+00 -5.974225259522392e+00 3.493664839272701e+00 4.854274260908768e+00 9.138095551201633e+03 + 185060 1.018531373676182e+00 -6.024412355959226e+00 -5.988387250088391e+00 3.568948564546045e+00 4.775810297323496e+00 9.181445040174409e+03 + 185080 1.000638322041537e+00 -5.978595249195068e+00 -6.040616498056051e+00 3.797551554879471e+00 4.441415946162461e+00 9.342164233010717e+03 + 185100 1.007416828273757e+00 -5.967512268864924e+00 -6.053616431320521e+00 3.852188372707908e+00 4.357764947311796e+00 9.382396936508509e+03 + 185120 1.040261656798839e+00 -5.991255045036958e+00 -5.994535944198516e+00 3.785803989730864e+00 4.766964559027697e+00 9.200303043320489e+03 + 185140 1.034779990962368e+00 -5.958288055460671e+00 -6.012842933140750e+00 3.910864682753278e+00 4.597602132774230e+00 9.256516819275228e+03 + 185160 1.072888847478848e+00 -5.986526973507564e+00 -5.977014087272437e+00 3.800746391910415e+00 4.855370856786902e+00 9.146613249233180e+03 + 185180 1.028143229372419e+00 -5.890594843565127e+00 -5.988741535359881e+00 4.303938080730618e+00 4.740364588293672e+00 9.182486527331233e+03 + 185200 1.000750417767579e+00 -5.821220060443945e+00 -5.983535419842143e+00 4.568208379458863e+00 4.636168467573721e+00 9.166528635904477e+03 + 185220 1.022982967666760e+00 -5.822740110476578e+00 -5.974354369427646e+00 4.622437906291779e+00 4.751845369163998e+00 9.138433790810614e+03 + 185240 1.053789858100241e+00 -5.836152899512858e+00 -5.988415972527819e+00 4.516509250429876e+00 4.642191122543573e+00 9.181457927189302e+03 + 185260 1.130107318262074e+00 -5.918863091151801e+00 -5.982952227795077e+00 4.123051272351912e+00 4.755041531984378e+00 9.164776936622173e+03 + 185280 1.070744715427829e+00 -5.806406913895175e+00 -6.070323258488806e+00 4.734436683426211e+00 4.218988191847255e+00 9.434178835866833e+03 + 185300 1.168209572999858e+00 -5.941979528439012e+00 -6.062736506652255e+00 3.947251534304493e+00 4.253846278322064e+00 9.410641547132447e+03 + 185320 1.099026889565406e+00 -5.850946837601781e+00 -6.028927267886548e+00 4.518498482513463e+00 4.496507309435760e+00 9.306021171600576e+03 + 185340 1.078446184938955e+00 -5.848849364766389e+00 -5.984254412912240e+00 4.484777819444444e+00 4.707261079127487e+00 9.168796988452532e+03 + 185360 1.098162745942777e+00 -5.923413104758728e+00 -6.068116143809597e+00 4.045182239274698e+00 4.214274996321687e+00 9.427345234071579e+03 + 185380 1.041846598400082e+00 -5.904470806242720e+00 -6.032424401698130e+00 4.226536872901185e+00 4.491807527041325e+00 9.316839491183591e+03 + 185400 1.029157943363053e+00 -5.945659304819125e+00 -5.982114275524933e+00 4.059448261405571e+00 4.850118178224335e+00 9.162194318624717e+03 + 185420 1.029198263354715e+00 -5.988325874183715e+00 -5.981877729898676e+00 3.846169754868704e+00 4.883195997200506e+00 9.161486081196907e+03 + 185440 9.670405769970989e-01 -5.921791465862795e+00 -6.049304036762996e+00 4.048772467720456e+00 4.316575553104935e+00 9.369024029145459e+03 + 185460 9.327855768417140e-01 -5.889773341735926e+00 -6.006260876193060e+00 4.298963866996800e+00 4.630074417756240e+00 9.236229542721157e+03 + 185480 9.912101864343976e-01 -5.987857365711900e+00 -5.992209700174170e+00 3.772482401691135e+00 4.747490623687196e+00 9.193094191915112e+03 + 185500 1.018496577791338e+00 -6.035888373877107e+00 -5.984603237468292e+00 3.506599036628273e+00 4.801086226236901e+00 9.169819971660090e+03 + 185520 1.010354190864812e+00 -6.028653006326449e+00 -5.995390241266351e+00 3.531565069621988e+00 4.722565013993326e+00 9.202883881822210e+03 + 185540 9.268431003901618e-01 -5.911049793676989e+00 -6.015786024946857e+00 4.166534701587460e+00 4.565123053756472e+00 9.265549522080117e+03 + 185560 1.009421387056205e+00 -6.038274071522450e+00 -5.974534145513069e+00 3.503476254250542e+00 4.869480773118075e+00 9.139060326328748e+03 + 185580 9.910767747663354e-01 -6.015412782515984e+00 -6.018407008991261e+00 3.581877779443277e+00 4.564684467667185e+00 9.273659730457890e+03 + 185600 9.701700294042073e-01 -5.988307953147064e+00 -5.970354505120878e+00 3.792071089952945e+00 4.895162566806411e+00 9.126267097639053e+03 + 185620 9.797124562966963e-01 -6.003213575426982e+00 -5.989526756585840e+00 3.659115322264248e+00 4.737707154078457e+00 9.184898236746123e+03 + 185640 9.433616013586430e-01 -5.946724690532390e+00 -6.027814334433953e+00 3.997952106999838e+00 4.532322823135225e+00 9.302622538765001e+03 + 185660 9.186120817489071e-01 -5.906681229967679e+00 -6.065914302091246e+00 4.107180902055314e+00 4.192839960683520e+00 9.420521097689680e+03 + 185680 1.004781046611605e+00 -6.031202407178282e+00 -5.986819370738830e+00 3.528549773148095e+00 4.783404036636121e+00 9.176624405371240e+03 + 185700 9.161781652028301e-01 -5.893488313492351e+00 -5.982474174392390e+00 4.269815156882800e+00 4.758844573077307e+00 9.163308985528527e+03 + 185720 9.761427585098773e-01 -5.971626011338190e+00 -5.984362860624346e+00 3.857539105206446e+00 4.784402145584286e+00 9.169073344821705e+03 + 185740 9.760210997188503e-01 -5.953566634546820e+00 -6.013306135800674e+00 3.903336871952940e+00 4.560303411095371e+00 9.257938590479915e+03 + 185760 1.033266980782642e+00 -6.018849238562722e+00 -5.991556208511069e+00 3.581361099108338e+00 4.738081901247680e+00 9.191149563849791e+03 + 185780 1.041965821483321e+00 -6.010554278638002e+00 -5.992890280043696e+00 3.670929579544791e+00 4.772358992968242e+00 9.195238011845764e+03 + 185800 1.047665326713946e+00 -5.995777238739688e+00 -6.022434798821588e+00 3.702348612928393e+00 4.549276777694033e+00 9.286031544330706e+03 + 185820 1.048720421351691e+00 -5.977319830451124e+00 -5.965030601448968e+00 3.847682997050328e+00 4.918249651732756e+00 9.109992410159126e+03 + 185840 9.457119008522243e-01 -5.803715945821020e+00 -6.022723056158099e+00 4.714445817000475e+00 4.456873098204176e+00 9.286896316487671e+03 + 185860 1.047437938874544e+00 -5.933787310753452e+00 -6.007476483903579e+00 4.032893084386848e+00 4.609758448796127e+00 9.240014990662936e+03 + 185880 1.095977677254185e+00 -5.987514796487254e+00 -5.968431589422411e+00 3.816966238653442e+00 4.926544966736518e+00 9.120376476236226e+03 + 185900 9.976802104975052e-01 -5.827678569556628e+00 -6.029626937520445e+00 4.580691989469514e+00 4.421073209212337e+00 9.308196257288848e+03 + 185920 1.076624926092300e+00 -5.934216923147818e+00 -6.032216618917353e+00 4.026218337021944e+00 4.463488918509369e+00 9.316203843990366e+03 + 185940 1.088192628649703e+00 -5.947148549720774e+00 -6.034207840880567e+00 3.978059212325609e+00 4.478151290104314e+00 9.322372291511872e+03 + 185960 1.045301471878106e+00 -5.889827428930012e+00 -6.078533214689987e+00 4.225569670483142e+00 4.141991846523399e+00 9.459690106103961e+03 + 185980 1.072575044503015e+00 -5.952481211335395e+00 -6.029228960794081e+00 3.886679022106483e+00 4.445981568038864e+00 9.306997377709622e+03 + 186000 1.042779047565370e+00 -5.944028417302754e+00 -6.014041746713178e+00 3.966204674364099e+00 4.564177302361729e+00 9.260195752954429e+03 + 186020 1.031020652703580e+00 -5.974417312331937e+00 -5.990690049983575e+00 3.807461751410843e+00 4.714021173617125e+00 9.188466415885779e+03 + 186040 1.022527084902250e+00 -6.013150204376615e+00 -5.962777455998066e+00 3.627059022196265e+00 4.916307138543512e+00 9.103135954684012e+03 + 186060 1.002518746327171e+00 -6.027686768331249e+00 -5.983424407849368e+00 3.516118787117454e+00 4.770280110582561e+00 9.166228960518303e+03 + 186080 1.001107748930780e+00 -6.057269439067742e+00 -5.985613465670408e+00 3.411915473960787e+00 4.823375161934327e+00 9.172952352347271e+03 + 186100 9.346612492110948e-01 -5.982096172669222e+00 -6.030515383905172e+00 3.737526460955635e+00 4.459495857190087e+00 9.310975497276515e+03 + 186120 9.252253017078199e-01 -5.982263087367459e+00 -5.986927864716431e+00 3.762735403171366e+00 4.735949529761609e+00 9.176992200764860e+03 + 186140 1.009328479376835e+00 -6.115518354520454e+00 -5.939788039712223e+00 3.078518742065147e+00 5.087589403872339e+00 9.033141018430973e+03 + 186160 9.071215853102388e-01 -5.965393607522716e+00 -5.964911900846257e+00 3.944492196482396e+00 4.947258230762493e+00 9.109646249371166e+03 + 186180 9.753669573614483e-01 -6.061725818932347e+00 -5.984841540199401e+00 3.410516749212121e+00 4.851998175500375e+00 9.170566250487909e+03 + 186200 1.013581517416732e+00 -6.108692787018881e+00 -5.996613509175106e+00 3.124645091349650e+00 4.768221648940797e+00 9.206654649200524e+03 + 186220 9.427096023164401e-01 -5.990842832261961e+00 -6.033101983846658e+00 3.721637613737844e+00 4.478979025755941e+00 9.318935205612370e+03 + 186240 9.930794779060100e-01 -6.051693343526072e+00 -6.017173325663627e+00 3.398056915782077e+00 4.596276200303733e+00 9.269859204286917e+03 + 186260 9.928647918049680e-01 -6.034153996944970e+00 -6.009071309733171e+00 3.500445931818847e+00 4.644474603322299e+00 9.244917714191482e+03 + 186280 9.556215879350598e-01 -5.960056525916730e+00 -6.032447688295306e+00 3.929971326369039e+00 4.514290069495080e+00 9.316923411982598e+03 + 186300 1.050262832942374e+00 -6.079448687006836e+00 -6.015398448514189e+00 3.250322072543391e+00 4.618108453710546e+00 9.264384475450588e+03 + 186320 9.931332608766693e-01 -5.972826506600821e+00 -6.031386936056980e+00 3.785749302618346e+00 4.449486254483914e+00 9.313647664284130e+03 + 186340 1.027496507631874e+00 -6.002227440521472e+00 -5.998013908890345e+00 3.654407945194948e+00 4.678602695862788e+00 9.210949689678182e+03 + 186360 1.013260164462804e+00 -5.957849972041716e+00 -5.979991951979196e+00 3.915074528696894e+00 4.787931853435561e+00 9.155732514468869e+03 + 186380 9.818742084576281e-01 -5.887577047843616e+00 -6.012411302993200e+00 4.236963516594397e+00 4.520145905486936e+00 9.255171994958682e+03 + 186400 1.046742321383515e+00 -5.958332355320721e+00 -5.992220420003236e+00 3.885097777733995e+00 4.690507266165930e+00 9.193168901795190e+03 + 186420 1.001371579335905e+00 -5.865235488279005e+00 -6.059275830058220e+00 4.347374642559789e+00 4.233164972417692e+00 9.399880628048390e+03 + 186440 1.070587606439025e+00 -5.942004385211278e+00 -6.040736197193956e+00 4.018045897569773e+00 4.451112554466707e+00 9.342487507183301e+03 + 186460 1.102999821052950e+00 -5.965442257190348e+00 -5.983039891920763e+00 3.880276782152912e+00 4.779228440305693e+00 9.165052461013862e+03 + 186480 1.082521851725404e+00 -5.912743740355033e+00 -5.957050216337508e+00 4.159568628372348e+00 4.905153986875981e+00 9.085658321487705e+03 + 186500 1.110756833269781e+00 -5.929799395166510e+00 -6.000045746160557e+00 4.044663502556188e+00 4.641298084560688e+00 9.217179066404942e+03 + 186520 1.112104601301257e+00 -5.906943589715880e+00 -6.025641801041936e+00 4.222681417298498e+00 4.541097919375447e+00 9.295908766682989e+03 + 186540 1.057704881332429e+00 -5.807941166093006e+00 -6.014377594241997e+00 4.765888252993046e+00 4.580498336627525e+00 9.261218401192284e+03 + 186560 1.122404897818578e+00 -5.887779795466338e+00 -6.038975292861270e+00 4.291511837853871e+00 4.423323894384568e+00 9.337047635681069e+03 + 186580 1.091702189816600e+00 -5.837290217142248e+00 -6.065536886983222e+00 4.592688366563687e+00 4.282060667278814e+00 9.419327910744425e+03 + 186600 1.144381761928308e+00 -5.927228735512145e+00 -6.037417959232600e+00 4.084296855095796e+00 4.451573280765682e+00 9.332275347104580e+03 + 186620 1.119825147553620e+00 -5.923845726061165e+00 -6.018903880057690e+00 4.138520117295672e+00 4.592681486845841e+00 9.275168900948436e+03 + 186640 1.024519136182959e+00 -5.829064457750234e+00 -6.029548911098603e+00 4.557460102667097e+00 4.406247346671873e+00 9.308011092586481e+03 + 186660 1.056929967585875e+00 -5.929810545718619e+00 -6.015497285489076e+00 4.088936383730128e+00 4.596909863988039e+00 9.264693661696401e+03 + 186680 1.024957747914378e+00 -5.933034660228435e+00 -6.018152434781978e+00 4.021810679580685e+00 4.533051246161197e+00 9.272843249775946e+03 + 186700 1.058833983117284e+00 -6.024860347020438e+00 -5.974027380096007e+00 3.585780379732756e+00 4.877671142189048e+00 9.137471656379115e+03 + 186720 1.062613261405321e+00 -6.064948477899399e+00 -5.982014174308262e+00 3.382623031455032e+00 4.858844636717349e+00 9.161921324331519e+03 + 186740 1.010385322587362e+00 -6.015130667549718e+00 -6.028413807328409e+00 3.528538839633257e+00 4.452264995464778e+00 9.304484539406343e+03 + 186760 9.743172766219365e-01 -5.984220005211003e+00 -6.039967586287172e+00 3.744931713411144e+00 4.424820475961488e+00 9.340125449283481e+03 + 186780 1.030423860279781e+00 -6.085737034418922e+00 -5.989832629873499e+00 3.253819205773300e+00 4.804517137831759e+00 9.185862261988475e+03 + 186800 1.010178131546324e+00 -6.069651997730382e+00 -5.992221382154328e+00 3.345933972758810e+00 4.790552549745546e+00 9.193171861844710e+03 + 186820 9.400084104397697e-01 -5.978509258022677e+00 -5.979219642872318e+00 3.798614300705335e+00 4.794535160966994e+00 9.153373183164837e+03 + 186840 9.801768515088850e-01 -6.047218961517502e+00 -5.988214291746822e+00 3.424307057771874e+00 4.763121002538258e+00 9.180891672866304e+03 + 186860 9.649202174065267e-01 -6.028921368292059e+00 -6.000581687277425e+00 3.578695585774806e+00 4.741426419712297e+00 9.218835587206304e+03 + 186880 9.883318567481777e-01 -6.065996271725696e+00 -5.989520194166037e+00 3.355989315853136e+00 4.795126787835459e+00 9.184917832502742e+03 + 186900 9.303828721863562e-01 -5.978827212756742e+00 -6.008154242868232e+00 3.792651613460669e+00 4.624251268217257e+00 9.242074076582929e+03 + 186920 9.987186763006329e-01 -6.075707344598140e+00 -5.956324462895100e+00 3.324555811374710e+00 5.010070792554799e+00 9.083451158194463e+03 + 186940 9.556223143675261e-01 -5.999897377397238e+00 -5.993212909649419e+00 3.632912452579089e+00 4.671295700805105e+00 9.196236280133311e+03 + 186960 9.661932948032397e-01 -5.999351705670685e+00 -5.997545054246227e+00 3.681383608994689e+00 4.691757681052334e+00 9.209511080259645e+03 + 186980 9.331371712050814e-01 -5.926986069516897e+00 -6.027834303892449e+00 4.131729260666040e+00 4.552643092667792e+00 9.302681307931265e+03 + 187000 9.991620043512178e-01 -5.995421436362049e+00 -6.038684044620863e+00 3.706944199539496e+00 4.458523608050390e+00 9.336185826117948e+03 + 187020 9.984252806061611e-01 -5.962374346262470e+00 -6.055518668438074e+00 3.920552748890816e+00 4.385703636921223e+00 9.388260284358616e+03 + 187040 1.045041356016762e+00 -6.002259238126165e+00 -6.021324109913393e+00 3.718074730318998e+00 4.608601286237363e+00 9.282612375518893e+03 + 187060 1.020335070437836e+00 -5.938226042769958e+00 -6.017822754234155e+00 4.053193662118691e+00 4.596137027339985e+00 9.271850576427871e+03 + 187080 1.057466697787437e+00 -5.966960619237297e+00 -6.036848378482438e+00 3.881776704133240e+00 4.480470375451851e+00 9.330516066549841e+03 + 187100 1.028835666131603e+00 -5.904610069214259e+00 -6.063731561469718e+00 4.202430842376371e+00 4.288730609874181e+00 9.413745958365696e+03 + 187120 1.036828196275169e+00 -5.904750651544834e+00 -6.057442399314407e+00 4.175345079610089e+00 4.298565434945599e+00 9.394253467310918e+03 + 187140 1.036712300123146e+00 -5.900042770636301e+00 -6.072285139640308e+00 4.230334886932079e+00 4.241292549690612e+00 9.440288501625588e+03 + 187160 1.054495050016417e+00 -5.931311794907593e+00 -6.033576356000159e+00 4.116609605077056e+00 4.529390669893862e+00 9.320409689866718e+03 + 187180 1.090704149942278e+00 -6.000023712358605e+00 -5.974105212716631e+00 3.708421623833032e+00 4.857249659652105e+00 9.137742305979056e+03 + 187200 1.045427661679310e+00 -5.956619937390156e+00 -5.986364725431453e+00 3.945211893776597e+00 4.774412717852401e+00 9.175212674283095e+03 + 187220 1.067513209096400e+00 -6.026568558345110e+00 -5.959852532799883e+00 3.567312062827479e+00 4.950405805779758e+00 9.094227370306920e+03 + 187240 1.022224273167519e+00 -6.012710704790606e+00 -6.024270150414243e+00 3.622242391123824e+00 4.555866265534467e+00 9.291701357125254e+03 + 187260 9.392689337615499e-01 -5.952363271049459e+00 -5.988648767811608e+00 3.939674022588872e+00 4.731317085018141e+00 9.182223427525465e+03 + 187280 9.356925570078081e-01 -5.996583260063040e+00 -5.952089575682574e+00 3.727798541192985e+00 4.983288162281021e+00 9.070547095173159e+03 + 187300 9.628790555559413e-01 -6.065952055700597e+00 -5.974760706671912e+00 3.324132808765250e+00 4.847767646703615e+00 9.139743742593135e+03 + 187320 9.403934061492137e-01 -6.048161510123434e+00 -5.975542472921589e+00 3.438357639969778e+00 4.855347389342456e+00 9.142107919759279e+03 + 187340 9.109138045319671e-01 -6.008700321065351e+00 -5.939195128625794e+00 3.629422236291495e+00 5.028531807173202e+00 9.031320918590029e+03 + 187360 9.807769712653686e-01 -6.107741700928441e+00 -5.984776332736314e+00 3.125663815397996e+00 4.831749988386422e+00 9.170365744815108e+03 + 187380 9.621917439100052e-01 -6.072075103730400e+00 -5.959665627458695e+00 3.320952435596486e+00 4.966425043658850e+00 9.093661982714981e+03 + 187400 9.557826198092048e-01 -6.050218742520419e+00 -6.011110642850433e+00 3.395144327491002e+00 4.619709087754932e+00 9.251197161312601e+03 + 187420 9.772799359262452e-01 -6.064640502213159e+00 -6.012882372667359e+00 3.335056001062638e+00 4.632259190459282e+00 9.256655208796059e+03 + 187440 9.799800524139662e-01 -6.050615542890261e+00 -5.986662165575053e+00 3.436293623008029e+00 4.803523812305105e+00 9.176161079788431e+03 + 187460 9.575846475440787e-01 -5.996023255264544e+00 -6.027843002498814e+00 3.674622561506429e+00 4.491908648797277e+00 9.302697803611158e+03 + 187480 9.853973628938401e-01 -6.012411389526036e+00 -6.021623021927882e+00 3.597663511163769e+00 4.544768892416867e+00 9.283567363091111e+03 + 187500 1.042031988659263e+00 -6.072998865980701e+00 -6.004134748391932e+00 3.312711572156664e+00 4.708139992039136e+00 9.229741007117545e+03 + 187520 9.459167420619240e-01 -5.908330927637697e+00 -6.038696637770089e+00 4.161061459462107e+00 4.412481377853467e+00 9.336218964881467e+03 + 187540 1.003123019467519e+00 -5.973195836020475e+00 -5.990695519065680e+00 3.854359602481891e+00 4.753873714369124e+00 9.188492478969363e+03 + 187560 9.443921395664403e-01 -5.867020938410749e+00 -6.034420338837155e+00 4.418001604017006e+00 4.456768341795092e+00 9.323005210359141e+03 + 187580 1.037085868160331e+00 -5.985826394509319e+00 -6.034608619555526e+00 3.799127742623312e+00 4.519012657383062e+00 9.323588661495318e+03 + 187600 9.864672952387298e-01 -5.897895957369727e+00 -6.041903878747088e+00 4.259828923477037e+00 4.432913153774417e+00 9.346077796199081e+03 + 187620 9.942385089514749e-01 -5.900011919640180e+00 -6.017663738886242e+00 4.117722223895990e+00 4.442147271224916e+00 9.271347905178993e+03 + 187640 1.058167750799638e+00 -5.987700109794499e+00 -5.992290798075151e+00 3.824739026526899e+00 4.798378584012676e+00 9.193389323620677e+03 + 187660 1.006612262481241e+00 -5.908386393495501e+00 -6.004811893663032e+00 4.197488635163195e+00 4.643798491403312e+00 9.231805151247338e+03 + 187680 1.005181018295197e+00 -5.906192200391622e+00 -6.040425995970099e+00 4.191677070786325e+00 4.420885843961980e+00 9.341565579499489e+03 + 187700 1.087735861352167e+00 -6.034980940595824e+00 -5.979125084925866e+00 3.508467966557406e+00 4.829200933480037e+00 9.153089901549889e+03 + 187720 1.008770670578979e+00 -5.932022176273186e+00 -6.051299577696961e+00 4.013758168474073e+00 4.328848871380544e+00 9.375175494248097e+03 + 187740 1.061813157611948e+00 -6.038553664861821e+00 -6.002791828115599e+00 3.478734042341010e+00 4.684084043064168e+00 9.225624918447626e+03 + 187760 9.520806639350479e-01 -5.918188281174189e+00 -6.022680771618656e+00 4.125454869150070e+00 4.525442818857303e+00 9.286806407540860e+03 + 187780 1.015521256191388e+00 -6.069463876343882e+00 -5.973765058889539e+00 3.349901168244129e+00 4.899418587411104e+00 9.136687806990671e+03 + 187800 9.742852545814802e-01 -6.063996999484311e+00 -5.968085470529485e+00 3.328708738627806e+00 4.879447580147554e+00 9.119371584052340e+03 + 187820 1.041995785607911e+00 -6.205699088085471e+00 -5.969308093862208e+00 2.581452016404254e+00 4.938845686622366e+00 9.123082730854941e+03 + 187840 8.873951637501517e-01 -6.003614124832986e+00 -6.002305278415308e+00 3.618488577710471e+00 4.626004176384100e+00 9.224136068400141e+03 + 187860 8.884534120266929e-01 -6.018066424377311e+00 -6.020389388739895e+00 3.546918274087910e+00 4.533579453240376e+00 9.279752057838505e+03 + 187880 9.499169670531472e-01 -6.112554303417117e+00 -5.974668006635110e+00 3.081906387804145e+00 4.873670841761898e+00 9.139458374755139e+03 + 187900 9.339703228851576e-01 -6.085246463337047e+00 -5.993225902299603e+00 3.222420443424719e+00 4.750816745037522e+00 9.196275372939022e+03 + 187920 9.733347136159928e-01 -6.133435766718804e+00 -5.962601212835068e+00 2.991868010727253e+00 4.972826455689443e+00 9.102628177527518e+03 + 187940 9.122608480012248e-01 -6.025798087472030e+00 -6.022037057166010e+00 3.523751337315139e+00 4.545347755349866e+00 9.284813710113087e+03 + 187960 1.012408855575704e+00 -6.151796177276626e+00 -6.007036952095621e+00 2.879996335314077e+00 4.711226207721109e+00 9.238673286279251e+03 + 187980 9.261735775762988e-01 -5.998518478473338e+00 -6.005898964863691e+00 3.733738602237448e+00 4.691358707257463e+00 9.235170666587412e+03 + 188000 1.006979360091281e+00 -6.090922781296095e+00 -5.973689148766391e+00 3.194824674238758e+00 4.867998334070318e+00 9.136448908195265e+03 + 188020 9.850216271568561e-01 -6.026511343500488e+00 -5.987485683698942e+00 3.547759818977604e+00 4.771851196759415e+00 9.178687479184577e+03 + 188040 9.728051688498196e-01 -5.978882442037638e+00 -6.040707707542766e+00 3.810819762324150e+00 4.455809520364792e+00 9.342432442740912e+03 + 188060 9.818992863502871e-01 -5.967360994249038e+00 -6.051806674529895e+00 3.843290445012227e+00 4.358390280912755e+00 9.376797487614462e+03 + 188080 1.052297393176537e+00 -6.053772281587420e+00 -6.007199865711026e+00 3.386847070553766e+00 4.654273089574086e+00 9.239178126587127e+03 + 188100 1.046893205829760e+00 -6.034000159693503e+00 -5.966020302881568e+00 3.533604878423872e+00 4.923955736086846e+00 9.113022679077165e+03 + 188120 9.521012300317291e-01 -5.883174474022115e+00 -5.987705278305032e+00 4.350685076781486e+00 4.750453022499295e+00 9.179328893989930e+03 + 188140 1.022710526411044e+00 -5.978865719726636e+00 -6.018254225589109e+00 3.804860003894003e+00 4.578685107880103e+00 9.273155646889229e+03 + 188160 9.908140413471827e-01 -5.926169113731577e+00 -6.049368239620392e+00 4.093709494059851e+00 4.386281048203156e+00 9.369209275864427e+03 + 188180 1.115620967231093e+00 -6.110405688709008e+00 -5.959117822728169e+00 3.132003116635469e+00 5.000721454819043e+00 9.091977548125928e+03 + 188200 1.082200491609300e+00 -6.064188800062556e+00 -5.958756100298021e+00 3.371521365732900e+00 4.976932243438421e+00 9.090856239748764e+03 + 188220 9.741879427639298e-01 -5.907428084409361e+00 -6.022549504373215e+00 4.239562623166187e+00 4.578517614751576e+00 9.286336194245199e+03 + 188240 1.014144461705364e+00 -5.971522520701200e+00 -5.997553752918042e+00 3.828389989412096e+00 4.678914625702819e+00 9.209507770334843e+03 + 188260 1.021338988104697e+00 -5.987889585626456e+00 -5.981397613978544e+00 3.805669882213746e+00 4.842947788045425e+00 9.160015725376503e+03 + 188280 1.026720541473632e+00 -6.005079485500787e+00 -5.978384006327485e+00 3.679133033869279e+00 4.832422606394426e+00 9.150788797659618e+03 + 188300 1.014412033138585e+00 -5.997365852915326e+00 -5.963878368850643e+00 3.764846020533017e+00 4.957136336203842e+00 9.106483348781998e+03 + 188320 9.784395763381555e-01 -5.954300729660013e+00 -5.993134424784777e+00 4.038073484019431e+00 4.815084397118141e+00 9.195963604363009e+03 + 188340 1.046884300723660e+00 -6.068811369413000e+00 -5.994509055645652e+00 3.295150546747851e+00 4.721805930645853e+00 9.200211726056830e+03 + 188360 9.976467994626792e-01 -6.015912325694622e+00 -5.986090056404239e+00 3.601546112545385e+00 4.772790197792022e+00 9.174406099815271e+03 + 188380 1.034389278159326e+00 -6.102251791847856e+00 -5.989023563813575e+00 3.113167676810151e+00 4.763341684194653e+00 9.183378704445320e+03 + 188400 9.396382743144147e-01 -6.006215729274780e+00 -5.976028709737490e+00 3.689885770597054e+00 4.863224308206355e+00 9.143599896504469e+03 + 188420 9.464512449870724e-01 -6.067976999622854e+00 -5.951635898185820e+00 3.339431004745360e+00 5.007479612924071e+00 9.069170099960118e+03 + 188440 9.298218150127306e-01 -6.087516289624699e+00 -5.967212275955053e+00 3.206369659095565e+00 4.897173922572624e+00 9.116671130502968e+03 + 188460 8.701587018530968e-01 -6.030988061985333e+00 -5.969525427764248e+00 3.553559681643653e+00 4.906487638653032e+00 9.123728501318221e+03 + 188480 8.766452640126813e-01 -6.056964537557363e+00 -5.974586877087320e+00 3.405205303600909e+00 4.878230577921657e+00 9.139187169577064e+03 + 188500 8.960078163215408e-01 -6.089416484674764e+00 -5.979990610410220e+00 3.238052749382567e+00 4.866393053008895e+00 9.155728255315398e+03 + 188520 9.306027439101184e-01 -6.134494392319277e+00 -5.978754843057485e+00 2.964037789169440e+00 4.858318381648010e+00 9.151956878685591e+03 + 188540 9.436375558771526e-01 -6.139554150388649e+00 -5.981199987146118e+00 2.997044672804174e+00 4.906338783370350e+00 9.159447501549166e+03 + 188560 8.834341370979402e-01 -6.027968133594073e+00 -6.014434947159287e+00 3.592512273145231e+00 4.670221923907608e+00 9.261432312328208e+03 + 188580 8.937184198855749e-01 -6.016802754209667e+00 -6.013430688667203e+00 3.583773968921536e+00 4.603136891091825e+00 9.258340165252983e+03 + 188600 1.003816763307793e+00 -6.149257241343234e+00 -5.957461043026825e+00 2.945672140773023e+00 5.046995591871609e+00 9.086946213926249e+03 + 188620 9.562116229441519e-01 -6.047151557354937e+00 -5.992154585551321e+00 3.449721233955665e+00 4.765522356805910e+00 9.192998019771085e+03 + 188640 9.899498664766415e-01 -6.068459303385493e+00 -5.985412734797574e+00 3.353961154124639e+00 4.830827402371429e+00 9.172315105613288e+03 + 188660 9.787552271442698e-01 -6.028503310460732e+00 -5.977267202605601e+00 3.553114287688142e+00 4.847319947754375e+00 9.147395291825305e+03 + 188680 1.022405124125336e+00 -6.071788786205794e+00 -5.997427502682928e+00 3.318919375588851e+00 4.745913372948580e+00 9.209167843875031e+03 + 188700 1.064006225374504e+00 -6.119126466680164e+00 -5.973117034215775e+00 3.086448450718424e+00 4.924857206815597e+00 9.134734437014147e+03 + 188720 1.009110680520988e+00 -6.027308730120838e+00 -6.017482201120389e+00 3.529961690530194e+00 4.586387140701223e+00 9.270790668023363e+03 + 188740 1.071643289449887e+00 -6.110608267090898e+00 -6.005622157611207e+00 3.083998903288944e+00 4.686845390469270e+00 9.234278217899649e+03 + 188760 9.583151469612496e-01 -5.936198803751449e+00 -6.013821881436687e+00 4.062749187589644e+00 4.617025463388559e+00 9.259518547351023e+03 + 188780 9.913832932052363e-01 -5.980287477801335e+00 -5.997159858598338e+00 3.854179046913592e+00 4.757295225384711e+00 9.208315206831294e+03 + 188800 1.061076738529573e+00 -6.076447367077092e+00 -5.992202773386271e+00 3.260066014537661e+00 4.743811508319094e+00 9.193138669384725e+03 + 188820 1.036360863915443e+00 -6.034911410258912e+00 -5.987187428292120e+00 3.558217650377885e+00 4.832256140093549e+00 9.177745646450516e+03 + 188840 9.722392847661596e-01 -5.937434767549409e+00 -5.972852140893701e+00 4.010781022191562e+00 4.807408983627824e+00 9.133889693185651e+03 + 188860 9.607483040257760e-01 -5.916417446225780e+00 -5.987927840608629e+00 4.182235999489929e+00 4.771612248745845e+00 9.179984047886022e+03 + 188880 9.883076609964926e-01 -5.951248588845649e+00 -5.941900205048311e+00 4.006695437019889e+00 5.060375303441918e+00 9.039535618136077e+03 + 188900 1.018372190317341e+00 -5.987623644029500e+00 -5.960541276026077e+00 3.744886823524742e+00 4.900397971583304e+00 9.096313313161678e+03 + 188920 1.100553972580510e+00 -6.097644660181176e+00 -5.963821881582211e+00 3.147716264908218e+00 4.916147368631536e+00 9.106339628632293e+03 + 188940 9.902274701095951e-01 -5.924117814818277e+00 -6.013283666516328e+00 4.065103261090281e+00 4.553099142269114e+00 9.257884457731785e+03 + 188960 9.411914223002298e-01 -5.840695092197502e+00 -6.067910623911068e+00 4.523291840128907e+00 4.218585095539717e+00 9.426700568225895e+03 + 188980 1.074033243649517e+00 -6.026765245530889e+00 -6.017213316782637e+00 3.570478455406383e+00 4.625327108435043e+00 9.269967277965312e+03 + 189000 9.943814770298425e-01 -5.898227712660852e+00 -6.043772539425726e+00 4.200958725745769e+00 4.365217807472715e+00 9.351914176324981e+03 + 189020 1.031992176035345e+00 -5.945509537996477e+00 -6.031297661957254e+00 3.950222063156796e+00 4.457613379704737e+00 9.313354617392155e+03 + 189040 1.051128076048910e+00 -5.966388017320948e+00 -5.996339294577919e+00 3.872827051078233e+00 4.700842182123532e+00 9.205818158554583e+03 + 189060 1.025194257657443e+00 -5.924156932132849e+00 -6.046290877212893e+00 4.060481719844811e+00 4.359169707028278e+00 9.359666871542144e+03 + 189080 1.057419055574063e+00 -5.972582629087258e+00 -6.023392188354589e+00 3.788064344105802e+00 4.496307992038901e+00 9.288995163799284e+03 + 189100 1.067887001607686e+00 -5.995518367801735e+00 -5.996489382710737e+00 3.741441554565022e+00 4.735865836693458e+00 9.206282558084251e+03 + 189120 1.006135508930121e+00 -5.920009840260724e+00 -6.071852995649436e+00 4.051004899654705e+00 4.179098003760367e+00 9.438931170412965e+03 + 189140 1.013418007364389e+00 -5.954081704263778e+00 -5.996618057932095e+00 3.917396190724767e+00 4.673145865481835e+00 9.206657664677839e+03 + 189160 1.030261308382780e+00 -6.004832877822267e+00 -5.952469750169823e+00 3.721722824957815e+00 5.022400007105965e+00 9.071710097505869e+03 + 189180 1.057965090290120e+00 -6.074660738114238e+00 -5.988014627559363e+00 3.282486970767549e+00 4.780022346015913e+00 9.180298990476222e+03 + 189200 1.000321080109322e+00 -6.020162704957389e+00 -6.017638185805925e+00 3.576117350631824e+00 4.590613530267607e+00 9.271280559558556e+03 + 189220 9.847590299779856e-01 -6.027028187048012e+00 -5.998964654206068e+00 3.594339132467918e+00 4.755484280864037e+00 9.213891109347520e+03 + 189240 9.680689128081202e-01 -6.030684352006950e+00 -6.016252627887251e+00 3.524663582618138e+00 4.607532775815534e+00 9.267022433628861e+03 + 189260 9.761003562878930e-01 -6.064062505776025e+00 -5.982831135030002e+00 3.336332639677309e+00 4.802775741014973e+00 9.164419141395550e+03 + 189280 9.146454712944040e-01 -5.988624443545700e+00 -5.994995307460660e+00 3.774846030034733e+00 4.738263543547031e+00 9.201697968153207e+03 + 189300 9.501820695925323e-01 -6.051912944848105e+00 -5.981977139795550e+00 3.356631146984699e+00 4.758213362127329e+00 9.161813676565718e+03 + 189320 9.312356272849381e-01 -6.027720844664540e+00 -5.947588223211703e+00 3.531839519356581e+00 4.991973432221860e+00 9.056859778690961e+03 + 189340 9.101978295233698e-01 -5.992346255017211e+00 -5.979625244264387e+00 3.768388147133733e+00 4.841434159446500e+00 9.154576991753667e+03 + 189360 9.905585945666261e-01 -6.099922062543376e+00 -5.953172992670785e+00 3.199990008821130e+00 5.042645877374715e+00 9.073854256084205e+03 + 189380 9.585042504255242e-01 -6.034434721978760e+00 -5.999366071438541e+00 3.564536517548858e+00 4.765906135806930e+00 9.215102226993356e+03 + 189400 9.322769816458653e-01 -5.972424056415463e+00 -5.994177016051021e+00 3.838161753842111e+00 4.713252893355113e+00 9.199194861796863e+03 + 189420 1.049490170302159e+00 -6.115632587169573e+00 -5.950558300725380e+00 3.089758493468100e+00 5.037640591393926e+00 9.065891751330733e+03 + 189440 9.343541857223273e-01 -5.908579210249313e+00 -6.013167326631542e+00 4.167177795113078e+00 4.566616645887613e+00 9.257512087227096e+03 + 189460 1.002719940140937e+00 -5.969685474692711e+00 -6.004584381269646e+00 3.870552764365507e+00 4.670157842212404e+00 9.231123916940260e+03 + 189480 1.057761780523360e+00 -6.012852361765907e+00 -6.013405841490401e+00 3.619491000769727e+00 4.616312834540967e+00 9.258255913238345e+03 + 189500 1.041778794639399e+00 -5.961324480378417e+00 -6.024216839440154e+00 3.851517123636820e+00 4.490379465343221e+00 9.291530489606337e+03 + 189520 1.036911943284363e+00 -5.936438517233583e+00 -6.015536536743364e+00 3.997942396644425e+00 4.543749328240304e+00 9.264765600863233e+03 + 189540 1.028930475379204e+00 -5.915435313048166e+00 -5.994726758833279e+00 4.149515134368782e+00 4.694211382359084e+00 9.200848023007833e+03 + 189560 1.068218532432107e+00 -5.972228137232257e+00 -5.994492925871787e+00 3.821233754506534e+00 4.693385892673443e+00 9.200134149559795e+03 + 189580 1.006522990159559e+00 -5.883718796322963e+00 -6.003821591386337e+00 4.336083710603597e+00 4.646434875502236e+00 9.228783362242615e+03 + 189600 1.082672846832262e+00 -6.002607917794338e+00 -6.020522810224580e+00 3.720594819941682e+00 4.617724735286589e+00 9.280155923515680e+03 + 189620 1.080879886437811e+00 -6.011744950281750e+00 -6.017143200799799e+00 3.618551224848903e+00 4.587553634997703e+00 9.269752219065278e+03 + 189640 1.079511573881293e+00 -6.026770983784043e+00 -5.964475638032990e+00 3.584804249818746e+00 4.942513765294891e+00 9.108308268488605e+03 + 189660 1.044142798566378e+00 -5.988995006880343e+00 -5.970006648752939e+00 3.812669344591547e+00 4.921703435398022e+00 9.125168310306524e+03 + 189680 9.899892102576219e-01 -5.924035812524107e+00 -5.977254736587502e+00 4.086997295841779e+00 4.781405998267876e+00 9.147300856003560e+03 + 189700 1.018992331687494e+00 -5.981168465657881e+00 -5.998096220522529e+00 3.768718297113589e+00 4.671516509119181e+00 9.211106487300995e+03 + 189720 1.020056458858804e+00 -5.995873642520126e+00 -5.993213237084141e+00 3.710806919467923e+00 4.726083379177760e+00 9.196196146482074e+03 + 189740 1.027438244518289e+00 -6.021374641500143e+00 -5.998468954305802e+00 3.562325003931524e+00 4.693853004445063e+00 9.212347939070802e+03 + 189760 9.949674761309182e-01 -5.988752525351055e+00 -6.022254018021498e+00 3.746426312466988e+00 4.554055557214065e+00 9.285471742871214e+03 + 189780 1.019474519505277e+00 -6.041312727050937e+00 -6.015638130609037e+00 3.412540830999957e+00 4.559968336900310e+00 9.265114786018547e+03 + 189800 9.504746573455150e-01 -5.957345120714892e+00 -5.978476013660759e+00 3.956798054702154e+00 4.835461197411866e+00 9.151083623126733e+03 + 189820 9.537378945249358e-01 -5.975941375318472e+00 -5.982603447454518e+00 3.817721209126174e+00 4.779466559968668e+00 9.163730995963148e+03 + 189840 9.731760948265287e-01 -6.018266372853386e+00 -5.962214162678456e+00 3.627735556380583e+00 4.949596021256522e+00 9.101426543137281e+03 + 189860 9.485717365173745e-01 -5.991308683184388e+00 -5.975709376968419e+00 3.756911604174097e+00 4.846485234451030e+00 9.142628136542293e+03 + 189880 1.011838848235262e+00 -6.092973306417206e+00 -5.971463101564272e+00 3.185363305633629e+00 4.883093705542611e+00 9.129671470754154e+03 + 189900 9.734482929178860e-01 -6.040799683842081e+00 -6.003826693726562e+00 3.467108123108626e+00 4.679412753903664e+00 9.228793877775644e+03 + 189920 9.817624073819173e-01 -6.056576151906751e+00 -6.005202146169400e+00 3.394304388473848e+00 4.689301879519412e+00 9.233026931054286e+03 + 189940 1.019153497231239e+00 -6.116077443500625e+00 -5.973668870209851e+00 3.123135309853121e+00 4.940867375344242e+00 9.136377307141802e+03 + 189960 9.557104761987338e-01 -6.023775512057821e+00 -5.976125311319016e+00 3.588793522276139e+00 4.862408348763092e+00 9.143891840456228e+03 + 189980 9.474883145511540e-01 -6.006933884497309e+00 -5.989512642019218e+00 3.675819820116519e+00 4.775855290354279e+00 9.184885444714371e+03 + 190000 9.846720417817334e-01 -6.050301470110785e+00 -5.975314702564438e+00 3.417172116766587e+00 4.847757740182487e+00 9.141446124783106e+03 + 190020 9.949752975560008e-01 -6.045482330050792e+00 -6.002900165973160e+00 3.428515352514685e+00 4.673028728217043e+00 9.225964314945408e+03 + 190040 1.024360329578800e+00 -6.063963124092105e+00 -6.005563175415130e+00 3.386300728996978e+00 4.721642271663022e+00 9.234135540685989e+03 + 190060 1.010387477049022e+00 -6.016357712935315e+00 -5.979650906474884e+00 3.635384580377635e+00 4.846160743433375e+00 9.154697417349837e+03 + 190080 1.086582435539829e+00 -6.102234366783573e+00 -5.963536491475864e+00 3.215056872422376e+00 5.011481535866082e+00 9.105437338090511e+03 + 190100 9.465343762279351e-01 -5.866388975322349e+00 -6.023972073698847e+00 4.452815098768323e+00 4.547948561984813e+00 9.290730202284509e+03 + 190120 1.083134108924415e+00 -6.042796146897892e+00 -5.940753152172684e+00 3.427886347298133e+00 5.013833014112675e+00 9.036057761448605e+03 + 190140 1.029358103573011e+00 -5.936854318172314e+00 -5.982116465519741e+00 4.023065753078098e+00 4.763163498714502e+00 9.162215268199929e+03 + 190160 1.043321281223898e+00 -5.936468324004830e+00 -6.036941946479470e+00 3.983870142843698e+00 4.406935054351488e+00 9.330775234115357e+03 + 190180 1.055075198115035e+00 -5.939839706768147e+00 -5.976245545668881e+00 4.035966911451277e+00 4.826918950697900e+00 9.144275221365961e+03 + 190200 1.077472279539197e+00 -5.966295632524577e+00 -5.996724790845075e+00 3.861662252311047e+00 4.686933316337716e+00 9.206969332019411e+03 + 190220 9.868799315492813e-01 -5.831106285171232e+00 -6.037558105658665e+00 4.549260469528422e+00 4.363782167973615e+00 9.332676147168004e+03 + 190240 1.028396982630166e+00 -5.897081241129103e+00 -5.978877759605669e+00 4.238190849143288e+00 4.768502582080527e+00 9.152305172542490e+03 + 190260 1.021145386434750e+00 -5.895132296262881e+00 -5.985494190164780e+00 4.177119797999570e+00 4.658247819756977e+00 9.172554692081316e+03 + 190280 1.028958387057407e+00 -5.920964000412150e+00 -5.974634089389317e+00 4.142391984881504e+00 4.834210028555181e+00 9.139328140016218e+03 + 190300 9.912585629808726e-01 -5.885339054669712e+00 -6.052764110627546e+00 4.309606333989024e+00 4.348225753735460e+00 9.379720271758106e+03 + 190320 1.009018272924071e+00 -5.943255568524396e+00 -6.043016719335252e+00 3.980310625070251e+00 4.407466659126117e+00 9.349572065355533e+03 + 190340 1.094961812520404e+00 -6.111999095530543e+00 -5.966729782808567e+00 3.086087114944705e+00 4.920245988947780e+00 9.115221337031380e+03 + 190360 9.762047990396142e-01 -5.977107264267184e+00 -6.024591574407957e+00 3.799974962725482e+00 4.527312705723919e+00 9.292678780573500e+03 + 190380 9.317126570815166e-01 -5.950371814041162e+00 -6.051055702455971e+00 3.925522440378491e+00 4.347379972319286e+00 9.374458796282881e+03 + 190400 9.473602237034222e-01 -6.005378911630371e+00 -6.004513050001028e+00 3.685161613196456e+00 4.690133524663798e+00 9.230900995210492e+03 + 190420 9.781968535273151e-01 -6.072132264909230e+00 -5.999201868669262e+00 3.312741384639483e+00 4.731519005791720e+00 9.214611141094354e+03 + 190440 9.441649207118489e-01 -6.033979039341370e+00 -6.045088185676901e+00 3.508190838078944e+00 4.444400400685481e+00 9.355958320381342e+03 + 190460 9.524660567663235e-01 -6.051802217036185e+00 -6.009332057204258e+00 3.444521034354431e+00 4.688391264345349e+00 9.245710054636089e+03 + 190480 9.513755706677944e-01 -6.051413775392801e+00 -5.982890661057498e+00 3.419836529228136e+00 4.813306855659119e+00 9.164595671850255e+03 + 190500 9.543090111839104e-01 -6.051594696790855e+00 -5.981736152048502e+00 3.382928177150434e+00 4.784066751635888e+00 9.161059673826383e+03 + 190520 9.413576012815014e-01 -6.023524997989377e+00 -5.988055332073344e+00 3.529441869483070e+00 4.733114180085993e+00 9.180422214755910e+03 + 190540 9.388700663992661e-01 -6.006752232854194e+00 -5.993604856996873e+00 3.657585026975184e+00 4.733079293697763e+00 9.197414247533978e+03 + 190560 9.833050060597186e-01 -6.054339848346380e+00 -6.060301565089770e+00 3.346198197531904e+00 4.311965097418669e+00 9.403098967833046e+03 + 190580 1.005692502575849e+00 -6.071929883110822e+00 -6.013830055670981e+00 3.287775571312705e+00 4.621393771391508e+00 9.259556965682279e+03 + 190600 9.703335498884368e-01 -6.005077780759230e+00 -6.029857551388368e+00 3.604538900713528e+00 4.462249623103904e+00 9.308952939545008e+03 + 190620 9.678111936559554e-01 -5.985980859942302e+00 -6.010360039102984e+00 3.757457266935334e+00 4.617468247528911e+00 9.248896858976428e+03 + 190640 9.602124997306477e-01 -5.960438694599944e+00 -6.010838534484652e+00 3.874233240077438e+00 4.584829560109431e+00 9.250366780955077e+03 + 190660 9.781515288078385e-01 -5.972834731115540e+00 -5.994344722055382e+00 3.846896027065503e+00 4.723382330428589e+00 9.199691627984683e+03 + 190680 9.812861866268077e-01 -5.961589585443058e+00 -5.981313784987448e+00 3.912125875890140e+00 4.798866469796234e+00 9.159768498268373e+03 + 190700 1.053460122723251e+00 -6.054646890940683e+00 -5.945044731559412e+00 3.425890387909851e+00 5.055242947956458e+00 9.049121833324392e+03 + 190720 1.014988527304233e+00 -5.986046761327209e+00 -5.984949236409331e+00 3.784435964818002e+00 4.790738122737895e+00 9.170884350469783e+03 + 190740 9.970053852924304e-01 -5.948119817686064e+00 -6.017404088421558e+00 3.914484970211600e+00 4.516643965942148e+00 9.270574121106136e+03 + 190760 9.931020325878860e-01 -5.933080983394271e+00 -6.086494509606532e+00 4.037819073838922e+00 4.156894865661664e+00 9.484497137201859e+03 + 190780 1.027706326649170e+00 -5.983078523129707e+00 -6.027747375513186e+00 3.828549364294305e+00 4.572053901425806e+00 9.302426035049935e+03 + 190800 1.056749982485872e+00 -6.028888356915134e+00 -5.970368228985762e+00 3.564924259613832e+00 4.900955890144818e+00 9.126313367395036e+03 + 190820 9.947612903690880e-01 -5.939666453288919e+00 -6.045807688744712e+00 3.962267739245452e+00 4.352788339955186e+00 9.358232866617907e+03 + 190840 1.021669786096216e+00 -5.983925628455154e+00 -6.041251240793441e+00 3.828271520005099e+00 4.499098982848815e+00 9.344106748497423e+03 + 190860 9.926819393668991e-01 -5.947830111411902e+00 -6.031886526354843e+00 3.986515181455256e+00 4.503850239164711e+00 9.315191702831295e+03 + 190880 1.036624859750390e+00 -6.021582322484967e+00 -5.991646715902803e+00 3.560113633709377e+00 4.732008519224311e+00 9.191422114444018e+03 + 190900 1.062582640845421e+00 -6.066091719031804e+00 -5.990735088292674e+00 3.355857588459839e+00 4.788567023564846e+00 9.188633280217324e+03 + 190920 9.476821390329740e-01 -5.901174630272386e+00 -6.060367633872728e+00 4.219271524684616e+00 4.305160662973760e+00 9.403293984470971e+03 + 190940 1.037789526814926e+00 -6.040666707978343e+00 -5.972286716762053e+00 3.547684347607391e+00 4.940332838940777e+00 9.132175579506882e+03 + 190960 1.031640682226401e+00 -6.036937874377916e+00 -5.947690412014111e+00 3.487603216980834e+00 5.000075956873965e+00 9.057158015761654e+03 + 190980 8.988350048408269e-01 -5.842285094910398e+00 -6.022902648681460e+00 4.530615358534945e+00 4.493481414305394e+00 9.287381841332586e+03 + 191000 9.884930018384180e-01 -5.974062398617810e+00 -5.972332577936207e+00 3.857368187410119e+00 4.867301085452768e+00 9.132269451345092e+03 + 191020 1.012328382640624e+00 -6.005572348411107e+00 -6.022607845120326e+00 3.594965521523881e+00 4.497145063184950e+00 9.286582821675878e+03 + 191040 1.011165443602551e+00 -6.001606999708979e+00 -6.018583587933064e+00 3.665063362416446e+00 4.567581165715213e+00 9.274187382099622e+03 + 191060 1.025157191255118e+00 -6.023259548791088e+00 -6.001371371174829e+00 3.563641427852124e+00 4.689326730909222e+00 9.221257235727857e+03 + 191080 9.627880440192340e-01 -5.932606372037060e+00 -6.019269256438226e+00 4.018552956476225e+00 4.520921263206711e+00 9.276300736768346e+03 + 191100 9.883719641433746e-01 -5.971982654659463e+00 -6.003527499114668e+00 3.879208929223864e+00 4.698073550813175e+00 9.227870981404065e+03 + 191120 1.018700952240416e+00 -6.019825322089840e+00 -6.003408918747208e+00 3.542629036997646e+00 4.636894565421247e+00 9.227514021240246e+03 + 191140 9.775869559813583e-01 -5.962628010899882e+00 -5.974447023686439e+00 3.871172069789490e+00 4.803305469382765e+00 9.138761185188832e+03 + 191160 9.575842823635106e-01 -5.934964836854888e+00 -5.987004193625969e+00 4.020834913171735e+00 4.722016873527756e+00 9.177167241133671e+03 + 191180 9.766674588819099e-01 -5.962414980807438e+00 -5.999607322562332e+00 3.908443995387198e+00 4.694879813534312e+00 9.215848819731458e+03 + 191200 1.057033604397919e+00 -6.080198113998206e+00 -6.019494869063649e+00 3.235811214901568e+00 4.584378641112585e+00 9.276988515172734e+03 + 191220 1.028428858684864e+00 -6.038980502499752e+00 -5.977618349815493e+00 3.553106332824295e+00 4.905457309299747e+00 9.148462050239459e+03 + 191240 9.798349567249403e-01 -5.968777590733155e+00 -6.023368799232172e+00 3.858380752356253e+00 4.544909585192688e+00 9.288912428764299e+03 + 191260 1.021149951491767e+00 -6.033421583891826e+00 -5.988463171325856e+00 3.528462156510131e+00 4.786620318755793e+00 9.181660514927613e+03 + 191280 9.870583297370342e-01 -5.987444658927341e+00 -5.990938192053354e+00 3.744985675751993e+00 4.724925267919925e+00 9.189226037132848e+03 + 191300 9.972713961256987e-01 -6.007248874853379e+00 -5.939457038942326e+00 3.685660208658384e+00 5.074931421212352e+00 9.032117665459686e+03 + 191320 9.809334095747532e-01 -5.984858010767615e+00 -6.017482103610936e+00 3.807420840827554e+00 4.620088251159154e+00 9.270772153691061e+03 + 191340 9.929872228339379e-01 -6.004754123457651e+00 -5.968797238695299e+00 3.712746251666842e+00 4.919216248282208e+00 9.121511597798695e+03 + 191360 1.040257266141776e+00 -6.076277729437621e+00 -5.959862238985341e+00 3.319121711456789e+00 4.987597472872700e+00 9.094241215232747e+03 + 191380 9.500954749788099e-01 -5.942113778439211e+00 -6.027044362779476e+00 4.010181095497776e+00 4.522496537250526e+00 9.300246504542101e+03 + 191400 9.616819308656267e-01 -5.960042327020192e+00 -6.031252682067715e+00 3.897441435356034e+00 4.488540556906327e+00 9.313243729114085e+03 + 191420 1.039567635193720e+00 -6.076633865642119e+00 -5.985682219856422e+00 3.237330663056402e+00 4.759589087879574e+00 9.173157615085946e+03 + 191440 9.481730758090652e-01 -5.941752986127252e+00 -5.986492313602886e+00 4.031526695721395e+00 4.774626553967752e+00 9.175591078148997e+03 + 191460 9.330019644063953e-01 -5.916539628597675e+00 -5.989181022903091e+00 4.150051392848605e+00 4.732933265527469e+00 9.183850415680912e+03 + 191480 1.095981447134261e+00 -6.150769926526729e+00 -5.948358164052827e+00 2.924176716286909e+00 5.086456379531065e+00 9.059213880597868e+03 + 191500 1.040712975603094e+00 -6.061964103733344e+00 -5.948299518493112e+00 3.392780513694147e+00 5.045460151681278e+00 9.059028330636083e+03 + 191520 9.995539954568957e-01 -5.994123383829915e+00 -5.966119419747059e+00 3.739339607790896e+00 4.900142703154090e+00 9.113316960545917e+03 + 191540 9.576930749736212e-01 -5.922074264370151e+00 -5.981816397552222e+00 4.142519239335513e+00 4.799470665538832e+00 9.161301747456726e+03 + 191560 1.034456826556005e+00 -6.022097755787619e+00 -5.978529868747279e+00 3.563113531962679e+00 4.813287081457037e+00 9.151254477829640e+03 + 191580 1.042623788337842e+00 -6.019831724713553e+00 -5.967660591700179e+00 3.625785991692482e+00 4.925360710912021e+00 9.118019777521284e+03 + 191600 9.834600528847722e-01 -5.915700480421364e+00 -6.008601331784430e+00 4.132907970222582e+00 4.599456905335572e+00 9.243424657351015e+03 + 191620 1.043156628161256e+00 -5.986212045043613e+00 -5.992473425873283e+00 3.777509336323068e+00 4.741555518653555e+00 9.193919339302058e+03 + 191640 1.024603150584142e+00 -5.940115571304681e+00 -6.028990609278971e+00 4.001937268740464e+00 4.491603047324418e+00 9.306255409054536e+03 + 191660 1.045132770134011e+00 -5.954862955719603e+00 -6.052565601860306e+00 3.884039702993804e+00 4.323015989418264e+00 9.379134458001525e+03 + 191680 1.062706032646265e+00 -5.970264433607397e+00 -6.024114965791954e+00 3.823717071752321e+00 4.514498982605671e+00 9.291244870496274e+03 + 191700 1.091790389513301e+00 -6.007627948172823e+00 -6.033340401080626e+00 3.611937909924132e+00 4.464293026338298e+00 9.319691513987751e+03 + 191720 1.013126508194464e+00 -5.892267560777530e+00 -6.045973545193585e+00 4.237243999894996e+00 4.354640451453792e+00 9.358701837983730e+03 + 191740 1.046963494442749e+00 -5.952281442488442e+00 -6.005332484595868e+00 3.962311454456111e+00 4.657684161053028e+00 9.233421417500926e+03 + 191760 1.034115674025881e+00 -5.950247741282316e+00 -5.978880797097928e+00 3.963265613757211e+00 4.798850176312895e+00 9.152293194718994e+03 + 191780 1.034431433710293e+00 -5.974363468743800e+00 -5.949589660440886e+00 3.848632723529853e+00 4.990887764539629e+00 9.062934268868681e+03 + 191800 9.701842858589952e-01 -5.910233826516230e+00 -5.998253545182092e+00 4.117304273706056e+00 4.611881428119231e+00 9.211681276753099e+03 + 191820 9.586208864922741e-01 -5.928421324337817e+00 -5.984084562679448e+00 4.044034704473816e+00 4.724407776057875e+00 9.168245992319951e+03 + 191840 1.012041844234107e+00 -6.043960612574699e+00 -5.986991213228803e+00 3.407738448256561e+00 4.734865555286747e+00 9.177165062268308e+03 + 191860 9.825368466711656e-01 -6.036011463230507e+00 -6.002526058441384e+00 3.494845438264997e+00 4.687123814413786e+00 9.224823691606021e+03 + 191880 9.310965398909162e-01 -5.988219814448264e+00 -6.002042522130832e+00 3.695546123049714e+00 4.616173996479309e+00 9.223321041241479e+03 + 191900 1.030243972169419e+00 -6.157981324990889e+00 -5.972416696428040e+00 2.878298947889262e+00 4.943839761130606e+00 9.132571275260963e+03 + 191920 9.309270038733016e-01 -6.026307223722691e+00 -6.026043013416359e+00 3.543382206911540e+00 4.544899343376911e+00 9.297189243481806e+03 + 191940 9.152764003706629e-01 -6.013626720585474e+00 -5.992583553961000e+00 3.655282884344927e+00 4.776116003522171e+00 9.194311904720362e+03 + 191960 9.376932394741377e-01 -6.050332906183336e+00 -5.985472354385708e+00 3.460941887295690e+00 4.833381212855618e+00 9.172512593726580e+03 + 191980 9.508519382382915e-01 -6.066571595799283e+00 -6.017373253007710e+00 3.315914809031724e+00 4.598419306759880e+00 9.270467706138101e+03 + 192000 9.389485372737877e-01 -6.039675401839528e+00 -5.982298271439711e+00 3.522188342499056e+00 4.851656704337038e+00 9.162801044730391e+03 + 192020 9.818093914323293e-01 -6.089924755798545e+00 -5.970145457175034e+00 3.223106780935544e+00 4.910898049418300e+00 9.125644013963845e+03 + 192040 9.168542279300756e-01 -5.974647001016805e+00 -6.042617710774910e+00 3.826553515958745e+00 4.436255182094370e+00 9.348320250182165e+03 + 192060 9.717250709553036e-01 -6.033424363986803e+00 -5.986143161108158e+00 3.548407554351336e+00 4.819903538023019e+00 9.174588947741715e+03 + 192080 9.759669995982853e-01 -6.015157152491703e+00 -5.976083044010982e+00 3.634532418563625e+00 4.858901996158673e+00 9.143792090537003e+03 + 192100 1.003616313252345e+00 -6.031648483057495e+00 -5.982921259662253e+00 3.513218058978461e+00 4.793017316227393e+00 9.164703361860005e+03 + 192120 1.000847201995444e+00 -6.003322009582517e+00 -5.976047078110566e+00 3.677374793614643e+00 4.833991670908588e+00 9.143653088975183e+03 + 192140 1.000959771998380e+00 -5.983162100252622e+00 -5.977380801301535e+00 3.757195827642106e+00 4.790392940872367e+00 9.147695816873798e+03 + 192160 9.859669558136969e-01 -5.944433422948818e+00 -5.987211989478224e+00 4.036112762645367e+00 4.790471613671743e+00 9.177776983512254e+03 + 192180 9.914135656073626e-01 -5.940785642831456e+00 -5.958299008909179e+00 3.969262596048244e+00 4.868698137845312e+00 9.089458170399979e+03 + 192200 9.475413843000323e-01 -5.867621722984843e+00 -5.972234178001086e+00 4.425133967750314e+00 4.824433062321956e+00 9.131979735640494e+03 + 192220 1.083811598027993e+00 -6.064172428853622e+00 -5.949650956160473e+00 3.374101987258835e+00 5.031702005603524e+00 9.063116075671436e+03 + 192240 1.022055236101889e+00 -5.970775817545753e+00 -5.989628457426127e+00 3.894701777029565e+00 4.786447001399866e+00 9.185214975623114e+03 + 192260 1.045895902066314e+00 -6.006204206501221e+00 -6.016743033935006e+00 3.707493143267219e+00 4.646977565264153e+00 9.268485398693640e+03 + 192280 1.054836371214232e+00 -6.022556134608114e+00 -6.023178296913073e+00 3.579513620801186e+00 4.575941068566799e+00 9.288332071833243e+03 + 192300 9.927763122045824e-01 -5.937845634257643e+00 -5.992658345733844e+00 4.068969009554799e+00 4.754225938018766e+00 9.194534715822792e+03 + 192320 9.781585867857857e-01 -5.924909924266403e+00 -6.023820941389088e+00 4.070528334953129e+00 4.502565968204244e+00 9.290291342562205e+03 + 192340 1.083966655454519e+00 -6.091014697532911e+00 -5.928381193080078e+00 3.242989914612903e+00 5.176856664634544e+00 8.998502727036492e+03 + 192360 1.008689043402150e+00 -5.988547288297667e+00 -6.000845341402888e+00 3.726064855443985e+00 4.655447531396238e+00 9.219641010872132e+03 + 192380 1.069782772453677e+00 -6.090509204607018e+00 -5.992015630449935e+00 3.224500131762195e+00 4.790065476403507e+00 9.192572428216094e+03 + 192400 1.025133814676901e+00 -6.036941687299496e+00 -6.018394357721348e+00 3.490443276355584e+00 4.596944912983288e+00 9.273624103840179e+03 + 192420 9.769782857467225e-01 -5.983293950719691e+00 -6.062173522155101e+00 3.721071797798472e+00 4.268133092042120e+00 9.408903890714517e+03 + 192440 9.963226565744849e-01 -6.032682274703534e+00 -6.011923381589707e+00 3.497264127678369e+00 4.616464904366294e+00 9.253692947416048e+03 + 192460 1.024663660479524e+00 -6.096636259719998e+00 -5.977075953846779e+00 3.183663138326545e+00 4.870196916548110e+00 9.146821954365902e+03 + 192480 9.366637130777166e-01 -5.985330454634335e+00 -6.006639520520225e+00 3.754824984274383e+00 4.632465030390314e+00 9.237427022045109e+03 + 192500 9.768123893811393e-01 -6.063140244343406e+00 -5.999520265392407e+00 3.373052637276699e+00 4.738368401573258e+00 9.215571339665636e+03 + 192520 9.635944512611898e-01 -6.060673283521291e+00 -5.959575578209304e+00 3.341915663946347e+00 4.922434332667118e+00 9.093377192102544e+03 + 192540 9.267701358470029e-01 -6.020120811292458e+00 -5.957056891005687e+00 3.599177169134989e+00 4.961299958531761e+00 9.085680737439441e+03 + 192560 9.653463178301863e-01 -6.087038898686658e+00 -5.945860918956416e+00 3.236584398267775e+00 5.047250205100585e+00 9.051594059885720e+03 + 192580 9.481956209326085e-01 -6.067767636468620e+00 -5.932750228587468e+00 3.356430312933251e+00 5.131721162863165e+00 9.011749544438582e+03 + 192600 9.351148322164566e-01 -6.047587010192227e+00 -5.970851801110917e+00 3.482107669564038e+00 4.922733114844146e+00 9.127740065588563e+03 + 192620 9.203067811598058e-01 -6.015735757067413e+00 -5.993737392552530e+00 3.556989025552121e+00 4.683307038832490e+00 9.197821084898358e+03 + 192640 1.001820739322161e+00 -6.113284355239132e+00 -5.957424486753231e+00 3.120244274421906e+00 5.015215758504652e+00 9.086802383612598e+03 + 192660 1.000605974820876e+00 -6.072915516045265e+00 -5.996736725689759e+00 3.307168508860412e+00 4.744598911711437e+00 9.207030426201934e+03 + 192680 9.960507626230358e-01 -6.020167185454696e+00 -6.004881325119646e+00 3.570210368165276e+00 4.657984143688376e+00 9.232025033193786e+03 + 192700 9.869605595545982e-01 -5.960173318160621e+00 -5.994655991459757e+00 3.919008034332722e+00 4.721003188072638e+00 9.200633458124734e+03 + 192720 1.026235494372035e+00 -5.978041257801868e+00 -5.990275051387788e+00 3.811611421220853e+00 4.741363085277063e+00 9.187207642678673e+03 + 192740 1.016010243727373e+00 -5.931461126226676e+00 -5.999079298458342e+00 4.083872434464885e+00 4.695598425632324e+00 9.214205950806516e+03 + 192760 1.073681819574464e+00 -5.994283359989019e+00 -5.983978309892470e+00 3.720262085991307e+00 4.779435278347041e+00 9.167917546556781e+03 + 192780 1.088324604348222e+00 -6.001179152352902e+00 -5.976675162462174e+00 3.693653282822303e+00 4.834358984755049e+00 9.145575695338510e+03 + 192800 1.027296241753211e+00 -5.901602595771991e+00 -6.014184902526348e+00 4.268112477807249e+00 4.621647450368069e+00 9.260661363020394e+03 + 192820 1.175428552762458e+00 -6.120404337433065e+00 -5.948137031495119e+00 3.090142158362259e+00 5.079327687337390e+00 9.058543975424120e+03 + 192840 1.067879463556149e+00 -5.968715801549084e+00 -5.999312264795931e+00 3.847256574903378e+00 4.671566948152602e+00 9.214916079564540e+03 + 192860 1.073516817506845e+00 -5.990283447684786e+00 -5.973870669297250e+00 3.812570554869245e+00 4.906815268239723e+00 9.136985435138686e+03 + 192880 1.055318189549783e+00 -5.979838009271034e+00 -6.009257622091276e+00 3.805123251199382e+00 4.636191281715178e+00 9.245478286282796e+03 + 192900 9.512430962427483e-01 -5.847642793165337e+00 -6.014294869989222e+00 4.514795845477795e+00 4.557853831029505e+00 9.260970082118094e+03 + 192920 1.019882509866317e+00 -5.974545850987445e+00 -5.961543940253501e+00 3.820398034215432e+00 4.895057017688922e+00 9.099367201377108e+03 + 192940 1.012146726767145e+00 -5.987353586887378e+00 -6.039187202871180e+00 3.752787394040937e+00 4.455150749835795e+00 9.337735944461929e+03 + 192960 1.040733434481756e+00 -6.059493925271433e+00 -6.014464647638792e+00 3.408282702951414e+00 4.666847783376232e+00 9.261520285346744e+03 + 192980 1.009890209951157e+00 -6.044694795525725e+00 -6.007331064984587e+00 3.490853956146126e+00 4.705402278931955e+00 9.239540425208990e+03 + 193000 9.847664257027373e-01 -6.034630982015854e+00 -5.992438255912541e+00 3.510072847620491e+00 4.752350010208980e+00 9.193846810009927e+03 + 193020 9.670736180680626e-01 -6.028939807301863e+00 -5.981712836198326e+00 3.508336870740865e+00 4.779521447167534e+00 9.160994696274862e+03 + 193040 9.951203290611198e-01 -6.084787458629108e+00 -5.969026347300433e+00 3.215846715025275e+00 4.880564930248608e+00 9.122222713877833e+03 + 193060 9.710795297403851e-01 -6.059616009493953e+00 -5.989675452478533e+00 3.369138780750386e+00 4.770748282399149e+00 9.185393967192902e+03 + 193080 9.633297859658231e-01 -6.051108025805366e+00 -5.976418945802575e+00 3.485802961740643e+00 4.914679217214448e+00 9.144804729547250e+03 + 193100 9.069326834820626e-01 -5.965288295374611e+00 -6.020257034377908e+00 3.843414902208264e+00 4.527775896466461e+00 9.279346780882461e+03 + 193120 9.655687604003120e-01 -6.046030872309935e+00 -6.000016221514678e+00 3.476172875996896e+00 4.740396121607454e+00 9.217105376799296e+03 + 193140 1.041468295935831e+00 -6.151503068996021e+00 -5.958084670645651e+00 2.906865429368561e+00 5.017503804096801e+00 9.088836391474573e+03 + 193160 9.739417851935880e-01 -6.044145856610211e+00 -6.010616775426012e+00 3.472285477358446e+00 4.664814650126662e+00 9.249647469869769e+03 + 193180 9.805311240099015e-01 -6.045700473453684e+00 -5.970368600745099e+00 3.441174274705777e+00 4.873741545368101e+00 9.126300118737012e+03 + 193200 1.034190005916360e+00 -6.116005034850783e+00 -5.965822361181056e+00 3.064931445438292e+00 4.927303598343503e+00 9.112442330112377e+03 + 193220 9.229293713899127e-01 -5.941397223734327e+00 -6.019531842499442e+00 4.020398975232439e+00 4.571737902989977e+00 9.277082077490872e+03 + 193240 9.801672979593096e-01 -6.017431603758345e+00 -5.988444510377514e+00 3.567995736294159e+00 4.734444112225092e+00 9.181608438288944e+03 + 193260 9.696902763962316e-01 -5.991857035024513e+00 -5.971882261282204e+00 3.752192309030269e+00 4.866890550944854e+00 9.130917047932264e+03 + 193280 9.739389225255172e-01 -5.987186703938875e+00 -5.950103854706033e+00 3.735356851961163e+00 4.948292310808516e+00 9.064523098738657e+03 + 193300 9.951274654334480e-01 -6.005633275694256e+00 -5.984204543062594e+00 3.663195573498303e+00 4.786242672354966e+00 9.168629386534729e+03 + 193320 1.062969706179940e+00 -6.094077342739375e+00 -5.990054219013460e+00 3.193513928588174e+00 4.790830802548752e+00 9.186553050651204e+03 + 193340 1.018078076739977e+00 -6.017775999465841e+00 -6.006775243000654e+00 3.679234084786329e+00 4.742402130770994e+00 9.237851233191372e+03 + 193360 9.702942807283549e-01 -5.940973707779218e+00 -6.015155364414579e+00 4.070331429646984e+00 4.644368877672477e+00 9.263613389201146e+03 + 193380 9.688024220050900e-01 -5.930786377800341e+00 -5.998015458150506e+00 4.090335732175583e+00 4.704295949138374e+00 9.210940874136080e+03 + 193400 1.018987041986540e+00 -5.996561679828703e+00 -6.021539524073347e+00 3.704809062054102e+00 4.561382415092451e+00 9.283279761461372e+03 + 193420 1.024421939211916e+00 -5.997465736031920e+00 -6.011737870895336e+00 3.744663934548690e+00 4.662711127557220e+00 9.253108431798688e+03 + 193440 9.916123967194218e-01 -5.942288104018143e+00 -6.017306430906819e+00 4.085523825969414e+00 4.654756983926067e+00 9.270229878748065e+03 + 193460 1.047768937905980e+00 -6.019036991245959e+00 -6.024667664254764e+00 3.527014638467303e+00 4.494682442706914e+00 9.292943054506004e+03 + 193480 1.102224493869864e+00 -6.097174432307977e+00 -5.986195345461552e+00 3.149112133947550e+00 4.786371224577906e+00 9.174739749548935e+03 + 193500 9.441099925596823e-01 -5.864809562100755e+00 -6.031450130983070e+00 4.471778810945887e+00 4.514902876878945e+00 9.313843168830312e+03 + 193520 1.001004510901299e+00 -5.952637442167845e+00 -6.057225017188923e+00 3.957067798836481e+00 4.356509758190525e+00 9.393531701507793e+03 + 193540 9.967096223191209e-01 -5.954175004277252e+00 -6.033239149265947e+00 4.003455549764944e+00 4.549456994102959e+00 9.319368780396451e+03 + 193560 9.895606605384756e-01 -5.960361067716853e+00 -6.051108342799441e+00 3.956530332723719e+00 4.435445436104068e+00 9.374613425447937e+03 + 193580 1.008174423190615e+00 -6.013799765279986e+00 -6.007157590035466e+00 3.651042566063875e+00 4.689182964191202e+00 9.239051160248315e+03 + 193600 1.005804469754030e+00 -6.040475994396820e+00 -6.021688078533133e+00 3.497504687317217e+00 4.605387807627089e+00 9.283763586507899e+03 + 193620 9.338292537306065e-01 -5.968409865282092e+00 -6.029111078281796e+00 3.857366100777580e+00 4.508810342250929e+00 9.306639056840113e+03 + 193640 9.460520696367564e-01 -6.017762566395382e+00 -6.042829380416045e+00 3.563383617496416e+00 4.419446092312833e+00 9.349006412634988e+03 + 193660 9.247188775689976e-01 -6.015055394679367e+00 -6.006280148834854e+00 3.647490733694943e+00 4.697879553299037e+00 9.236343741680950e+03 + 193680 9.691338806822474e-01 -6.102782590250664e+00 -5.980455058589200e+00 3.142706926001011e+00 4.845130542925480e+00 9.157133834223834e+03 + 193700 9.334502494999822e-01 -6.063588072726394e+00 -5.994815267802950e+00 3.379269253781014e+00 4.774173342208591e+00 9.201136476267327e+03 + 193720 9.760225308593538e-01 -6.132924403798757e+00 -6.021309482332022e+00 2.950795557711021e+00 4.591705709126293e+00 9.282586296446256e+03 + 193740 9.550894328844052e-01 -6.104256013002096e+00 -6.003929926160472e+00 3.150036038549762e+00 4.726123954606124e+00 9.229124001749171e+03 + 193760 9.175103727070968e-01 -6.044943842263792e+00 -5.986090141853520e+00 3.491375886829171e+00 4.829322942165660e+00 9.174383923560408e+03 + 193780 9.064063177043670e-01 -6.017548024660794e+00 -5.965765406837912e+00 3.667775721189527e+00 4.965119526062727e+00 9.112248874824903e+03 + 193800 9.385623409533291e-01 -6.043065722801518e+00 -5.989397870953392e+00 3.485924054384034e+00 4.794093164769201e+00 9.184524065686453e+03 + 193820 9.631095101226297e-01 -6.047394184726395e+00 -5.982281008687661e+00 3.451720790790708e+00 4.825610723836546e+00 9.162728999343655e+03 + 193840 9.845035350353661e-01 -6.041204028813237e+00 -5.996077153668843e+00 3.465961897553339e+00 4.725087397993807e+00 9.205024314303053e+03 + 193860 1.011973270443129e+00 -6.042349423592677e+00 -6.005004096894947e+00 3.483845792839790e+00 4.698288437908790e+00 9.232428539595761e+03 + 193880 1.010923213516133e+00 -6.005597274863867e+00 -6.047685506803717e+00 3.650195474976687e+00 4.408518334045223e+00 9.364002009699345e+03 + 193900 9.693910680676351e-01 -5.918013099952008e+00 -6.000940631703157e+00 4.126259466920890e+00 4.650076746611725e+00 9.219945380064279e+03 + 193920 1.029913520202660e+00 -5.988634188513677e+00 -6.022580621019340e+00 3.737221973986219e+00 4.542296305345250e+00 9.286500713448257e+03 + 193940 1.035440909488751e+00 -5.983856720197705e+00 -6.007686566537043e+00 3.822077312852814e+00 4.685242647515539e+00 9.240646363420208e+03 + 193960 9.663082919322866e-01 -5.874232118021832e+00 -6.027095098673698e+00 4.366488650171195e+00 4.488725759798374e+00 9.300384571628669e+03 + 193980 1.010579274482758e+00 -5.936099622908695e+00 -6.002388135282966e+00 4.051237348387207e+00 4.670598452220007e+00 9.224372113593570e+03 + 194000 1.059892951378851e+00 -6.008146300558740e+00 -6.036021552278585e+00 3.644849669315108e+00 4.484785660258495e+00 9.327961486405839e+03 + 194020 1.082480710805421e+00 -6.047385779849199e+00 -6.014657164646417e+00 3.400333451548733e+00 4.588266224779942e+00 9.262110906997515e+03 + 194040 9.465953848906453e-01 -5.855224421594428e+00 -5.995284191478500e+00 4.538913520068137e+00 4.734668647214455e+00 9.202567186287308e+03 + 194060 1.066600137788129e+00 -6.042057693467514e+00 -5.940306605881932e+00 3.510648848787838e+00 5.094919339634169e+00 9.034679592430986e+03 + 194080 1.029392208077709e+00 -5.994699947750794e+00 -5.999072099115064e+00 3.720422322493965e+00 4.695316752772092e+00 9.214181199078401e+03 + 194100 1.066974052679534e+00 -6.061460120928082e+00 -5.987503320901893e+00 3.381733751397851e+00 4.806405141926043e+00 9.178703118604319e+03 + 194120 9.511859224585989e-01 -5.902806710083565e+00 -6.012384142438769e+00 4.261928114096671e+00 4.632717540460238e+00 9.255080432256773e+03 + 194140 1.067313346741453e+00 -6.089237135881248e+00 -5.973578303728884e+00 3.251428238742888e+00 4.915559151108200e+00 9.136110405083447e+03 + 194160 9.916534489520434e-01 -5.993312022777951e+00 -5.974984868581823e+00 3.773633593171438e+00 4.878870948683547e+00 9.140427077275726e+03 + 194180 9.452767302319490e-01 -5.942911024110805e+00 -6.052904545833299e+00 4.001207033056957e+00 4.369607209883915e+00 9.380150356301841e+03 + 194200 9.594575731048806e-01 -5.985245195156315e+00 -5.965446926887393e+00 3.827866652610850e+00 4.941551372783116e+00 9.111271795072211e+03 + 194220 9.593670788915641e-01 -6.005962029863641e+00 -5.974666702643014e+00 3.698771222077761e+00 4.878473833914834e+00 9.139422306056786e+03 + 194240 1.020191951319725e+00 -6.120120828163301e+00 -5.966511311361073e+00 3.055279172062803e+00 4.937328788537098e+00 9.114536173416174e+03 + 194260 9.293203137526880e-01 -6.011583876009109e+00 -5.994934615634531e+00 3.665891554866330e+00 4.761494184401871e+00 9.201496154107332e+03 + 194280 9.408498334863892e-01 -6.060434981494996e+00 -5.979410728660303e+00 3.408163232712918e+00 4.873417030952329e+00 9.153942901132928e+03 + 194300 1.030724566801042e+00 -6.230234531569777e+00 -5.939002529876364e+00 2.494997560425857e+00 5.167296782156047e+00 9.030762044014229e+03 + 194320 8.879221992919479e-01 -6.060515483825966e+00 -5.965679183424589e+00 3.458957460326440e+00 5.003522173101205e+00 9.111990611538225e+03 + 194340 8.982500752819944e-01 -6.107620268169081e+00 -5.941503492527950e+00 3.162345815748980e+00 5.116214047968308e+00 9.038355704551099e+03 + 194360 9.163018766293644e-01 -6.156205860470535e+00 -5.986648214702218e+00 2.850795719711229e+00 4.824421960673786e+00 9.176102549062796e+03 + 194380 9.268868833787858e-01 -6.183547977541322e+00 -5.946615531984415e+00 2.698304755967547e+00 5.058807523532757e+00 9.053913133158501e+03 + 194400 8.729208637002845e-01 -6.103384326425672e+00 -5.993225883450548e+00 3.151631873725397e+00 4.784178700252518e+00 9.196285115528615e+03 + 194420 8.807116564566821e-01 -6.103539376806909e+00 -5.973400579471401e+00 3.155695913680231e+00 4.902973026894518e+00 9.135593449869686e+03 + 194440 9.044048316665005e-01 -6.113872148077965e+00 -6.004590331243009e+00 3.072868768165352e+00 4.700381871738164e+00 9.231153851280073e+03 + 194460 9.066388221993771e-01 -6.078592071264975e+00 -6.005382425984306e+00 3.293171646915556e+00 4.713552759273151e+00 9.233585851963257e+03 + 194480 9.043279738532719e-01 -6.027578090662852e+00 -6.003865781485638e+00 3.571842957739974e+00 4.708002706503527e+00 9.228905842170883e+03 + 194500 9.782350369235168e-01 -6.088856131032823e+00 -5.973823433851000e+00 3.231991982771473e+00 4.892527531241857e+00 9.136866396390149e+03 + 194520 9.285596483987033e-01 -5.977291629764057e+00 -6.016578213794135e+00 3.798578249012166e+00 4.572988603932229e+00 9.268020273490109e+03 + 194540 9.852790861076621e-01 -6.036268211214412e+00 -6.011905877696110e+00 3.508898849744166e+00 4.648791138865183e+00 9.253642026274638e+03 + 194560 9.840058634816742e-01 -6.017803076723942e+00 -6.038537597003969e+00 3.556706298563768e+00 4.437645474459210e+00 9.335736231399074e+03 + 194580 1.033749536534455e+00 -6.079355350086628e+00 -6.009894167230584e+00 3.306916110476116e+00 4.705772971518826e+00 9.247457615765919e+03 + 194600 1.005240169449084e+00 -6.027680240681997e+00 -6.005433497271760e+00 3.536913299300653e+00 4.664657542634650e+00 9.233733972761152e+03 + 194620 1.035152405843537e+00 -6.061591457153781e+00 -5.991958025523378e+00 3.370282612105989e+00 4.770128552266486e+00 9.192373095736863e+03 + 194640 1.003667075214549e+00 -6.005443693729010e+00 -6.020128902108904e+00 3.652432466038257e+00 4.568107726992255e+00 9.278937907469022e+03 + 194660 9.398401490689932e-01 -5.903695781970285e+00 -6.021073040924228e+00 4.173180501472359e+00 4.499182116486699e+00 9.281857881983062e+03 + 194680 1.048405968331072e+00 -6.055276524056493e+00 -5.987089284410419e+00 3.381892104922618e+00 4.773433786911612e+00 9.177468668661939e+03 + 194700 1.041723682928530e+00 -6.035969627278400e+00 -5.986876259178812e+00 3.506348779425015e+00 4.788250496227013e+00 9.176814741592525e+03 + 194720 1.052905863466826e+00 -6.045473397828164e+00 -5.991278975726828e+00 3.419753347712193e+00 4.730946105977781e+00 9.190304626784149e+03 + 194740 1.037402052454290e+00 -6.017578345193533e+00 -5.997269478023051e+00 3.575879471739833e+00 4.692496129819779e+00 9.208658792140137e+03 + 194760 9.686789716528641e-01 -5.912895653225706e+00 -6.013520043399431e+00 4.125403859640525e+00 4.547603039688942e+00 9.258585217048649e+03 + 194780 9.727781292771562e-01 -5.914575734373909e+00 -5.985926277154307e+00 4.128839720571797e+00 4.719133862465945e+00 9.173876887526994e+03 + 194800 1.029683696005441e+00 -5.992637791770705e+00 -5.993103054223884e+00 3.775575080226703e+00 4.772903471221418e+00 9.195871794295146e+03 + 194820 1.015825897320712e+00 -5.967138043947833e+00 -6.020851538970549e+00 3.871396613894825e+00 4.562965413337904e+00 9.281172986958933e+03 + 194840 1.068765958031652e+00 -6.043444621146242e+00 -6.001747146178079e+00 3.484617430012412e+00 4.724050783942996e+00 9.222423536987635e+03 + 194860 1.006243143331842e+00 -5.954321011997324e+00 -6.025644525726769e+00 3.892839619279527e+00 4.483288966166973e+00 9.295936775458698e+03 + 194880 9.965546424677431e-01 -5.948456985442180e+00 -5.942917974595797e+00 3.916093003118806e+00 4.947898860557897e+00 9.042614977332827e+03 + 194900 1.039271436786827e+00 -6.019181392409170e+00 -5.944393824617972e+00 3.605568904328476e+00 5.035010691924247e+00 9.047106687109244e+03 + 194920 9.776110221237814e-01 -5.936691553426297e+00 -6.003163224742421e+00 3.979377415461346e+00 4.597686792306268e+00 9.226747981483268e+03 + 194940 9.388572813598552e-01 -5.893009644068782e+00 -5.992348529413742e+00 4.233190103697034e+00 4.662770851403446e+00 9.193549881575127e+03 + 194960 9.881943898300279e-01 -5.980554653697074e+00 -5.973998558868908e+00 3.782076542106890e+00 4.819722653162617e+00 9.137373025246476e+03 + 194980 1.011259948616075e+00 -6.030366414084140e+00 -5.974105217365748e+00 3.522688321425508e+00 4.845748819374570e+00 9.137715227699529e+03 + 195000 1.018714717687006e+00 -6.059977682665144e+00 -5.932580098851861e+00 3.417484548851176e+00 5.149021189819429e+00 9.011208785761766e+03 + 195020 9.512794813648384e-01 -5.978742006522158e+00 -5.961801309624342e+00 3.821089485383350e+00 4.918365588534986e+00 9.100118219538768e+03 + 195040 9.851222100688394e-01 -6.045341819586577e+00 -5.989886669191358e+00 3.438305110037144e+00 4.756737165263283e+00 9.186030501978252e+03 + 195060 9.932674088245751e-01 -6.074461497592939e+00 -5.994663630571507e+00 3.295266411859224e+00 4.753478112976294e+00 9.200671894523484e+03 + 195080 9.660641534990018e-01 -6.051020694101098e+00 -6.022363025091584e+00 3.402285659465789e+00 4.566842429678363e+00 9.285841483414810e+03 + 195100 9.158062118117237e-01 -5.990548797993362e+00 -6.004428025935203e+00 3.731602341046055e+00 4.651905666400422e+00 9.230675070357305e+03 + 195120 1.009719325337959e+00 -6.141730259594245e+00 -5.981203980068356e+00 2.953615354857956e+00 4.875382093257086e+00 9.159448458220540e+03 + 195140 1.006414339536299e+00 -6.147085406726273e+00 -5.952682770899914e+00 2.956974799076497e+00 5.073264817702116e+00 9.072357823386805e+03 + 195160 9.047596820629388e-01 -6.001893078909852e+00 -5.965888747056753e+00 3.681647414311814e+00 4.888389859464655e+00 9.112639672906691e+03 + 195180 8.879737058233469e-01 -5.975077362619087e+00 -6.007373240560547e+00 3.779503989681654e+00 4.594056060770831e+00 9.239665968144833e+03 + 195200 8.925979060735731e-01 -5.972303330574706e+00 -5.968663749732993e+00 3.867102004095574e+00 4.888001040511997e+00 9.121090788257578e+03 + 195220 9.552891373444073e-01 -6.043747504382768e+00 -5.988582313329820e+00 3.519471933109668e+00 4.836238996921426e+00 9.182026026858424e+03 + 195240 9.816457333766435e-01 -6.049077187373987e+00 -6.026634412554426e+00 3.424122099799739e+00 4.552991985821837e+00 9.299007430075013e+03 + 195260 1.006671621922202e+00 -6.045517089183083e+00 -6.015155290766355e+00 3.415649411902916e+00 4.589991556884892e+00 9.263635257913202e+03 + 195280 9.593444198299099e-01 -5.936042306773736e+00 -5.997859998262179e+00 4.059947710698895e+00 4.704980959915415e+00 9.210458162515473e+03 + 195300 1.021225493862118e+00 -5.987658662222856e+00 -5.982700930959740e+00 3.751123305936924e+00 4.779591366056170e+00 9.164020664192820e+03 + 195320 1.025503479272375e+00 -5.959017571020345e+00 -6.025009465692881e+00 3.863534488974814e+00 4.484598817552417e+00 9.293987621940221e+03 + 195340 1.066310121497640e+00 -5.994805685652834e+00 -6.031975319016746e+00 3.706048082081089e+00 4.492614295323332e+00 9.315464501331662e+03 + 195360 1.118920486392026e+00 -6.060098157997365e+00 -5.984737005212866e+00 3.376504482142605e+00 4.809239883531906e+00 9.170260193675802e+03 + 195380 1.022338272832912e+00 -5.911519994195669e+00 -6.034564425659916e+00 4.164334176910518e+00 4.457794010378580e+00 9.323458762469068e+03 + 195400 1.036458528702731e+00 -5.933115401198777e+00 -6.064120361114735e+00 4.012951207089098e+00 4.260700454299637e+00 9.414936180281651e+03 + 195420 1.048368839655583e+00 -5.957290737377544e+00 -6.071604317727990e+00 3.893565408751154e+00 4.237159140409508e+00 9.438186131882103e+03 + 195440 1.034194018145831e+00 -5.951018688672262e+00 -6.000163515377098e+00 3.926933516364589e+00 4.644736316288069e+00 9.217525763071664e+03 + 195460 1.000900478135794e+00 -5.917656042991911e+00 -5.970904085995430e+00 4.109511172947834e+00 4.803752669913600e+00 9.127937204156198e+03 + 195480 1.049007912653091e+00 -6.003051618631785e+00 -6.009753305675066e+00 3.641618765162330e+00 4.603136641077091e+00 9.247038734643462e+03 + 195500 9.781700088673190e-01 -5.916990357450334e+00 -6.060695902141767e+00 4.127752703990240e+00 4.302573228010865e+00 9.404321939147021e+03 + 195520 9.824617563285656e-01 -5.946445213257737e+00 -5.991294808957096e+00 4.010365152046462e+00 4.752831833088238e+00 9.190332577082683e+03 + 195540 9.780075826248805e-01 -5.961882331849758e+00 -5.983334489084895e+00 3.946371173065097e+00 4.823189566510333e+00 9.165942372734960e+03 + 195560 9.939654845631486e-01 -6.003692912290270e+00 -5.985168047720951e+00 3.690537587235346e+00 4.796910226305899e+00 9.171563218291187e+03 + 195580 1.062696435458494e+00 -6.120864198384767e+00 -5.987260749125742e+00 3.029457001069603e+00 4.796628681781884e+00 9.177995117132530e+03 + 195600 9.861607181793353e-01 -6.023738230710810e+00 -6.016106058038739e+00 3.554101671167539e+00 4.597926787725473e+00 9.266563996103199e+03 + 195620 1.003420159773009e+00 -6.064849375077141e+00 -5.974942868821337e+00 3.387040443745005e+00 4.903297515652705e+00 9.140271111922981e+03 + 195640 1.006936461832678e+00 -6.080822655141368e+00 -5.966757271939023e+00 3.285792775073184e+00 4.940773856982055e+00 9.115258390914672e+03 + 195660 9.055283186476669e-01 -5.935985132588241e+00 -6.003492176928086e+00 4.061120985599986e+00 4.673485090319246e+00 9.227766455227276e+03 + 195680 9.418391524037608e-01 -5.991624125180082e+00 -6.034495105450395e+00 3.730656448215139e+00 4.484484645240249e+00 9.323265979452004e+03 + 195700 1.009114335302445e+00 -6.091854968101154e+00 -5.999612277846599e+00 3.193186401915920e+00 4.722858203867760e+00 9.215879207332064e+03 + 195720 9.550614776911082e-01 -6.008376838403665e+00 -5.989771393524393e+00 3.733492282412256e+00 4.840327626092323e+00 9.185643854525842e+03 + 195740 9.499736512690375e-01 -5.992243537432164e+00 -6.022028763733781e+00 3.771175998260776e+00 4.600144619588016e+00 9.284793587155988e+03 + 195760 1.035379646450857e+00 -6.102297002642259e+00 -6.012232586129475e+00 3.160561050204074e+00 4.677724867243893e+00 9.254663756216836e+03 + 195780 1.054541696726983e+00 -6.097142930152711e+00 -6.033021562857563e+00 3.126767456276865e+00 4.494962270035124e+00 9.318710857629167e+03 + 195800 1.023161939910014e+00 -5.993604757360965e+00 -6.017504326097239e+00 3.768501438739963e+00 4.631266416609972e+00 9.270856923176152e+03 + 195820 1.007777868455822e+00 -5.900143476288800e+00 -6.008490523551906e+00 4.222410811186140e+00 4.600265299150010e+00 9.243126705526671e+03 + 195840 1.075914445505571e+00 -5.940726552696990e+00 -5.990791648176040e+00 4.012980719794831e+00 4.725499194005641e+00 9.188781769429612e+03 + 195860 1.109707951799272e+00 -5.951630850359702e+00 -5.963365575703811e+00 3.990174346962669e+00 4.922791738093915e+00 9.104871312495286e+03 + 195880 1.042097413065962e+00 -5.828142016804314e+00 -6.013838715646065e+00 4.529576428311453e+00 4.463277247090848e+00 9.259483609266021e+03 + 195900 1.094437296132860e+00 -5.890937286447214e+00 -5.957827356972853e+00 4.279260331895459e+00 4.895167195732276e+00 9.088010499073818e+03 + 195920 1.103912831286587e+00 -5.900381439605983e+00 -6.038607238243221e+00 4.222441459607938e+00 4.428727533459704e+00 9.335921935429313e+03 + 195940 1.145937512267781e+00 -5.973268057719872e+00 -5.997600008979067e+00 3.869505366872178e+00 4.729787537384594e+00 9.209694450526273e+03 + 195960 1.083835737289040e+00 -5.902348630843024e+00 -6.032298787569095e+00 4.236716007896007e+00 4.490522098253142e+00 9.316458793144357e+03 + 195980 1.076508382362731e+00 -5.925971630866234e+00 -5.996372000924755e+00 4.129120277546182e+00 4.724870458248104e+00 9.205891283607167e+03 + 196000 1.026643128341642e+00 -5.890791915489999e+00 -6.006039832807624e+00 4.277959255305097e+00 4.616187879509725e+00 9.235561494602738e+03 + 196020 1.021165541169524e+00 -5.921358168531308e+00 -5.966663831542059e+00 4.118281625297159e+00 4.858129497260732e+00 9.114975609956584e+03 + 196040 9.805787860140404e-01 -5.894410297802692e+00 -6.032738692237970e+00 4.297168608586884e+00 4.502865561489658e+00 9.317806951234435e+03 + 196060 1.057743567804275e+00 -6.040112724474444e+00 -6.000424538129063e+00 3.499723633759587e+00 4.727619341481752e+00 9.218358488231455e+03 + 196080 1.039124315171952e+00 -6.041664535904888e+00 -5.983959249252897e+00 3.470586104634517e+00 4.801938790454495e+00 9.167868977082349e+03 + 196100 9.656585972063157e-01 -5.957387507657709e+00 -5.991174177154353e+00 3.959632233578511e+00 4.765623948858569e+00 9.189944632902538e+03 + 196120 9.788456759473211e-01 -5.993718202860602e+00 -5.994057083352168e+00 3.724751647203340e+00 4.722805742979183e+00 9.198786716819519e+03 + 196140 1.014229989262649e+00 -6.060035580857191e+00 -5.974358940820917e+00 3.387667435761924e+00 4.879635961267407e+00 9.138502199170796e+03 + 196160 9.244999306360201e-01 -5.938945135223111e+00 -6.000396759315717e+00 4.030625132395195e+00 4.677760397247359e+00 9.218259604762336e+03 + 196180 9.868177074480585e-01 -6.038268894005399e+00 -5.961587475568934e+00 3.479797132231468e+00 4.920113703304802e+00 9.099516275543370e+03 + 196200 9.933425315740908e-01 -6.050725677078359e+00 -5.992560654038739e+00 3.452110809872873e+00 4.786103373174596e+00 9.194198941181050e+03 + 196220 1.004911089331962e+00 -6.067367084587982e+00 -5.968265149412284e+00 3.343307266144673e+00 4.912365913898437e+00 9.119888736378449e+03 + 196240 1.005543278080721e+00 -6.065444516948155e+00 -5.974765881850439e+00 3.360467190974586e+00 4.881157946179100e+00 9.139771916500067e+03 + 196260 9.986416031814210e-01 -6.050135652970084e+00 -6.052680107255915e+00 3.368385422110793e+00 4.353774771848528e+00 9.379490423971896e+03 + 196280 1.024424522627822e+00 -6.082830864128908e+00 -6.001457865745364e+00 3.210178396419209e+00 4.677434745568327e+00 9.221549738970525e+03 + 196300 9.845245004734411e-01 -6.017566414903256e+00 -6.003411901834026e+00 3.581198818446239e+00 4.662476222893576e+00 9.227521616055972e+03 + 196320 9.419419910562526e-01 -5.943289232912045e+00 -6.010092617804518e+00 3.940377739829699e+00 4.556782365986718e+00 9.248041645880890e+03 + 196340 9.693266084521186e-01 -5.963960763503920e+00 -6.016193722760271e+00 3.864571726338383e+00 4.564641991264095e+00 9.266824786194342e+03 + 196360 9.606812473762324e-01 -5.922893538047632e+00 -6.062008329699757e+00 4.041963737934314e+00 4.243145076323378e+00 9.408376901890899e+03 + 196380 1.058001926103443e+00 -6.030924096049105e+00 -5.985170376709587e+00 3.563222669350723e+00 4.825947606163423e+00 9.171595438288616e+03 + 196400 1.050676249627793e+00 -5.980924117432423e+00 -6.014467605588966e+00 3.767774675336474e+00 4.575162775503587e+00 9.261518330223718e+03 + 196420 1.112692136181506e+00 -6.032504438933397e+00 -6.018416909950121e+00 3.502850402924399e+00 4.583743174384440e+00 9.273678786133734e+03 + 196440 1.075161674933484e+00 -5.944563770643599e+00 -6.024130498883313e+00 4.018954891643374e+00 4.562070425179535e+00 9.291263528439176e+03 + 196460 1.070110749078919e+00 -5.914266194208278e+00 -6.020268675847526e+00 4.185092791429872e+00 4.576410138026292e+00 9.279357542598849e+03 + 196480 1.086836737933196e+00 -5.923002859069145e+00 -6.045392817581578e+00 4.040768461553920e+00 4.337986379990662e+00 9.356872293746232e+03 + 196500 1.063765350908134e+00 -5.882912419768585e+00 -5.983161787762685e+00 4.365079833717187e+00 4.789432449155508e+00 9.165402041204641e+03 + 196520 1.055538114352108e+00 -5.874210755132538e+00 -5.983662426551170e+00 4.423587562316857e+00 4.795099127439657e+00 9.166946516208840e+03 + 196540 1.051618388287416e+00 -5.878203699794543e+00 -6.041520903648044e+00 4.296602502451845e+00 4.358809844669429e+00 9.344953799231969e+03 + 196560 1.115458451193030e+00 -5.996223794423486e+00 -5.989011191161680e+00 3.777996710395426e+00 4.819412594471466e+00 9.183349292632141e+03 + 196580 1.033862579646109e+00 -5.911250858712670e+00 -6.002849023699818e+00 4.147106604326715e+00 4.621135766200292e+00 9.225783493539879e+03 + 196600 1.067482220023382e+00 -6.006591471699648e+00 -5.948921644939004e+00 3.654433663764506e+00 4.985582733400976e+00 9.060903279021102e+03 + 196620 1.001309001843889e+00 -5.955028622936048e+00 -5.957653316795782e+00 3.984713486112900e+00 4.969642087800246e+00 9.087478100995009e+03 + 196640 9.663553443466588e-01 -5.939861200482600e+00 -5.992409646777404e+00 3.977219210434471e+00 4.675477899963927e+00 9.193758298196515e+03 + 196660 9.864682861019943e-01 -5.996117088157417e+00 -6.054987010742149e+00 3.697356569391710e+00 4.359316363819106e+00 9.386615653675526e+03 + 196680 9.866292181510660e-01 -6.017747932982147e+00 -6.006458431243194e+00 3.587310822185471e+00 4.652136888215287e+00 9.236899618126414e+03 + 196700 9.213399181871296e-01 -5.931189223530975e+00 -6.023581192197405e+00 4.061771141723238e+00 4.531242160029653e+00 9.289583561160529e+03 + 196720 9.974994271830198e-01 -6.048974735629590e+00 -5.977870233069941e+00 3.414044046153945e+00 4.822337103237658e+00 9.149238909264219e+03 + 196740 9.372145310151810e-01 -5.962242814933930e+00 -5.996508413619376e+00 3.912539290452004e+00 4.715780920215910e+00 9.206285461247051e+03 + 196760 9.279056233827839e-01 -5.947310457490586e+00 -6.014020425483008e+00 3.917079907293330e+00 4.534020947746656e+00 9.260094949201211e+03 + 196780 9.324660087289492e-01 -5.949158082471452e+00 -5.967536018146450e+00 3.926250662843771e+00 4.820721712221579e+00 9.117608915262341e+03 + 196800 9.691260013237579e-01 -5.992676534797638e+00 -5.950140172002222e+00 3.759033450759277e+00 5.003283828411427e+00 9.064610913261837e+03 + 196820 9.814039503164497e-01 -5.996088637448807e+00 -5.978804770235698e+00 3.714757297326284e+00 4.814003937533767e+00 9.152076307009795e+03 + 196840 1.047677099316197e+00 -6.077860326504848e+00 -5.983679945132244e+00 3.276030639420648e+00 4.816828963629057e+00 9.166998701371262e+03 + 196860 1.047747520453599e+00 -6.060897543210794e+00 -5.960941082063933e+00 3.354142953296611e+00 4.928108421414262e+00 9.097563552986076e+03 + 196880 1.022289784596336e+00 -6.008818555388199e+00 -5.992845750577484e+00 3.668072158526428e+00 4.759790475533115e+00 9.195096139647250e+03 + 196900 9.229929960615717e-01 -5.845535916612546e+00 -6.053055999159617e+00 4.516265369474781e+00 4.324652941860511e+00 9.380628717252595e+03 + 196920 1.050814053606426e+00 -6.020025077855585e+00 -6.008298075024983e+00 3.560363964402784e+00 4.627702229403925e+00 9.242545375691092e+03 + 196940 1.043371499551677e+00 -5.995018458764038e+00 -5.994186687777280e+00 3.729568103645593e+00 4.734344261367706e+00 9.199218153115138e+03 + 196960 1.048351363890013e+00 -5.990053585157971e+00 -6.010484992014194e+00 3.763628544024202e+00 4.646308244105780e+00 9.249246344029703e+03 + 196980 9.874874113569309e-01 -5.889677050364088e+00 -6.015752577380118e+00 4.309534529835403e+00 4.585589343584605e+00 9.265469159504757e+03 + 197000 1.079820705247226e+00 -6.017711536696240e+00 -5.987676824663218e+00 3.595407730868390e+00 4.767871695218666e+00 9.179247337686120e+03 + 197020 1.090757564663666e+00 -6.028340538533708e+00 -5.992331734790272e+00 3.561482260634908e+00 4.768250384074089e+00 9.193497506001437e+03 + 197040 1.044083688192767e+00 -5.958009688892636e+00 -5.977395579254579e+00 3.922997560358719e+00 4.811680777943605e+00 9.147773766546354e+03 + 197060 9.997663137644403e-01 -5.894935660164928e+00 -5.980987943983190e+00 4.215571244391156e+00 4.721445714158814e+00 9.158781364357355e+03 + 197080 1.060108581377842e+00 -5.991120285374828e+00 -5.999004175473726e+00 3.688298000577622e+00 4.643027483601708e+00 9.213994365742568e+03 + 197100 9.901753463662631e-01 -5.902191960505883e+00 -6.045070935909322e+00 4.123896820896288e+00 4.303463633679758e+00 9.355920327360420e+03 + 197120 1.020236534807079e+00 -5.970346033454833e+00 -6.022694482894962e+00 3.863316378213017e+00 4.562723480631428e+00 9.286827361780481e+03 + 197140 1.009732137544667e+00 -5.988157177872170e+00 -5.976268229728614e+00 3.721569638007983e+00 4.789837818057059e+00 9.144348688628032e+03 + 197160 9.428450571295194e-01 -5.924106839203908e+00 -5.987727153605924e+00 4.103877355781600e+00 4.738559665273395e+00 9.179404108062769e+03 + 197180 1.034912779845546e+00 -6.093183141932883e+00 -5.971168276171854e+00 3.179195185530944e+00 4.879823426470225e+00 9.128775493968004e+03 + 197200 9.891640301591573e-01 -6.057241984591949e+00 -5.965478607667785e+00 3.431988387838275e+00 4.958907898473509e+00 9.111385903694772e+03 + 197220 9.657594340331794e-01 -6.049174093438138e+00 -5.990994541332087e+00 3.426225518656401e+00 4.760301510105938e+00 9.189399042494322e+03 + 197240 9.339765781687953e-01 -6.019574505798477e+00 -5.998711681669448e+00 3.596648430899665e+00 4.716445995560152e+00 9.213064642070907e+03 + 197260 9.499001586448454e-01 -6.055924515312791e+00 -5.975006439505787e+00 3.447242766104740e+00 4.911886879420318e+00 9.140498009125908e+03 + 197280 9.233242910642313e-01 -6.022291694654089e+00 -5.997722871003016e+00 3.569257369526794e+00 4.710335356944428e+00 9.210066566338732e+03 + 197300 9.496620660420270e-01 -6.060719739300927e+00 -5.956011979606190e+00 3.414897361594151e+00 5.016145521234776e+00 9.082502813236055e+03 + 197320 9.503593608971426e-01 -6.053897022556006e+00 -5.983249272544809e+00 3.377018887998311e+00 4.782689201266589e+00 9.165723319061768e+03 + 197340 9.761143031009127e-01 -6.079580949035935e+00 -5.999664423724060e+00 3.238381680830373e+00 4.697274736213486e+00 9.216022573866338e+03 + 197360 9.346768182604634e-01 -5.998864050798050e+00 -6.021522244778397e+00 3.692938936591987e+00 4.562832080412647e+00 9.283250344106660e+03 + 197380 9.892311127066558e-01 -6.055108835894766e+00 -5.988051731873103e+00 3.378270805893247e+00 4.763323074238945e+00 9.180409483806527e+03 + 197400 9.475529833573469e-01 -5.962392512223929e+00 -5.966188730150639e+00 3.956379215291700e+00 4.934580744493706e+00 9.113500433209887e+03 + 197420 1.048722579066726e+00 -6.073166421074767e+00 -5.994808603576469e+00 3.277150585884818e+00 4.727093299793116e+00 9.201111197472084e+03 + 197440 1.050748489717075e+00 -6.037126385663093e+00 -5.977217549250812e+00 3.543677792050950e+00 4.887683601592745e+00 9.147248592194484e+03 + 197460 9.929795263342298e-01 -5.917928166068546e+00 -6.020714679927558e+00 4.159107294884740e+00 4.568891226144683e+00 9.280748384039072e+03 + 197480 1.030528908472533e+00 -5.947325162502953e+00 -6.005013291818775e+00 4.035322309707878e+00 4.704068143967262e+00 9.232466427690417e+03 + 197500 1.018990311464264e+00 -5.913950968722451e+00 -6.023716022650490e+00 4.226974044454586e+00 4.596686118712583e+00 9.289999916578039e+03 + 197520 1.103125413171622e+00 -6.033279638205990e+00 -5.978291478629676e+00 3.535607080890546e+00 4.851357602567933e+00 9.150513181833465e+03 + 197540 9.918521868153060e-01 -5.868293880123144e+00 -5.991161214522059e+00 4.427615331684855e+00 4.722092083907736e+00 9.189891994335134e+03 + 197560 9.920547105603189e-01 -5.871139024917659e+00 -5.988882591829150e+00 4.369394543554237e+00 4.693292761590369e+00 9.182907631840086e+03 + 197580 9.916333633955182e-01 -5.873602307174070e+00 -5.962438222298370e+00 4.458756620337001e+00 4.948647048379838e+00 9.102039807494270e+03 + 197600 1.033756503283396e+00 -5.939230071460371e+00 -5.966914937219031e+00 3.990664908308536e+00 4.831694124903182e+00 9.115739359301433e+03 + 197620 1.059662956847667e+00 -5.982769069208641e+00 -5.970279183972358e+00 3.829682595239809e+00 4.901401449070038e+00 9.126026637196295e+03 + 197640 1.114696916422550e+00 -6.073508822964579e+00 -5.979698748915194e+00 3.280816907445384e+00 4.819488869698992e+00 9.154850834862209e+03 + 197660 1.088873444844288e+00 -6.052172062010866e+00 -5.967620489041542e+00 3.411659558110119e+00 4.897167774413612e+00 9.117875998016831e+03 + 197680 1.004463468014409e+00 -5.944086418256621e+00 -5.955867022008926e+00 4.052968875870480e+00 4.985322826082205e+00 9.082022820727194e+03 + 197700 9.924027605821176e-01 -5.942523495137124e+00 -5.977513215645520e+00 4.014896585745752e+00 4.813980195944791e+00 9.148116862085810e+03 + 197720 9.799905812762225e-01 -5.937816478924363e+00 -6.008176646201831e+00 4.015742844602350e+00 4.611723875894433e+00 9.242154496518999e+03 + 197740 1.016486507936503e+00 -6.004213476590676e+00 -5.994729787114927e+00 3.664658887791353e+00 4.719115700357310e+00 9.200851550314121e+03 + 197760 1.024897684334583e+00 -6.029821257369699e+00 -5.989162127020075e+00 3.535441262416423e+00 4.768912280864052e+00 9.183816371186842e+03 + 197780 1.003144833351176e+00 -6.011059235592398e+00 -6.007854735074519e+00 3.619858288449541e+00 4.638259026318064e+00 9.241160263625110e+03 + 197800 9.640184593975513e-01 -5.967205765768405e+00 -6.012486127546235e+00 3.843043114696291e+00 4.583036270254652e+00 9.255417607349127e+03 + 197820 9.292015964115172e-01 -5.927906894827223e+00 -6.020028691883120e+00 4.150029645670132e+00 4.621052031173153e+00 9.278627897050830e+03 + 197840 9.969278378842779e-01 -6.038425653113663e+00 -6.011707856469595e+00 3.510095815984067e+00 4.663513538879973e+00 9.253031215391044e+03 + 197860 1.015585866226082e+00 -6.076504741977311e+00 -6.005284742126257e+00 3.284231026357999e+00 4.693187286762107e+00 9.233283746251729e+03 + 197880 9.052103199325080e-01 -5.922557996618851e+00 -6.014025054425375e+00 4.139712794421844e+00 4.614494794015335e+00 9.260139171920477e+03 + 197900 9.628959031997373e-01 -6.017993688652330e+00 -5.999149875244477e+00 3.605347938433688e+00 4.713552031092286e+00 9.214407203227105e+03 + 197920 9.725503214780055e-01 -6.042019212709418e+00 -6.008848160509082e+00 3.464705105197180e+00 4.655178420135244e+00 9.244219486107251e+03 + 197940 9.121817583787587e-01 -5.964084199418634e+00 -6.018497328644591e+00 3.959588819703323e+00 4.647140211283348e+00 9.273916008360336e+03 + 197960 9.895157806835558e-01 -6.092606214624727e+00 -6.029570241624302e+00 3.148647053354223e+00 4.510609365107955e+00 9.308065768254402e+03 + 197980 9.623183552774741e-01 -6.071150850106349e+00 -6.010448068373572e+00 3.349414707395913e+00 4.697979473830632e+00 9.249166694650921e+03 + 198000 9.219195694901473e-01 -6.031484256687113e+00 -5.986864200294160e+00 3.587648495491559e+00 4.843863764231308e+00 9.176748429444106e+03 + 198020 9.257860901456828e-01 -6.053050138978177e+00 -5.951749350964880e+00 3.465985468642824e+00 5.047670269661461e+00 9.069510692116881e+03 + 198040 9.848695055666200e-01 -6.149821997887043e+00 -5.934663431495617e+00 2.934217712869647e+00 5.169691496769756e+00 9.017560926417731e+03 + 198060 9.169650715472569e-01 -6.050085663456841e+00 -5.986274144940001e+00 3.436901950142670e+00 4.803317564266942e+00 9.174938766155332e+03 + 198080 9.153428098125780e-01 -6.042263206337669e+00 -5.970546949950809e+00 3.476794663141194e+00 4.888600505369352e+00 9.126853343151282e+03 + 198100 9.230118481405387e-01 -6.039225976504595e+00 -5.993640798280924e+00 3.483491042564484e+00 4.745248190208333e+00 9.197527933027068e+03 + 198120 9.682070426132244e-01 -6.082865051581861e+00 -5.980530485847439e+00 3.269686567054606e+00 4.857307479724520e+00 9.157375745922451e+03 + 198140 9.409422958646241e-01 -6.010597346153409e+00 -6.032280158021898e+00 3.648815339345968e+00 4.524309278192808e+00 9.316415282154327e+03 + 198160 9.456238154776700e-01 -5.982956535289173e+00 -6.053715304992077e+00 3.798894863917342e+00 4.392587058399039e+00 9.382697071454260e+03 + 198180 9.665147909666656e-01 -5.980338429144319e+00 -6.060867613382381e+00 3.814328932551471e+00 4.351917894805529e+00 9.404844647263137e+03 + 198200 1.057238500661952e+00 -6.085993258131615e+00 -5.996690388231128e+00 3.275311781894115e+00 4.788102680437161e+00 9.206879051063168e+03 + 198220 1.059194223768562e+00 -6.060815167313036e+00 -5.984757246575466e+00 3.408128191045948e+00 4.844864541846269e+00 9.170324514281610e+03 + 198240 1.040616425457865e+00 -6.010643721523284e+00 -6.039488013227714e+00 3.662212994180430e+00 4.496584607573875e+00 9.338654532737906e+03 + 198260 9.964961706761160e-01 -5.927659542858954e+00 -6.072434550655013e+00 4.065352659079077e+00 4.234032160454057e+00 9.440754255724847e+03 + 198280 1.044771250090530e+00 -5.989202092641337e+00 -6.029920233501111e+00 3.770688515755895e+00 4.536878649827138e+00 9.309124202338453e+03 + 198300 1.000101533863586e+00 -5.918555361910573e+00 -6.012538288805040e+00 4.099020859279674e+00 4.559356349240717e+00 9.255585653583408e+03 + 198320 9.569636660291908e-01 -5.852225490752387e+00 -6.032021353279019e+00 4.454855000802558e+00 4.422439334854832e+00 9.315607862567498e+03 + 198340 1.033729659748865e+00 -5.966003819562791e+00 -5.984495017641134e+00 3.884930372651324e+00 4.778751051781821e+00 9.169498870793330e+03 + 198360 1.068080124808481e+00 -6.019844285740517e+00 -6.009428683482852e+00 3.554218769410459e+00 4.614026769383205e+00 9.246006620686147e+03 + 198380 1.010594530450490e+00 -5.942836551660555e+00 -6.003069626272305e+00 4.043787927642594e+00 4.697920292183754e+00 9.226450093924877e+03 + 198400 9.878438663853545e-01 -5.919837954159591e+00 -5.983498196700500e+00 4.186062466665661e+00 4.820515502605066e+00 9.166427411259196e+03 + 198420 1.051304780804985e+00 -6.028779342844048e+00 -5.985859707031013e+00 3.575458449668280e+00 4.821909640298908e+00 9.173675789506657e+03 + 198440 1.019058594488340e+00 -6.004700713912327e+00 -6.031860655810791e+00 3.651820173679865e+00 4.495863584311465e+00 9.315103264697376e+03 + 198460 9.531030557227899e-01 -5.940645356831086e+00 -6.033003233468676e+00 4.011957410800308e+00 4.481624190812045e+00 9.318644195207551e+03 + 198480 9.487234409343656e-01 -5.973289385600593e+00 -6.003489679641627e+00 3.848973946471299e+00 4.675559184607281e+00 9.227772611251210e+03 + 198500 9.843468817542180e-01 -6.066293690406648e+00 -5.998226313135965e+00 3.326052237292759e+00 4.716905650973612e+00 9.211611762490396e+03 + 198520 9.775699798239895e-01 -6.094595020573372e+00 -5.990478948830122e+00 3.190285550784541e+00 4.788136146644314e+00 9.187871525581708e+03 + 198540 9.112889798695463e-01 -6.026822520806770e+00 -6.016127457716182e+00 3.611664122111817e+00 4.673076829433636e+00 9.266640446164918e+03 + 198560 9.550065108479557e-01 -6.113754749086741e+00 -6.008105993155245e+00 3.110780983947523e+00 4.717432489598318e+00 9.241976991816964e+03 + 198580 9.264082384224174e-01 -6.085709525835588e+00 -5.989874208970129e+00 3.278842731173814e+00 4.829143951082639e+00 9.185993707810869e+03 + 198600 8.870629643941131e-01 -6.031288015012554e+00 -6.006949760966275e+00 3.554597117611087e+00 4.694351138677460e+00 9.238399757615698e+03 + 198620 9.150096591345106e-01 -6.066787973804774e+00 -6.006733791003851e+00 3.405251786925606e+00 4.750092197923266e+00 9.237717109580011e+03 + 198640 9.280325586211272e-01 -6.073554042613665e+00 -5.985484618563823e+00 3.306042879494788e+00 4.811751141088309e+00 9.172556617218221e+03 + 198660 9.522651880694178e-01 -6.091807730069959e+00 -6.014699391413894e+00 3.190950652009166e+00 4.633718665049139e+00 9.262259076684508e+03 + 198680 9.652397507033778e-01 -6.093139558566232e+00 -6.024828531319635e+00 3.194031574449522e+00 4.586284063996790e+00 9.293467210357674e+03 + 198700 9.647921822989407e-01 -6.074003634987103e+00 -5.991376330728748e+00 3.373667550685343e+00 4.848126318270825e+00 9.190619774149342e+03 + 198720 9.879549867396080e-01 -6.090124222628625e+00 -5.964910471563664e+00 3.308933221036422e+00 5.027929956416781e+00 9.109644855686305e+03 + 198740 9.757346745331257e-01 -6.053744552690764e+00 -5.981716298887574e+00 3.479293701097414e+00 4.892891080771586e+00 9.161007867643517e+03 + 198760 9.933434004245933e-01 -6.063786927234659e+00 -5.988374112056327e+00 3.392080129147922e+00 4.825112183997339e+00 9.181380286166717e+03 + 198780 9.319522628266075e-01 -5.959474962048544e+00 -5.977904617342761e+00 3.983492206281626e+00 4.877666273602292e+00 9.149319743440697e+03 + 198800 9.540679077867020e-01 -5.977660453623453e+00 -5.975741490210138e+00 3.832755117408694e+00 4.843774102286577e+00 9.142730790887630e+03 + 198820 1.020338983163744e+00 -6.060846574501731e+00 -6.014241206217880e+00 3.355466217165393e+00 4.623081454008698e+00 9.260813631538238e+03 + 198840 1.034631030546345e+00 -6.070454304471387e+00 -5.971458690348827e+00 3.343037524323275e+00 4.911485660136783e+00 9.129659960505542e+03 + 198860 1.032636637383578e+00 -6.056218686564323e+00 -6.022537165324044e+00 3.364999695059459e+00 4.558404202219707e+00 9.286395989618968e+03 + 198880 9.730282110190189e-01 -5.960223865564541e+00 -6.071147203603275e+00 3.861827799923712e+00 4.224888827574212e+00 9.436749984710703e+03 + 198900 9.752407914872872e-01 -5.958775039819126e+00 -6.006756315236792e+00 3.937984888997556e+00 4.662468980470942e+00 9.237817201131245e+03 + 198920 9.580346475055450e-01 -5.927583892409970e+00 -6.016722656839891e+00 4.111675018759516e+00 4.599826439223695e+00 9.268428807085011e+03 + 198940 1.039156479945273e+00 -6.041954699200446e+00 -5.995097587462315e+00 3.461280145737985e+00 4.730340932452939e+00 9.201989876472182e+03 + 198960 9.792529912016147e-01 -5.946938948175706e+00 -6.034209356209880e+00 4.015694870555442e+00 4.514574682571219e+00 9.322342127970962e+03 + 198980 1.045919909573658e+00 -6.040386704984024e+00 -6.022954659725977e+00 3.501467577194148e+00 4.601565078666139e+00 9.287644725282045e+03 + 199000 9.820201902341441e-01 -5.941451892055351e+00 -6.051366364819545e+00 3.973393706130194e+00 4.342247794308504e+00 9.375419298277386e+03 + 199020 1.045387792256588e+00 -6.033096695479033e+00 -6.020713550404889e+00 3.542643986984566e+00 4.613749922285808e+00 9.280746499517512e+03 + 199040 9.835455533475369e-01 -5.942988657796434e+00 -6.058960018596540e+00 3.998275130177628e+00 4.332349629953336e+00 9.398945493800546e+03 + 199060 1.011628037120533e+00 -5.988711021783498e+00 -6.032416896741021e+00 3.767548222569833e+00 4.516582325101449e+00 9.316832958156403e+03 + 199080 1.093986025966084e+00 -6.119036198193902e+00 -6.013918129561304e+00 3.030829310096706e+00 4.634433527153627e+00 9.259847263491227e+03 + 199100 1.016062516621175e+00 -6.019152041969119e+00 -6.018725951344059e+00 3.587655276078587e+00 4.590101954384988e+00 9.274637173343817e+03 + 199120 9.935871484432715e-01 -6.009786784904437e+00 -6.020780801189318e+00 3.650034209824271e+00 4.586904866997959e+00 9.280944768874708e+03 + 199140 9.396478523733792e-01 -5.959916074283486e+00 -6.033236303544082e+00 3.876194623132055e+00 4.455178520448902e+00 9.319367854752243e+03 + 199160 1.007877099675233e+00 -6.092348650485308e+00 -5.989478344398130e+00 3.227329507323285e+00 4.818026724004282e+00 9.184779604655178e+03 + 199180 9.461899773815526e-01 -6.032973235700828e+00 -6.002627685618304e+00 3.540355763785038e+00 4.714604608317587e+00 9.225128874167300e+03 + 199200 9.169446904375247e-01 -6.019126632617641e+00 -5.997209799086605e+00 3.576319367836887e+00 4.702169217591129e+00 9.208489636133518e+03 + 199220 9.655191552051936e-01 -6.113552120495919e+00 -5.926744209665422e+00 3.125824757962981e+00 5.198504690382469e+00 8.993547436383958e+03 + 199240 9.657417036500927e-01 -6.125677031988027e+00 -5.954581422156043e+00 3.056385820498082e+00 5.038843289113387e+00 9.078160732826180e+03 + 199260 9.877273315555719e-01 -6.163001810414066e+00 -5.990981509760339e+00 2.781671000552668e+00 4.769438186961859e+00 9.189401612365369e+03 + 199280 9.164016537739427e-01 -6.057427989294474e+00 -5.970006140233552e+00 3.394534142724440e+00 4.896523928519669e+00 9.125220781308743e+03 + 199300 9.474448171313214e-01 -6.095091760743020e+00 -5.982569132614822e+00 3.191877067034992e+00 4.837999410567528e+00 9.163618069188802e+03 + 199320 9.825702308519964e-01 -6.129777319180471e+00 -5.984787297986816e+00 2.983357250828027e+00 4.815912389655264e+00 9.170418953085722e+03 + 199340 9.233561907968878e-01 -6.017889690848733e+00 -5.983733303433910e+00 3.630539129044245e+00 4.826670391264030e+00 9.167180137520203e+03 + 199360 9.833446666705657e-01 -6.071562030718987e+00 -6.002138341950408e+00 3.277238656398008e+00 4.675880220588303e+00 9.223623351935497e+03 + 199380 9.904879622213187e-01 -6.041612705995380e+00 -5.977971123946595e+00 3.543101385561040e+00 4.908541198188153e+00 9.149553915048507e+03 + 199400 9.531451151255562e-01 -5.944451955308232e+00 -6.020145704520475e+00 4.020207021150083e+00 4.585561799603552e+00 9.278986391660319e+03 + 199420 9.302501168049160e-01 -5.876127504871770e+00 -6.031229636167053e+00 4.436552729181573e+00 4.545932289306807e+00 9.313163269864563e+03 + 199440 1.067356731062996e+00 -6.053025969964114e+00 -6.001881800622634e+00 3.418665160248135e+00 4.712342895141543e+00 9.222807297010597e+03 + 199460 1.049510899882768e+00 -6.009171098342096e+00 -5.962259422337160e+00 3.655704219850209e+00 4.925078323028947e+00 9.101565195316367e+03 + 199480 1.044519255577664e+00 -5.992229978207050e+00 -6.049878297079360e+00 3.710885987918348e+00 4.379860419905029e+00 9.370786156864542e+03 + 199500 9.847609446149433e-01 -5.900903108064672e+00 -6.017893280075429e+00 4.252555905378914e+00 4.580780233522542e+00 9.272040626800444e+03 + 199520 9.726026013727151e-01 -5.881495003585851e+00 -6.036443208744220e+00 4.348750297248522e+00 4.459013725071912e+00 9.329243017857832e+03 + 199540 1.010034818694413e+00 -5.940409035620492e+00 -6.038026222552443e+00 4.013419066226046e+00 4.452886072651932e+00 9.334132119631533e+03 + 199560 1.040614778341884e+00 -5.991255001091267e+00 -6.014165865584546e+00 3.761870949825876e+00 4.630313220460650e+00 9.260570532384259e+03 + 199580 9.876228168731374e-01 -5.920005727090434e+00 -5.986205024750682e+00 4.158082425501370e+00 4.777955814028018e+00 9.174758238441040e+03 + 199600 1.012865828224957e+00 -5.965936366697965e+00 -5.983591445494183e+00 3.864537565495610e+00 4.763159370933115e+00 9.166728018144922e+03 + 199620 9.781413945744000e-01 -5.923538991148838e+00 -5.969799366321246e+00 4.156505310912000e+00 4.890871077902111e+00 9.124570404367860e+03 + 199640 1.099765286334250e+00 -6.114689303161841e+00 -5.986635051507113e+00 3.117695888685802e+00 4.853003218018651e+00 9.176076291045239e+03 + 199660 9.733540898763735e-01 -5.943014965150123e+00 -6.026748203311058e+00 3.953333946392712e+00 4.472524735195893e+00 9.299371258522997e+03 + 199680 1.020419325781833e+00 -6.029875926956803e+00 -6.008154673470141e+00 3.556826355567539e+00 4.681553154441065e+00 9.242086748417116e+03 + 199700 9.810593732039271e-01 -5.990291462713761e+00 -5.967726450473815e+00 3.744230860893893e+00 4.873802653100023e+00 9.118263504756900e+03 + 199720 9.784782707049126e-01 -6.006654552718952e+00 -5.985793021212336e+00 3.668265940296609e+00 4.788056082519161e+00 9.173492287727226e+03 + 199740 9.418235269606751e-01 -5.974755483458068e+00 -6.013514831715964e+00 3.892227035818223e+00 4.669664860131629e+00 9.258555704354141e+03 + 199760 9.832394135578619e-01 -6.060661637263619e+00 -6.009626350201415e+00 3.325320325409244e+00 4.618372841405569e+00 9.246627143084354e+03 + 199780 9.498194638281705e-01 -6.035882868576457e+00 -6.000101480557392e+00 3.474210718137948e+00 4.679672985295322e+00 9.217356306124026e+03 + 199800 9.583864529664586e-01 -6.076119003394955e+00 -6.009708957467579e+00 3.242593120679117e+00 4.623929881315505e+00 9.246899990826470e+03 + 199820 9.904273190776074e-01 -6.154404000245639e+00 -5.941030166708029e+00 2.909664010944320e+00 5.134889582611303e+00 9.036909661193709e+03 + 199840 9.102207622852591e-01 -6.065663616522880e+00 -5.978347946184162e+00 3.372945213680421e+00 4.874325304821653e+00 9.150648183986643e+03 + 199860 8.494642503362303e-01 -6.001629984670598e+00 -6.000908287105964e+00 3.689399501675942e+00 4.693543600774409e+00 9.219824648728385e+03 + 199880 9.124194373292649e-01 -6.115327755301041e+00 -6.013664364930694e+00 3.022386552368757e+00 4.606153472234109e+00 9.259048264012663e+03 + 199900 9.012855081825699e-01 -6.115355873351151e+00 -5.968200087682216e+00 3.132786366069281e+00 4.977777659664543e+00 9.119696429693091e+03 + 199920 8.478880513404523e-01 -6.043267344699284e+00 -5.977625330208900e+00 3.500506679661614e+00 4.877433284934312e+00 9.148497479033846e+03 + 199940 8.660608083304254e-01 -6.064289496109857e+00 -6.010313559354831e+00 3.416172307521693e+00 4.726110489118270e+00 9.248739882428541e+03 + 199960 9.304301216794905e-01 -6.139891398497096e+00 -5.977879919520982e+00 3.023079698606037e+00 4.953374682082232e+00 9.149294637624478e+03 + 199980 9.633635787878904e-01 -6.153324116670857e+00 -5.981484082093043e+00 2.878934939218798e+00 4.865667009924017e+00 9.160317920496162e+03 + 200000 9.635163730977483e-01 -6.102203225911095e+00 -5.997212004084306e+00 3.191924486932165e+00 4.794800330000662e+00 9.208486378845661e+03 +Loop time of 56.3641 on 4 procs for 200000 steps with 256 atoms + +Performance: 1532891.800 tau/day, 3548.361 timesteps/s +98.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 25.291 | 28.255 | 31.464 | 44.1 | 50.13 +Neigh | 5.5169 | 5.6888 | 5.8734 | 6.9 | 10.09 +Comm | 11.506 | 14.839 | 17.828 | 63.0 | 26.33 +Output | 5.5139 | 5.5345 | 5.5859 | 1.3 | 9.82 +Modify | 1.4354 | 1.497 | 1.6066 | 5.6 | 2.66 +Other | | 0.5505 | | | 0.98 + +Nlocal: 64 ave 65 max 63 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1334.5 ave 1343 max 1328 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 4748.25 ave 5438 max 4111 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 18993 +Ave neighs/atom = 74.1914 +Neighbor list builds = 19989 +Dangerous builds = 19885 +Total wall time: 0:01:01 From 02373c4c3b932db416869b07da68207d439ecc9b Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 29 Mar 2019 15:22:44 -0400 Subject: [PATCH 048/760] Move HMA bits into USER-HMA package --- src/USER-HMA/Install.sh | 31 ++++++++++++++++++++++++++++++ src/{ => USER-HMA}/compute_hma.cpp | 0 src/{ => USER-HMA}/compute_hma.h | 0 3 files changed, 31 insertions(+) create mode 100644 src/USER-HMA/Install.sh rename src/{ => USER-HMA}/compute_hma.cpp (100%) rename src/{ => USER-HMA}/compute_hma.h (100%) diff --git a/src/USER-HMA/Install.sh b/src/USER-HMA/Install.sh new file mode 100644 index 0000000000..1f8f418ca2 --- /dev/null +++ b/src/USER-HMA/Install.sh @@ -0,0 +1,31 @@ +# Install/Uninstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# package files without dependencies +action compute_hma.h +action compute_hma.cpp diff --git a/src/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp similarity index 100% rename from src/compute_hma.cpp rename to src/USER-HMA/compute_hma.cpp diff --git a/src/compute_hma.h b/src/USER-HMA/compute_hma.h similarity index 100% rename from src/compute_hma.h rename to src/USER-HMA/compute_hma.h From d000c6883b205b92425a61e3a86b23116a1f3795 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 29 Mar 2019 15:41:15 -0400 Subject: [PATCH 049/760] Mention need to build HMA as USER pacakge --- doc/src/compute_hma.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index f71ddc9e2e..c4ade07ad7 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -132,7 +132,13 @@ output"_Howto_output.html doc page for an overview of LAMMPS output options. The vector values calculated by this compute are "extensive". The scalar value will be in energy "units"_units.html. -[Restrictions:] Usage restricted to canonical (NVT) ensemble simulation only. +[Restrictions:] + +This compute is distributed as the USER-HMA package. It is only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +Usage restricted to canonical (NVT) ensemble simulation only. [Related commands:] From 2fbf86a58d64a85d4d2b42d47c0cd03155d076c8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 20:50:26 -0400 Subject: [PATCH 050/760] 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 051/760] 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 052/760] 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 053/760] 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 054/760] 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 055/760] 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 69c1a7954a3b7219eab47d9662123b1183c83e71 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 8 Apr 2019 17:14:59 -0400 Subject: [PATCH 056/760] 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 057/760] 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 058/760] 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 16b17f812cce2f26420817dda9d36f7fb3b65500 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 08:51:24 -0600 Subject: [PATCH 059/760] 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 060/760] 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 061/760] 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 062/760] 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 063/760] 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 064/760] 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 065/760] 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 62bfd300f0a7ea8ee5efb2324f42affed303c481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugen=20Ro=C5=BEi=C4=87?= Date: Tue, 16 Apr 2019 13:43:02 +0200 Subject: [PATCH 066/760] Gitignore update --- src/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 9670d1ca20..00fff20131 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -760,6 +760,8 @@ /pair_comb3.h /pair_colloid.cpp /pair_colloid.h +/pair_cosine_squared.cpp +/pair_cosine_squared.h /pair_coul_diel.cpp /pair_coul_diel.h /pair_coul_long.cpp From c55009a0ac6314d65fa172de64108aa129788929 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Tue, 16 Apr 2019 23:30:25 -0500 Subject: [PATCH 067/760] 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 068/760] 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 4a4297591e9f48cc7f4910c69891bad0d2546718 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Wed, 17 Apr 2019 12:04:31 -0500 Subject: [PATCH 069/760] 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 a243be2dc9c25e7fc175d899b2f2d796e9cb7bd6 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sun, 21 Apr 2019 22:10:03 -0600 Subject: [PATCH 070/760] 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 071/760] 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 99430767dfa399dd1b8fd8a0ecf71fdef5544c5d Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Tue, 30 Apr 2019 21:45:21 -0500 Subject: [PATCH 072/760] Start devel of native support for KIM simulator models * CMake change to use KIM-API SimulatorModels branch * Minimal changes to pair_kim to illustrate use of KIM API interface. Only c++ interface is implemented for development. * Added example input: in.kim.simulator-model --- cmake/CMakeLists.txt | 6 +++-- examples/kim/in.kim.simulator-model | 41 +++++++++++++++++++++++++++++ src/KIM/pair_kim.cpp | 21 ++++++++++++++- src/KIM/pair_kim.h | 2 ++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 examples/kim/in.kim.simulator-model diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index dbbbc7f7ac..6acc61576a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -738,8 +738,10 @@ if(PKG_KIM) 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 + GIT_REPOSITORY https://github.com/openkim/kim-api.git + GIT_TAG SimulatorModels + #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} diff --git a/examples/kim/in.kim.simulator-model b/examples/kim/in.kim.simulator-model new file mode 100644 index 0000000000..32baf9d78e --- /dev/null +++ b/examples/kim/in.kim.simulator-model @@ -0,0 +1,41 @@ +# 3d Lennard-Jones melt +# +# This example requires that the example models provided with +# the kim-api package are installed. see the ./lib/kim/README or +# ./lib/kim/Install.py files for details on how to install these +# example models. +# + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable yy equal 20*$y +variable zz equal 20*$z + +units metal +atom_style atomic +newton off + +lattice fcc 4.4300 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +create_box 1 box +create_atoms 1 box + +#pair_style lj/cut 8.1500 +#pair_coeff 1 1 0.0104 3.4000 + +pair_style kim ex_sim_model_Si_mod_tersoff +pair_coeff * * Ar + +mass 1 39.95 +velocity all create 200.0 232345 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 + +run 100 diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index a1c13ae81f..01b435194e 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -87,6 +87,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : chargeUnit(KIM_CHARGE_UNIT_unused), temperatureUnit(KIM_TEMPERATURE_UNIT_unused), timeUnit(KIM_TIME_UNIT_unused), + simulatorModel(NULL), pkim(NULL), pargs(NULL), kim_model_support_for_energy(KIM_SUPPORT_STATUS_notSupported), @@ -396,8 +397,10 @@ void PairKIM::coeff(int narg, char **arg) // Assume all species arguments are valid // errors will be detected by below + std::string atom_type_sym_list; lmps_num_unique_elements = 0; for (i = 2; i < narg; i++) { + atom_type_sym_list += std::string(" ") + arg[i]; for (j = 0; j < lmps_num_unique_elements; j++) if (strcmp(arg[i],lmps_unique_elements[j]) == 0) break; lmps_map_species_to_unique[i-1] = j; @@ -422,6 +425,15 @@ void PairKIM::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + if (simulatorModel) + { + simulatorModel->AddTemplateMap("atom-type-sym-list", atom_type_sym_list); + simulatorModel->CloseTemplateMap(); + + error->all(FLERR,(simulatorModel->ToString()).c_str()); + } + else + { // setup mapping between LAMMPS unique elements and KIM species codes if (kim_particle_codes_ok) { @@ -449,6 +461,7 @@ void PairKIM::coeff(int narg, char **arg) error->all(FLERR, msg.str().c_str()); } } + } return; } @@ -770,7 +783,13 @@ void PairKIM::kim_init() &requestedUnitsAccepted, &pkim); if (kimerror) - error->all(FLERR,"KIM ModelCreate failed"); + { + kimerror = KIM::SimulatorModel::Create(kim_modelname,&simulatorModel); + if (kimerror) + error->all(FLERR,"KIM ModelCreate failed"); + else + return; + } else { if (!requestedUnitsAccepted) { error->all(FLERR,"KIM Model did not accept the requested unit system"); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 27bab6c687..dcfb4a8af0 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -68,6 +68,7 @@ class KIM_API_model; extern "C" { #include "KIM_SimulatorHeaders.h" } +#include "KIM_SimulatorModel.hpp" #include @@ -121,6 +122,7 @@ namespace LAMMPS_NS { KIM_TemperatureUnit temperatureUnit; KIM_TimeUnit timeUnit; + KIM::SimulatorModel * simulatorModel; KIM_Model * pkim; KIM_ComputeArguments * pargs; From 11407a165b1b3d26e09e9f6f3a7c0ac96a6080af Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 May 2019 18:21:58 -0400 Subject: [PATCH 073/760] reformat pair style kim to LAMMPS style and add some existing simiulator model code (non-functional) --- src/KIM/pair_kim.cpp | 1335 ++++++++++++++++++++---------------------- src/KIM/pair_kim.h | 175 +++--- 2 files changed, 714 insertions(+), 796 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 01b435194e..d75d960355 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -55,6 +55,7 @@ #include #include +#include // includes from LAMMPS #include "pair_kim.h" @@ -74,201 +75,187 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ PairKIM::PairKIM(LAMMPS *lmp) : - Pair(lmp), - settings_call_count(0), - init_style_call_count(0), - kim_modelname(NULL), - lmps_map_species_to_unique(NULL), - lmps_unique_elements(NULL), - lmps_num_unique_elements(0), - lmps_units(METAL), - lengthUnit(KIM_LENGTH_UNIT_unused), - energyUnit(KIM_ENERGY_UNIT_unused), - chargeUnit(KIM_CHARGE_UNIT_unused), - temperatureUnit(KIM_TEMPERATURE_UNIT_unused), - timeUnit(KIM_TIME_UNIT_unused), - simulatorModel(NULL), - pkim(NULL), - pargs(NULL), - kim_model_support_for_energy(KIM_SUPPORT_STATUS_notSupported), - kim_model_support_for_forces(KIM_SUPPORT_STATUS_notSupported), - kim_model_support_for_particleEnergy(KIM_SUPPORT_STATUS_notSupported), - kim_model_support_for_particleVirial(KIM_SUPPORT_STATUS_notSupported), - lmps_local_tot_num_atoms(0), - kim_global_influence_distance(0.0), - kim_number_of_neighbor_lists(0), - kim_cutoff_values(NULL), - modelWillNotRequestNeighborsOfNoncontributingParticles(NULL), - neighborLists(NULL), - kim_particle_codes(NULL), - lmps_maxalloc(0), - kim_particleSpecies(NULL), - kim_particleContributing(NULL), - lmps_stripped_neigh_list(NULL), - lmps_stripped_neigh_ptr(NULL) + Pair(lmp), + settings_call_count(0), + init_style_call_count(0), + kim_modelname(NULL), + lmps_map_species_to_unique(NULL), + lmps_unique_elements(NULL), + lmps_num_unique_elements(0), + lmps_units(METAL), + lengthUnit(KIM_LENGTH_UNIT_unused), + energyUnit(KIM_ENERGY_UNIT_unused), + chargeUnit(KIM_CHARGE_UNIT_unused), + temperatureUnit(KIM_TEMPERATURE_UNIT_unused), + timeUnit(KIM_TIME_UNIT_unused), + simulatorModel(NULL), + pkim(NULL), + pargs(NULL), + kim_model_support_for_energy(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_forces(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_particleEnergy(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_particleVirial(KIM_SUPPORT_STATUS_notSupported), + lmps_local_tot_num_atoms(0), + kim_global_influence_distance(0.0), + kim_number_of_neighbor_lists(0), + kim_cutoff_values(NULL), + modelWillNotRequestNeighborsOfNoncontributingParticles(NULL), + neighborLists(NULL), + kim_particle_codes(NULL), + lmps_maxalloc(0), + kim_particleSpecies(NULL), + kim_particleContributing(NULL), + lmps_stripped_neigh_list(NULL), + lmps_stripped_neigh_ptr(NULL), + simulator_class(NULL), + simulator_style(NULL) { - // Initialize Pair data members to appropriate values - single_enable = 0; // We do not provide the Single() function - restartinfo = 0; // We do not write any restart info - one_coeff = 1; // We only allow one coeff * * call - // set to 1, regardless use of fdotr, to avoid ev_set()'s futzing with - // vflag_global - no_virial_fdotr_compute = 1; + // Initialize Pair data members to appropriate values + single_enable = 0; // We do not provide the Single() function + restartinfo = 0; // We do not write any restart info + one_coeff = 1; // We only allow one coeff * * call + // set to 1, regardless use of fdotr, to avoid ev_set()'s futzing with + // vflag_global + no_virial_fdotr_compute = 1; - // BEGIN: initial values that determine the KIM state - // (used by kim_free(), etc.) - kim_init_ok = false; - kim_particle_codes_ok = false; - // END - - return; + // BEGIN: initial values that determine the KIM state + // (used by kim_free(), etc.) + kim_init_ok = false; + kim_particle_codes_ok = false; + // END } /* ---------------------------------------------------------------------- */ PairKIM::~PairKIM() { - // clean up kim_modelname - if (kim_modelname != 0) delete [] kim_modelname; + // clean up kim_modelname + if (kim_modelname != 0) delete [] kim_modelname; - // clean up lammps atom species number to unique particle names mapping - if (lmps_unique_elements) - for (int i = 0; i < lmps_num_unique_elements; i++) - delete [] lmps_unique_elements[i]; - delete [] lmps_unique_elements; + // clean up lammps atom species number to unique particle names mapping + if (lmps_unique_elements) + for (int i = 0; i < lmps_num_unique_elements; i++) + delete [] lmps_unique_elements[i]; + delete [] lmps_unique_elements; - if (kim_particle_codes_ok) - { - delete [] kim_particle_codes; - kim_particle_codes = NULL; - kim_particle_codes_ok = false; - } + if (kim_particle_codes_ok) { + delete [] kim_particle_codes; + kim_particle_codes = NULL; + kim_particle_codes_ok = false; + } - // clean up local memory used to support KIM interface - memory->destroy(kim_particleSpecies); - memory->destroy(kim_particleContributing); - memory->destroy(lmps_stripped_neigh_list); - // clean up lmps_stripped_neigh_ptr - if (lmps_stripped_neigh_ptr) - { - delete [] lmps_stripped_neigh_ptr; - lmps_stripped_neigh_ptr = 0; - } + // clean up local memory used to support KIM interface + memory->destroy(kim_particleSpecies); + memory->destroy(kim_particleContributing); + memory->destroy(lmps_stripped_neigh_list); + // clean up lmps_stripped_neigh_ptr + if (lmps_stripped_neigh_ptr) { + delete [] lmps_stripped_neigh_ptr; + lmps_stripped_neigh_ptr = 0; + } - // clean up allocated memory for standard Pair class usage - // also, we allocate lmps_map_species_to_uniuqe in the allocate() function - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - delete [] lmps_map_species_to_unique; - } + // clean up allocated memory for standard Pair class usage + // also, we allocate lmps_map_species_to_uniuqe in the allocate() function + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + delete [] lmps_map_species_to_unique; + } - // clean up neighborlist pointers - if (neighborLists) - { - delete [] neighborLists; - neighborLists = 0; - } + // clean up neighborlist pointers + if (neighborLists) { + delete [] neighborLists; + neighborLists = 0; + } - // clean up KIM interface (if necessary) - kim_free(); - - return; + // clean up KIM interface (if necessary) + kim_free(); } /* ---------------------------------------------------------------------- */ + void PairKIM::set_contributing() { int const nall = atom->nlocal + atom->nghost; for (int i = 0; i < nall; ++i) - { kim_particleContributing[i] = ( (i < atom->nlocal) ? 1 : 0 ); - } } /* ---------------------------------------------------------------------- */ -void PairKIM::compute(int eflag , int vflag) +void PairKIM::compute(int eflag, int vflag) { - ev_init(eflag,vflag); + ev_init(eflag,vflag); - // grow kim_particleSpecies and kim_particleContributing array if necessary - // needs to be atom->nmax in length - if (atom->nmax > lmps_maxalloc) { - memory->destroy(kim_particleSpecies); - memory->destroy(kim_particleContributing); + // grow kim_particleSpecies and kim_particleContributing array if necessary + // needs to be atom->nmax in length + if (atom->nmax > lmps_maxalloc) { + memory->destroy(kim_particleSpecies); + memory->destroy(kim_particleContributing); - lmps_maxalloc = atom->nmax; - memory->create(kim_particleSpecies,lmps_maxalloc, - "pair:kim_particleSpecies"); - int kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, - KIM_COMPUTE_ARGUMENT_NAME_particleSpeciesCodes, - kim_particleSpecies); - memory->create(kim_particleContributing,lmps_maxalloc, - "pair:kim_particleContributing"); - kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerInteger( - pargs, - KIM_COMPUTE_ARGUMENT_NAME_particleContributing, - kim_particleContributing); - if (kimerror) - error->all( - FLERR, - "Unable to set KIM particle species codes and/or contributing"); - } + lmps_maxalloc = atom->nmax; + memory->create(kim_particleSpecies,lmps_maxalloc, + "pair:kim_particleSpecies"); + int kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, + KIM_COMPUTE_ARGUMENT_NAME_particleSpeciesCodes, + kim_particleSpecies); + memory->create(kim_particleContributing,lmps_maxalloc, + "pair:kim_particleContributing"); + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerInteger( + pargs, + KIM_COMPUTE_ARGUMENT_NAME_particleContributing, + kim_particleContributing); + if (kimerror) + error->all(FLERR, + "Unable to set KIM particle species codes and/or contributing"); + } - // kim_particleSpecies = KIM atom species for each LAMMPS atom + // kim_particleSpecies = KIM atom species for each LAMMPS atom - int *species = atom->type; - int nall = atom->nlocal + atom->nghost; - int ielement; + int *species = atom->type; + int nall = atom->nlocal + atom->nghost; + int ielement; - for (int i = 0; i < nall; i++) { - ielement = lmps_map_species_to_unique[species[i]]; - kim_particleSpecies[i] = kim_particle_codes[ielement]; - } + for (int i = 0; i < nall; i++) { + ielement = lmps_map_species_to_unique[species[i]]; + kim_particleSpecies[i] = kim_particle_codes[ielement]; + } - // Set kim contributing flags - set_contributing(); + // Set kim contributing flags + set_contributing(); - // pass current atom pointers to KIM - set_argument_pointers(); + // pass current atom pointers to KIM + set_argument_pointers(); - // set number of particles - lmps_local_tot_num_atoms = (int) nall; + // set number of particles + lmps_local_tot_num_atoms = (int) nall; - // compute via KIM model - int kimerror = KIM_Model_Compute(pkim, pargs); - if (kimerror) error->all(FLERR,"KIM Compute returned error"); + // compute via KIM model + int kimerror = KIM_Model_Compute(pkim, pargs); + if (kimerror) error->all(FLERR,"KIM Compute returned error"); - // compute virial before reverse comm! - if (vflag_global) - { - virial_fdotr_compute(); - } + // compute virial before reverse comm! + if (vflag_global) + virial_fdotr_compute(); - // if newton is off, perform reverse comm - if (!lmps_using_newton) - { - comm->reverse_comm_pair(this); - } + // if newton is off, perform reverse comm + if (!lmps_using_newton) { + comm->reverse_comm_pair(this); + } - if ((vflag_atom) && - KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported) - ) - { // flip sign and order of virial if KIM is computing it - double tmp; - for (int i = 0; i < nall; ++i) - { - for (int j = 0; j < 3; ++j) vatom[i][j] = -1.0*vatom[i][j]; - tmp = vatom[i][3]; - vatom[i][3] = -vatom[i][5]; - vatom[i][4] = -vatom[i][4]; - vatom[i][5] = -tmp; - } - } - - return; + if ((vflag_atom) && + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { + // flip sign and order of virial if KIM is computing it + double tmp; + for (int i = 0; i < nall; ++i) { + for (int j = 0; j < 3; ++j) vatom[i][j] = -1.0*vatom[i][j]; + tmp = vatom[i][3]; + vatom[i][3] = -vatom[i][5]; + vatom[i][4] = -vatom[i][4]; + vatom[i][5] = -tmp; + } + } } /* ---------------------------------------------------------------------- @@ -277,22 +264,20 @@ void PairKIM::compute(int eflag , int vflag) void PairKIM::allocate() { - int n = atom->ntypes; + int n = atom->ntypes; - // allocate standard Pair class arrays - 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; + // allocate standard Pair class arrays + 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(cutsq,n+1,n+1,"pair:cutsq"); - // allocate mapping array - lmps_map_species_to_unique = new int[n+1]; + // allocate mapping array + lmps_map_species_to_unique = new int[n+1]; - allocated = 1; - - return; + allocated = 1; } /* ---------------------------------------------------------------------- @@ -301,56 +286,54 @@ void PairKIM::allocate() void PairKIM::settings(int narg, char **arg) { - // This is called when "pair_style kim ..." is read from input - // may be called multiple times - ++settings_call_count; - init_style_call_count = 0; + // This is called when "pair_style kim ..." is read from input + // may be called multiple times + ++settings_call_count; + init_style_call_count = 0; - if (narg != 1) - { - if ((narg > 0) && ((0 == strcmp("KIMvirial", arg[0])) || - (0 == strcmp("LAMMPSvirial", arg[0])))) - { - error->all(FLERR,"'KIMvirial' or 'LAMMPSvirial' not supported with " - "kim-api."); - } - else - error->all(FLERR,"Illegal pair_style command"); - } - // arg[0] is the KIM Model name + if (narg != 1) { + if ((narg > 0) && ((0 == strcmp("KIMvirial", arg[0])) || + (0 == strcmp("LAMMPSvirial", arg[0])))) { + error->all(FLERR,"'KIMvirial' or 'LAMMPSvirial' not supported with " + "kim-api."); + } else error->all(FLERR,"Illegal pair_style command"); + } + // arg[0] is the KIM Model name - lmps_using_molecular = (atom->molecular > 0); + lmps_using_molecular = (atom->molecular > 0); - // ensure we are in a clean state for KIM (needed on repeated call) - // first time called will do nothing... - kim_free(); + // ensure we are in a clean state for KIM (needed on repeated call) + // first time called will do nothing... + kim_free(); - // make sure things are allocated - if (allocated != 1) allocate(); + // make sure things are allocated + if (allocated != 1) allocate(); - // clear setflag to ensure coeff() is called after settings() - int n = atom->ntypes; - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; + // clear setflag to ensure coeff() is called after settings() + int n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; - // set lmps_* bool flags - set_lmps_flags(); + // set lmps_* bool flags + set_lmps_flags(); - // set KIM Model name - int nmlen = strlen(arg[0]); - if (kim_modelname != 0) - { - delete [] kim_modelname; - kim_modelname = 0; - } - kim_modelname = new char[nmlen+1]; - strcpy(kim_modelname, arg[0]); + // set KIM Model name + int nmlen = strlen(arg[0]); + if (kim_modelname != 0) { + delete [] kim_modelname; + kim_modelname = 0; + } + kim_modelname = new char[nmlen+1]; + strcpy(kim_modelname, arg[0]); - // initialize KIM Model - kim_init(); + // initialize KIM Model + kim_init(); - return; + // initialize LAMMPS Simulator model + if (simulatorModel) { + printf("LAMMPS simulator model: %s\n",kim_modelname); + } } /* ---------------------------------------------------------------------- @@ -359,91 +342,85 @@ void PairKIM::settings(int narg, char **arg) void PairKIM::coeff(int narg, char **arg) { - // This is called when "pair_coeff ..." is read from input - // may be called multiple times + // This is called when "pair_coeff ..." is read from input + // may be called multiple times - int i,j,n; + int i,j,n; - if (!allocated) allocate(); + if (!allocated) allocate(); - if (narg != 2 + atom->ntypes) - error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg != 2 + atom->ntypes) + error->all(FLERR,"Incorrect args for pair coefficients"); - // insure I,J args are * * + // insure I,J args are * * - if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); + 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); - 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 species to KIM elements + // lmps_map_species_to_unique[i] = + // which element the Ith atom type is + // lmps_num_unique_elements = # of unique elements + // lmps_unique_elements = list of element names - // read args that map atom species to KIM elements - // lmps_map_species_to_unique[i] = - // which element the Ith atom type is - // lmps_num_unique_elements = # of unique elements - // lmps_unique_elements = list of element names + // if called multiple times: update lmps_unique_elements + if (lmps_unique_elements) { + for (i = 0; i < lmps_num_unique_elements; i++) + delete [] lmps_unique_elements[i]; + delete [] lmps_unique_elements; + } + lmps_unique_elements = new char*[atom->ntypes]; + for (i = 0; i < atom->ntypes; i++) lmps_unique_elements[i] = 0; - // if called multiple times: update lmps_unique_elements - if (lmps_unique_elements) { - for (i = 0; i < lmps_num_unique_elements; i++) - delete [] lmps_unique_elements[i]; - delete [] lmps_unique_elements; - } - lmps_unique_elements = new char*[atom->ntypes]; - for (i = 0; i < atom->ntypes; i++) lmps_unique_elements[i] = 0; + // Assume all species arguments are valid + // errors will be detected by below + std::string atom_type_sym_list; + lmps_num_unique_elements = 0; + for (i = 2; i < narg; i++) { + atom_type_sym_list += std::string(" ") + arg[i]; + for (j = 0; j < lmps_num_unique_elements; j++) + if (strcmp(arg[i],lmps_unique_elements[j]) == 0) break; + lmps_map_species_to_unique[i-1] = j; + if (j == lmps_num_unique_elements) { + n = strlen(arg[i]) + 1; + lmps_unique_elements[j] = new char[n]; + strcpy(lmps_unique_elements[j],arg[i]); + lmps_num_unique_elements++; + } + } + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + if (lmps_map_species_to_unique[i] >= 0 && + lmps_map_species_to_unique[j] >= 0) { + setflag[i][j] = 1; + count++; + } + } + } - // Assume all species arguments are valid - // errors will be detected by below - std::string atom_type_sym_list; - lmps_num_unique_elements = 0; - for (i = 2; i < narg; i++) { - atom_type_sym_list += std::string(" ") + arg[i]; - for (j = 0; j < lmps_num_unique_elements; j++) - if (strcmp(arg[i],lmps_unique_elements[j]) == 0) break; - lmps_map_species_to_unique[i-1] = j; - if (j == lmps_num_unique_elements) { - n = strlen(arg[i]) + 1; - lmps_unique_elements[j] = new char[n]; - strcpy(lmps_unique_elements[j],arg[i]); - lmps_num_unique_elements++; - } - } + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - if (lmps_map_species_to_unique[i] >= 0 && - lmps_map_species_to_unique[j] >= 0) { - setflag[i][j] = 1; - count++; - } - } - } + if (simulatorModel) { + simulatorModel->AddTemplateMap("atom-type-sym-list", atom_type_sym_list); + simulatorModel->CloseTemplateMap(); - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); - - if (simulatorModel) - { - simulatorModel->AddTemplateMap("atom-type-sym-list", atom_type_sym_list); - simulatorModel->CloseTemplateMap(); - - error->all(FLERR,(simulatorModel->ToString()).c_str()); - } - else - { - // setup mapping between LAMMPS unique elements and KIM species codes - if (kim_particle_codes_ok) - { - delete [] kim_particle_codes; - kim_particle_codes = NULL; - kim_particle_codes_ok = false; - } - kim_particle_codes = new int[lmps_num_unique_elements]; - kim_particle_codes_ok = true; - for(int i = 0; i < lmps_num_unique_elements; i++){ + error->all(FLERR,(simulatorModel->ToString()).c_str()); + } else { + // setup mapping between LAMMPS unique elements and KIM species codes + if (kim_particle_codes_ok) { + delete [] kim_particle_codes; + kim_particle_codes = NULL; + kim_particle_codes_ok = false; + } + kim_particle_codes = new int[lmps_num_unique_elements]; + kim_particle_codes_ok = true; + for(int i = 0; i < lmps_num_unique_elements; i++) { int supported; int code; KIM_Model_GetSpeciesSupportAndCode( @@ -451,19 +428,15 @@ void PairKIM::coeff(int narg, char **arg) KIM_SpeciesName_FromString(lmps_unique_elements[i]), &supported, &code); - if (supported) + if (supported) { kim_particle_codes[i] = code; - else - { - std::stringstream msg; - msg << "create_kim_particle_codes: symbol not found: " - << lmps_unique_elements[i]; - error->all(FLERR, msg.str().c_str()); + } else { + std::string msg("create_kim_particle_codes: symbol not found: "); + msg += lmps_unique_elements[i]; + error->all(FLERR, msg.c_str()); } - } - } - - return; + } + } } /* ---------------------------------------------------------------------- @@ -472,57 +445,48 @@ void PairKIM::coeff(int narg, char **arg) void PairKIM::init_style() { - // This is called for each "run ...", "minimize ...", etc. read from input - ++init_style_call_count; + // This is called for each "run ...", "minimize ...", etc. read from input + ++init_style_call_count; - if (domain->dimension != 3) - error->all(FLERR,"PairKIM only works with 3D problems"); + if (domain->dimension != 3) + error->all(FLERR,"PairKIM only works with 3D problems"); - // setup lmps_stripped_neigh_list for neighbors of one atom, if needed - if (lmps_using_molecular) { - memory->destroy(lmps_stripped_neigh_list); - memory->create(lmps_stripped_neigh_list, - kim_number_of_neighbor_lists*neighbor->oneatom, - "pair:lmps_stripped_neigh_list"); - delete [] lmps_stripped_neigh_ptr; - lmps_stripped_neigh_ptr = new int*[kim_number_of_neighbor_lists]; - for (int i = 0; i < kim_number_of_neighbor_lists; ++i) - { - lmps_stripped_neigh_ptr[i] - = &(lmps_stripped_neigh_list[i*(neighbor->oneatom)]); - } + // setup lmps_stripped_neigh_list for neighbors of one atom, if needed + if (lmps_using_molecular) { + memory->destroy(lmps_stripped_neigh_list); + memory->create(lmps_stripped_neigh_list, + kim_number_of_neighbor_lists*neighbor->oneatom, + "pair:lmps_stripped_neigh_list"); + delete [] lmps_stripped_neigh_ptr; + lmps_stripped_neigh_ptr = new int*[kim_number_of_neighbor_lists]; + for (int i = 0; i < kim_number_of_neighbor_lists; ++i) + lmps_stripped_neigh_ptr[i] + = &(lmps_stripped_neigh_list[i*(neighbor->oneatom)]); + } - } + // make sure comm_reverse expects (at most) 9 values when newton is off + if (!lmps_using_newton) comm_reverse_off = 9; - // make sure comm_reverse expects (at most) 9 values when newton is off - if (!lmps_using_newton) comm_reverse_off = 9; + // request full neighbor + for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->id = i; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; - // request full neighbor - for (int i = 0; i < kim_number_of_neighbor_lists; ++i) - { - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = i; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; + if (modelWillNotRequestNeighborsOfNoncontributingParticles[i]) + neighbor->requests[irequest]->ghost = 0; + else + neighbor->requests[irequest]->ghost = 1; - if (modelWillNotRequestNeighborsOfNoncontributingParticles[i]) - { - neighbor->requests[irequest]->ghost = 0; - } - else - { - neighbor->requests[irequest]->ghost = 1; + // always want all owned/ghost pairs + neighbor->requests[irequest]->newton = 2; - } - // always want all owned/ghost pairs - neighbor->requests[irequest]->newton = 2; - // set cutoff - neighbor->requests[irequest]->cut = 1; - neighbor->requests[irequest]->cutoff - = kim_cutoff_values[i] + neighbor->skin; - } - - return; + // set cutoff + neighbor->requests[irequest]->cut = 1; + neighbor->requests[irequest]->cutoff + = kim_cutoff_values[i] + neighbor->skin; + } } /* ---------------------------------------------------------------------- @@ -541,154 +505,134 @@ void PairKIM::init_list(int id, NeighList *ptr) double PairKIM::init_one(int i, int j) { - // This is called once of each (unordered) i,j pair for each - // "run ...", "minimize ...", etc. read from input + // This is called once of each (unordered) i,j pair for each + // "run ...", "minimize ...", etc. read from input - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - return kim_global_influence_distance; + return kim_global_influence_distance; } /* ---------------------------------------------------------------------- */ int PairKIM::pack_reverse_comm(int n, int first, double *buf) { - int i,m,last; - double *fp; - fp = &(atom->f[0][0]); + int i,m,last; + double *fp; + fp = &(atom->f[0][0]); - m = 0; - last = first + n; - if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) - && - ((vflag_atom == 0) || - KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported))) - { - for (i = first; i < last; i++) - { - buf[m++] = fp[3*i+0]; - buf[m++] = fp[3*i+1]; - buf[m++] = fp[3*i+2]; - } - return m; - } - else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) && - (vflag_atom == 1) && - KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported)) - { - double *va=&(vatom[0][0]); - for (i = first; i < last; i++) - { - buf[m++] = fp[3*i+0]; - buf[m++] = fp[3*i+1]; - buf[m++] = fp[3*i+2]; + m = 0; + last = first + n; + if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && + ((vflag_atom == 0) || + KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported))) { + for (i = first; i < last; i++) { + buf[m++] = fp[3*i+0]; + buf[m++] = fp[3*i+1]; + buf[m++] = fp[3*i+2]; + } + return m; + } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) && + (vflag_atom == 1) && + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) { + buf[m++] = fp[3*i+0]; + buf[m++] = fp[3*i+1]; + buf[m++] = fp[3*i+2]; - buf[m++] = va[6*i+0]; - buf[m++] = va[6*i+1]; - buf[m++] = va[6*i+2]; - buf[m++] = va[6*i+3]; - buf[m++] = va[6*i+4]; - buf[m++] = va[6*i+5]; - } - return m; - } - else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) - && - (vflag_atom == 1) && - KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported)) - { - double *va=&(vatom[0][0]); - for (i = first; i < last; i++) - { - buf[m++] = va[6*i+0]; - buf[m++] = va[6*i+1]; - buf[m++] = va[6*i+2]; - buf[m++] = va[6*i+3]; - buf[m++] = va[6*i+4]; - buf[m++] = va[6*i+5]; - } - return m; - } - else - return 0; + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && + (vflag_atom == 1) && + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) { + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } else return 0; } /* ---------------------------------------------------------------------- */ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) { - int i,j,m; - double *fp; - fp = &(atom->f[0][0]); + int i,j,m; + double *fp; + fp = &(atom->f[0][0]); - m = 0; - if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) - && - ((vflag_atom == 0) || - KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported))) - { - for (i = 0; i < n; i++) - { - j = list[i]; - fp[3*j+0]+= buf[m++]; - fp[3*j+1]+= buf[m++]; - fp[3*j+2]+= buf[m++]; - } - } - else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) - && - (vflag_atom == 1) && - KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported)) - { - double *va=&(vatom[0][0]); - for (i = 0; i < n; i++) - { - j = list[i]; - fp[3*j+0]+= buf[m++]; - fp[3*j+1]+= buf[m++]; - fp[3*j+2]+= buf[m++]; + m = 0; + if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && + ((vflag_atom == 0) || + KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported))) { + for (i = 0; i < n; i++) { + j = list[i]; + fp[3*j+0]+= buf[m++]; + fp[3*j+1]+= buf[m++]; + fp[3*j+2]+= buf[m++]; + } + } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && + (vflag_atom == 1) && + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) { + j = list[i]; + fp[3*j+0]+= buf[m++]; + fp[3*j+1]+= buf[m++]; + fp[3*j+2]+= buf[m++]; - va[j*6+0]+=buf[m++]; - va[j*6+1]+=buf[m++]; - va[j*6+2]+=buf[m++]; - va[j*6+3]+=buf[m++]; - va[j*6+4]+=buf[m++]; - va[j*6+5]+=buf[m++]; - } - } - else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported) - && - (vflag_atom == 1) && - KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported)) - { - double *va=&(vatom[0][0]); - for (i = 0; i < n; i++) - { - j = list[i]; - va[j*6+0]+=buf[m++]; - va[j*6+1]+=buf[m++]; - va[j*6+2]+=buf[m++]; - va[j*6+3]+=buf[m++]; - va[j*6+4]+=buf[m++]; - va[j*6+5]+=buf[m++]; - } - } else { - ; // do nothing - } - - return; + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && + (vflag_atom == 1) && + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) { + j = list[i]; + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } else { + ; // do nothing + } } /* ---------------------------------------------------------------------- @@ -697,8 +641,34 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) double PairKIM::memory_usage() { - double bytes = 2 * lmps_maxalloc * sizeof(int); - return bytes; + double bytes = 2 * lmps_maxalloc * sizeof(int); + return bytes; +} + +/* ---------------------------------------------------------------------- + simulator model support functions +------------------------------------------------------------------------- */ + +void PairKIM::simulator_init() +{ + int dummy; + // do not try with suffixes for now. + simulator_class = force->new_pair("lj/cut",1,dummy); + force->store_style(simulator_style,"lj/cut",1); + printf("Simulator model init: %s -> %s\n", kim_modelname, simulator_style); + char **args = new char*[1]; + args[0] = (char *)"8.1500"; + simulator_class->settings(1,args); + delete[] args; +} + +void PairKIM::simulator_free() +{ + printf("Simulator model free: %s -> %s\n", kim_modelname, simulator_style); + delete[] simulator_style; + simulator_style = NULL; + delete simulator_class; + simulator_class = NULL; } /* ---------------------------------------------------------------------- @@ -708,148 +678,128 @@ double PairKIM::memory_usage() int PairKIM::get_neigh(void const * const dataObject, int const numberOfNeighborLists, double const * const cutoffs, - int const neighborListIndex, int const particleNumber, + int const neighborListIndex, + int const particleNumber, int * const numberOfNeighbors, int const ** const neighborsOfParticle) { - PairKIM const * const Model - = reinterpret_cast(dataObject); + PairKIM const * const Model + = reinterpret_cast(dataObject); - if (numberOfNeighborLists != Model->kim_number_of_neighbor_lists) - return true; - for (int i = 0; i < numberOfNeighborLists; ++i) - { - if (Model->kim_cutoff_values[i] < cutoffs[i]) return true; - } + if (numberOfNeighborLists != Model->kim_number_of_neighbor_lists) + return true; + for (int i = 0; i < numberOfNeighborLists; ++i) { + if (Model->kim_cutoff_values[i] < cutoffs[i]) return true; + } - // neighborListIndex and particleNumber are validated by KIM API + // neighborListIndex and particleNumber are validated by KIM API - // initialize numNeigh - *numberOfNeighbors = 0; + // initialize numNeigh + *numberOfNeighbors = 0; - NeighList * neiobj = Model->neighborLists[neighborListIndex]; + NeighList * neiobj = Model->neighborLists[neighborListIndex]; - int *numneigh, **firstneigh; - numneigh = neiobj->numneigh; // # of J neighbors for each I atom - firstneigh = neiobj->firstneigh; // ptr to 1st J int value of each I atom + int *numneigh, **firstneigh; + numneigh = neiobj->numneigh; // # of J neighbors for each I atom + firstneigh = neiobj->firstneigh; // ptr to 1st J int value of each I atom - *numberOfNeighbors = numneigh[particleNumber]; + *numberOfNeighbors = numneigh[particleNumber]; - // strip off neighbor mask for molecular systems - if (!Model->lmps_using_molecular) - *neighborsOfParticle = firstneigh[particleNumber]; - else - { - int n = *numberOfNeighbors; - int *ptr = firstneigh[particleNumber]; - int *lmps_stripped_neigh_list - = Model->lmps_stripped_neigh_ptr[neighborListIndex]; - for (int i = 0; i < n; i++) - lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; - *neighborsOfParticle = lmps_stripped_neigh_list; - } - return false; + // strip off neighbor mask for molecular systems + if (!Model->lmps_using_molecular) + *neighborsOfParticle = firstneigh[particleNumber]; + else { + int n = *numberOfNeighbors; + int *ptr = firstneigh[particleNumber]; + int *lmps_stripped_neigh_list + = Model->lmps_stripped_neigh_ptr[neighborListIndex]; + for (int i = 0; i < n; i++) + lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; + *neighborsOfParticle = lmps_stripped_neigh_list; + } + return false; } /* ---------------------------------------------------------------------- */ void PairKIM::kim_free() { - if (kim_init_ok) - { - int kimerror = KIM_Model_ComputeArgumentsDestroy(pkim, &pargs); - if (kimerror) - error->all(FLERR,"Unable to destroy Compute Arguments Object"); + if (kim_init_ok) { + int kimerror = KIM_Model_ComputeArgumentsDestroy(pkim, &pargs); + if (kimerror) + error->all(FLERR,"Unable to destroy Compute Arguments Object"); - KIM_Model_Destroy(&pkim); - } - kim_init_ok = false; - - return; + KIM_Model_Destroy(&pkim); + } + kim_init_ok = false; } /* ---------------------------------------------------------------------- */ void PairKIM::kim_init() { - int kimerror; + int kimerror; - // initialize KIM model - int requestedUnitsAccepted; - kimerror = KIM_Model_Create( - KIM_NUMBERING_zeroBased, - lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, - kim_modelname, - &requestedUnitsAccepted, - &pkim); - if (kimerror) - { - kimerror = KIM::SimulatorModel::Create(kim_modelname,&simulatorModel); - if (kimerror) - error->all(FLERR,"KIM ModelCreate failed"); - else - return; - } - else { - if (!requestedUnitsAccepted) { - error->all(FLERR,"KIM Model did not accept the requested unit system"); - } + // initialize KIM model + int requestedUnitsAccepted; + kimerror = KIM_Model_Create( + KIM_NUMBERING_zeroBased, + lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, + kim_modelname, + &requestedUnitsAccepted, + &pkim); + if (kimerror) { + kimerror = KIM::SimulatorModel::Create(kim_modelname,&simulatorModel); + if (kimerror) error->all(FLERR,"KIM ModelCreate failed"); + else return; + } else { + if (!requestedUnitsAccepted) + error->all(FLERR,"KIM Model did not accept the requested unit system"); - // check that the model does not require unknown capabilities - kimerror = check_for_routine_compatibility(); - if (kimerror) - { - error->all(FLERR, - "KIM Model requires unknown Routines. Unable to proceed."); - } + // check that the model does not require unknown capabilities + kimerror = check_for_routine_compatibility(); + if (kimerror) + error->all(FLERR, + "KIM Model requires unknown Routines. Unable to proceed."); - kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); - if (kimerror) - { - KIM_Model_Destroy(&pkim); - error->all(FLERR,"KIM ComputeArgumentsCreate failed"); - } - else - { - kim_init_ok = true; - } - } + kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); + if (kimerror) { + KIM_Model_Destroy(&pkim); + error->all(FLERR,"KIM ComputeArgumentsCreate failed"); + } else kim_init_ok = true; + } - // determine KIM Model capabilities (used in this function below) - set_kim_model_has_flags(); + // determine KIM Model capabilities (used in this function below) + set_kim_model_has_flags(); - KIM_Model_GetInfluenceDistance(pkim, &kim_global_influence_distance); - KIM_Model_GetNeighborListPointers( - pkim, - &kim_number_of_neighbor_lists, - &kim_cutoff_values, - &modelWillNotRequestNeighborsOfNoncontributingParticles); - if (neighborLists) - { - delete [] neighborLists; - neighborLists = 0; - } - neighborLists = new NeighList*[kim_number_of_neighbor_lists]; + KIM_Model_GetInfluenceDistance(pkim, &kim_global_influence_distance); + KIM_Model_GetNeighborListPointers( + pkim, + &kim_number_of_neighbor_lists, + &kim_cutoff_values, + &modelWillNotRequestNeighborsOfNoncontributingParticles); + if (neighborLists) { + delete [] neighborLists; + neighborLists = 0; + } + neighborLists = new NeighList*[kim_number_of_neighbor_lists]; - kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, - KIM_COMPUTE_ARGUMENT_NAME_numberOfParticles, - &lmps_local_tot_num_atoms); - if (KIM_SupportStatus_NotEqual(kim_model_support_for_energy, - KIM_SUPPORT_STATUS_notSupported)) - kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble(pargs, - KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, - &(eng_vdwl)); + kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, + KIM_COMPUTE_ARGUMENT_NAME_numberOfParticles, + &lmps_local_tot_num_atoms); + if (KIM_SupportStatus_NotEqual(kim_model_support_for_energy, + KIM_SUPPORT_STATUS_notSupported)) + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble(pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, + &(eng_vdwl)); - kimerror = KIM_ComputeArguments_SetCallbackPointer(pargs, - KIM_COMPUTE_CALLBACK_NAME_GetNeighborList, - KIM_LANGUAGE_NAME_cpp, - reinterpret_cast(get_neigh), - reinterpret_cast(this)); + kimerror = KIM_ComputeArguments_SetCallbackPointer(pargs, + KIM_COMPUTE_CALLBACK_NAME_GetNeighborList, + KIM_LANGUAGE_NAME_cpp, + reinterpret_cast(get_neigh), + reinterpret_cast(this)); - if (kimerror) - error->all(FLERR,"Unable to register KIM pointers"); - - return; + if (kimerror) error->all(FLERR,"Unable to register KIM pointers"); } /* ---------------------------------------------------------------------- */ @@ -858,16 +808,14 @@ void PairKIM::set_argument_pointers() { int kimerror; kimerror = KIM_ComputeArguments_SetArgumentPointerDouble( - pargs, KIM_COMPUTE_ARGUMENT_NAME_coordinates, &(atom->x[0][0])); + pargs, KIM_COMPUTE_ARGUMENT_NAME_coordinates, &(atom->x[0][0])); // Set KIM pointer appropriately for particalEnergy if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, KIM_SUPPORT_STATUS_required) - && (eflag_atom != 1)) - { + && (eflag_atom != 1)) { // reallocate per-atom energy array if necessary - if (atom->nmax > maxeatom) - { + if (atom->nmax > maxeatom) { maxeatom = atom->nmax; memory->destroy(eatom); memory->create(eatom,comm->nthreads*maxeatom,"pair:eatom"); @@ -875,31 +823,25 @@ void PairKIM::set_argument_pointers() } if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, KIM_SUPPORT_STATUS_optional) - && (eflag_atom != 1)) - { + && (eflag_atom != 1)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( - pargs, - KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, - reinterpret_cast(NULL)); - } - else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleEnergy, - KIM_SUPPORT_STATUS_notSupported)) - { + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, + reinterpret_cast(NULL)); + } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleEnergy, + KIM_SUPPORT_STATUS_notSupported)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, eatom); } // Set KIM pointer appropriately for forces if (KIM_SupportStatus_Equal(kim_model_support_for_forces, - KIM_SUPPORT_STATUS_notSupported)) - { + KIM_SUPPORT_STATUS_notSupported)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( - pargs, - KIM_COMPUTE_ARGUMENT_NAME_partialForces, - reinterpret_cast(NULL)); - } - else - { + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialForces, + reinterpret_cast(NULL)); + } else { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialForces, &(atom->f[0][0])); } @@ -907,11 +849,9 @@ void PairKIM::set_argument_pointers() // Set KIM pointer appropriately for particleVirial if (KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, KIM_SUPPORT_STATUS_required) - && (vflag_atom != 1)) - { + && (vflag_atom != 1)) { // reallocate per-atom virial array if necessary - if (atom->nmax > maxeatom) - { + if (atom->nmax > maxeatom) { maxvatom = atom->nmax; memory->destroy(vatom); memory->create(vatom,comm->nthreads*maxvatom,6,"pair:vatom"); @@ -919,84 +859,72 @@ void PairKIM::set_argument_pointers() } if (KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, KIM_SUPPORT_STATUS_optional) - && (vflag_atom != 1)) - { + && (vflag_atom != 1)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( - pargs, - KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial, - reinterpret_cast(NULL)); - } - else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, - KIM_SUPPORT_STATUS_notSupported)) - { + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial, + reinterpret_cast(NULL)); + } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( - pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, &(vatom[0][0])); + pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, &(vatom[0][0])); } - if (kimerror) - { - error->all(FLERR,"Unable to set KIM argument pointers"); - } - - return; + if (kimerror) error->all(FLERR,"Unable to set KIM argument pointers"); } /* ---------------------------------------------------------------------- */ void PairKIM::set_lmps_flags() { - // determint if newton is on or off - lmps_using_newton = (force->newton_pair == 1); + // determint if newton is on or off + lmps_using_newton = (force->newton_pair == 1); - // determine if running with pair hybrid - if (force->pair_match("hybrid",0)) - { - error->all(FLERR,"pair_kim does not support hybrid"); - } + // determine if running with pair hybrid + if (force->pair_match("hybrid",0)) + error->all(FLERR,"pair_kim does not support hybrid"); - // determine unit system and set lmps_units flag - if ((strcmp(update->unit_style,"real")==0)) { - lmps_units = REAL; - lengthUnit = KIM_LENGTH_UNIT_A; - energyUnit = KIM_ENERGY_UNIT_kcal_mol; - chargeUnit = KIM_CHARGE_UNIT_e; - temperatureUnit = KIM_TEMPERATURE_UNIT_K; - timeUnit = KIM_TIME_UNIT_fs; - } else if ((strcmp(update->unit_style,"metal")==0)) { - lmps_units = METAL; - lengthUnit = KIM_LENGTH_UNIT_A; - energyUnit = KIM_ENERGY_UNIT_eV; - chargeUnit = KIM_CHARGE_UNIT_e; - temperatureUnit = KIM_TEMPERATURE_UNIT_K; - timeUnit = KIM_TIME_UNIT_ps; - } else if ((strcmp(update->unit_style,"si")==0)) { - lmps_units = SI; - lengthUnit = KIM_LENGTH_UNIT_m; - energyUnit = KIM_ENERGY_UNIT_J; - chargeUnit = KIM_CHARGE_UNIT_C; - temperatureUnit = KIM_TEMPERATURE_UNIT_K; - timeUnit = KIM_TIME_UNIT_s; - } else if ((strcmp(update->unit_style,"cgs")==0)) { - lmps_units = CGS; - lengthUnit = KIM_LENGTH_UNIT_cm; - energyUnit = KIM_ENERGY_UNIT_erg; - chargeUnit = KIM_CHARGE_UNIT_statC; - temperatureUnit = KIM_TEMPERATURE_UNIT_K; - timeUnit = KIM_TIME_UNIT_s; - } else if ((strcmp(update->unit_style,"electron")==0)) { - lmps_units = ELECTRON; - lengthUnit = KIM_LENGTH_UNIT_Bohr; - energyUnit = KIM_ENERGY_UNIT_Hartree; - chargeUnit = KIM_CHARGE_UNIT_e; - temperatureUnit = KIM_TEMPERATURE_UNIT_K; - timeUnit = KIM_TIME_UNIT_fs; - } else if ((strcmp(update->unit_style,"lj")==0)) { - error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); - } else { - error->all(FLERR,"Unknown unit_style"); - } - - return; + // determine unit system and set lmps_units flag + if ((strcmp(update->unit_style,"real")==0)) { + lmps_units = REAL; + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_kcal_mol; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; + } else if ((strcmp(update->unit_style,"metal")==0)) { + lmps_units = METAL; + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_eV; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_ps; + } else if ((strcmp(update->unit_style,"si")==0)) { + lmps_units = SI; + lengthUnit = KIM_LENGTH_UNIT_m; + energyUnit = KIM_ENERGY_UNIT_J; + chargeUnit = KIM_CHARGE_UNIT_C; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; + } else if ((strcmp(update->unit_style,"cgs")==0)) { + lmps_units = CGS; + lengthUnit = KIM_LENGTH_UNIT_cm; + energyUnit = KIM_ENERGY_UNIT_erg; + chargeUnit = KIM_CHARGE_UNIT_statC; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; + } else if ((strcmp(update->unit_style,"electron")==0)) { + lmps_units = ELECTRON; + lengthUnit = KIM_LENGTH_UNIT_Bohr; + energyUnit = KIM_ENERGY_UNIT_Hartree; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; + } else if ((strcmp(update->unit_style,"lj")==0)) { + error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); + } else { + error->all(FLERR,"Unknown unit_style"); + } } /* ---------------------------------------------------------------------- */ @@ -1007,8 +935,7 @@ int PairKIM::check_for_routine_compatibility() int numberOfModelRoutineNames; KIM_MODEL_ROUTINE_NAME_GetNumberOfModelRoutineNames( &numberOfModelRoutineNames); - for (int i = 0; i < numberOfModelRoutineNames; ++i) - { + for (int i = 0; i < numberOfModelRoutineNames; ++i) { KIM_ModelRoutineName modelRoutineName; KIM_MODEL_ROUTINE_NAME_GetModelRoutineName(i, &modelRoutineName); @@ -1016,10 +943,9 @@ int PairKIM::check_for_routine_compatibility() int required; int error = KIM_Model_IsRoutinePresent( pkim, modelRoutineName, &present, &required); - if (error) { return true; } + if (error) return true; - if ((present == true) && (required == true)) - { + if ((present == true) && (required == true)) { if (!(KIM_ModelRoutineName_Equal(modelRoutineName, KIM_MODEL_ROUTINE_NAME_Create) || KIM_ModelRoutineName_Equal( @@ -1033,8 +959,9 @@ int PairKIM::check_for_routine_compatibility() modelRoutineName, KIM_MODEL_ROUTINE_NAME_ComputeArgumentsDestroy) || KIM_ModelRoutineName_Equal(modelRoutineName, - KIM_MODEL_ROUTINE_NAME_Destroy))) - { return true; } + KIM_MODEL_ROUTINE_NAME_Destroy))) { + return true; + } } } @@ -1049,8 +976,7 @@ void PairKIM::set_kim_model_has_flags() int numberOfComputeArgumentNames; KIM_COMPUTE_ARGUMENT_NAME_GetNumberOfComputeArgumentNames( &numberOfComputeArgumentNames); - for (int i = 0; i < numberOfComputeArgumentNames; ++i) - { + for (int i = 0; i < numberOfComputeArgumentNames; ++i) { KIM_ComputeArgumentName computeArgumentName; KIM_COMPUTE_ARGUMENT_NAME_GetComputeArgumentName( i, &computeArgumentName); @@ -1059,32 +985,24 @@ void PairKIM::set_kim_model_has_flags() pargs, computeArgumentName, &supportStatus); if (KIM_ComputeArgumentName_Equal(computeArgumentName, - KIM_COMPUTE_ARGUMENT_NAME_partialEnergy) - ) + KIM_COMPUTE_ARGUMENT_NAME_partialEnergy)) kim_model_support_for_energy = supportStatus; else if (KIM_ComputeArgumentName_Equal( - computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialForces) - ) + computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialForces)) kim_model_support_for_forces = supportStatus; - else if - (KIM_ComputeArgumentName_Equal( - computeArgumentName, - KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy)\ - ) + else if (KIM_ComputeArgumentName_Equal( + computeArgumentName, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy)) kim_model_support_for_particleEnergy = supportStatus; - else if - (KIM_ComputeArgumentName_Equal( - computeArgumentName, - KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial) - ) + else if (KIM_ComputeArgumentName_Equal( + computeArgumentName, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial)) kim_model_support_for_particleVirial = supportStatus; - else if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required) - ) - { - std::stringstream msg; - msg << "KIM Model requires unsupported compute argument: " - << KIM_ComputeArgumentName_ToString(computeArgumentName); - error->all(FLERR, msg.str().c_str()); + else if (KIM_SupportStatus_Equal(supportStatus, + KIM_SUPPORT_STATUS_required)) { + std::string msg("KIM Model requires unsupported compute argument: "); + msg += KIM_ComputeArgumentName_ToString(computeArgumentName); + error->all(FLERR, msg.c_str()); } } @@ -1111,20 +1029,15 @@ void PairKIM::set_kim_model_has_flags() int numberOfComputeCallbackNames; KIM_COMPUTE_CALLBACK_NAME_GetNumberOfComputeCallbackNames( &numberOfComputeCallbackNames); - for (int i = 0; i < numberOfComputeCallbackNames; ++i) - { + for (int i = 0; i < numberOfComputeCallbackNames; ++i) { KIM_ComputeCallbackName computeCallbackName; - KIM_COMPUTE_CALLBACK_NAME_GetComputeCallbackName( - i, &computeCallbackName); + KIM_COMPUTE_CALLBACK_NAME_GetComputeCallbackName(i, &computeCallbackName); KIM_SupportStatus supportStatus; - KIM_ComputeArguments_GetCallbackSupportStatus( - pargs, computeCallbackName, &supportStatus); + KIM_ComputeArguments_GetCallbackSupportStatus(pargs, + computeCallbackName, + &supportStatus); if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required)) - { error->all(FLERR,"KIM Model requires unsupported compute callback"); - } } - - return; } diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index dcfb4a8af0..37a6be1e5b 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: Ryan S. Elliott (UMinn) + Contributing authors: Ryan S. Elliott (UMinn), Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -65,110 +65,115 @@ PairStyle(kim,PairKIM) // includes from KIM & LAMMPS class KIM_API_model; #include "pair.h" + extern "C" { #include "KIM_SimulatorHeaders.h" } #include "KIM_SimulatorModel.hpp" -#include - namespace LAMMPS_NS { - class PairKIM : public Pair { - public: - PairKIM(class LAMMPS*); - ~PairKIM(); +class PairKIM : public Pair { + public: + PairKIM(class LAMMPS*); + ~PairKIM(); - // LAMMPS Pair class virtual function prototypes - virtual void compute(int, int); - virtual void settings(int, char**); - virtual void coeff(int, char**); - virtual void init_style(); - virtual void init_list(int id, NeighList *ptr); - virtual double init_one(int, int); - virtual int pack_reverse_comm(int, int, double*); - virtual void unpack_reverse_comm(int, int*, double*); - virtual double memory_usage(); + // LAMMPS Pair class virtual function prototypes + virtual void compute(int, int); + virtual void settings(int, char**); + virtual void coeff(int, char**); + virtual void init_style(); + virtual void init_list(int id, NeighList *ptr); + virtual double init_one(int, int); + virtual int pack_reverse_comm(int, int, double*); + virtual void unpack_reverse_comm(int, int*, double*); + virtual double memory_usage(); - protected: - // (nearly) all bool flags are not initialized in constructor, but set - // explicitly in the indicated function. All other data members are - // initialized in constructor - int settings_call_count; - int init_style_call_count; + protected: + // (nearly) all bool flags are not initialized in constructor, but set + // explicitly in the indicated function. All other data members are + // initialized in constructor + int settings_call_count; + int init_style_call_count; - // values set in settings() - char* kim_modelname; + // values set in settings() + char* kim_modelname; - // values set in coeff() + // values set in coeff() - // values set in allocate(), called by coeff() - virtual void allocate(); - int* lmps_map_species_to_unique; + // values set in allocate(), called by coeff() + virtual void allocate(); + int* lmps_map_species_to_unique; - // values set in coeff(), after calling allocate() - char** lmps_unique_elements; // names of unique elements given - // in pair_coeff command - int lmps_num_unique_elements; + // values set in coeff(), after calling allocate() + char** lmps_unique_elements; // names of unique elements given + // in pair_coeff command + int lmps_num_unique_elements; - // values set in set_lmps_flags(), called from init_style() - bool lmps_using_newton; - bool lmps_using_molecular; - enum unit_sys {REAL, METAL, SI, CGS, ELECTRON}; - unit_sys lmps_units; - KIM_LengthUnit lengthUnit; - KIM_EnergyUnit energyUnit; - KIM_ChargeUnit chargeUnit; - KIM_TemperatureUnit temperatureUnit; - KIM_TimeUnit timeUnit; + // values set in set_lmps_flags(), called from init_style() + bool lmps_using_newton; + bool lmps_using_molecular; + enum unit_sys {REAL, METAL, SI, CGS, ELECTRON}; + unit_sys lmps_units; + KIM_LengthUnit lengthUnit; + KIM_EnergyUnit energyUnit; + KIM_ChargeUnit chargeUnit; + KIM_TemperatureUnit temperatureUnit; + KIM_TimeUnit timeUnit; - KIM::SimulatorModel * simulatorModel; - KIM_Model * pkim; - KIM_ComputeArguments * pargs; + KIM::SimulatorModel * simulatorModel; + KIM_Model * pkim; + KIM_ComputeArguments * pargs; - // values set in set_kim_model_has_flags(), called by kim_init() - KIM_SupportStatus kim_model_support_for_energy; - KIM_SupportStatus kim_model_support_for_forces; - KIM_SupportStatus kim_model_support_for_particleEnergy; - KIM_SupportStatus kim_model_support_for_particleVirial; + // values set in set_kim_model_has_flags(), called by kim_init() + KIM_SupportStatus kim_model_support_for_energy; + KIM_SupportStatus kim_model_support_for_forces; + KIM_SupportStatus kim_model_support_for_particleEnergy; + KIM_SupportStatus kim_model_support_for_particleVirial; - // values set in kim_init() - bool kim_init_ok; - int lmps_local_tot_num_atoms; - double kim_global_influence_distance; // KIM Model cutoff value - int kim_number_of_neighbor_lists; - double const * kim_cutoff_values; - int const * modelWillNotRequestNeighborsOfNoncontributingParticles; - class NeighList ** neighborLists; + // values set in kim_init() + bool kim_init_ok; + int lmps_local_tot_num_atoms; + double kim_global_influence_distance; // KIM Model cutoff value + int kim_number_of_neighbor_lists; + double const * kim_cutoff_values; + int const * modelWillNotRequestNeighborsOfNoncontributingParticles; + class NeighList ** neighborLists; - // values set in init_style() - bool kim_particle_codes_ok; - int *kim_particle_codes; + // values set in init_style() + bool kim_particle_codes_ok; + int *kim_particle_codes; - // values set in compute() - int lmps_maxalloc; // max allocated memory value - int* kim_particleSpecies; // array of KIM particle species - int* kim_particleContributing; // array of KIM particle contributing - int* lmps_stripped_neigh_list; // neighbors of one atom, used when LAMMPS - // is in molecular mode - int** lmps_stripped_neigh_ptr; // pointer into lists + // values set in compute() + int lmps_maxalloc; // max allocated memory value + int* kim_particleSpecies; // array of KIM particle species + int* kim_particleContributing; // array of KIM particle contributing + int* lmps_stripped_neigh_list; // neighbors of one atom, used when LAMMPS + // is in molecular mode + int** lmps_stripped_neigh_ptr; // pointer into lists - // KIM specific helper functions - virtual void set_contributing(); - virtual void kim_init(); - virtual void kim_free(); - virtual void set_argument_pointers(); - virtual void set_lmps_flags(); - virtual void set_kim_model_has_flags(); - virtual int check_for_routine_compatibility(); - // static methods used as callbacks from KIM - static int get_neigh( - void const * const dataObject, - int const numberOfCutoffs, double const * const cutoffs, - int const neighborListIndex, int const particleNumber, - int * const numberOfNeighbors, - int const ** const neighborsOfParticle); - }; + // LAMMPS Simulator model support + Pair *simulator_class; + char *simulator_style; + virtual void simulator_init(); + virtual void simulator_free(); + + // KIM specific helper functions + virtual void set_contributing(); + virtual void kim_init(); + virtual void kim_free(); + virtual void set_argument_pointers(); + virtual void set_lmps_flags(); + virtual void set_kim_model_has_flags(); + virtual int check_for_routine_compatibility(); + // static methods used as callbacks from KIM + static int get_neigh( + void const * const dataObject, + int const numberOfCutoffs, double const * const cutoffs, + int const neighborListIndex, int const particleNumber, + int * const numberOfNeighbors, + int const ** const neighborsOfParticle); +}; } #endif From 6d84bd6138fedd3738979e791244ccc4f38b6606 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Fri, 10 May 2019 10:34:01 -0600 Subject: [PATCH 074/760] 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 a1f421cd5400de9cb0c486cd7b32e936f09c9eb0 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 11 May 2019 12:41:54 -0600 Subject: [PATCH 075/760] 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 076/760] 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 077/760] 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 078/760] 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 31789ad03bd7e31a009bbd1a9df26a98068574b3 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 May 2019 17:44:35 -0600 Subject: [PATCH 079/760] 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 080/760] 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 98d9c45ad97be8e2f26a7310d2f0627429dc4a43 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Wed, 15 May 2019 17:18:24 -0600 Subject: [PATCH 081/760] 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 082/760] 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 5b71b3fc57f8cc9bd935202f35db0538006e37e9 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 16 May 2019 21:51:24 -0600 Subject: [PATCH 083/760] 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 084/760] 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 085/760] 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 fbb78e7b78a38a1734bc0abd37e0e3000fe07588 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 17 May 2019 15:04:14 -0600 Subject: [PATCH 086/760] 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 601746b565a447508c91d24eb4ef2ad9488b9f32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 13:09:25 -0400 Subject: [PATCH 087/760] 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 088/760] 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 32379d2d840a7b5421823ba1f01aed68028d5c6b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 21:07:15 -0400 Subject: [PATCH 089/760] add JSON tokenizer to utils library --- src/utils.cpp | 376 +++++++++++++++++++++++++++++++++++++++++++++++++- src/utils.h | 2 + 2 files changed, 376 insertions(+), 2 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index c3c173a73f..77ff8ef749 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -12,6 +12,8 @@ ------------------------------------------------------------------------- */ #include +#include +#include #include "utils.h" #include "error.h" @@ -46,9 +48,68 @@ extern "C" { - /** Match text against a (simplified) regular expression - * (regexp will be compiled automatically). */ +/** Match text against a (simplified) regular expression + * (regexp will be compiled automatically). */ static int re_match(const char *text, const char *pattern); + +/** + * JSON type identifier. Basic types are: + * o Object + * o Array + * o String + * o Other primitive: number, boolean (true/false) or null + */ + typedef enum { + JSMN_UNDEFINED = 0, + JSMN_OBJECT = 1, + JSMN_ARRAY = 2, + JSMN_STRING = 3, + JSMN_PRIMITIVE = 4 + } jsmntype_t; + + enum jsmnerr { + /* Not enough tokens were provided */ + JSMN_ERROR_NOMEM = -1, + /* Invalid character inside JSON string */ + JSMN_ERROR_INVAL = -2, + /* The string is not a full JSON packet, more bytes expected */ + JSMN_ERROR_PART = -3 + }; + +/** + * JSON token description. + * type type (object, array, string etc.) + * start start position in JSON data string + * end end position in JSON data string + */ + typedef struct { + jsmntype_t type; + int start; + int end; + int size; + } jsmntok_t; + +/** + * JSON parser. Contains an array of token blocks available. Also stores + * the string being parsed now and current position in that string + */ + typedef struct { + unsigned int pos; /* offset in the JSON string */ + unsigned int toknext; /* next token to allocate */ + int toksuper; /* superior token node, e.g parent object or array */ + } jsmn_parser; + +/** + * Create JSON parser over an array of tokens + */ + static void jsmn_init(jsmn_parser *parser); + +/** + * Run JSON parser. It parses a JSON data string into and array of tokens, each describing + * a single JSON object. + */ + static int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, + jsmntok_t *tokens, unsigned int num_tokens); } using namespace LAMMPS_NS; @@ -121,6 +182,72 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, return; } + + +int utils::kim_simulator_json_parse(int argc, char **argv) +{ + FILE *fp; + jsmn_parser p; + jsmntok_t *tok; + char *buf; + size_t nbytes; + + if (argc != 2) { + printf("usage: %s \n",argv[0]); + return 1; + } + + // open JSON file + + fp = fopen(argv[1],"rb"); + if (!fp) { + perror("Error opening JSON file"); + return 2; + } + + // determine file size and allocate suitable buffer + + fseek(fp,0,SEEK_END); + long int flen = ftell(fp); + rewind(fp); + buf = new char[flen]; + nbytes = fread(buf,1,flen,fp); + fclose(fp); + + // parse once to count number of tokens + + jsmn_init(&p); + int ntok = jsmn_parse(&p,buf,nbytes,NULL,1); + if (ntok < 0) { + printf("failed to parse JSON: %d\n",ntok); + return 3; + } + + // allocate token storage and parse again + + jsmn_init(&p); + tok = new jsmntok_t[ntok]; + int retval = jsmn_parse(&p,buf,nbytes,tok,ntok); + if ((retval < 1) || (tok[0].type != JSMN_OBJECT)) { + printf("failed to parse JSON: no root object\n"); + return 4; + } + + for (int i=1; i < retval; ++i) { + printf("key: %.*s\n",tok[i].end-tok[i].start,buf+tok[i].start); + if (tok[i+1].type == JSMN_ARRAY) { + printf("value is array of size %d\n",tok[i+1].size); + i += tok[i+1].size + 1; + } else { + ++i; + } + } + + delete [] buf; + delete [] tok; + return 0; +} + /* ------------------------------------------------------------------ */ extern "C" { @@ -437,4 +564,249 @@ extern "C" { return 0; } + + +/** + * Allocates a fresh unused token from the token pool. + */ + static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, + jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *tok; + if (parser->toknext >= num_tokens) { + return NULL; + } + tok = &tokens[parser->toknext++]; + tok->start = tok->end = -1; + tok->size = 0; + return tok; + } + +/** + * Fills token type and boundaries. + */ + static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, + int start, int end) { + token->type = type; + token->start = start; + token->end = end; + token->size = 0; + } + +/** + * Fills next available token with JSON primitive. + */ + static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, + size_t len, jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *token; + int start; + + start = parser->pos; + + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + switch (js[parser->pos]) { + case '\t' : case '\r' : case '\n' : case ' ' : + case ',' : case ']' : case '}' : + goto found; + } + if (js[parser->pos] < 32 || js[parser->pos] >= 127) { + parser->pos = start; + return JSMN_ERROR_INVAL; + } + } + + found: + if (tokens == NULL) { + parser->pos--; + return 0; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) { + parser->pos = start; + return JSMN_ERROR_NOMEM; + } + jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos); + parser->pos--; + return 0; + } + +/** + * Fills next token with JSON string. + */ + static int jsmn_parse_string(jsmn_parser *parser, const char *js, + size_t len, jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *token; + + int start = parser->pos; + + parser->pos++; + + /* Skip starting quote */ + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + char c = js[parser->pos]; + + /* Quote: end of string */ + if (c == '\"') { + if (tokens == NULL) { + return 0; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) { + parser->pos = start; + return JSMN_ERROR_NOMEM; + } + jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos); + return 0; + } + + /* Backslash: Quoted symbol expected */ + if (c == '\\' && parser->pos + 1 < len) { + int i; + parser->pos++; + switch (js[parser->pos]) { + /* Allowed escaped symbols */ + case '\"': case '/' : case '\\' : case 'b' : + case 'f' : case 'r' : case 'n' : case 't' : + break; + /* Allows escaped symbol \uXXXX */ + case 'u': + parser->pos++; + for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) { + /* If it isn't a hex character we have an error */ + if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */ + (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */ + (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */ + parser->pos = start; + return JSMN_ERROR_INVAL; + } + parser->pos++; + } + parser->pos--; + break; + /* Unexpected symbol */ + default: + parser->pos = start; + return JSMN_ERROR_INVAL; + } + } + } + parser->pos = start; + return JSMN_ERROR_PART; + } + +/** + * Parse JSON string and fill tokens. + */ + int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, + jsmntok_t *tokens, unsigned int num_tokens) { + int r; + int i; + jsmntok_t *token; + int count = parser->toknext; + + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + char c; + jsmntype_t type; + + c = js[parser->pos]; + switch (c) { + case '{': case '[': + count++; + if (tokens == NULL) { + break; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) + return JSMN_ERROR_NOMEM; + if (parser->toksuper != -1) { + tokens[parser->toksuper].size++; + } + token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY); + token->start = parser->pos; + parser->toksuper = parser->toknext - 1; + break; + case '}': case ']': + if (tokens == NULL) + break; + type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY); + for (i = parser->toknext - 1; i >= 0; i--) { + token = &tokens[i]; + if (token->start != -1 && token->end == -1) { + if (token->type != type) { + return JSMN_ERROR_INVAL; + } + parser->toksuper = -1; + token->end = parser->pos + 1; + break; + } + } + /* Error if unmatched closing bracket */ + if (i == -1) return JSMN_ERROR_INVAL; + for (; i >= 0; i--) { + token = &tokens[i]; + if (token->start != -1 && token->end == -1) { + parser->toksuper = i; + break; + } + } + break; + case '\"': + r = jsmn_parse_string(parser, js, len, tokens, num_tokens); + if (r < 0) return r; + count++; + if (parser->toksuper != -1 && tokens != NULL) + tokens[parser->toksuper].size++; + break; + case '\t' : case '\r' : case '\n' : case ' ': + break; + case ':': + parser->toksuper = parser->toknext - 1; + break; + case ',': + if (tokens != NULL && parser->toksuper != -1 && + tokens[parser->toksuper].type != JSMN_ARRAY && + tokens[parser->toksuper].type != JSMN_OBJECT) { + for (i = parser->toknext - 1; i >= 0; i--) { + if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) { + if (tokens[i].start != -1 && tokens[i].end == -1) { + parser->toksuper = i; + break; + } + } + } + } + break; + /* In non-strict mode every unquoted value is a primitive */ + default: + r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens); + if (r < 0) return r; + count++; + if (parser->toksuper != -1 && tokens != NULL) + tokens[parser->toksuper].size++; + break; + + } + } + + if (tokens != NULL) { + for (i = parser->toknext - 1; i >= 0; i--) { + /* Unmatched opened object or array */ + if (tokens[i].start != -1 && tokens[i].end == -1) { + return JSMN_ERROR_PART; + } + } + } + + return count; + } + +/** + * Creates a new parser based over a given buffer with an array of tokens + * available. + */ + void jsmn_init(jsmn_parser *parser) { + parser->pos = 0; + parser->toknext = 0; + parser->toksuper = -1; + } } + diff --git a/src/utils.h b/src/utils.h index 2596fcd774..e908dcae81 100644 --- a/src/utils.h +++ b/src/utils.h @@ -66,6 +66,8 @@ namespace LAMMPS_NS { */ void sfgets(const char *srcname, int srcline, char *s, int size, FILE *fp, const char *filename, Error *error); + + int kim_simulator_json_parse(int argc, char **argv); } } From b779bf524afaf41e95ad4f9fb4fe7c622022825e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 May 2019 10:09:25 -0400 Subject: [PATCH 090/760] use KIM-API calls to query simulator model info --- src/KIM/pair_kim.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index d75d960355..fff84a1821 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -13,6 +13,7 @@ /* ---------------------------------------------------------------------- Contributing authors: Ryan S. Elliott (UMinn) + Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -61,6 +62,7 @@ #include "pair_kim.h" #include "atom.h" #include "comm.h" +#include "universe.h" #include "force.h" #include "neighbor.h" #include "neigh_list.h" @@ -132,6 +134,14 @@ PairKIM::~PairKIM() // clean up kim_modelname if (kim_modelname != 0) delete [] kim_modelname; + if (simulatorModel) { + KIM::SimulatorModel::Destroy(&simulatorModel); + + // clean up KIM interface (if necessary) + kim_free(); + return; + } + // clean up lammps atom species number to unique particle names mapping if (lmps_unique_elements) for (int i = 0; i < lmps_num_unique_elements; i++) @@ -330,9 +340,40 @@ void PairKIM::settings(int narg, char **arg) // initialize KIM Model kim_init(); - // initialize LAMMPS Simulator model + // Set up and initialize LAMMPS Simulator model + if (simulatorModel) { - printf("LAMMPS simulator model: %s\n",kim_modelname); + const std::string *sim_name, *sim_version; + simulatorModel->GetSimulatorName(&sim_name); + simulatorModel->GetSimulatorVersion(&sim_version); + + if (comm->me == 0) { + std::string mesg("Using KIM Simulator Model : "); + mesg += kim_modelname; + mesg += "\n"; + mesg += "For Simulator : "; + mesg += *sim_name + " " + *sim_version + "\n"; + mesg += "Running on : LAMMPS "; + mesg += universe->version; + mesg += "\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + + if (*sim_name != "LAMMPS") + error->all(FLERR,"Incompatible KIM Simulator Model"); + + int sim_fields, sim_lines; + const std::string *sim_field, *sim_value; + simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + printf("sim_fields=%d\n",sim_fields); + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + printf("i=%d: %s (%d)\n",i,sim_field->c_str(),sim_lines); +// for (int j=0; j < +// simulatorModel->GetSimulatorFieldLine(i, + } } } From 56cf97e4970508b42ef4842e6f0de9ecfc1a9618 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 20 May 2019 13:53:17 -0400 Subject: [PATCH 091/760] hard code creation of simulator model pair style for now --- src/KIM/pair_kim.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index fff84a1821..87a6d636d2 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -371,9 +371,25 @@ void PairKIM::settings(int narg, char **arg) for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); printf("i=%d: %s (%d)\n",i,sim_field->c_str(),sim_lines); -// for (int j=0; j < -// simulatorModel->GetSimulatorFieldLine(i, } + // hard code result for now: + + int dummy; + const char *simulator_style = (const char*)"tersoff/mod"; + simulator_class = force->new_pair(simulator_style,1,dummy); + if (simulator_class) { + if (comm->me == 0) { + std::string mesg("Created simulator pair style: "); + mesg += simulator_style; + mesg += "\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + } else { + error->all(FLERR,"Failure to create simulator model pair style"); + } + simulator_class->settings(0,NULL); } } From 38a8c765f0974799a82cee1a185adff5f3eb06fc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 20 May 2019 22:54:20 -0400 Subject: [PATCH 092/760] add support species checking --- examples/kim/in.kim.simulator-model | 6 +-- src/KIM/pair_kim.cpp | 79 +++++++++++++++++++---------- 2 files changed, 54 insertions(+), 31 deletions(-) diff --git a/examples/kim/in.kim.simulator-model b/examples/kim/in.kim.simulator-model index 32baf9d78e..109711fffc 100644 --- a/examples/kim/in.kim.simulator-model +++ b/examples/kim/in.kim.simulator-model @@ -20,16 +20,16 @@ newton off lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} -create_box 1 box +create_box 2 box create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 pair_style kim ex_sim_model_Si_mod_tersoff -pair_coeff * * Ar +pair_coeff * * Si Si -mass 1 39.95 +mass * 39.95 velocity all create 200.0 232345 loop geom neighbor 0.3 bin diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 87a6d636d2..2ed9df0aed 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -344,6 +344,8 @@ void PairKIM::settings(int narg, char **arg) if (simulatorModel) { const std::string *sim_name, *sim_version; + std::string atom_type_sym_list; + simulatorModel->GetSimulatorName(&sim_name); simulatorModel->GetSimulatorVersion(&sim_version); @@ -363,33 +365,6 @@ void PairKIM::settings(int narg, char **arg) if (*sim_name != "LAMMPS") error->all(FLERR,"Incompatible KIM Simulator Model"); - - int sim_fields, sim_lines; - const std::string *sim_field, *sim_value; - simulatorModel->GetNumberOfSimulatorFields(&sim_fields); - printf("sim_fields=%d\n",sim_fields); - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - printf("i=%d: %s (%d)\n",i,sim_field->c_str(),sim_lines); - } - // hard code result for now: - - int dummy; - const char *simulator_style = (const char*)"tersoff/mod"; - simulator_class = force->new_pair(simulator_style,1,dummy); - if (simulator_class) { - if (comm->me == 0) { - std::string mesg("Created simulator pair style: "); - mesg += simulator_style; - mesg += "\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } - } else { - error->all(FLERR,"Failure to create simulator model pair style"); - } - simulator_class->settings(0,NULL); } } @@ -464,9 +439,57 @@ void PairKIM::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); if (simulatorModel) { - simulatorModel->AddTemplateMap("atom-type-sym-list", atom_type_sym_list); + simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); simulatorModel->CloseTemplateMap(); + int len = strlen(atom_type_sym_list.c_str())+1; + char *strbuf = new char[len]; + char *strword; + + int sim_num_species; + const std::string *sim_species; + simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); + for (int i=0; i < sim_num_species; ++i) { + simulatorModel->GetSupportedSpecies(i, &sim_species); + strcpy(strbuf,atom_type_sym_list.c_str()); + strword = strtok(strbuf," \t"); + while (strword) { + if (strcmp(sim_species->c_str(),strword) != 0) + error->all(FLERR,"Species not supported by KIM Simulator Model"); + strword = strtok(NULL," \t"); + } + } + + int sim_fields, sim_lines; + const std::string *sim_field, *sim_value; + simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + if (comm->me==0) printf("sim_fields=%d\n",sim_fields); + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (comm->me==0) printf("field[%d]=%s\n",i,sim_field->c_str()); + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); + if (comm->me==0) printf("line %d: %s\n",j,sim_value->c_str()); + } + } + // hard code result for now: + + int dummy; + const char *simulator_style = (const char*)"tersoff/mod"; + simulator_class = force->new_pair(simulator_style,1,dummy); + if (simulator_class) { + if (comm->me == 0) { + std::string mesg("Created simulator pair style: "); + mesg += simulator_style; + mesg += "\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + } else { + error->all(FLERR,"Failure to create simulator model pair style"); + } + simulator_class->settings(0,NULL); error->all(FLERR,(simulatorModel->ToString()).c_str()); } else { // setup mapping between LAMMPS unique elements and KIM species codes From 92b042552e4de87631b5a6a848209a24945f2cac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 20 May 2019 22:54:33 -0400 Subject: [PATCH 093/760] Revert "add JSON tokenizer to utils library" This reverts commit 32379d2d840a7b5421823ba1f01aed68028d5c6b. --- src/utils.cpp | 376 +------------------------------------------------- src/utils.h | 2 - 2 files changed, 2 insertions(+), 376 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 77ff8ef749..c3c173a73f 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -12,8 +12,6 @@ ------------------------------------------------------------------------- */ #include -#include -#include #include "utils.h" #include "error.h" @@ -48,68 +46,9 @@ extern "C" { -/** Match text against a (simplified) regular expression - * (regexp will be compiled automatically). */ + /** Match text against a (simplified) regular expression + * (regexp will be compiled automatically). */ static int re_match(const char *text, const char *pattern); - -/** - * JSON type identifier. Basic types are: - * o Object - * o Array - * o String - * o Other primitive: number, boolean (true/false) or null - */ - typedef enum { - JSMN_UNDEFINED = 0, - JSMN_OBJECT = 1, - JSMN_ARRAY = 2, - JSMN_STRING = 3, - JSMN_PRIMITIVE = 4 - } jsmntype_t; - - enum jsmnerr { - /* Not enough tokens were provided */ - JSMN_ERROR_NOMEM = -1, - /* Invalid character inside JSON string */ - JSMN_ERROR_INVAL = -2, - /* The string is not a full JSON packet, more bytes expected */ - JSMN_ERROR_PART = -3 - }; - -/** - * JSON token description. - * type type (object, array, string etc.) - * start start position in JSON data string - * end end position in JSON data string - */ - typedef struct { - jsmntype_t type; - int start; - int end; - int size; - } jsmntok_t; - -/** - * JSON parser. Contains an array of token blocks available. Also stores - * the string being parsed now and current position in that string - */ - typedef struct { - unsigned int pos; /* offset in the JSON string */ - unsigned int toknext; /* next token to allocate */ - int toksuper; /* superior token node, e.g parent object or array */ - } jsmn_parser; - -/** - * Create JSON parser over an array of tokens - */ - static void jsmn_init(jsmn_parser *parser); - -/** - * Run JSON parser. It parses a JSON data string into and array of tokens, each describing - * a single JSON object. - */ - static int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, - jsmntok_t *tokens, unsigned int num_tokens); } using namespace LAMMPS_NS; @@ -182,72 +121,6 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, return; } - - -int utils::kim_simulator_json_parse(int argc, char **argv) -{ - FILE *fp; - jsmn_parser p; - jsmntok_t *tok; - char *buf; - size_t nbytes; - - if (argc != 2) { - printf("usage: %s \n",argv[0]); - return 1; - } - - // open JSON file - - fp = fopen(argv[1],"rb"); - if (!fp) { - perror("Error opening JSON file"); - return 2; - } - - // determine file size and allocate suitable buffer - - fseek(fp,0,SEEK_END); - long int flen = ftell(fp); - rewind(fp); - buf = new char[flen]; - nbytes = fread(buf,1,flen,fp); - fclose(fp); - - // parse once to count number of tokens - - jsmn_init(&p); - int ntok = jsmn_parse(&p,buf,nbytes,NULL,1); - if (ntok < 0) { - printf("failed to parse JSON: %d\n",ntok); - return 3; - } - - // allocate token storage and parse again - - jsmn_init(&p); - tok = new jsmntok_t[ntok]; - int retval = jsmn_parse(&p,buf,nbytes,tok,ntok); - if ((retval < 1) || (tok[0].type != JSMN_OBJECT)) { - printf("failed to parse JSON: no root object\n"); - return 4; - } - - for (int i=1; i < retval; ++i) { - printf("key: %.*s\n",tok[i].end-tok[i].start,buf+tok[i].start); - if (tok[i+1].type == JSMN_ARRAY) { - printf("value is array of size %d\n",tok[i+1].size); - i += tok[i+1].size + 1; - } else { - ++i; - } - } - - delete [] buf; - delete [] tok; - return 0; -} - /* ------------------------------------------------------------------ */ extern "C" { @@ -564,249 +437,4 @@ extern "C" { return 0; } - - -/** - * Allocates a fresh unused token from the token pool. - */ - static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, - jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *tok; - if (parser->toknext >= num_tokens) { - return NULL; - } - tok = &tokens[parser->toknext++]; - tok->start = tok->end = -1; - tok->size = 0; - return tok; - } - -/** - * Fills token type and boundaries. - */ - static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, - int start, int end) { - token->type = type; - token->start = start; - token->end = end; - token->size = 0; - } - -/** - * Fills next available token with JSON primitive. - */ - static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, - size_t len, jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *token; - int start; - - start = parser->pos; - - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - switch (js[parser->pos]) { - case '\t' : case '\r' : case '\n' : case ' ' : - case ',' : case ']' : case '}' : - goto found; - } - if (js[parser->pos] < 32 || js[parser->pos] >= 127) { - parser->pos = start; - return JSMN_ERROR_INVAL; - } - } - - found: - if (tokens == NULL) { - parser->pos--; - return 0; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) { - parser->pos = start; - return JSMN_ERROR_NOMEM; - } - jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos); - parser->pos--; - return 0; - } - -/** - * Fills next token with JSON string. - */ - static int jsmn_parse_string(jsmn_parser *parser, const char *js, - size_t len, jsmntok_t *tokens, size_t num_tokens) { - jsmntok_t *token; - - int start = parser->pos; - - parser->pos++; - - /* Skip starting quote */ - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - char c = js[parser->pos]; - - /* Quote: end of string */ - if (c == '\"') { - if (tokens == NULL) { - return 0; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) { - parser->pos = start; - return JSMN_ERROR_NOMEM; - } - jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos); - return 0; - } - - /* Backslash: Quoted symbol expected */ - if (c == '\\' && parser->pos + 1 < len) { - int i; - parser->pos++; - switch (js[parser->pos]) { - /* Allowed escaped symbols */ - case '\"': case '/' : case '\\' : case 'b' : - case 'f' : case 'r' : case 'n' : case 't' : - break; - /* Allows escaped symbol \uXXXX */ - case 'u': - parser->pos++; - for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) { - /* If it isn't a hex character we have an error */ - if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */ - (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */ - (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */ - parser->pos = start; - return JSMN_ERROR_INVAL; - } - parser->pos++; - } - parser->pos--; - break; - /* Unexpected symbol */ - default: - parser->pos = start; - return JSMN_ERROR_INVAL; - } - } - } - parser->pos = start; - return JSMN_ERROR_PART; - } - -/** - * Parse JSON string and fill tokens. - */ - int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, - jsmntok_t *tokens, unsigned int num_tokens) { - int r; - int i; - jsmntok_t *token; - int count = parser->toknext; - - for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { - char c; - jsmntype_t type; - - c = js[parser->pos]; - switch (c) { - case '{': case '[': - count++; - if (tokens == NULL) { - break; - } - token = jsmn_alloc_token(parser, tokens, num_tokens); - if (token == NULL) - return JSMN_ERROR_NOMEM; - if (parser->toksuper != -1) { - tokens[parser->toksuper].size++; - } - token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY); - token->start = parser->pos; - parser->toksuper = parser->toknext - 1; - break; - case '}': case ']': - if (tokens == NULL) - break; - type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY); - for (i = parser->toknext - 1; i >= 0; i--) { - token = &tokens[i]; - if (token->start != -1 && token->end == -1) { - if (token->type != type) { - return JSMN_ERROR_INVAL; - } - parser->toksuper = -1; - token->end = parser->pos + 1; - break; - } - } - /* Error if unmatched closing bracket */ - if (i == -1) return JSMN_ERROR_INVAL; - for (; i >= 0; i--) { - token = &tokens[i]; - if (token->start != -1 && token->end == -1) { - parser->toksuper = i; - break; - } - } - break; - case '\"': - r = jsmn_parse_string(parser, js, len, tokens, num_tokens); - if (r < 0) return r; - count++; - if (parser->toksuper != -1 && tokens != NULL) - tokens[parser->toksuper].size++; - break; - case '\t' : case '\r' : case '\n' : case ' ': - break; - case ':': - parser->toksuper = parser->toknext - 1; - break; - case ',': - if (tokens != NULL && parser->toksuper != -1 && - tokens[parser->toksuper].type != JSMN_ARRAY && - tokens[parser->toksuper].type != JSMN_OBJECT) { - for (i = parser->toknext - 1; i >= 0; i--) { - if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) { - if (tokens[i].start != -1 && tokens[i].end == -1) { - parser->toksuper = i; - break; - } - } - } - } - break; - /* In non-strict mode every unquoted value is a primitive */ - default: - r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens); - if (r < 0) return r; - count++; - if (parser->toksuper != -1 && tokens != NULL) - tokens[parser->toksuper].size++; - break; - - } - } - - if (tokens != NULL) { - for (i = parser->toknext - 1; i >= 0; i--) { - /* Unmatched opened object or array */ - if (tokens[i].start != -1 && tokens[i].end == -1) { - return JSMN_ERROR_PART; - } - } - } - - return count; - } - -/** - * Creates a new parser based over a given buffer with an array of tokens - * available. - */ - void jsmn_init(jsmn_parser *parser) { - parser->pos = 0; - parser->toknext = 0; - parser->toksuper = -1; - } } - diff --git a/src/utils.h b/src/utils.h index e908dcae81..2596fcd774 100644 --- a/src/utils.h +++ b/src/utils.h @@ -66,8 +66,6 @@ namespace LAMMPS_NS { */ void sfgets(const char *srcname, int srcline, char *s, int size, FILE *fp, const char *filename, Error *error); - - int kim_simulator_json_parse(int argc, char **argv); } } From e90eed91209d4daf8e929b03d36aa6b3670810d8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 20 May 2019 21:48:05 -0600 Subject: [PATCH 094/760] 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 095/760] 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 096/760] 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 097/760] 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 098/760] 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 099/760] 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 100/760] 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 101/760] 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 1e2ceb88daa631e50d68d79c581193a8bd52bdad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 21 May 2019 15:57:14 -0400 Subject: [PATCH 102/760] complete basic simulator model proxy class creation and setup. --- src/KIM/pair_kim.cpp | 120 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 23 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 2ed9df0aed..626b7ccb1c 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -64,6 +64,7 @@ #include "comm.h" #include "universe.h" #include "force.h" +#include "input.h" #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" @@ -71,6 +72,7 @@ #include "memory.h" #include "domain.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -136,6 +138,7 @@ PairKIM::~PairKIM() if (simulatorModel) { KIM::SimulatorModel::Destroy(&simulatorModel); + delete simulator_class; // clean up KIM interface (if necessary) kim_free(); @@ -446,6 +449,8 @@ void PairKIM::coeff(int narg, char **arg) char *strbuf = new char[len]; char *strword; + // validate species selection + int sim_num_species; const std::string *sim_species; simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); @@ -454,7 +459,7 @@ void PairKIM::coeff(int narg, char **arg) strcpy(strbuf,atom_type_sym_list.c_str()); strword = strtok(strbuf," \t"); while (strword) { - if (strcmp(sim_species->c_str(),strword) != 0) + if ((strcmp(strword,"NULL") != 0) && (strcmp(sim_species->c_str(),strword) != 0)) error->all(FLERR,"Species not supported by KIM Simulator Model"); strword = strtok(NULL," \t"); } @@ -463,33 +468,102 @@ void PairKIM::coeff(int narg, char **arg) int sim_fields, sim_lines; const std::string *sim_field, *sim_value; simulatorModel->GetNumberOfSimulatorFields(&sim_fields); - if (comm->me==0) printf("sim_fields=%d\n",sim_fields); for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (comm->me==0) printf("field[%d]=%s\n",i,sim_field->c_str()); + if (*sim_field == "units") { + simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); + if (*sim_value != update->unit_style) + error->all(FLERR,"Incompatible units for KIM Simulator Model"); + break; + } + } + + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "model-init") { + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); + input->one(sim_value->c_str()); + } + break; + } + } + + int sim_model_idx=-1; + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "model-defn") { + sim_model_idx = i; + break; + } + } + + if (sim_model_idx < 0) + error->all(FLERR,"KIM Simulator Model has no Model definition"); + else { for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); - if (comm->me==0) printf("line %d: %s\n",j,sim_value->c_str()); + simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); + if (utils::strmatch(*sim_value,"^pair_style")) { + char *ptr,*sim_style; + char *style_args[64]; + int style_narg = 0; + int len = strlen(sim_value->c_str())+1; + char *stylecmd = new char[len]; + strcpy(stylecmd,sim_value->c_str()); + + // ignore first word (pair_style) + strtok(stylecmd," \t"); + ptr = sim_style = strtok(NULL," \t"); + while (ptr && (style_narg < 63)) { + ptr = strtok(NULL," \t"); + if (!ptr) break; + style_args[style_narg] = ptr; + ++style_narg; + } + + int dummy; + delete simulator_class; + simulator_class = force->new_pair(sim_style,1,dummy); + if (simulator_class) { + if (comm->me == 0) { + std::string mesg("Created KIM Simulator Model pair style: "); + mesg += sim_style; + mesg += "\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + } else { + error->all(FLERR,"Failure to create simulator model pair style"); + } + simulator_class->settings(style_narg,style_args); + delete[] stylecmd; + } + } + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); + if (utils::strmatch(*sim_value,"^pair_coeff")) { + char *ptr; + char *coeff_args[64]; + int coeff_narg = 0; + int len = strlen(sim_value->c_str())+1; + char *coeffcmd = new char[len]; + strcpy(coeffcmd,sim_value->c_str()); + + // ignore first word (pair_coeff) + strtok(coeffcmd," \t"); + ptr = strtok(NULL," \t"); + while (ptr && (coeff_narg < 63)) { + coeff_args[coeff_narg] = ptr; + ++coeff_narg; + ptr = strtok(NULL," \t"); + } + + simulator_class->coeff(coeff_narg,coeff_args); + delete[] coeffcmd; + } } } - // hard code result for now: - - int dummy; - const char *simulator_style = (const char*)"tersoff/mod"; - simulator_class = force->new_pair(simulator_style,1,dummy); - if (simulator_class) { - if (comm->me == 0) { - std::string mesg("Created simulator pair style: "); - mesg += simulator_style; - mesg += "\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } - } else { - error->all(FLERR,"Failure to create simulator model pair style"); - } - simulator_class->settings(0,NULL); error->all(FLERR,(simulatorModel->ToString()).c_str()); } else { // setup mapping between LAMMPS unique elements and KIM species codes From eea67bf3bfce2a36d4079b4741cc82d9f68421f0 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 22 May 2019 08:52:57 -0600 Subject: [PATCH 103/760] 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 ce46d52c8a9ab27383d797fc29c9108f4ed59ccd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 10:23:26 -0400 Subject: [PATCH 104/760] add new 'kim_style' command as front end for KIM simulator (and regular) models --- examples/kim/in.kim.simulator-model | 4 +- src/KIM/fix_store_kim.cpp | 127 ++++++++++++ src/KIM/fix_store_kim.h | 98 ++++++++++ src/KIM/kim_query.cpp | 1 - src/KIM/kim_style.cpp | 286 ++++++++++++++++++++++++++++ src/KIM/kim_style.h | 87 +++++++++ src/modify.cpp | 2 +- 7 files changed, 600 insertions(+), 5 deletions(-) create mode 100644 src/KIM/fix_store_kim.cpp create mode 100644 src/KIM/fix_store_kim.h create mode 100644 src/KIM/kim_style.cpp create mode 100644 src/KIM/kim_style.h diff --git a/examples/kim/in.kim.simulator-model b/examples/kim/in.kim.simulator-model index 109711fffc..1e6e9dec89 100644 --- a/examples/kim/in.kim.simulator-model +++ b/examples/kim/in.kim.simulator-model @@ -16,7 +16,6 @@ variable zz equal 20*$z units metal atom_style atomic -newton off lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} @@ -26,8 +25,7 @@ create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -pair_style kim ex_sim_model_Si_mod_tersoff -pair_coeff * * Si Si +kim_style define ex_sim_model_Si_mod_tersoff Si Si mass * 39.95 velocity all create 200.0 232345 loop geom diff --git a/src/KIM/fix_store_kim.cpp b/src/KIM/fix_store_kim.cpp new file mode 100644 index 0000000000..8e9946c20d --- /dev/null +++ b/src/KIM/fix_store_kim.cpp @@ -0,0 +1,127 @@ +/* ---------------------------------------------------------------------- + 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: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +#include +#include "fix_store_kim.h" +#include "KIM_SimulatorModel.hpp" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixStoreKIM::FixStoreKIM(LAMMPS *lmp, int narg, char **arg) + : Fix(lmp, narg, arg), simulator_model(NULL), model_name(NULL) +{ + if (narg != 3) error->all(FLERR,"Illegal fix STORE/KIM command"); +} + +/* ---------------------------------------------------------------------- */ + +FixStoreKIM::~FixStoreKIM() +{ + // free associated storage + + if (simulator_model) { + KIM::SimulatorModel *sm = (KIM::SimulatorModel *)simulator_model; + KIM::SimulatorModel::Destroy(&sm); + simulator_model = NULL; + } + + if (model_name) { + char *mn = (char *)model_name; + delete[] mn; + model_name = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +int FixStoreKIM::setmask() +{ + int mask = 0; + return mask; +} + + +/* ---------------------------------------------------------------------- */ + +void FixStoreKIM::setptr(const char *name, void *ptr) +{ + if (strcmp(name,"simulator_model") == 0) { + if (simulator_model) { + KIM::SimulatorModel *sm = (KIM::SimulatorModel *)simulator_model; + KIM::SimulatorModel::Destroy(&sm); + } + simulator_model = ptr; + } else if (strcmp(name,"model_name") == 0) { + if (model_name) { + char *mn = (char *)model_name; + delete[] mn; + } + model_name = ptr; + } +} + +/* ---------------------------------------------------------------------- */ + +void *FixStoreKIM::getptr(const char *name) +{ + if (strcmp(name,"simulator_model") == 0) return simulator_model; + else if (strcmp(name,"model_name") == 0) return model_name; + else return NULL; +} diff --git a/src/KIM/fix_store_kim.h b/src/KIM/fix_store_kim.h new file mode 100644 index 0000000000..04081fd6dc --- /dev/null +++ b/src/KIM/fix_store_kim.h @@ -0,0 +1,98 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(STORE/KIM,FixStoreKIM) + +#else + +#ifndef LMP_FIX_STORE_KIM_H +#define LMP_FIX_STORE_KIM_H + +#include +#include "fix.h" + +namespace LAMMPS_NS { + +class FixStoreKIM : public Fix { + public: + FixStoreKIM(class LAMMPS *, int, char **); + ~FixStoreKIM(); + int setmask(); + + void setptr(const char *, void *); + void *getptr(const char *); + + private: + void *simulator_model; // pointer to KIM simulator model class + void *model_name; // string of KIM model name +}; + +} + +#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. + +*/ diff --git a/src/KIM/kim_query.cpp b/src/KIM/kim_query.cpp index fedc976110..e4818abc94 100644 --- a/src/KIM/kim_query.cpp +++ b/src/KIM/kim_query.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ - /* ---------------------------------------------------------------------- Contributing authors: Axel Kohlmeyer (Temple U), Ryan S. Elliott (UMN) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp new file mode 100644 index 0000000000..865f6827ab --- /dev/null +++ b/src/KIM/kim_style.cpp @@ -0,0 +1,286 @@ +/* ---------------------------------------------------------------------- + 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: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +#include +#include +#include "kim_style.h" +#include "error.h" +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "modify.h" +#include "update.h" +#include "universe.h" +#include "input.h" +#include "fix_store_kim.h" + +#include "KIM_SimulatorModel.hpp" + + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +void KimStyle::command(int narg, char **arg) +{ + if (narg < 2) error->all(FLERR,"Illegal kim_style command"); + + if (strcmp(arg[0],"init") == 0) { + if (narg > 2) error->all(FLERR,"Illegal kim_style init command"); + if (domain->box_exist) + error->all(FLERR,"Must use 'kim_style init' command before " + "simulation box is defined"); + int len = strlen(arg[1])+1; + char *model = new char[len]; + strcpy(model,arg[1]); + do_init(model); + } else if (strcmp(arg[0],"define") == 0) { + if (!domain->box_exist) + error->all(FLERR,"Must use 'kim_style define' command after " + "simulation box is defined"); + do_defn(narg-1,arg+1); + } else error->all(FLERR,"Illegal kim_style command"); +} + + +/* ---------------------------------------------------------------------- */ + +void KimStyle::do_init(char *model) +{ + // create storage proxy fix. delete existing fix, if needed. + + int ifix = modify->find_fix("KIM_MODEL_STORE"); + if (ifix >= 0) modify->delete_fix(ifix); + input->one("fix KIM_MODEL_STORE all STORE/KIM"); + ifix = modify->find_fix("KIM_MODEL_STORE"); + + FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; + fix_store->setptr("model_name", (void *) model); + + int kimerror; + KIM::SimulatorModel * simulatorModel; + kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); + + // not a Kim Simulator Model; nothing else to do here. + if (kimerror) return; + + fix_store->setptr("simulator_model", (void *) simulatorModel); + + // need to call this to have access to (some) simulator model init data. + simulatorModel->CloseTemplateMap(); + + int sim_fields, sim_lines; + const std::string *sim_field, *sim_value; + simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + + // set units + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "units") { + simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); + std::string cmd("units "); + cmd += *sim_value; + input->one(cmd.c_str()); + break; + } + } + + // init model + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "model-init") { + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); + input->one(sim_value->c_str()); + } + break; + } + } + + // reset template map. + simulatorModel->ClearTemplateMap(); +} + +/* ---------------------------------------------------------------------- */ + +void KimStyle::do_defn(int narg, char **arg) +{ + if (narg != atom->ntypes + 1) + error->all(FLERR,"Incorrect number of arguments for kim_style define command"); + + char *model = arg[0]; + KIM::SimulatorModel *simulatorModel(NULL); + int kimerror; + + // check if we had a kim_style init command by finding fix STORE/KIM + // retrieve model name and pointer to simulator model class instance. + // validate model name if not given as NULL. + // if kim_style init wasn't run try to initialize simulator model now. + + int ifix = modify->find_fix("KIM_MODEL_STORE"); + if (ifix >= 0) { + FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; + if (strcmp(model,"NULL") == 0) + model = (char *)fix_store->getptr("model_name"); + else if (strcmp(model,(const char*)fix_store->getptr("model_name")) != 0) + error->all(FLERR,"Inconsistent KIM model name"); + + simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); + } else { + + kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); + if (kimerror) simulatorModel = NULL; + } + + if (simulatorModel) { + + const std::string *sim_name, *sim_version; + std::string atom_type_sym_list; + + simulatorModel->GetSimulatorName(&sim_name); + simulatorModel->GetSimulatorVersion(&sim_version); + + if (comm->me == 0) { + std::string mesg("Using KIM Simulator Model : "); + mesg += model; + mesg += "\n"; + mesg += "For Simulator : "; + mesg += *sim_name + " " + *sim_version + "\n"; + mesg += "Running on : LAMMPS "; + mesg += universe->version; + mesg += "\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + + if (*sim_name != "LAMMPS") + error->all(FLERR,"Incompatible KIM Simulator Model"); + + for (int i = 1; i < narg; i++) + atom_type_sym_list += std::string(" ") + arg[i]; + + simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); + simulatorModel->CloseTemplateMap(); + + int len = strlen(atom_type_sym_list.c_str())+1; + char *strbuf = new char[len]; + char *strword; + + // validate species selection + + int sim_num_species; + const std::string *sim_species; + simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); + for (int i=0; i < sim_num_species; ++i) { + simulatorModel->GetSupportedSpecies(i, &sim_species); + strcpy(strbuf,atom_type_sym_list.c_str()); + strword = strtok(strbuf," \t"); + while (strword) { + if ((strcmp(strword,"NULL") != 0) && (strcmp(sim_species->c_str(),strword) != 0)) + error->all(FLERR,"Species not supported by KIM Simulator Model"); + strword = strtok(NULL," \t"); + } + } + delete[] strbuf; + + int sim_fields, sim_lines; + const std::string *sim_field, *sim_value; + simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "units") { + simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); + if (*sim_value != update->unit_style) + error->all(FLERR,"Incompatible units for KIM Simulator Model"); + break; + } + } + + int sim_model_idx=-1; + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "model-defn") { + sim_model_idx = i; + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); + input->one(sim_value->c_str()); + } + } + } + + if (sim_model_idx < 0) + error->all(FLERR,"KIM Simulator Model has no Model definition"); + + } else { + + // not a simulator model. issue pair_style and pair_coeff commands. + // NOTE: all references to arg must appear before calls to input->one() + // as that will reset the argument vector. + + std::string cmd1("pair_style kim "); + cmd1 += model; + + std::string cmd2("pair_coeff * * "); + for (int i=1; i < narg; ++i) { + cmd2 += arg[i]; + cmd2 += " "; + } + + input->one(cmd1.c_str()); + input->one(cmd2.c_str()); + } +} diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h new file mode 100644 index 0000000000..588de6e620 --- /dev/null +++ b/src/KIM/kim_style.h @@ -0,0 +1,87 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(kim_style,KimStyle) + +#else + +#ifndef LMP_KIM_STYLE_H +#define LMP_KIM_STYLE_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class KimStyle : protected Pointers { + public: + KimStyle(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); + private: + void do_init(char *); + void do_defn(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + + +*/ diff --git a/src/modify.cpp b/src/modify.cpp index 7f43f035d2..9f0457c9d0 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -793,7 +793,7 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) const char *exceptions[] = {"GPU", "OMP", "INTEL", "property/atom", "cmap", "cmap3", "rx", - "deprecated", NULL}; + "deprecated", "STORE/KIM", NULL}; if (domain->box_exist == 0) { int m; From b91b3c18cffff347ca58f2d5cdef7052adf5875b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 11:52:38 -0400 Subject: [PATCH 105/760] remove references to simulator models from pair style kim --- src/KIM/pair_kim.cpp | 269 ++++++------------------------------------- src/KIM/pair_kim.h | 13 +-- 2 files changed, 41 insertions(+), 241 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 626b7ccb1c..6251ebb6c7 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -92,7 +92,6 @@ PairKIM::PairKIM(LAMMPS *lmp) : chargeUnit(KIM_CHARGE_UNIT_unused), temperatureUnit(KIM_TEMPERATURE_UNIT_unused), timeUnit(KIM_TIME_UNIT_unused), - simulatorModel(NULL), pkim(NULL), pargs(NULL), kim_model_support_for_energy(KIM_SUPPORT_STATUS_notSupported), @@ -110,9 +109,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : kim_particleSpecies(NULL), kim_particleContributing(NULL), lmps_stripped_neigh_list(NULL), - lmps_stripped_neigh_ptr(NULL), - simulator_class(NULL), - simulator_style(NULL) + lmps_stripped_neigh_ptr(NULL) { // Initialize Pair data members to appropriate values single_enable = 0; // We do not provide the Single() function @@ -136,15 +133,6 @@ PairKIM::~PairKIM() // clean up kim_modelname if (kim_modelname != 0) delete [] kim_modelname; - if (simulatorModel) { - KIM::SimulatorModel::Destroy(&simulatorModel); - delete simulator_class; - - // clean up KIM interface (if necessary) - kim_free(); - return; - } - // clean up lammps atom species number to unique particle names mapping if (lmps_unique_elements) for (int i = 0; i < lmps_num_unique_elements; i++) @@ -342,33 +330,6 @@ void PairKIM::settings(int narg, char **arg) // initialize KIM Model kim_init(); - - // Set up and initialize LAMMPS Simulator model - - if (simulatorModel) { - const std::string *sim_name, *sim_version; - std::string atom_type_sym_list; - - simulatorModel->GetSimulatorName(&sim_name); - simulatorModel->GetSimulatorVersion(&sim_version); - - if (comm->me == 0) { - std::string mesg("Using KIM Simulator Model : "); - mesg += kim_modelname; - mesg += "\n"; - mesg += "For Simulator : "; - mesg += *sim_name + " " + *sim_version + "\n"; - mesg += "Running on : LAMMPS "; - mesg += universe->version; - mesg += "\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } - - if (*sim_name != "LAMMPS") - error->all(FLERR,"Incompatible KIM Simulator Model"); - } } /* ---------------------------------------------------------------------- @@ -441,154 +402,29 @@ void PairKIM::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); - if (simulatorModel) { - simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); - simulatorModel->CloseTemplateMap(); + // setup mapping between LAMMPS unique elements and KIM species codes + if (kim_particle_codes_ok) { + delete [] kim_particle_codes; + kim_particle_codes = NULL; + kim_particle_codes_ok = false; + } + kim_particle_codes = new int[lmps_num_unique_elements]; + kim_particle_codes_ok = true; - int len = strlen(atom_type_sym_list.c_str())+1; - char *strbuf = new char[len]; - char *strword; - - // validate species selection - - int sim_num_species; - const std::string *sim_species; - simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); - for (int i=0; i < sim_num_species; ++i) { - simulatorModel->GetSupportedSpecies(i, &sim_species); - strcpy(strbuf,atom_type_sym_list.c_str()); - strword = strtok(strbuf," \t"); - while (strword) { - if ((strcmp(strword,"NULL") != 0) && (strcmp(sim_species->c_str(),strword) != 0)) - error->all(FLERR,"Species not supported by KIM Simulator Model"); - strword = strtok(NULL," \t"); - } - } - - int sim_fields, sim_lines; - const std::string *sim_field, *sim_value; - simulatorModel->GetNumberOfSimulatorFields(&sim_fields); - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "units") { - simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); - if (*sim_value != update->unit_style) - error->all(FLERR,"Incompatible units for KIM Simulator Model"); - break; - } - } - - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "model-init") { - for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); - input->one(sim_value->c_str()); - } - break; - } - } - - int sim_model_idx=-1; - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "model-defn") { - sim_model_idx = i; - break; - } - } - - if (sim_model_idx < 0) - error->all(FLERR,"KIM Simulator Model has no Model definition"); - else { - for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); - if (utils::strmatch(*sim_value,"^pair_style")) { - char *ptr,*sim_style; - char *style_args[64]; - int style_narg = 0; - int len = strlen(sim_value->c_str())+1; - char *stylecmd = new char[len]; - strcpy(stylecmd,sim_value->c_str()); - - // ignore first word (pair_style) - strtok(stylecmd," \t"); - ptr = sim_style = strtok(NULL," \t"); - while (ptr && (style_narg < 63)) { - ptr = strtok(NULL," \t"); - if (!ptr) break; - style_args[style_narg] = ptr; - ++style_narg; - } - - int dummy; - delete simulator_class; - simulator_class = force->new_pair(sim_style,1,dummy); - if (simulator_class) { - if (comm->me == 0) { - std::string mesg("Created KIM Simulator Model pair style: "); - mesg += sim_style; - mesg += "\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } - } else { - error->all(FLERR,"Failure to create simulator model pair style"); - } - simulator_class->settings(style_narg,style_args); - delete[] stylecmd; - } - } - for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); - if (utils::strmatch(*sim_value,"^pair_coeff")) { - char *ptr; - char *coeff_args[64]; - int coeff_narg = 0; - int len = strlen(sim_value->c_str())+1; - char *coeffcmd = new char[len]; - strcpy(coeffcmd,sim_value->c_str()); - - // ignore first word (pair_coeff) - strtok(coeffcmd," \t"); - ptr = strtok(NULL," \t"); - while (ptr && (coeff_narg < 63)) { - coeff_args[coeff_narg] = ptr; - ++coeff_narg; - ptr = strtok(NULL," \t"); - } - - simulator_class->coeff(coeff_narg,coeff_args); - delete[] coeffcmd; - } - } - } - error->all(FLERR,(simulatorModel->ToString()).c_str()); - } else { - // setup mapping between LAMMPS unique elements and KIM species codes - if (kim_particle_codes_ok) { - delete [] kim_particle_codes; - kim_particle_codes = NULL; - kim_particle_codes_ok = false; - } - kim_particle_codes = new int[lmps_num_unique_elements]; - kim_particle_codes_ok = true; - for(int i = 0; i < lmps_num_unique_elements; i++) { - int supported; - int code; - KIM_Model_GetSpeciesSupportAndCode( - pkim, - KIM_SpeciesName_FromString(lmps_unique_elements[i]), - &supported, - &code); - if (supported) { - kim_particle_codes[i] = code; - } else { - std::string msg("create_kim_particle_codes: symbol not found: "); - msg += lmps_unique_elements[i]; - error->all(FLERR, msg.c_str()); - } + for(int i = 0; i < lmps_num_unique_elements; i++) { + int supported; + int code; + KIM_Model_GetSpeciesSupportAndCode( + pkim, + KIM_SpeciesName_FromString(lmps_unique_elements[i]), + &supported, + &code); + if (supported) { + kim_particle_codes[i] = code; + } else { + std::string msg("create_kim_particle_codes: symbol not found: "); + msg += lmps_unique_elements[i]; + error->all(FLERR, msg.c_str()); } } } @@ -799,32 +635,6 @@ double PairKIM::memory_usage() return bytes; } -/* ---------------------------------------------------------------------- - simulator model support functions -------------------------------------------------------------------------- */ - -void PairKIM::simulator_init() -{ - int dummy; - // do not try with suffixes for now. - simulator_class = force->new_pair("lj/cut",1,dummy); - force->store_style(simulator_style,"lj/cut",1); - printf("Simulator model init: %s -> %s\n", kim_modelname, simulator_style); - char **args = new char*[1]; - args[0] = (char *)"8.1500"; - simulator_class->settings(1,args); - delete[] args; -} - -void PairKIM::simulator_free() -{ - printf("Simulator model free: %s -> %s\n", kim_modelname, simulator_style); - delete[] simulator_style; - simulator_style = NULL; - delete simulator_class; - simulator_class = NULL; -} - /* ---------------------------------------------------------------------- KIM-specific interface ------------------------------------------------------------------------- */ @@ -902,26 +712,21 @@ void PairKIM::kim_init() kim_modelname, &requestedUnitsAccepted, &pkim); + if (kimerror) error->all(FLERR,"KIM ModelCreate failed"); + else if (!requestedUnitsAccepted) + error->all(FLERR,"KIM Model did not accept the requested unit system"); + + // check that the model does not require unknown capabilities + kimerror = check_for_routine_compatibility(); + if (kimerror) + error->all(FLERR, + "KIM Model requires unknown Routines. Unable to proceed."); + + kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); if (kimerror) { - kimerror = KIM::SimulatorModel::Create(kim_modelname,&simulatorModel); - if (kimerror) error->all(FLERR,"KIM ModelCreate failed"); - else return; - } else { - if (!requestedUnitsAccepted) - error->all(FLERR,"KIM Model did not accept the requested unit system"); - - // check that the model does not require unknown capabilities - kimerror = check_for_routine_compatibility(); - if (kimerror) - error->all(FLERR, - "KIM Model requires unknown Routines. Unable to proceed."); - - kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); - if (kimerror) { - KIM_Model_Destroy(&pkim); - error->all(FLERR,"KIM ComputeArgumentsCreate failed"); - } else kim_init_ok = true; - } + KIM_Model_Destroy(&pkim); + error->all(FLERR,"KIM ComputeArgumentsCreate failed"); + } else kim_init_ok = true; // determine KIM Model capabilities (used in this function below) set_kim_model_has_flags(); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 37a6be1e5b..aa33b9b271 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -69,7 +69,6 @@ class KIM_API_model; extern "C" { #include "KIM_SimulatorHeaders.h" } -#include "KIM_SimulatorModel.hpp" namespace LAMMPS_NS { @@ -121,7 +120,6 @@ class PairKIM : public Pair { KIM_TemperatureUnit temperatureUnit; KIM_TimeUnit timeUnit; - KIM::SimulatorModel * simulatorModel; KIM_Model * pkim; KIM_ComputeArguments * pargs; @@ -152,12 +150,6 @@ class PairKIM : public Pair { // is in molecular mode int** lmps_stripped_neigh_ptr; // pointer into lists - // LAMMPS Simulator model support - Pair *simulator_class; - char *simulator_style; - virtual void simulator_init(); - virtual void simulator_free(); - // KIM specific helper functions virtual void set_contributing(); virtual void kim_init(); @@ -191,7 +183,10 @@ The KIM model was unable, for some reason, to complete the computation. E: 'KIMvirial' or 'LAMMPSvirial' not supported with kim-api. -"KIMvirial or "LAMMPSvirial" found on the pair_style line. These keys are not supported kim-api. (The virial computation is always performed by LAMMPS.) Please remove these keys, make sure the KIM model you are using supports kim-api, and rerun. +"KIMvirial or "LAMMPSvirial" found on the pair_style line. These keys +are not supported kim-api. (The virial computation is always performed +by LAMMPS.) Please remove these keys, make sure the KIM model you are +using supports kim-api, and rerun. E: Illegal pair_style command From 2ee02cfadd4484833fa32c6a503c0941ce83fb98 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 24 May 2019 11:27:09 -0600 Subject: [PATCH 106/760] 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 fc8a639d585c7325eb08e2044a274a3b514043d8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 19:39:15 -0400 Subject: [PATCH 107/760] add documentation for kim_style command. update a few KIM related doc files --- doc/src/Commands_all.txt | 1 + doc/src/Packages_details.txt | 11 +++-- doc/src/commands_list.txt | 1 + doc/src/kim_query.txt | 3 +- doc/src/kim_style.txt | 81 ++++++++++++++++++++++++++++++++++++ doc/src/lammps.book | 1 + doc/src/pair_kim.txt | 3 +- src/KIM/README | 6 +-- 8 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 doc/src/kim_style.txt diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 52c2e67e2e..d76ffac14c 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -69,6 +69,7 @@ An alphabetic list of all general LAMMPS commands. "include"_include.html, "jump"_jump.html, "kim_query"_kim_query.html, +"kim_style"_kim_style.html, "kspace_modify"_kspace_modify.html, "kspace_style"_kspace_style.html, "label"_label.html, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 352a38af84..19c7e96fe9 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -342,7 +342,10 @@ A "pair_style kim"_pair_kim.html command which is a wrapper on the Knowledge Base for Interatomic Models (KIM) repository of interatomic potentials, enabling any of them to be used in LAMMPS simulations. Also a "kim_query"_kim_query.html command, which allows to query -the OpenKIM database for stored properties. +the OpenKIM database for stored properties, and a +"kim_style"_kim_style.html command, which serves as a front end to +generating LAMMPS input on-the-fly for KIM simulator models and native +KIM models. To use this package you must have the KIM library available on your system. @@ -352,8 +355,10 @@ https://openkim.org. The KIM project is led by Ellad Tadmor and Ryan Elliott (U Minnesota). [Authors:] Ryan Elliott (U Minnesota) is the main developer for the KIM -API which the "pair_style kim"_pair_kim.html command uses. He -developed the pair style. +API which the "pair_style kim"_pair_kim.html command uses. He developed +the pair style. Axel Kohlmeyer (Temple U) contributed the +"kim_query"_kim_query.html and "kim_style"_kim_style.html commands in +close collaboration with Ryan. [Install:] diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index cf716df9ac..39d2f7c7d0 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -54,6 +54,7 @@ Commands :h1 info jump kim_query + kim_style kspace_modify kspace_style label diff --git a/doc/src/kim_query.txt b/doc/src/kim_query.txt index c581de0ebb..84eca6e676 100644 --- a/doc/src/kim_query.txt +++ b/doc/src/kim_query.txt @@ -43,4 +43,5 @@ See the "Build package"_Build_package.html doc page for more info. [Related commands:] -"pair_style kim"_pair_kim.html, "variable"_variable.html +"pair_style kim"_pair_kim.html, "kim_style"_kim_style.html, +"variable"_variable.html diff --git a/doc/src/kim_style.txt b/doc/src/kim_style.txt new file mode 100644 index 0000000000..ab605c017a --- /dev/null +++ b/doc/src/kim_style.txt @@ -0,0 +1,81 @@ +"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 + +kim_style command :h3 + +[Syntax:] + +kim_style mode model args :pre + +mode = {init} or {define} +model = name of the KIM model (potential or simulator model) or NULL +args = atom type to species mapping ({define} option only, one entry per atom type) :ul + +[Examples:] + +kim_style init ex_sim_model_Si_mod_tersoff +kim_style define NULL Si Si +kim_style define LennardJones_Ar Ar :pre + +[Description:] + +The kim_style command is a high-level wrapper around the +"Knowledge Base for Interatomic Models (OpenKIM)"_https://openkim.org +repository of interatomic potentials, so that they can be used by +LAMMPS scripts. It does not implement any computations directly, but +rather will generate LAMMPS input commands based on the information +retrieved from the OpenKIM repository. It is primarily meant to realize +so-called "KIM Simulator Models", which are OpenKIM repository entries +of models using native features of the simulation engine, i.e. LAMMPS +in this case, but it also supports realizing conventional KIM models +via the "pair_style kim"_pair_kim.html command. + +The kim_style command has two modes, {init} and {define}, indicated by +the first argument to the kim_style command. An {init} mode command +must be issued [before] the simulation box is created, while the {define} +mode version may only be used [after] the simulation box exists. The +{init} mode version is only required, if the KIM model requires it. +The second argument to the kim_style command is the KIM model ID. It +can be set to NULL in the kim_style define command, if it was already +set in a kim_style init command. Otherwise, the two model IDs must match. + +Only the kim_style define command allows additional arguments. Those +are used to map the atom types in LAMMPS to the available species in +the KIM model. This is equivalent to the arguments following +"pair_coeff * *" in a "kim"_pair_kim.html pair style. Thus the command + +kim_style define LennardJones_Ar Ar :pre + +will generate the LAMMPS input commands: + +pair_style kim LennardJones_Ar +pair_coeff * * Ar :pre + +For simulator models, the generated input commands may be more complex +and require that LAMMPS is built with the required packages included. +The commands generated by the kim_style command, can be copied to the +screen or log file, through the "echo"_echo.html command. +The kim_style command will also validate, that the selected simulator +model was generated for the LAMMPS MD code and not some other software. +In addition, the version strings for LAMMPS version used for defining +the simulator model and the LAMMPS version being currently run are +printed, so that it can be tracked down, if there are any incompatible +changes to input script or command syntax between the two LAMMPS versions. + +[Restrictions:] + +This command is part of the KIM package. It is only enabled if +LAMMPS was built with that package. Furthermore, its correct +functioning depends on compiling LAMMPS with all required packages +installed that are required by the commands embedded in any KIM +simulator models used. +See the "Build package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_style kim"_pair_kim.html, "kim_query"_kim_query.html diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 500690597d..cedb6ea709 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -168,6 +168,7 @@ include.html info.html jump.html kim_query.html +kim_style.html label.html lattice.html log.html diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index a415ac606b..523bd89d7c 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -112,6 +112,7 @@ kim-api package version 2.0.0 and higher. [Related commands:] -"pair_coeff"_pair_coeff.html +"pair_coeff"_pair_coeff.html, "kim_style"_kim_style.html, +"kim_query"_kim_query.html [Default:] none diff --git a/src/KIM/README b/src/KIM/README index a69206596f..4f52d69a67 100644 --- a/src/KIM/README +++ b/src/KIM/README @@ -13,8 +13,8 @@ Using this package requires the KIM library and its models system. The library can be downloaded and built in lib/kim or elsewhere on your system, which must be done before bulding LAMMPS with this package. Details of the download, build, and install -process for KIM are given in the lib/kim/README file, and scripts will -soon be provided to help automate the process. Also see the LAMMPS +process for KIM are given in the lib/kim/README file, and scripts +are provided to help automate the process. Also see the LAMMPS manual for general information on building LAMMPS with external libraries. The settings in the Makefile.lammps file in lib/kim must be correct for LAMMPS to build correctly with this package installed. @@ -24,6 +24,6 @@ Makefile.lammps file usually will not need to be changed. Once you have successfully built LAMMPS with this package and the KIM library you can test it using an input file from the examples dir: -./lmp_serial < lammps/examples/kim/in.kim.lj +./lmp_serial -in lammps/examples/kim/in.kim.lj This pair_style was written by Ryan S. Elliott (U Minn). From e82e1c695a8233905fe2d35babb4b1f13e5a5fe4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 19:45:48 -0400 Subject: [PATCH 108/760] 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 ee5fa04732588646047111488bd5f4fec2870772 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 22:41:28 -0400 Subject: [PATCH 109/760] create internal fix via modify->add_fix() so it does not get logged --- src/KIM/kim_style.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 865f6827ab..53bf2958b3 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -104,7 +104,11 @@ void KimStyle::do_init(char *model) int ifix = modify->find_fix("KIM_MODEL_STORE"); if (ifix >= 0) modify->delete_fix(ifix); - input->one("fix KIM_MODEL_STORE all STORE/KIM"); + char *fixarg[3]; + fixarg[0] = (char *)"KIM_MODEL_STORE"; + fixarg[1] = (char *)"all"; + fixarg[2] = (char *)"STORE/KIM"; + modify->add_fix(3,fixarg); ifix = modify->find_fix("KIM_MODEL_STORE"); FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; From 5a929aff6ed77043341a396ecf30b25d14add523 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 22:42:40 -0400 Subject: [PATCH 110/760] error out if kim_style init is required but wasn't called --- src/KIM/kim_style.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 53bf2958b3..d906d56041 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -240,17 +240,27 @@ void KimStyle::do_defn(int narg, char **arg) } } delete[] strbuf; - + + // check if units are unchanged, and if kim_style init was required + int sim_fields, sim_lines; const std::string *sim_field, *sim_value; simulatorModel->GetNumberOfSimulatorFields(&sim_fields); for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "units") { simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); if (*sim_value != update->unit_style) error->all(FLERR,"Incompatible units for KIM Simulator Model"); - break; + } + + if ((ifix < 0) && ( *sim_field == "model-init")) { + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); + if (*sim_value != "") + error->all(FLERR,"Must use 'kim_style init' with this model"); + } } } From c3897212e2fe7531c6cd37d0165b2c7a419f54da Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 22:44:03 -0400 Subject: [PATCH 111/760] must call ClearTemplateMap(), so kim_style define may be called multiple times --- src/KIM/kim_style.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index d906d56041..323832fbad 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -279,6 +279,7 @@ void KimStyle::do_defn(int narg, char **arg) if (sim_model_idx < 0) error->all(FLERR,"KIM Simulator Model has no Model definition"); + simulatorModel->ClearTemplateMap(); } else { // not a simulator model. issue pair_style and pair_coeff commands. From 264f6e1630e3d4730953c9ca4b169a5631de3d34 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 22:44:41 -0400 Subject: [PATCH 112/760] whitespace cleanup --- src/KIM/kim_style.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 323832fbad..e8aee77b66 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -113,17 +113,19 @@ void KimStyle::do_init(char *model) FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; fix_store->setptr("model_name", (void *) model); - + int kimerror; KIM::SimulatorModel * simulatorModel; kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); // not a Kim Simulator Model; nothing else to do here. + if (kimerror) return; fix_store->setptr("simulator_model", (void *) simulatorModel); // need to call this to have access to (some) simulator model init data. + simulatorModel->CloseTemplateMap(); int sim_fields, sim_lines; @@ -131,6 +133,7 @@ void KimStyle::do_init(char *model) simulatorModel->GetNumberOfSimulatorFields(&sim_fields); // set units + for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); if (*sim_field == "units") { @@ -143,6 +146,7 @@ void KimStyle::do_init(char *model) } // init model + for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); if (*sim_field == "model-init") { @@ -155,6 +159,7 @@ void KimStyle::do_init(char *model) } // reset template map. + simulatorModel->ClearTemplateMap(); } @@ -281,7 +286,7 @@ void KimStyle::do_defn(int narg, char **arg) simulatorModel->ClearTemplateMap(); } else { - + // not a simulator model. issue pair_style and pair_coeff commands. // NOTE: all references to arg must appear before calls to input->one() // as that will reset the argument vector. From c2a200fe85907d7c4ef85147a702f7c13fde4297 Mon Sep 17 00:00:00 2001 From: "Vishnu V. Krishnan" Date: Sun, 26 May 2019 14:00:21 +0530 Subject: [PATCH 113/760] 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 114/760] 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 115/760] 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 4619018eadc0f9e23bc347d5df53b745a15b60d0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 27 May 2019 23:26:26 -0400 Subject: [PATCH 116/760] provide more simulator model variant input examples --- examples/kim/data.VOH | 118 ++++++++++++++++++ examples/kim/in.kim.VOH.simulator.model | 24 ++++ examples/kim/in.kim.ex_si_1.simulator_model | 69 ++++++++++ examples/kim/in.kim.ex_si_2.simulator_model | 69 ++++++++++ ...ulator-model => in.kim.lj.simulator-model} | 7 +- 5 files changed, 284 insertions(+), 3 deletions(-) create mode 100644 examples/kim/data.VOH create mode 100644 examples/kim/in.kim.VOH.simulator.model create mode 100644 examples/kim/in.kim.ex_si_1.simulator_model create mode 100644 examples/kim/in.kim.ex_si_2.simulator_model rename examples/kim/{in.kim.simulator-model => in.kim.lj.simulator-model} (88%) diff --git a/examples/kim/data.VOH b/examples/kim/data.VOH new file mode 100644 index 0000000000..c093705adc --- /dev/null +++ b/examples/kim/data.VOH @@ -0,0 +1,118 @@ +# VOH example + +100 atoms +4 atom types + +0 25.000 xlo xhi +0 25.000 ylo yhi +0 25.000 zlo zhi + +Masses + +1 1.0080 +2 12.0107 +3 15.9994 +4 50.9415 + +Atoms + + 1 2 0.0 12.35333 12.56112 11.08925 + 2 4 0.0 12.32916 12.62071 13.13099 + 3 3 0.0 14.09425 12.56218 13.76130 + 4 3 0.0 11.42814 11.10330 13.76732 + 5 3 0.0 11.63260 13.89286 13.64097 + 6 1 0.0 10.61647 11.29221 14.30535 + 7 1 0.0 14.38026 13.34626 14.29055 + 8 1 0.0 11.32479 12.58820 10.70253 + 9 1 0.0 12.90918 13.42567 10.69612 + 10 1 0.0 12.84043 11.63643 10.74688 + 11 2 0.0 0.93670 23.74637 24.45218 + 12 4 0.0 2.18151 24.36876 0.94725 + 13 3 0.0 3.93452 24.44779 0.28384 + 14 3 0.0 2.13668 23.10529 2.33362 + 15 3 0.0 1.76108 0.74666 1.48323 + 16 1 0.0 1.82070 23.45305 3.20745 + 17 1 0.0 4.35555 0.34186 0.31083 + 18 1 0.0 24.90472 23.68735 24.82586 + 19 1 0.0 0.97611 24.45631 23.61244 + 20 1 0.0 1.24583 22.75250 24.09589 + 21 2 0.0 2.25730 12.18969 18.74792 + 22 4 0.0 0.67140 13.31162 19.37385 + 23 3 0.0 0.71106 13.43250 21.24545 + 24 3 0.0 24.08603 12.44025 18.87949 + 25 3 0.0 0.70486 14.71920 18.75808 + 26 1 0.0 23.49516 12.95430 18.26686 + 27 1 0.0 0.79723 14.34808 21.60818 + 28 1 0.0 2.24383 12.10285 17.65239 + 29 1 0.0 3.19860 12.66607 19.06030 + 30 1 0.0 2.20214 11.18299 19.18774 + 31 2 0.0 9.32237 8.16220 23.74501 + 32 4 0.0 9.41775 7.26178 21.91463 + 33 3 0.0 8.54752 8.34565 20.65588 + 34 3 0.0 8.50942 5.62151 22.00137 + 35 3 0.0 10.87539 7.02683 21.48455 + 36 1 0.0 9.06507 4.82324 21.80615 + 37 1 0.0 9.11458 8.67119 19.91477 + 38 1 0.0 9.82196 7.53487 24.49616 + 39 1 0.0 9.81855 9.14254 23.70532 + 40 1 0.0 8.27176 8.30387 24.03831 + 41 2 0.0 9.10113 13.98748 23.44281 + 42 4 0.0 8.84954 12.89163 21.73780 + 43 3 0.0 10.01387 13.54293 20.42005 + 44 3 0.0 7.08992 13.11522 21.12954 + 45 3 0.0 9.12937 11.39982 21.99065 + 46 1 0.0 6.55309 12.28287 21.08224 + 47 1 0.0 10.67858 12.89258 20.08249 + 48 1 0.0 8.42108 13.62252 24.22498 + 49 1 0.0 10.13926 13.89766 23.79639 + 50 1 0.0 8.88118 15.04646 23.24289 + 51 2 0.0 17.73225 3.40708 8.28945 + 52 4 0.0 18.49877 5.29835 8.37599 + 53 3 0.0 19.48472 5.62627 6.81505 + 54 3 0.0 19.66498 5.40961 9.84118 + 55 3 0.0 17.38120 6.34466 8.51889 + 56 1 0.0 19.41208 6.07779 10.52927 + 57 1 0.0 19.15960 6.37609 6.25924 + 58 1 0.0 17.15579 3.19557 9.20103 + 59 1 0.0 17.07197 3.31049 7.41454 + 60 1 0.0 18.54903 2.67524 8.20436 + 61 2 0.0 5.18346 20.97409 24.28840 + 62 4 0.0 7.06396 20.17968 24.34847 + 63 3 0.0 7.63220 19.82889 22.59578 + 64 3 0.0 7.00272 18.55243 0.28036 + 65 3 0.0 8.05085 21.13715 0.03620 + 66 1 0.0 7.56109 18.51690 1.09952 + 67 1 0.0 8.44257 20.31624 22.30833 + 68 1 0.0 4.83239 21.17976 0.30904 + 69 1 0.0 5.19182 21.91237 23.71419 + 70 1 0.0 4.49282 20.26573 23.80772 + 71 2 0.0 21.82701 12.79861 20.63056 + 72 4 0.0 21.27646 11.09990 19.63611 + 73 3 0.0 19.52930 10.64327 20.13923 + 74 3 0.0 22.41924 9.70346 20.14638 + 75 3 0.0 21.34556 11.30206 18.11274 + 76 1 0.0 22.94464 9.30084 19.40876 + 77 1 0.0 18.86743 10.62817 19.40629 + 78 1 0.0 22.85378 13.07853 20.35349 + 79 1 0.0 21.14666 13.62206 20.37063 + 80 1 0.0 21.78702 12.62668 21.71522 + 81 2 0.0 4.84801 10.63893 5.85720 + 82 4 0.0 2.99668 11.06158 5.10490 + 83 3 0.0 3.09505 11.09458 3.23258 + 84 3 0.0 2.48053 12.76555 5.69567 + 85 3 0.0 1.96195 10.01780 5.55634 + 86 1 0.0 1.65323 12.78746 6.24245 + 87 1 0.0 2.52753 10.43264 2.76734 + 88 1 0.0 4.80984 10.62196 6.95551 + 89 1 0.0 5.18492 9.65688 5.49273 + 90 1 0.0 5.56737 11.40648 5.53568 + 91 2 0.0 13.58126 9.47098 19.40329 + 92 4 0.0 14.17691 10.17243 21.22692 + 93 3 0.0 14.44428 12.02521 21.10583 + 94 3 0.0 15.81206 9.37183 21.67632 + 95 3 0.0 13.12907 9.86545 22.30960 + 96 1 0.0 15.80034 8.83149 22.50703 + 97 1 0.0 13.87232 12.57457 21.69672 + 98 1 0.0 13.42563 8.38456 19.45392 + 99 1 0.0 12.63978 9.95672 19.10431 + 100 1 0.0 14.35123 9.68789 18.64825 diff --git a/examples/kim/in.kim.VOH.simulator.model b/examples/kim/in.kim.VOH.simulator.model new file mode 100644 index 0000000000..3803ceceba --- /dev/null +++ b/examples/kim/in.kim.VOH.simulator.model @@ -0,0 +1,24 @@ +# REAX potential for VOH system +# ..... + +units real +atom_style charge + +kim_style init Sim_LAMMPS_ReaxFF_ChenowethVanDuinPersson_2008_CHOV__SM_429148913211_000 + +read_data data.VOH + +kim_style define NULL H C O V + +neighbor 2 bin +neigh_modify every 10 delay 0 check no + +fix 1 all nve +fix 2 all qeq/reax 1 0.0 10.0 1e-6 param.qeq +fix 3 all temp/berendsen 500.0 500.0 100.0 + +timestep 0.25 + +#dump 1 all atom 30 dump.reax.voh + +run 300 diff --git a/examples/kim/in.kim.ex_si_1.simulator_model b/examples/kim/in.kim.ex_si_1.simulator_model new file mode 100644 index 0000000000..03f9c25a33 --- /dev/null +++ b/examples/kim/in.kim.ex_si_1.simulator_model @@ -0,0 +1,69 @@ + +units metal +kim_style init ex_sim_model_Si_mod_tersoff + +atom_style atomic +atom_modify map array +boundary p p p + +# temperatures +variable tlo equal 1800.0 +variable thi equal 2400.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a & + a1 1.0 0.0 0.0 & + a2 0.0 1.0 0.0 & + a3 0.0 0.0 1.0 & + basis 0.0 0.0 0.0 & + basis 0.0 0.5 0.5 & + basis 0.5 0.0 0.5 & + basis 0.5 0.5 0.0 & + basis 0.25 0.25 0.25 & + basis 0.25 0.75 0.75 & + basis 0.75 0.25 0.75 & + basis 0.75 0.75 0.25 + +region myreg block 0 4 & + 0 4 & + 0 4 +create_box 1 myreg +create_atoms 1 region myreg + +mass 1 28.06 + +group Si type 1 + +velocity all create ${thi} 5287286 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +delete_atoms group del +kim_style define ex_sim_model_Si_mod_tersoff Si + +thermo 10 + +fix 1 all nve +fix 2 all langevin ${thi} ${thi} 0.1 48278 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +run 100 + diff --git a/examples/kim/in.kim.ex_si_2.simulator_model b/examples/kim/in.kim.ex_si_2.simulator_model new file mode 100644 index 0000000000..18efd94222 --- /dev/null +++ b/examples/kim/in.kim.ex_si_2.simulator_model @@ -0,0 +1,69 @@ + +units metal +kim_style init ex_sim_model_Si_mod_tersoff + +atom_style atomic +atom_modify map array +boundary p p p + +# temperatures +variable tlo equal 1800.0 +variable thi equal 2400.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a & + a1 1.0 0.0 0.0 & + a2 0.0 1.0 0.0 & + a3 0.0 0.0 1.0 & + basis 0.0 0.0 0.0 & + basis 0.0 0.5 0.5 & + basis 0.5 0.0 0.5 & + basis 0.5 0.5 0.0 & + basis 0.25 0.25 0.25 & + basis 0.25 0.75 0.75 & + basis 0.75 0.25 0.75 & + basis 0.75 0.75 0.25 + +region myreg block 0 4 & + 0 4 & + 0 4 +create_box 1 myreg +create_atoms 1 region myreg + +mass 1 28.06 + +group Si type 1 + +velocity all create ${thi} 5287286 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +delete_atoms group del +kim_style define NULL Si + +thermo 10 + +fix 1 all nve +fix 2 all langevin ${thi} ${thi} 0.1 48278 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +run 100 + diff --git a/examples/kim/in.kim.simulator-model b/examples/kim/in.kim.lj.simulator-model similarity index 88% rename from examples/kim/in.kim.simulator-model rename to examples/kim/in.kim.lj.simulator-model index 1e6e9dec89..21d60a48d9 100644 --- a/examples/kim/in.kim.simulator-model +++ b/examples/kim/in.kim.lj.simulator-model @@ -16,18 +16,19 @@ variable zz equal 20*$z units metal atom_style atomic +newton on lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} -create_box 2 box +create_box 1 box create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -kim_style define ex_sim_model_Si_mod_tersoff Si Si +kim_style define LennardJones_Ar Ar -mass * 39.95 +mass 1 39.95 velocity all create 200.0 232345 loop geom neighbor 0.3 bin From eb6287d2e8877c3b56af90b89a692c64d9a00036 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 27 May 2019 23:26:46 -0400 Subject: [PATCH 117/760] correctly check for supported species --- src/KIM/kim_style.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index e8aee77b66..eac16f1a8a 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -232,17 +232,26 @@ void KimStyle::do_defn(int narg, char **arg) // validate species selection int sim_num_species; + bool species_is_supported; const std::string *sim_species; simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); - for (int i=0; i < sim_num_species; ++i) { - simulatorModel->GetSupportedSpecies(i, &sim_species); - strcpy(strbuf,atom_type_sym_list.c_str()); - strword = strtok(strbuf," \t"); - while (strword) { - if ((strcmp(strword,"NULL") != 0) && (strcmp(sim_species->c_str(),strword) != 0)) - error->all(FLERR,"Species not supported by KIM Simulator Model"); - strword = strtok(NULL," \t"); + strcpy(strbuf,atom_type_sym_list.c_str()); + strword = strtok(strbuf," \t"); + while (strword) { + species_is_supported = false; + if (strcmp(strword,"NULL") == 0) continue; + for (int i=0; i < sim_num_species; ++i) { + simulatorModel->GetSupportedSpecies(i, &sim_species); + if (strcmp(sim_species->c_str(),strword) == 0) + species_is_supported = true; } + if (!species_is_supported) { + std::string msg("Species '"); + msg += strword; + msg += "' is not supported by this KIM Simulator Model"; + error->all(FLERR,msg.c_str()); + } + strword = strtok(NULL," \t"); } delete[] strbuf; From b3a01694b7312989554f24817bd94e8ccca2a83d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 27 May 2019 23:34:05 -0400 Subject: [PATCH 118/760] remove leftover fix qeq/reax command --- examples/kim/in.kim.VOH.simulator.model | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/kim/in.kim.VOH.simulator.model b/examples/kim/in.kim.VOH.simulator.model index 3803ceceba..a2dd6983c0 100644 --- a/examples/kim/in.kim.VOH.simulator.model +++ b/examples/kim/in.kim.VOH.simulator.model @@ -14,7 +14,6 @@ neighbor 2 bin neigh_modify every 10 delay 0 check no fix 1 all nve -fix 2 all qeq/reax 1 0.0 10.0 1e-6 param.qeq fix 3 all temp/berendsen 500.0 500.0 100.0 timestep 0.25 From e44c87773862cdf42fbb3e682cb12310f4d70e64 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 28 May 2019 10:21:29 -0600 Subject: [PATCH 119/760] 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 120/760] 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 121/760] 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 122/760] 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 123/760] 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 124/760] 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 125/760] 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 126/760] 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 127/760] 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 128/760] 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 129/760] 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 130/760] 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 131/760] 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 132/760] 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 133/760] 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 134/760] 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 113b8b4be23bdbcfde5031144110a26d178f29a0 Mon Sep 17 00:00:00 2001 From: "Dan S. Bolintineanu" Date: Thu, 30 May 2019 14:21:11 -0600 Subject: [PATCH 135/760] Fixes two bugs in pair granular: 1. User-set cutoffs did not work 2. Restarts not working --- src/GRANULAR/pair_granular.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 903ed303b0..913f6f8b59 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -890,6 +890,7 @@ void PairGranular::coeff(int narg, char **arg) if (iarg + 1 >= narg) error->all(FLERR, "Illegal pair_coeff command, not enough parameters"); cutoff_one = force->numeric(FLERR,arg[iarg+1]); + iarg += 2; } else error->all(FLERR, "Illegal pair coeff command"); } @@ -1234,7 +1235,7 @@ void PairGranular::write_restart(FILE *fp) fwrite(&tangential_coeffs[i][j],sizeof(double),3,fp); fwrite(&roll_coeffs[i][j],sizeof(double),3,fp); fwrite(&twist_coeffs[i][j],sizeof(double),3,fp); - fwrite(&cut[i][j],sizeof(double),1,fp); + fwrite(&cutoff_type[i][j],sizeof(double),1,fp); } } } @@ -1264,7 +1265,7 @@ void PairGranular::read_restart(FILE *fp) fread(&tangential_coeffs[i][j],sizeof(double),3,fp); fread(&roll_coeffs[i][j],sizeof(double),3,fp); fread(&twist_coeffs[i][j],sizeof(double),3,fp); - fread(&cut[i][j],sizeof(double),1,fp); + fread(&cutoff_type[i][j],sizeof(double),1,fp); } MPI_Bcast(&normal_model[i][j],1,MPI_INT,0,world); MPI_Bcast(&damping_model[i][j],1,MPI_INT,0,world); @@ -1275,7 +1276,7 @@ void PairGranular::read_restart(FILE *fp) MPI_Bcast(&tangential_coeffs[i][j],3,MPI_DOUBLE,0,world); MPI_Bcast(&roll_coeffs[i][j],3,MPI_DOUBLE,0,world); MPI_Bcast(&twist_coeffs[i][j],3,MPI_DOUBLE,0,world); - MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cutoff_type[i][j],1,MPI_DOUBLE,0,world); } } } From c903a110fea048b2de3375e550a602565f00a77c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 18:36:09 -0400 Subject: [PATCH 136/760] 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 24a63f0f31446f5a98a32325248cced2d1c6d21a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 21:51:13 -0400 Subject: [PATCH 137/760] update kim_style command semantics as discussed in PR #1440 this also adds documentation of error messages in the kim_style header --- doc/src/kim_style.txt | 50 ++++++++------ ...lator.model => in.kim.VOH.simulator_model} | 2 +- ...tor_model => in.kim.ex_si.simulator_model} | 2 +- examples/kim/in.kim.ex_si_1.simulator_model | 69 ------------------- ...ulator-model => in.kim.lj.simulator_model} | 4 +- src/KIM/kim_style.cpp | 33 +++------ src/KIM/kim_style.h | 36 ++++++++++ 7 files changed, 79 insertions(+), 117 deletions(-) rename examples/kim/{in.kim.VOH.simulator.model => in.kim.VOH.simulator_model} (92%) rename examples/kim/{in.kim.ex_si_2.simulator_model => in.kim.ex_si.simulator_model} (98%) delete mode 100644 examples/kim/in.kim.ex_si_1.simulator_model rename examples/kim/{in.kim.lj.simulator-model => in.kim.lj.simulator_model} (92%) diff --git a/doc/src/kim_style.txt b/doc/src/kim_style.txt index ab605c017a..dcdfae1cdc 100644 --- a/doc/src/kim_style.txt +++ b/doc/src/kim_style.txt @@ -10,17 +10,18 @@ kim_style command :h3 [Syntax:] -kim_style mode model args :pre +kim_style mode args :pre -mode = {init} or {define} -model = name of the KIM model (potential or simulator model) or NULL -args = atom type to species mapping ({define} option only, one entry per atom type) :ul +mode = {init model} or {define typeargs} +model = name of the KIM model (KIM potential or KIM simulator model) +typeargs = atom type to species mapping (one entry per atom type) :ul [Examples:] kim_style init ex_sim_model_Si_mod_tersoff -kim_style define NULL Si Si -kim_style define LennardJones_Ar Ar :pre +kim_style define Si Si +kim_style init LennardJones_Ar +kim_style define Ar :pre [Description:] @@ -29,27 +30,34 @@ The kim_style command is a high-level wrapper around the repository of interatomic potentials, so that they can be used by LAMMPS scripts. It does not implement any computations directly, but rather will generate LAMMPS input commands based on the information -retrieved from the OpenKIM repository. It is primarily meant to realize -so-called "KIM Simulator Models", which are OpenKIM repository entries -of models using native features of the simulation engine, i.e. LAMMPS +retrieved from the OpenKIM repository. It is able to realize so-called +"KIM Simulator Models", which are OpenKIM repository entries of models +using native features of the simulation engine in use, i.e. LAMMPS in this case, but it also supports realizing conventional KIM models -via the "pair_style kim"_pair_kim.html command. +implicitly via generating a "pair_style kim"_pair_kim.html command +followed by a suitable "pair_coeff"_pair_coeff.html command. The kim_style command has two modes, {init} and {define}, indicated by the first argument to the kim_style command. An {init} mode command must be issued [before] the simulation box is created, while the {define} -mode version may only be used [after] the simulation box exists. The -{init} mode version is only required, if the KIM model requires it. -The second argument to the kim_style command is the KIM model ID. It -can be set to NULL in the kim_style define command, if it was already -set in a kim_style init command. Otherwise, the two model IDs must match. +mode version may only be used [after] the simulation box exists. Both +are required. The {init} mode version sets the model name and may issue +additional commands changing LAMMPS default settings that are required +for using a selected simulator model. If needed, those settings can be +overridden. The second argument to the {kim_style init} command is the +KIM model ID. -Only the kim_style define command allows additional arguments. Those -are used to map the atom types in LAMMPS to the available species in -the KIM model. This is equivalent to the arguments following -"pair_coeff * *" in a "kim"_pair_kim.html pair style. Thus the command +The {kim_style define} command will issue commands that will realize +the selected model (through generating pair_style and pair_coeff commands, +but also other commands, as required). It has to be issued [after] the +the simulation box is defined. The {kim_style define} command allows a +varying numbver of additional arguments. Those are used to map the atom +types in LAMMPS to the available species in the KIM model. This is +equivalent to the arguments following "pair_coeff * *" in a +"kim"_pair_kim.html pair style. Thus the commands: -kim_style define LennardJones_Ar Ar :pre +kim_style init LennardJones_Ar +kim_style define Ar :pre will generate the LAMMPS input commands: @@ -60,7 +68,7 @@ For simulator models, the generated input commands may be more complex and require that LAMMPS is built with the required packages included. The commands generated by the kim_style command, can be copied to the screen or log file, through the "echo"_echo.html command. -The kim_style command will also validate, that the selected simulator +The kim_style command will also validate, that a selected simulator model was generated for the LAMMPS MD code and not some other software. In addition, the version strings for LAMMPS version used for defining the simulator model and the LAMMPS version being currently run are diff --git a/examples/kim/in.kim.VOH.simulator.model b/examples/kim/in.kim.VOH.simulator_model similarity index 92% rename from examples/kim/in.kim.VOH.simulator.model rename to examples/kim/in.kim.VOH.simulator_model index a2dd6983c0..8696cf265a 100644 --- a/examples/kim/in.kim.VOH.simulator.model +++ b/examples/kim/in.kim.VOH.simulator_model @@ -8,7 +8,7 @@ kim_style init Sim_LAMMPS_ReaxFF_ChenowethVanDuinPersson_2008_CHOV__SM_429148913 read_data data.VOH -kim_style define NULL H C O V +kim_style define H C O V neighbor 2 bin neigh_modify every 10 delay 0 check no diff --git a/examples/kim/in.kim.ex_si_2.simulator_model b/examples/kim/in.kim.ex_si.simulator_model similarity index 98% rename from examples/kim/in.kim.ex_si_2.simulator_model rename to examples/kim/in.kim.ex_si.simulator_model index 18efd94222..2f9e79ef4e 100644 --- a/examples/kim/in.kim.ex_si_2.simulator_model +++ b/examples/kim/in.kim.ex_si.simulator_model @@ -54,7 +54,7 @@ velocity all create ${thi} 5287286 mom yes rot yes dist gaussian group del id 300 delete_atoms group del -kim_style define NULL Si +kim_style define Si thermo 10 diff --git a/examples/kim/in.kim.ex_si_1.simulator_model b/examples/kim/in.kim.ex_si_1.simulator_model deleted file mode 100644 index 03f9c25a33..0000000000 --- a/examples/kim/in.kim.ex_si_1.simulator_model +++ /dev/null @@ -1,69 +0,0 @@ - -units metal -kim_style init ex_sim_model_Si_mod_tersoff - -atom_style atomic -atom_modify map array -boundary p p p - -# temperatures -variable tlo equal 1800.0 -variable thi equal 2400.0 - -# coordination number cutoff - -variable r equal 2.835 - -# minimization parameters - -variable etol equal 1.0e-5 -variable ftol equal 1.0e-5 -variable maxiter equal 100 -variable maxeval equal 100 -variable dmax equal 1.0e-1 - -# diamond unit cell - -variable a equal 5.431 -lattice custom $a & - a1 1.0 0.0 0.0 & - a2 0.0 1.0 0.0 & - a3 0.0 0.0 1.0 & - basis 0.0 0.0 0.0 & - basis 0.0 0.5 0.5 & - basis 0.5 0.0 0.5 & - basis 0.5 0.5 0.0 & - basis 0.25 0.25 0.25 & - basis 0.25 0.75 0.75 & - basis 0.75 0.25 0.75 & - basis 0.75 0.75 0.25 - -region myreg block 0 4 & - 0 4 & - 0 4 -create_box 1 myreg -create_atoms 1 region myreg - -mass 1 28.06 - -group Si type 1 - -velocity all create ${thi} 5287286 mom yes rot yes dist gaussian - -# make a vacancy - -group del id 300 -delete_atoms group del -kim_style define ex_sim_model_Si_mod_tersoff Si - -thermo 10 - -fix 1 all nve -fix 2 all langevin ${thi} ${thi} 0.1 48278 - -timestep 1.0e-3 -neighbor 1.0 bin -neigh_modify every 1 delay 10 check yes - -run 100 - diff --git a/examples/kim/in.kim.lj.simulator-model b/examples/kim/in.kim.lj.simulator_model similarity index 92% rename from examples/kim/in.kim.lj.simulator-model rename to examples/kim/in.kim.lj.simulator_model index 21d60a48d9..15b26c3c64 100644 --- a/examples/kim/in.kim.lj.simulator-model +++ b/examples/kim/in.kim.lj.simulator_model @@ -18,6 +18,8 @@ units metal atom_style atomic newton on +kim_style init LennardJones_Ar + lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box @@ -26,7 +28,7 @@ create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -kim_style define LennardJones_Ar Ar +kim_style define Ar mass 1 39.95 velocity all create 200.0 232345 loop geom diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index eac16f1a8a..856fb94c9e 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -79,7 +79,7 @@ void KimStyle::command(int narg, char **arg) if (narg < 2) error->all(FLERR,"Illegal kim_style command"); if (strcmp(arg[0],"init") == 0) { - if (narg > 2) error->all(FLERR,"Illegal kim_style init command"); + if (narg > 2) error->all(FLERR,"Illegal kim_style command"); if (domain->box_exist) error->all(FLERR,"Must use 'kim_style init' command before " "simulation box is defined"); @@ -167,10 +167,10 @@ void KimStyle::do_init(char *model) void KimStyle::do_defn(int narg, char **arg) { - if (narg != atom->ntypes + 1) - error->all(FLERR,"Incorrect number of arguments for kim_style define command"); + if (narg != atom->ntypes) + error->all(FLERR,"Illegal kim_style command"); - char *model = arg[0]; + char *model = NULL; KIM::SimulatorModel *simulatorModel(NULL); int kimerror; @@ -182,17 +182,9 @@ void KimStyle::do_defn(int narg, char **arg) int ifix = modify->find_fix("KIM_MODEL_STORE"); if (ifix >= 0) { FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; - if (strcmp(model,"NULL") == 0) - model = (char *)fix_store->getptr("model_name"); - else if (strcmp(model,(const char*)fix_store->getptr("model_name")) != 0) - error->all(FLERR,"Inconsistent KIM model name"); - + model = (char *)fix_store->getptr("model_name"); simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); - } else { - - kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); - if (kimerror) simulatorModel = NULL; - } + } else error->all(FLERR,"Must use 'kim_style init' before 'kim_style define'"); if (simulatorModel) { @@ -219,7 +211,7 @@ void KimStyle::do_defn(int narg, char **arg) if (*sim_name != "LAMMPS") error->all(FLERR,"Incompatible KIM Simulator Model"); - for (int i = 1; i < narg; i++) + for (int i = 0; i < narg; i++) atom_type_sym_list += std::string(" ") + arg[i]; simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); @@ -268,14 +260,6 @@ void KimStyle::do_defn(int narg, char **arg) if (*sim_value != update->unit_style) error->all(FLERR,"Incompatible units for KIM Simulator Model"); } - - if ((ifix < 0) && ( *sim_field == "model-init")) { - for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); - if (*sim_value != "") - error->all(FLERR,"Must use 'kim_style init' with this model"); - } - } } int sim_model_idx=-1; @@ -294,6 +278,7 @@ void KimStyle::do_defn(int narg, char **arg) error->all(FLERR,"KIM Simulator Model has no Model definition"); simulatorModel->ClearTemplateMap(); + } else { // not a simulator model. issue pair_style and pair_coeff commands. @@ -304,7 +289,7 @@ void KimStyle::do_defn(int narg, char **arg) cmd1 += model; std::string cmd2("pair_coeff * * "); - for (int i=1; i < narg; ++i) { + for (int i=0; i < narg; ++i) { cmd2 += arg[i]; cmd2 += " "; } diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index 588de6e620..eddc22eebc 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -83,5 +83,41 @@ class KimStyle : protected Pointers { /* ERROR/WARNING messages: +E: Illegal kim_style command + +Incorrect number or kind of arguments to kim_style + +E: Must use 'kim_style init' command before simulation box is defined + +Self-explanatory + +E: Must use 'kim_style define' command after simulation box is defined + +Self-explanatory + +E: Must use 'kim_style init' command before 'kim_style define' + +Self-explanatory + +E: Incompatible KIM Simulator Model + +The requested KIM Simulator Model was defined for a different MD code +and thus is not compatible with LAMMPS + +E: Species XXX is not supported by this KIM Simulator Model + +The kim_style define command was referencing a species that is not +present in the requested KIM Simulator Model + +E: Incompatible units for KIM Simulator Model + +The selected unit style is not compatible with the requested KIM +Simulator Model + +E: KIM Simulator Model has no Model definition + +There is no model definition (key: model-defn) in the KIM Simulator +Model. Please contact the OpenKIM database maintainers to verify +and potentially correct this. */ From c9fe5810c1c0029e42fa3ef1d1b4d6b0ea0f1c32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 21:52:23 -0400 Subject: [PATCH 138/760] add log outputs for updated kim_style command input examples --- ...og.30Apr2019.kim.VOH.simulator_model.g++.1 | 92 ++++++++++++ ....30Apr2019.kim.ex_si.simulator_model.g++.1 | 132 ++++++++++++++++++ ....30Apr2019.kim.ex_si.simulator_model.g++.4 | 132 ++++++++++++++++++ ...log.30Apr2019.kim.lj.simulator_model.g++.1 | 104 ++++++++++++++ ...log.30Apr2019.kim.lj.simulator_model.g++.4 | 104 ++++++++++++++ 5 files changed, 564 insertions(+) create mode 100644 examples/kim/log.30Apr2019.kim.VOH.simulator_model.g++.1 create mode 100644 examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.1 create mode 100644 examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.4 create mode 100644 examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.1 create mode 100644 examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.4 diff --git a/examples/kim/log.30Apr2019.kim.VOH.simulator_model.g++.1 b/examples/kim/log.30Apr2019.kim.VOH.simulator_model.g++.1 new file mode 100644 index 0000000000..e9d1f17d76 --- /dev/null +++ b/examples/kim/log.30Apr2019.kim.VOH.simulator_model.g++.1 @@ -0,0 +1,92 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# REAX potential for VOH system +# ..... + +units real +atom_style charge + +kim_style init Sim_LAMMPS_ReaxFF_ChenowethVanDuinPersson_2008_CHOV__SM_429148913211_000 +units real +atom_style charge +neigh_modify one 4000 + +read_data data.VOH + orthogonal box = (0 0 0) to (25 25 25) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 100 atoms + read_data CPU = 0.000217199 secs + +kim_style define H C O V +Using KIM Simulator Model : Sim_LAMMPS_ReaxFF_ChenowethVanDuinPersson_2008_CHOV__SM_429148913211_000 +For Simulator : LAMMPS 28-Feb-2019 +Running on : LAMMPS 30 Apr 2019 +pair_style reax/c /tmp/kim-simulator-model-parameter-file-XXXXXXFRmlac safezone 2.0 mincap 100 +pair_coeff * * /tmp/kim-simulator-model-parameter-file-XXXXXX363kge H C O V +Reading potential file /tmp/kim-simulator-model-parameter-file-XXXXXX363kge with DATE: 2011-02-18 +WARNING: Changed valency_val to valency_boc for X (src/USER-REAXC/reaxc_ffield.cpp:311) +fix reaxqeq all qeq/reax 1 0.0 10.0 1.0e-6 /tmp/kim-simulator-model-parameter-file-XXXXXXzgDl49 + +neighbor 2 bin +neigh_modify every 10 delay 0 check no + +fix 1 all nve +fix 3 all temp/berendsen 500.0 500.0 100.0 + +timestep 0.25 + +#dump 1 all atom 30 dump.reax.voh + +run 300 +Neighbor list info ... + update every 10 steps, delay 0 steps, check no + max neighbors/atom: 4000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair reax/c, perpetual + attributes: half, newton off, ghost + pair build: half/bin/newtoff/ghost + stencil: half/ghost/bin/3d/newtoff + bin: standard + (2) fix qeq/reax, perpetual, copy from (1) + attributes: half, newton off, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 25.97 | 25.97 | 25.97 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 -10246.825 0 -10246.825 42.256089 + 300 199.45773 -10218.342 0 -10159.482 -66.730725 +Loop time of 1.06721 on 1 procs for 300 steps with 100 atoms + +Performance: 6.072 ns/day, 3.953 hours/ns, 281.107 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 | 0.93954 | 0.93954 | 0.93954 | 0.0 | 88.04 +Neigh | 0.029087 | 0.029087 | 0.029087 | 0.0 | 2.73 +Comm | 0.0018935 | 0.0018935 | 0.0018935 | 0.0 | 0.18 +Output | 1.8358e-05 | 1.8358e-05 | 1.8358e-05 | 0.0 | 0.00 +Modify | 0.096112 | 0.096112 | 0.096112 | 0.0 | 9.01 +Other | | 0.0005522 | | | 0.05 + +Nlocal: 100 ave 100 max 100 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 608 ave 608 max 608 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3441 ave 3441 max 3441 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 3441 +Ave neighs/atom = 34.41 +Neighbor list builds = 30 +Dangerous builds not checked + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.1 b/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.1 new file mode 100644 index 0000000000..a6d1c4a955 --- /dev/null +++ b/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.1 @@ -0,0 +1,132 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task + +units metal +kim_style init ex_sim_model_Si_mod_tersoff +units metal +newton on + +atom_style atomic +atom_modify map array +boundary p p p + +# temperatures +variable tlo equal 1800.0 +variable thi equal 2400.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 1 by 1 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + create_atoms CPU = 0.000393867 secs + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create ${thi} 5287286 mom yes rot yes dist gaussian +velocity all create 2400 5287286 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 +kim_style define Si +Using KIM Simulator Model : ex_sim_model_Si_mod_tersoff +For Simulator : LAMMPS 12-Dec-2018 +Running on : LAMMPS 30 Apr 2019 +pair_style tersoff/mod +pair_coeff * * /tmp/kim-simulator-model-parameter-file-XXXXXXVWG8uV Si +Reading potential file /tmp/kim-simulator-model-parameter-file-XXXXXXVWG8uV with DATE: 2013-07-26 + +thermo 10 + +fix 1 all nve +fix 2 all langevin ${thi} ${thi} 0.1 48278 +fix 2 all langevin 2400 ${thi} 0.1 48278 +fix 2 all langevin 2400 2400 0.1 48278 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.3 + ghost atom cutoff = 4.3 + binsize = 2.15, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.11 | 3.11 | 3.11 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 2397.3877 -2363.0694 0 -2205.0272 15086.224 + 10 1328.4035 -2289.1682 0 -2201.5963 29164.666 + 20 1086.1557 -2254.4447 0 -2182.8424 31906.878 + 30 1528.8439 -2270.2968 0 -2169.5113 21610.528 + 40 1345.227 -2250.3915 0 -2161.7105 22146.886 + 50 1300.3329 -2235.8593 0 -2150.1379 23557.875 + 60 1546.1664 -2241.3019 0 -2139.3744 21648.774 + 70 1662.2896 -2236.2369 0 -2126.6543 23958.738 + 80 1631.7284 -2223.45 0 -2115.8821 28842.194 + 90 1795.3629 -2225.2998 0 -2106.9447 29522.37 + 100 1830.156 -2224.3733 0 -2103.7245 28805.09 +Loop time of 0.201725 on 1 procs for 100 steps with 511 atoms + +Performance: 42.831 ns/day, 0.560 hours/ns, 495.724 timesteps/s +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.19292 | 0.19292 | 0.19292 | 0.0 | 95.63 +Neigh | 0.0037313 | 0.0037313 | 0.0037313 | 0.0 | 1.85 +Comm | 0.00074744 | 0.00074744 | 0.00074744 | 0.0 | 0.37 +Output | 0.00026727 | 0.00026727 | 0.00026727 | 0.0 | 0.13 +Modify | 0.0036564 | 0.0036564 | 0.0036564 | 0.0 | 1.81 +Other | | 0.0004075 | | | 0.20 + +Nlocal: 511 ave 511 max 511 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 970 ave 970 max 970 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: 9174 ave 9174 max 9174 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9174 +Ave neighs/atom = 17.953 +Neighbor list builds = 4 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.4 b/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.4 new file mode 100644 index 0000000000..dcb170aeb6 --- /dev/null +++ b/examples/kim/log.30Apr2019.kim.ex_si.simulator_model.g++.4 @@ -0,0 +1,132 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task + +units metal +kim_style init ex_sim_model_Si_mod_tersoff +units metal +newton on + +atom_style atomic +atom_modify map array +boundary p p p + +# temperatures +variable tlo equal 1800.0 +variable thi equal 2400.0 + +# coordination number cutoff + +variable r equal 2.835 + +# minimization parameters + +variable etol equal 1.0e-5 +variable ftol equal 1.0e-5 +variable maxiter equal 100 +variable maxeval equal 100 +variable dmax equal 1.0e-1 + +# diamond unit cell + +variable a equal 5.431 +lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25 +Lattice spacing in x,y,z = 5.431 5.431 5.431 + +region myreg block 0 4 0 4 0 4 +create_box 1 myreg +Created orthogonal box = (0 0 0) to (21.724 21.724 21.724) + 1 by 2 by 2 MPI processor grid +create_atoms 1 region myreg +Created 512 atoms + create_atoms CPU = 0.102434 secs + +mass 1 28.06 + +group Si type 1 +512 atoms in group Si + +velocity all create ${thi} 5287286 mom yes rot yes dist gaussian +velocity all create 2400 5287286 mom yes rot yes dist gaussian + +# make a vacancy + +group del id 300 +1 atoms in group del +delete_atoms group del +Deleted 1 atoms, new total = 511 +kim_style define Si +Using KIM Simulator Model : ex_sim_model_Si_mod_tersoff +For Simulator : LAMMPS 12-Dec-2018 +Running on : LAMMPS 30 Apr 2019 +pair_style tersoff/mod +pair_coeff * * /tmp/kim-simulator-model-parameter-file-XXXXXXqDlERL Si +Reading potential file /tmp/kim-simulator-model-parameter-file-XXXXXXqDlERL with DATE: 2013-07-26 + +thermo 10 + +fix 1 all nve +fix 2 all langevin ${thi} ${thi} 0.1 48278 +fix 2 all langevin 2400 ${thi} 0.1 48278 +fix 2 all langevin 2400 2400 0.1 48278 + +timestep 1.0e-3 +neighbor 1.0 bin +neigh_modify every 1 delay 10 check yes + +run 100 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.3 + ghost atom cutoff = 4.3 + binsize = 2.15, bins = 11 11 11 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff/mod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.082 | 3.082 | 3.082 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 2397.5824 -2363.0694 0 -2205.0143 15087.562 + 10 1298.5003 -2292.5456 0 -2206.945 28361.893 + 20 1114.7065 -2260.7006 0 -2187.2161 30574.077 + 30 1504.9472 -2271.8639 0 -2172.6537 20395.651 + 40 1357.5949 -2248.6066 0 -2159.1103 21779.773 + 50 1351.7212 -2235.0803 0 -2145.9713 23404.844 + 60 1582.4191 -2238.3233 0 -2134.006 21711.26 + 70 1654.3988 -2230.0965 0 -2121.0341 24276.504 + 80 1654.9629 -2218.6654 0 -2109.5658 27571.472 + 90 1815.7206 -2219.2065 0 -2099.5093 28475.757 + 100 1901.1544 -2216.5428 0 -2091.2137 28962.04 +Loop time of 4.36959 on 4 procs for 100 steps with 511 atoms + +Performance: 1.977 ns/day, 12.138 hours/ns, 22.885 timesteps/s +47.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 | 0.051784 | 0.056551 | 0.064825 | 2.1 | 1.29 +Neigh | 0.00093389 | 0.001028 | 0.0011392 | 0.3 | 0.02 +Comm | 2.8964 | 2.9342 | 3.016 | 2.8 | 67.15 +Output | 0.673 | 0.68159 | 0.69707 | 1.1 | 15.60 +Modify | 0.0011303 | 0.0029655 | 0.0081694 | 5.5 | 0.07 +Other | | 0.6933 | | | 15.87 + +Nlocal: 127.75 ave 134 max 123 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +Nghost: 495 ave 498 max 489 min +Histogram: 1 0 0 0 0 0 0 1 1 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 2302 ave 2443 max 2194 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 9208 +Ave neighs/atom = 18.0196 +Neighbor list builds = 4 +Dangerous builds = 0 + +Total wall time: 0:00:05 diff --git a/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.1 b/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.1 new file mode 100644 index 0000000000..94aaf1aaef --- /dev/null +++ b/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.1 @@ -0,0 +1,104 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt +# +# This example requires that the example models provided with +# the kim-api package are installed. see the ./lib/kim/README or +# ./lib/kim/Install.py files for details on how to install these +# example models. +# + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable xx equal 20*1 +variable yy equal 20*$y +variable yy equal 20*1 +variable zz equal 20*$z +variable zz equal 20*1 + +units metal +atom_style atomic +newton on + +kim_style init LennardJones_Ar + +lattice fcc 4.4300 +Lattice spacing in x,y,z = 4.43 4.43 4.43 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +region box block 0 20 0 ${yy} 0 ${zz} +region box block 0 20 0 20 0 ${zz} +region box block 0 20 0 20 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 32000 atoms + create_atoms CPU = 0.00314307 secs + +#pair_style lj/cut 8.1500 +#pair_coeff 1 1 0.0104 3.4000 + +kim_style define Ar +pair_style kim LennardJones_Ar +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:980) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:985) +pair_coeff * * Ar + +mass 1 39.95 +velocity all create 200.0 232345 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 + +run 100 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 28.12 | 28.12 | 28.12 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 4.91804 on 1 procs for 100 steps with 32000 atoms + +Performance: 1.757 ns/day, 13.661 hours/ns, 20.333 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 | 4.3033 | 4.3033 | 4.3033 | 0.0 | 87.50 +Neigh | 0.53176 | 0.53176 | 0.53176 | 0.0 | 10.81 +Comm | 0.024606 | 0.024606 | 0.024606 | 0.0 | 0.50 +Output | 0.00016403 | 0.00016403 | 0.00016403 | 0.0 | 0.00 +Modify | 0.038671 | 0.038671 | 0.038671 | 0.0 | 0.79 +Other | | 0.01951 | | | 0.40 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 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.25375e+06 ave 4.25375e+06 max 4.25375e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.4 b/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.4 new file mode 100644 index 0000000000..3377f22d02 --- /dev/null +++ b/examples/kim/log.30Apr2019.kim.lj.simulator_model.g++.4 @@ -0,0 +1,104 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt +# +# This example requires that the example models provided with +# the kim-api package are installed. see the ./lib/kim/README or +# ./lib/kim/Install.py files for details on how to install these +# example models. +# + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable xx equal 20*1 +variable yy equal 20*$y +variable yy equal 20*1 +variable zz equal 20*$z +variable zz equal 20*1 + +units metal +atom_style atomic +newton on + +kim_style init LennardJones_Ar + +lattice fcc 4.4300 +Lattice spacing in x,y,z = 4.43 4.43 4.43 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +region box block 0 20 0 ${yy} 0 ${zz} +region box block 0 20 0 20 0 ${zz} +region box block 0 20 0 20 0 20 +create_box 1 box +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 32000 atoms + create_atoms CPU = 0.0979962 secs + +#pair_style lj/cut 8.1500 +#pair_coeff 1 1 0.0104 3.4000 + +kim_style define Ar +pair_style kim LennardJones_Ar +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:980) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:985) +pair_coeff * * Ar + +mass 1 39.95 +velocity all create 200.0 232345 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 + +run 100 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 9.789 | 9.789 | 9.789 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 6.29539 on 4 procs for 100 steps with 32000 atoms + +Performance: 1.372 ns/day, 17.487 hours/ns, 15.885 timesteps/s +48.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 | 1.9399 | 2.079 | 2.2181 | 9.1 | 33.02 +Neigh | 0.25924 | 0.26632 | 0.2692 | 0.8 | 4.23 +Comm | 2.5011 | 2.6605 | 2.751 | 5.9 | 42.26 +Output | 0.069904 | 0.07097 | 0.071545 | 0.3 | 1.13 +Modify | 0.011383 | 0.012206 | 0.01419 | 1.0 | 0.19 +Other | | 1.206 | | | 19.16 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.06344e+06 ave 1.06594e+06 max 1.05881e+06 min +Histogram: 1 0 0 0 0 0 1 0 0 2 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:07 From df1308ad922c4fd47bcd90bb5253540902ac2aff Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 21:58:18 -0400 Subject: [PATCH 139/760] add kim_style error messages to Errors_messages.txt doc file --- doc/src/Errors_messages.txt | 33 +++++++++++++++++++++++++++++++++ src/KIM/kim_style.h | 14 +++++++------- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index fb5003e602..7f6e80948c 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -5729,6 +5729,16 @@ definitions. :dd The data file header lists improper but no improper types. :dd +{Incompatible KIM Simulator Model} :dt + +The requested KIM Simulator Model was defined for a different MD code +and thus is not compatible with LAMMPS. :dd + +{Incompatible units for KIM Simulator Model} :dt + +The selected unit style is not compatible with the requested KIM +Simulator Model. :dd + {Incomplete use of variables in create_atoms command} :dt The var and set options must be used together. :dd @@ -6988,6 +6998,12 @@ The atom style defined does not have this attribute. :dd The atom style defined does not have these attributes. :dd +{KIM Simulator Model has no Model definition} :dt + +There is no model definition (key: model-defn) in the KIM Simulator +Model. Please contact the OpenKIM database maintainers to verify +and potentially correct this. :dd + {KOKKOS package does not yet support comm_style tiled} :dt Self-explanatory. :dd @@ -7475,6 +7491,18 @@ Self-explanatory. :dd Self-explanatory. :dd +{Must use 'kim_style init' command before simulation box is defined} :dt + +Self-explanatory. :dd + +{Must use 'kim_style define' command after simulation box is defined} :dt + +Self-explanatory. :dd + +{Must use 'kim_style init' command before 'kim_style define'} :dt + +Self-explanatory. :dd + {Must use 'kspace_modify pressure/scalar no' for rRESPA with kspace_style MSM} :dt The kspace scalar pressure option cannot (yet) be used with rRESPA. :dd @@ -9418,6 +9446,11 @@ See the "read_data extra/special/per/atom" command for info on how to leave space in the special bonds list to allow for additional bonds to be formed. :dd +{Species XXX is not supported by this KIM Simulator Model} :dt + +The kim_style define command was referencing a species that is not +present in the requested KIM Simulator Model. :dd + {Specified processors != physical processors} :dt The 3d grid of processors defined by the processors command does not diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index eddc22eebc..f8c0602beb 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -85,34 +85,34 @@ class KimStyle : protected Pointers { E: Illegal kim_style command -Incorrect number or kind of arguments to kim_style +Incorrect number or kind of arguments to kim_style. E: Must use 'kim_style init' command before simulation box is defined -Self-explanatory +Self-explanatory. E: Must use 'kim_style define' command after simulation box is defined -Self-explanatory +Self-explanatory. E: Must use 'kim_style init' command before 'kim_style define' -Self-explanatory +Self-explanatory. E: Incompatible KIM Simulator Model The requested KIM Simulator Model was defined for a different MD code -and thus is not compatible with LAMMPS +and thus is not compatible with LAMMPS. E: Species XXX is not supported by this KIM Simulator Model The kim_style define command was referencing a species that is not -present in the requested KIM Simulator Model +present in the requested KIM Simulator Model. E: Incompatible units for KIM Simulator Model The selected unit style is not compatible with the requested KIM -Simulator Model +Simulator Model. E: KIM Simulator Model has no Model definition From edecd2b7601f900e99b6eaeb9c3acb25dfe35edc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 22:19:47 -0400 Subject: [PATCH 140/760] fix typo and update list of false positives for updated docs --- doc/src/kim_style.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/kim_style.txt b/doc/src/kim_style.txt index dcdfae1cdc..afa7a19fab 100644 --- a/doc/src/kim_style.txt +++ b/doc/src/kim_style.txt @@ -51,7 +51,7 @@ The {kim_style define} command will issue commands that will realize the selected model (through generating pair_style and pair_coeff commands, but also other commands, as required). It has to be issued [after] the the simulation box is defined. The {kim_style define} command allows a -varying numbver of additional arguments. Those are used to map the atom +varying number of additional arguments. Those are used to map the atom types in LAMMPS to the available species in the KIM model. This is equivalent to the arguments following "pair_coeff * *" in a "kim"_pair_kim.html pair style. Thus the commands: diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 7160800c50..a8bfa8f193 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -521,6 +521,7 @@ decrementing deeppink deepskyblue defgrad +defn deformable del deleteIDs @@ -2792,6 +2793,7 @@ txt typeI typeJ typeN +typeargs Tz Tzou ub From 9d51ee17b0d8f82af96e8da6e610e1258c5d8270 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 22:23:50 -0400 Subject: [PATCH 141/760] 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 142/760] 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 143/760] 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 144/760] 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 145/760] 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 146/760] 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 147/760] 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 148/760] 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 149/760] 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 150/760] 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 151/760] 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 152/760] 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 153/760] 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 154/760] 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 155/760] 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 156/760] 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 157/760] 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 158/760] 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 159/760] 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 160/760] 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 161/760] 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 162/760] 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 163/760] 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 164/760] 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 165/760] 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 166/760] 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 167/760] 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 168/760] 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 169/760] 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 170/760] 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 171/760] 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 172/760] 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 173/760] 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 174/760] 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 175/760] 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 176/760] 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 177/760] 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 178/760] 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 179/760] 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 180/760] 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 181/760] 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 182/760] 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 183/760] 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 184/760] 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 185/760] 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 186/760] 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 187/760] 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 188/760] 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 189/760] 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 190/760] 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 191/760] 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 192/760] 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 193/760] 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 194/760] 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 195/760] 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 196/760] 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 197/760] 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 198/760] 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 199/760] 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 200/760] 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 201/760] 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 ad8fd4a2a46c004dba1313f9daa7896be8052077 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 16:13:09 -0400 Subject: [PATCH 202/760] Clean up comments --- src/USER-HMA/compute_hma.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index c0a7901640..ad86577ba1 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -119,6 +119,7 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : extvec.push_back(1); } else if (!strcasecmp(arg[iarg], "anharmonic")) { + // the first time we're called, we'll grab lattice pressure and energy returnAnharmonic = -1; } else { @@ -333,9 +334,7 @@ void ComputeHMA::compute_vector() } } -//adding PE for this processor - -//adding the energies of all processors + // compute and sum up properties across processors double fdrTotal; MPI_Allreduce(&fdr,&fdrTotal,1,MPI_DOUBLE,MPI_SUM,world); @@ -383,6 +382,7 @@ void ComputeHMA::compute_vector() } } if (returnAnharmonic == -1) { + // we have our lattice properties returnAnharmonic = 1; } } From 5c9c15025afffecd365bbbf40d5fc9cdc437cd6e Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 16:13:34 -0400 Subject: [PATCH 203/760] Add bits to Packages_details, Packages_user, fix up typos --- doc/src/Packages_details.txt | 20 ++++++++++++++++++++ doc/src/Packages_user.txt | 1 + doc/src/compute_hma.txt | 6 +++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 0ab1b5e4fd..b5050b8c4b 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -76,6 +76,7 @@ as contained in the file name. "USER-EFF"_#PKG-USER-EFF, "USER-FEP"_#PKG-USER-FEP, "USER-H5MD"_#PKG-USER-H5MD, +"USER-HMA"_#PKG-USER-HMA, "USER-INTEL"_#PKG-USER-INTEL, "USER-LB"_#PKG-USER-LB, "USER-MANIFOLD"_#PKG-USER-MANIFOLD, @@ -1373,6 +1374,25 @@ lib/h5md/README :line +USER-HMA package :link(PKG-USER-HMA),h4 + +[Contents:] + +Harmonically mapped averaging for efficient calculation of properties of +crystalline solids. The compute hma can specify use of HMA for calculation of +potential energy, pressure and heat capacity. + +[Author:] Apoorva Purohit, Andrew Schultz and David Kofke (University at +Buffalo, NY, USA) + +[Supporting info:] + +examples/USER/hma/README +src/USER-HMA/README +"compute hma"_compute_hma.html :ul + +:line + USER-INTEL package :link(PKG-USER-INTEL),h4 [Contents:] diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index 4210f617ef..3ce2a458b6 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -51,6 +51,7 @@ Package, Description, Doc page, Example, Library "USER-EFF"_Packages_details.html#PKG-USER-EFF, electron force field,"pair_style eff/cut"_pair_eff.html, USER/eff, no "USER-FEP"_Packages_details.html#PKG-USER-FEP, free energy perturbation,"compute fep"_compute_fep.html, USER/fep, no "USER-H5MD"_Packages_details.html#PKG-USER-H5MD, dump output via HDF5,"dump h5md"_dump_h5md.html, n/a, ext +"USER-HMA"_Packages_details.html#PKG-USER-HMA, compute properties via HMA,"compute hma"_compute_hma.html, USER/hma, no "USER-INTEL"_Packages_details.html#PKG-USER-INTEL, optimized Intel CPU and KNL styles,"Speed intel"_Speed_intel.html, "Benchmarks"_http://lammps.sandia.gov/bench.html, no "USER-LB"_Packages_details.html#PKG-USER-LB, Lattice Boltzmann fluid,"fix lb/fluid"_fix_lb_fluid.html, USER/lb, no "USER-MANIFOLD"_Packages_details.html#PKG-USER-MANIFOLD, motion on 2d surfaces,"fix manifoldforce"_fix_manifoldforce.html, USER/manifold, no diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index c4ade07ad7..340881bf68 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -61,7 +61,7 @@ The pressure is computed by the formula: \end\{equation\} where \(\rho\) is the number density of the system, \(\Delta \hat P\) is the -difference between theh harmonic and lattice pressure, and \(P_\{vir\}\) is +difference between the harmonic and lattice pressure, and \(P_\{vir\}\) is the virial pressure computed as the sum of pair, bond, angle, dihedral, improper, kspace (long-range), and fix contributions to the force on each atom. Although the method will work for any value of \(\Delta \hat P\) @@ -76,13 +76,13 @@ U_\{HMA\}^2 \right> - \left^2 \right)/T + \frac\{1\}\{4 T\} \left< F\bullet\Delta r + \Delta r \bullet \Phi \bullet \Delta r \right> \end\{equation\} -where \(\Phi\) is the Hessian of second derivatives. The compute hma command +where \(\Phi\) is the Hessian matrix. The compute hma command computes the full expression for \(C_V\) except for the \(\left^2\) in the variance term, which can be obtained by passing the {u} keyword; you must add this extra contribution to the \(C_V\) value reported by this compute. The variance term can cause significant roundoff error when computing \(C_V\). To address this, the {anharmonic} -keyword can be passed and/or the output format can be speicified with more +keyword can be passed and/or the output format can be specified with more digits. thermo_modify format float '%22.15e' :pre From e438d46ee2c54bdb5cb9927991329f071f5e87c2 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 16:14:28 -0400 Subject: [PATCH 204/760] Add README in src directory --- src/USER-HMA/README | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/USER-HMA/README diff --git a/src/USER-HMA/README b/src/USER-HMA/README new file mode 100644 index 0000000000..b27999341b --- /dev/null +++ b/src/USER-HMA/README @@ -0,0 +1,30 @@ +The HMA package implements the compute hma command for LAMMPS, which implements +harmonically-mapped averaging for crystalline solids. The current +implementation handles atomic crystals. + +Computing the heat capacity relies on being able to compute the second +derivative of the energy with respect to atom positions. This capability is +provided by the single2 method in Pair, but is currently only implemented for +the shifted-force LJ potential (lj/smooth/linear). Pair::single2 takes a single +pair and (like Pair::single) returns the energy and sets the force as an out +parameter, but also sets the elements of 6-element double array out parameter, +which are the unique components of the atomic Hessian tensor for the pair. A +helper method exists (Pair::pairTensor), which will compute the tensor from +linear derivatives and the vector between the positions. HMA Heat capacity can +be computed for other models by implementing single2 in those Pair classes. + +More information about HMA is available in these publications: + +A. J. Schultz, D. A. Kofke, “Comprehensive high-precision high-accuracy +equation of state and coexistence properties for classical Lennard-Jones +crystals and low-temperature fluid phases”, J. Chem. Phys. 149, 204508 (2018) +https://dx.doi.org/10.1063/1.5053714 + +S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Harmonically Assisted Methods for +Computing the Free Energy of Classical Crystals by Molecular Simulation: A +Comparative Study”, J. Chem. Theory Comput. 13, 825-834 (2017) +https://dx.doi.org/10.1021/acs.jctc.6b01082 + +S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Very fast averaging of thermal +properties of crystals by molecular simulation”, Phys. Rev. E 92, 043303 (2015) +https://dx.doi.org/10.1103/PhysRevE.92.043303 From b195ccfb27e0037e5e6f1836724d8ae042000ce0 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 17:08:40 -0400 Subject: [PATCH 205/760] Unbreak compute.txt --- doc/src/compute.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/src/compute.txt b/doc/src/compute.txt index c8456fb342..52ae5df0eb 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -169,7 +169,7 @@ There are also additional accelerated compute styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands compute"_Commands_compute.html doc page are followed by one or more of -(g,i,k,o,t) to indicate which accerlerated styles exist. +(g,i,k,o,t) to indicate which accelerated styles exist. "ackland/atom"_compute_ackland_atom.html - "adf"_compute_adf.html - angular distribution function of triples of atoms @@ -184,6 +184,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "bond/local"_compute_bond_local.html - distance and energy of each bond "centro/atom"_compute_centro_atom.html - centro-symmetry parameter for each atom "chunk/atom"_compute_chunk_atom.html - assign chunk IDs to each atom +"chunk/spread/atom"_compute_chunk_spread_atom.html - spreads chunk values to each atom in chunk "cluster/atom"_compute_cluster_atom.html - cluster ID for each atom "cna/atom"_compute_cna_atom.html - common neighbor analysis (CNA) for each atom "cnp/atom"_compute_cnp_atom.html - @@ -223,6 +224,12 @@ compute"_Commands_compute.html doc page are followed by one or more of "inertia/chunk"_compute_inertia_chunk.html - inertia tensor for each chunk "ke"_compute_ke.html - translational kinetic energy "ke/atom"_compute_ke_atom.html - kinetic energy for each atom +"ke/atom/eff"_compute_ke_atom_eff.html - +"ke/eff"_compute_ke_eff.html - +"ke/rigid"_compute_ke_rigid.html - translational kinetic energy of rigid bodies +"meso/e/atom"_compute_meso_e_atom.html - +"meso/rho/atom"_compute_meso_rho_atom.html - +"meso/t/atom"_compute_meso_t_atom.html - "msd"_compute_msd.html - mean-squared displacement of group of atoms "msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk "msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms @@ -239,10 +246,12 @@ compute"_Commands_compute.html doc page are followed by one or more of "pressure/cylinder"_compute_pressure_cylinder.html - "pressure/uef"_compute_pressure_uef.html - "property/atom"_compute_property_atom.html - convert atom attributes to per-atom vectors/arrays +"property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "property/local"_compute_property_local.html - convert local attributes to localvectors/arrays "ptm/atom"_compute_ptm_atom.html - "rdf"_compute_rdf.html - radial distribution function g(r) histogram of group of atoms "reduce"_compute_reduce.html - combine per-atom quantities into a single global value +"reduce/chunk"_compute_reduce_chunk.html - reduce per-atom quantities within each chunk "reduce/region"_compute_reduce.html - same as compute reduce, within a region "rigid/local"_compute_rigid_local.html - extract rigid body attributes "saed"_compute_saed.html - @@ -299,7 +308,8 @@ compute"_Commands_compute.html doc page are followed by one or more of "torque/chunk"_compute_torque_chunk.html - torque applied on each chunk "vacf"_compute_vacf.html - velocity auto-correlation function of group of atoms "vcm/chunk"_compute_vcm_chunk.html - velocity of center-of-mass for each chunk -"voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom :ul +"voronoi/atom"_compute_voronoi_atom.html - Voronoi volume and neighbors for each atom +"xrd"_compute_xrd.html - :ul [Restrictions:] none From 2d90bb994795f1a56fda0a4abb5a784c27a925fa Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 17:12:01 -0400 Subject: [PATCH 206/760] Unbreak computes.txt --- doc/src/computes.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/src/computes.txt b/doc/src/computes.txt index c636633b38..f3a552b740 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -6,6 +6,7 @@ Computes :h1 :maxdepth: 1 compute_ackland_atom + compute_adf compute_angle compute_angle_local compute_angmom_chunk @@ -15,6 +16,7 @@ Computes :h1 compute_bond_local compute_centro_atom compute_chunk_atom + compute_chunk_spread_atom compute_cluster_atom compute_cna_atom compute_cnp_atom @@ -67,12 +69,15 @@ Computes :h1 compute_pe_atom compute_plasticity_atom compute_pressure + compute_pressure_cylinder compute_pressure_uef compute_property_atom compute_property_chunk compute_property_local + compute_ptm_atom compute_rdf compute_reduce + compute_reduce_chunk compute_rigid_local compute_saed compute_slice @@ -90,7 +95,7 @@ Computes :h1 compute_smd_tlsph_strain compute_smd_tlsph_strain_rate compute_smd_tlsph_stress - compute_smd_triangle_mesh_vertices + compute_smd_triangle_vertices compute_smd_ulsph_num_neighs compute_smd_ulsph_strain compute_smd_ulsph_strain_rate @@ -99,6 +104,7 @@ Computes :h1 compute_sna_atom compute_spin compute_stress_atom + compute_stress_mop compute_tally compute_tdpd_cc_atom compute_temp From 8858846e399a0086d922bbc5bd7c03cb9262a1ca Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Mon, 10 Jun 2019 17:13:16 -0400 Subject: [PATCH 207/760] Unbreak pair.h --- src/pair.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pair.h b/src/pair.h index 7ebf56173c..3947f4cd81 100644 --- a/src/pair.h +++ b/src/pair.h @@ -221,6 +221,10 @@ class Pair : protected Pointers { typedef union {int i; float f;} union_int_float_t; + // Accessor for the user-intel package to determine virial calc for hybrid + + inline int fdotr_is_set() const { return vflag_fdotr; } + protected: int vflag_fdotr; int maxeatom,maxvatom; From 22fd12b56c803e6e0e5939bb0a950adf080c31a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Jun 2019 17:14:17 -0400 Subject: [PATCH 208/760] support storing unit conversion variable setting between kim_style calls --- src/KIM/fix_store_kim.cpp | 29 ++++++++++++++++++++++++++++- src/KIM/fix_store_kim.h | 2 ++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/KIM/fix_store_kim.cpp b/src/KIM/fix_store_kim.cpp index 8e9946c20d..6423a57e18 100644 --- a/src/KIM/fix_store_kim.cpp +++ b/src/KIM/fix_store_kim.cpp @@ -65,7 +65,8 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixStoreKIM::FixStoreKIM(LAMMPS *lmp, int narg, char **arg) - : Fix(lmp, narg, arg), simulator_model(NULL), model_name(NULL) + : Fix(lmp, narg, arg), simulator_model(NULL), model_name(NULL), + units_from(NULL), units_to(NULL) { if (narg != 3) error->all(FLERR,"Illegal fix STORE/KIM command"); } @@ -87,6 +88,18 @@ FixStoreKIM::~FixStoreKIM() delete[] mn; model_name = NULL; } + + if (units_from) { + char *uf = (char *)units_from; + delete[] uf; + units_from = NULL; + } + + if (units_to) { + char *ut = (char *)units_to; + delete[] ut; + units_to = NULL; + } } /* ---------------------------------------------------------------------- */ @@ -114,6 +127,18 @@ void FixStoreKIM::setptr(const char *name, void *ptr) delete[] mn; } model_name = ptr; + } else if (strcmp(name,"units_from") == 0) { + if (units_from) { + char *uf = (char *)units_from; + delete[] uf; + } + units_from = ptr; + } else if (strcmp(name,"units_to") == 0) { + if (units_to) { + char *ut = (char *)units_to; + delete[] ut; + } + units_to = ptr; } } @@ -123,5 +148,7 @@ void *FixStoreKIM::getptr(const char *name) { if (strcmp(name,"simulator_model") == 0) return simulator_model; else if (strcmp(name,"model_name") == 0) return model_name; + else if (strcmp(name,"units_from") == 0) return units_from; + else if (strcmp(name,"units_to") == 0) return units_to; else return NULL; } diff --git a/src/KIM/fix_store_kim.h b/src/KIM/fix_store_kim.h index 04081fd6dc..5bca2a3dd0 100644 --- a/src/KIM/fix_store_kim.h +++ b/src/KIM/fix_store_kim.h @@ -80,6 +80,8 @@ class FixStoreKIM : public Fix { private: void *simulator_model; // pointer to KIM simulator model class void *model_name; // string of KIM model name + void *units_from; // string of unit conversion origin or NULL + void *units_to; // string of unit conversion target or NULL }; } From 9a428217d9f9d864e7ff66618645dfab4be04341 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Jun 2019 17:19:18 -0400 Subject: [PATCH 209/760] prototype implementation of unit conversion variable support --- src/KIM/kim_style.cpp | 161 +++++++++++++++++++++++++++++++++++++++++- src/KIM/kim_style.h | 4 ++ 2 files changed, 162 insertions(+), 3 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 856fb94c9e..814da6b188 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -65,6 +65,7 @@ #include "update.h" #include "universe.h" #include "input.h" +#include "variable.h" #include "fix_store_kim.h" #include "KIM_SimulatorModel.hpp" @@ -78,20 +79,33 @@ void KimStyle::command(int narg, char **arg) { if (narg < 2) error->all(FLERR,"Illegal kim_style command"); + units_from = NULL; + units_to = NULL; + if (strcmp(arg[0],"init") == 0) { - if (narg > 2) error->all(FLERR,"Illegal kim_style command"); if (domain->box_exist) error->all(FLERR,"Must use 'kim_style init' command before " "simulation box is defined"); int len = strlen(arg[1])+1; char *model = new char[len]; strcpy(model,arg[1]); + + int args_done = do_units(narg-2,arg-2); + if (narg > (args_done + 2)) + error->all(FLERR,"Illegal kim_style command"); do_init(model); + do_variables(); } else if (strcmp(arg[0],"define") == 0) { if (!domain->box_exist) error->all(FLERR,"Must use 'kim_style define' command after " "simulation box is defined"); - do_defn(narg-1,arg+1); + int args_done = do_units(narg-1,arg-1); + do_defn(narg - (args_done+1),arg + (args_done+1)); + } else if (strcmp(arg[0],"unit_variables") == 0) { + int args_done = do_units(narg,arg); + if (narg > args_done) + error->all(FLERR,"Illegal kim_style command"); + do_variables(); } else error->all(FLERR,"Illegal kim_style command"); } @@ -113,6 +127,8 @@ void KimStyle::do_init(char *model) FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; fix_store->setptr("model_name", (void *) model); + fix_store->setptr("units_from", (void *) units_from); + fix_store->setptr("units_to", (void *) units_to); int kimerror; KIM::SimulatorModel * simulatorModel; @@ -172,7 +188,6 @@ void KimStyle::do_defn(int narg, char **arg) char *model = NULL; KIM::SimulatorModel *simulatorModel(NULL); - int kimerror; // check if we had a kim_style init command by finding fix STORE/KIM // retrieve model name and pointer to simulator model class instance. @@ -298,3 +313,143 @@ void KimStyle::do_defn(int narg, char **arg) input->one(cmd2.c_str()); } } + +/* ---------------------------------------------------------------------- */ + +int KimStyle::do_units(int narg, char **arg) +{ + // retrieve custom units setting if kim_style had been called before + + int ifix = modify->find_fix("KIM_MODEL_STORE"); + FixStoreKIM *fix_store = NULL; + if (ifix >= 0) { + fix_store = (FixStoreKIM *) modify->fix[ifix]; + units_from = (char *)fix_store->getptr("units_from"); + units_to = (char *)fix_store->getptr("units_to"); + } + + if (narg < 2) return 0; + int iarg=0; + for (iarg = 0; iarg < narg; iarg += 2) { + if (strcmp(arg[iarg],"unit_variables") == 0) { + if (narg > iarg+2) error->all(FLERR,"Illegal kim_style command"); + if (strcmp(arg[iarg+1],"NULL") == 0) { + delete[] units_to; + units_to = NULL; + } else { + int len = strlen(arg[iarg+1])+1; + delete[] units_to; + units_to = new char[len]; + strcpy(units_to,arg[iarg+1]); + } + if (fix_store) fix_store->setptr("units_to",units_to); + } else if (strcmp(arg[iarg],"unit_from") == 0) { + if (narg > iarg+2) error->all(FLERR,"Illegal kim_style command"); + if (strcmp(arg[iarg+1],"NULL") == 0) { + delete[] units_from; + units_from = NULL; + } else { + int len = strlen(arg[iarg+1])+1; + delete[] units_from; + units_from = new char[len]; + strcpy(units_from,arg[iarg+1]); + } + if (fix_store) fix_store->setptr("units_from",units_from); + } else return iarg; + } + return iarg; +} + +/* ---------------------------------------------------------------------- */ + +void KimStyle::do_variables() +{ + char *from, *to; + Variable *variable = input->variable; + + if (units_from) from = units_from; + else from = update->unit_style; + if (units_to) to = units_to; + else to = update->unit_style; + + // refuse convertion from or to reduced units + + if ((strcmp(from,"lj") == 0) || (strcmp(to,"lj") == 0)) + error->all(FLERR,"Cannot set up conversion variables for 'lj' units"); + + // get index to internal style variables. create, if needed. + // default to conversion factor 1.0 for newly created variables + + int v_length, v_mass, v_time; + char *args[3]; + args[1] = (char *)"internal"; + args[2] = (char *)"1.0"; + + args[0] = (char *)"_u_length"; + v_length = variable->find(args[0]); + if (v_length < 0) { + variable->set(3,args); + v_length = variable->find(args[0]); + } + + args[0] = (char *)"_u_mass"; + v_mass = variable->find(args[0]); + if (v_mass < 0) { + variable->set(3,args); + v_mass = variable->find(args[0]); + } + + args[0] = (char *)"_u_time"; + v_time = variable->find(args[0]); + if (v_time < 0) { + variable->set(3,args); + v_time = variable->find(args[0]); + } + + // special case: both unit styles are the same => conversion factor 1.0 + + if (strcmp(from,to) == 0) { + variable->internal_set(v_length,1.0); + variable->internal_set(v_mass,1.0); + variable->internal_set(v_time,1.0); + return; + } + + if (strcmp(from,"real") == 0) { + if (strcmp(to,"metal") == 0) { + variable->internal_set(v_length,1.0); + variable->internal_set(v_mass,1.0); + variable->internal_set(v_time,0.001); + } else { + std::string err("Do not know how to set up conversion variables "); + err += "between '"; + err += from; + err += "' and '"; + err += to; + err += "' units"; + error->all(FLERR,err.c_str()); + } + } else if (strcmp(from,"metal") == 0) { + if (strcmp(to,"real") == 0) { + variable->internal_set(v_length,1.0); + variable->internal_set(v_mass,1.0); + variable->internal_set(v_time,1000.0); + } else { + std::string err("Do not know how to set up conversion variables "); + err += "between '"; + err += from; + err += "' and '"; + err += to; + err += "' units"; + error->all(FLERR,err.c_str()); + } + } else { + std::string err("Do not know how to set up conversion variables "); + err += "between '"; + err += from; + err += "' and '"; + err += to; + err += "' units"; + error->all(FLERR,err.c_str()); + } +} diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index f8c0602beb..36084183ee 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -72,8 +72,12 @@ class KimStyle : protected Pointers { KimStyle(class LAMMPS *lmp) : Pointers(lmp) {}; void command(int, char **); private: + char *units_from; + char *units_to; void do_init(char *); void do_defn(int, char **); + int do_units(int, char **); + void do_variables(); }; } From 664b938ed12cafc2fa232a34abccd4d79278a494 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Jun 2019 17:45:07 -0400 Subject: [PATCH 210/760] document kim_style changes --- doc/src/kim_style.txt | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/doc/src/kim_style.txt b/doc/src/kim_style.txt index afa7a19fab..c24cfe8581 100644 --- a/doc/src/kim_style.txt +++ b/doc/src/kim_style.txt @@ -12,15 +12,18 @@ kim_style command :h3 kim_style mode args :pre -mode = {init model} or {define typeargs} +mode = {init model} or {define typeargs} or no mode chosen model = name of the KIM model (KIM potential or KIM simulator model) -typeargs = atom type to species mapping (one entry per atom type) :ul +typeargs = atom type to species mapping (one entry per atom type) +args = {unit_variables unit_style} or {unit_from unit_style} (optional):ul [Examples:] -kim_style init ex_sim_model_Si_mod_tersoff +kim_style init ex_sim_model_Si_mod_tersoff unit_variables metal kim_style define Si Si -kim_style init LennardJones_Ar +kim_style unit_variables real +kim_style init LennardJones_Ar unit_variables metal +kim_style unit_variables real unit_from metal kim_style define Ar :pre [Description:] @@ -47,6 +50,21 @@ for using a selected simulator model. If needed, those settings can be overridden. The second argument to the {kim_style init} command is the KIM model ID. +In both modes, the keywords {unit_variables} and {unit_from} may be +added. They control the values of a set of +"internal style variables"_variable.html that can be used to convert +between different unit styles in LAMMPS. The argument to +each keyword is a LAMMPS unit style or NULL, which means to look up +the unit style from what was set with the "units"_units.html command. +Please note, that KIM simulator models will set their preferred unit style. +By default all conversion variables are set to 1.0. Converting to or +from the "lj" unit style is not supported. The following variables are defined: + +_u_length +_u_mass +_u_time :ul + + The {kim_style define} command will issue commands that will realize the selected model (through generating pair_style and pair_coeff commands, but also other commands, as required). It has to be issued [after] the From fa764721355611257119b59f505ff00708b8c0a9 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 10 Jun 2019 15:48:53 -0600 Subject: [PATCH 211/760] 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 212/760] 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 213/760] 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 214/760] 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 215/760] 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 36ebf4d47ab3c6e6263bcdde2a7402089b04e524 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Tue, 11 Jun 2019 10:22:55 -0400 Subject: [PATCH 216/760] Make cmake aware of HMA --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 911b6f0f15..c2356002b2 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -177,8 +177,8 @@ 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-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-HMA + 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) From 3d5db63381117c65cb581920a11654a1682c4365 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 10:36:04 -0400 Subject: [PATCH 217/760] 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 218/760] 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 219/760] 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 220/760] 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 221/760] 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 222/760] 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 d9206127fb3bc2309d9260e06644d1025f7545a1 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 12 Jun 2019 11:40:21 -0400 Subject: [PATCH 223/760] Add hyphen to roundoff, fix false positives --- doc/src/compute_hma.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index 340881bf68..c203c281ed 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -81,7 +81,7 @@ computes the full expression for \(C_V\) except for the \(\left^2\) in the variance term, which can be obtained by passing the {u} keyword; you must add this extra contribution to the \(C_V\) value reported by this compute. The variance term can cause significant -roundoff error when computing \(C_V\). To address this, the {anharmonic} +round-off error when computing \(C_V\). To address this, the {anharmonic} keyword can be passed and/or the output format can be specified with more digits. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 7b7c4d11b2..4d3ea22491 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -98,6 +98,7 @@ antisymmetry anton Antonelli api +Apoorva Appl Apu arccos @@ -1064,6 +1065,7 @@ Hilger histo histogrammed histogramming +hma hmaktulga hoc Hochbruck @@ -1320,6 +1322,7 @@ kmax Kmax Knizhnik knl +Kofke Kohlmeyer Kohn kokkos @@ -1701,6 +1704,7 @@ Morteza Mosayebi Moseler Moskalev +Moustafa mov mpi MPI @@ -2200,6 +2204,7 @@ PTM ptr pu purdue +Purohit pushstore pvar pw @@ -2413,6 +2418,7 @@ Ryckaert Rycroft Rydbergs Rz +Sabry saddlebrown Sadigh saed From 56ae35fb1a4e23aff8238c7baccd747667f3a962 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 12 Jun 2019 13:09:33 -0400 Subject: [PATCH 224/760] Address feedback on PR #1503 --- src/USER-HMA/compute_hma.cpp | 47 ++++++++++++++++++----------------- src/pair.cpp | 2 +- src/pair_lj_smooth_linear.cpp | 4 +-- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index ad86577ba1..8edff5aa59 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -11,9 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include +#include #include -#include -#include #include "compute_hma.h" #include "atom.h" #include "update.h" @@ -100,25 +100,29 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : computeU = computeP = computeCv = -1; returnAnharmonic = 0; - std::vector extvec; + size_vector = 0; + memory->create(extlist, 3, "hma:extlist"); for (int iarg=4; iarg-1) continue; + computeU = size_vector; + extlist[size_vector] = 1; } - else if (!strcasecmp(arg[iarg], "p")) { + else if (!strcmp(arg[iarg], "p")) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix hma command"); - computeP = extvec.size(); + if (computeP>-1) continue; + computeP = size_vector; deltaPcap = force->numeric(FLERR, arg[iarg+1]); - extvec.push_back(0); + extlist[size_vector] = 0; iarg++; } - else if (!strcasecmp(arg[iarg], "cv")) { - computeCv = extvec.size(); + else if (!strcmp(arg[iarg], "cv")) { + if (computeCv>-1) continue; + computeCv = size_vector; comm_forward = 3; - extvec.push_back(1); + extlist[size_vector] = 1; } - else if (!strcasecmp(arg[iarg], "anharmonic")) { + else if (!strcmp(arg[iarg], "anharmonic")) { // the first time we're called, we'll grab lattice pressure and energy returnAnharmonic = -1; } @@ -127,18 +131,16 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : } } - if (extvec.size() == 0) { + if (size_vector == 0) { error->all(FLERR,"Illegal fix hma command"); } - size_vector = extvec.size(); - memory->create(vector, size_vector, "hma::vector"); - extlist = new int[size_vector]; - for (int i=0; igrow(extlist, size_vector, "hma:extlist"); } + memory->create(vector, size_vector, "hma:vector"); if (computeU>-1 || computeCv>-1) { - peflag = 1; + peflag = 1; } if (computeP>-1) { pressflag = 1; @@ -156,7 +158,7 @@ ComputeHMA::~ComputeHMA() delete [] id_fix; delete [] id_temp; - delete [] extlist; + memory->destroy(extlist); memory->destroy(vector); memory->destroy(deltaR); } @@ -184,11 +186,10 @@ void ComputeHMA::setup() if (temperat==NULL) error->all(FLERR,"Could not find compute hma temperature ID"); finaltemp = * temperat; - // set fix which stores original atom coords int ifix2 = modify->find_fix(id_fix); - if (ifix2 < 0) error->all(FLERR,"Could not find compute hma ID"); + if (ifix2 < 0) error->all(FLERR,"Could not find hma store fix ID"); fix = (FixStore *) modify->fix[ifix2]; } diff --git a/src/pair.cpp b/src/pair.cpp index c393e7b12b..15efa62c59 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -307,7 +307,7 @@ void Pair::init_style() specific pair style can override this function ------------------------------------------------------------------------- */ -void Pair::init_list(int which, NeighList *ptr) +void Pair::init_list(int /*which*/, NeighList *ptr) { list = ptr; } diff --git a/src/pair_lj_smooth_linear.cpp b/src/pair_lj_smooth_linear.cpp index 370caeddf7..d2bb6a1cc4 100644 --- a/src/pair_lj_smooth_linear.cpp +++ b/src/pair_lj_smooth_linear.cpp @@ -325,7 +325,7 @@ void PairLJSmoothLinear::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJSmoothLinear::single(int i, int j, int itype, int jtype, +double PairLJSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, double factor_coul, double factor_lj, double &fforce) @@ -347,7 +347,7 @@ double PairLJSmoothLinear::single(int i, int j, int itype, int jtype, return factor_lj*philj; } -double PairLJSmoothLinear::single2(int i, int j, int itype, int jtype, double rsq, +double PairLJSmoothLinear::single2(int /*i*/, int /*j*/, int itype, int jtype, double rsq, double delr[3], double factor_coul, double factor_lj, double &fforce, double d2u[6]) { From 7a33d1e328d71e339a709f7eb89da09348db2d73 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 12 Jun 2019 11:36:42 -0600 Subject: [PATCH 225/760] 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 226/760] 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 227/760] 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 228/760] 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 229/760] 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 230/760] 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 053ac654c31f33c97a3648fc2ef0864acff84de2 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 12 Jun 2019 20:32:22 -0400 Subject: [PATCH 231/760] Install.sh not needed --- src/USER-HMA/Install.sh | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 src/USER-HMA/Install.sh diff --git a/src/USER-HMA/Install.sh b/src/USER-HMA/Install.sh deleted file mode 100644 index 1f8f418ca2..0000000000 --- a/src/USER-HMA/Install.sh +++ /dev/null @@ -1,31 +0,0 @@ -# Install/Uninstall package files in LAMMPS -# mode = 0/1/2 for uninstall/install/update - -mode=$1 - -# enforce using portable C locale -LC_ALL=C -export LC_ALL - -# arg1 = file, arg2 = file it depends on - -action () { - if (test $mode = 0) then - rm -f ../$1 - elif (! cmp -s $1 ../$1) then - if (test -z "$2" || test -e ../$2) then - cp $1 .. - if (test $mode = 2) then - echo " updating src/$1" - fi - fi - elif (test -n "$2") then - if (test ! -e ../$2) then - rm -f ../$1 - fi - fi -} - -# package files without dependencies -action compute_hma.h -action compute_hma.cpp From 65b87fa2781c5f7dd9a4599193c026d8b37825ae Mon Sep 17 00:00:00 2001 From: "Aidan P. Thompson" Date: Thu, 13 Jun 2019 09:54:56 -0600 Subject: [PATCH 232/760] 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 233/760] 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 234/760] 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 235/760] 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 236/760] 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 237/760] 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 238/760] 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 239/760] 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 7fab12c36f847efddd6d6e6c0d1939c0036be0eb Mon Sep 17 00:00:00 2001 From: Julien Devemy Date: Fri, 14 Jun 2019 16:53:26 +0200 Subject: [PATCH 240/760] Add keyword hybridpair for compute_pressure only on a certain pair of a hybrid pair --- src/compute_pressure.cpp | 17 +++++++++++++++++ src/compute_pressure.h | 1 + src/pair_hybrid.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index dde02a5aed..8381e04fa8 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -22,6 +22,7 @@ #include "fix.h" #include "force.h" #include "pair.h" +#include "pair_hybrid.h" #include "bond.h" #include "angle.h" #include "dihedral.h" @@ -66,6 +67,7 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : // process optional args + hybridpairflag = 0; if (narg == 4) { keflag = 1; pairflag = 1; @@ -79,6 +81,8 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : int iarg = 4; while (iarg < narg) { if (strcmp(arg[iarg],"ke") == 0) keflag = 1; + else if (strcmp(arg[iarg],"hybridpair") == 0) + hybridpairflag = force->inumeric(FLERR, arg[++iarg]); else if (strcmp(arg[iarg],"pair") == 0) pairflag = 1; else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1; else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1; @@ -140,6 +144,12 @@ void ComputePressure::init() nvirial = 0; vptr = NULL; + if (hybridpairflag > 0 && force->pair) { + if (strstr(force->pair_style, "hybrid")) { + PairHybrid *ph = (PairHybrid *) force->pair; + if (hybridpairflag <= ph->nstyles) nvirial++; + } + } if (pairflag && force->pair) nvirial++; if (bondflag && atom->molecular && force->bond) nvirial++; if (angleflag && atom->molecular && force->angle) nvirial++; @@ -152,6 +162,13 @@ void ComputePressure::init() if (nvirial) { vptr = new double*[nvirial]; nvirial = 0; + if (hybridpairflag > 0 && force->pair) { + if (strstr(force->pair_style, "hybrid")) { + PairHybrid *ph = (PairHybrid *) force->pair; + if (hybridpairflag <= ph->nstyles) + vptr[nvirial++] = ph->styles[hybridpairflag-1]->virial; + } + } if (pairflag && force->pair) vptr[nvirial++] = force->pair->virial; if (bondflag && force->bond) vptr[nvirial++] = force->bond->virial; if (angleflag && force->angle) vptr[nvirial++] = force->angle->virial; diff --git a/src/compute_pressure.h b/src/compute_pressure.h index a59a64e634..3259377bd8 100644 --- a/src/compute_pressure.h +++ b/src/compute_pressure.h @@ -41,6 +41,7 @@ class ComputePressure : public Compute { Compute *temperature; char *id_temp; double virial[6]; + int hybridpairflag; int keflag,pairflag,bondflag,angleflag,dihedralflag,improperflag; int fixflag,kspaceflag; diff --git a/src/pair_hybrid.h b/src/pair_hybrid.h index e313e16f18..1e0130ba3d 100644 --- a/src/pair_hybrid.h +++ b/src/pair_hybrid.h @@ -33,6 +33,7 @@ class PairHybrid : public Pair { friend class Respa; friend class Info; friend class PairDeprecated; + friend class ComputePressure; public: PairHybrid(class LAMMPS *); virtual ~PairHybrid(); From db3de8a31bbf16063cf19b6e71939aa933cbeb39 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 14 Jun 2019 13:48:31 -0400 Subject: [PATCH 241/760] rename Pair::single to single2nd --- src/USER-HMA/compute_hma.cpp | 2 +- src/pair.h | 2 +- src/pair_lj_smooth_linear.cpp | 2 +- src/pair_lj_smooth_linear.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index 8edff5aa59..75ba335879 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -318,7 +318,7 @@ void ComputeHMA::compute_vector() if (rsq < cutsq[itype][jtype]) { double* jdr = deltaR[j]; double fforce, d2u[6]; - force->pair->single2(i, j, itype, jtype, rsq, delr, factor_coul, factor_lj, fforce, d2u); + force->pair->single2nd(i, j, itype, jtype, rsq, delr, factor_coul, factor_lj, fforce, d2u); int m = 0; for (int k=0; k<3; k++) { double a = fac; diff --git a/src/pair.h b/src/pair.h index 3947f4cd81..ae5bebf23a 100644 --- a/src/pair.h +++ b/src/pair.h @@ -149,7 +149,7 @@ class Pair : protected Pointers { void pairTensor(double fforce, double dfac, double delr[3], double phiTensor[6]); - virtual double single2(int, int, int, int, + virtual double single2nd(int, int, int, int, double, double[3], double, double, double& fforce, double d2u[6]) { fforce = 0.0; diff --git a/src/pair_lj_smooth_linear.cpp b/src/pair_lj_smooth_linear.cpp index d2bb6a1cc4..57f72dc28e 100644 --- a/src/pair_lj_smooth_linear.cpp +++ b/src/pair_lj_smooth_linear.cpp @@ -347,7 +347,7 @@ double PairLJSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, return factor_lj*philj; } -double PairLJSmoothLinear::single2(int /*i*/, int /*j*/, int itype, int jtype, double rsq, +double PairLJSmoothLinear::single2nd(int /*i*/, int /*j*/, int itype, int jtype, double rsq, double delr[3], double factor_coul, double factor_lj, double &fforce, double d2u[6]) { diff --git a/src/pair_lj_smooth_linear.h b/src/pair_lj_smooth_linear.h index 9cee9f2951..a43cbc23e2 100644 --- a/src/pair_lj_smooth_linear.h +++ b/src/pair_lj_smooth_linear.h @@ -38,7 +38,7 @@ class PairLJSmoothLinear : public Pair { void write_restart_settings(FILE *); void read_restart_settings(FILE *); double single(int, int, int, int, double, double, double, double &); - double single2(int, int, int, int, double, double[3], double, double, double&, double[6]); + double single2nd(int, int, int, int, double, double[3], double, double, double&, double[6]); protected: double cut_global; From 3611cfdaf8c153750ce8cc45ac239c1145eb0a2b Mon Sep 17 00:00:00 2001 From: mkanski Date: Fri, 14 Jun 2019 19:58:31 +0200 Subject: [PATCH 242/760] All styles support setting molecules' orientation --- doc/src/create_atoms.txt | 5 ++--- src/create_atoms.cpp | 10 ++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/src/create_atoms.txt b/doc/src/create_atoms.txt index d80e2d45f1..e673849793 100644 --- a/doc/src/create_atoms.txt +++ b/doc/src/create_atoms.txt @@ -242,9 +242,8 @@ write_dump all atom sinusoid.lammpstrj :pre :c,image(JPG/sinusoid_small.jpg,JPG/sinusoid.jpg) -The {rotate} keyword can only be used with the {single} style and -when adding a single molecule. It allows to specify the orientation -at which the molecule is inserted. The axis of rotation is +The {rotate} keyword allows to specify the orientation +at which molecules are inserted. The axis of rotation is determined by the rotation vector (Rx,Ry,Rz) that goes through the insertion point. The specified {theta} determines the angle of rotation around that axis. Note that the direction of rotation for diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 52e4256fca..8869171115 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -176,8 +176,6 @@ void CreateAtoms::command(int narg, char **arg) } else error->all(FLERR,"Illegal create_atoms command"); iarg += 3; } else if (strcmp(arg[iarg],"rotate") == 0) { - if (style != SINGLE) - error->all(FLERR,"Cannot use create_atoms rotate unless single style"); if (iarg+5 > narg) error->all(FLERR,"Illegal create_atoms command"); double thetaone; double axisone[3]; @@ -678,7 +676,9 @@ void CreateAtoms::add_random() coord[1] >= sublo[1] && coord[1] < subhi[1] && coord[2] >= sublo[2] && coord[2] < subhi[2]) { if (mode == ATOM) atom->avec->create_atom(ntype,xone); - else add_molecule(xone); + else if (quatone[0] == 0 && quatone[1] == 0 && quatone[2] == 0) + add_molecule(xone); + else add_molecule(xone, quatone); } } @@ -832,7 +832,9 @@ void CreateAtoms::add_lattice() // add the atom or entire molecule to my list of atoms if (mode == ATOM) atom->avec->create_atom(basistype[m],x); - else add_molecule(x); + else if (quatone[0] == 0 && quatone[1] == 0 && quatone[2] == 0) + add_molecule(x); + else add_molecule(x,quatone); } } } From 343bc728e205f9e33a739aac149c087faec093ee Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 14 Jun 2019 14:11:15 -0400 Subject: [PATCH 243/760] Cleanup: s/fix/compute/ and properly increment size_vector --- src/USER-HMA/compute_hma.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index 75ba335879..9f6a976332 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -107,13 +107,15 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : if (computeU>-1) continue; computeU = size_vector; extlist[size_vector] = 1; + size_vector++; } else if (!strcmp(arg[iarg], "p")) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix hma command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal compute hma command"); if (computeP>-1) continue; computeP = size_vector; deltaPcap = force->numeric(FLERR, arg[iarg+1]); extlist[size_vector] = 0; + size_vector++; iarg++; } else if (!strcmp(arg[iarg], "cv")) { @@ -121,18 +123,19 @@ ComputeHMA::ComputeHMA(LAMMPS *lmp, int narg, char **arg) : computeCv = size_vector; comm_forward = 3; extlist[size_vector] = 1; + size_vector++; } else if (!strcmp(arg[iarg], "anharmonic")) { // the first time we're called, we'll grab lattice pressure and energy returnAnharmonic = -1; } else { - error->all(FLERR,"Illegal fix hma command"); + error->all(FLERR,"Illegal compute hma command"); } } if (size_vector == 0) { - error->all(FLERR,"Illegal fix hma command"); + error->all(FLERR,"Illegal compute hma command"); } if (size_vector<3) { memory->grow(extlist, size_vector, "hma:extlist"); From 622cfd571818edc57f1b91443ed38c49f2c24e73 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Fri, 14 Jun 2019 14:12:09 -0400 Subject: [PATCH 244/760] Add single2nd_enable flag for Pair --- src/USER-HMA/compute_hma.cpp | 7 +++++++ src/pair.cpp | 1 + src/pair.h | 1 + src/pair_lj_smooth_linear.cpp | 4 +++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index 9f6a976332..bedcda769d 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -169,6 +169,13 @@ ComputeHMA::~ComputeHMA() /* ---------------------------------------------------------------------- */ void ComputeHMA::init() { + if (computeCv>-1) { + if (force->pair == NULL) + error->all(FLERR,"No pair style is defined for compute hma cv"); + if (force->pair->single_enable == 0) + error->all(FLERR,"Pair style does not support compute hma cv"); + } + int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; neighbor->requests[irequest]->compute = 1; diff --git a/src/pair.cpp b/src/pair.cpp index 15efa62c59..448df7f511 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -60,6 +60,7 @@ Pair::Pair(LAMMPS *lmp) : Pointers(lmp) comm_forward = comm_reverse = comm_reverse_off = 0; single_enable = 1; + single2nd_enable = 0; restartinfo = 1; respa_enable = 0; one_coeff = 0; diff --git a/src/pair.h b/src/pair.h index ae5bebf23a..d831e3010e 100644 --- a/src/pair.h +++ b/src/pair.h @@ -46,6 +46,7 @@ class Pair : protected Pointers { int comm_reverse_off; // size of reverse comm even if newton off int single_enable; // 1 if single() routine exists + int single2nd_enable; // 1 if single2nd() routine exists int restartinfo; // 1 if pair style writes restart info int respa_enable; // 1 if inner/middle/outer rRESPA routines int one_coeff; // 1 if allows only one coeff * * call diff --git a/src/pair_lj_smooth_linear.cpp b/src/pair_lj_smooth_linear.cpp index 57f72dc28e..0aa19570f2 100644 --- a/src/pair_lj_smooth_linear.cpp +++ b/src/pair_lj_smooth_linear.cpp @@ -30,7 +30,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairLJSmoothLinear::PairLJSmoothLinear(LAMMPS *lmp) : Pair(lmp) {} +PairLJSmoothLinear::PairLJSmoothLinear(LAMMPS *lmp) : Pair(lmp) { + single2nd_enable = 1; +} /* ---------------------------------------------------------------------- */ From e73b34a5b1fe9937b87e58b62dd20500d6a87a3e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Jun 2019 15:46:28 -0400 Subject: [PATCH 245/760] 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 246/760] 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 247/760] 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 248/760] 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 249/760] 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 250/760] 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 251/760] 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 252/760] 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 253/760] 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 254/760] 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 255/760] 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 256/760] 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 257/760] 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 258/760] 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 259/760] 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 260/760] 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 f8f8e441b90d818830121a669e96261beed16fc2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Jun 2019 07:06:54 -0400 Subject: [PATCH 261/760] add missing cmake package module --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 7f212ac48e..bde36aa896 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -303,6 +303,7 @@ include(Packages/USER-QUIP) include(Packages/USER-QMMM) include(Packages/USER-VTK) include(Packages/KIM) +include(Packages/LATTE) include(Packages/MESSAGE) include(Packages/MSCG) include(Packages/COMPRESS) From 959da9de013d29d9e58bb4d2c4b6d8a48308bdc5 Mon Sep 17 00:00:00 2001 From: Rupert Nash Date: Sat, 16 Feb 2019 14:49:44 +0000 Subject: [PATCH 262/760] Create a compute for the momentum of a group of atoms --- src/Makefile.list | 4 +-- src/compute_momentum.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ src/compute_momentum.h | 36 ++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/compute_momentum.cpp create mode 100644 src/compute_momentum.h diff --git a/src/Makefile.list b/src/Makefile.list index 65bbebca09..6e4c9726a6 100644 --- a/src/Makefile.list +++ b/src/Makefile.list @@ -7,9 +7,9 @@ SHELL = /bin/sh ROOT = lmp EXE = $(ROOT)_$@ -SRC = angle.cpp angle_charmm.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp bond.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_coord_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_local.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_nh.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_sphere.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_planeforce.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wall_region.cpp force.cpp group.cpp improper.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_hftn.cpp min_linesearch.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_born_coul_long.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_fs.cpp pair_eim.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_morse.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp +SRC = angle.cpp angle_charmm.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp bond.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_coord_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_ke.cpp compute_ke_atom.cpp compute_momentum.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_local.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_nh.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_sphere.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_planeforce.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wall_region.cpp force.cpp group.cpp improper.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_hftn.cpp min_linesearch.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_born_coul_long.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_fs.cpp pair_eim.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_morse.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp -INC = angle.h angle_charmm.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_full.h atom_vec_hybrid.h atom_vec_molecular.h bond.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_bond_local.h compute_centro_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_coord_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_sphere.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_local.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_nh.h fix_nh_sphere.h fix_nph.h fix_nph_sphere.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_planeforce.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_recenter.h fix_respa.h fix_rigid.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wall_region.h force.h group.h improper.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_extra.h memory.h min.h min_cg.h min_hftn.h min_linesearch.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_born_coul_long.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_dpd.h pair_dpd_tstat.h pair_eam.h pair_eam_alloy.h pair_eam_fs.h pair_eim.h pair_hybrid.h pair_hybrid_overlay.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_morse.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_region.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h version.h write_restart.h +INC = angle.h angle_charmm.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_full.h atom_vec_hybrid.h atom_vec_molecular.h bond.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_bond_local.h compute_centro_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_coord_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_sphere.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_ke.h compute_ke_atom.h compute_momentum.h compute_msd.h compute_msd_molecule.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_local.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_nh.h fix_nh_sphere.h fix_nph.h fix_nph_sphere.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_planeforce.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_recenter.h fix_respa.h fix_rigid.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wall_region.h force.h group.h improper.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_extra.h memory.h min.h min_cg.h min_hftn.h min_linesearch.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_born_coul_long.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_dpd.h pair_dpd_tstat.h pair_eam.h pair_eam_alloy.h pair_eam_fs.h pair_eim.h pair_hybrid.h pair_hybrid_overlay.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_morse.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_region.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h version.h write_restart.h OBJ = $(SRC:.cpp=.o) diff --git a/src/compute_momentum.cpp b/src/compute_momentum.cpp new file mode 100644 index 0000000000..f8fc0ec6ab --- /dev/null +++ b/src/compute_momentum.cpp @@ -0,0 +1,59 @@ + +#include +#include "compute_momentum.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "domain.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +ComputeMomentum::ComputeMomentum(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all(FLERR,"Illegal compute momentum command"); + + vector_flag = 1; + size_vector = 3; + extvector = 1; + vector = new double[size_vector]; +} + +ComputeMomentum::~ComputeMomentum() { + delete[] vector; +} + +void ComputeMomentum::init() +{ +} + +void ComputeMomentum::compute_vector() +{ + invoked_vector = update->ntimestep; + + double **v = atom->v; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *mask = atom->mask; + int *type = atom->type; + int nlocal = atom->nlocal; + + double mom[3] = {0.0, 0.0, 0.0}; + + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + for(int j = 0; j < 3; ++j) + mom[j] += rmass[i] * v[i][j]; + } + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + for(int j = 0; j < 3; ++j) + mom[j] += mass[type[i]] * v[i][j]; + } + + MPI_Allreduce(&mom, vector, 3, MPI_DOUBLE, MPI_SUM, world); +} diff --git a/src/compute_momentum.h b/src/compute_momentum.h new file mode 100644 index 0000000000..1e0c52c045 --- /dev/null +++ b/src/compute_momentum.h @@ -0,0 +1,36 @@ +#ifdef COMPUTE_CLASS + +ComputeStyle(momentum,ComputeMomentum) + +#else + +#ifndef LMP_COMPUTE_MOMENTUM_H +#define LMP_COMPUTE_MOMENTUM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeMomentum : public Compute { + public: + ComputeMomentum(class LAMMPS *, int, char **); + virtual ~ComputeMomentum(); + + virtual void init(); + virtual void compute_vector(); +}; + +} + +#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. + +*/ From 26347ec80ce8a33a4162d5d5275d8be52d6666fa Mon Sep 17 00:00:00 2001 From: Rupert Nash Date: Wed, 19 Jun 2019 13:55:10 +0100 Subject: [PATCH 263/760] Add docs for compute momentum --- doc/src/Commands_compute.txt | 1 + doc/src/compute.txt | 1 + doc/src/compute_momentum.txt | 45 ++++++++++++++++++++++++++++++++++++ doc/src/computes.txt | 1 + doc/src/lammps.book | 1 + 5 files changed, 49 insertions(+) create mode 100644 doc/src/compute_momentum.txt diff --git a/doc/src/Commands_compute.txt b/doc/src/Commands_compute.txt index f566702609..0817f44adf 100644 --- a/doc/src/Commands_compute.txt +++ b/doc/src/Commands_compute.txt @@ -80,6 +80,7 @@ KOKKOS, o = USER-OMP, t = OPT. "meso/e/atom"_compute_meso_e_atom.html, "meso/rho/atom"_compute_meso_rho_atom.html, "meso/t/atom"_compute_meso_t_atom.html, +"momentum"_compute_momentum.html, "msd"_compute_msd.html, "msd/chunk"_compute_msd_chunk.html, "msd/nongauss"_compute_msd_nongauss.html, diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 87dbee57d6..12c6b141b7 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -229,6 +229,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "meso/e/atom"_compute_meso_e_atom.html - "meso/rho/atom"_compute_meso_rho_atom.html - "meso/t/atom"_compute_meso_t_atom.html - +"momentum"_compute_momentum.html - translational momentum "msd"_compute_msd.html - mean-squared displacement of group of atoms "msd/chunk"_compute_msd_chunk.html - mean-squared displacement for each chunk "msd/nongauss"_compute_msd_nongauss.html - MSD and non-Gaussian parameter of group of atoms diff --git a/doc/src/compute_momentum.txt b/doc/src/compute_momentum.txt new file mode 100644 index 0000000000..4db171d42d --- /dev/null +++ b/doc/src/compute_momentum.txt @@ -0,0 +1,45 @@ +"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 momentum command :h3 + +[Syntax:] + +compute ID group-ID momentum :pre + +ID, group-ID are documented in "compute"_compute.html command +momentum = style name of this compute command :ul + +[Examples:] + +compute 1 all momentum :pre + +[Description:] + +Define a computation that calculates the translational momentum +of a group of particles. + +The momentum of each particles is computed as m v, where m and v are +the mass and velocity of the particle. + +[Output info:] + +This compute calculates a global vector (the summed momentum) on +length 3. This value can be used by any command that uses a global +vector value from a compute as input. See the "Howto +output"_Howto_output.html doc page for an overview of LAMMPS output +options. + +The vector value calculated by this compute is "extensive". The vector +value will be in momentum "units"_units.html. + +[Restrictions:] none + +[Related commands:] + +[Default:] none diff --git a/doc/src/computes.txt b/doc/src/computes.txt index 926b8da222..1c914365b1 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -57,6 +57,7 @@ Computes :h1 compute_meso_e_atom compute_meso_rho_atom compute_meso_t_atom + compute_momentum compute_msd compute_msd_chunk compute_msd_nongauss diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 2738c9b051..816acd3521 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -468,6 +468,7 @@ compute_ke_rigid.html compute_meso_e_atom.html compute_meso_rho_atom.html compute_meso_t_atom.html +compute_momentum.html compute_msd.html compute_msd_chunk.html compute_msd_nongauss.html From 52a3d825ef32729f101d2fe09703b519e3c06b0a Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 19 Jun 2019 13:35:35 -0400 Subject: [PATCH 264/760] Explain more about advantages of HMA, restrictions, point to examples/hma --- doc/src/compute_hma.txt | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index c203c281ed..58934be054 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -37,8 +37,24 @@ energy, pressure or heat capacity), using the harmonically-mapped averaging (HMA) method. This command yields much higher precision than the equivalent compute commands ("compute pe"_compute_pe.html, "compute pressure"_compute_pressure.html, etc.) -commands during a canonical simulation of an atomic crystal. +commands during a canonical simulation of an atomic crystal. Specifically, +near melting HMA can yield averages of a given precision an order of magnitude +faster than conventional methods, and this only improves as the temperatures is +lowered. This is particularly important for evaluating the free energy by +thermodynamic integration, where the low-temperature contributions are the +greatest source of statistical uncertainty. Moreover, HMA has other +advantages, including smaller potential-truncation effects, finite-size +effects, smaller timestep inaccuracy, faster equilibration and shorter +decorrelation time. +HMA should not be used if atoms are expected to diffuse. It is also +restricted to simulations in the NVT ensemble. + +Computation of the heat capacity with this compute is presently restricted to +the "lj_smooth_linear"_lj_smooth_linear.html pair style. Use with other pair +styles requires an additional method (single2nd) to be implemented in the +corresponding Pair class. Computation of the energy and pressure does not +have this restriction. In this method, the analytically known harmonic behavior of a crystal is removed from the traditional ensemble averages, which leads to an accurate and precise measurement of the anharmonic contributions without contamination @@ -119,7 +135,9 @@ NOTE: Compute hma should be used when the atoms of the solid do not diffuse. Dif NOTE: The "fix_modify energy yes"_fix_modify.html command must also be specified if a fix is to contribute potential energy to this command. -:line +An example input script that uses this compute is included in +examples/USER/hma/ along with corresponding LAMMPS output showing that the HMA +properties fluctuate less than the corresponding conventional properties. [Output info:] From 04cfaae54f99e7a6dc4e1cd4e10408a54f551a64 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 19 Jun 2019 13:37:41 -0400 Subject: [PATCH 265/760] Fold HMA README into source code in preparation for move to MISC --- src/USER-HMA/README | 30 ------------------------------ src/USER-HMA/compute_hma.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 30 deletions(-) delete mode 100644 src/USER-HMA/README diff --git a/src/USER-HMA/README b/src/USER-HMA/README deleted file mode 100644 index b27999341b..0000000000 --- a/src/USER-HMA/README +++ /dev/null @@ -1,30 +0,0 @@ -The HMA package implements the compute hma command for LAMMPS, which implements -harmonically-mapped averaging for crystalline solids. The current -implementation handles atomic crystals. - -Computing the heat capacity relies on being able to compute the second -derivative of the energy with respect to atom positions. This capability is -provided by the single2 method in Pair, but is currently only implemented for -the shifted-force LJ potential (lj/smooth/linear). Pair::single2 takes a single -pair and (like Pair::single) returns the energy and sets the force as an out -parameter, but also sets the elements of 6-element double array out parameter, -which are the unique components of the atomic Hessian tensor for the pair. A -helper method exists (Pair::pairTensor), which will compute the tensor from -linear derivatives and the vector between the positions. HMA Heat capacity can -be computed for other models by implementing single2 in those Pair classes. - -More information about HMA is available in these publications: - -A. J. Schultz, D. A. Kofke, “Comprehensive high-precision high-accuracy -equation of state and coexistence properties for classical Lennard-Jones -crystals and low-temperature fluid phases”, J. Chem. Phys. 149, 204508 (2018) -https://dx.doi.org/10.1063/1.5053714 - -S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Harmonically Assisted Methods for -Computing the Free Energy of Classical Crystals by Molecular Simulation: A -Comparative Study”, J. Chem. Theory Comput. 13, 825-834 (2017) -https://dx.doi.org/10.1021/acs.jctc.6b01082 - -S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Very fast averaging of thermal -properties of crystals by molecular simulation”, Phys. Rev. E 92, 043303 (2015) -https://dx.doi.org/10.1103/PhysRevE.92.043303 diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-HMA/compute_hma.cpp index bedcda769d..15cadbdd45 100644 --- a/src/USER-HMA/compute_hma.cpp +++ b/src/USER-HMA/compute_hma.cpp @@ -11,6 +11,38 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- +This compute implements harmonically-mapped averaging for crystalline solids. +The current implementation handles atomic crystals. + +Computing the heat capacity relies on being able to compute the second +derivative of the energy with respect to atom positions. This capability is +provided by the single2 method in Pair, but is currently only implemented for +the shifted-force LJ potential (lj/smooth/linear). Pair::single2 takes a single +pair and (like Pair::single) returns the energy and sets the force as an out +parameter, but also sets the elements of 6-element double array out parameter, +which are the unique components of the atomic Hessian tensor for the pair. A +helper method exists (Pair::pairTensor), which will compute the tensor from +linear derivatives and the vector between the positions. HMA Heat capacity can +be computed for other models by implementing single2 in those Pair classes. + +More information about HMA is available in these publications: + +A. J. Schultz, D. A. Kofke, “Comprehensive high-precision high-accuracy +equation of state and coexistence properties for classical Lennard-Jones +crystals and low-temperature fluid phases”, J. Chem. Phys. 149, 204508 (2018) +https://dx.doi.org/10.1063/1.5053714 + +S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Harmonically Assisted Methods for +Computing the Free Energy of Classical Crystals by Molecular Simulation: A +Comparative Study”, J. Chem. Theory Comput. 13, 825-834 (2017) +https://dx.doi.org/10.1021/acs.jctc.6b01082 + +S. G. Moustafa, A. J. Schultz, D. A. Kofke, “Very fast averaging of thermal +properties of crystals by molecular simulation”, Phys. Rev. E 92, 043303 (2015) +https://dx.doi.org/10.1103/PhysRevE.92.043303 +------------------------------------------------------------------------- */ + #include #include #include From 395a9d3739eef12917d172525de3414b6178ee5c Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 19 Jun 2019 16:12:15 -0400 Subject: [PATCH 266/760] Fold hma compute into USER-MISC --- cmake/CMakeLists.txt | 4 ++-- doc/src/Packages_details.txt | 20 ------------------- doc/src/Packages_user.txt | 1 - examples/USER/{ => misc}/hma/README | 0 examples/USER/{ => misc}/hma/hma.in | 0 .../USER/{ => misc}/hma/log.6Nov18.hma.g++.1 | 0 .../USER/{ => misc}/hma/log.6Nov18.hma.g++.4 | 0 src/{USER-HMA => USER-MISC}/compute_hma.cpp | 0 src/{USER-HMA => USER-MISC}/compute_hma.h | 0 9 files changed, 2 insertions(+), 23 deletions(-) rename examples/USER/{ => misc}/hma/README (100%) rename examples/USER/{ => misc}/hma/hma.in (100%) rename examples/USER/{ => misc}/hma/log.6Nov18.hma.g++.1 (100%) rename examples/USER/{ => misc}/hma/log.6Nov18.hma.g++.4 (100%) rename src/{USER-HMA => USER-MISC}/compute_hma.cpp (100%) rename src/{USER-HMA => USER-MISC}/compute_hma.h (100%) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c2356002b2..911b6f0f15 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -177,8 +177,8 @@ 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-HMA - USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE + 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) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 12f63e2e3b..1528adc420 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -76,7 +76,6 @@ as contained in the file name. "USER-EFF"_#PKG-USER-EFF, "USER-FEP"_#PKG-USER-FEP, "USER-H5MD"_#PKG-USER-H5MD, -"USER-HMA"_#PKG-USER-HMA, "USER-INTEL"_#PKG-USER-INTEL, "USER-LB"_#PKG-USER-LB, "USER-MANIFOLD"_#PKG-USER-MANIFOLD, @@ -1375,25 +1374,6 @@ lib/h5md/README :line -USER-HMA package :link(PKG-USER-HMA),h4 - -[Contents:] - -Harmonically mapped averaging for efficient calculation of properties of -crystalline solids. The compute hma can specify use of HMA for calculation of -potential energy, pressure and heat capacity. - -[Author:] Apoorva Purohit, Andrew Schultz and David Kofke (University at -Buffalo, NY, USA) - -[Supporting info:] - -examples/USER/hma/README -src/USER-HMA/README -"compute hma"_compute_hma.html :ul - -:line - USER-INTEL package :link(PKG-USER-INTEL),h4 [Contents:] diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index 3ce2a458b6..4210f617ef 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -51,7 +51,6 @@ Package, Description, Doc page, Example, Library "USER-EFF"_Packages_details.html#PKG-USER-EFF, electron force field,"pair_style eff/cut"_pair_eff.html, USER/eff, no "USER-FEP"_Packages_details.html#PKG-USER-FEP, free energy perturbation,"compute fep"_compute_fep.html, USER/fep, no "USER-H5MD"_Packages_details.html#PKG-USER-H5MD, dump output via HDF5,"dump h5md"_dump_h5md.html, n/a, ext -"USER-HMA"_Packages_details.html#PKG-USER-HMA, compute properties via HMA,"compute hma"_compute_hma.html, USER/hma, no "USER-INTEL"_Packages_details.html#PKG-USER-INTEL, optimized Intel CPU and KNL styles,"Speed intel"_Speed_intel.html, "Benchmarks"_http://lammps.sandia.gov/bench.html, no "USER-LB"_Packages_details.html#PKG-USER-LB, Lattice Boltzmann fluid,"fix lb/fluid"_fix_lb_fluid.html, USER/lb, no "USER-MANIFOLD"_Packages_details.html#PKG-USER-MANIFOLD, motion on 2d surfaces,"fix manifoldforce"_fix_manifoldforce.html, USER/manifold, no diff --git a/examples/USER/hma/README b/examples/USER/misc/hma/README similarity index 100% rename from examples/USER/hma/README rename to examples/USER/misc/hma/README diff --git a/examples/USER/hma/hma.in b/examples/USER/misc/hma/hma.in similarity index 100% rename from examples/USER/hma/hma.in rename to examples/USER/misc/hma/hma.in diff --git a/examples/USER/hma/log.6Nov18.hma.g++.1 b/examples/USER/misc/hma/log.6Nov18.hma.g++.1 similarity index 100% rename from examples/USER/hma/log.6Nov18.hma.g++.1 rename to examples/USER/misc/hma/log.6Nov18.hma.g++.1 diff --git a/examples/USER/hma/log.6Nov18.hma.g++.4 b/examples/USER/misc/hma/log.6Nov18.hma.g++.4 similarity index 100% rename from examples/USER/hma/log.6Nov18.hma.g++.4 rename to examples/USER/misc/hma/log.6Nov18.hma.g++.4 diff --git a/src/USER-HMA/compute_hma.cpp b/src/USER-MISC/compute_hma.cpp similarity index 100% rename from src/USER-HMA/compute_hma.cpp rename to src/USER-MISC/compute_hma.cpp diff --git a/src/USER-HMA/compute_hma.h b/src/USER-MISC/compute_hma.h similarity index 100% rename from src/USER-HMA/compute_hma.h rename to src/USER-MISC/compute_hma.h From 599ef7816180f783f8b10864380c3b7bc090f7ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Jun 2019 17:13:06 -0400 Subject: [PATCH 267/760] put dump_modify after the list of all dump variant doc pages --- doc/src/Commands_all.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 58ca148555..80f91d5291 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -50,11 +50,11 @@ An alphabetic list of all general LAMMPS commands. "dump"_dump.html, "dump adios"_dump_adios.html, "dump image"_dump_image.html, -"dump_modify"_dump_modify.html, "dump movie"_dump_image.html, "dump netcdf"_dump_netcdf.html, "dump netcdf/mpiio"_dump_netcdf.html, "dump vtk"_dump_vtk.html, +"dump_modify"_dump_modify.html, "dynamical_matrix"_dynamical_matrix.html, "echo"_echo.html, "fix"_fix.html, From f54ad0966849752c1636bf89ec090ddb9c7a9a7a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 19 Jun 2019 17:53:40 -0400 Subject: [PATCH 268/760] recreate missing LaTeX files for image-only equations --- doc/src/Eqs/angle_class2_p6.tex | 15 +++++++++++++++ doc/src/Eqs/angle_cosine_buck6d.tex | 15 +++++++++++++++ doc/src/Eqs/improper_inversion_harmonic.tex | 15 +++++++++++++++ doc/src/Eqs/pair_agni.tex | 18 ++++++++++++++++++ .../Eqs/{pair_buck6d.txt => pair_buck6d.tex} | 1 + doc/src/Eqs/pair_coul_gauss.tex | 15 +++++++++++++++ 6 files changed, 79 insertions(+) create mode 100644 doc/src/Eqs/angle_class2_p6.tex create mode 100644 doc/src/Eqs/angle_cosine_buck6d.tex create mode 100644 doc/src/Eqs/improper_inversion_harmonic.tex create mode 100644 doc/src/Eqs/pair_agni.tex rename doc/src/Eqs/{pair_buck6d.txt => pair_buck6d.tex} (91%) create mode 100644 doc/src/Eqs/pair_coul_gauss.tex diff --git a/doc/src/Eqs/angle_class2_p6.tex b/doc/src/Eqs/angle_class2_p6.tex new file mode 100644 index 0000000000..37fd87e9ec --- /dev/null +++ b/doc/src/Eqs/angle_class2_p6.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E_{a} = K_2\left(\theta - \theta_0\right)^2 + K_3\left(\theta - \theta_0\right)^3 + K_4\left(\theta - \theta_0\right)^4 + K_5\left(\theta - \theta_0\right)^5 + K_6\left(\theta - \theta_0\right)^6 +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/angle_cosine_buck6d.tex b/doc/src/Eqs/angle_cosine_buck6d.tex new file mode 100644 index 0000000000..49be2fc8c2 --- /dev/null +++ b/doc/src/Eqs/angle_cosine_buck6d.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = K \left[ 1 + \cos(n\theta - \theta_0)\right] +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/improper_inversion_harmonic.tex b/doc/src/Eqs/improper_inversion_harmonic.tex new file mode 100644 index 0000000000..a1607a1149 --- /dev/null +++ b/doc/src/Eqs/improper_inversion_harmonic.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = K \left(\theta - \theta_0\right)^2 +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/pair_agni.tex b/doc/src/Eqs/pair_agni.tex new file mode 100644 index 0000000000..b9aa7882fc --- /dev/null +++ b/doc/src/Eqs/pair_agni.tex @@ -0,0 +1,18 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +\begin{eqnarray*} + F_i^u & = & \sum_t^{N_t}\alpha_t \cdot \exp\left[-\frac{\left(d_{i,t}^u\right)^2}{2l^2}\right] \\ + d_{i,t}^u & = & \left|\left| V_i^u(\eta) - V_t^u(\eta) \right|\right| \\ + V_i^u(\eta) & = & \sum_{j \neq i}\frac{r^u_{ij}}{r_{ij}} \cdot e^{-\left(\frac{r_{ij}}{\eta} \right)^2} \cdot f_d\left(r_{ij}\right) \\ + f_d\left(r_{ij}\right) & = & \frac{1}{2} \left[\cos\left(\frac{\pi r_{ij}}{R_c}\right) + 1 \right] +\end{eqnarray*} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/doc/src/Eqs/pair_buck6d.txt b/doc/src/Eqs/pair_buck6d.tex similarity index 91% rename from doc/src/Eqs/pair_buck6d.txt rename to doc/src/Eqs/pair_buck6d.tex index 4888444d8c..903c0685be 100644 --- a/doc/src/Eqs/pair_buck6d.txt +++ b/doc/src/Eqs/pair_buck6d.tex @@ -1,6 +1,7 @@ \documentclass[12pt]{article} \begin{document} +\pagestyle{empty} \begin{eqnarray*} E = A e^{-\kappa r} - \frac{C}{r^6} \cdot \frac{1}{1 + D r^{14}} \qquad r < r_c \\ diff --git a/doc/src/Eqs/pair_coul_gauss.tex b/doc/src/Eqs/pair_coul_gauss.tex new file mode 100644 index 0000000000..1eb9c05a6f --- /dev/null +++ b/doc/src/Eqs/pair_coul_gauss.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} + +\pagestyle{empty} +\begin{document} + +$$ + E = \frac{C_{q_i q_j}}{\epsilon r_{ij}}\,\, \textrm{erf}\left(\alpha_{ij} r_{ij}\right)\quad\quad\quad r < r_c +$$ + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: From fe5e952319a082deb831be24d27e425b8121aca8 Mon Sep 17 00:00:00 2001 From: Andrew Schultz Date: Wed, 19 Jun 2019 19:17:20 -0400 Subject: [PATCH 269/760] Fix docs issues --- doc/src/compute_hma.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index 58934be054..581e4afeb4 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -51,7 +51,7 @@ HMA should not be used if atoms are expected to diffuse. It is also restricted to simulations in the NVT ensemble. Computation of the heat capacity with this compute is presently restricted to -the "lj_smooth_linear"_lj_smooth_linear.html pair style. Use with other pair +the "pair_lj_smooth_linear"_pair_lj_smooth_linear.html pair style. Use with other pair styles requires an additional method (single2nd) to be implemented in the corresponding Pair class. Computation of the energy and pressure does not have this restriction. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 3166544b10..07a0e4eaf0 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -518,6 +518,7 @@ Dcut de dE De +decorrelation debye Debye Decius From c9fc83ef6fefbbb5dd8b94de535fe820750b1dca Mon Sep 17 00:00:00 2001 From: Anne Gunn Date: Thu, 20 Jun 2019 08:16:20 -0600 Subject: [PATCH 270/760] 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 271/760] 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 17bfed3590524da8ba71900ad8719e0fb81744d5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jun 2019 11:39:41 -0400 Subject: [PATCH 272/760] move non-LaTeX images from doc/src/Eqs folder to doc/src/JPG this also updates links in doc sources referencing them --- 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 6760866f447cbc3abe90d4ff7ec42c5192e48576 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jun 2019 11:49:53 -0400 Subject: [PATCH 273/760] integrate pair styles spin/dipole/cut and spin/dipole/long properly into docs --- doc/src/Commands_pair.txt | 2 ++ doc/src/Packages_details.txt | 2 ++ doc/src/lammps.book | 1 + doc/src/pair_spin_dipole.txt | 5 ----- doc/src/pair_style.txt | 2 ++ doc/src/pairs.txt | 1 + 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index fea085b4ed..6077fad8ec 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -222,6 +222,8 @@ OPT. "sph/rhosum"_pair_sph_rhosum.html, "sph/taitwater"_pair_sph_taitwater.html, "sph/taitwater/morris"_pair_sph_taitwater_morris.html, +"spin/dipole/cut"_pair_spin_dipole.html, +"spin/dipole/long"_pair_spin_dipole.html, "spin/dmi"_pair_spin_dmi.html, "spin/exchange"_pair_spin_exchange.html, "spin/magelec"_pair_spin_magelec.html, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 1528adc420..bd5addda6f 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -911,6 +911,8 @@ the usual manner via MD. Various pair, fix, and compute styles. src/SPIN: filenames -> commands "Howto spins"_Howto_spins.html +"pair_style spin/dipole/cut"_pair_spin_dipole.html +"pair_style spin/dipole/long"_pair_spin_dipole.html "pair_style spin/dmi"_pair_spin_dmi.html "pair_style spin/exchange"_pair_spin_exchange.html "pair_style spin/magelec"_pair_spin_magelec.html diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 2738c9b051..8abe9cffa1 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -647,6 +647,7 @@ pair_sph_lj.html pair_sph_rhosum.html pair_sph_taitwater.html pair_sph_taitwater_morris.html +pair_spin_dipole.html pair_spin_dmi.html pair_spin_exchange.html pair_spin_magelec.html diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 2f27f91d08..01ac965be7 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -82,8 +82,3 @@ currently supported. [Default:] none -:line - -:link(Allen2) -[(Allen)] Allen and Tildesley, Computer Simulation of Liquids, -Clarendon Press, Oxford, 1987. diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index e305bc705d..8a35e5a467 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -284,6 +284,8 @@ accelerated styles exist. "sph/rhosum"_pair_sph_rhosum.html - "sph/taitwater"_pair_sph_taitwater.html - "sph/taitwater/morris"_pair_sph_taitwater_morris.html - +"spin/dipole/cut"_pair_spin_dipole.html - +"spin/dipole/long"_pair_spin_dipole.html - "spin/dmi"_pair_spin_dmi.html - "spin/exchange"_pair_spin_exchange.html - "spin/magelec"_pair_spin_magelec.html - diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index babdd2d1cc..2f63f18bad 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -105,6 +105,7 @@ Pair Styles :h1 pair_sph_rhosum pair_sph_taitwater pair_sph_taitwater_morris + pair_spin_dipole pair_spin_dmi pair_spin_exchange pair_spin_magelec From 128d021c10c2c0d4fd54bd81d7c49f82bf2dc0a9 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 20 Jun 2019 13:13:13 -0500 Subject: [PATCH 274/760] Update to latest prototype for SimulatorModel interface --- src/KIM/kim_style.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 814da6b188..b67360ce82 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -68,8 +68,9 @@ #include "variable.h" #include "fix_store_kim.h" +//@@@@@ Need to switch to c-bindings when they are available. #include "KIM_SimulatorModel.hpp" - +//@@@@@ using namespace LAMMPS_NS; @@ -131,6 +132,7 @@ void KimStyle::do_init(char *model) fix_store->setptr("units_to", (void *) units_to); int kimerror; + // @@@@@ switch to c-bindings when they are available KIM::SimulatorModel * simulatorModel; kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); @@ -176,7 +178,7 @@ void KimStyle::do_init(char *model) // reset template map. - simulatorModel->ClearTemplateMap(); + simulatorModel->OpenAndInitializeTemplateMap(); } /* ---------------------------------------------------------------------- */ @@ -206,8 +208,7 @@ void KimStyle::do_defn(int narg, char **arg) const std::string *sim_name, *sim_version; std::string atom_type_sym_list; - simulatorModel->GetSimulatorName(&sim_name); - simulatorModel->GetSimulatorVersion(&sim_version); + simulatorModel->GetSimulatorNameAndVersion(&sim_name, &sim_version); if (comm->me == 0) { std::string mesg("Using KIM Simulator Model : "); @@ -292,7 +293,7 @@ void KimStyle::do_defn(int narg, char **arg) if (sim_model_idx < 0) error->all(FLERR,"KIM Simulator Model has no Model definition"); - simulatorModel->ClearTemplateMap(); + simulatorModel->OpenAndInitializeTemplateMap(); } else { From 0613c10395ab286a0dd7c82e1f0ab092bdacbb5a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 20 Jun 2019 16:45:45 -0500 Subject: [PATCH 275/760] Work on kim_style for latest definition prototype --- examples/kim/in.kim.lj.simulator_model | 9 +- src/KIM/kim_style.cpp | 286 ++++++++++++++++--------- src/KIM/kim_style.h | 34 ++- 3 files changed, 217 insertions(+), 112 deletions(-) diff --git a/examples/kim/in.kim.lj.simulator_model b/examples/kim/in.kim.lj.simulator_model index 15b26c3c64..01ee5aa64c 100644 --- a/examples/kim/in.kim.lj.simulator_model +++ b/examples/kim/in.kim.lj.simulator_model @@ -14,12 +14,11 @@ variable xx equal 20*$x variable yy equal 20*$y variable zz equal 20*$z -units metal -atom_style atomic +echo both +#kim_style model LennardJones_Ar metal +kim_style model Sim_LAMMPS_LJcut_AkersonElliott_Alchemy_PbAu real unit_conversion_mode newton on -kim_style init LennardJones_Ar - lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box @@ -28,7 +27,7 @@ create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -kim_style define Ar +kim_style setup Au mass 1 39.95 velocity all create 200.0 232345 loop geom diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index b67360ce82..fcc3f33aa2 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -51,7 +51,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-2.0.2 (and newer) package + Designed for use with the kim-api-2.1.0 (and newer) package ------------------------------------------------------------------------- */ #include @@ -68,6 +68,9 @@ #include "variable.h" #include "fix_store_kim.h" +extern "C" { +#include "KIM_SimulatorHeaders.h" +} //@@@@@ Need to switch to c-bindings when they are available. #include "KIM_SimulatorModel.hpp" //@@@@@ @@ -78,42 +81,188 @@ using namespace LAMMPS_NS; void KimStyle::command(int narg, char **arg) { - if (narg < 2) error->all(FLERR,"Illegal kim_style command"); + if ((narg < 2) || (narg > 4)) error->all(FLERR,"Illegal kim_style command"); - units_from = NULL; - units_to = NULL; - - if (strcmp(arg[0],"init") == 0) { + if (strcmp(arg[0],"model") == 0) { if (domain->box_exist) - error->all(FLERR,"Must use 'kim_style init' command before " + error->all(FLERR,"Must use 'kim_style model' command before " "simulation box is defined"); - int len = strlen(arg[1])+1; - char *model = new char[len]; - strcpy(model,arg[1]); + int len1 = strlen(arg[1])+1; + int len2 = strlen(arg[2])+1; + char *model_name = new char[len1]; strcpy(model_name,arg[1]); + char *user_units = new char[len2]; strcpy(user_units,arg[2]); + if (narg == 4) { + if (strcmp(arg[3],"unit_conversion_mode")==0) unit_conversion_mode = true; + else { error->all(FLERR,"Illegal kim_style command"); } + } else unit_conversion_mode = false; - int args_done = do_units(narg-2,arg-2); - if (narg > (args_done + 2)) - error->all(FLERR,"Illegal kim_style command"); - do_init(model); - do_variables(); - } else if (strcmp(arg[0],"define") == 0) { + char *model_units; + determine_model_type_and_units(model_name, user_units, &model_units); + + do_init(model_name, user_units, model_units); + if (unit_conversion_mode) do_variables(user_units, model_units); + } else if (strcmp(arg[0],"setup") == 0) { if (!domain->box_exist) - error->all(FLERR,"Must use 'kim_style define' command after " + error->all(FLERR,"Must use 'kim_style setup' command after " "simulation box is defined"); - int args_done = do_units(narg-1,arg-1); - do_defn(narg - (args_done+1),arg + (args_done+1)); - } else if (strcmp(arg[0],"unit_variables") == 0) { - int args_done = do_units(narg,arg); - if (narg > args_done) - error->all(FLERR,"Illegal kim_style command"); - do_variables(); + do_setup(narg-1,++arg); } else error->all(FLERR,"Illegal kim_style command"); } /* ---------------------------------------------------------------------- */ +namespace { +void get_kim_unit_names( + char const * const system, + KIM_LengthUnit & lengthUnit, + KIM_EnergyUnit & energyUnit, + KIM_ChargeUnit & chargeUnit, + KIM_TemperatureUnit & temperatureUnit, + KIM_TimeUnit & timeUnit, + Error * error) +{ + if ((strcmp(system,"real")==0)) { + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_kcal_mol; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; + } else if ((strcmp(system,"metal")==0)) { + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_eV; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_ps; + } else if ((strcmp(system,"si")==0)) { + lengthUnit = KIM_LENGTH_UNIT_m; + energyUnit = KIM_ENERGY_UNIT_J; + chargeUnit = KIM_CHARGE_UNIT_C; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; + } else if ((strcmp(system,"cgs")==0)) { + lengthUnit = KIM_LENGTH_UNIT_cm; + energyUnit = KIM_ENERGY_UNIT_erg; + chargeUnit = KIM_CHARGE_UNIT_statC; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; + } else if ((strcmp(system,"electron")==0)) { + lengthUnit = KIM_LENGTH_UNIT_Bohr; + energyUnit = KIM_ENERGY_UNIT_Hartree; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; + } else if ((strcmp(system,"lj")==0)) { + error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); + } else { + error->all(FLERR,"Unknown unit_style"); + } +} +} // namespace +void KimStyle::determine_model_type_and_units(char * model_name, + char * user_units, + char ** model_units) +{ + KIM_LengthUnit lengthUnit; + KIM_EnergyUnit energyUnit; + KIM_ChargeUnit chargeUnit; + KIM_TemperatureUnit temperatureUnit; + KIM_TimeUnit timeUnit; + int units_accepted; + KIM_Model * kim_MO; -void KimStyle::do_init(char *model) + get_kim_unit_names(user_units, lengthUnit, energyUnit, + chargeUnit, temperatureUnit, timeUnit, error); + int kim_error = KIM_Model_Create(KIM_NUMBERING_zeroBased, + lengthUnit, + energyUnit, + chargeUnit, + temperatureUnit, + timeUnit, + model_name, + &units_accepted, + &kim_MO); + + if (!kim_error) // model is an MO + { + model_type = MO; + KIM_Model_Destroy(&kim_MO); + + if (units_accepted) + { + int len=strlen(user_units); + *model_units = new char[len]; strcpy(*model_units,user_units); + return; + } + else if (unit_conversion_mode) + { + int const num_systems = 5; + char const * const systems[num_systems] + = {"metal", "real", "si", "cgs", "electron"}; + for (int i=0; i < num_systems; ++i) + { + get_kim_unit_names(systems[i], lengthUnit, energyUnit, + chargeUnit, temperatureUnit, timeUnit, error); + kim_error = KIM_Model_Create(KIM_NUMBERING_zeroBased, + lengthUnit, + energyUnit, + chargeUnit, + temperatureUnit, + timeUnit, + model_name, + &units_accepted, + &kim_MO); + KIM_Model_Destroy(&kim_MO); + if (units_accepted) + { + int len=strlen(systems[i]); + *model_units = new char[len]; strcpy(*model_units,systems[i]); + return; + } + } + error->all(FLERR,"KIM Model does not support any lammps unit system"); + } + else + { + error->all(FLERR,"KIM Model does not support the requested unit system"); + } + } + + KIM::SimulatorModel * kim_SM; + kim_error = KIM::SimulatorModel::Create(model_name, &kim_SM); + if (kim_error) + { + error->all(FLERR,"KIM model name not found"); + } + model_type = SM; + + int sim_fields; + int sim_lines; + std::string const * sim_field; + std::string const * sim_value; + kim_SM->GetNumberOfSimulatorFields(&sim_fields); + kim_SM->CloseTemplateMap(); + for (int i=0; i < sim_fields; ++i) { + kim_SM->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + + if (*sim_field == "units") { + kim_SM->GetSimulatorFieldLine(i,0,&sim_value); + int len=(*sim_value).length(); + *model_units = new char[len]; strcpy(*model_units,sim_value->c_str()); + break; + } + } + KIM::SimulatorModel::Destroy(&kim_SM); + + if ((! unit_conversion_mode) && (strcmp(*model_units, user_units)!=0)) + { + error->all(FLERR,"Incompatible units for KIM Simulator Model"); + } +} + + +/* ---------------------------------------------------------------------- */ + +void KimStyle::do_init(char *model_name, char *user_units, char* model_units) { // create storage proxy fix. delete existing fix, if needed. @@ -127,14 +276,20 @@ void KimStyle::do_init(char *model) ifix = modify->find_fix("KIM_MODEL_STORE"); FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; - fix_store->setptr("model_name", (void *) model); - fix_store->setptr("units_from", (void *) units_from); - fix_store->setptr("units_to", (void *) units_to); + fix_store->setptr("model_name", (void *) model_name); + fix_store->setptr("user_units", (void *) user_units); + fix_store->setptr("model_units", (void *) model_units); + + // set units + + std::string cmd("units "); + cmd += model_units; + input->one(cmd.c_str()); int kimerror; // @@@@@ switch to c-bindings when they are available KIM::SimulatorModel * simulatorModel; - kimerror = KIM::SimulatorModel::Create(model,&simulatorModel); + kimerror = KIM::SimulatorModel::Create(model_name,&simulatorModel); // not a Kim Simulator Model; nothing else to do here. @@ -150,19 +305,6 @@ void KimStyle::do_init(char *model) const std::string *sim_field, *sim_value; simulatorModel->GetNumberOfSimulatorFields(&sim_fields); - // set units - - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "units") { - simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); - std::string cmd("units "); - cmd += *sim_value; - input->one(cmd.c_str()); - break; - } - } - // init model for (int i=0; i < sim_fields; ++i) { @@ -183,7 +325,7 @@ void KimStyle::do_init(char *model) /* ---------------------------------------------------------------------- */ -void KimStyle::do_defn(int narg, char **arg) +void KimStyle::do_setup(int narg, char **arg) { if (narg != atom->ntypes) error->all(FLERR,"Illegal kim_style command"); @@ -201,7 +343,7 @@ void KimStyle::do_defn(int narg, char **arg) FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; model = (char *)fix_store->getptr("model_name"); simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); - } else error->all(FLERR,"Must use 'kim_style init' before 'kim_style define'"); + } else error->all(FLERR,"Must use 'kim_style model' before 'kim_style setup'"); if (simulatorModel) { @@ -317,62 +459,11 @@ void KimStyle::do_defn(int narg, char **arg) /* ---------------------------------------------------------------------- */ -int KimStyle::do_units(int narg, char **arg) +void KimStyle::do_variables(char *user_units, char *model_units) { - // retrieve custom units setting if kim_style had been called before - - int ifix = modify->find_fix("KIM_MODEL_STORE"); - FixStoreKIM *fix_store = NULL; - if (ifix >= 0) { - fix_store = (FixStoreKIM *) modify->fix[ifix]; - units_from = (char *)fix_store->getptr("units_from"); - units_to = (char *)fix_store->getptr("units_to"); - } - - if (narg < 2) return 0; - int iarg=0; - for (iarg = 0; iarg < narg; iarg += 2) { - if (strcmp(arg[iarg],"unit_variables") == 0) { - if (narg > iarg+2) error->all(FLERR,"Illegal kim_style command"); - if (strcmp(arg[iarg+1],"NULL") == 0) { - delete[] units_to; - units_to = NULL; - } else { - int len = strlen(arg[iarg+1])+1; - delete[] units_to; - units_to = new char[len]; - strcpy(units_to,arg[iarg+1]); - } - if (fix_store) fix_store->setptr("units_to",units_to); - } else if (strcmp(arg[iarg],"unit_from") == 0) { - if (narg > iarg+2) error->all(FLERR,"Illegal kim_style command"); - if (strcmp(arg[iarg+1],"NULL") == 0) { - delete[] units_from; - units_from = NULL; - } else { - int len = strlen(arg[iarg+1])+1; - delete[] units_from; - units_from = new char[len]; - strcpy(units_from,arg[iarg+1]); - } - if (fix_store) fix_store->setptr("units_from",units_from); - } else return iarg; - } - return iarg; -} - -/* ---------------------------------------------------------------------- */ - -void KimStyle::do_variables() -{ - char *from, *to; + char *from = user_units, *to = model_units; Variable *variable = input->variable; - if (units_from) from = units_from; - else from = update->unit_style; - if (units_to) to = units_to; - else to = update->unit_style; - // refuse convertion from or to reduced units if ((strcmp(from,"lj") == 0) || (strcmp(to,"lj") == 0)) @@ -381,6 +472,7 @@ void KimStyle::do_variables() // get index to internal style variables. create, if needed. // default to conversion factor 1.0 for newly created variables + // @@@@@@ below needs to be updated to use Ellad's luc. int v_length, v_mass, v_time; char *args[3]; args[1] = (char *)"internal"; diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index 36084183ee..b7ff47404f 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -51,7 +51,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-2.0.2 (and newer) package + Designed for use with the kim-api-2.1.0 (and newer) package ------------------------------------------------------------------------- */ #ifdef COMMAND_CLASS @@ -72,12 +72,14 @@ class KimStyle : protected Pointers { KimStyle(class LAMMPS *lmp) : Pointers(lmp) {}; void command(int, char **); private: - char *units_from; - char *units_to; - void do_init(char *); - void do_defn(int, char **); - int do_units(int, char **); - void do_variables(); + enum model_type_enum {MO, SM}; + model_type_enum model_type; + bool unit_conversion_mode; + + void determine_model_type_and_units(char *, char *, char **); + void do_init(char *, char *, char *); + void do_setup(int, char **); + void do_variables(char*, char*); }; } @@ -91,15 +93,27 @@ E: Illegal kim_style command Incorrect number or kind of arguments to kim_style. -E: Must use 'kim_style init' command before simulation box is defined +E: Must use 'kim_style model' command before simulation box is defined Self-explanatory. -E: Must use 'kim_style define' command after simulation box is defined +E: Must use 'kim_style setup' command after simulation box is defined Self-explanatory. -E: Must use 'kim_style init' command before 'kim_style define' +E: Must use 'kim_style model' command before 'kim_style setup' + +Self-explanatory. + +E: KIM Model does not support the requested unit system + +Self-explanatory. + +E: KIM Model does not support any lammps unit system + +Self-explanatory. + +E: KIM model name not found Self-explanatory. From c460d05bc628de96374bdbcf9ae81dabb0c15ac2 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Fri, 21 Jun 2019 00:26:44 -0600 Subject: [PATCH 276/760] 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; } /* ---------------------------------------------------------------------- */ From 1bb18ebde4dec8dab43741b4b9c005f732200214 Mon Sep 17 00:00:00 2001 From: Rupert Nash Date: Fri, 21 Jun 2019 15:50:52 +0100 Subject: [PATCH 277/760] rollback unneeded change to Makefile.list per review --- src/Makefile.list | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile.list b/src/Makefile.list index 6e4c9726a6..65bbebca09 100644 --- a/src/Makefile.list +++ b/src/Makefile.list @@ -7,9 +7,9 @@ SHELL = /bin/sh ROOT = lmp EXE = $(ROOT)_$@ -SRC = angle.cpp angle_charmm.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp bond.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_coord_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_ke.cpp compute_ke_atom.cpp compute_momentum.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_local.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_nh.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_sphere.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_planeforce.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wall_region.cpp force.cpp group.cpp improper.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_hftn.cpp min_linesearch.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_born_coul_long.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_fs.cpp pair_eim.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_morse.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp +SRC = angle.cpp angle_charmm.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_molecular.cpp bond.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_coord_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp displace_box.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_local.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_nh.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_sphere.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_planeforce.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_recenter.cpp fix_respa.cpp fix_rigid.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_reflect.cpp fix_wall_region.cpp force.cpp group.cpp improper.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp input.cpp integrate.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp main.cpp memory.cpp min.cpp min_cg.cpp min_hftn.cpp min_linesearch.cpp min_sd.cpp minimize.cpp modify.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pack.cpp pair.cpp pair_airebo.cpp pair_born_coul_long.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_fs.cpp pair_eim.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_morse.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pppm.cpp pppm_tip4p.cpp random_mars.cpp random_park.cpp read_data.cpp read_restart.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp respa.cpp run.cpp set.cpp shell.cpp special.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp write_restart.cpp -INC = angle.h angle_charmm.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_full.h atom_vec_hybrid.h atom_vec_molecular.h bond.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_bond_local.h compute_centro_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_coord_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_sphere.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_ke.h compute_ke_atom.h compute_momentum.h compute_msd.h compute_msd_molecule.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_local.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_nh.h fix_nh_sphere.h fix_nph.h fix_nph_sphere.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_planeforce.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_recenter.h fix_respa.h fix_rigid.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wall_region.h force.h group.h improper.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_extra.h memory.h min.h min_cg.h min_hftn.h min_linesearch.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_born_coul_long.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_dpd.h pair_dpd_tstat.h pair_eam.h pair_eam_alloy.h pair_eam_fs.h pair_eim.h pair_hybrid.h pair_hybrid_overlay.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_morse.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_region.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h version.h write_restart.h +INC = angle.h angle_charmm.h angle_cosine.h angle_cosine_delta.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_full.h atom_vec_hybrid.h atom_vec_molecular.h bond.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_bond_local.h compute_centro_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_coord_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_sphere.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h displace_box.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_local.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_nh.h fix_nh_sphere.h fix_nph.h fix_nph_sphere.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_planeforce.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_recenter.h fix_respa.h fix_rigid.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_reflect.h fix_wall_region.h force.h group.h improper.h improper_cvff.h improper_harmonic.h improper_hybrid.h input.h integrate.h kspace.h lammps.h lattice.h library.h math_extra.h memory.h min.h min_cg.h min_hftn.h min_linesearch.h min_sd.h minimize.h modify.h neigh_list.h neigh_request.h neighbor.h output.h pack.h pair.h pair_airebo.h pair_born_coul_long.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_dpd.h pair_dpd_tstat.h pair_eam.h pair_eam_alloy.h pair_eam_fs.h pair_eim.h pair_hybrid.h pair_hybrid_overlay.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_tip4p.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_morse.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pointers.h pppm.h pppm_tip4p.h random_mars.h random_park.h read_data.h read_restart.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h respa.h run.h set.h shell.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_region.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h version.h write_restart.h OBJ = $(SRC:.cpp=.o) From 7a56a4be2435d2c15264da95abca26e42dae4d20 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Jun 2019 14:18:18 -0400 Subject: [PATCH 278/760] add option to pair_modify to explicitly turn off F dot r --- doc/src/pair_modify.txt | 10 ++++++++-- src/pair.cpp | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/src/pair_modify.txt b/doc/src/pair_modify.txt index 4824a3d83e..c446aa29d0 100644 --- a/doc/src/pair_modify.txt +++ b/doc/src/pair_modify.txt @@ -13,7 +13,8 @@ pair_modify command :h3 pair_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} or {tabinner/disp} or {tail} or {compute} :l +keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} +or {tabinner/disp} or {tail} or {compute} or {nofdotr} :l {pair} values = sub-style N {special} which wt1 wt2 wt3 or sub-style N {compute/tally} flag sub-style = sub-style of "pair hybrid"_pair_hybrid.html @@ -33,7 +34,8 @@ keyword = {pair} or {shift} or {mix} or {table} or {table/disp} or {tabinner} or {tabinner/disp} value = cutoff cutoff = inner cutoff at which to begin table (distance units) {tail} value = {yes} or {no} - {compute} value = {yes} or {no} :pre + {compute} value = {yes} or {no} + {nofdotr} :pre :ule [Examples:] @@ -212,6 +214,10 @@ a pair style will not work, because the "kspace_style"_kspace_style.html command requires a Kspace-compatible pair style be defined. +The {nofdotr} keyword allows to disable an optimization that computes +the global stress tensor from the total forces and atom positions rather +than from summing forces between individual pairs of atoms. + :line The {special} keyword allows to override the 1-2, 1-3, and 1-4 diff --git a/src/pair.cpp b/src/pair.cpp index 92b5d003a8..2b4863a54c 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -186,6 +186,10 @@ void Pair::modify_params(int narg, char **arg) else if (strcmp(arg[iarg+1],"no") == 0) compute_flag = 0; else error->all(FLERR,"Illegal pair_modify command"); iarg += 2; + } else if (strcmp(arg[iarg],"nofdotr") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal pair_modify command"); + no_virial_fdotr_compute = 1; + ++iarg; } else error->all(FLERR,"Illegal pair_modify command"); } } From 88994d813aeba181736d7c80f2578e74731238df Mon Sep 17 00:00:00 2001 From: "Ellad B. Tadmor" Date: Fri, 21 Jun 2019 18:38:48 -0500 Subject: [PATCH 279/760] Ignore kim.log in examples/kim --- examples/kim/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 examples/kim/.gitignore diff --git a/examples/kim/.gitignore b/examples/kim/.gitignore new file mode 100644 index 0000000000..63421e4217 --- /dev/null +++ b/examples/kim/.gitignore @@ -0,0 +1 @@ +/kim.log From 08cee18f3207b6cea777dbbd24e17ca1a1f39ded Mon Sep 17 00:00:00 2001 From: "Ellad B. Tadmor" Date: Fri, 21 Jun 2019 18:39:18 -0500 Subject: [PATCH 280/760] Added code to define unit conversion factors --- src/KIM/kim_style.cpp | 219 ++++--- src/KIM/kim_style.h | 2 + src/KIM/kim_units.cpp | 1411 +++++++++++++++++++++++++++++++++++++++++ src/KIM/kim_units.h | 59 ++ 4 files changed, 1596 insertions(+), 95 deletions(-) create mode 100644 src/KIM/kim_units.cpp create mode 100644 src/KIM/kim_units.h diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index fcc3f33aa2..44d5c411ab 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -56,6 +56,7 @@ #include #include +#include #include "kim_style.h" #include "error.h" #include "atom.h" @@ -67,6 +68,7 @@ #include "input.h" #include "variable.h" #include "fix_store_kim.h" +#include "kim_units.h" extern "C" { #include "KIM_SimulatorHeaders.h" @@ -100,7 +102,6 @@ void KimStyle::command(int narg, char **arg) determine_model_type_and_units(model_name, user_units, &model_units); do_init(model_name, user_units, model_units); - if (unit_conversion_mode) do_variables(user_units, model_units); } else if (strcmp(arg[0],"setup") == 0) { if (!domain->box_exist) error->all(FLERR,"Must use 'kim_style setup' command after " @@ -255,7 +256,10 @@ void KimStyle::determine_model_type_and_units(char * model_name, if ((! unit_conversion_mode) && (strcmp(*model_units, user_units)!=0)) { - error->all(FLERR,"Incompatible units for KIM Simulator Model"); + std::stringstream mesg; + mesg << "Incompatible units for KIM Simulator Model, required units = " + << *model_units; + error->all(FLERR,mesg.str().c_str()); } } @@ -280,17 +284,43 @@ void KimStyle::do_init(char *model_name, char *user_units, char* model_units) fix_store->setptr("user_units", (void *) user_units); fix_store->setptr("model_units", (void *) model_units); + int kimerror; + // @@@@@ switch to c-bindings when they are available + KIM::SimulatorModel * simulatorModel; + kimerror = KIM::SimulatorModel::Create(model_name,&simulatorModel); + + const std::string *sim_name, *sim_version; + simulatorModel->GetSimulatorNameAndVersion(&sim_name, &sim_version); + + if (*sim_name != "LAMMPS") + error->all(FLERR,"Incompatible KIM Simulator Model"); + + // Begin output to log file + kim_style_log_delimiter("begin","model"); + if (comm->me == 0) { + std::string mesg("# Using KIM Simulator Model : "); + mesg += model_name; + mesg += "\n"; + mesg += "# For Simulator : "; + mesg += *sim_name + " " + *sim_version + "\n"; + mesg += "# Running on : LAMMPS "; + mesg += universe->version; + mesg += "\n"; + mesg += "#\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + + // Define unit conversion factor variables and print to log + if (unit_conversion_mode) do_variables(user_units, model_units); + // set units std::string cmd("units "); cmd += model_units; input->one(cmd.c_str()); - int kimerror; - // @@@@@ switch to c-bindings when they are available - KIM::SimulatorModel * simulatorModel; - kimerror = KIM::SimulatorModel::Create(model_name,&simulatorModel); - // not a Kim Simulator Model; nothing else to do here. if (kimerror) return; @@ -318,13 +348,36 @@ void KimStyle::do_init(char *model_name, char *user_units, char* model_units) } } - // reset template map. + // End output to log file + kim_style_log_delimiter("end","model"); + // reset template map. simulatorModel->OpenAndInitializeTemplateMap(); } /* ---------------------------------------------------------------------- */ +void KimStyle::kim_style_log_delimiter(std::string begin_end, + std::string model_setup) +{ + if (comm->me == 0) { + std::string mesg; + if ((begin_end == "begin") && (model_setup == "model")) mesg = + "#=== BEGIN kim-style MODEL ==================================\n"; + else if ((begin_end == "begin") && (model_setup == "setup")) mesg = + "#=== BEGIN kim-style SETUP ==================================\n"; + else if ((begin_end == "end") && (model_setup == "model")) mesg = + "#=== END kim-style MODEL ====================================\n\n"; + else if ((begin_end == "end") && (model_setup == "setup")) mesg = + "#=== END kim-style SETUP ====================================\n\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } +} + +/* ---------------------------------------------------------------------- */ + void KimStyle::do_setup(int narg, char **arg) { if (narg != atom->ntypes) @@ -345,30 +398,13 @@ void KimStyle::do_setup(int narg, char **arg) simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); } else error->all(FLERR,"Must use 'kim_style model' before 'kim_style setup'"); + // Begin output to log file + kim_style_log_delimiter("begin","setup"); + if (simulatorModel) { - const std::string *sim_name, *sim_version; std::string atom_type_sym_list; - simulatorModel->GetSimulatorNameAndVersion(&sim_name, &sim_version); - - if (comm->me == 0) { - std::string mesg("Using KIM Simulator Model : "); - mesg += model; - mesg += "\n"; - mesg += "For Simulator : "; - mesg += *sim_name + " " + *sim_version + "\n"; - mesg += "Running on : LAMMPS "; - mesg += universe->version; - mesg += "\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } - - if (*sim_name != "LAMMPS") - error->all(FLERR,"Incompatible KIM Simulator Model"); - for (int i = 0; i < narg; i++) atom_type_sym_list += std::string(" ") + arg[i]; @@ -455,6 +491,10 @@ void KimStyle::do_setup(int narg, char **arg) input->one(cmd1.c_str()); input->one(cmd2.c_str()); } + + // End output to log file + kim_style_log_delimiter("end","setup"); + } /* ---------------------------------------------------------------------- */ @@ -464,85 +504,74 @@ void KimStyle::do_variables(char *user_units, char *model_units) char *from = user_units, *to = model_units; Variable *variable = input->variable; - // refuse convertion from or to reduced units + // refuse conversion from or to reduced units if ((strcmp(from,"lj") == 0) || (strcmp(to,"lj") == 0)) error->all(FLERR,"Cannot set up conversion variables for 'lj' units"); // get index to internal style variables. create, if needed. - // default to conversion factor 1.0 for newly created variables - - // @@@@@@ below needs to be updated to use Ellad's luc. - int v_length, v_mass, v_time; + // set conversion factors for newly created variables. + double conversion_factor; + int ier; char *args[3]; + std::string var_str; args[1] = (char *)"internal"; args[2] = (char *)"1.0"; - - args[0] = (char *)"_u_length"; - v_length = variable->find(args[0]); - if (v_length < 0) { - variable->set(3,args); - v_length = variable->find(args[0]); + int v_unit; + int const nunits = 14; + char *units[nunits] = {(char *)"mass", + (char *)"distance", + (char *)"time", + (char *)"energy", + (char *)"velocity", + (char *)"force", + (char *)"torque", + (char *)"temperature", + (char *)"pressure", + (char *)"viscosity", + (char *)"charge", + (char *)"dipole", + (char *)"efield", + (char *)"density"}; + + if (comm->me == 0) { + std::stringstream mesg; + mesg << "# Conversion factors from " << from << " to " << to + << ":" << std::endl; + if (screen) fputs(mesg.str().c_str(),screen); + if (logfile) fputs(mesg.str().c_str(),logfile); } - args[0] = (char *)"_u_mass"; - v_mass = variable->find(args[0]); - if (v_mass < 0) { - variable->set(3,args); - v_mass = variable->find(args[0]); - } - - args[0] = (char *)"_u_time"; - v_time = variable->find(args[0]); - if (v_time < 0) { - variable->set(3,args); - v_time = variable->find(args[0]); - } - - // special case: both unit styles are the same => conversion factor 1.0 - - if (strcmp(from,to) == 0) { - variable->internal_set(v_length,1.0); - variable->internal_set(v_mass,1.0); - variable->internal_set(v_time,1.0); - return; - } - - if (strcmp(from,"real") == 0) { - if (strcmp(to,"metal") == 0) { - variable->internal_set(v_length,1.0); - variable->internal_set(v_mass,1.0); - variable->internal_set(v_time,0.001); - } else { - std::string err("Do not know how to set up conversion variables "); - err += "between '"; - err += from; - err += "' and '"; - err += to; - err += "' units"; + for (int i = 0; i < nunits; i++) + { + var_str = std::string("_u_") + std::string(units[i]); + args[0] = (char *)var_str.c_str(); + v_unit = variable->find(args[0]); + if (v_unit < 0) { + variable->set(3,args); + v_unit = variable->find(args[0]); + } + ier = lammps_unit_conversion(units[i], + from, + to, + conversion_factor); + if (ier != 0) { + std::string err = std::string("Unable to obtain conversion factor: ") + + "unit = " + units[i] + "; " + "from = " + from + "; " + "to = " + to + "."; error->all(FLERR,err.c_str()); } - } else if (strcmp(from,"metal") == 0) { - if (strcmp(to,"real") == 0) { - variable->internal_set(v_length,1.0); - variable->internal_set(v_mass,1.0); - variable->internal_set(v_time,1000.0); - } else { - std::string err("Do not know how to set up conversion variables "); - err += "between '"; - err += from; - err += "' and '"; - err += to; - err += "' units"; - error->all(FLERR,err.c_str()); + variable->internal_set(v_unit,conversion_factor); + if (comm->me == 0) { + std::stringstream mesg; + mesg << "# " << var_str << " = " << conversion_factor << std::endl; + if (screen) fputs(mesg.str().c_str(),screen); + if (logfile) fputs(mesg.str().c_str(),logfile); } - } else { - std::string err("Do not know how to set up conversion variables "); - err += "between '"; - err += from; - err += "' and '"; - err += to; - err += "' units"; - error->all(FLERR,err.c_str()); + } + if (comm->me == 0) { + if (screen) fputs("#\n",screen); + if (logfile) fputs("#\n",logfile); } } diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index b7ff47404f..b18f6627ea 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -80,6 +80,8 @@ class KimStyle : protected Pointers { void do_init(char *, char *, char *); void do_setup(int, char **); void do_variables(char*, char*); + void kim_style_log_delimiter(std::string begin_end, + std::string model_setup); }; } diff --git a/src/KIM/kim_units.cpp b/src/KIM/kim_units.cpp new file mode 100644 index 0000000000..fe90d58e9e --- /dev/null +++ b/src/KIM/kim_units.cpp @@ -0,0 +1,1411 @@ +/* ---------------------------------------------------------------------- + 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: Ellad B. Tadmor (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +using namespace std; + +namespace +{ + +// Constants of nature and basic conversion factors +// Source: https://physics.nist.gov/cuu/Constants/Table/allascii.txt +// Working with NIST values even when there are newer values for +// compatibility with LAMMPS + +/*---------------------- + Fundamental constants +------------------------ */ +double const boltz_si = 1.38064852e-23; // [J K^-1] Boltzmann's factor + // (NIST value) +double const Nav = 6.022140857e23; // [unitless] Avogadro's number + // (NIST value) +// double const Nav = 6.02214076e23; // [unitless] Avogadro's number + // (official value May 2019) +double const me = 9.10938356e-31; // [kg] electron rest mass + // (NIST value) +// double me = 9.10938291e-31; // [kg] electron rest mass +double const e_si = 1.6021766208e-19; // [C] elementary charge + // (charge of an electron/proton) + // (NIST value) + +/*---------------------- + Distance units +------------------------ */ +double const bohr_si = 5.2917721067e-11; // [m] Bohr unit (distance between + // nucleus and electron in H) + // (NIST value) +double const angstrom_si = 1e-10; // [m] Angstrom +double const centimeter_si = 1e-2; // [m] centimeter +double const micrometer_si = 1e-6; // [m] micrometer (micron) +double const nanometer_si = 1e-9; // [m] nanometer + +/*---------------------- + Mass units +------------------------ */ +double const gram_per_mole_si = 1e-3/Nav; // [kg] gram per mole +double const amu_si = 1e-3/Nav; // [kg] atomic mass unit (molecular + // weight) For example, the mean + // molecular weight of water + // is 18.015 atomic mass units + // (amu), so one mole of water + // weight 18.015 grams. +double const gram_si = 1e-3; // [kg] gram +double const picogram_si = 1e-15; // [kg] picogram +double const attogram_si = 1e-21; // [kg[ attogram + +/*---------------------- + Time units +------------------------ */ +double const atu_si = 2.418884326509e-17; // [s] atomic time unit + // ( = hbar/E_h where E_h is the + // Hartree energy) (NIST value) +double const atu_electron_si = atu_si*sqrt(amu_si/me); // [s] atomic time unit + // used in electron system (see https://sourceforge.net/p/lammps/mailman/lammps-users/thread/BCA2BDB2-BA03-4280-896F-1E6120EF47B2%40caltech.edu/) +double const microsecond_si = 1e-6; // [s] microsecond +double const nanosecond_si = 1e-9; // [s] nanosecond +double const picosecond_si = 1e-12; // [s] picosecond +double const femtosecond_si = 1e-15; // [s] femtosecond + +/*---------------------- + Density units +------------------------ */ +double const gram_per_centimetercu_si = + gram_si/pow(centimeter_si,3); // [kg/m^3] gram/centimeter^3 +double const amu_per_bohrcu_si = amu_si/pow(bohr_si,3); // [kg/m^3] amu/bohr^3 +double const picogram_per_micrometercu_si = + picogram_si/pow(micrometer_si,3); // [kg/m^3] picogram/micrometer^3 +double const attogram_per_nanometercu_si = + attogram_si/pow(nanometer_si,3); // [kg/m^3] attogram/ + // nanomaterial^3 + +/*---------------------- + Energy/torque units +------------------------ */ +double const kcal_si = 4184.0; // [J] kilocalroie (heat energy + // involved in warming up one + // kilogram of water by one + // degree Kelvin) +double const ev_si = 1.6021766208e-19; // [J] electon volt (amount of + // energy gained or lost by the + // charge of a single electron + // moving across an electric + // potential difference of one + // volt.) (NIST value) +double const hartree_si = 4.359744650e-18; // [J] Hartree (approximately the + // electric potential energy of + // the hydrogen atom in its + // ground state) (NIST value) +double const kcal_per_mole_si = kcal_si/Nav;// [J] kcal/mole +double const erg_si = 1e-7; // [J] erg +double const dyne_centimeter_si = 1e-7; // [J[ dyne*centimeter +double const picogram_micrometersq_per_microsecondsq_si = + picogram_si*pow(micrometer_si,2)/pow(microsecond_si,2); + // [J] pigogram*micrometer^2/ + // micorsecond^2 +double const attogram_nanometersq_per_nanosecondsq_si = + attogram_si*pow(nanometer_si,2)/pow(nanosecond_si,2); + // [J] attogram*nanometer^2/ + // nanosecond^2 + +/*---------------------- + Velocity units +------------------------ */ +double const angstrom_per_femtosecond_si = + angstrom_si/femtosecond_si; // [m/s] Angstrom/femtosecond +double const angstrom_per_picosecond_si = + angstrom_si/picosecond_si; // [m/s] Angstrom/picosecond +double const micrometer_per_microsecond_si = + micrometer_si/microsecond_si; // [m/s] micrometer/microsecond +double const nanometer_per_nanosecond_si = + nanometer_si/nanosecond_si; // [m/s] nanometer/nanosecond +double const centimeter_per_second_si = + centimeter_si; // [m/s] centimeter/second +double const bohr_per_atu_si = + bohr_si/atu_electron_si; // [m/s] bohr/atu + +/*---------------------- + Force units +------------------------ */ +double const kcal_per_mole_angstrom_si = + kcal_per_mole_si/angstrom_si; // [N] kcal/(mole*Angstrom) +double const ev_per_angstrom_si = + ev_si/angstrom_si; // [N] eV/Angstrom +double const dyne_si = + dyne_centimeter_si/centimeter_si; // [N] dyne +double const hartree_per_bohr_si = + hartree_si/bohr_si; // [N] hartree/bohr +double const picogram_micrometer_per_microsecondsq_si = + picogram_si*micrometer_si/pow(microsecond_si,2); + // [N] picogram*micrometer/ + // microsecond^2 +double const attogram_nanometer_per_nanosecondsq_si = + attogram_si*nanometer_si/pow(nanosecond_si,2); + // [N] attogram*nanometer/ + // nanosecond^2 + +/*---------------------- + Pressure units +------------------------ */ +double const atmosphere_si = 101325.0; // [Pa] standard atmosphere (NIST value) +double const bar_si = 1e5; // [Pa] bar +double const dyne_per_centimetersq_si = + dyne_centimeter_si/pow(centimeter_si,3); + // [Pa] dyne/centimeter^2 +double const picogram_per_micrometer_microsecondsq_si = + picogram_si/(micrometer_si*pow(microsecond_si,2)); + // [Pa] picogram/(micrometer* + // microsecond^2) +double const attogram_per_nanometer_nanosecondsq_si = + attogram_si/(nanometer_si*pow(nanosecond_si,2)); + // [Pa] attogram/(nanometer*nanosecond^2) + +/*---------------------- + Viscosity units +------------------------ */ +double const poise_si = 0.1; // [Pa*s] Poise +double const amu_per_bohr_femtosecond_si = + amu_si/(bohr_si*femtosecond_si); // [Pa*s] amu/(bohr*femtosecond) +double const picogram_per_micrometer_microsecond_si = + picogram_si/(micrometer_si*microsecond_si); + // [Pa*s] picogram/(micrometer* + // microsecond) +double const attogram_per_nanometer_nanosecond_si = + attogram_si/(nanometer_si*nanosecond_si); + // [Pa*s] attogram/(nanometer* + // nanosecond) + +/*---------------------- + Charge units +------------------------ */ +double const echarge_si = e_si; // [C] electron charge unit +double const statcoulomb_si = e_si/4.8032044e-10; // [C] Statcoulomb or esu + // (value from LAMMPS units + // documentation) +double const picocoulomb_si = 1e-12; // [C] picocoulomb + +/*---------------------- + Dipole units +------------------------ */ +double const electron_angstrom_si = echarge_si*angstrom_si; + // [C*m] electron*angstrom +double const statcoulomb_centimeter_si = statcoulomb_si*centimeter_si; + // [C*m] statcoulomb*centimeter +double const debye_si = 1e-18*statcoulomb_centimeter_si; + // [C*m] Debye +double const picocoulomb_micrometer_si = picocoulomb_si*micrometer_si; + // [C*m] picocoulomb*micrometer +double const electron_nanometer_si = echarge_si*nanometer_si; + // [C*m] electron*nanometer + +/*---------------------- + Electric field units +------------------------ */ +double const volt_per_angstrom_si = 1.0/angstrom_si;// [V/m] volt/angstrom +double const statvolt_per_centimeter_si = + erg_si/(statcoulomb_si*centimeter_si); // [V/m] statvolt/centimeter +double const volt_per_centimeter_si = + 1.0/centimeter_si; // [V/m] volt/centimeter +double const volt_per_micrometer_si = + 1.0/micrometer_si; // [V/m] volt/micrometer +double const volt_per_nanometer_si = + 1.0/nanometer_si; // [V/m] volt/nanometer + +// Define enumerations +enum sys_type +{ + real = 1, + metal = 2, + si = 3, + cgs = 4, + electron = 5, + micro = 6, + nano = 7 +}; + +enum unit_type +{ + mass = 1, + distance = 2, + time = 3, + energy = 4, + velocity = 5, + force = 6, + torque = 7, + temperature = 8, + pressure = 9, + viscosity = 10, + charge = 11, + dipole = 12, + efield = 13, + density = 14 +}; + +enum units +{ + // mass + gram_per_mole = 101, + kilogram = 102, + gram = 103, + amu = 104, + picogram = 105, + attogram = 106, + // distance + angstrom = 201, + meter = 202, + centimeter = 203, + bohr = 204, + micrometer = 205, + nanometer = 206, + // time + femtosecond = 301, + picosecond = 302, + second = 303, + microsecond = 304, + nanosecond = 305, + // energy + kcal_per_mole = 401, + ev = 402, + joule = 403, + erg = 404, + hartree = 405, + picogram_micrometersq_per_microsecondsq = 406, + attogram_nanometersq_per_nanosecondsq = 407, + // velocity + angstrom_per_femtosecond = 501, + angstrom_per_picosecond = 502, + meter_per_second = 503, + centimeter_per_second = 504, + bohr_per_atu = 505, + micrometer_per_microsecond = 506, + nanometer_per_nanosecond = 507, + // force + kcal_per_mole_angstrom = 601, + ev_per_angstrom = 602, + newton = 603, + dyne = 604, + hartree_per_bohr = 605, + picogram_micrometer_per_microsecondsq = 606, + attogram_nanometer_per_nanosecondsq = 607, + // torque + newton_meter = 701, + dyne_centimeter = 702, + // temperature + kelvin = 801, + // pressure + atmosphere = 901, + bar = 902, + pascal = 903, + dyne_per_centimetersq = 904, + picogram_per_micrometer_microsecondsq = 905, + attogram_per_nanometer_nanosecondsq = 906, + // viscosity + poise = 1001, + pascal_second = 1002, + amu_per_bohr_femtosecond = 1003, // electron system, not in docs, GUESSED + picogram_per_micrometer_microsecond = 1004, + attogram_per_nanometer_nanosecond = 1005, + // charge + echarge = 1101, + coulomb = 1102, + statcoulomb = 1103, + picocoulomb = 1104, + // dipole + electron_angstrom = 1201, + coulomb_meter = 1202, + statcoulomb_centimeter = 1203, + debye = 1204, + picocoulomb_micrometer = 1205, + electron_nanometer = 1206, + // electric field + volt_per_angstrom = 1301, + volt_per_meter = 1302, + statvolt_per_centimeter = 1303, + volt_per_centimeter = 1304, + volt_per_micrometer = 1305, + volt_per_nanometer = 1306, + // density + gram_per_centimetercu = 1401, + kilogram_per_metercu = 1402, + amu_per_bohrcu = 1403, // electron system, not in docs, GUESSED + picogram_per_micrometercu = 1404, + attogram_per_nanometercu = 1405 +}; + +// Define dictionaries +map system_dic; +map unit_dic; +map units_real_dic; +map units_metal_dic; +map units_si_dic; +map units_cgs_dic; +map units_electron_dic; +map units_micro_dic; +map units_nano_dic; + +/* ---------------------------------------------------------------------- */ + +void initialize_dictionaries() +{ + system_dic["real"] = real; + system_dic["metal"] = metal; + system_dic["si"] = si; + system_dic["cgs"] = cgs; + system_dic["electron"] = electron; + system_dic["micro"] = micro; + system_dic["nano"] = nano; + + unit_dic["mass"] = mass; + unit_dic["distance"] = distance; + unit_dic["time"] = time; + unit_dic["energy"] = energy; + unit_dic["velocity"] = velocity; + unit_dic["force"] = force; + unit_dic["torque"] = torque; + unit_dic["temperature"]= temperature; + unit_dic["pressure"] = pressure; + unit_dic["viscosity"] = viscosity; + unit_dic["charge"] = charge; + unit_dic["dipole"] = dipole; + unit_dic["efield"] = efield; + unit_dic["density"] = density; + + units_real_dic[mass] = gram_per_mole; + units_real_dic[distance] = angstrom; + units_real_dic[time] = femtosecond; + units_real_dic[energy] = kcal_per_mole; + units_real_dic[velocity] = angstrom_per_femtosecond; + units_real_dic[force] = kcal_per_mole_angstrom; + units_real_dic[torque] = kcal_per_mole; + units_real_dic[temperature]= kelvin; + units_real_dic[pressure] = atmosphere; + units_real_dic[viscosity] = poise; + units_real_dic[charge] = echarge; + units_real_dic[dipole] = electron_angstrom; + units_real_dic[efield] = volt_per_angstrom; + units_real_dic[density] = gram_per_centimetercu; + + units_metal_dic[mass] = gram_per_mole; + units_metal_dic[distance] = angstrom; + units_metal_dic[time] = picosecond; + units_metal_dic[energy] = ev; + units_metal_dic[velocity] = angstrom_per_picosecond; + units_metal_dic[force] = ev_per_angstrom; + units_metal_dic[torque] = ev; + units_metal_dic[temperature]= kelvin; + units_metal_dic[pressure] = bar; + units_metal_dic[viscosity] = poise; + units_metal_dic[charge] = echarge; + units_metal_dic[dipole] = electron_angstrom; + units_metal_dic[efield] = volt_per_angstrom; + units_metal_dic[density] = gram_per_centimetercu; + + units_si_dic[mass] = kilogram; + units_si_dic[distance] = meter; + units_si_dic[time] = second; + units_si_dic[energy] = joule; + units_si_dic[velocity] = meter_per_second; + units_si_dic[force] = newton; + units_si_dic[torque] = newton_meter; + units_si_dic[temperature]= kelvin; + units_si_dic[pressure] = pascal; + units_si_dic[viscosity] = pascal_second; + units_si_dic[charge] = coulomb; + units_si_dic[dipole] = coulomb_meter; + units_si_dic[efield] = volt_per_meter; + units_si_dic[density] = kilogram_per_metercu; + + units_cgs_dic[mass] = gram; + units_cgs_dic[distance] = centimeter; + units_cgs_dic[time] = second; + units_cgs_dic[energy] = erg; + units_cgs_dic[velocity] = centimeter_per_second; + units_cgs_dic[force] = dyne; + units_cgs_dic[torque] = dyne_centimeter; + units_cgs_dic[temperature]= kelvin; + units_cgs_dic[pressure] = dyne_per_centimetersq; + units_cgs_dic[viscosity] = poise; + units_cgs_dic[charge] = statcoulomb; + units_cgs_dic[dipole] = statcoulomb_centimeter; + units_cgs_dic[efield] = statvolt_per_centimeter; + units_cgs_dic[density] = gram_per_centimetercu; + + units_electron_dic[mass] = amu; + units_electron_dic[distance] = bohr; + units_electron_dic[time] = femtosecond; + units_electron_dic[energy] = hartree; + units_electron_dic[velocity] = bohr_per_atu; + units_electron_dic[force] = hartree_per_bohr; + units_electron_dic[torque] = hartree; // unknown, GUESSED + units_electron_dic[temperature]= kelvin; + units_electron_dic[pressure] = pascal; + units_electron_dic[viscosity] = pascal_second; // unknown, GUESSED + units_electron_dic[charge] = echarge; + units_electron_dic[dipole] = debye; + units_electron_dic[efield] = volt_per_centimeter; + units_electron_dic[density] = amu_per_bohrcu; // unknown, GUESSED + + units_micro_dic[mass] = picogram; + units_micro_dic[distance] = micrometer; + units_micro_dic[time] = microsecond; + units_micro_dic[energy] = picogram_micrometersq_per_microsecondsq; + units_micro_dic[velocity] = micrometer_per_microsecond; + units_micro_dic[force] = picogram_micrometer_per_microsecondsq; + units_micro_dic[torque] = picogram_micrometersq_per_microsecondsq; + units_micro_dic[temperature]= kelvin; + units_micro_dic[pressure] = picogram_per_micrometer_microsecondsq; + units_micro_dic[viscosity] = picogram_per_micrometer_microsecond; + units_micro_dic[charge] = picocoulomb; + units_micro_dic[dipole] = picocoulomb_micrometer; + units_micro_dic[efield] = volt_per_micrometer; + units_micro_dic[density] = picogram_per_micrometercu; + + units_nano_dic[mass] = attogram; + units_nano_dic[distance] = nanometer; + units_nano_dic[time] = nanosecond; + units_nano_dic[energy] = attogram_nanometersq_per_nanosecondsq; + units_nano_dic[velocity] = nanometer_per_nanosecond; + units_nano_dic[force] = attogram_nanometer_per_nanosecondsq; + units_nano_dic[torque] = attogram_nanometersq_per_nanosecondsq; + units_nano_dic[temperature]= kelvin; + units_nano_dic[pressure] = attogram_per_nanometer_nanosecondsq; + units_nano_dic[viscosity] = attogram_per_nanometer_nanosecond; + units_nano_dic[charge] = echarge; + units_nano_dic[dipole] = electron_nanometer; + units_nano_dic[efield] = volt_per_nanometer; + units_nano_dic[density] = attogram_per_nanometercu; + +} + +/* ---------------------------------------------------------------------- */ + +// Get the enumeration for the unit of type `unit_type_enum` +// for LAMMPS system `system_enum`. +units get_lammps_system_unit(sys_type system_enum, unit_type unit_type_enum) +{ + switch(system_enum) { + case real : + return units_real_dic[unit_type_enum]; + case metal : + return units_metal_dic[unit_type_enum]; + case si : + return units_si_dic[unit_type_enum]; + case cgs : + return units_cgs_dic[unit_type_enum]; + case electron : + return units_electron_dic[unit_type_enum]; + case micro : + return units_micro_dic[unit_type_enum]; + case nano : + default : // This is here to a prevent a compiler warning + return units_nano_dic[unit_type_enum]; + } +} + +/* ---------------------------------------------------------------------- */ + +// Mass conversion +double get_mass_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[kilogram][kilogram] = 1.0; + conv[kilogram][gram_per_mole] = 1.0/gram_per_mole_si; + conv[kilogram][gram] = 1.0/gram_si; + conv[kilogram][amu] = 1.0/amu_si; + conv[kilogram][picogram] = 1.0/picogram_si; + conv[kilogram][attogram] = 1.0/attogram_si; + + to_si = 1.0/conv[kilogram][gram_per_mole]; + conv[gram_per_mole][kilogram] = to_si*conv[kilogram][kilogram]; + conv[gram_per_mole][gram_per_mole] = 1.0; + conv[gram_per_mole][gram] = to_si*conv[kilogram][gram]; + conv[gram_per_mole][amu] = to_si*conv[kilogram][amu]; + conv[gram_per_mole][picogram] = to_si*conv[kilogram][picogram]; + conv[gram_per_mole][attogram] = to_si*conv[kilogram][attogram]; + + to_si = 1.0/conv[kilogram][gram]; + conv[gram][kilogram] = to_si*conv[kilogram][kilogram]; + conv[gram][gram_per_mole] = to_si*conv[kilogram][gram_per_mole]; + conv[gram][gram] = 1.0; + conv[gram][amu] = to_si*conv[kilogram][amu]; + conv[gram][picogram] = to_si*conv[kilogram][picogram]; + conv[gram][attogram] = to_si*conv[kilogram][attogram]; + + to_si = 1.0/conv[kilogram][amu]; + conv[amu][kilogram] = to_si*conv[kilogram][kilogram]; + conv[amu][gram_per_mole] = to_si*conv[kilogram][gram_per_mole]; + conv[amu][gram] = to_si*conv[kilogram][gram]; + conv[amu][amu] = 1.0; + conv[amu][picogram] = to_si*conv[kilogram][picogram]; + conv[amu][attogram] = to_si*conv[kilogram][attogram]; + + to_si = 1.0/conv[kilogram][picogram]; + conv[picogram][kilogram] = to_si*conv[kilogram][kilogram]; + conv[picogram][gram_per_mole] = to_si*conv[kilogram][gram_per_mole]; + conv[picogram][gram] = to_si*conv[kilogram][gram]; + conv[picogram][amu] = to_si*conv[kilogram][amu]; + conv[picogram][picogram] = 1.0; + conv[picogram][attogram] = to_si*conv[kilogram][attogram]; + + to_si = 1.0/conv[kilogram][attogram]; + conv[attogram][kilogram] = to_si*conv[kilogram][kilogram]; + conv[attogram][gram_per_mole] = to_si*conv[kilogram][gram_per_mole]; + conv[attogram][gram] = to_si*conv[kilogram][gram]; + conv[attogram][amu] = to_si*conv[kilogram][amu]; + conv[attogram][picogram] = to_si*conv[kilogram][picogram]; + conv[attogram][attogram] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Distance conversion +double get_distance_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[meter][meter] = 1.0; + conv[meter][angstrom] = 1.0/angstrom_si; + conv[meter][centimeter] = 1.0/centimeter_si; + conv[meter][bohr] = 1.0/bohr_si; + conv[meter][micrometer] = 1.0/micrometer_si; + conv[meter][nanometer] = 1.0/nanometer_si; + + to_si = 1.0/conv[meter][angstrom]; + conv[angstrom][meter] = to_si*conv[meter][meter]; + conv[angstrom][angstrom] = 1.0; + conv[angstrom][centimeter] = to_si*conv[meter][centimeter]; + conv[angstrom][bohr] = to_si*conv[meter][bohr]; + conv[angstrom][micrometer] = to_si*conv[meter][micrometer]; + conv[angstrom][nanometer] = to_si*conv[meter][nanometer]; + + to_si = 1.0/conv[meter][centimeter]; + conv[centimeter][meter] = to_si*conv[meter][meter]; + conv[centimeter][angstrom] = to_si*conv[meter][angstrom]; + conv[centimeter][centimeter] = 1.0; + conv[centimeter][bohr] = to_si*conv[meter][bohr]; + conv[centimeter][micrometer] = to_si*conv[meter][micrometer]; + conv[centimeter][nanometer] = to_si*conv[meter][nanometer]; + + to_si = 1.0/conv[meter][bohr]; + conv[bohr][meter] = to_si*conv[meter][meter]; + conv[bohr][angstrom] = to_si*conv[meter][angstrom]; + conv[bohr][centimeter] = to_si*conv[meter][centimeter]; + conv[bohr][bohr] = 1.0; + conv[bohr][micrometer] = to_si*conv[meter][micrometer]; + conv[bohr][nanometer] = to_si*conv[meter][nanometer]; + + to_si = 1.0/conv[meter][micrometer]; + conv[micrometer][meter] = to_si*conv[meter][meter]; + conv[micrometer][angstrom] = to_si*conv[meter][angstrom]; + conv[micrometer][centimeter] = to_si*conv[meter][centimeter]; + conv[micrometer][bohr] = to_si*conv[meter][bohr]; + conv[micrometer][micrometer] = 1.0; + conv[micrometer][nanometer] = to_si*conv[meter][nanometer]; + + to_si = 1.0/conv[meter][nanometer]; + conv[nanometer][meter] = to_si*conv[meter][meter]; + conv[nanometer][angstrom] = to_si*conv[meter][angstrom]; + conv[nanometer][centimeter] = to_si*conv[meter][centimeter]; + conv[nanometer][bohr] = to_si*conv[meter][bohr]; + conv[nanometer][micrometer] = to_si*conv[meter][micrometer]; + conv[nanometer][nanometer] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Time conversion +double get_time_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[second][second] = 1.0; + conv[second][femtosecond] = 1.0/femtosecond_si; + conv[second][picosecond] = 1.0/picosecond_si; + conv[second][microsecond] = 1.0/microsecond_si; + conv[second][nanosecond] = 1.0/nanosecond_si; + + to_si = 1.0/conv[second][femtosecond]; + conv[femtosecond][second] = to_si*conv[second][second]; + conv[femtosecond][femtosecond] = 1.0; + conv[femtosecond][picosecond] = to_si*conv[second][picosecond]; + conv[femtosecond][microsecond] = to_si*conv[second][microsecond]; + conv[femtosecond][nanosecond] = to_si*conv[second][nanosecond]; + + to_si = 1.0/conv[second][picosecond]; + conv[picosecond][second] = to_si*conv[second][second]; + conv[picosecond][femtosecond] = to_si*conv[second][femtosecond]; + conv[picosecond][picosecond] = 1.0; + conv[picosecond][microsecond] = to_si*conv[second][microsecond]; + conv[picosecond][nanosecond] = to_si*conv[second][nanosecond]; + + to_si = 1.0/conv[second][microsecond]; + conv[microsecond][second] = to_si*conv[second][second]; + conv[microsecond][femtosecond] = to_si*conv[second][femtosecond]; + conv[microsecond][picosecond] = to_si*conv[second][picosecond]; + conv[microsecond][microsecond] = 1.0; + conv[microsecond][nanosecond] = to_si*conv[second][nanosecond]; + + to_si = 1.0/conv[second][nanosecond]; + conv[nanosecond][second] = to_si*conv[second][second]; + conv[nanosecond][femtosecond] = to_si*conv[second][femtosecond]; + conv[nanosecond][picosecond] = to_si*conv[second][picosecond]; + conv[nanosecond][microsecond] = to_si*conv[second][microsecond]; + conv[nanosecond][nanosecond] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Energy conversion +double get_energy_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + + map > conv; + double to_si; + + conv[joule][joule] = 1.0; + conv[joule][kcal_per_mole] = 1.0/kcal_per_mole_si; + conv[joule][ev] = 1.0/ev_si; + conv[joule][erg] = 1.0/erg_si; + conv[joule][hartree] = 1.0/hartree_si; + conv[joule][picogram_micrometersq_per_microsecondsq] = 1.0/picogram_micrometersq_per_microsecondsq_si; + conv[joule][attogram_nanometersq_per_nanosecondsq] = 1.0/attogram_nanometersq_per_nanosecondsq_si; + + to_si = 1.0/conv[joule][kcal_per_mole]; + conv[kcal_per_mole][joule] = to_si*conv[joule][joule]; + conv[kcal_per_mole][kcal_per_mole] = 1.0; + conv[kcal_per_mole][ev] = to_si*conv[joule][ev]; + conv[kcal_per_mole][erg] = to_si*conv[joule][erg]; + conv[kcal_per_mole][hartree] = to_si*conv[joule][hartree]; + conv[kcal_per_mole][picogram_micrometersq_per_microsecondsq] = to_si*conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[kcal_per_mole][attogram_nanometersq_per_nanosecondsq] = to_si*conv[joule][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[joule][ev]; + conv[ev][joule] = to_si*conv[joule][joule]; + conv[ev][kcal_per_mole] = to_si*conv[joule][kcal_per_mole]; + conv[ev][ev] = 1.0; + conv[ev][erg] = to_si*conv[joule][erg]; + conv[ev][hartree] = to_si*conv[joule][hartree]; + conv[ev][picogram_micrometersq_per_microsecondsq] = to_si*conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[ev][attogram_nanometersq_per_nanosecondsq] = to_si*conv[joule][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[joule][erg]; + conv[erg][joule] = to_si*conv[joule][joule]; + conv[erg][kcal_per_mole] = to_si*conv[joule][kcal_per_mole]; + conv[erg][ev] = to_si*conv[joule][ev]; + conv[erg][erg] = 1.0; + conv[erg][hartree] = to_si*conv[joule][hartree]; + conv[erg][picogram_micrometersq_per_microsecondsq] = to_si*conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[erg][attogram_nanometersq_per_nanosecondsq] = to_si*conv[joule][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[joule][hartree]; + conv[hartree][joule] = to_si*conv[joule][joule]; + conv[hartree][kcal_per_mole] = to_si*conv[joule][kcal_per_mole]; + conv[hartree][ev] = to_si*conv[joule][ev]; + conv[hartree][erg] = to_si*conv[joule][erg]; + conv[hartree][hartree] = 1.0; + conv[hartree][picogram_micrometersq_per_microsecondsq] = to_si*conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[hartree][attogram_nanometersq_per_nanosecondsq] = to_si*conv[joule][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[picogram_micrometersq_per_microsecondsq][joule] = to_si*conv[joule][joule]; + conv[picogram_micrometersq_per_microsecondsq][kcal_per_mole] = to_si*conv[joule][kcal_per_mole]; + conv[picogram_micrometersq_per_microsecondsq][ev] = to_si*conv[joule][ev]; + conv[picogram_micrometersq_per_microsecondsq][erg] = to_si*conv[joule][erg]; + conv[picogram_micrometersq_per_microsecondsq][hartree] = to_si*conv[joule][hartree]; + conv[picogram_micrometersq_per_microsecondsq][picogram_micrometersq_per_microsecondsq] = 1.0; + conv[picogram_micrometersq_per_microsecondsq][attogram_nanometersq_per_nanosecondsq] = to_si*conv[joule][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[joule][attogram_nanometersq_per_nanosecondsq]; + conv[attogram_nanometersq_per_nanosecondsq][joule] = to_si*conv[joule][joule]; + conv[attogram_nanometersq_per_nanosecondsq][kcal_per_mole] = to_si*conv[joule][kcal_per_mole]; + conv[attogram_nanometersq_per_nanosecondsq][ev] = to_si*conv[joule][ev]; + conv[attogram_nanometersq_per_nanosecondsq][erg] = to_si*conv[joule][erg]; + conv[attogram_nanometersq_per_nanosecondsq][hartree] = to_si*conv[joule][hartree]; + conv[attogram_nanometersq_per_nanosecondsq][picogram_micrometersq_per_microsecondsq] = to_si*conv[joule][picogram_micrometersq_per_microsecondsq]; + conv[attogram_nanometersq_per_nanosecondsq][attogram_nanometersq_per_nanosecondsq] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Velocity conversion +double get_velocity_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[meter_per_second][meter_per_second] = 1.0; + conv[meter_per_second][angstrom_per_femtosecond] = 1.0/angstrom_per_femtosecond_si; + conv[meter_per_second][angstrom_per_picosecond] = 1.0/angstrom_per_picosecond_si; + conv[meter_per_second][centimeter_per_second] = 1.0/centimeter_per_second_si; + conv[meter_per_second][bohr_per_atu] = 1.0/bohr_per_atu_si; + conv[meter_per_second][micrometer_per_microsecond] = 1.0/micrometer_per_microsecond_si; + conv[meter_per_second][nanometer_per_nanosecond] = 1.0/nanometer_per_nanosecond_si; + + to_si = 1.0/conv[meter_per_second][angstrom_per_femtosecond]; + conv[angstrom_per_femtosecond][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[angstrom_per_femtosecond][angstrom_per_femtosecond] = 1.0; + conv[angstrom_per_femtosecond][angstrom_per_picosecond] = to_si*conv[meter_per_second][angstrom_per_picosecond]; + conv[angstrom_per_femtosecond][centimeter_per_second] = to_si*conv[meter_per_second][centimeter_per_second]; + conv[angstrom_per_femtosecond][bohr_per_atu] = to_si*conv[meter_per_second][bohr_per_atu]; + conv[angstrom_per_femtosecond][micrometer_per_microsecond] = to_si*conv[meter_per_second][micrometer_per_microsecond]; + conv[angstrom_per_femtosecond][nanometer_per_nanosecond] = to_si*conv[meter_per_second][nanometer_per_nanosecond]; + + to_si = 1.0/conv[meter_per_second][angstrom_per_picosecond]; + conv[angstrom_per_picosecond][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[angstrom_per_picosecond][angstrom_per_femtosecond] = to_si*conv[meter_per_second][angstrom_per_femtosecond]; + conv[angstrom_per_picosecond][angstrom_per_picosecond] = 1.0; + conv[angstrom_per_picosecond][centimeter_per_second] = to_si*conv[meter_per_second][centimeter_per_second]; + conv[angstrom_per_picosecond][bohr_per_atu] = to_si*conv[meter_per_second][bohr_per_atu]; + conv[angstrom_per_picosecond][micrometer_per_microsecond] = to_si*conv[meter_per_second][micrometer_per_microsecond]; + conv[angstrom_per_picosecond][nanometer_per_nanosecond] = to_si*conv[meter_per_second][nanometer_per_nanosecond]; + + to_si = 1.0/conv[meter_per_second][centimeter_per_second]; + conv[centimeter_per_second][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[centimeter_per_second][angstrom_per_femtosecond] = to_si*conv[meter_per_second][angstrom_per_femtosecond]; + conv[centimeter_per_second][angstrom_per_picosecond] = to_si*conv[meter_per_second][angstrom_per_picosecond]; + conv[centimeter_per_second][centimeter_per_second] = 1.0; + conv[centimeter_per_second][bohr_per_atu] = to_si*conv[meter_per_second][bohr_per_atu]; + conv[centimeter_per_second][micrometer_per_microsecond] = to_si*conv[meter_per_second][micrometer_per_microsecond]; + conv[centimeter_per_second][nanometer_per_nanosecond] = to_si*conv[meter_per_second][nanometer_per_nanosecond]; + + to_si = 1.0/conv[meter_per_second][bohr_per_atu]; + conv[bohr_per_atu][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[bohr_per_atu][angstrom_per_femtosecond] = to_si*conv[meter_per_second][angstrom_per_femtosecond]; + conv[bohr_per_atu][angstrom_per_picosecond] = to_si*conv[meter_per_second][angstrom_per_picosecond]; + conv[bohr_per_atu][centimeter_per_second] = to_si*conv[meter_per_second][centimeter_per_second]; + conv[bohr_per_atu][bohr_per_atu] = 1.0; + conv[bohr_per_atu][micrometer_per_microsecond] = to_si*conv[meter_per_second][micrometer_per_microsecond]; + conv[bohr_per_atu][nanometer_per_nanosecond] = to_si*conv[meter_per_second][nanometer_per_nanosecond]; + + to_si = 1.0/conv[meter_per_second][micrometer_per_microsecond]; + conv[micrometer_per_microsecond][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[micrometer_per_microsecond][angstrom_per_femtosecond] = to_si*conv[meter_per_second][angstrom_per_femtosecond]; + conv[micrometer_per_microsecond][angstrom_per_picosecond] = to_si*conv[meter_per_second][angstrom_per_picosecond]; + conv[micrometer_per_microsecond][centimeter_per_second] = to_si*conv[meter_per_second][centimeter_per_second]; + conv[micrometer_per_microsecond][bohr_per_atu] = to_si*conv[meter_per_second][bohr_per_atu]; + conv[micrometer_per_microsecond][micrometer_per_microsecond] = 1.0; + conv[micrometer_per_microsecond][nanometer_per_nanosecond] = to_si*conv[meter_per_second][nanometer_per_nanosecond]; + + to_si = 1.0/conv[meter_per_second][nanometer_per_nanosecond]; + conv[nanometer_per_nanosecond][meter_per_second] = to_si*conv[meter_per_second][meter_per_second]; + conv[nanometer_per_nanosecond][angstrom_per_femtosecond] = to_si*conv[meter_per_second][angstrom_per_femtosecond]; + conv[nanometer_per_nanosecond][angstrom_per_picosecond] = to_si*conv[meter_per_second][angstrom_per_picosecond]; + conv[nanometer_per_nanosecond][centimeter_per_second] = to_si*conv[meter_per_second][centimeter_per_second]; + conv[nanometer_per_nanosecond][bohr_per_atu] = to_si*conv[meter_per_second][bohr_per_atu]; + conv[nanometer_per_nanosecond][micrometer_per_microsecond] = to_si*conv[meter_per_second][micrometer_per_microsecond]; + conv[nanometer_per_nanosecond][nanometer_per_nanosecond] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Force conversion +double get_force_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[newton][newton] = 1.0; + conv[newton][kcal_per_mole_angstrom] = 1.0/kcal_per_mole_angstrom_si; + conv[newton][ev_per_angstrom] = 1.0/ev_per_angstrom_si; + conv[newton][dyne] = 1.0/dyne_si; + conv[newton][hartree_per_bohr] = 1.0/hartree_per_bohr_si; + conv[newton][picogram_micrometer_per_microsecondsq] = 1.0/picogram_micrometer_per_microsecondsq_si; + conv[newton][attogram_nanometer_per_nanosecondsq] = 1.0/attogram_nanometer_per_nanosecondsq_si; + + to_si = 1.0/conv[newton][kcal_per_mole_angstrom]; + conv[kcal_per_mole_angstrom][newton] = to_si*conv[newton][newton]; + conv[kcal_per_mole_angstrom][kcal_per_mole_angstrom] = 1.0; + conv[kcal_per_mole_angstrom][ev_per_angstrom] = to_si*conv[newton][ev_per_angstrom]; + conv[kcal_per_mole_angstrom][dyne] = to_si*conv[newton][dyne]; + conv[kcal_per_mole_angstrom][hartree_per_bohr] = to_si*conv[newton][hartree_per_bohr]; + conv[kcal_per_mole_angstrom][picogram_micrometer_per_microsecondsq] = to_si*conv[newton][picogram_micrometer_per_microsecondsq]; + conv[kcal_per_mole_angstrom][attogram_nanometer_per_nanosecondsq] = to_si*conv[newton][attogram_nanometer_per_nanosecondsq]; + + to_si = 1.0/conv[newton][ev_per_angstrom]; + conv[ev_per_angstrom][newton] = to_si*conv[newton][newton]; + conv[ev_per_angstrom][kcal_per_mole_angstrom] = to_si*conv[newton][kcal_per_mole_angstrom]; + conv[ev_per_angstrom][ev_per_angstrom] = 1.0; + conv[ev_per_angstrom][dyne] = to_si*conv[newton][dyne]; + conv[ev_per_angstrom][hartree_per_bohr] = to_si*conv[newton][hartree_per_bohr]; + conv[ev_per_angstrom][picogram_micrometer_per_microsecondsq] = to_si*conv[newton][picogram_micrometer_per_microsecondsq]; + conv[ev_per_angstrom][attogram_nanometer_per_nanosecondsq] = to_si*conv[newton][attogram_nanometer_per_nanosecondsq]; + + to_si = 1.0/conv[newton][dyne]; + conv[dyne][newton] = to_si*conv[newton][newton]; + conv[dyne][kcal_per_mole_angstrom] = to_si*conv[newton][kcal_per_mole_angstrom]; + conv[dyne][ev_per_angstrom] = to_si*conv[newton][ev_per_angstrom]; + conv[dyne][dyne] = 1.0; + conv[dyne][hartree_per_bohr] = to_si*conv[newton][hartree_per_bohr]; + conv[dyne][picogram_micrometer_per_microsecondsq] = to_si*conv[newton][picogram_micrometer_per_microsecondsq]; + conv[dyne][attogram_nanometer_per_nanosecondsq] = to_si*conv[newton][attogram_nanometer_per_nanosecondsq]; + + to_si = 1.0/conv[newton][hartree_per_bohr]; + conv[hartree_per_bohr][newton] = to_si*conv[newton][newton]; + conv[hartree_per_bohr][kcal_per_mole_angstrom] = to_si*conv[newton][kcal_per_mole_angstrom]; + conv[hartree_per_bohr][ev_per_angstrom] = to_si*conv[newton][ev_per_angstrom]; + conv[hartree_per_bohr][dyne] = to_si*conv[newton][dyne]; + conv[hartree_per_bohr][hartree_per_bohr] = 1.0; + conv[hartree_per_bohr][picogram_micrometer_per_microsecondsq] = to_si*conv[newton][picogram_micrometer_per_microsecondsq]; + conv[hartree_per_bohr][attogram_nanometer_per_nanosecondsq] = to_si*conv[newton][attogram_nanometer_per_nanosecondsq]; + + to_si = 1.0/conv[newton][picogram_micrometer_per_microsecondsq]; + conv[picogram_micrometer_per_microsecondsq][newton] = to_si*conv[newton][newton]; + conv[picogram_micrometer_per_microsecondsq][kcal_per_mole_angstrom] = to_si*conv[newton][kcal_per_mole_angstrom]; + conv[picogram_micrometer_per_microsecondsq][ev_per_angstrom] = to_si*conv[newton][ev_per_angstrom]; + conv[picogram_micrometer_per_microsecondsq][dyne] = to_si*conv[newton][dyne]; + conv[picogram_micrometer_per_microsecondsq][hartree_per_bohr] = to_si*conv[newton][hartree_per_bohr]; + conv[picogram_micrometer_per_microsecondsq][picogram_micrometer_per_microsecondsq] = 1.0; + conv[picogram_micrometer_per_microsecondsq][attogram_nanometer_per_nanosecondsq] = to_si*conv[newton][attogram_nanometer_per_nanosecondsq]; + + to_si = 1.0/conv[newton][attogram_nanometer_per_nanosecondsq]; + conv[attogram_nanometer_per_nanosecondsq][newton] = to_si*conv[newton][newton]; + conv[attogram_nanometer_per_nanosecondsq][kcal_per_mole_angstrom] = to_si*conv[newton][kcal_per_mole_angstrom]; + conv[attogram_nanometer_per_nanosecondsq][ev_per_angstrom] = to_si*conv[newton][ev_per_angstrom]; + conv[attogram_nanometer_per_nanosecondsq][dyne] = to_si*conv[newton][dyne]; + conv[attogram_nanometer_per_nanosecondsq][hartree_per_bohr] = to_si*conv[newton][hartree_per_bohr]; + conv[attogram_nanometer_per_nanosecondsq][picogram_micrometer_per_microsecondsq] = to_si*conv[newton][picogram_micrometer_per_microsecondsq]; + conv[attogram_nanometer_per_nanosecondsq][attogram_nanometer_per_nanosecondsq] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Torque conversion +double get_torque_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[newton_meter][newton_meter] = 1.0; + conv[newton_meter][kcal_per_mole] = 1.0/kcal_per_mole_si; + conv[newton_meter][ev] = 1.0/ev_si; + conv[newton_meter][dyne_centimeter] = 1.0/dyne_centimeter_si; + conv[newton_meter][hartree] = 1.0/hartree_si; + conv[newton_meter][picogram_micrometersq_per_microsecondsq] = 1.0/picogram_micrometersq_per_microsecondsq_si; + conv[newton_meter][attogram_nanometersq_per_nanosecondsq] = 1.0/attogram_nanometersq_per_nanosecondsq_si; + + to_si = 1.0/conv[newton_meter][kcal_per_mole]; + conv[kcal_per_mole][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[kcal_per_mole][kcal_per_mole] = 1.0; + conv[kcal_per_mole][ev] = to_si*conv[newton_meter][ev]; + conv[kcal_per_mole][dyne_centimeter] = to_si*conv[newton_meter][dyne_centimeter]; + conv[kcal_per_mole][hartree] = to_si*conv[newton_meter][hartree]; + conv[kcal_per_mole][picogram_micrometersq_per_microsecondsq] = to_si*conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[kcal_per_mole][attogram_nanometersq_per_nanosecondsq] = to_si*conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[newton_meter][ev]; + conv[ev][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[ev][kcal_per_mole] = to_si*conv[newton_meter][kcal_per_mole]; + conv[ev][ev] = 1.0; + conv[ev][dyne_centimeter] = to_si*conv[newton_meter][dyne_centimeter]; + conv[ev][hartree] = to_si*conv[newton_meter][hartree]; + conv[ev][picogram_micrometersq_per_microsecondsq] = to_si*conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[ev][attogram_nanometersq_per_nanosecondsq] = to_si*conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[newton_meter][dyne_centimeter]; + conv[dyne_centimeter][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[dyne_centimeter][kcal_per_mole] = to_si*conv[newton_meter][kcal_per_mole]; + conv[dyne_centimeter][ev] = to_si*conv[newton_meter][ev]; + conv[dyne_centimeter][dyne_centimeter] = 1.0; + conv[dyne_centimeter][hartree] = to_si*conv[newton_meter][hartree]; + conv[dyne_centimeter][picogram_micrometersq_per_microsecondsq] = to_si*conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[dyne_centimeter][attogram_nanometersq_per_nanosecondsq] = to_si*conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[newton_meter][hartree]; + conv[hartree][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[hartree][kcal_per_mole] = to_si*conv[newton_meter][kcal_per_mole]; + conv[hartree][ev] = to_si*conv[newton_meter][ev]; + conv[hartree][dyne_centimeter] = to_si*conv[newton_meter][dyne_centimeter]; + conv[hartree][hartree] = 1.0; + conv[hartree][picogram_micrometersq_per_microsecondsq] = to_si*conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[hartree][attogram_nanometersq_per_nanosecondsq] = to_si*conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[picogram_micrometersq_per_microsecondsq][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[picogram_micrometersq_per_microsecondsq][kcal_per_mole] = to_si*conv[newton_meter][kcal_per_mole]; + conv[picogram_micrometersq_per_microsecondsq][ev] = to_si*conv[newton_meter][ev]; + conv[picogram_micrometersq_per_microsecondsq][dyne_centimeter] = to_si*conv[newton_meter][dyne_centimeter]; + conv[picogram_micrometersq_per_microsecondsq][hartree] = to_si*conv[newton_meter][hartree]; + conv[picogram_micrometersq_per_microsecondsq][picogram_micrometersq_per_microsecondsq] = 1.0; + conv[picogram_micrometersq_per_microsecondsq][attogram_nanometersq_per_nanosecondsq] = to_si*conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + + to_si = 1.0/conv[newton_meter][attogram_nanometersq_per_nanosecondsq]; + conv[attogram_nanometersq_per_nanosecondsq][newton_meter] = to_si*conv[newton_meter][newton_meter]; + conv[attogram_nanometersq_per_nanosecondsq][kcal_per_mole] = to_si*conv[newton_meter][kcal_per_mole]; + conv[attogram_nanometersq_per_nanosecondsq][ev] = to_si*conv[newton_meter][ev]; + conv[attogram_nanometersq_per_nanosecondsq][dyne_centimeter] = to_si*conv[newton_meter][dyne_centimeter]; + conv[attogram_nanometersq_per_nanosecondsq][hartree] = to_si*conv[newton_meter][hartree]; + conv[attogram_nanometersq_per_nanosecondsq][picogram_micrometersq_per_microsecondsq] = to_si*conv[newton_meter][picogram_micrometersq_per_microsecondsq]; + conv[attogram_nanometersq_per_nanosecondsq][attogram_nanometersq_per_nanosecondsq] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Temperature conversion +double get_temperature_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[kelvin][kelvin] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Pressure conversion +double get_pressure_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[pascal][pascal] = 1.0; + conv[pascal][atmosphere] = 1.0/atmosphere_si; + conv[pascal][bar] = 1.0/bar_si; + conv[pascal][dyne_per_centimetersq] = 1.0/dyne_per_centimetersq_si; + conv[pascal][picogram_per_micrometer_microsecondsq] = 1.0/picogram_per_micrometer_microsecondsq_si; + conv[pascal][attogram_per_nanometer_nanosecondsq] = 1.0/attogram_per_nanometer_nanosecondsq_si; + + to_si = 1.0/conv[pascal][atmosphere]; + conv[atmosphere][pascal] = to_si*conv[pascal][pascal]; + conv[atmosphere][atmosphere] = 1.0; + conv[atmosphere][bar] = to_si*conv[pascal][bar]; + conv[atmosphere][dyne_per_centimetersq] = to_si*conv[pascal][dyne_per_centimetersq]; + conv[atmosphere][picogram_per_micrometer_microsecondsq] = to_si*conv[pascal][picogram_per_micrometer_microsecondsq]; + conv[atmosphere][attogram_per_nanometer_nanosecondsq] = to_si*conv[pascal][attogram_per_nanometer_nanosecondsq]; + + to_si = 1.0/conv[pascal][bar]; + conv[bar][pascal] = to_si*conv[pascal][pascal]; + conv[bar][atmosphere] = to_si*conv[pascal][atmosphere]; + conv[bar][bar] = 1.0; + conv[bar][dyne_per_centimetersq] = to_si*conv[pascal][dyne_per_centimetersq]; + conv[bar][picogram_per_micrometer_microsecondsq] = to_si*conv[pascal][picogram_per_micrometer_microsecondsq]; + conv[bar][attogram_per_nanometer_nanosecondsq] = to_si*conv[pascal][attogram_per_nanometer_nanosecondsq]; + + to_si = 1.0/conv[pascal][dyne_per_centimetersq]; + conv[dyne_per_centimetersq][pascal] = to_si*conv[pascal][pascal]; + conv[dyne_per_centimetersq][atmosphere] = to_si*conv[pascal][atmosphere]; + conv[dyne_per_centimetersq][bar] = to_si*conv[pascal][bar]; + conv[dyne_per_centimetersq][dyne_per_centimetersq] = 1.0; + conv[dyne_per_centimetersq][picogram_per_micrometer_microsecondsq] = to_si*conv[pascal][picogram_per_micrometer_microsecondsq]; + conv[dyne_per_centimetersq][attogram_per_nanometer_nanosecondsq] = to_si*conv[pascal][attogram_per_nanometer_nanosecondsq]; + + to_si = 1.0/conv[pascal][picogram_per_micrometer_microsecondsq]; + conv[picogram_per_micrometer_microsecondsq][pascal] = to_si*conv[pascal][pascal]; + conv[picogram_per_micrometer_microsecondsq][atmosphere] = to_si*conv[pascal][atmosphere]; + conv[picogram_per_micrometer_microsecondsq][bar] = to_si*conv[pascal][bar]; + conv[picogram_per_micrometer_microsecondsq][dyne_per_centimetersq] = to_si*conv[pascal][dyne_per_centimetersq]; + conv[picogram_per_micrometer_microsecondsq][picogram_per_micrometer_microsecondsq] = 1.0; + conv[picogram_per_micrometer_microsecondsq][attogram_per_nanometer_nanosecondsq] = to_si*conv[pascal][attogram_per_nanometer_nanosecondsq]; + + to_si = 1.0/conv[pascal][attogram_per_nanometer_nanosecondsq]; + conv[attogram_per_nanometer_nanosecondsq][pascal] = to_si*conv[pascal][pascal]; + conv[attogram_per_nanometer_nanosecondsq][atmosphere] = to_si*conv[pascal][atmosphere]; + conv[attogram_per_nanometer_nanosecondsq][bar] = to_si*conv[pascal][bar]; + conv[attogram_per_nanometer_nanosecondsq][dyne_per_centimetersq] = to_si*conv[pascal][dyne_per_centimetersq]; + conv[attogram_per_nanometer_nanosecondsq][picogram_per_micrometer_microsecondsq] = to_si*conv[pascal][picogram_per_micrometer_microsecondsq]; + conv[attogram_per_nanometer_nanosecondsq][attogram_per_nanometer_nanosecondsq] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Viscosity conversion +double get_viscosity_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[pascal_second][pascal_second] = 1.0; + conv[pascal_second][poise] = 1.0/poise_si; + conv[pascal_second][amu_per_bohr_femtosecond] = 1.0/amu_per_bohr_femtosecond_si; + conv[pascal_second][picogram_per_micrometer_microsecond] = 1.0/picogram_per_micrometer_microsecond_si; + conv[pascal_second][attogram_per_nanometer_nanosecond] = 1.0/attogram_per_nanometer_nanosecond_si; + + to_si = 1.0/conv[pascal_second][poise]; + conv[poise][pascal_second] = to_si*conv[pascal_second][pascal_second]; + conv[poise][poise] = 1.0; + conv[poise][amu_per_bohr_femtosecond] = to_si*conv[pascal_second][amu_per_bohr_femtosecond]; + conv[poise][picogram_per_micrometer_microsecond] = to_si*conv[pascal_second][picogram_per_micrometer_microsecond]; + conv[poise][attogram_per_nanometer_nanosecond] = to_si*conv[pascal_second][attogram_per_nanometer_nanosecond]; + + to_si = 1.0/conv[pascal_second][amu_per_bohr_femtosecond]; + conv[amu_per_bohr_femtosecond][pascal_second] = to_si*conv[pascal_second][pascal_second]; + conv[amu_per_bohr_femtosecond][poise] = to_si*conv[pascal_second][poise]; + conv[amu_per_bohr_femtosecond][amu_per_bohr_femtosecond] = 1.0; + conv[amu_per_bohr_femtosecond][picogram_per_micrometer_microsecond] = to_si*conv[pascal_second][picogram_per_micrometer_microsecond]; + conv[amu_per_bohr_femtosecond][attogram_per_nanometer_nanosecond] = to_si*conv[pascal_second][attogram_per_nanometer_nanosecond]; + + to_si = 1.0/conv[pascal_second][picogram_per_micrometer_microsecond]; + conv[picogram_per_micrometer_microsecond][pascal_second] = to_si*conv[pascal_second][pascal_second]; + conv[picogram_per_micrometer_microsecond][poise] = to_si*conv[pascal_second][poise]; + conv[picogram_per_micrometer_microsecond][amu_per_bohr_femtosecond] = to_si*conv[pascal_second][amu_per_bohr_femtosecond]; + conv[picogram_per_micrometer_microsecond][picogram_per_micrometer_microsecond] = 1.0; + conv[picogram_per_micrometer_microsecond][attogram_per_nanometer_nanosecond] = to_si*conv[pascal_second][attogram_per_nanometer_nanosecond]; + + to_si = 1.0/conv[pascal_second][attogram_per_nanometer_nanosecond]; + conv[attogram_per_nanometer_nanosecond][pascal_second] = to_si*conv[pascal_second][pascal_second]; + conv[attogram_per_nanometer_nanosecond][poise] = to_si*conv[pascal_second][poise]; + conv[attogram_per_nanometer_nanosecond][amu_per_bohr_femtosecond] = to_si*conv[pascal_second][amu_per_bohr_femtosecond]; + conv[attogram_per_nanometer_nanosecond][picogram_per_micrometer_microsecond] = to_si*conv[pascal_second][picogram_per_micrometer_microsecond]; + conv[attogram_per_nanometer_nanosecond][attogram_per_nanometer_nanosecond] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Charge conversion +double get_charge_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[coulomb][coulomb] = 1.0; + conv[coulomb][echarge] = 1.0/echarge_si; + conv[coulomb][statcoulomb] = 1.0/statcoulomb_si; + conv[coulomb][picocoulomb] = 1.0/picocoulomb_si; + + to_si = 1.0/conv[coulomb][echarge]; + conv[echarge][coulomb] = to_si*conv[coulomb][coulomb]; + conv[echarge][echarge] = 1.0; + conv[echarge][statcoulomb] = to_si*conv[coulomb][statcoulomb]; + conv[echarge][picocoulomb] = to_si*conv[coulomb][picocoulomb]; + + to_si = 1.0/conv[coulomb][statcoulomb]; + conv[statcoulomb][coulomb] = to_si*conv[coulomb][coulomb]; + conv[statcoulomb][echarge] = to_si*conv[coulomb][echarge]; + conv[statcoulomb][statcoulomb] = 1.0; + conv[statcoulomb][picocoulomb] = to_si*conv[coulomb][picocoulomb]; + + to_si = 1.0/conv[coulomb][picocoulomb]; + conv[picocoulomb][coulomb] = to_si*conv[coulomb][coulomb]; + conv[picocoulomb][echarge] = to_si*conv[coulomb][echarge]; + conv[picocoulomb][statcoulomb] = to_si*conv[coulomb][statcoulomb]; + conv[picocoulomb][picocoulomb] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Dipole conversion +double get_dipole_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[coulomb_meter][coulomb_meter] = 1.0; + conv[coulomb_meter][electron_angstrom] = 1.0/electron_angstrom_si; + conv[coulomb_meter][statcoulomb_centimeter] = 1.0/statcoulomb_centimeter_si; + conv[coulomb_meter][debye] = 1.0/debye_si; + conv[coulomb_meter][picocoulomb_micrometer] = 1.0/picocoulomb_micrometer_si; + conv[coulomb_meter][electron_nanometer] = 1.0/electron_nanometer_si; + + to_si = 1.0/conv[coulomb_meter][electron_angstrom]; + conv[electron_angstrom][coulomb_meter] = to_si*conv[coulomb_meter][coulomb_meter]; + conv[electron_angstrom][electron_angstrom] = 1.0; + conv[electron_angstrom][statcoulomb_centimeter] = to_si*conv[coulomb_meter][statcoulomb_centimeter]; + conv[electron_angstrom][debye] = to_si*conv[coulomb_meter][debye]; + conv[electron_angstrom][picocoulomb_micrometer] = to_si*conv[coulomb_meter][picocoulomb_micrometer]; + conv[electron_angstrom][electron_nanometer] = to_si*conv[coulomb_meter][electron_nanometer]; + + to_si = 1.0/conv[coulomb_meter][statcoulomb_centimeter]; + conv[statcoulomb_centimeter][coulomb_meter] = to_si*conv[coulomb_meter][coulomb_meter]; + conv[statcoulomb_centimeter][electron_angstrom] = to_si*conv[coulomb_meter][electron_angstrom]; + conv[statcoulomb_centimeter][statcoulomb_centimeter] = 1.0; + conv[statcoulomb_centimeter][debye] = to_si*conv[coulomb_meter][debye]; + conv[statcoulomb_centimeter][picocoulomb_micrometer] = to_si*conv[coulomb_meter][picocoulomb_micrometer]; + conv[statcoulomb_centimeter][electron_nanometer] = to_si*conv[coulomb_meter][electron_nanometer]; + + to_si = 1.0/conv[coulomb_meter][debye]; + conv[debye][coulomb_meter] = to_si*conv[coulomb_meter][coulomb_meter]; + conv[debye][electron_angstrom] = to_si*conv[coulomb_meter][electron_angstrom]; + conv[debye][statcoulomb_centimeter] = to_si*conv[coulomb_meter][statcoulomb_centimeter]; + conv[debye][debye] = 1.0; + conv[debye][picocoulomb_micrometer] = to_si*conv[coulomb_meter][picocoulomb_micrometer]; + conv[debye][electron_nanometer] = to_si*conv[coulomb_meter][electron_nanometer]; + + to_si = 1.0/conv[coulomb_meter][picocoulomb_micrometer]; + conv[picocoulomb_micrometer][coulomb_meter] = to_si*conv[coulomb_meter][coulomb_meter]; + conv[picocoulomb_micrometer][electron_angstrom] = to_si*conv[coulomb_meter][electron_angstrom]; + conv[picocoulomb_micrometer][statcoulomb_centimeter] = to_si*conv[coulomb_meter][statcoulomb_centimeter]; + conv[picocoulomb_micrometer][debye] = to_si*conv[coulomb_meter][debye]; + conv[picocoulomb_micrometer][picocoulomb_micrometer] = 1.0; + conv[picocoulomb_micrometer][electron_nanometer] = to_si*conv[coulomb_meter][electron_nanometer]; + + to_si = 1.0/conv[coulomb_meter][electron_nanometer]; + conv[electron_nanometer][coulomb_meter] = to_si*conv[coulomb_meter][coulomb_meter]; + conv[electron_nanometer][electron_angstrom] = to_si*conv[coulomb_meter][electron_angstrom]; + conv[electron_nanometer][statcoulomb_centimeter] = to_si*conv[coulomb_meter][statcoulomb_centimeter]; + conv[electron_nanometer][debye] = to_si*conv[coulomb_meter][debye]; + conv[electron_nanometer][picocoulomb_micrometer] = to_si*conv[coulomb_meter][picocoulomb_micrometer]; + conv[electron_nanometer][electron_nanometer] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Electric field conversion +double get_efield_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[volt_per_meter][volt_per_meter] = 1.0; + conv[volt_per_meter][volt_per_angstrom] = 1.0/volt_per_angstrom_si; + conv[volt_per_meter][statvolt_per_centimeter] = 1.0/statvolt_per_centimeter_si; + conv[volt_per_meter][volt_per_centimeter] = 1.0/volt_per_centimeter_si; + conv[volt_per_meter][volt_per_micrometer] = 1.0/volt_per_micrometer_si; + conv[volt_per_meter][volt_per_nanometer] = 1.0/volt_per_nanometer_si; + + to_si = 1.0/conv[volt_per_meter][volt_per_angstrom]; + conv[volt_per_angstrom][volt_per_meter] = to_si*conv[volt_per_meter][volt_per_meter]; + conv[volt_per_angstrom][volt_per_angstrom] = 1.0; + conv[volt_per_angstrom][statvolt_per_centimeter] = to_si*conv[volt_per_meter][statvolt_per_centimeter]; + conv[volt_per_angstrom][volt_per_centimeter] = to_si*conv[volt_per_meter][volt_per_centimeter]; + conv[volt_per_angstrom][volt_per_micrometer] = to_si*conv[volt_per_meter][volt_per_micrometer]; + conv[volt_per_angstrom][volt_per_nanometer] = to_si*conv[volt_per_meter][volt_per_nanometer]; + + to_si = 1.0/conv[volt_per_meter][statvolt_per_centimeter]; + conv[statvolt_per_centimeter][volt_per_meter] = to_si*conv[volt_per_meter][volt_per_meter]; + conv[statvolt_per_centimeter][volt_per_angstrom] = to_si*conv[volt_per_meter][volt_per_angstrom]; + conv[statvolt_per_centimeter][statvolt_per_centimeter] = 1.0; + conv[statvolt_per_centimeter][volt_per_centimeter] = to_si*conv[volt_per_meter][volt_per_centimeter]; + conv[statvolt_per_centimeter][volt_per_micrometer] = to_si*conv[volt_per_meter][volt_per_micrometer]; + conv[statvolt_per_centimeter][volt_per_nanometer] = to_si*conv[volt_per_meter][volt_per_nanometer]; + + to_si = 1.0/conv[volt_per_meter][volt_per_centimeter]; + conv[volt_per_centimeter][volt_per_meter] = to_si*conv[volt_per_meter][volt_per_meter]; + conv[volt_per_centimeter][volt_per_angstrom] = to_si*conv[volt_per_meter][volt_per_angstrom]; + conv[volt_per_centimeter][statvolt_per_centimeter] = to_si*conv[volt_per_meter][statvolt_per_centimeter]; + conv[volt_per_centimeter][volt_per_centimeter] = 1.0; + conv[volt_per_centimeter][volt_per_micrometer] = to_si*conv[volt_per_meter][volt_per_micrometer]; + conv[volt_per_centimeter][volt_per_nanometer] = to_si*conv[volt_per_meter][volt_per_nanometer]; + + to_si = 1.0/conv[volt_per_meter][volt_per_micrometer]; + conv[volt_per_micrometer][volt_per_meter] = to_si*conv[volt_per_meter][volt_per_meter]; + conv[volt_per_micrometer][volt_per_angstrom] = to_si*conv[volt_per_meter][volt_per_angstrom]; + conv[volt_per_micrometer][statvolt_per_centimeter] = to_si*conv[volt_per_meter][statvolt_per_centimeter]; + conv[volt_per_micrometer][volt_per_centimeter] = to_si*conv[volt_per_meter][volt_per_centimeter]; + conv[volt_per_micrometer][volt_per_micrometer] = 1.0; + conv[volt_per_micrometer][volt_per_nanometer] = to_si*conv[volt_per_meter][volt_per_nanometer]; + + to_si = 1.0/conv[volt_per_meter][volt_per_nanometer]; + conv[volt_per_nanometer][volt_per_meter] = to_si*conv[volt_per_meter][volt_per_meter]; + conv[volt_per_nanometer][volt_per_angstrom] = to_si*conv[volt_per_meter][volt_per_angstrom]; + conv[volt_per_nanometer][statvolt_per_centimeter] = to_si*conv[volt_per_meter][statvolt_per_centimeter]; + conv[volt_per_nanometer][volt_per_centimeter] = to_si*conv[volt_per_meter][volt_per_centimeter]; + conv[volt_per_nanometer][volt_per_micrometer] = to_si*conv[volt_per_meter][volt_per_micrometer]; + conv[volt_per_nanometer][volt_per_nanometer] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// Demsity conversion +double get_density_conversion_factor(units from_unit_enum, units to_unit_enum) +{ + map > conv; + double to_si; + + conv[kilogram_per_metercu][kilogram_per_metercu] = 1.0; + conv[kilogram_per_metercu][gram_per_centimetercu] = 1.0/gram_per_centimetercu_si; + conv[kilogram_per_metercu][amu_per_bohrcu] = 1.0/amu_per_bohrcu_si; + conv[kilogram_per_metercu][picogram_per_micrometercu] = 1.0/picogram_per_micrometercu_si; + conv[kilogram_per_metercu][attogram_per_nanometercu] = 1.0/attogram_per_nanometercu_si; + + to_si = 1.0/conv[kilogram_per_metercu][gram_per_centimetercu]; + conv[gram_per_centimetercu][kilogram_per_metercu] = to_si*conv[kilogram_per_metercu][kilogram_per_metercu]; + conv[gram_per_centimetercu][gram_per_centimetercu] = 1.0; + conv[gram_per_centimetercu][amu_per_bohrcu] = to_si*conv[kilogram_per_metercu][amu_per_bohrcu]; + conv[gram_per_centimetercu][picogram_per_micrometercu] = to_si*conv[kilogram_per_metercu][picogram_per_micrometercu]; + conv[gram_per_centimetercu][attogram_per_nanometercu] = to_si*conv[kilogram_per_metercu][attogram_per_nanometercu]; + + to_si = 1.0/conv[kilogram_per_metercu][amu_per_bohrcu]; + conv[amu_per_bohrcu][kilogram_per_metercu] = to_si*conv[kilogram_per_metercu][kilogram_per_metercu]; + conv[amu_per_bohrcu][gram_per_centimetercu] = to_si*conv[kilogram_per_metercu][gram_per_centimetercu]; + conv[amu_per_bohrcu][amu_per_bohrcu] = 1.0; + conv[amu_per_bohrcu][picogram_per_micrometercu] = to_si*conv[kilogram_per_metercu][picogram_per_micrometercu]; + conv[amu_per_bohrcu][attogram_per_nanometercu] = to_si*conv[kilogram_per_metercu][attogram_per_nanometercu]; + + to_si = 1.0/conv[kilogram_per_metercu][picogram_per_micrometercu]; + conv[picogram_per_micrometercu][kilogram_per_metercu] = to_si*conv[kilogram_per_metercu][kilogram_per_metercu]; + conv[picogram_per_micrometercu][gram_per_centimetercu] = to_si*conv[kilogram_per_metercu][gram_per_centimetercu]; + conv[picogram_per_micrometercu][amu_per_bohrcu] = to_si*conv[kilogram_per_metercu][amu_per_bohrcu]; + conv[picogram_per_micrometercu][picogram_per_micrometercu] = 1.0; + conv[picogram_per_micrometercu][attogram_per_nanometercu] = to_si*conv[kilogram_per_metercu][attogram_per_nanometercu]; + + to_si = 1.0/conv[kilogram_per_metercu][attogram_per_nanometercu]; + conv[attogram_per_nanometercu][kilogram_per_metercu] = to_si*conv[kilogram_per_metercu][kilogram_per_metercu]; + conv[attogram_per_nanometercu][gram_per_centimetercu] = to_si*conv[kilogram_per_metercu][gram_per_centimetercu]; + conv[attogram_per_nanometercu][amu_per_bohrcu] = to_si*conv[kilogram_per_metercu][amu_per_bohrcu]; + conv[attogram_per_nanometercu][picogram_per_micrometercu] = to_si*conv[kilogram_per_metercu][picogram_per_micrometercu]; + conv[attogram_per_nanometercu][attogram_per_nanometercu] = 1.0; + + return conv[from_unit_enum][to_unit_enum]; +} + +/* ---------------------------------------------------------------------- */ + +// This routine returns the unit conversion factor between the +// `from_system_enum` to the `to_system_enum` for the `unit_type_enum`. +double get_unit_conversion_factor(unit_type &unit_type_enum, + sys_type from_system_enum, + sys_type to_system_enum) +{ + units from_unit = get_lammps_system_unit(from_system_enum, unit_type_enum); + units to_unit = get_lammps_system_unit(to_system_enum, unit_type_enum); + switch(unit_type_enum) { + case mass : + return get_mass_conversion_factor(from_unit, to_unit); + case distance : + return get_distance_conversion_factor(from_unit, to_unit); + case time : + return get_time_conversion_factor(from_unit, to_unit); + case energy : + return get_energy_conversion_factor(from_unit, to_unit); + case velocity : + return get_velocity_conversion_factor(from_unit, to_unit); + case force : + return get_force_conversion_factor(from_unit, to_unit); + case torque : + return get_torque_conversion_factor(from_unit, to_unit); + case temperature : + return get_temperature_conversion_factor(from_unit, to_unit); + case pressure : + return get_pressure_conversion_factor(from_unit, to_unit); + case viscosity : + return get_viscosity_conversion_factor(from_unit, to_unit); + case charge : + return get_charge_conversion_factor(from_unit, to_unit); + case dipole : + return get_dipole_conversion_factor(from_unit, to_unit); + case efield : + return get_efield_conversion_factor(from_unit, to_unit); + case density : + default : // This is here to a prevent a compiler warning + return get_density_conversion_factor(from_unit, to_unit); + } +} + +} // end of anonymous name space + +/* ---------------------------------------------------------------------- */ + +// Wrapper to the routine that gets the unit conversion. Translates strings +// to enumerations and then call get_unit_conversion_factor() +int lammps_unit_conversion(string const &unit_type_str, + string const &from_system_str, + string const &to_system_str, + double &conversion_factor) +{ + // initialize + conversion_factor = 0.0; + initialize_dictionaries(); + + // convert input to enumeration + unit_type unit_type_enum; + { + map::const_iterator itr = unit_dic.find(unit_type_str); + if (itr != unit_dic.end()) unit_type_enum = itr->second; + else return 1; // error + } + sys_type from_system_enum; + { + map::const_iterator + itr = system_dic.find(from_system_str); + if (itr != system_dic.end()) from_system_enum = itr->second; + else return 1; // error + } + sys_type to_system_enum; + { + map::const_iterator + itr = system_dic.find(to_system_str); + if (itr != system_dic.end()) to_system_enum = itr->second; + else return 1; + } + + // process unit conversions + conversion_factor = get_unit_conversion_factor(unit_type_enum, + from_system_enum, + to_system_enum); + return 0; +} + + diff --git a/src/KIM/kim_units.h b/src/KIM/kim_units.h new file mode 100644 index 0000000000..97e81a6222 --- /dev/null +++ b/src/KIM/kim_units.h @@ -0,0 +1,59 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Ellad B. Tadmor (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.0.2 (and newer) package +------------------------------------------------------------------------- */ + +int lammps_unit_conversion(std::string const &unit_type_str, + std::string const &from_system_str, + std::string const &to_system_str, + double &conversion_factor); From f190647ab47cf930a84764b23f4fd6735ac1e1f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Jun 2019 21:23:20 -0400 Subject: [PATCH 281/760] use snprintf() instead of sprintf() to avoid buffer overflows when copying style names --- src/atom.cpp | 8 ++++---- src/domain.cpp | 4 ++-- src/force.cpp | 28 ++++++++++++++-------------- src/input.cpp | 4 ++-- src/update.cpp | 8 ++++---- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index a53f35d7b3..1f5d5a80c4 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -455,8 +455,8 @@ void Atom::create_avec(const char *style, int narg, char **arg, int trysuffix) if (sflag) { char estyle[256]; - if (sflag == 1) sprintf(estyle,"%s/%s",style,lmp->suffix); - else sprintf(estyle,"%s/%s",style,lmp->suffix2); + if (sflag == 1) snprintf(estyle,256,"%s/%s",style,lmp->suffix); + else snprintf(estyle,256,"%s/%s",style,lmp->suffix2); int n = strlen(estyle) + 1; atom_style = new char[n]; strcpy(atom_style,estyle); @@ -487,7 +487,7 @@ AtomVec *Atom::new_avec(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (avec_map->find(estyle) != avec_map->end()) { AtomVecCreator avec_creator = (*avec_map)[estyle]; return avec_creator(lmp); @@ -497,7 +497,7 @@ AtomVec *Atom::new_avec(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (avec_map->find(estyle) != avec_map->end()) { AtomVecCreator avec_creator = (*avec_map)[estyle]; return avec_creator(lmp); diff --git a/src/domain.cpp b/src/domain.cpp index 2e7652a434..74d7560c31 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1734,7 +1734,7 @@ void Domain::add_region(int narg, char **arg) if (lmp->suffix_enable) { if (lmp->suffix) { char estyle[256]; - sprintf(estyle,"%s/%s",arg[1],lmp->suffix); + snprintf(estyle,256,"%s/%s",arg[1],lmp->suffix); if (region_map->find(estyle) != region_map->end()) { RegionCreator region_creator = (*region_map)[estyle]; regions[nregion] = region_creator(lmp, narg, arg); @@ -1746,7 +1746,7 @@ void Domain::add_region(int narg, char **arg) if (lmp->suffix2) { char estyle[256]; - sprintf(estyle,"%s/%s",arg[1],lmp->suffix2); + snprintf(estyle,256,"%s/%s",arg[1],lmp->suffix2); if (region_map->find(estyle) != region_map->end()) { RegionCreator region_creator = (*region_map)[estyle]; regions[nregion] = region_creator(lmp, narg, arg); diff --git a/src/force.cpp b/src/force.cpp index ed27df1215..2648358932 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -238,7 +238,7 @@ Pair *Force::new_pair(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (pair_map->find(estyle) != pair_map->end()) { PairCreator pair_creator = (*pair_map)[estyle]; return pair_creator(lmp); @@ -247,7 +247,7 @@ Pair *Force::new_pair(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (pair_map->find(estyle) != pair_map->end()) { PairCreator pair_creator = (*pair_map)[estyle]; return pair_creator(lmp); @@ -350,7 +350,7 @@ Bond *Force::new_bond(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (bond_map->find(estyle) != bond_map->end()) { BondCreator bond_creator = (*bond_map)[estyle]; return bond_creator(lmp); @@ -360,7 +360,7 @@ Bond *Force::new_bond(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (bond_map->find(estyle) != bond_map->end()) { BondCreator bond_creator = (*bond_map)[estyle]; return bond_creator(lmp); @@ -429,7 +429,7 @@ Angle *Force::new_angle(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (angle_map->find(estyle) != angle_map->end()) { AngleCreator angle_creator = (*angle_map)[estyle]; return angle_creator(lmp); @@ -439,7 +439,7 @@ Angle *Force::new_angle(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (angle_map->find(estyle) != angle_map->end()) { AngleCreator angle_creator = (*angle_map)[estyle]; return angle_creator(lmp); @@ -509,7 +509,7 @@ Dihedral *Force::new_dihedral(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (dihedral_map->find(estyle) != dihedral_map->end()) { DihedralCreator dihedral_creator = (*dihedral_map)[estyle]; return dihedral_creator(lmp); @@ -519,7 +519,7 @@ Dihedral *Force::new_dihedral(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (dihedral_map->find(estyle) != dihedral_map->end()) { DihedralCreator dihedral_creator = (*dihedral_map)[estyle]; return dihedral_creator(lmp); @@ -588,7 +588,7 @@ Improper *Force::new_improper(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (improper_map->find(estyle) != improper_map->end()) { ImproperCreator improper_creator = (*improper_map)[estyle]; return improper_creator(lmp); @@ -598,7 +598,7 @@ Improper *Force::new_improper(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (improper_map->find(estyle) != improper_map->end()) { ImproperCreator improper_creator = (*improper_map)[estyle]; return improper_creator(lmp); @@ -671,7 +671,7 @@ KSpace *Force::new_kspace(const char *style, int trysuffix, int &sflag) if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (kspace_map->find(estyle) != kspace_map->end()) { KSpaceCreator kspace_creator = (*kspace_map)[estyle]; return kspace_creator(lmp); @@ -681,7 +681,7 @@ KSpace *Force::new_kspace(const char *style, int trysuffix, int &sflag) if (lmp->suffix2) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (kspace_map->find(estyle) != kspace_map->end()) { KSpaceCreator kspace_creator = (*kspace_map)[estyle]; return kspace_creator(lmp); @@ -735,8 +735,8 @@ void Force::store_style(char *&str, const char *style, int sflag) { if (sflag) { char estyle[256]; - if (sflag == 1) sprintf(estyle,"%s/%s",style,lmp->suffix); - else sprintf(estyle,"%s/%s",style,lmp->suffix2); + if (sflag == 1) snprintf(estyle,256,"%s/%s",style,lmp->suffix); + else snprintf(estyle,256,"%s/%s",style,lmp->suffix2); int n = strlen(estyle) + 1; str = new char[n]; strcpy(str,estyle); diff --git a/src/input.cpp b/src/input.cpp index 0111cb5738..9e0ad78d9e 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1818,11 +1818,11 @@ void Input::pair_style() if (!match && lmp->suffix_enable) { char estyle[256]; if (lmp->suffix) { - sprintf(estyle,"%s/%s",arg[0],lmp->suffix); + snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix); if (strcmp(estyle,force->pair_style) == 0) match = 1; } if (lmp->suffix2) { - sprintf(estyle,"%s/%s",arg[0],lmp->suffix2); + snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix2); if (strcmp(estyle,force->pair_style) == 0) match = 1; } } diff --git a/src/update.cpp b/src/update.cpp index 6f9c2c9a07..f5e706e354 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -316,8 +316,8 @@ void Update::create_integrate(int narg, char **arg, int trysuffix) if (sflag) { char estyle[256]; - if (sflag == 1) sprintf(estyle,"%s/%s",arg[0],lmp->suffix); - else sprintf(estyle,"%s/%s",arg[0],lmp->suffix2); + if (sflag == 1) snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix); + else snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix2); int n = strlen(estyle) + 1; integrate_style = new char[n]; strcpy(integrate_style,estyle); @@ -339,7 +339,7 @@ void Update::new_integrate(char *style, int narg, char **arg, if (lmp->suffix) { sflag = 1; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix); + snprintf(estyle,256,"%s/%s",style,lmp->suffix); if (integrate_map->find(estyle) != integrate_map->end()) { IntegrateCreator integrate_creator = (*integrate_map)[estyle]; integrate = integrate_creator(lmp, narg, arg); @@ -350,7 +350,7 @@ void Update::new_integrate(char *style, int narg, char **arg, if (lmp->suffix2) { sflag = 2; char estyle[256]; - sprintf(estyle,"%s/%s",style,lmp->suffix2); + snprintf(estyle,256,"%s/%s",style,lmp->suffix2); if (integrate_map->find(estyle) != integrate_map->end()) { IntegrateCreator integrate_creator = (*integrate_map)[estyle]; integrate = integrate_creator(lmp, narg, arg); From dbfd1fd0e739aa9ff263fe5e6d88f73d44d2569d Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Fri, 21 Jun 2019 22:11:58 -0500 Subject: [PATCH 282/760] Added atom-type-num-list mapping to kim_style --- src/KIM/kim_style.cpp | 156 +++++++++++++++++++++++++++++++++++++++--- src/KIM/kim_style.h | 5 +- 2 files changed, 149 insertions(+), 12 deletions(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 44d5c411ab..161bc31643 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -77,6 +77,10 @@ extern "C" { #include "KIM_SimulatorModel.hpp" //@@@@@ +#define SNUM(x) \ + static_cast(std::ostringstream() \ + << std::dec << x).str() + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -257,7 +261,7 @@ void KimStyle::determine_model_type_and_units(char * model_name, if ((! unit_conversion_mode) && (strcmp(*model_units, user_units)!=0)) { std::stringstream mesg; - mesg << "Incompatible units for KIM Simulator Model, required units = " + mesg << "Incompatible units for KIM Simulator Model, required units = " << *model_units; error->all(FLERR,mesg.str().c_str()); } @@ -357,18 +361,18 @@ void KimStyle::do_init(char *model_name, char *user_units, char* model_units) /* ---------------------------------------------------------------------- */ -void KimStyle::kim_style_log_delimiter(std::string begin_end, - std::string model_setup) +void KimStyle::kim_style_log_delimiter(std::string const begin_end, + std::string const model_setup) const { if (comm->me == 0) { std::string mesg; - if ((begin_end == "begin") && (model_setup == "model")) mesg = + if ((begin_end == "begin") && (model_setup == "model")) mesg = "#=== BEGIN kim-style MODEL ==================================\n"; - else if ((begin_end == "begin") && (model_setup == "setup")) mesg = + else if ((begin_end == "begin") && (model_setup == "setup")) mesg = "#=== BEGIN kim-style SETUP ==================================\n"; - else if ((begin_end == "end") && (model_setup == "model")) mesg = + else if ((begin_end == "end") && (model_setup == "model")) mesg = "#=== END kim-style MODEL ====================================\n\n"; - else if ((begin_end == "end") && (model_setup == "setup")) mesg = + else if ((begin_end == "end") && (model_setup == "setup")) mesg = "#=== END kim-style SETUP ====================================\n\n"; if (screen) fputs(mesg.c_str(),screen); @@ -403,12 +407,19 @@ void KimStyle::do_setup(int narg, char **arg) if (simulatorModel) { + std::string delimiter(""); std::string atom_type_sym_list; + std::string atom_type_num_list; for (int i = 0; i < narg; i++) - atom_type_sym_list += std::string(" ") + arg[i]; + { + atom_type_sym_list += delimiter + arg[i]; + atom_type_num_list += delimiter + SNUM(species_to_atomic_no(arg[i])); + delimiter = " "; + } simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); + simulatorModel->AddTemplateMap("atom-type-num-list",atom_type_num_list); simulatorModel->CloseTemplateMap(); int len = strlen(atom_type_sym_list.c_str())+1; @@ -533,10 +544,10 @@ void KimStyle::do_variables(char *user_units, char *model_units) (char *)"dipole", (char *)"efield", (char *)"density"}; - + if (comm->me == 0) { std::stringstream mesg; - mesg << "# Conversion factors from " << from << " to " << to + mesg << "# Conversion factors from " << from << " to " << to << ":" << std::endl; if (screen) fputs(mesg.str().c_str(),screen); if (logfile) fputs(mesg.str().c_str(),logfile); @@ -575,3 +586,128 @@ void KimStyle::do_variables(char *user_units, char *model_units) if (logfile) fputs("#\n",logfile); } } + +/* ---------------------------------------------------------------------- */ + +int KimStyle::species_to_atomic_no(std::string const species) const +{ + if (species == "H") return 1; + else if (species == "He") return 2; + else if (species == "Li") return 3; + else if (species == "Be") return 4; + else if (species == "B") return 5; + else if (species == "C") return 6; + else if (species == "N") return 7; + else if (species == "O") return 8; + else if (species == "F") return 9; + else if (species == "Ne") return 10; + else if (species == "Na") return 11; + else if (species == "Mg") return 12; + else if (species == "Al") return 13; + else if (species == "Si") return 14; + else if (species == "P") return 15; + else if (species == "S") return 16; + else if (species == "Cl") return 17; + else if (species == "Ar") return 18; + else if (species == "K") return 19; + else if (species == "Ca") return 20; + else if (species == "Sc") return 21; + else if (species == "Ti") return 22; + else if (species == "V") return 23; + else if (species == "Cr") return 24; + else if (species == "Mn") return 25; + else if (species == "Fe") return 26; + else if (species == "Co") return 27; + else if (species == "Ni") return 28; + else if (species == "Cu") return 29; + else if (species == "Zn") return 30; + else if (species == "Ga") return 31; + else if (species == "Ge") return 32; + else if (species == "As") return 33; + else if (species == "Se") return 34; + else if (species == "Br") return 35; + else if (species == "Kr") return 36; + else if (species == "Rb") return 37; + else if (species == "Sr") return 38; + else if (species == "Y") return 39; + else if (species == "Zr") return 40; + else if (species == "Nb") return 41; + else if (species == "Mo") return 42; + else if (species == "Tc") return 43; + else if (species == "Ru") return 44; + else if (species == "Rh") return 45; + else if (species == "Pd") return 46; + else if (species == "Ag") return 47; + else if (species == "Cd") return 48; + else if (species == "In") return 49; + else if (species == "Sn") return 50; + else if (species == "Sb") return 51; + else if (species == "Te") return 52; + else if (species == "I") return 53; + else if (species == "Xe") return 54; + else if (species == "Cs") return 55; + else if (species == "Ba") return 56; + else if (species == "La") return 57; + else if (species == "Ce") return 58; + else if (species == "Pr") return 59; + else if (species == "Nd") return 60; + else if (species == "Pm") return 61; + else if (species == "Sm") return 62; + else if (species == "Eu") return 63; + else if (species == "Gd") return 64; + else if (species == "Tb") return 65; + else if (species == "Dy") return 66; + else if (species == "Ho") return 67; + else if (species == "Er") return 68; + else if (species == "Tm") return 69; + else if (species == "Yb") return 70; + else if (species == "Lu") return 71; + else if (species == "Hf") return 72; + else if (species == "Ta") return 73; + else if (species == "W") return 74; + else if (species == "Re") return 75; + else if (species == "Os") return 76; + else if (species == "Ir") return 77; + else if (species == "Pt") return 78; + else if (species == "Au") return 79; + else if (species == "Hg") return 80; + else if (species == "Tl") return 81; + else if (species == "Pb") return 82; + else if (species == "Bi") return 83; + else if (species == "Po") return 84; + else if (species == "At") return 85; + else if (species == "Rn") return 86; + else if (species == "Fr") return 87; + else if (species == "Ra") return 88; + else if (species == "Ac") return 89; + else if (species == "Th") return 90; + else if (species == "Pa") return 91; + else if (species == "U") return 92; + else if (species == "Np") return 93; + else if (species == "Pu") return 94; + else if (species == "Am") return 95; + else if (species == "Cm") return 96; + else if (species == "Bk") return 97; + else if (species == "Cf") return 98; + else if (species == "Es") return 99; + else if (species == "Fm") return 100; + else if (species == "Md") return 101; + else if (species == "No") return 102; + else if (species == "Lr") return 103; + else if (species == "Rf") return 104; + else if (species == "Db") return 105; + else if (species == "Sg") return 106; + else if (species == "Bh") return 107; + else if (species == "Hs") return 108; + else if (species == "Mt") return 109; + else if (species == "Ds") return 110; + else if (species == "Rg") return 111; + else if (species == "Cn") return 112; + else if (species == "Nh") return 113; + else if (species == "Fl") return 114; + else if (species == "Mc") return 115; + else if (species == "Lv") return 116; + else if (species == "Ts") return 117; + else if (species == "Og") return 118; + else return -1; +} diff --git a/src/KIM/kim_style.h b/src/KIM/kim_style.h index b18f6627ea..626f2395bc 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_style.h @@ -80,8 +80,9 @@ class KimStyle : protected Pointers { void do_init(char *, char *, char *); void do_setup(int, char **); void do_variables(char*, char*); - void kim_style_log_delimiter(std::string begin_end, - std::string model_setup); + int species_to_atomic_no(std::string const species) const; + void kim_style_log_delimiter(std::string const begin_end, + std::string const model_setup) const; }; } From 58f9380c45bb92d35565d884b7ee31c6fb2a22b8 Mon Sep 17 00:00:00 2001 From: "Vishnu V. Krishnan" Date: Sat, 22 Jun 2019 19:46:21 +0530 Subject: [PATCH 283/760] Archlinux install documentation Link to #1495 --- doc/src/Install_linux.txt | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/doc/src/Install_linux.txt b/doc/src/Install_linux.txt index ec063e7a95..9aebd30c05 100644 --- a/doc/src/Install_linux.txt +++ b/doc/src/Install_linux.txt @@ -15,7 +15,8 @@ Binaries are available for different versions of Linux: "Pre-built Fedora Linux executables"_#fedora "Pre-built EPEL Linux executables (RHEL, CentOS)"_#epel "Pre-built OpenSuse Linux executables"_#opensuse -"Gentoo Linux executable"_#gentoo :all(b) +"Gentoo Linux executable"_#gentoo +"Arch Linux build-script"_#arch :all(b) :line @@ -168,3 +169,31 @@ for details. Thanks to Nicolas Bock and Christoph Junghans (LANL) for setting up this Gentoo capability. + +:line + +Archlinux build-script :h4,link(arch) + +LAMMPS is available via Arch's unofficial Arch User repository (AUR). + +There are three scripts available, named lammps, lammps-beta and lammps-git. +They respectively package the stable, patch and git releases. + +To install, you will need to have the git package installed. You may use +any of the above names in-place of lammps. + +$ git clone https://aur.archlinux.org/lammps.git :pre +$ cd lammps :pre +$ makepkg -s :pre +# makepkg -i :pre + +To update, you may repeat the above, or change into the cloned directory, +and execute the following, after which, if there are any changes, you may +use makepkg as above. + +$ git pull :pre + +Alternatively, you may use an AUR helper to install these packages. + +Note that the AUR provides build-scripts that download the source and +the build the package on your machine. From f81c9c5322aa0d8e067f240639528b0292f83bb8 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sat, 22 Jun 2019 10:21:05 -0500 Subject: [PATCH 284/760] Changed _u_* output to log to variable commands --- src/KIM/kim_style.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_style.cpp index 161bc31643..a583908fc7 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_style.cpp @@ -576,7 +576,8 @@ void KimStyle::do_variables(char *user_units, char *model_units) variable->internal_set(v_unit,conversion_factor); if (comm->me == 0) { std::stringstream mesg; - mesg << "# " << var_str << " = " << conversion_factor << std::endl; + mesg << "variable " << var_str << " internal " << conversion_factor + << std::endl; if (screen) fputs(mesg.str().c_str(),screen); if (logfile) fputs(mesg.str().c_str(),logfile); } From 4a22e3bf70d03dd292319bdab315f2731da41eab Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 22 Jun 2019 15:21:57 -0500 Subject: [PATCH 285/760] Implement kim_init, kim_interactions & various updates --- src/KIM/README | 27 +- src/KIM/{kim_style.cpp => kim_init.cpp} | 423 +++++------------------- src/KIM/{kim_style.h => kim_init.h} | 35 +- src/KIM/kim_interactions.cpp | 367 ++++++++++++++++++++ src/KIM/kim_interactions.h | 116 +++++++ 5 files changed, 591 insertions(+), 377 deletions(-) rename src/KIM/{kim_style.cpp => kim_init.cpp} (52%) rename src/KIM/{kim_style.h => kim_init.h} (82%) create mode 100644 src/KIM/kim_interactions.cpp create mode 100644 src/KIM/kim_interactions.h diff --git a/src/KIM/README b/src/KIM/README index 4f52d69a67..e61f47426f 100644 --- a/src/KIM/README +++ b/src/KIM/README @@ -1,29 +1,30 @@ -This package provides a pair_style kim command which is a wrapper on -the Knowledge Base for Interatomic Models (KIM) repository of -interatomic potentials, so that they can be used by LAMMPS scripts. +This package provides the kim_init, kim_query, kim_interactions, and +the pair_style kim command which are wrappers on the Knowledgebase of +Interatomic Models (KIM) repository of interatomic potentials, so that +they can be used by LAMMPS scripts. Information about the KIM project can be found at https://openkim.org. -The KIM project is lead by Ellad Tadmor and Ryan Elliott (U Minn) and -James Sethna (Cornell U). Ryan Elliott is the main developer for the -KIM API and he also maintains the code that implements the pair_style -kim command. +The KIM project is lead by Ellad B. Tadmor and Ryan S. Elliott (UMN). +Ryan Elliott is the main developer for the KIM API and he also +maintains the code that implements these commands. -Using this package requires the KIM library and its models +Using this package requires the KIM-API library and its models (interatomic potentials) to be downloaded and installed on your system. The library can be downloaded and built in lib/kim or elsewhere on your system, which must be done before bulding LAMMPS with this package. Details of the download, build, and install -process for KIM are given in the lib/kim/README file, and scripts -are provided to help automate the process. Also see the LAMMPS -manual for general information on building LAMMPS with external +process for the KIM-API are given in the lib/kim/README file, and +scripts are provided to help automate the process. Also see the +LAMMPS manual for general information on building LAMMPS with external libraries. The settings in the Makefile.lammps file in lib/kim must be correct for LAMMPS to build correctly with this package installed. However, the default settings should be correct in most cases and the Makefile.lammps file usually will not need to be changed. Once you have successfully built LAMMPS with this package and the KIM -library you can test it using an input file from the examples dir: +library you can test it using an input files in the examples dir: ./lmp_serial -in lammps/examples/kim/in.kim.lj -This pair_style was written by Ryan S. Elliott (U Minn). +These commands were written by Ryan S. Elliott (UMN), Ellad B. Tadmor +(UMN) and Axel Kohlmeyer (Temple U). diff --git a/src/KIM/kim_style.cpp b/src/KIM/kim_init.cpp similarity index 52% rename from src/KIM/kim_style.cpp rename to src/KIM/kim_init.cpp index a583908fc7..695db0aa0d 100644 --- a/src/KIM/kim_style.cpp +++ b/src/KIM/kim_init.cpp @@ -14,6 +14,7 @@ /* ---------------------------------------------------------------------- Contributing authors: Axel Kohlmeyer (Temple U), Ryan S. Elliott (UMN) + Ellad B. Tadmor (UMN) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -57,7 +58,8 @@ #include #include #include -#include "kim_style.h" +#include +#include "kim_init.h" #include "error.h" #include "atom.h" #include "comm.h" @@ -85,33 +87,26 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -void KimStyle::command(int narg, char **arg) +void KimInit::command(int narg, char **arg) { - if ((narg < 2) || (narg > 4)) error->all(FLERR,"Illegal kim_style command"); + if ((narg < 2) || (narg > 3)) error->all(FLERR,"Illegal kim_init command"); - if (strcmp(arg[0],"model") == 0) { - if (domain->box_exist) - error->all(FLERR,"Must use 'kim_style model' command before " - "simulation box is defined"); - int len1 = strlen(arg[1])+1; - int len2 = strlen(arg[2])+1; - char *model_name = new char[len1]; strcpy(model_name,arg[1]); - char *user_units = new char[len2]; strcpy(user_units,arg[2]); - if (narg == 4) { - if (strcmp(arg[3],"unit_conversion_mode")==0) unit_conversion_mode = true; - else { error->all(FLERR,"Illegal kim_style command"); } - } else unit_conversion_mode = false; + if (domain->box_exist) + error->all(FLERR,"Must use 'kim_init' command before " + "simulation box is defined"); + int len0 = strlen(arg[0])+1; + int len1 = strlen(arg[1])+1; + char *model_name = new char[len0]; strcpy(model_name,arg[0]); + char *user_units = new char[len1]; strcpy(user_units,arg[1]); + if (narg == 3) { + if (strcmp(arg[2],"unit_conversion_mode")==0) unit_conversion_mode = true; + else { error->all(FLERR,"Illegal kim_init command"); } + } else unit_conversion_mode = false; - char *model_units; - determine_model_type_and_units(model_name, user_units, &model_units); + char *model_units; + determine_model_type_and_units(model_name, user_units, &model_units); - do_init(model_name, user_units, model_units); - } else if (strcmp(arg[0],"setup") == 0) { - if (!domain->box_exist) - error->all(FLERR,"Must use 'kim_style setup' command after " - "simulation box is defined"); - do_setup(narg-1,++arg); - } else error->all(FLERR,"Illegal kim_style command"); + do_init(model_name, user_units, model_units); } @@ -163,9 +158,9 @@ void get_kim_unit_names( } } } // namespace -void KimStyle::determine_model_type_and_units(char * model_name, - char * user_units, - char ** model_units) +void KimInit::determine_model_type_and_units(char * model_name, + char * user_units, + char ** model_units) { KIM_LengthUnit lengthUnit; KIM_EnergyUnit energyUnit; @@ -270,7 +265,7 @@ void KimStyle::determine_model_type_and_units(char * model_name, /* ---------------------------------------------------------------------- */ -void KimStyle::do_init(char *model_name, char *user_units, char* model_units) +void KimInit::do_init(char *model_name, char *user_units, char* model_units) { // create storage proxy fix. delete existing fix, if needed. @@ -288,32 +283,42 @@ void KimStyle::do_init(char *model_name, char *user_units, char* model_units) fix_store->setptr("user_units", (void *) user_units); fix_store->setptr("model_units", (void *) model_units); + // Begin output to log file + kim_init_log_delimiter("begin"); + int kimerror; // @@@@@ switch to c-bindings when they are available KIM::SimulatorModel * simulatorModel; - kimerror = KIM::SimulatorModel::Create(model_name,&simulatorModel); + if (model_type == SM) + { + kimerror = KIM::SimulatorModel::Create(model_name,&simulatorModel); - const std::string *sim_name, *sim_version; - simulatorModel->GetSimulatorNameAndVersion(&sim_name, &sim_version); + const std::string *sim_name, *sim_version; + simulatorModel->GetSimulatorNameAndVersion(&sim_name, &sim_version); - if (*sim_name != "LAMMPS") - error->all(FLERR,"Incompatible KIM Simulator Model"); + if (*sim_name != "LAMMPS") + error->all(FLERR,"Incompatible KIM Simulator Model"); - // Begin output to log file - kim_style_log_delimiter("begin","model"); - if (comm->me == 0) { - std::string mesg("# Using KIM Simulator Model : "); - mesg += model_name; - mesg += "\n"; - mesg += "# For Simulator : "; - mesg += *sim_name + " " + *sim_version + "\n"; - mesg += "# Running on : LAMMPS "; - mesg += universe->version; - mesg += "\n"; - mesg += "#\n"; + if (comm->me == 0) { + std::string mesg("# Using KIM Simulator Model : "); + mesg += model_name; + mesg += "\n"; + mesg += "# For Simulator : "; + mesg += *sim_name + " " + *sim_version + "\n"; + mesg += "# Running on : LAMMPS "; + mesg += universe->version; + mesg += "\n"; + mesg += "#\n"; - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } + + fix_store->setptr("simulator_model", (void *) simulatorModel); + + // need to call this to have access to (some) simulator model init data. + + simulatorModel->CloseTemplateMap(); } // Define unit conversion factor variables and print to log @@ -325,192 +330,55 @@ void KimStyle::do_init(char *model_name, char *user_units, char* model_units) cmd += model_units; input->one(cmd.c_str()); - // not a Kim Simulator Model; nothing else to do here. - - if (kimerror) return; - - fix_store->setptr("simulator_model", (void *) simulatorModel); - - // need to call this to have access to (some) simulator model init data. - - simulatorModel->CloseTemplateMap(); - - int sim_fields, sim_lines; - const std::string *sim_field, *sim_value; - simulatorModel->GetNumberOfSimulatorFields(&sim_fields); - - // init model - - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "model-init") { - for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); - input->one(sim_value->c_str()); - } - break; - } - } - - // End output to log file - kim_style_log_delimiter("end","model"); - - // reset template map. - simulatorModel->OpenAndInitializeTemplateMap(); -} - -/* ---------------------------------------------------------------------- */ - -void KimStyle::kim_style_log_delimiter(std::string const begin_end, - std::string const model_setup) const -{ - if (comm->me == 0) { - std::string mesg; - if ((begin_end == "begin") && (model_setup == "model")) mesg = - "#=== BEGIN kim-style MODEL ==================================\n"; - else if ((begin_end == "begin") && (model_setup == "setup")) mesg = - "#=== BEGIN kim-style SETUP ==================================\n"; - else if ((begin_end == "end") && (model_setup == "model")) mesg = - "#=== END kim-style MODEL ====================================\n\n"; - else if ((begin_end == "end") && (model_setup == "setup")) mesg = - "#=== END kim-style SETUP ====================================\n\n"; - - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); - } -} - -/* ---------------------------------------------------------------------- */ - -void KimStyle::do_setup(int narg, char **arg) -{ - if (narg != atom->ntypes) - error->all(FLERR,"Illegal kim_style command"); - - char *model = NULL; - KIM::SimulatorModel *simulatorModel(NULL); - - // check if we had a kim_style init command by finding fix STORE/KIM - // retrieve model name and pointer to simulator model class instance. - // validate model name if not given as NULL. - // if kim_style init wasn't run try to initialize simulator model now. - - int ifix = modify->find_fix("KIM_MODEL_STORE"); - if (ifix >= 0) { - FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; - model = (char *)fix_store->getptr("model_name"); - simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); - } else error->all(FLERR,"Must use 'kim_style model' before 'kim_style setup'"); - - // Begin output to log file - kim_style_log_delimiter("begin","setup"); - - if (simulatorModel) { - - std::string delimiter(""); - std::string atom_type_sym_list; - std::string atom_type_num_list; - - for (int i = 0; i < narg; i++) - { - atom_type_sym_list += delimiter + arg[i]; - atom_type_num_list += delimiter + SNUM(species_to_atomic_no(arg[i])); - delimiter = " "; - } - - simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); - simulatorModel->AddTemplateMap("atom-type-num-list",atom_type_num_list); - simulatorModel->CloseTemplateMap(); - - int len = strlen(atom_type_sym_list.c_str())+1; - char *strbuf = new char[len]; - char *strword; - - // validate species selection - - int sim_num_species; - bool species_is_supported; - const std::string *sim_species; - simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); - strcpy(strbuf,atom_type_sym_list.c_str()); - strword = strtok(strbuf," \t"); - while (strword) { - species_is_supported = false; - if (strcmp(strword,"NULL") == 0) continue; - for (int i=0; i < sim_num_species; ++i) { - simulatorModel->GetSupportedSpecies(i, &sim_species); - if (strcmp(sim_species->c_str(),strword) == 0) - species_is_supported = true; - } - if (!species_is_supported) { - std::string msg("Species '"); - msg += strword; - msg += "' is not supported by this KIM Simulator Model"; - error->all(FLERR,msg.c_str()); - } - strword = strtok(NULL," \t"); - } - delete[] strbuf; - - // check if units are unchanged, and if kim_style init was required - + if (model_type == SM) + { int sim_fields, sim_lines; const std::string *sim_field, *sim_value; simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + + // init model + for (int i=0; i < sim_fields; ++i) { simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - - if (*sim_field == "units") { - simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); - if (*sim_value != update->unit_style) - error->all(FLERR,"Incompatible units for KIM Simulator Model"); - } - } - - int sim_model_idx=-1; - for (int i=0; i < sim_fields; ++i) { - simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); - if (*sim_field == "model-defn") { - sim_model_idx = i; + if (*sim_field == "model-init") { for (int j=0; j < sim_lines; ++j) { - simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); + simulatorModel->GetSimulatorFieldLine(i,j,&sim_value); input->one(sim_value->c_str()); } + break; } } - if (sim_model_idx < 0) - error->all(FLERR,"KIM Simulator Model has no Model definition"); - + // reset template map. simulatorModel->OpenAndInitializeTemplateMap(); - - } else { - - // not a simulator model. issue pair_style and pair_coeff commands. - // NOTE: all references to arg must appear before calls to input->one() - // as that will reset the argument vector. - - std::string cmd1("pair_style kim "); - cmd1 += model; - - std::string cmd2("pair_coeff * * "); - for (int i=0; i < narg; ++i) { - cmd2 += arg[i]; - cmd2 += " "; - } - - input->one(cmd1.c_str()); - input->one(cmd2.c_str()); } // End output to log file - kim_style_log_delimiter("end","setup"); + kim_init_log_delimiter("end"); } /* ---------------------------------------------------------------------- */ -void KimStyle::do_variables(char *user_units, char *model_units) +void KimInit::kim_init_log_delimiter(std::string const begin_end) const +{ + if (comm->me == 0) { + std::string mesg; + if (begin_end == "begin") + mesg = + "#=== BEGIN kim-init ==========================================\n"; + else if (begin_end == "end") + mesg = + "#=== END kim-init ============================================\n\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } +} + +/* ---------------------------------------------------------------------- */ + +void KimInit::do_variables(char *user_units, char *model_units) { char *from = user_units, *to = model_units; Variable *variable = input->variable; @@ -576,7 +444,9 @@ void KimStyle::do_variables(char *user_units, char *model_units) variable->internal_set(v_unit,conversion_factor); if (comm->me == 0) { std::stringstream mesg; - mesg << "variable " << var_str << " internal " << conversion_factor + mesg << "variable " << std::setw(15) << std::left << var_str + << " internal " + << std::setprecision(12) << std::scientific << conversion_factor << std::endl; if (screen) fputs(mesg.str().c_str(),screen); if (logfile) fputs(mesg.str().c_str(),logfile); @@ -587,128 +457,3 @@ void KimStyle::do_variables(char *user_units, char *model_units) if (logfile) fputs("#\n",logfile); } } - -/* ---------------------------------------------------------------------- */ - -int KimStyle::species_to_atomic_no(std::string const species) const -{ - if (species == "H") return 1; - else if (species == "He") return 2; - else if (species == "Li") return 3; - else if (species == "Be") return 4; - else if (species == "B") return 5; - else if (species == "C") return 6; - else if (species == "N") return 7; - else if (species == "O") return 8; - else if (species == "F") return 9; - else if (species == "Ne") return 10; - else if (species == "Na") return 11; - else if (species == "Mg") return 12; - else if (species == "Al") return 13; - else if (species == "Si") return 14; - else if (species == "P") return 15; - else if (species == "S") return 16; - else if (species == "Cl") return 17; - else if (species == "Ar") return 18; - else if (species == "K") return 19; - else if (species == "Ca") return 20; - else if (species == "Sc") return 21; - else if (species == "Ti") return 22; - else if (species == "V") return 23; - else if (species == "Cr") return 24; - else if (species == "Mn") return 25; - else if (species == "Fe") return 26; - else if (species == "Co") return 27; - else if (species == "Ni") return 28; - else if (species == "Cu") return 29; - else if (species == "Zn") return 30; - else if (species == "Ga") return 31; - else if (species == "Ge") return 32; - else if (species == "As") return 33; - else if (species == "Se") return 34; - else if (species == "Br") return 35; - else if (species == "Kr") return 36; - else if (species == "Rb") return 37; - else if (species == "Sr") return 38; - else if (species == "Y") return 39; - else if (species == "Zr") return 40; - else if (species == "Nb") return 41; - else if (species == "Mo") return 42; - else if (species == "Tc") return 43; - else if (species == "Ru") return 44; - else if (species == "Rh") return 45; - else if (species == "Pd") return 46; - else if (species == "Ag") return 47; - else if (species == "Cd") return 48; - else if (species == "In") return 49; - else if (species == "Sn") return 50; - else if (species == "Sb") return 51; - else if (species == "Te") return 52; - else if (species == "I") return 53; - else if (species == "Xe") return 54; - else if (species == "Cs") return 55; - else if (species == "Ba") return 56; - else if (species == "La") return 57; - else if (species == "Ce") return 58; - else if (species == "Pr") return 59; - else if (species == "Nd") return 60; - else if (species == "Pm") return 61; - else if (species == "Sm") return 62; - else if (species == "Eu") return 63; - else if (species == "Gd") return 64; - else if (species == "Tb") return 65; - else if (species == "Dy") return 66; - else if (species == "Ho") return 67; - else if (species == "Er") return 68; - else if (species == "Tm") return 69; - else if (species == "Yb") return 70; - else if (species == "Lu") return 71; - else if (species == "Hf") return 72; - else if (species == "Ta") return 73; - else if (species == "W") return 74; - else if (species == "Re") return 75; - else if (species == "Os") return 76; - else if (species == "Ir") return 77; - else if (species == "Pt") return 78; - else if (species == "Au") return 79; - else if (species == "Hg") return 80; - else if (species == "Tl") return 81; - else if (species == "Pb") return 82; - else if (species == "Bi") return 83; - else if (species == "Po") return 84; - else if (species == "At") return 85; - else if (species == "Rn") return 86; - else if (species == "Fr") return 87; - else if (species == "Ra") return 88; - else if (species == "Ac") return 89; - else if (species == "Th") return 90; - else if (species == "Pa") return 91; - else if (species == "U") return 92; - else if (species == "Np") return 93; - else if (species == "Pu") return 94; - else if (species == "Am") return 95; - else if (species == "Cm") return 96; - else if (species == "Bk") return 97; - else if (species == "Cf") return 98; - else if (species == "Es") return 99; - else if (species == "Fm") return 100; - else if (species == "Md") return 101; - else if (species == "No") return 102; - else if (species == "Lr") return 103; - else if (species == "Rf") return 104; - else if (species == "Db") return 105; - else if (species == "Sg") return 106; - else if (species == "Bh") return 107; - else if (species == "Hs") return 108; - else if (species == "Mt") return 109; - else if (species == "Ds") return 110; - else if (species == "Rg") return 111; - else if (species == "Cn") return 112; - else if (species == "Nh") return 113; - else if (species == "Fl") return 114; - else if (species == "Mc") return 115; - else if (species == "Lv") return 116; - else if (species == "Ts") return 117; - else if (species == "Og") return 118; - else return -1; -} diff --git a/src/KIM/kim_style.h b/src/KIM/kim_init.h similarity index 82% rename from src/KIM/kim_style.h rename to src/KIM/kim_init.h index 626f2395bc..c22e2be720 100644 --- a/src/KIM/kim_style.h +++ b/src/KIM/kim_init.h @@ -14,6 +14,7 @@ /* ---------------------------------------------------------------------- Contributing authors: Axel Kohlmeyer (Temple U), Ryan S. Elliott (UMN) + Ellad B. Tadmor (UMN) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -56,20 +57,20 @@ #ifdef COMMAND_CLASS -CommandStyle(kim_style,KimStyle) +CommandStyle(kim_init,KimInit) #else -#ifndef LMP_KIM_STYLE_H -#define LMP_KIM_STYLE_H +#ifndef LMP_KIM_INIT_H +#define LMP_KIM_INIT_H #include "pointers.h" namespace LAMMPS_NS { -class KimStyle : protected Pointers { +class KimInit : protected Pointers { public: - KimStyle(class LAMMPS *lmp) : Pointers(lmp) {}; + KimInit(class LAMMPS *lmp) : Pointers(lmp) {}; void command(int, char **); private: enum model_type_enum {MO, SM}; @@ -78,11 +79,8 @@ class KimStyle : protected Pointers { void determine_model_type_and_units(char *, char *, char **); void do_init(char *, char *, char *); - void do_setup(int, char **); void do_variables(char*, char*); - int species_to_atomic_no(std::string const species) const; - void kim_style_log_delimiter(std::string const begin_end, - std::string const model_setup) const; + void kim_init_log_delimiter(std::string const begin_end) const; }; } @@ -92,19 +90,11 @@ class KimStyle : protected Pointers { /* ERROR/WARNING messages: -E: Illegal kim_style command +E: Illegal kim_init command -Incorrect number or kind of arguments to kim_style. +Incorrect number or kind of arguments to kim_init. -E: Must use 'kim_style model' command before simulation box is defined - -Self-explanatory. - -E: Must use 'kim_style setup' command after simulation box is defined - -Self-explanatory. - -E: Must use 'kim_style model' command before 'kim_style setup' +E: Must use 'kim_init' command before simulation box is defined Self-explanatory. @@ -125,11 +115,6 @@ E: Incompatible KIM Simulator Model The requested KIM Simulator Model was defined for a different MD code and thus is not compatible with LAMMPS. -E: Species XXX is not supported by this KIM Simulator Model - -The kim_style define command was referencing a species that is not -present in the requested KIM Simulator Model. - E: Incompatible units for KIM Simulator Model The selected unit style is not compatible with the requested KIM diff --git a/src/KIM/kim_interactions.cpp b/src/KIM/kim_interactions.cpp new file mode 100644 index 0000000000..491d406ae6 --- /dev/null +++ b/src/KIM/kim_interactions.cpp @@ -0,0 +1,367 @@ +/* ---------------------------------------------------------------------- + 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: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) + Ellad B. Tadmor (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.1.0 (and newer) package +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "kim_interactions.h" +#include "error.h" +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "modify.h" +#include "update.h" +#include "universe.h" +#include "input.h" +#include "variable.h" +#include "fix_store_kim.h" + +extern "C" { +#include "KIM_SimulatorHeaders.h" +} +//@@@@@ Need to switch to c-bindings when they are available. +#include "KIM_SimulatorModel.hpp" +//@@@@@ + +#define SNUM(x) \ + static_cast(std::ostringstream() \ + << std::dec << x).str() + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +void KimInteractions::command(int narg, char **arg) +{ + if (narg < 1) error->all(FLERR,"Illegal kim_interactions command"); + + if (!domain->box_exist) + error->all(FLERR,"Must use 'kim_interactions' command after " + "simulation box is defined"); + do_setup(narg,arg); +} + +/* ---------------------------------------------------------------------- */ + +void KimInteractions::kim_interactions_log_delimiter( + std::string const begin_end) const +{ + if (comm->me == 0) { + std::string mesg; + if (begin_end == "begin") + mesg = + "#=== BEGIN kim_interactions ==================================\n"; + else if (begin_end == "end") + mesg = + "#=== END kim_interactions ====================================\n\n"; + + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); + } +} + +/* ---------------------------------------------------------------------- */ + +void KimInteractions::do_setup(int narg, char **arg) +{ + if (narg != atom->ntypes) + error->all(FLERR,"Illegal kim_interactions command"); + + char *model_name = NULL; + KIM::SimulatorModel *simulatorModel(NULL); + + // check if we had a kim_init command by finding fix STORE/KIM + // retrieve model name and pointer to simulator model class instance. + // validate model name if not given as NULL. + + int ifix = modify->find_fix("KIM_MODEL_STORE"); + if (ifix >= 0) { + FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; + model_name = (char *)fix_store->getptr("model_name"); + simulatorModel = (KIM::SimulatorModel *)fix_store->getptr("simulator_model"); + } else error->all(FLERR,"Must use 'kim_init' before 'kim_interactions'"); + + // Begin output to log file + kim_interactions_log_delimiter("begin"); + + if (simulatorModel) { + + std::string delimiter(""); + std::string atom_type_sym_list; + std::string atom_type_num_list; + + for (int i = 0; i < narg; i++) + { + atom_type_sym_list += delimiter + arg[i]; + atom_type_num_list += delimiter + SNUM(species_to_atomic_no(arg[i])); + delimiter = " "; + } + + simulatorModel->AddTemplateMap("atom-type-sym-list",atom_type_sym_list); + simulatorModel->AddTemplateMap("atom-type-num-list",atom_type_num_list); + simulatorModel->CloseTemplateMap(); + + int len = strlen(atom_type_sym_list.c_str())+1; + char *strbuf = new char[len]; + char *strword; + + // validate species selection + + int sim_num_species; + bool species_is_supported; + const std::string *sim_species; + simulatorModel->GetNumberOfSupportedSpecies(&sim_num_species); + strcpy(strbuf,atom_type_sym_list.c_str()); + strword = strtok(strbuf," \t"); + while (strword) { + species_is_supported = false; + if (strcmp(strword,"NULL") == 0) continue; + for (int i=0; i < sim_num_species; ++i) { + simulatorModel->GetSupportedSpecies(i, &sim_species); + if (strcmp(sim_species->c_str(),strword) == 0) + species_is_supported = true; + } + if (!species_is_supported) { + std::string msg("Species '"); + msg += strword; + msg += "' is not supported by this KIM Simulator Model"; + error->all(FLERR,msg.c_str()); + } + strword = strtok(NULL," \t"); + } + delete[] strbuf; + + // check if units are unchanged + + int sim_fields, sim_lines; + const std::string *sim_field, *sim_value; + simulatorModel->GetNumberOfSimulatorFields(&sim_fields); + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + + if (*sim_field == "units") { + simulatorModel->GetSimulatorFieldLine(i,0,&sim_value); + if (*sim_value != update->unit_style) + error->all(FLERR,"Incompatible units for KIM Simulator Model"); + } + } + + int sim_model_idx=-1; + for (int i=0; i < sim_fields; ++i) { + simulatorModel->GetSimulatorFieldMetadata(i,&sim_lines,&sim_field); + if (*sim_field == "model-defn") { + sim_model_idx = i; + for (int j=0; j < sim_lines; ++j) { + simulatorModel->GetSimulatorFieldLine(sim_model_idx,j,&sim_value); + input->one(sim_value->c_str()); + } + } + } + + if (sim_model_idx < 0) + error->all(FLERR,"KIM Simulator Model has no Model definition"); + + simulatorModel->OpenAndInitializeTemplateMap(); + + } else { + + // not a simulator model. issue pair_style and pair_coeff commands. + // NOTE: all references to arg must appear before calls to input->one() + // as that will reset the argument vector. + + std::string cmd1("pair_style kim "); + cmd1 += model_name; + + std::string cmd2("pair_coeff * * "); + for (int i=0; i < narg; ++i) { + cmd2 += arg[i]; + cmd2 += " "; + } + + input->one(cmd1.c_str()); + input->one(cmd2.c_str()); + } + + // End output to log file + kim_interactions_log_delimiter("end"); + +} + +/* ---------------------------------------------------------------------- */ + +int KimInteractions::species_to_atomic_no(std::string const species) const +{ + if (species == "H") return 1; + else if (species == "He") return 2; + else if (species == "Li") return 3; + else if (species == "Be") return 4; + else if (species == "B") return 5; + else if (species == "C") return 6; + else if (species == "N") return 7; + else if (species == "O") return 8; + else if (species == "F") return 9; + else if (species == "Ne") return 10; + else if (species == "Na") return 11; + else if (species == "Mg") return 12; + else if (species == "Al") return 13; + else if (species == "Si") return 14; + else if (species == "P") return 15; + else if (species == "S") return 16; + else if (species == "Cl") return 17; + else if (species == "Ar") return 18; + else if (species == "K") return 19; + else if (species == "Ca") return 20; + else if (species == "Sc") return 21; + else if (species == "Ti") return 22; + else if (species == "V") return 23; + else if (species == "Cr") return 24; + else if (species == "Mn") return 25; + else if (species == "Fe") return 26; + else if (species == "Co") return 27; + else if (species == "Ni") return 28; + else if (species == "Cu") return 29; + else if (species == "Zn") return 30; + else if (species == "Ga") return 31; + else if (species == "Ge") return 32; + else if (species == "As") return 33; + else if (species == "Se") return 34; + else if (species == "Br") return 35; + else if (species == "Kr") return 36; + else if (species == "Rb") return 37; + else if (species == "Sr") return 38; + else if (species == "Y") return 39; + else if (species == "Zr") return 40; + else if (species == "Nb") return 41; + else if (species == "Mo") return 42; + else if (species == "Tc") return 43; + else if (species == "Ru") return 44; + else if (species == "Rh") return 45; + else if (species == "Pd") return 46; + else if (species == "Ag") return 47; + else if (species == "Cd") return 48; + else if (species == "In") return 49; + else if (species == "Sn") return 50; + else if (species == "Sb") return 51; + else if (species == "Te") return 52; + else if (species == "I") return 53; + else if (species == "Xe") return 54; + else if (species == "Cs") return 55; + else if (species == "Ba") return 56; + else if (species == "La") return 57; + else if (species == "Ce") return 58; + else if (species == "Pr") return 59; + else if (species == "Nd") return 60; + else if (species == "Pm") return 61; + else if (species == "Sm") return 62; + else if (species == "Eu") return 63; + else if (species == "Gd") return 64; + else if (species == "Tb") return 65; + else if (species == "Dy") return 66; + else if (species == "Ho") return 67; + else if (species == "Er") return 68; + else if (species == "Tm") return 69; + else if (species == "Yb") return 70; + else if (species == "Lu") return 71; + else if (species == "Hf") return 72; + else if (species == "Ta") return 73; + else if (species == "W") return 74; + else if (species == "Re") return 75; + else if (species == "Os") return 76; + else if (species == "Ir") return 77; + else if (species == "Pt") return 78; + else if (species == "Au") return 79; + else if (species == "Hg") return 80; + else if (species == "Tl") return 81; + else if (species == "Pb") return 82; + else if (species == "Bi") return 83; + else if (species == "Po") return 84; + else if (species == "At") return 85; + else if (species == "Rn") return 86; + else if (species == "Fr") return 87; + else if (species == "Ra") return 88; + else if (species == "Ac") return 89; + else if (species == "Th") return 90; + else if (species == "Pa") return 91; + else if (species == "U") return 92; + else if (species == "Np") return 93; + else if (species == "Pu") return 94; + else if (species == "Am") return 95; + else if (species == "Cm") return 96; + else if (species == "Bk") return 97; + else if (species == "Cf") return 98; + else if (species == "Es") return 99; + else if (species == "Fm") return 100; + else if (species == "Md") return 101; + else if (species == "No") return 102; + else if (species == "Lr") return 103; + else if (species == "Rf") return 104; + else if (species == "Db") return 105; + else if (species == "Sg") return 106; + else if (species == "Bh") return 107; + else if (species == "Hs") return 108; + else if (species == "Mt") return 109; + else if (species == "Ds") return 110; + else if (species == "Rg") return 111; + else if (species == "Cn") return 112; + else if (species == "Nh") return 113; + else if (species == "Fl") return 114; + else if (species == "Mc") return 115; + else if (species == "Lv") return 116; + else if (species == "Ts") return 117; + else if (species == "Og") return 118; + else return -1; +} diff --git a/src/KIM/kim_interactions.h b/src/KIM/kim_interactions.h new file mode 100644 index 0000000000..6da1880f84 --- /dev/null +++ b/src/KIM/kim_interactions.h @@ -0,0 +1,116 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Axel Kohlmeyer (Temple U), + Ryan S. Elliott (UMN) + Ellad B. Tadmor (UMN) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Designed for use with the kim-api-2.1.0 (and newer) package +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(kim_interactions,KimInteractions) + +#else + +#ifndef LMP_KIM_INTERACTIONS_H +#define LMP_KIM_INTERACTIONS_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class KimInteractions : protected Pointers { + public: + KimInteractions(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); + private: + void do_setup(int, char **); + int species_to_atomic_no(std::string const species) const; + void kim_interactions_log_delimiter(std::string const begin_end) const; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal kim_interactions command + +Incorrect number or kind of arguments to kim_interactions. + +E: Must use 'kim_interactions' command after simulation box is defined + +Self-explanatory. + +E: Must use 'kim_init' command before 'kim_interactions' + +Self-explanatory. + +E: Species XXX is not supported by this KIM Simulator Model + +The kim_interactions command was referencing a species that is not +present in the requested KIM Simulator Model. + +E: Incompatible units for KIM Simulator Model + +The selected unit style is not compatible with the requested KIM +Simulator Model. + +E: KIM Simulator Model has no Model definition + +There is no model definition (key: model-defn) in the KIM Simulator +Model. Please contact the OpenKIM database maintainers to verify +and potentially correct this. + +*/ From 17fa2f787b58cb4c17bc6aa04b1015a9b2778a93 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sat, 22 Jun 2019 15:25:21 -0500 Subject: [PATCH 286/760] Added kim_command documentation structure --- doc/src/Commands_all.txt | 5 +- doc/src/commands_list.txt | 3 +- doc/src/kim_commands.txt | 108 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 doc/src/kim_commands.txt diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index d76ffac14c..a201fd3f2d 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -68,8 +68,9 @@ An alphabetic list of all general LAMMPS commands. "improper_style"_improper_style.html, "include"_include.html, "jump"_jump.html, -"kim_query"_kim_query.html, -"kim_style"_kim_style.html, +"kim_init"_kim_commands.html, +"kim_interactions"_kim_commands.html, +"kim_query"_kim_commands.html, "kspace_modify"_kspace_modify.html, "kspace_style"_kspace_style.html, "label"_label.html, diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 39d2f7c7d0..a5c9b568ed 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -53,8 +53,7 @@ Commands :h1 include info jump - kim_query - kim_style + kim_commands kspace_modify kspace_style label diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt new file mode 100644 index 0000000000..4c53746317 --- /dev/null +++ b/doc/src/kim_commands.txt @@ -0,0 +1,108 @@ +"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 + +kim_commands :h3 + +[Syntax:] + +kim_init model user_units :pre +kim_interactions typeargs :pre + +mode = {init model} or {define typeargs} or no mode chosen +model = name of the KIM model (KIM potential or KIM simulator model) +typeargs = atom type to species mapping (one entry per atom type) +args = {unit_variables unit_style} or {unit_from unit_style} (optional):ul + +[Examples:] + +kim_style init ex_sim_model_Si_mod_tersoff unit_variables metal +kim_style define Si Si +kim_style unit_variables real +kim_style init LennardJones_Ar unit_variables metal +kim_style unit_variables real unit_from metal +kim_style define Ar :pre + +[Description:] + +The kim_style command is a high-level wrapper around the +"Knowledge Base for Interatomic Models (OpenKIM)"_https://openkim.org +repository of interatomic potentials, so that they can be used by +LAMMPS scripts. It does not implement any computations directly, but +rather will generate LAMMPS input commands based on the information +retrieved from the OpenKIM repository. It is able to realize so-called +"KIM Simulator Models", which are OpenKIM repository entries of models +using native features of the simulation engine in use, i.e. LAMMPS +in this case, but it also supports realizing conventional KIM models +implicitly via generating a "pair_style kim"_pair_kim.html command +followed by a suitable "pair_coeff"_pair_coeff.html command. + +The kim_style command has two modes, {init} and {define}, indicated by +the first argument to the kim_style command. An {init} mode command +must be issued [before] the simulation box is created, while the {define} +mode version may only be used [after] the simulation box exists. Both +are required. The {init} mode version sets the model name and may issue +additional commands changing LAMMPS default settings that are required +for using a selected simulator model. If needed, those settings can be +overridden. The second argument to the {kim_style init} command is the +KIM model ID. + +In both modes, the keywords {unit_variables} and {unit_from} may be +added. They control the values of a set of +"internal style variables"_variable.html that can be used to convert +between different unit styles in LAMMPS. The argument to +each keyword is a LAMMPS unit style or NULL, which means to look up +the unit style from what was set with the "units"_units.html command. +Please note, that KIM simulator models will set their preferred unit style. +By default all conversion variables are set to 1.0. Converting to or +from the "lj" unit style is not supported. The following variables are defined: + +_u_length +_u_mass +_u_time :ul + + +The {kim_style define} command will issue commands that will realize +the selected model (through generating pair_style and pair_coeff commands, +but also other commands, as required). It has to be issued [after] the +the simulation box is defined. The {kim_style define} command allows a +varying number of additional arguments. Those are used to map the atom +types in LAMMPS to the available species in the KIM model. This is +equivalent to the arguments following "pair_coeff * *" in a +"kim"_pair_kim.html pair style. Thus the commands: + +kim_style init LennardJones_Ar +kim_style define Ar :pre + +will generate the LAMMPS input commands: + +pair_style kim LennardJones_Ar +pair_coeff * * Ar :pre + +For simulator models, the generated input commands may be more complex +and require that LAMMPS is built with the required packages included. +The commands generated by the kim_style command, can be copied to the +screen or log file, through the "echo"_echo.html command. +The kim_style command will also validate, that a selected simulator +model was generated for the LAMMPS MD code and not some other software. +In addition, the version strings for LAMMPS version used for defining +the simulator model and the LAMMPS version being currently run are +printed, so that it can be tracked down, if there are any incompatible +changes to input script or command syntax between the two LAMMPS versions. + +[Restrictions:] + +This command is part of the KIM package. It is only enabled if +LAMMPS was built with that package. Furthermore, its correct +functioning depends on compiling LAMMPS with all required packages +installed that are required by the commands embedded in any KIM +simulator models used. +See the "Build package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_style kim"_pair_kim.html, "kim_query"_kim_query.html From 33be7f259be9446edf9f75e17309d8bfe7f05e84 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sat, 22 Jun 2019 21:49:29 -0500 Subject: [PATCH 287/760] Working on kim_commands documentation --- doc/src/kim_commands.txt | 232 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 221 insertions(+), 11 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 4c53746317..06ad841240 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -10,25 +10,235 @@ kim_commands :h3 [Syntax:] -kim_init model user_units :pre -kim_interactions typeargs :pre +kim_init model user_units unitarg +kim_interactions typeargs +kim_query variable query_function web_query_flags :pre -mode = {init model} or {define typeargs} or no mode chosen -model = name of the KIM model (KIM potential or KIM simulator model) +model = designation of the KIM interatomic model (the KIM ID for models archived in OpenKIM) +user_units = the LAMMPS "units"_units.html style assumed in the user input script +unitarg = {unit_conversion_mode} (optional) typeargs = atom type to species mapping (one entry per atom type) -args = {unit_variables unit_style} or {unit_from unit_style} (optional):ul +variable = name of a (string style) variable where the result of the query is stored +query_function = name of the OpenKIM web API query function to be used +web_query_flags = a series of keyword=value pairs that represent the web query; supported keywords depend on query function :ul + [Examples:] -kim_style init ex_sim_model_Si_mod_tersoff unit_variables metal -kim_style define Si Si -kim_style unit_variables real -kim_style init LennardJones_Ar unit_variables metal -kim_style unit_variables real unit_from metal -kim_style define Ar :pre +kim_init SW_StillingerWeber_1985_Si__MO_405512056662_005 metal +kim_interactions Si +kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real +kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 metal unit_conversion_mode +kim_interactions C H O +kim_query NEED EXAMPLES :pre [Description:] +The "Open Knowledgebase for Interatomic Models (OpenKIM)"_https://openkim.org +archives interatomic models (IMs) (potentials and force fields) in a format +that can be directly used with LAMMPS using the commands documented on this +page. + +Benefits of Using OpenKIM IMs :h4 + +Employing OpenKIM IMs provides LAMMPS users with multiple benefits: + +Reliability :h5 + +All content archived in OpenKIM is subject to quality control by the "KIM Editor"_https://openkim.org/governance/. +IMs in OpenKIM are archived with full provenance control. Each is associated with a maintainer responsible for the integrity of the content. All changes are tracked and recorded. +IMs in OpenKIM are exhaustively tested using "KIM Tests"_https://openkim.org/getting-started/kim-tests/ that compute a host of material properties, and "KIM Verification Checks"_https://openkim.org/about-verification-checks/ that provide the user with information on various aspects of the IM behavior and coding correctness. This information is displayed on the IM's page on "OpenKIM"_https://openkim.org. :ul + +Reproducibility :h5 + +Each IM in OpenKIM is issued a unique identifier ("KIM ID"_https://openkim.org/about-kim-ids/), which includes a version number (last three digits). Any changes that can result in different numerical values lead to a version increment in the KIM ID. This makes it possible to reproduce simulations since the specific version of a specific IM used can be retrieved using its KIM ID. +OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues digitial object identifiers (DOIs) to all IMs archived in OpenKIM. This makes it possible to cite the IM code used in a simulation in a publications to give credit to the developers and further facilitate reproducibility. :ul + +Convenience :h5 + +IMs in OpenKIM are distributed in binary form along with LAMMPS and can be used in a LAMMPS input script simply by providing their KIM ID in the {kim_init} command documented on this page. (For more on using KIM with LAMMPS, see the KIM section of the "Packages details"_Packages_details.html doc page.) +The {kim_query} web query tool provides the ability to use the predictions of IMs for supported material properties (computed via "KIM Tests"https://openkim.org/getting-started/kim-tests/) as part of a LAMMPS input script setup and analysis. +Support is provided for unit conversion between the "units"_units.html system used in the LAMMPS input script and the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the liklihood of errors due to incompatible units. :ul + +Types of KIM IMs :h4 + +There are two types of IMs archived in OpenKIM: + +The first type is called a {KIM Model}. A KIM Model is an independent computer implemention of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). +The second type is called a {KIM Simulator Model} (SM). In this case, the IM is implemented natively within the simulation code ({simulator}), i.e. LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol + +With these two IM tpes, OpenKIM can archive and test almost all IMs that +can be used by LAMMPS. (It is easy to contribute new IMs to OpenKIM, see +the "upload instructions"_https://openkim.org/getting-started/adding-content/.) + +OpenKIM IMs are uniquely identified by a +"KIM ID"_https://openkim.org/about-kim-ids/. The extended KIM ID consists of +a human-readable prefix identifying the type of IM, authors, publication year, +and supported species, separated by two underscores from the KIM ID itself, +which begins with an IM code +({MO} for a KIM Model, and {SM} for a KIM Simulator Model) +followed by a unique 12-digit code and a 3-digit version identifier. +By convension SM prefixes begin with {SM} to readily identify them. + +SW_StillingerWeber_1985_Si__MO_405512056662_005 +Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 :pre + +NOTE: It is also possible to locally install IMs not archived in OpenKIM, +in which case their designation does not have to conform to the KIM ID format. + +Using OpenKIM IMs with LAMMPS :h4 + +Two commands are employed when using OpenKIM IMs, one to select the +IM and perform necessary initializations ({kim_init}), and the second +to set up the IM for use by executing any necessary LAMMPS commands +({kim_interactions}). + +OpenKIM IM Initialization :h5 + +The kim_init command must be located at the top of the input script +before any other commands. Input scripts containing a kim_init command +shoud {not} include a "units"_units.html command or an +"atom_style"_atom_style.html command. These are set by the kim_init +command based on its arguments. + +The required arguments of kim_init are the {model} designation of the +IM to be used in the simulation (for an IM archived in OpenKIM this is +its "extended KIM ID"_https://openkim.org/about-kim-ids/), and +the {user_units}, which are the LAMMPS "units"_units.html system used +in the input script. (Any numerical values in the input script and values +read in from files are expected to be in the {user_units} system.) + +Based on the selected model kim_init may modify "atom_style"_atom_style.html. +Some SMs have requirements for this variable. If this is the case, then +atom_style will be set to the required style. Otherwise, the value is left +unchanged (which in the absence of an atom_style command in the input script +is the default LAMMPS value). + +Regarding units, the kim_init command behaves in different ways depending +on whether or not "unit conversion mode" is activated as indicated by the +optional {unitarg} argument. +If unit conversion mode is {not} active, then {user_units} must +either match the required units of the IM or the IM must be able +to adjust its units to match. (The latter is only possible with some KIM Models; +SMs can never adjust their units.) If a match is possible, the LAMMPS +"units"_units.html command is called to set the units to +{user_units}. If the match fails, the simulation is terminated with +an error. + +If unit conversion mode {is} active, then the LAMMPS "units"_units.html +command is called to set the units to the IM's required or preferred units. +Conversion factors between the IM's units and the {user_units} are +defined for all "physical quantities"_units.html (mass, distance, etc.). +These factors are stored as internal "variables"_variable.html with +standard names: + +_u_mass +_u_distance +_u_time +_u_energy +_u_velocity +_u_force +_u_torque +_u_temperature +_u_pressure +_u_viscosity +_u_charge +_u_dipole +_u_efield +_u_density :pre + +If desired, the input script can be designed to work with these conversion +factors so that the script will work without change with any OpenKIM IM. +(This approach is used in the +"OpenKIM Testing Framework"_https://openkim.org/getting-started/kim-tests/.) +For example, the following simple script constructs an fcc lattice with +a lattice parameter defined in meters, computes the total energy, +and prints the cohesive energy in Joules regardless of the units of the IM. + +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 si unit_conversion_mode +boundary p p p +lattice fcc 4.032e-10*$\{_u_distance\} +region simbox block 0 1 0 1 0 1 units lattice +create_box 1 simbox +create_atoms 1 box +mass 1 4.480134e-26*$\{_u_mass\} +kim_interactions Al +run 0 +variable Ec_in_J equal (pe/count(all))/$\{_u_energy\} +print "Cohesive Energy = $\{Ec_in_J\} J" :pre + +Note the multiplication by $\{_u_distance\} and $\{_u_mass\} to convert +from SI units (specified in the kim_init command) to whatever units the +IM uses (metal in this case), and the division by $\{_u_energy\} +to convert from the IM's energy units to SI units (Joule). This script +will work correctly for any IM for Al (KIM Model or SM) selected by the +kim_init command. + +Care must be taken to apply unit conversion to dimensional variables read in +from a file. For example if a configuration of atoms is read in from a +dump file using the "read_dump"_read_dump.html command, the following can +be done to convert the box and all atomic positions to the correct units: + +change_box all x scale $\{_u_distance\} y scale $\{_u_distance\} z scale $\{_u_distance\} remap :pre + +NOTE: Unit conversion will only work if the conversion factors are placed in +all appropriate places in the input script. It is up to the user to do this +correctly. + +OpenKIM IM Execution :h5 + +The second and final step in using an OpenKIM IM is to execute the +kim_interaction command. This command must be preceded by a kim_init +command and must follow the "create_box"_create_box.html command, +which defines the number of atom types {N}. +The kim_interaction command has one argument {typeargs}, which contains +a list of {N} chemical species that are mapped to the atom types. + +For example, imagine the OpenKIM IM supports Si and C species. +If the LAMMPS simulation has 4 atom types and you want the first three to be Si, +and the fourth to be C, you would use the following kim_interaction command: + +kim_interaction Si Si Si C :pre + +The kim_interaction command performs all the necessary steps to set up +the OpenKIM IM set in the kim_init command. The specific actions depend +on whether the IM is a KIM Model or a KIM SM. For a KIM Model, +a "pair_style kim"_pair_kim.html command will be executed followed by +the appropriate pair_coeff command. + +For a KIM SM, the set of commands defined in the SM speficiation file +will be executed. For example, consider the ReaxFF SM due to +Strachan et al. (2003) executed by the following commands: + +kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real +... +... box specification lines skipped +... +kim_interactions C H N O :pre + +The kim_interactions command executes the following commands defined for this +SM: + +pair_style reax/c lmp_control safezone 2.0 mincap 100 +pair_coeff * * ffield.reax.rdx C H N O +fix reaxqeq all qeq/reax 1 0.0 10.0 1.0e-6 param.qeq :pre + +Note that the files lmp_control, ffield.reax.rdx and param.qeq are specific +to Strachan et al. (2003) ReaxFF parameterization and are archived as part +of the SM package in OpenKIM. Note also that parameters like cutoff radii +and charge tolerances that have an effect on IM predictions are also +included in the SM definition ensuring reproducibility. + +NOTE: Clearly when using using kim_init and kim_interactions to select +and set up an OpenKIM IM, other LAMMPS commands +for the same functions (such as pair_style, pair_coeff, bond_style, +bond_coeff, fixes related to charge equilibration, etc.) should not +appear in the input script. + +Using OpenKIM Web Queries in LAMMPS :h4 + +@@@@@@@@@ + The kim_style command is a high-level wrapper around the "Knowledge Base for Interatomic Models (OpenKIM)"_https://openkim.org repository of interatomic potentials, so that they can be used by From c11caf45095d96aeb2a1477ce78d6e0c03ea7505 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 23 Jun 2019 10:34:43 -0500 Subject: [PATCH 288/760] update kim examples to temp. current state of code --- examples/kim/data.VOH | 118 ---------------------- examples/kim/in.kim.VOH.simulator_model | 23 ----- examples/kim/in.kim.ex_si.simulator_model | 69 ------------- examples/kim/in.kim.lj.simulator_model | 10 +- 4 files changed, 2 insertions(+), 218 deletions(-) delete mode 100644 examples/kim/data.VOH delete mode 100644 examples/kim/in.kim.VOH.simulator_model delete mode 100644 examples/kim/in.kim.ex_si.simulator_model diff --git a/examples/kim/data.VOH b/examples/kim/data.VOH deleted file mode 100644 index c093705adc..0000000000 --- a/examples/kim/data.VOH +++ /dev/null @@ -1,118 +0,0 @@ -# VOH example - -100 atoms -4 atom types - -0 25.000 xlo xhi -0 25.000 ylo yhi -0 25.000 zlo zhi - -Masses - -1 1.0080 -2 12.0107 -3 15.9994 -4 50.9415 - -Atoms - - 1 2 0.0 12.35333 12.56112 11.08925 - 2 4 0.0 12.32916 12.62071 13.13099 - 3 3 0.0 14.09425 12.56218 13.76130 - 4 3 0.0 11.42814 11.10330 13.76732 - 5 3 0.0 11.63260 13.89286 13.64097 - 6 1 0.0 10.61647 11.29221 14.30535 - 7 1 0.0 14.38026 13.34626 14.29055 - 8 1 0.0 11.32479 12.58820 10.70253 - 9 1 0.0 12.90918 13.42567 10.69612 - 10 1 0.0 12.84043 11.63643 10.74688 - 11 2 0.0 0.93670 23.74637 24.45218 - 12 4 0.0 2.18151 24.36876 0.94725 - 13 3 0.0 3.93452 24.44779 0.28384 - 14 3 0.0 2.13668 23.10529 2.33362 - 15 3 0.0 1.76108 0.74666 1.48323 - 16 1 0.0 1.82070 23.45305 3.20745 - 17 1 0.0 4.35555 0.34186 0.31083 - 18 1 0.0 24.90472 23.68735 24.82586 - 19 1 0.0 0.97611 24.45631 23.61244 - 20 1 0.0 1.24583 22.75250 24.09589 - 21 2 0.0 2.25730 12.18969 18.74792 - 22 4 0.0 0.67140 13.31162 19.37385 - 23 3 0.0 0.71106 13.43250 21.24545 - 24 3 0.0 24.08603 12.44025 18.87949 - 25 3 0.0 0.70486 14.71920 18.75808 - 26 1 0.0 23.49516 12.95430 18.26686 - 27 1 0.0 0.79723 14.34808 21.60818 - 28 1 0.0 2.24383 12.10285 17.65239 - 29 1 0.0 3.19860 12.66607 19.06030 - 30 1 0.0 2.20214 11.18299 19.18774 - 31 2 0.0 9.32237 8.16220 23.74501 - 32 4 0.0 9.41775 7.26178 21.91463 - 33 3 0.0 8.54752 8.34565 20.65588 - 34 3 0.0 8.50942 5.62151 22.00137 - 35 3 0.0 10.87539 7.02683 21.48455 - 36 1 0.0 9.06507 4.82324 21.80615 - 37 1 0.0 9.11458 8.67119 19.91477 - 38 1 0.0 9.82196 7.53487 24.49616 - 39 1 0.0 9.81855 9.14254 23.70532 - 40 1 0.0 8.27176 8.30387 24.03831 - 41 2 0.0 9.10113 13.98748 23.44281 - 42 4 0.0 8.84954 12.89163 21.73780 - 43 3 0.0 10.01387 13.54293 20.42005 - 44 3 0.0 7.08992 13.11522 21.12954 - 45 3 0.0 9.12937 11.39982 21.99065 - 46 1 0.0 6.55309 12.28287 21.08224 - 47 1 0.0 10.67858 12.89258 20.08249 - 48 1 0.0 8.42108 13.62252 24.22498 - 49 1 0.0 10.13926 13.89766 23.79639 - 50 1 0.0 8.88118 15.04646 23.24289 - 51 2 0.0 17.73225 3.40708 8.28945 - 52 4 0.0 18.49877 5.29835 8.37599 - 53 3 0.0 19.48472 5.62627 6.81505 - 54 3 0.0 19.66498 5.40961 9.84118 - 55 3 0.0 17.38120 6.34466 8.51889 - 56 1 0.0 19.41208 6.07779 10.52927 - 57 1 0.0 19.15960 6.37609 6.25924 - 58 1 0.0 17.15579 3.19557 9.20103 - 59 1 0.0 17.07197 3.31049 7.41454 - 60 1 0.0 18.54903 2.67524 8.20436 - 61 2 0.0 5.18346 20.97409 24.28840 - 62 4 0.0 7.06396 20.17968 24.34847 - 63 3 0.0 7.63220 19.82889 22.59578 - 64 3 0.0 7.00272 18.55243 0.28036 - 65 3 0.0 8.05085 21.13715 0.03620 - 66 1 0.0 7.56109 18.51690 1.09952 - 67 1 0.0 8.44257 20.31624 22.30833 - 68 1 0.0 4.83239 21.17976 0.30904 - 69 1 0.0 5.19182 21.91237 23.71419 - 70 1 0.0 4.49282 20.26573 23.80772 - 71 2 0.0 21.82701 12.79861 20.63056 - 72 4 0.0 21.27646 11.09990 19.63611 - 73 3 0.0 19.52930 10.64327 20.13923 - 74 3 0.0 22.41924 9.70346 20.14638 - 75 3 0.0 21.34556 11.30206 18.11274 - 76 1 0.0 22.94464 9.30084 19.40876 - 77 1 0.0 18.86743 10.62817 19.40629 - 78 1 0.0 22.85378 13.07853 20.35349 - 79 1 0.0 21.14666 13.62206 20.37063 - 80 1 0.0 21.78702 12.62668 21.71522 - 81 2 0.0 4.84801 10.63893 5.85720 - 82 4 0.0 2.99668 11.06158 5.10490 - 83 3 0.0 3.09505 11.09458 3.23258 - 84 3 0.0 2.48053 12.76555 5.69567 - 85 3 0.0 1.96195 10.01780 5.55634 - 86 1 0.0 1.65323 12.78746 6.24245 - 87 1 0.0 2.52753 10.43264 2.76734 - 88 1 0.0 4.80984 10.62196 6.95551 - 89 1 0.0 5.18492 9.65688 5.49273 - 90 1 0.0 5.56737 11.40648 5.53568 - 91 2 0.0 13.58126 9.47098 19.40329 - 92 4 0.0 14.17691 10.17243 21.22692 - 93 3 0.0 14.44428 12.02521 21.10583 - 94 3 0.0 15.81206 9.37183 21.67632 - 95 3 0.0 13.12907 9.86545 22.30960 - 96 1 0.0 15.80034 8.83149 22.50703 - 97 1 0.0 13.87232 12.57457 21.69672 - 98 1 0.0 13.42563 8.38456 19.45392 - 99 1 0.0 12.63978 9.95672 19.10431 - 100 1 0.0 14.35123 9.68789 18.64825 diff --git a/examples/kim/in.kim.VOH.simulator_model b/examples/kim/in.kim.VOH.simulator_model deleted file mode 100644 index 8696cf265a..0000000000 --- a/examples/kim/in.kim.VOH.simulator_model +++ /dev/null @@ -1,23 +0,0 @@ -# REAX potential for VOH system -# ..... - -units real -atom_style charge - -kim_style init Sim_LAMMPS_ReaxFF_ChenowethVanDuinPersson_2008_CHOV__SM_429148913211_000 - -read_data data.VOH - -kim_style define H C O V - -neighbor 2 bin -neigh_modify every 10 delay 0 check no - -fix 1 all nve -fix 3 all temp/berendsen 500.0 500.0 100.0 - -timestep 0.25 - -#dump 1 all atom 30 dump.reax.voh - -run 300 diff --git a/examples/kim/in.kim.ex_si.simulator_model b/examples/kim/in.kim.ex_si.simulator_model deleted file mode 100644 index 2f9e79ef4e..0000000000 --- a/examples/kim/in.kim.ex_si.simulator_model +++ /dev/null @@ -1,69 +0,0 @@ - -units metal -kim_style init ex_sim_model_Si_mod_tersoff - -atom_style atomic -atom_modify map array -boundary p p p - -# temperatures -variable tlo equal 1800.0 -variable thi equal 2400.0 - -# coordination number cutoff - -variable r equal 2.835 - -# minimization parameters - -variable etol equal 1.0e-5 -variable ftol equal 1.0e-5 -variable maxiter equal 100 -variable maxeval equal 100 -variable dmax equal 1.0e-1 - -# diamond unit cell - -variable a equal 5.431 -lattice custom $a & - a1 1.0 0.0 0.0 & - a2 0.0 1.0 0.0 & - a3 0.0 0.0 1.0 & - basis 0.0 0.0 0.0 & - basis 0.0 0.5 0.5 & - basis 0.5 0.0 0.5 & - basis 0.5 0.5 0.0 & - basis 0.25 0.25 0.25 & - basis 0.25 0.75 0.75 & - basis 0.75 0.25 0.75 & - basis 0.75 0.75 0.25 - -region myreg block 0 4 & - 0 4 & - 0 4 -create_box 1 myreg -create_atoms 1 region myreg - -mass 1 28.06 - -group Si type 1 - -velocity all create ${thi} 5287286 mom yes rot yes dist gaussian - -# make a vacancy - -group del id 300 -delete_atoms group del -kim_style define Si - -thermo 10 - -fix 1 all nve -fix 2 all langevin ${thi} ${thi} 0.1 48278 - -timestep 1.0e-3 -neighbor 1.0 bin -neigh_modify every 1 delay 10 check yes - -run 100 - diff --git a/examples/kim/in.kim.lj.simulator_model b/examples/kim/in.kim.lj.simulator_model index 01ee5aa64c..cb7a2e14ed 100644 --- a/examples/kim/in.kim.lj.simulator_model +++ b/examples/kim/in.kim.lj.simulator_model @@ -14,9 +14,7 @@ variable xx equal 20*$x variable yy equal 20*$y variable zz equal 20*$z -echo both -#kim_style model LennardJones_Ar metal -kim_style model Sim_LAMMPS_LJcut_AkersonElliott_Alchemy_PbAu real unit_conversion_mode +kim_init Sim_LAMMPS_LJcut_AkersonElliott_Alchemy_PbAu real unit_conversion_mode newton on lattice fcc 4.4300 @@ -24,10 +22,7 @@ region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box -#pair_style lj/cut 8.1500 -#pair_coeff 1 1 0.0104 3.4000 - -kim_style setup Au +kim_interactions Au mass 1 39.95 velocity all create 200.0 232345 loop geom @@ -36,6 +31,5 @@ neighbor 0.3 bin neigh_modify delay 0 every 1 check yes fix 1 all nve -#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 run 100 From d08867ce0a05e090056f9dea1e3bbdd2fc4c6afa Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 11:39:06 -0500 Subject: [PATCH 289/760] Completed first version of kim_commands documentation --- doc/src/kim_commands.txt | 304 +++++++++++++++++++++++---------------- 1 file changed, 182 insertions(+), 122 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 06ad841240..c3ab799821 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -12,15 +12,15 @@ kim_commands :h3 kim_init model user_units unitarg kim_interactions typeargs -kim_query variable query_function web_query_flags :pre +kim_query variable query_function queryargs :pre -model = designation of the KIM interatomic model (the KIM ID for models archived in OpenKIM) -user_units = the LAMMPS "units"_units.html style assumed in the user input script +model = name of the KIM interatomic model (the KIM ID for models archived in OpenKIM) +user_units = the LAMMPS "units"_units.html style assumed in the LAMMPS input script unitarg = {unit_conversion_mode} (optional) typeargs = atom type to species mapping (one entry per atom type) variable = name of a (string style) variable where the result of the query is stored query_function = name of the OpenKIM web API query function to be used -web_query_flags = a series of keyword=value pairs that represent the web query; supported keywords depend on query function :ul +queryargs = a series of {keyword=value} pairs that represent the web query; supported keywords depend on the query function :ul [Examples:] @@ -30,14 +30,20 @@ kim_interactions Si kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 metal unit_conversion_mode kim_interactions C H O -kim_query NEED EXAMPLES :pre +kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] :pre + [Description:] -The "Open Knowledgebase for Interatomic Models (OpenKIM)"_https://openkim.org -archives interatomic models (IMs) (potentials and force fields) in a format -that can be directly used with LAMMPS using the commands documented on this -page. +The set of {kim_commands} provide a high-level wrapper around the +"Open Knowledgebase of Interatomic Models (OpenKIM)"_https://openkim.org +repository of interatomic models (IMs) (potentials and force fields), +so that they can be used by LAMMPS scripts. These commands do not implement +any computations directly, but rather generate LAMMPS input commands based +on the information retrieved from the OpenKIM repository to initialize and +activate OpenKIM IMs and query their predictions for use in the LAMMPS script. +All LAMMPS input commands executed by {kim_commands} are echoed to the +LAMMPS log file. Benefits of Using OpenKIM IMs :h4 @@ -52,22 +58,23 @@ IMs in OpenKIM are exhaustively tested using "KIM Tests"_https://openkim.org/get Reproducibility :h5 Each IM in OpenKIM is issued a unique identifier ("KIM ID"_https://openkim.org/about-kim-ids/), which includes a version number (last three digits). Any changes that can result in different numerical values lead to a version increment in the KIM ID. This makes it possible to reproduce simulations since the specific version of a specific IM used can be retrieved using its KIM ID. -OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues digitial object identifiers (DOIs) to all IMs archived in OpenKIM. This makes it possible to cite the IM code used in a simulation in a publications to give credit to the developers and further facilitate reproducibility. :ul +OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues digital object identifiers (DOIs) to all IMs archived in OpenKIM. This makes it possible to cite the IM code used in a simulation in a publications to give credit to the developers and further facilitate reproducibility. :ul Convenience :h5 -IMs in OpenKIM are distributed in binary form along with LAMMPS and can be used in a LAMMPS input script simply by providing their KIM ID in the {kim_init} command documented on this page. (For more on using KIM with LAMMPS, see the KIM section of the "Packages details"_Packages_details.html doc page.) +IMs in OpenKIM are distributed in binary form along with LAMMPS and can be used in a LAMMPS input script simply by providing their KIM ID in the {kim_init} command documented on this page. The {kim_query} web query tool provides the ability to use the predictions of IMs for supported material properties (computed via "KIM Tests"https://openkim.org/getting-started/kim-tests/) as part of a LAMMPS input script setup and analysis. -Support is provided for unit conversion between the "units"_units.html system used in the LAMMPS input script and the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the liklihood of errors due to incompatible units. :ul +Support is provided for unit conversion between the "units style"_units.html used in the LAMMPS input script and the units required by the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the likelihood of errors due to incompatible units. :ul +:link(IM_types) Types of KIM IMs :h4 There are two types of IMs archived in OpenKIM: -The first type is called a {KIM Model}. A KIM Model is an independent computer implemention of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). +The first type is called a {KIM Model}. A KIM Model is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). The second type is called a {KIM Simulator Model} (SM). In this case, the IM is implemented natively within the simulation code ({simulator}), i.e. LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol -With these two IM tpes, OpenKIM can archive and test almost all IMs that +With these two IM types, OpenKIM can archive and test almost all IMs that can be used by LAMMPS. (It is easy to contribute new IMs to OpenKIM, see the "upload instructions"_https://openkim.org/getting-started/adding-content/.) @@ -78,46 +85,59 @@ and supported species, separated by two underscores from the KIM ID itself, which begins with an IM code ({MO} for a KIM Model, and {SM} for a KIM Simulator Model) followed by a unique 12-digit code and a 3-digit version identifier. -By convension SM prefixes begin with {SM} to readily identify them. +By convention SM prefixes begin with {Sim_} to readily identify them. SW_StillingerWeber_1985_Si__MO_405512056662_005 Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 :pre NOTE: It is also possible to locally install IMs not archived in OpenKIM, -in which case their designation does not have to conform to the KIM ID format. +in which case their names do not have to conform to the KIM ID format. Using OpenKIM IMs with LAMMPS :h4 Two commands are employed when using OpenKIM IMs, one to select the IM and perform necessary initializations ({kim_init}), and the second to set up the IM for use by executing any necessary LAMMPS commands -({kim_interactions}). +({kim_interactions}). Both are required. -OpenKIM IM Initialization :h5 +OpenKIM IM Initialization ({kim_init}) :h5 -The kim_init command must be located at the top of the input script -before any other commands. Input scripts containing a kim_init command -shoud {not} include a "units"_units.html command or an -"atom_style"_atom_style.html command. These are set by the kim_init -command based on its arguments. +The {kim_init} mode command must be issued [before] +the simulation box is created (normally at the top of the file). +This command sets the OpenKIM IM that will be used and may issue +additional commands changing LAMMPS default settings that are required +for using the selected IM (such as "units"_units.html or +"atom_style"_atom_style.html). If needed, those settings can be overridden, +however, typically a script containing a {kim_init} command +would not include {units} and {atom_style} commands. -The required arguments of kim_init are the {model} designation of the +The required arguments of {kim_init} are the {model} name of the IM to be used in the simulation (for an IM archived in OpenKIM this is its "extended KIM ID"_https://openkim.org/about-kim-ids/), and -the {user_units}, which are the LAMMPS "units"_units.html system used -in the input script. (Any numerical values in the input script and values -read in from files are expected to be in the {user_units} system.) +the {user_units}, which are the LAMMPS "units style"_units.html used +in the input script. (Any dimensioned numerical values in the input +script and values read in from files are expected to be in the +{user_units} system.) -Based on the selected model kim_init may modify "atom_style"_atom_style.html. +The selected IM can be either a "KIM Model or a KIM SM"_#IM_types. +For a KIM SM, the {kim_init} command verifies that the SM is designed +to work with LAMMPS (and not another simulation code). +In addition, the version strings for the LAMMPS version used for defining +the SM and the LAMMPS version being currently run are +printed, to help diagnose any incompatible changes to input script or +command syntax between the two LAMMPS versions. + +Based on the selected model {kim_init} may modify the +"atom_style"_atom_style.html. Some SMs have requirements for this variable. If this is the case, then -atom_style will be set to the required style. Otherwise, the value is left -unchanged (which in the absence of an atom_style command in the input script -is the default LAMMPS value). +{atom_style} will be set to the required style. Otherwise, the value is left +unchanged (which in the absence of an {atom_style} command in the input script +is the "default atom_style value"_atom_style.html). -Regarding units, the kim_init command behaves in different ways depending -on whether or not "unit conversion mode" is activated as indicated by the +Regarding units, the {kim_init} command behaves in different ways depending +on whether or not {unit conversion mode} is activated as indicated by the optional {unitarg} argument. -If unit conversion mode is {not} active, then {user_units} must +If unit conversion mode is [not] active, then {user_units} must either match the required units of the IM or the IM must be able to adjust its units to match. (The latter is only possible with some KIM Models; SMs can never adjust their units.) If a match is possible, the LAMMPS @@ -129,7 +149,8 @@ If unit conversion mode {is} active, then the LAMMPS "units"_units.html command is called to set the units to the IM's required or preferred units. Conversion factors between the IM's units and the {user_units} are defined for all "physical quantities"_units.html (mass, distance, etc.). -These factors are stored as internal "variables"_variable.html with +(Note that converting to or from the "lj" unit style is not supported.) +These factors are stored as "internal style variables"_variable.html with standard names: _u_mass @@ -168,11 +189,11 @@ variable Ec_in_J equal (pe/count(all))/$\{_u_energy\} print "Cohesive Energy = $\{Ec_in_J\} J" :pre Note the multiplication by $\{_u_distance\} and $\{_u_mass\} to convert -from SI units (specified in the kim_init command) to whatever units the +from SI units (specified in the {kim_init} command) to whatever units the IM uses (metal in this case), and the division by $\{_u_energy\} to convert from the IM's energy units to SI units (Joule). This script will work correctly for any IM for Al (KIM Model or SM) selected by the -kim_init command. +{kim_init} command. Care must be taken to apply unit conversion to dimensional variables read in from a file. For example if a configuration of atoms is read in from a @@ -185,30 +206,47 @@ NOTE: Unit conversion will only work if the conversion factors are placed in all appropriate places in the input script. It is up to the user to do this correctly. -OpenKIM IM Execution :h5 +OpenKIM IM Execution ({kim_interactions}) :h5 The second and final step in using an OpenKIM IM is to execute the -kim_interaction command. This command must be preceded by a kim_init -command and must follow the "create_box"_create_box.html command, +{kim_interaction} command. This command must be preceded by a {kim_init} +command and a "create_box"_create_box.html command, which defines the number of atom types {N}. -The kim_interaction command has one argument {typeargs}, which contains -a list of {N} chemical species that are mapped to the atom types. +The {kim_interaction} command has one argument {typeargs}. This argument +contains a list of {N} chemical species, which defines a mapping between +atom types in LAMMPS to the available species in the OpenKIM IM. -For example, imagine the OpenKIM IM supports Si and C species. -If the LAMMPS simulation has 4 atom types and you want the first three to be Si, -and the fourth to be C, you would use the following kim_interaction command: +For example, consider an OpenKIM IM that supports Si and C species. +If the LAMMPS simulation has four atom types, where the first three are Si, +and the fourth is C, the following {kim_interaction} command would be used: kim_interaction Si Si Si C :pre -The kim_interaction command performs all the necessary steps to set up -the OpenKIM IM set in the kim_init command. The specific actions depend +The {kim_interaction} command performs all the necessary steps to set up +the OpenKIM IM selected in the {kim_init} command. The specific actions depend on whether the IM is a KIM Model or a KIM SM. For a KIM Model, -a "pair_style kim"_pair_kim.html command will be executed followed by -the appropriate pair_coeff command. +a "pair_style kim"_pair_kim.html command is executed followed by +the appropriate {pair_coeff} command. For example, for the +Ercolessi and Adams (1994) KIM Model for Al set by the following commands: -For a KIM SM, the set of commands defined in the SM speficiation file -will be executed. For example, consider the ReaxFF SM due to -Strachan et al. (2003) executed by the following commands: +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal +... +... box specification lines skipped +... +kim_interactions Al :pre + +the {kim_interactions} command executes the following LAMMPS input commands: + +pair_style kim EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 +pair_coeff * * Al :pre + +For a KIM SM, the generated input commands may be more complex +and require that LAMMPS is built with the required packages included +for the type of potential being used. The set of commands to be executed +is defined in the SM specification file, which is part of the SM package +on "OpenKIM"_https://openkim.org. +For example, for the Strachan et al. (2003) ReaxFF SM +set by the following commands: kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real ... @@ -216,103 +254,125 @@ kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657 ... kim_interactions C H N O :pre -The kim_interactions command executes the following commands defined for this -SM: +the {kim_interactions} command executes the following LAMMPS input commands: pair_style reax/c lmp_control safezone 2.0 mincap 100 pair_coeff * * ffield.reax.rdx C H N O fix reaxqeq all qeq/reax 1 0.0 10.0 1.0e-6 param.qeq :pre -Note that the files lmp_control, ffield.reax.rdx and param.qeq are specific -to Strachan et al. (2003) ReaxFF parameterization and are archived as part -of the SM package in OpenKIM. Note also that parameters like cutoff radii -and charge tolerances that have an effect on IM predictions are also -included in the SM definition ensuring reproducibility. +Note that the files {lmp_control}, {ffield.reax.rdx} and {param.qeq} +are specific to the Strachan et al. (2003) ReaxFF parameterization +and are archived as part of the SM package in OpenKIM. +Note also that parameters like cutoff radii and charge tolerances, +which have an effect on IM predictions, are also included in the +SM definition ensuring reproducibility. -NOTE: Clearly when using using kim_init and kim_interactions to select +NOTE: When using using {kim_init} and {kim_interactions} to select and set up an OpenKIM IM, other LAMMPS commands for the same functions (such as pair_style, pair_coeff, bond_style, -bond_coeff, fixes related to charge equilibration, etc.) should not -appear in the input script. +bond_coeff, fixes related to charge equilibration, etc.) should normally +not appear in the input script. -Using OpenKIM Web Queries in LAMMPS :h4 +Using OpenKIM Web Queries in LAMMPS ({kim_query}) :h5 -@@@@@@@@@ +The {kim_query} command performs a web query to retrieve the predictions +of the IM set by {kim_init} for material properties archived in +"OpenKIM"_https://openkim.org. The {kim_query} command must be preceded +by a {kim_init} command. The result of the query is stored in a +"string style variable"_variable.html, the name of which is given as the first +argument of the {kim_query command}. The second required argument +{query_function} is the name of the query function to be called +(e.g. {get_lattice_constant_fcc}). +All following arguments are parameters handed over to the web query +in the format {keyword=value}. The list of supported keywords and +and the type and format of their values depend on the query function +used. -The kim_style command is a high-level wrapper around the -"Knowledge Base for Interatomic Models (OpenKIM)"_https://openkim.org -repository of interatomic potentials, so that they can be used by -LAMMPS scripts. It does not implement any computations directly, but -rather will generate LAMMPS input commands based on the information -retrieved from the OpenKIM repository. It is able to realize so-called -"KIM Simulator Models", which are OpenKIM repository entries of models -using native features of the simulation engine in use, i.e. LAMMPS -in this case, but it also supports realizing conventional KIM models -implicitly via generating a "pair_style kim"_pair_kim.html command -followed by a suitable "pair_coeff"_pair_coeff.html command. +NOTE: The current list of supported query functions is available on the OpenKIM +webpage at "https://query.openkim.org"_https://query.openkim.org/ -The kim_style command has two modes, {init} and {define}, indicated by -the first argument to the kim_style command. An {init} mode command -must be issued [before] the simulation box is created, while the {define} -mode version may only be used [after] the simulation box exists. Both -are required. The {init} mode version sets the model name and may issue -additional commands changing LAMMPS default settings that are required -for using a selected simulator model. If needed, those settings can be -overridden. The second argument to the {kim_style init} command is the -KIM model ID. +The data obtained by {kim_query} commands can be used as part of the setup +or analysis phases of LAMMPS simulations. Some examples are given below. -In both modes, the keywords {unit_variables} and {unit_from} may be -added. They control the values of a set of -"internal style variables"_variable.html that can be used to convert -between different unit styles in LAMMPS. The argument to -each keyword is a LAMMPS unit style or NULL, which means to look up -the unit style from what was set with the "units"_units.html command. -Please note, that KIM simulator models will set their preferred unit style. -By default all conversion variables are set to 1.0. Converting to or -from the "lj" unit style is not supported. The following variables are defined: +[Define a crystal at its equilibrium lattice constant] -_u_length -_u_mass -_u_time :ul +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal +boundary p p p +kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] +lattice fcc $\{a0\} +... :pre +The {kim_query} command retrieves from "OpenKIM"_https://openkim.org +the equilibrium lattice constant predicted by the Ercolessi and Adams (1994) +potential for the face-centered cubic (fcc) structure and places it in +variable {a0}. This variable is then used on the next line to set up the +crystal. By using {kim_query}, the user is saved the trouble and possible +error of tracking this value down, or of having to perform an energy +minimization to find the equilibrium lattice constant. -The {kim_style define} command will issue commands that will realize -the selected model (through generating pair_style and pair_coeff commands, -but also other commands, as required). It has to be issued [after] the -the simulation box is defined. The {kim_style define} command allows a -varying number of additional arguments. Those are used to map the atom -types in LAMMPS to the available species in the KIM model. This is -equivalent to the arguments following "pair_coeff * *" in a -"kim"_pair_kim.html pair style. Thus the commands: +[Define a crystal at finite temperature accounting for thermal expansion] -kim_style init LennardJones_Ar -kim_style define Ar :pre +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal +boundary p p p +kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] +kim_query alpha get_linear_thermal_expansion_fcc +variable DeltaT equal 300 +lattice fcc $\{a0\}*$\{alpha\}*$\{DeltaT\} +... :pre -will generate the LAMMPS input commands: +As in the previous example, the equilibrium lattice constant is obtained +for the Ercolessi and Adams (1994) potential. However, in this case the +crystal is scaled to the appropriate lattice constant at 300 K by using +the linear thermal expansion coefficient predicted by the potential. -pair_style kim LennardJones_Ar -pair_coeff * * Ar :pre +[Compute defect formation energy] + +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal +... +... Build fcc crystal containing some defect and compute the total energy +... which is stored in the variable {Etot} +... +kim_query Ec get_cohesive_energy_fcc units=\["eV"\] +variable Eform equal $\{Etot\} - count(all)*$\{Ec\} +... :pre + +The defect formation energy {Eform} is computed by subtracting from {Etot} the +ideal fcc cohesive energy of the atoms in the system obtained from +"OpenKIM"_https://openkim.org for the Ercolessi and Adams (1994) potential. + +Citation of OpenKIM IMs :h4 + +When publishing results obtained using OpenKIM IMs researchers are requested +to cite the OpenKIM project "(Tadmor)"_#kim-mainpaper and KIM API +"(Elliott)"_#kim-api as well as the specific IM codes used in the simulations. +The citation format for an IM is displayed on its page on +"OpenKIM"_https://openkim.org along with the corresponding BibTex file. + +Citing the codes used in the simulation gives credit +to the researchers who developed them and enables open source efforts like +OpenKIM to function. -For simulator models, the generated input commands may be more complex -and require that LAMMPS is built with the required packages included. -The commands generated by the kim_style command, can be copied to the -screen or log file, through the "echo"_echo.html command. -The kim_style command will also validate, that a selected simulator -model was generated for the LAMMPS MD code and not some other software. -In addition, the version strings for LAMMPS version used for defining -the simulator model and the LAMMPS version being currently run are -printed, so that it can be tracked down, if there are any incompatible -changes to input script or command syntax between the two LAMMPS versions. [Restrictions:] -This command is part of the KIM package. It is only enabled if +The set of {kim_commands} is part of the KIM package. It is only enabled if LAMMPS was built with that package. Furthermore, its correct functioning depends on compiling LAMMPS with all required packages installed that are required by the commands embedded in any KIM -simulator models used. +SM used. See the "Build package"_Build_package.html doc page for more info. [Related commands:] -"pair_style kim"_pair_kim.html, "kim_query"_kim_query.html +"pair_style kim"_pair_kim.html + +:line + +:link(kim-mainpaper) +[(Tadmor)] Tadmor, Elliott, Sethna, Miller and Becker, JOM, 63, 17 (2011). +doi: "https://doi.org/10.1007/s11837-011-0102-6"_https://doi.org/10.1007/s11837-011-0102-6 + +:link(kim-api) +[(Elliott)] Elliott, Tadmor and Bernstein, "https://openkim.org/kim-api"_https://openkim.org/kim-api (2011) +doi: "https://doi.org/10.25950/FF8F563A"_https://doi.org/10.25950/FF8F563A + From a6f6c9bed0c804f039e83943cb9c22a1a66d1429 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 12:41:29 -0400 Subject: [PATCH 290/760] fix up links, spelling issues, and inconsistent names in kim commands docs --- doc/src/Build_extras.txt | 2 +- doc/src/Packages_details.txt | 14 ++++----- doc/src/kim_commands.txt | 34 +++++++++++---------- doc/src/pair_kim.txt | 4 +-- doc/utils/sphinx-config/false_positives.txt | 6 ++++ 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 17d18243f2..220e9420fc 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -173,7 +173,7 @@ KIM package :h4,link(kim) To build with this package, the KIM library with API v2 must be downloaded and built on your system. It must include the KIM models that you want to -use with LAMMPS. If you want to use the "kim_query"_kim_query.html +use with LAMMPS. If you want to use the "kim_query"_kim_commands.html command, you also need to have libcurl installed with the matching development headers and the curl-config tool. diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 19c7e96fe9..d6e8f8639f 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -341,11 +341,11 @@ KIM package :link(PKG-KIM),h4 A "pair_style kim"_pair_kim.html command which is a wrapper on the Knowledge Base for Interatomic Models (KIM) repository of interatomic potentials, enabling any of them to be used in LAMMPS simulations. -Also a "kim_query"_kim_query.html command, which allows to query -the OpenKIM database for stored properties, and a -"kim_style"_kim_style.html command, which serves as a front end to -generating LAMMPS input on-the-fly for KIM simulator models and native -KIM models. +Also a "kim_query"_kim_commands.html command, which allows to query +the OpenKIM database for stored properties, and the commands +"kim_init and kim_interactions"_kim_commands.html, which serve as +front end to generating LAMMPS input on-the-fly for KIM simulator +models and native KIM models. To use this package you must have the KIM library available on your system. @@ -357,8 +357,8 @@ Elliott (U Minnesota). [Authors:] Ryan Elliott (U Minnesota) is the main developer for the KIM API which the "pair_style kim"_pair_kim.html command uses. He developed the pair style. Axel Kohlmeyer (Temple U) contributed the -"kim_query"_kim_query.html and "kim_style"_kim_style.html commands in -close collaboration with Ryan. +"kim_query"_kim_commands.html and "kim_init"_kim_commands.html commands +in close collaboration with Ryan. [Install:] diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 06ad841240..7377c0186c 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -30,7 +30,8 @@ kim_interactions Si kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 metal unit_conversion_mode kim_interactions C H O -kim_query NEED EXAMPLES :pre +kim_query latconst get_test_result test=TE_156715955670 model=MO_800509458712 & + prop=structure-cubic-crystal-npt species=\["Al"\] keys=\["a"\] units=\["angstrom"\] :pre [Description:] @@ -52,22 +53,22 @@ IMs in OpenKIM are exhaustively tested using "KIM Tests"_https://openkim.org/get Reproducibility :h5 Each IM in OpenKIM is issued a unique identifier ("KIM ID"_https://openkim.org/about-kim-ids/), which includes a version number (last three digits). Any changes that can result in different numerical values lead to a version increment in the KIM ID. This makes it possible to reproduce simulations since the specific version of a specific IM used can be retrieved using its KIM ID. -OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues digitial object identifiers (DOIs) to all IMs archived in OpenKIM. This makes it possible to cite the IM code used in a simulation in a publications to give credit to the developers and further facilitate reproducibility. :ul +OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues digital object identifiers (DOIs) to all IMs archived in OpenKIM. This makes it possible to cite the IM code used in a simulation in a publications to give credit to the developers and further facilitate reproducibility. :ul Convenience :h5 IMs in OpenKIM are distributed in binary form along with LAMMPS and can be used in a LAMMPS input script simply by providing their KIM ID in the {kim_init} command documented on this page. (For more on using KIM with LAMMPS, see the KIM section of the "Packages details"_Packages_details.html doc page.) The {kim_query} web query tool provides the ability to use the predictions of IMs for supported material properties (computed via "KIM Tests"https://openkim.org/getting-started/kim-tests/) as part of a LAMMPS input script setup and analysis. -Support is provided for unit conversion between the "units"_units.html system used in the LAMMPS input script and the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the liklihood of errors due to incompatible units. :ul +Support is provided for unit conversion between the "units"_units.html system used in the LAMMPS input script and the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the likelihood of errors due to incompatible units. :ul Types of KIM IMs :h4 There are two types of IMs archived in OpenKIM: -The first type is called a {KIM Model}. A KIM Model is an independent computer implemention of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). +The first type is called a {KIM Model}. A KIM Model is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). The second type is called a {KIM Simulator Model} (SM). In this case, the IM is implemented natively within the simulation code ({simulator}), i.e. LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol -With these two IM tpes, OpenKIM can archive and test almost all IMs that +With these two IM types, OpenKIM can archive and test almost all IMs that can be used by LAMMPS. (It is easy to contribute new IMs to OpenKIM, see the "upload instructions"_https://openkim.org/getting-started/adding-content/.) @@ -78,7 +79,7 @@ and supported species, separated by two underscores from the KIM ID itself, which begins with an IM code ({MO} for a KIM Model, and {SM} for a KIM Simulator Model) followed by a unique 12-digit code and a 3-digit version identifier. -By convension SM prefixes begin with {SM} to readily identify them. +By convention SM prefixes begin with {SM} to readily identify them. SW_StillingerWeber_1985_Si__MO_405512056662_005 Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 :pre @@ -89,7 +90,7 @@ in which case their designation does not have to conform to the KIM ID format. Using OpenKIM IMs with LAMMPS :h4 Two commands are employed when using OpenKIM IMs, one to select the -IM and perform necessary initializations ({kim_init}), and the second +IM and perform necessary initialization ({kim_init}), and the second to set up the IM for use by executing any necessary LAMMPS commands ({kim_interactions}). @@ -97,7 +98,7 @@ OpenKIM IM Initialization :h5 The kim_init command must be located at the top of the input script before any other commands. Input scripts containing a kim_init command -shoud {not} include a "units"_units.html command or an +should {not} include a "units"_units.html command or an "atom_style"_atom_style.html command. These are set by the kim_init command based on its arguments. @@ -188,25 +189,26 @@ correctly. OpenKIM IM Execution :h5 The second and final step in using an OpenKIM IM is to execute the -kim_interaction command. This command must be preceded by a kim_init +kim_interactions command. This command must be preceded by a kim_init command and must follow the "create_box"_create_box.html command, which defines the number of atom types {N}. -The kim_interaction command has one argument {typeargs}, which contains +The kim_interactions command has one argument {typeargs}, which contains a list of {N} chemical species that are mapped to the atom types. For example, imagine the OpenKIM IM supports Si and C species. If the LAMMPS simulation has 4 atom types and you want the first three to be Si, -and the fourth to be C, you would use the following kim_interaction command: +and the fourth to be C, you would use the following kim_interactions command: -kim_interaction Si Si Si C :pre +kim_interactions Si Si Si C +:pre -The kim_interaction command performs all the necessary steps to set up +The kim_interactions command performs all the necessary steps to set up the OpenKIM IM set in the kim_init command. The specific actions depend on whether the IM is a KIM Model or a KIM SM. For a KIM Model, a "pair_style kim"_pair_kim.html command will be executed followed by the appropriate pair_coeff command. -For a KIM SM, the set of commands defined in the SM speficiation file +For a KIM SM, the set of commands defined in the SM specification file will be executed. For example, consider the ReaxFF SM due to Strachan et al. (2003) executed by the following commands: @@ -306,7 +308,7 @@ changes to input script or command syntax between the two LAMMPS versions. [Restrictions:] -This command is part of the KIM package. It is only enabled if +These commands are part of the KIM package. It is only enabled if LAMMPS was built with that package. Furthermore, its correct functioning depends on compiling LAMMPS with all required packages installed that are required by the commands embedded in any KIM @@ -315,4 +317,4 @@ See the "Build package"_Build_package.html doc page for more info. [Related commands:] -"pair_style kim"_pair_kim.html, "kim_query"_kim_query.html +"pair_style kim"_pair_kim.html, "units"_units.html diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 523bd89d7c..7e399b7ce0 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -112,7 +112,7 @@ kim-api package version 2.0.0 and higher. [Related commands:] -"pair_coeff"_pair_coeff.html, "kim_style"_kim_style.html, -"kim_query"_kim_query.html +"pair_coeff"_pair_coeff.html, "kim_init"_kim_commands.html, +"kim_interactions"_kim_commands, "kim_query"_kim_commands.html [Default:] none diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a8bfa8f193..6a75f0555a 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1606,6 +1606,7 @@ meso mesoparticle mesoscale mesoscopic +metadata metadynamics Metadynamics Methfessel @@ -2271,6 +2272,7 @@ rcutfac rdc rdf RDideal +rdx README realtime reamin @@ -2297,6 +2299,8 @@ Rensselaer reparameterizing repo representable +Reproducibility +reproducibility repuls rescale rescaled @@ -2585,6 +2589,7 @@ Stoll stopstep Stouch Straatsma +Strachan Stratford Strathclyde Straub @@ -2822,6 +2827,7 @@ undump uniaxial uniaxially unimodal +unitarg unitless Universite unix From c9cb6e3658e66f4cf9086e9ed50232e477f7ed3e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 13:12:23 -0400 Subject: [PATCH 291/760] remove obsolete files --- doc/src/kim_query.txt | 47 ------------------- doc/src/kim_style.txt | 107 ------------------------------------------ 2 files changed, 154 deletions(-) delete mode 100644 doc/src/kim_query.txt delete mode 100644 doc/src/kim_style.txt diff --git a/doc/src/kim_query.txt b/doc/src/kim_query.txt deleted file mode 100644 index 84eca6e676..0000000000 --- a/doc/src/kim_query.txt +++ /dev/null @@ -1,47 +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 - -kim_query command :h3 - -[Syntax:] - -kim_query variable query_function web_query_flags :pre - -variable = name of a (string style) variable where the result of the query is stored -query_function = name of the OpenKIM web API query function to be used -web_query_flags = a series of keyword=value pairs that represent the web query; supported keywords depend on query function :ul - -[Examples:] - -kim_query latconst get_test_result test=TE_156715955670 model=MO_800509458712 & - prop=structure-cubic-crystal-npt species=\["Al"\] keys=\["a"\] units=\["angstrom"\] :pre - -[Description:] - -The kim_query command allows to retrieve properties from the OpenKIM -through a web query. The result is stored in a string style -"variable"_variable.html, the name of which must be given as the first -argument of the kim_query command. The second required argument is the -name of the actual query function (e.g. {get_test_result}). All following -arguments are parameters handed over to the web query in the format -{keyword=value}. The list of supported keywords and the type of how -the value has to be encoded depends on the query function used. This -mirrors the functionality available on the OpenKIM webpage at -"https://query.openkim.org"_https://query.openkim.org/ - -[Restrictions:] - -This command is part of the KIM package. It is only enabled if -LAMMPS was built with that package. Furthermore, its correct -functioning depends on compiling LAMMPS with libcurl support. -See the "Build package"_Build_package.html doc page for more info. - -[Related commands:] - -"pair_style kim"_pair_kim.html, "kim_style"_kim_style.html, -"variable"_variable.html diff --git a/doc/src/kim_style.txt b/doc/src/kim_style.txt deleted file mode 100644 index c24cfe8581..0000000000 --- a/doc/src/kim_style.txt +++ /dev/null @@ -1,107 +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 - -kim_style command :h3 - -[Syntax:] - -kim_style mode args :pre - -mode = {init model} or {define typeargs} or no mode chosen -model = name of the KIM model (KIM potential or KIM simulator model) -typeargs = atom type to species mapping (one entry per atom type) -args = {unit_variables unit_style} or {unit_from unit_style} (optional):ul - -[Examples:] - -kim_style init ex_sim_model_Si_mod_tersoff unit_variables metal -kim_style define Si Si -kim_style unit_variables real -kim_style init LennardJones_Ar unit_variables metal -kim_style unit_variables real unit_from metal -kim_style define Ar :pre - -[Description:] - -The kim_style command is a high-level wrapper around the -"Knowledge Base for Interatomic Models (OpenKIM)"_https://openkim.org -repository of interatomic potentials, so that they can be used by -LAMMPS scripts. It does not implement any computations directly, but -rather will generate LAMMPS input commands based on the information -retrieved from the OpenKIM repository. It is able to realize so-called -"KIM Simulator Models", which are OpenKIM repository entries of models -using native features of the simulation engine in use, i.e. LAMMPS -in this case, but it also supports realizing conventional KIM models -implicitly via generating a "pair_style kim"_pair_kim.html command -followed by a suitable "pair_coeff"_pair_coeff.html command. - -The kim_style command has two modes, {init} and {define}, indicated by -the first argument to the kim_style command. An {init} mode command -must be issued [before] the simulation box is created, while the {define} -mode version may only be used [after] the simulation box exists. Both -are required. The {init} mode version sets the model name and may issue -additional commands changing LAMMPS default settings that are required -for using a selected simulator model. If needed, those settings can be -overridden. The second argument to the {kim_style init} command is the -KIM model ID. - -In both modes, the keywords {unit_variables} and {unit_from} may be -added. They control the values of a set of -"internal style variables"_variable.html that can be used to convert -between different unit styles in LAMMPS. The argument to -each keyword is a LAMMPS unit style or NULL, which means to look up -the unit style from what was set with the "units"_units.html command. -Please note, that KIM simulator models will set their preferred unit style. -By default all conversion variables are set to 1.0. Converting to or -from the "lj" unit style is not supported. The following variables are defined: - -_u_length -_u_mass -_u_time :ul - - -The {kim_style define} command will issue commands that will realize -the selected model (through generating pair_style and pair_coeff commands, -but also other commands, as required). It has to be issued [after] the -the simulation box is defined. The {kim_style define} command allows a -varying number of additional arguments. Those are used to map the atom -types in LAMMPS to the available species in the KIM model. This is -equivalent to the arguments following "pair_coeff * *" in a -"kim"_pair_kim.html pair style. Thus the commands: - -kim_style init LennardJones_Ar -kim_style define Ar :pre - -will generate the LAMMPS input commands: - -pair_style kim LennardJones_Ar -pair_coeff * * Ar :pre - -For simulator models, the generated input commands may be more complex -and require that LAMMPS is built with the required packages included. -The commands generated by the kim_style command, can be copied to the -screen or log file, through the "echo"_echo.html command. -The kim_style command will also validate, that a selected simulator -model was generated for the LAMMPS MD code and not some other software. -In addition, the version strings for LAMMPS version used for defining -the simulator model and the LAMMPS version being currently run are -printed, so that it can be tracked down, if there are any incompatible -changes to input script or command syntax between the two LAMMPS versions. - -[Restrictions:] - -This command is part of the KIM package. It is only enabled if -LAMMPS was built with that package. Furthermore, its correct -functioning depends on compiling LAMMPS with all required packages -installed that are required by the commands embedded in any KIM -simulator models used. -See the "Build package"_Build_package.html doc page for more info. - -[Related commands:] - -"pair_style kim"_pair_kim.html, "kim_query"_kim_query.html From ac82aa754b583886e193471bc042635c9c82955c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 13:13:05 -0400 Subject: [PATCH 292/760] correct off-by-one error and simplify code by using std::string instead of std::stringstream --- src/KIM/kim_init.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index 695db0aa0d..6339f7397e 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -246,7 +246,7 @@ void KimInit::determine_model_type_and_units(char * model_name, if (*sim_field == "units") { kim_SM->GetSimulatorFieldLine(i,0,&sim_value); - int len=(*sim_value).length(); + int len=(*sim_value).length()+1; *model_units = new char[len]; strcpy(*model_units,sim_value->c_str()); break; } @@ -414,15 +414,16 @@ void KimInit::do_variables(char *user_units, char *model_units) (char *)"density"}; if (comm->me == 0) { - std::stringstream mesg; - mesg << "# Conversion factors from " << from << " to " << to - << ":" << std::endl; - if (screen) fputs(mesg.str().c_str(),screen); - if (logfile) fputs(mesg.str().c_str(),logfile); + std::string mesg("# Conversion factors from "); + mesg += from; + mesg += " to "; + mesg += to; + mesg += ":\n"; + if (screen) fputs(mesg.c_str(),screen); + if (logfile) fputs(mesg.c_str(),logfile); } - for (int i = 0; i < nunits; i++) - { + for (int i = 0; i < nunits; i++) { var_str = std::string("_u_") + std::string(units[i]); args[0] = (char *)var_str.c_str(); v_unit = variable->find(args[0]); From c557c7492b4ce0ab90ca80e2ba6c100b9a83c825 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 13:31:12 -0400 Subject: [PATCH 293/760] adapt names of stored properties to code that uses fix STORE/KIM --- src/KIM/fix_store_kim.cpp | 43 ++++++++++++++++++--------------------- src/KIM/fix_store_kim.h | 4 ++-- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/KIM/fix_store_kim.cpp b/src/KIM/fix_store_kim.cpp index 6423a57e18..8209a6d13e 100644 --- a/src/KIM/fix_store_kim.cpp +++ b/src/KIM/fix_store_kim.cpp @@ -66,7 +66,7 @@ using namespace FixConst; FixStoreKIM::FixStoreKIM(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), simulator_model(NULL), model_name(NULL), - units_from(NULL), units_to(NULL) + model_units(NULL), user_units(NULL) { if (narg != 3) error->all(FLERR,"Illegal fix STORE/KIM command"); } @@ -89,16 +89,15 @@ FixStoreKIM::~FixStoreKIM() model_name = NULL; } - if (units_from) { - char *uf = (char *)units_from; - delete[] uf; - units_from = NULL; + if (model_units) { + char *mu = (char *)model_units; + delete[] mu; + model_units = NULL; } - - if (units_to) { - char *ut = (char *)units_to; - delete[] ut; - units_to = NULL; + if (user_units) { + char *uu = (char *)user_units; + delete[] uu; + user_units = NULL; } } @@ -127,19 +126,17 @@ void FixStoreKIM::setptr(const char *name, void *ptr) delete[] mn; } model_name = ptr; - } else if (strcmp(name,"units_from") == 0) { - if (units_from) { - char *uf = (char *)units_from; - delete[] uf; + } else if (strcmp(name,"model_units") == 0) { + if (model_units) { + char *mu = (char *)model_units; + delete[] mu; } - units_from = ptr; - } else if (strcmp(name,"units_to") == 0) { - if (units_to) { - char *ut = (char *)units_to; - delete[] ut; + } else if (strcmp(name,"user_units") == 0) { + if (user_units) { + char *uu = (char *)user_units; + delete[] uu; } - units_to = ptr; - } + } else error->all(FLERR,"Unknown property in fix STORE/KIM"); } /* ---------------------------------------------------------------------- */ @@ -148,7 +145,7 @@ void *FixStoreKIM::getptr(const char *name) { if (strcmp(name,"simulator_model") == 0) return simulator_model; else if (strcmp(name,"model_name") == 0) return model_name; - else if (strcmp(name,"units_from") == 0) return units_from; - else if (strcmp(name,"units_to") == 0) return units_to; + else if (strcmp(name,"model_units") == 0) return model_units; + else if (strcmp(name,"user_units") == 0) return user_units; else return NULL; } diff --git a/src/KIM/fix_store_kim.h b/src/KIM/fix_store_kim.h index 5bca2a3dd0..655be83ad0 100644 --- a/src/KIM/fix_store_kim.h +++ b/src/KIM/fix_store_kim.h @@ -80,8 +80,8 @@ class FixStoreKIM : public Fix { private: void *simulator_model; // pointer to KIM simulator model class void *model_name; // string of KIM model name - void *units_from; // string of unit conversion origin or NULL - void *units_to; // string of unit conversion target or NULL + void *model_units; // string of unit conversion origin or NULL + void *user_units; // string of unit conversion target or NULL }; } From 065638edba999ab91b078e089b807d58c205b6ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 13:31:43 -0400 Subject: [PATCH 294/760] remove unused macro and reformat to closer match LAMMPS programming style --- src/KIM/kim_init.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index 6339f7397e..0d8849c51c 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -79,10 +79,6 @@ extern "C" { #include "KIM_SimulatorModel.hpp" //@@@@@ -#define SNUM(x) \ - static_cast(std::ostringstream() \ - << std::dec << x).str() - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -187,14 +183,11 @@ void KimInit::determine_model_type_and_units(char * model_name, model_type = MO; KIM_Model_Destroy(&kim_MO); - if (units_accepted) - { + if (units_accepted) { int len=strlen(user_units); *model_units = new char[len]; strcpy(*model_units,user_units); return; - } - else if (unit_conversion_mode) - { + } else if (unit_conversion_mode) { int const num_systems = 5; char const * const systems[num_systems] = {"metal", "real", "si", "cgs", "electron"}; From 27d1f79fe37e5ba2153590731092997d0bdf9890 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 13:39:12 -0400 Subject: [PATCH 295/760] simplify another case of stringstream to use plain std::string --- src/KIM/kim_init.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index 0d8849c51c..1ca55d7adc 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -246,12 +246,11 @@ void KimInit::determine_model_type_and_units(char * model_name, } KIM::SimulatorModel::Destroy(&kim_SM); - if ((! unit_conversion_mode) && (strcmp(*model_units, user_units)!=0)) - { - std::stringstream mesg; - mesg << "Incompatible units for KIM Simulator Model, required units = " - << *model_units; - error->all(FLERR,mesg.str().c_str()); + if ((! unit_conversion_mode) && (strcmp(*model_units, user_units)!=0)) { + std::string mesg("Incompatible units for KIM Simulator Model, " + "required units = "); + mesg += *model_units; + error->all(FLERR,mesg.c_str()); } } From c6d0f807b569bdf6ab6e9ed0665ca81d80f1d3d5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 14:13:24 -0400 Subject: [PATCH 296/760] output messages that would otherwise only show up in logs only when logs are enable for screen or logfile --- src/KIM/kim_init.cpp | 16 ++++++++-------- src/KIM/kim_interactions.cpp | 4 ++-- src/input.h | 6 ++++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index 1ca55d7adc..ce1b944792 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -363,8 +363,8 @@ void KimInit::kim_init_log_delimiter(std::string const begin_end) const mesg = "#=== END kim-init ============================================\n\n"; - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); + if ((screen) && (input->echo_screen)) fputs(mesg.c_str(),screen); + if ((logfile) && (input->echo_log)) fputs(mesg.c_str(),logfile); } } @@ -411,8 +411,8 @@ void KimInit::do_variables(char *user_units, char *model_units) mesg += " to "; mesg += to; mesg += ":\n"; - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); + if ((screen) && (input->echo_screen)) fputs(mesg.c_str(),screen); + if ((logfile) && (input->echo_log)) fputs(mesg.c_str(),logfile); } for (int i = 0; i < nunits; i++) { @@ -441,12 +441,12 @@ void KimInit::do_variables(char *user_units, char *model_units) << " internal " << std::setprecision(12) << std::scientific << conversion_factor << std::endl; - if (screen) fputs(mesg.str().c_str(),screen); - if (logfile) fputs(mesg.str().c_str(),logfile); + if ((screen) && (input->echo_screen)) fputs(mesg.str().c_str(),screen); + if ((logfile) && (input->echo_log)) fputs(mesg.str().c_str(),logfile); } } if (comm->me == 0) { - if (screen) fputs("#\n",screen); - if (logfile) fputs("#\n",logfile); + if ((screen) && (input->echo_screen)) fputs("#\n",screen); + if ((logfile) && (input->echo_log)) fputs("#\n",logfile); } } diff --git a/src/KIM/kim_interactions.cpp b/src/KIM/kim_interactions.cpp index 491d406ae6..4771272ff8 100644 --- a/src/KIM/kim_interactions.cpp +++ b/src/KIM/kim_interactions.cpp @@ -109,8 +109,8 @@ void KimInteractions::kim_interactions_log_delimiter( mesg = "#=== END kim_interactions ====================================\n\n"; - if (screen) fputs(mesg.c_str(),screen); - if (logfile) fputs(mesg.c_str(),logfile); + if ((screen) && (input->echo_screen)) fputs(mesg.c_str(),screen); + if ((logfile) && (input->echo_log)) fputs(mesg.c_str(),logfile); } } diff --git a/src/input.h b/src/input.h index 47ad7779f1..ebd015619c 100644 --- a/src/input.h +++ b/src/input.h @@ -25,6 +25,8 @@ class Input : protected Pointers { friend class Info; friend class Error; friend class Deprecated; + friend class KimInit; + friend class KimInteractions; public: int narg; // # of command args @@ -42,14 +44,14 @@ class Input : protected Pointers { protected: char *command; // ptr to current command + int echo_screen; // 0 = no, 1 = yes + int echo_log; // 0 = no, 1 = yes private: int me; // proc ID int maxarg; // max # of args in arg char *line,*copy,*work; // input line & copy and work string int maxline,maxcopy,maxwork; // max lengths of char strings - int echo_screen; // 0 = no, 1 = yes - int echo_log; // 0 = no, 1 = yes int nfile,maxfile; // current # and max # of open input files int label_active; // 0 = no label, 1 = looking for label char *labelstr; // label string being looked for From 3b6cc29f64a201f3a9083ed1a62e49e35ef3f46f Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Sun, 23 Jun 2019 20:16:25 +0200 Subject: [PATCH 297/760] Implementation of inner/middle/outer compute methods for lj/class2/coul/long --- src/CLASS2/pair_lj_class2_coul_long.cpp | 412 +++++++++++++++++++++++- src/CLASS2/pair_lj_class2_coul_long.h | 21 +- 2 files changed, 416 insertions(+), 17 deletions(-) diff --git a/src/CLASS2/pair_lj_class2_coul_long.cpp b/src/CLASS2/pair_lj_class2_coul_long.cpp index 85fe0152e2..7bc67a5afa 100644 --- a/src/CLASS2/pair_lj_class2_coul_long.cpp +++ b/src/CLASS2/pair_lj_class2_coul_long.cpp @@ -2,12 +2,10 @@ 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. ------------------------------------------------------------------------- */ @@ -20,8 +18,12 @@ #include "comm.h" #include "force.h" #include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" #include "neighbor.h" #include "neigh_list.h" +#include "neigh_request.h" #include "math_const.h" #include "memory.h" #include "error.h" @@ -42,6 +44,7 @@ using namespace MathConst; PairLJClass2CoulLong::PairLJClass2CoulLong(LAMMPS *lmp) : Pair(lmp) { ewaldflag = pppmflag = 1; + respa_enable = 1; writedata = 1; ftable = NULL; } @@ -196,6 +199,377 @@ void PairLJClass2CoulLong::compute(int eflag, int vflag) if (vflag_fdotr) virial_fdotr_compute(); } +/* ---------------------------------------------------------------------- */ + +void PairLJClass2CoulLong::compute_inner() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + 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]; + qtmp = q[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]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[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; + forcecoul = qqrd2e * qtmp*q[j]*sqrt(r2inv); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*forcecoul; + + jtype = type[j]; + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else forcelj = 0.0; + + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + 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 PairLJClass2CoulLong::compute_middle() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + 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]; + qtmp = q[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]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[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; + forcecoul = qqrd2e * qtmp*q[j]*sqrt(r2inv); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*forcecoul; + + jtype = type[j]; + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else forcelj = 0.0; + + fpair = (forcecoul + 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 PairLJClass2CoulLong::compute_outer(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype,itable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair; + double fraction,table; + double r,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double grij,expm2,prefactor,t,erfc; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq; + + evdwl = ecoul = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + 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]; + qtmp = q[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]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[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; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + 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; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - 1.0); + if (rsq > cut_in_off_sq) { + if (rsq < cut_in_on_sq) { + rsw = (r - cut_in_off)/cut_in_diff; + forcecoul += prefactor*rsw*rsw*(3.0 - 2.0*rsw); + if (factor_coul < 1.0) + forcecoul -= + (1.0-factor_coul)*prefactor*rsw*rsw*(3.0 - 2.0*rsw); + } else { + forcecoul += prefactor; + if (factor_coul < 1.0) + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype] && rsq > cut_in_off_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + forcelj *= rsw*rsw*(3.0 - 2.0*rsw); + } + } else forcelj = 0.0; + + fpair = (forcecoul + 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) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + ecoul = prefactor*erfc; + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ptable[itable] + fraction*dptable[itable]; + prefactor = qtmp*q[j] * table; + ecoul -= (1.0-factor_coul)*prefactor; + } + } + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } else evdwl = 0.0; + } + + if (vflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + table = vtable[itable] + fraction*dvtable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ptable[itable] + fraction*dptable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq <= cut_in_off_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else if (rsq <= cut_in_on_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } +} + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ @@ -289,10 +663,33 @@ void PairLJClass2CoulLong::init_style() if (!atom->q_flag) error->all(FLERR, "Pair style lj/class2/coul/long requires atom attribute q"); - - neighbor->request(this,instance_me); + + // 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; cut_coulsq = cut_coul * cut_coul; + + // 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; // insure use of KSpace long-range solver, set g_ewald @@ -301,7 +698,7 @@ void PairLJClass2CoulLong::init_style() g_ewald = force->kspace->g_ewald; // setup force tables - if (ncoultablebits) init_tables(cut_coul,NULL); + if (ncoultablebits) init_tables(cut_coul,cut_respa); } /* ---------------------------------------------------------------------- @@ -341,6 +738,11 @@ double PairLJClass2CoulLong::init_one(int i, int 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 && MIN(cut_lj[i][j],cut_coul) < 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 diff --git a/src/CLASS2/pair_lj_class2_coul_long.h b/src/CLASS2/pair_lj_class2_coul_long.h index 202aaaaa43..447191ea1f 100644 --- a/src/CLASS2/pair_lj_class2_coul_long.h +++ b/src/CLASS2/pair_lj_class2_coul_long.h @@ -2,12 +2,10 @@ 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. ------------------------------------------------------------------------- */ @@ -31,7 +29,7 @@ class PairLJClass2CoulLong : public Pair { virtual void compute(int, int); virtual void settings(int, char **); void coeff(int, char **); - virtual void init_style(); + void init_style(); virtual double init_one(int, int); void write_restart(FILE *); void read_restart(FILE *); @@ -40,6 +38,10 @@ class PairLJClass2CoulLong : public Pair { void write_data(FILE *); void write_data_all(FILE *); double single(int, int, int, int, double, double, double, double &); + + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); void *extract(const char *, int &); protected: @@ -49,6 +51,7 @@ class PairLJClass2CoulLong : public Pair { double **epsilon,**sigma; double **lj1,**lj2,**lj3,**lj4,**offset; double g_ewald; + double *cut_respa; virtual void allocate(); }; @@ -59,23 +62,17 @@ class PairLJClass2CoulLong : public Pair { #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 style lj/class2/coul/long requires atom attribute q - The atom style defined does not have this attribute. - E: Pair style requires a KSpace style - No kspace style is defined. - +E: Pair cutoff < Respa interior cutoff +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. */ From 493269431c354d5177a10acaec2b94c3aed18b67 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 14:16:38 -0400 Subject: [PATCH 298/760] add a few more false positives --- doc/utils/sphinx-config/false_positives.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6a75f0555a..5ea7388cd6 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -570,6 +570,7 @@ Dihedrals dihydride Dij dimdim +dimensioned dimensionality dimgray dipolar @@ -599,6 +600,7 @@ Dobson Dodds dodgerblue dof +doi Donadio dotc Doty @@ -749,6 +751,7 @@ equilibrating equilibration Equilibria equilization +Ercolessi eradius erate erc @@ -2243,6 +2246,7 @@ quati quatj quatk quatw +queryargs Queteschiner qw qx From f31faafeec77fafddacf3b716ca7fc7ae37b3bbe Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Sun, 23 Jun 2019 20:18:39 +0200 Subject: [PATCH 299/760] modification in the doc file of lj/class2 style --- doc/src/pair_class2.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_class2.txt b/doc/src/pair_class2.txt index 2d6b325fed..9e25560071 100644 --- a/doc/src/pair_class2.txt +++ b/doc/src/pair_class2.txt @@ -155,7 +155,7 @@ 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. -Only the {lj/class2} pair style support the use of the +Only the {lj/class2} and {lj/class2/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. From b2ba0550d70d6829fa3b2b40a86025e2faf95a2e Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 23 Jun 2019 13:18:57 -0500 Subject: [PATCH 300/760] Some minor typo fixes in kim_commands.txt --- doc/src/kim_commands.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 2e94271763..e51aec5dc7 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -71,7 +71,7 @@ Types of KIM IMs :h4 There are two types of IMs archived in OpenKIM: -The first type is called a {KIM Model}. A KIM Model is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran, Python), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that support the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). +The first type is called a {KIM Model}. A KIM Model is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that supports the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). The second type is called a {KIM Simulator Model} (SM). In this case, the IM is implemented natively within the simulation code ({simulator}), i.e. LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol With these two IM types, OpenKIM can archive and test almost all IMs that @@ -212,13 +212,13 @@ The second and final step in using an OpenKIM IM is to execute the {kim_interactions} command. This command must be preceded by a {kim_init} command and a "create_box"_create_box.html command, which defines the number of atom types {N}. -The {kim_interaction} command has one argument {typeargs}. This argument +The {kim_interactions} command has one argument {typeargs}. This argument contains a list of {N} chemical species, which defines a mapping between atom types in LAMMPS to the available species in the OpenKIM IM. For example, consider an OpenKIM IM that supports Si and C species. If the LAMMPS simulation has four atom types, where the first three are Si, -and the fourth is C, the following {kim_interaction} command would be used: +and the fourth is C, the following {kim_interactions} command would be used: kim_interactions Si Si Si C :pre @@ -376,4 +376,3 @@ doi: "https://doi.org/10.1007/s11837-011-0102-6"_https://doi.org/10.1007/s11837- :link(kim-api) [(Elliott)] Elliott, Tadmor and Bernstein, "https://openkim.org/kim-api"_https://openkim.org/kim-api (2011) doi: "https://doi.org/10.25950/FF8F563A"_https://doi.org/10.25950/FF8F563A - From e42e1e64a894e7b52c3c75a8b830918819cfdafa Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 14:50:52 -0500 Subject: [PATCH 301/760] Added explanation on Model and SM pages --- doc/src/kim_commands.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index e51aec5dc7..5a50a76879 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -90,6 +90,24 @@ By convention SM prefixes begin with {Sim_} to readily identify them. SW_StillingerWeber_1985_Si__MO_405512056662_005 Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 :pre +Each OpenKIM IM has a dedicated page on "OpenKIM"_https://openkim.org +providing all the information on the IM including a title, description, +authorship and citation information, test and verification check results, +visualizations of results, a wiki with documentation and user comments, and +access to raw files, and other information. +This is referred to as the "Model Page" or "SM Page". +The URL for such a page is constructed from the +"extended KIM ID"_https://openkim.org/about-kim-ids/ of the IM: + +https://openkim.org/id/extended_KIM_ID +:pre + +For example for the Stillinger-Weber potential +listed above the Model Page is located at: + +"https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005"_https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005 +:pre + NOTE: It is also possible to locally install IMs not archived in OpenKIM, in which case their names do not have to conform to the KIM ID format. From 171d74f2f277896ee7e45a85d5aac775d0a06e3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 16:43:54 -0400 Subject: [PATCH 302/760] remove class member name clashes. Pointers contains `infile` so we rename other uses to `inpfile` --- src/MISC/fix_orient_bcc.cpp | 16 ++++++------- src/MISC/fix_orient_fcc.cpp | 16 ++++++------- src/REPLICA/neb.cpp | 8 +++---- src/REPLICA/neb.h | 2 +- src/RIGID/fix_rigid.cpp | 42 +++++++++++++++++------------------ src/RIGID/fix_rigid.h | 4 ++-- src/RIGID/fix_rigid_small.cpp | 42 +++++++++++++++++------------------ src/RIGID/fix_rigid_small.h | 4 ++-- src/SPIN/neb_spin.cpp | 8 +++---- src/SPIN/neb_spin.h | 2 +- src/read_restart.cpp | 28 +++++++++++------------ 11 files changed, 86 insertions(+), 86 deletions(-) diff --git a/src/MISC/fix_orient_bcc.cpp b/src/MISC/fix_orient_bcc.cpp index c614577933..02cce5a014 100644 --- a/src/MISC/fix_orient_bcc.cpp +++ b/src/MISC/fix_orient_bcc.cpp @@ -115,25 +115,25 @@ FixOrientBCC::FixOrientBCC(LAMMPS *lmp, int narg, char **arg) : char *result; int count; - FILE *infile = fopen(xifilename,"r"); - if (infile == NULL) error->one(FLERR,"Fix orient/bcc file open failed"); + FILE *inpfile = fopen(xifilename,"r"); + if (inpfile == NULL) error->one(FLERR,"Fix orient/bcc file open failed"); for (int i = 0; i < 4; i++) { - result = fgets(line,IMGMAX,infile); + result = fgets(line,IMGMAX,inpfile); if (!result) error->one(FLERR,"Fix orient/bcc file read failed"); count = sscanf(line,"%lg %lg %lg",&Rxi[i][0],&Rxi[i][1],&Rxi[i][2]); if (count != 3) error->one(FLERR,"Fix orient/bcc file read failed"); } - fclose(infile); + fclose(inpfile); - infile = fopen(chifilename,"r"); - if (infile == NULL) error->one(FLERR,"Fix orient/bcc file open failed"); + inpfile = fopen(chifilename,"r"); + if (inpfile == NULL) error->one(FLERR,"Fix orient/bcc file open failed"); for (int i = 0; i < 4; i++) { - result = fgets(line,IMGMAX,infile); + result = fgets(line,IMGMAX,inpfile); if (!result) error->one(FLERR,"Fix orient/bcc file read failed"); count = sscanf(line,"%lg %lg %lg",&Rchi[i][0],&Rchi[i][1],&Rchi[i][2]); if (count != 3) error->one(FLERR,"Fix orient/bcc file read failed"); } - fclose(infile); + fclose(inpfile); } MPI_Bcast(&Rxi[0][0],18,MPI_DOUBLE,0,world); diff --git a/src/MISC/fix_orient_fcc.cpp b/src/MISC/fix_orient_fcc.cpp index 5b394adde7..fc827ceb8f 100644 --- a/src/MISC/fix_orient_fcc.cpp +++ b/src/MISC/fix_orient_fcc.cpp @@ -113,25 +113,25 @@ FixOrientFCC::FixOrientFCC(LAMMPS *lmp, int narg, char **arg) : char *result; int count; - FILE *infile = fopen(xifilename,"r"); - if (infile == NULL) error->one(FLERR,"Fix orient/fcc file open failed"); + FILE *inpfile = fopen(xifilename,"r"); + if (inpfile == NULL) error->one(FLERR,"Fix orient/fcc file open failed"); for (int i = 0; i < 6; i++) { - result = fgets(line,IMGMAX,infile); + result = fgets(line,IMGMAX,inpfile); if (!result) error->one(FLERR,"Fix orient/fcc file read failed"); count = sscanf(line,"%lg %lg %lg",&Rxi[i][0],&Rxi[i][1],&Rxi[i][2]); if (count != 3) error->one(FLERR,"Fix orient/fcc file read failed"); } - fclose(infile); + fclose(inpfile); - infile = fopen(chifilename,"r"); - if (infile == NULL) error->one(FLERR,"Fix orient/fcc file open failed"); + inpfile = fopen(chifilename,"r"); + if (inpfile == NULL) error->one(FLERR,"Fix orient/fcc file open failed"); for (int i = 0; i < 6; i++) { - result = fgets(line,IMGMAX,infile); + result = fgets(line,IMGMAX,inpfile); if (!result) error->one(FLERR,"Fix orient/fcc file read failed"); count = sscanf(line,"%lg %lg %lg",&Rchi[i][0],&Rchi[i][1],&Rchi[i][2]); if (count != 3) error->one(FLERR,"Fix orient/fcc file read failed"); } - fclose(infile); + fclose(inpfile); } MPI_Bcast(&Rxi[0][0],18,MPI_DOUBLE,0,world); diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index 3963379356..6b68c52dbb 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -146,12 +146,12 @@ void NEB::command(int narg, char **arg) if (strcmp(arg[5],"final") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB command"); - infile = arg[6]; - readfile(infile,0); + inpfile = arg[6]; + readfile(inpfile,0); } else if (strcmp(arg[5],"each") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB command"); - infile = arg[6]; - readfile(infile,1); + inpfile = arg[6]; + readfile(inpfile,1); } else if (strcmp(arg[5],"none") == 0) { if (narg != 6 && narg !=7) error->universe_all(FLERR,"Illegal NEB command"); } else error->universe_all(FLERR,"Illegal NEB command"); diff --git a/src/REPLICA/neb.h b/src/REPLICA/neb.h index 9453c3c43b..f585a0c8a7 100644 --- a/src/REPLICA/neb.h +++ b/src/REPLICA/neb.h @@ -47,7 +47,7 @@ class NEB : protected Pointers { double ftol; // force tolerance convergence criterion int n1steps, n2steps; // number of steps in stage 1 and 2 int nevery; // output interval - char *infile; // name of file containing final state + char *inpfile; // name of file containing final state class FixNEB *fneb; int numall; // per-replica dimension of array all diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 8fa43b89ce..abb669bc02 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -59,7 +59,7 @@ enum{ISO,ANISO,TRICLINIC}; FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), step_respa(NULL), - infile(NULL), nrigid(NULL), mol2body(NULL), body2mol(NULL), + inpfile(NULL), nrigid(NULL), mol2body(NULL), body2mol(NULL), body(NULL), displace(NULL), masstotal(NULL), xcm(NULL), vcm(NULL), fcm(NULL), inertia(NULL), ex_space(NULL), ey_space(NULL), ez_space(NULL), angmom(NULL), omega(NULL), @@ -327,7 +327,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : t_iter = 1; t_order = 3; p_chain = 10; - infile = NULL; + inpfile = NULL; pcouple = NONE; pstyle = ANISO; @@ -546,12 +546,12 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : p_chain = force->inumeric(FLERR,arg[iarg+1]); iarg += 2; - } else if (strcmp(arg[iarg],"infile") == 0) { + } else if (strcmp(arg[iarg],"inpfile") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); - delete [] infile; + delete [] inpfile; int n = strlen(arg[iarg+1]) + 1; - infile = new char[n]; - strcpy(infile,arg[iarg+1]); + inpfile = new char[n]; + strcpy(inpfile,arg[iarg+1]); restart_file = 1; reinitflag = 0; iarg += 2; @@ -649,7 +649,7 @@ FixRigid::~FixRigid() atom->delete_callback(id,0); delete random; - delete [] infile; + delete [] inpfile; memory->destroy(mol2body); memory->destroy(body2mol); @@ -760,14 +760,14 @@ void FixRigid::init() // setup rigid bodies, using current atom info. if reinitflag is not set, // do the initialization only once, b/c properties may not be re-computable // especially if overlapping particles. - // do not do dynamic init if read body properties from infile. - // this is b/c the infile defines the static and dynamic properties and may + // do not do dynamic init if read body properties from inpfile. + // this is b/c the inpfile defines the static and dynamic properties and may // not be computable if contain overlapping particles. - // setup_bodies_static() reads infile itself + // setup_bodies_static() reads inpfile itself if (reinitflag || !setupflag) { setup_bodies_static(); - if (!infile) setup_bodies_dynamic(); + if (!inpfile) setup_bodies_dynamic(); setupflag = 1; } @@ -1640,7 +1640,7 @@ void FixRigid::set_v() sets extended flags, masstotal, center-of-mass sets Cartesian and diagonalized inertia tensor sets body image flags - may read some properties from infile + may read some properties from inpfile ------------------------------------------------------------------------- */ void FixRigid::setup_bodies_static() @@ -1791,7 +1791,7 @@ void FixRigid::setup_bodies_static() xcm[ibody][2] = all[ibody][2]/masstotal[ibody]; } - // set vcm, angmom = 0.0 in case infile is used + // set vcm, angmom = 0.0 in case inpfile is used // and doesn't overwrite all body's values // since setup_bodies_dynamic() will not be called @@ -1810,7 +1810,7 @@ void FixRigid::setup_bodies_static() // inbody[i] = 0/1 if Ith rigid body is initialized by file int *inbody; - if (infile) { + if (inpfile) { memory->create(inbody,nbody,"rigid:inbody"); for (ibody = 0; ibody < nbody; ibody++) inbody[ibody] = 0; readfile(0,masstotal,xcm,vcm,angmom,imagebody,inbody); @@ -1918,7 +1918,7 @@ void FixRigid::setup_bodies_static() // overwrite Cartesian inertia tensor with file values - if (infile) readfile(1,NULL,all,NULL,NULL,NULL,inbody); + if (inpfile) readfile(1,NULL,all,NULL,NULL,NULL,inbody); // diagonalize inertia tensor for each body via Jacobi rotations // inertia = 3 eigenvalues = principal moments of inertia @@ -2116,11 +2116,11 @@ void FixRigid::setup_bodies_static() MPI_Allreduce(sum[0],all[0],6*nbody,MPI_DOUBLE,MPI_SUM,world); // error check that re-computed moments of inertia match diagonalized ones - // do not do test for bodies with params read from infile + // do not do test for bodies with params read from inpfile double norm; for (ibody = 0; ibody < nbody; ibody++) { - if (infile && inbody[ibody]) continue; + if (inpfile && inbody[ibody]) continue; if (inertia[ibody][0] == 0.0) { if (fabs(all[ibody][0]) > TOLERANCE) error->all(FLERR,"Fix rigid: Bad principal moments"); @@ -2149,7 +2149,7 @@ void FixRigid::setup_bodies_static() error->all(FLERR,"Fix rigid: Bad principal moments"); } - if (infile) memory->destroy(inbody); + if (inpfile) memory->destroy(inbody); } /* ---------------------------------------------------------------------- @@ -2268,10 +2268,10 @@ void FixRigid::readfile(int which, double *vec, char line[MAXLINE]; if (me == 0) { - fp = fopen(infile,"r"); + fp = fopen(inpfile,"r"); if (fp == NULL) { char str[128]; - snprintf(str,128,"Cannot open fix rigid infile %s",infile); + snprintf(str,128,"Cannot open fix rigid inpfile %s",inpfile); error->one(FLERR,str); } @@ -2371,7 +2371,7 @@ void FixRigid::readfile(int which, double *vec, /* ---------------------------------------------------------------------- write out restart info for mass, COM, inertia tensor, image flags to file - identical format to infile option, so info can be read in when restarting + identical format to inpfile option, so info can be read in when restarting only proc 0 writes list of global bodies to file ------------------------------------------------------------------------- */ diff --git a/src/RIGID/fix_rigid.h b/src/RIGID/fix_rigid.h index 507e4c7553..d9d7b07ce8 100644 --- a/src/RIGID/fix_rigid.h +++ b/src/RIGID/fix_rigid.h @@ -67,7 +67,7 @@ class FixRigid : public Fix { int triclinic; double MINUSPI,TWOPI; - char *infile; // file to read rigid body attributes from + char *inpfile; // file to read rigid body attributes from int rstyle; // SINGLE,MOLECULE,GROUP int setupflag; // 1 if body properties are setup, else 0 int earlyflag; // 1 if forces/torques computed at post_force() @@ -261,7 +261,7 @@ E: Fix rigid: Bad principal moments The principal moments of inertia computed for a rigid body are not within the required tolerances. -E: Cannot open fix rigid infile %s +E: Cannot open fix rigid inpfile %s The specified file cannot be opened. Check that the path and name are correct. diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 54fb83f0aa..dedd71c98d 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -70,7 +70,7 @@ enum{FULL_BODY,INITIAL,FINAL,FORCE_TORQUE,VCM_ANGMOM,XCM_MASS,ITENSOR,DOF}; FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), step_respa(NULL), - infile(NULL), body(NULL), bodyown(NULL), bodytag(NULL), atom2body(NULL), + inpfile(NULL), body(NULL), bodyown(NULL), bodytag(NULL), atom2body(NULL), xcmimage(NULL), displace(NULL), eflags(NULL), orient(NULL), dorient(NULL), avec_ellipsoid(NULL), avec_line(NULL), avec_tri(NULL), counts(NULL), itensor(NULL), mass_body(NULL), langextra(NULL), random(NULL), @@ -191,7 +191,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : int seed; langflag = 0; - infile = NULL; + inpfile = NULL; onemols = NULL; reinitflag = 1; @@ -232,12 +232,12 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : if (seed <= 0) error->all(FLERR,"Illegal fix rigid/small command"); iarg += 5; - } else if (strcmp(arg[iarg],"infile") == 0) { + } else if (strcmp(arg[iarg],"inpfile") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); - delete [] infile; + delete [] inpfile; int n = strlen(arg[iarg+1]) + 1; - infile = new char[n]; - strcpy(infile,arg[iarg+1]); + inpfile = new char[n]; + strcpy(inpfile,arg[iarg+1]); restart_file = 1; reinitflag = 0; iarg += 2; @@ -546,7 +546,7 @@ FixRigidSmall::~FixRigidSmall() memory->destroy(dorient); delete random; - delete [] infile; + delete [] inpfile; memory->destroy(langextra); memory->destroy(mass_body); @@ -622,10 +622,10 @@ void FixRigidSmall::init() if reinitflag is not set, do the initialization only once, b/c properties may not be re-computable especially if overlapping particles or bodies are inserted from mol template. - do not do dynamic init if read body properties from infile. this - is b/c the infile defines the static and dynamic properties and may not + do not do dynamic init if read body properties from inpfile. this + is b/c the inpfile defines the static and dynamic properties and may not be computable if contain overlapping particles setup_bodies_static() - reads infile itself. + reads inpfile itself. cannot do this until now, b/c requires comm->setup() to have setup stencil invoke pre_neighbor() to insure body xcmimage flags are reset needed if Verlet::setup::pbc() has remapped/migrated atoms for 2nd run @@ -638,7 +638,7 @@ void FixRigidSmall::setup_pre_neighbor() setup_bodies_static(); else pre_neighbor(); - if ((reinitflag || !setupflag) && !infile) + if ((reinitflag || !setupflag) && !inpfile) setup_bodies_dynamic(); setupflag = 1; @@ -1775,7 +1775,7 @@ int FixRigidSmall::rendezvous_body(int n, char *inbuf, sets extended flags, masstotal, center-of-mass sets Cartesian and diagonalized inertia tensor sets body image flags - may read some properties from infile + may read some properties from inpfile ------------------------------------------------------------------------- */ void FixRigidSmall::setup_bodies_static() @@ -1932,7 +1932,7 @@ void FixRigidSmall::setup_bodies_static() xcm[2] /= body[ibody].mass; } - // set vcm, angmom = 0.0 in case infile is used + // set vcm, angmom = 0.0 in case inpfile is used // and doesn't overwrite all body's values // since setup_bodies_dynamic() will not be called @@ -1955,7 +1955,7 @@ void FixRigidSmall::setup_bodies_static() // inbody[i] = 0/1 if Ith rigid body is initialized by file int *inbody; - if (infile) { + if (inpfile) { memory->create(inbody,nlocal_body,"rigid/small:inbody"); for (ibody = 0; ibody < nlocal_body; ibody++) inbody[ibody] = 0; readfile(0,NULL,inbody); @@ -2058,7 +2058,7 @@ void FixRigidSmall::setup_bodies_static() // overwrite Cartesian inertia tensor with file values - if (infile) readfile(1,itensor,inbody); + if (inpfile) readfile(1,itensor,inbody); // diagonalize inertia tensor for each body via Jacobi rotations // inertia = 3 eigenvalues = principal moments of inertia @@ -2257,11 +2257,11 @@ void FixRigidSmall::setup_bodies_static() comm->reverse_comm_fix(this,6); // error check that re-computed moments of inertia match diagonalized ones - // do not do test for bodies with params read from infile + // do not do test for bodies with params read from inpfile double norm; for (ibody = 0; ibody < nlocal_body; ibody++) { - if (infile && inbody[ibody]) continue; + if (inpfile && inbody[ibody]) continue; inertia = body[ibody].inertia; if (inertia[0] == 0.0) { @@ -2295,7 +2295,7 @@ void FixRigidSmall::setup_bodies_static() // clean up memory->destroy(itensor); - if (infile) memory->destroy(inbody); + if (inpfile) memory->destroy(inbody); } /* ---------------------------------------------------------------------- @@ -2437,10 +2437,10 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) // open file and read header if (me == 0) { - fp = fopen(infile,"r"); + fp = fopen(inpfile,"r"); if (fp == NULL) { char str[128]; - snprintf(str,128,"Cannot open fix rigid/small infile %s",infile); + snprintf(str,128,"Cannot open fix rigid/small inpfile %s",inpfile); error->one(FLERR,str); } @@ -2538,7 +2538,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) /* ---------------------------------------------------------------------- write out restart info for mass, COM, inertia tensor to file - identical format to infile option, so info can be read in when restarting + identical format to inpfile option, so info can be read in when restarting each proc contributes info for rigid bodies it owns ------------------------------------------------------------------------- */ diff --git a/src/RIGID/fix_rigid_small.h b/src/RIGID/fix_rigid_small.h index b5a3d5208d..6dae443d1c 100644 --- a/src/RIGID/fix_rigid_small.h +++ b/src/RIGID/fix_rigid_small.h @@ -74,7 +74,7 @@ class FixRigidSmall : public Fix { int triclinic; double MINUSPI,TWOPI; - char *infile; // file to read rigid body attributes from + char *inpfile; // file to read rigid body attributes from int setupflag; // 1 if body properties are setup, else 0 int earlyflag; // 1 if forces/torques are computed at post_force() int commflag; // various modes of forward/reverse comm @@ -318,7 +318,7 @@ E: Fix rigid: Bad principal moments The principal moments of inertia computed for a rigid body are not within the required tolerances. -E: Cannot open fix rigid/small infile %s +E: Cannot open fix rigid/small inpfile %s The specified file cannot be opened. Check that the path and name are correct. diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 126cfb09e3..46a0541488 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -139,12 +139,12 @@ void NEBSpin::command(int narg, char **arg) if (strcmp(arg[5],"final") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEBSpin command"); - infile = arg[6]; - readfile(infile,0); + inpfile = arg[6]; + readfile(inpfile,0); } else if (strcmp(arg[5],"each") == 0) { if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEBSpin command"); - infile = arg[6]; - readfile(infile,1); + inpfile = arg[6]; + readfile(inpfile,1); } else if (strcmp(arg[5],"none") == 0) { if (narg != 6 && narg !=7) error->universe_all(FLERR,"Illegal NEBSpin command"); } else error->universe_all(FLERR,"Illegal NEBSpin command"); diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h index 5acd034e95..c128eaffa4 100644 --- a/src/SPIN/neb_spin.h +++ b/src/SPIN/neb_spin.h @@ -46,7 +46,7 @@ class NEBSpin : protected Pointers { double ttol; // torque tolerance convergence criterion int n1steps, n2steps; // number of steps in stage 1 and 2 int nevery; // output interval - char *infile; // name of file containing final state + char *inpfile; // name of file containing final state class FixNEBSpin *fneb; int numall; // per-replica dimension of array all diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 5aa4622a67..6e156da837 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -580,32 +580,32 @@ void ReadRestart::command(int narg, char **arg) } /* ---------------------------------------------------------------------- - infile contains a "*" - search for all files which match the infile pattern + inpfile contains a "*" + search for all files which match the inpfile pattern replace "*" with latest timestep value to create outfile name search dir referenced by initial pathname of file - if infile also contains "%", use "base" when searching directory + if inpfile also contains "%", use "base" when searching directory only called by proc 0 ------------------------------------------------------------------------- */ -void ReadRestart::file_search(char *infile, char *outfile) +void ReadRestart::file_search(char *inpfile, char *outfile) { char *ptr; - // separate infile into dir + filename + // separate inpfile into dir + filename - char *dirname = new char[strlen(infile) + 1]; - char *filename = new char[strlen(infile) + 1]; + char *dirname = new char[strlen(inpfile) + 1]; + char *filename = new char[strlen(inpfile) + 1]; - if (strchr(infile,'/')) { - ptr = strrchr(infile,'/'); + if (strchr(inpfile,'/')) { + ptr = strrchr(inpfile,'/'); *ptr = '\0'; - strcpy(dirname,infile); + strcpy(dirname,inpfile); strcpy(filename,ptr+1); *ptr = '/'; } else { strcpy(dirname,"./"); - strcpy(filename,infile); + strcpy(filename,inpfile); } // if filename contains "%" replace "%" with "base" @@ -651,11 +651,11 @@ void ReadRestart::file_search(char *infile, char *outfile) if (maxnum < 0) error->one(FLERR,"Found no restart file matching pattern"); // create outfile with maxint substituted for "*" - // use original infile, not pattern, since need to retain "%" in filename + // use original inpfile, not pattern, since need to retain "%" in filename - ptr = strchr(infile,'*'); + ptr = strchr(inpfile,'*'); *ptr = '\0'; - sprintf(outfile,"%s" BIGINT_FORMAT "%s",infile,maxnum,ptr+1); + sprintf(outfile,"%s" BIGINT_FORMAT "%s",inpfile,maxnum,ptr+1); *ptr = '*'; // clean up From 36649f0534d3b20211953c1dbecedc33e7dd3857 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 16:47:12 -0400 Subject: [PATCH 303/760] add workaround for handline include files --- src/input.cpp | 7 +++++++ src/input.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/input.cpp b/src/input.cpp index f88c8ca0c0..dd445b10f3 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -77,6 +77,7 @@ Input::Input(LAMMPS *lmp, int argc, char **argv) : Pointers(lmp) echo_screen = 0; echo_log = 1; + eof_return = 0; label_active = 0; labelstr = NULL; @@ -205,6 +206,7 @@ void Input::file() MPI_Bcast(&n,1,MPI_INT,0,world); if (n == 0) { if (label_active) error->all(FLERR,"Label wasn't found in input script"); + if (eof_return) break; if (me == 0) { if (infile != stdin) { fclose(infile); @@ -1051,6 +1053,11 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; + eof_return = 1; + file(); + eof_return = 0; + nfile--; + infile = infiles[nfile-1]; } } diff --git a/src/input.h b/src/input.h index ebd015619c..7fb125ffb5 100644 --- a/src/input.h +++ b/src/input.h @@ -46,6 +46,7 @@ class Input : protected Pointers { char *command; // ptr to current command int echo_screen; // 0 = no, 1 = yes int echo_log; // 0 = no, 1 = yes + int eof_return; // if 1: at EOF return from parsing in file() private: int me; // proc ID From bfe6cc29e81b84c6dada9bc9cbd942b3d0a21c93 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 17:52:43 -0400 Subject: [PATCH 304/760] fix bug of not storing pointers --- src/KIM/fix_store_kim.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/KIM/fix_store_kim.cpp b/src/KIM/fix_store_kim.cpp index 8209a6d13e..c9a99acca9 100644 --- a/src/KIM/fix_store_kim.cpp +++ b/src/KIM/fix_store_kim.cpp @@ -131,11 +131,13 @@ void FixStoreKIM::setptr(const char *name, void *ptr) char *mu = (char *)model_units; delete[] mu; } + model_units = ptr; } else if (strcmp(name,"user_units") == 0) { if (user_units) { char *uu = (char *)user_units; delete[] uu; } + user_units = ptr; } else error->all(FLERR,"Unknown property in fix STORE/KIM"); } From 6d54cf6a07d38d97be5157d4977ea831c10d9f48 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 17:53:12 -0400 Subject: [PATCH 305/760] programming style changes --- src/KIM/kim_init.cpp | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/KIM/kim_init.cpp b/src/KIM/kim_init.cpp index ce1b944792..080e3dac3f 100644 --- a/src/KIM/kim_init.cpp +++ b/src/KIM/kim_init.cpp @@ -90,10 +90,10 @@ void KimInit::command(int narg, char **arg) if (domain->box_exist) error->all(FLERR,"Must use 'kim_init' command before " "simulation box is defined"); - int len0 = strlen(arg[0])+1; - int len1 = strlen(arg[1])+1; - char *model_name = new char[len0]; strcpy(model_name,arg[0]); - char *user_units = new char[len1]; strcpy(user_units,arg[1]); + char *model_name = new char[strlen(arg[0])+1]; + strcpy(model_name,arg[0]); + char *user_units = new char[strlen(arg[1])+1]; + strcpy(user_units,arg[1]); if (narg == 3) { if (strcmp(arg[2],"unit_conversion_mode")==0) unit_conversion_mode = true; else { error->all(FLERR,"Illegal kim_init command"); } @@ -178,21 +178,19 @@ void KimInit::determine_model_type_and_units(char * model_name, &units_accepted, &kim_MO); - if (!kim_error) // model is an MO - { + if (!kim_error) { // model is an MO model_type = MO; KIM_Model_Destroy(&kim_MO); if (units_accepted) { - int len=strlen(user_units); - *model_units = new char[len]; strcpy(*model_units,user_units); + *model_units = new char[strlen(user_units)+1]; + strcpy(*model_units,user_units); return; } else if (unit_conversion_mode) { int const num_systems = 5; char const * const systems[num_systems] = {"metal", "real", "si", "cgs", "electron"}; - for (int i=0; i < num_systems; ++i) - { + for (int i=0; i < num_systems; ++i) { get_kim_unit_names(systems[i], lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, error); kim_error = KIM_Model_Create(KIM_NUMBERING_zeroBased, @@ -205,17 +203,13 @@ void KimInit::determine_model_type_and_units(char * model_name, &units_accepted, &kim_MO); KIM_Model_Destroy(&kim_MO); - if (units_accepted) - { - int len=strlen(systems[i]); - *model_units = new char[len]; strcpy(*model_units,systems[i]); + if (units_accepted) { + *model_units = new char[strlen(systems[i])+1]; + strcpy(*model_units,systems[i]); return; } - } - error->all(FLERR,"KIM Model does not support any lammps unit system"); - } - else - { + } error->all(FLERR,"KIM Model does not support any lammps unit system"); + } else { error->all(FLERR,"KIM Model does not support the requested unit system"); } } @@ -223,9 +217,7 @@ void KimInit::determine_model_type_and_units(char * model_name, KIM::SimulatorModel * kim_SM; kim_error = KIM::SimulatorModel::Create(model_name, &kim_SM); if (kim_error) - { error->all(FLERR,"KIM model name not found"); - } model_type = SM; int sim_fields; @@ -257,7 +249,7 @@ void KimInit::determine_model_type_and_units(char * model_name, /* ---------------------------------------------------------------------- */ -void KimInit::do_init(char *model_name, char *user_units, char* model_units) +void KimInit::do_init(char *model_name, char *user_units, char *model_units) { // create storage proxy fix. delete existing fix, if needed. @@ -322,8 +314,7 @@ void KimInit::do_init(char *model_name, char *user_units, char* model_units) cmd += model_units; input->one(cmd.c_str()); - if (model_type == SM) - { + if (model_type == SM) { int sim_fields, sim_lines; const std::string *sim_field, *sim_value; simulatorModel->GetNumberOfSimulatorFields(&sim_fields); From d10fdda6765c6cbe905509bf3eae7888cadb00ad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 23 Jun 2019 17:53:52 -0400 Subject: [PATCH 306/760] simplify nested include file handling --- src/input.cpp | 17 ++--------------- src/input.h | 1 - 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index dd445b10f3..268be5b774 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -77,7 +77,6 @@ Input::Input(LAMMPS *lmp, int argc, char **argv) : Pointers(lmp) echo_screen = 0; echo_log = 1; - eof_return = 0; label_active = 0; labelstr = NULL; @@ -206,18 +205,7 @@ void Input::file() MPI_Bcast(&n,1,MPI_INT,0,world); if (n == 0) { if (label_active) error->all(FLERR,"Label wasn't found in input script"); - if (eof_return) break; - if (me == 0) { - if (infile != stdin) { - fclose(infile); - infile = NULL; - } - nfile--; - } - MPI_Bcast(&nfile,1,MPI_INT,0,world); - if (nfile == 0) break; - if (me == 0) infile = infiles[nfile-1]; - continue; + break; } if (n > maxline) reallocate(line,maxline,n); @@ -1053,9 +1041,8 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; - eof_return = 1; file(); - eof_return = 0; + fclose(infile); nfile--; infile = infiles[nfile-1]; } diff --git a/src/input.h b/src/input.h index 7fb125ffb5..ebd015619c 100644 --- a/src/input.h +++ b/src/input.h @@ -46,7 +46,6 @@ class Input : protected Pointers { char *command; // ptr to current command int echo_screen; // 0 = no, 1 = yes int echo_log; // 0 = no, 1 = yes - int eof_return; // if 1: at EOF return from parsing in file() private: int me; // proc ID From b5d4cf4bfdff3b33a76198bcdb070798bbe908ab Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 17:23:21 -0500 Subject: [PATCH 307/760] Updated KIM package information --- doc/src/Packages_details.txt | 49 ++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index d6e8f8639f..bf71e058f5 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -338,27 +338,37 @@ KIM package :link(PKG-KIM),h4 [Contents:] -A "pair_style kim"_pair_kim.html command which is a wrapper on the -Knowledge Base for Interatomic Models (KIM) repository of interatomic -potentials, enabling any of them to be used in LAMMPS simulations. -Also a "kim_query"_kim_commands.html command, which allows to query -the OpenKIM database for stored properties, and the commands -"kim_init and kim_interactions"_kim_commands.html, which serve as -front end to generating LAMMPS input on-the-fly for KIM simulator -models and native KIM models. +This package contains a set of commands that serve as a wrapper on the +"Open Knowledgebase of Interatomic Models (OpenKIM)"_https://openkim.org +repository of interatomic models (IMs) +enabling compatible ones to be used in LAMMPS simulations. +This includes "kim_init and kim_interactions"_kim_commands.html +commands to select, initialize and instantiate the IM, and a +"kim_query"_kim_commands.html command to perform web queries +for material property predictions of OpenKIM IMs. +Support for KIM IMs that conform to the +"KIM Application Programming Interface (API)"_https://openkim.org/kim-api/ +is provided by the "pair_style kim"_pair_kim.html command. -To use this package you must have the KIM library available on your -system. +NOTE: The command {pair_style kim} is called by {kim_interactions} and +is not recommended to be directly used in input scripts. + +To use this package you must have the KIM API library available on your +system. The KIM API is available for download on the +"OpenKIM website"_https://openkim.org/kim-api/. +When installing LAMMPS from binary, the kim-api package +is a dependency that is automatically downloaded and installed. Information about the KIM project can be found at its website: -https://openkim.org. The KIM project is led by Ellad Tadmor and Ryan -Elliott (U Minnesota). +"https://openkim.org"_https://openkim.org. +The KIM project is led by Ellad Tadmor and Ryan Elliott (U Minnesota) +and is funded by the "National Science Foundation"_https://www.nsf.gov/. [Authors:] Ryan Elliott (U Minnesota) is the main developer for the KIM -API which the "pair_style kim"_pair_kim.html command uses. He developed -the pair style. Axel Kohlmeyer (Temple U) contributed the -"kim_query"_kim_commands.html and "kim_init"_kim_commands.html commands -in close collaboration with Ryan. +API and the {pair_style kim} command. Axel Kohlmeyer (Temple U) and +Ellad Tadmor (U Minnesota) contributed to the "kim_commands"_kim_commands.html +interface in close collaboration with Ryan Elliott. + [Install:] @@ -368,10 +378,11 @@ extras"_Build_extras.html doc page. [Supporting info:] +"kim_commands"_kim_commands.html +"pair_style kim"_pair_kim.html src/KIM: filenames -> commands src/KIM/README lib/kim/README -"pair_style kim"_pair_kim.html examples/kim :ul :line @@ -987,9 +998,9 @@ USER-ADIOS package :link(PKG-USER-ADIOS),h4 [Contents:] -ADIOS is a high-performance I/O library. This package implements the +ADIOS is a high-performance I/O library. This package implements the dump "atom/adios" and dump "custom/adios" commands to write data using -the ADIOS library. +the ADIOS library. [Authors:] Norbert Podhorszki (ORNL) from the ADIOS developer team. From 881f9ff04337c6e743f2fa9a7e0b71af28e85107 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 17:36:10 -0500 Subject: [PATCH 308/760] Updated the pair_kim docs --- doc/src/pair_kim.txt | 83 ++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 45 deletions(-) diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 7e399b7ce0..86d13808b0 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -12,76 +12,71 @@ pair_style kim command :h3 pair_style kim model :pre -model = name of KIM model (potential) +model = name of a KIM model (the KIM ID for models archived in OpenKIM) [Examples:] -pair_style kim ex_model_Ar_P_LJ -pair_coeff * * Ar Ar :pre +pair_style kim SW_StillingerWeber_1985_Si__MO_405512056662_005 +pair_coeff * * Si :pre [Description:] -This pair style is a wrapper on the "Knowledge Base for Interatomic +This pair style is a wrapper on the "Open Knowledgebase of Interatomic Models (OpenKIM)"_https://openkim.org repository of interatomic -potentials, so that they can be used by LAMMPS scripts. +potentials to enable their use in LAMMPS scripts. -Note that in LAMMPS lingo, a KIM model driver is a pair style -(e.g. EAM or Tersoff). A KIM model is a pair style for a particular -element or alloy and set of parameters, e.g. EAM for Cu with a -specific EAM potential file. +The preferred interface for using interatomic models archived in +OpenKIM is the "kim_commands interface"_kim_commands.html. That +interface supports both "KIM Models" that conform to the KIM API +and can be used by any KIM-compliant simulation code, and +"KIM Simulator Models" that are natively implemented within a single +simulation code (like LAMMPS) and can only be used with it. +The {pair_style kim} command is limited to KIM Models. It is +used by the "kim_commands interface"_kim_commands.html as needed. -See the current list of "KIM model -drivers"_https://openkim.org/browse/model-drivers/alphabetical. +NOTE: Since {pair_style kim} is called by {kim_interactions} as needed, +is not recommended to be directly used in input scripts. -See the current list of all "KIM -models"_https://openkim.org/browse/models/by-model-drivers - -To use this pair style, you must first download and install the KIM -API library from the "OpenKIM website"_https://openkim.org. The KIM -section of the "Packages details"_Packages_details.html doc page has -instructions on how to do this with a simple make command, when -building LAMMPS. - -See the examples/kim dir for an input script that uses a KIM model -(potential) for Lennard-Jones. - :line The argument {model} is the name of the KIM model for a specific -potential as KIM defines it. In principle, LAMMPS can invoke any KIM -model. You should get an error or warning message from either LAMMPS -or KIM if there is an incompatibility. +potential as KIM defines it. For potentials archived in OpenKIM +this is the extended KIM ID (see "kim_commands"_kim_commands.html +for details). LAMMPS can invoke any KIM Model, however there can +be incompatibilities (for example unit matching issues). +In the event of an incompatibility, the code will terminate with +an error message. Check both the LAMMPS and KIM log files for details. -Only a single pair_coeff command is used with the {kim} style which -specifies the mapping of LAMMPS atom types to KIM elements. This is -done by specifying N additional arguments after the * * in the -pair_coeff command, where N is the number of LAMMPS atom types: +Only a single {pair_coeff} command is used with the {kim} style, which +specifies the mapping of LAMMPS atom types to the species supported by +the KIM Model. This is done by specifying {N} additional arguments +after the * * in the {pair_coeff} command, where {N} is the number of +LAMMPS atom types: N element names = mapping of KIM elements to atom types :ul -As an example, imagine the KIM model supports Si and C atoms. If your -LAMMPS simulation has 4 atom types and you want the 1st 3 to be Si, -and the 4th to be C, you would use the following pair_coeff command: +For example, consider a KIM Model that supports Si and C species. +If the LAMMPS simulation has four atom types, where the first three are Si, +and the fourth is C, the following {pair_coeff} command would be used: pair_coeff * * Si Si Si C :pre -The 1st 2 arguments must be * * so as to span all LAMMPS atom types. -The first three Si arguments map LAMMPS atom types 1,2,3 to Si as -defined within KIM. The final C argument maps LAMMPS atom type 4 to C -as defined within KIM. +The first two arguments must be * * so as to span all LAMMPS atom types. +The first three Si arguments map LAMMPS atom types 1, 2, and 3 to Si as +defined within KIM Model. The final C argument maps LAMMPS atom type 4 to C. :line In addition to the usual LAMMPS error messages, the KIM library itself may generate errors, which should be printed to the screen. In this -case it is also useful to check the kim.log file for additional error +case it is also useful to check the {kim.log} file for additional error information. The file kim.log should be generated in the same directory where LAMMPS is running. To download, build, and install the KIM library on your system, see -the lib/kim/README file. Once you have done this and built LAMMPS +the {lib/kim/README} file. Once you have done this and built LAMMPS with the KIM package installed you can run the example input scripts -in examples/kim. +in {examples/kim}. :line @@ -103,16 +98,14 @@ This pair style can only be used via the {pair} keyword of the [Restrictions:] -This pair style is part of the KIM 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 is part of the KIM package. See details on +restrictions in "kim_commands"_kim_commands.html. This current version of pair_style kim is compatible with the kim-api package version 2.0.0 and higher. [Related commands:] -"pair_coeff"_pair_coeff.html, "kim_init"_kim_commands.html, -"kim_interactions"_kim_commands, "kim_query"_kim_commands.html +"pair_coeff"_pair_coeff.html, "kim_commands"_kim_commands.html [Default:] none From 94e1f87cb81ecd3b6f0d89e457ab94ae82f2641b Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 17:36:36 -0500 Subject: [PATCH 309/760] Moved some content from pair_kim docs to kim_commands --- doc/src/kim_commands.txt | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 5a50a76879..99ed068c44 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -67,7 +67,7 @@ The {kim_query} web query tool provides the ability to use the predictions of IM Support is provided for unit conversion between the "unit style"_units.html used in the LAMMPS input script and the units required by the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the likelihood of errors due to incompatible units. :ul :link(IM_types) -Types of KIM IMs :h4 +Types of IMs in OpenKIM :h4 There are two types of IMs archived in OpenKIM: @@ -108,6 +108,10 @@ listed above the Model Page is located at: "https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005"_https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005 :pre +See the "current list of KIM Models and SMs archived in OpenKIM"_https://openkim.org/browse/models/by-species. +This list is sorted by species and can be filtered to display only +IMs for certain species combinations. + NOTE: It is also possible to locally install IMs not archived in OpenKIM, in which case their names do not have to conform to the KIM ID format. @@ -118,6 +122,9 @@ IM and perform necessary initialization ({kim_init}), and the second to set up the IM for use by executing any necessary LAMMPS commands ({kim_interactions}). Both are required. +See the {examples/kim} directory for example input scripts that use KIM Models +and KIM SMs. + OpenKIM IM Initialization ({kim_init}) :h5 The {kim_init} mode command must be issued [before] @@ -375,11 +382,16 @@ OpenKIM to function. [Restrictions:] The set of {kim_commands} is part of the KIM package. It is only enabled if -LAMMPS was built with that package. Furthermore, its correct -functioning depends on compiling LAMMPS with all required packages -installed that are required by the commands embedded in any KIM -SM used. -See the "Build package"_Build_package.html doc page for more info. +LAMMPS is built with that package. A requirement for the KIM package, +is the KIM API library that must be downloaded from the +"OpenKIM website"_https://openkim.org/kim-api/ and installed before +LAMMPS is compiled. When installing LAMMPS from binary, the kim-api package +is a dependency that is automatically downloaded and installed. See the KIM +section of the "Packages details"_Packages_details.html for details. + +Furthermore, when using {kim_commands} to run KIM SMs, any packages required +by the native potential being used or other commands or fixes that it invokes +must be installed. [Related commands:] From d150feb41aa7c13858d56d8dd7ac18212e626492 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 17:46:00 -0500 Subject: [PATCH 310/760] Small change to KIM package build --- doc/src/Build_extras.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 220e9420fc..38d50522bb 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -177,11 +177,12 @@ use with LAMMPS. If you want to use the "kim_query"_kim_commands.html command, you also need to have libcurl installed with the matching development headers and the curl-config tool. -Note that in LAMMPS lingo, a KIM model driver is a pair style +Note that in LAMMPS jargon, a KIM model driver is a pair style (e.g. EAM or Tersoff). A KIM model is a pair style for a particular element or alloy and set of parameters, e.g. EAM for Cu with a -specific EAM potential file. Also note that downloading and installing -the KIM API library with all its models, may take a long time (10s of +specific EAM potential file. Also note that when downloading and +installing from source +the KIM API library with all its models, may take a long time (tens of minutes to hours) to build. Of course you only need to do that once. See the list of KIM model drivers here: From cf008c163def0bf64d77c8602b092cf4268261ed Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 18:01:35 -0500 Subject: [PATCH 311/760] Corrected box rescaling --- doc/src/kim_commands.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 99ed068c44..f039202e4e 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -225,7 +225,16 @@ from a file. For example if a configuration of atoms is read in from a dump file using the "read_dump"_read_dump.html command, the following can be done to convert the box and all atomic positions to the correct units: -change_box all x scale $\{_u_distance\} y scale $\{_u_distance\} z scale $\{_u_distance\} remap :pre +variable xyfinal equal xy*$\{_u_distance\} +variable xzfinal equal xz*$\{_u_distance\} +variable yzfinal equal yz*$\{_u_distance\} +change_box all x scale $\{_u_distance\} & +               y scale $\{_u_distance\} & +               z scale $\{_u_distance\} & +               xy final $\{xyfinal\} & +               xz final $\{xzfinal\} & +               yz final $\{yzfinal\} & +               remap :pre NOTE: Unit conversion will only work if the conversion factors are placed in all appropriate places in the input script. It is up to the user to do this From bfd0c4228d3505da1fad1028cb1629cab68375a6 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Sun, 23 Jun 2019 18:29:59 -0500 Subject: [PATCH 312/760] Added text that ADP potentials are available in KIM as well as NIST --- doc/src/pair_adp.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/src/pair_adp.txt b/doc/src/pair_adp.txt index fc888ffbff..d5b07e8431 100644 --- a/doc/src/pair_adp.txt +++ b/doc/src/pair_adp.txt @@ -42,16 +42,18 @@ the ADP potential files themselves. Likewise, the ADP potential files list atomic masses; thus you do not need to use the "mass"_mass.html command to specify them. -The NIST WWW site distributes and documents ADP potentials: +[ADP potentials are available from:] -http://www.ctcms.nist.gov/potentials :pre +The NIST WWW site at http://www.ctcms.nist.gov/potentials. +Note that ADP potentials obtained from NIST must be converted +into the extended DYNAMO {setfl} format discussed below. +:l -Note that these must be converted into the extended DYNAMO {setfl} -format discussed below. +The OpenKIM Project at https://openkim.org provides ADP potentials +as Simulator Models that can be used directly in LAMMPS with +the "kim_commands interface"_kim_commands.html. +:l -The NIST site is maintained by Chandler Becker (cbecker at nist.gov) -who is good resource for info on interatomic potentials and file -formats. :line From 3e93881e44977907fcf321e427416f765aca8b34 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 05:28:54 -0400 Subject: [PATCH 313/760] store compute_tally array in restart and read it back. fix memory leak. --- src/pair_hybrid.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index 4dcd249ac6..eacd437118 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -254,6 +254,7 @@ void PairHybrid::settings(int narg, char **arg) delete[] multiple; delete[] special_lj; delete[] special_coul; + delete[] compute_tally; } if (allocated) { @@ -273,7 +274,6 @@ void PairHybrid::settings(int narg, char **arg) special_lj = new double*[narg]; special_coul = new double*[narg]; - compute_tally = new int[narg]; // allocate each sub-style @@ -649,6 +649,8 @@ void PairHybrid::write_restart(FILE *fp) // each sub-style writes its settings, but no coeff info + fwrite(compute_tally,sizeof(int),nstyles,fp); + int n; for (int m = 0; m < nstyles; m++) { n = strlen(keywords[m]) + 1; @@ -682,6 +684,7 @@ void PairHybrid::read_restart(FILE *fp) delete[] multiple; delete[] special_lj; delete[] special_coul; + delete[] compute_tally; styles = new Pair*[nstyles]; keywords = new char*[nstyles]; @@ -689,10 +692,14 @@ void PairHybrid::read_restart(FILE *fp) special_lj = new double*[nstyles]; special_coul = new double*[nstyles]; + compute_tally = new int[nstyles]; // each sub-style is created via new_pair() // each reads its settings, but no coeff info + if (me == 0) fread(compute_tally,sizeof(int),nstyles,fp); + MPI_Bcast(compute_tally,nstyles,MPI_INT,0,world); + int n,dummy; for (int m = 0; m < nstyles; m++) { if (me == 0) fread(&n,sizeof(int),1,fp); From 2159a8c44a45330f04283b860a6decc04db800a6 Mon Sep 17 00:00:00 2001 From: "Vishnu V. Krishnan" Date: Mon, 24 Jun 2019 16:14:29 +0530 Subject: [PATCH 314/760] Arch specific words --- doc/utils/sphinx-config/false_positives.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a023c5b821..9a46983539 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -101,6 +101,7 @@ api Appl Apu arccos +Archlinux arcsin arg args @@ -1527,6 +1528,7 @@ Makefile makefiles Makefiles makelist +makepkg Makse malloc Malolepsza From 8b49cac86a4dc1f9b484e33a744e7e41aa9055ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 09:09:22 -0400 Subject: [PATCH 315/760] correct dimensionality of cut_coul property in Pair::extract() --- src/CLASS2/pair_lj_class2_coul_cut.cpp | 3 +-- src/MISC/pair_nm_cut_coul_cut.cpp | 3 +-- src/pair_coul_cut.cpp | 1 + src/pair_lj_cut_coul_cut.cpp | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/CLASS2/pair_lj_class2_coul_cut.cpp b/src/CLASS2/pair_lj_class2_coul_cut.cpp index dafa83c8fd..8dc038b8fc 100644 --- a/src/CLASS2/pair_lj_class2_coul_cut.cpp +++ b/src/CLASS2/pair_lj_class2_coul_cut.cpp @@ -473,9 +473,8 @@ double PairLJClass2CoulCut::single(int i, int j, int itype, int jtype, void *PairLJClass2CoulCut::extract(const char *str, int &dim) { - dim = 0; - if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; dim = 2; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; if (strcmp(str,"epsilon") == 0) return (void *) epsilon; if (strcmp(str,"sigma") == 0) return (void *) sigma; return NULL; diff --git a/src/MISC/pair_nm_cut_coul_cut.cpp b/src/MISC/pair_nm_cut_coul_cut.cpp index 6a09d579b7..a8428ab980 100644 --- a/src/MISC/pair_nm_cut_coul_cut.cpp +++ b/src/MISC/pair_nm_cut_coul_cut.cpp @@ -487,9 +487,8 @@ double PairNMCutCoulCut::single(int i, int j, int itype, int jtype, void *PairNMCutCoulCut::extract(const char *str, int &dim) { - dim = 0; - if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; dim = 2; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; if (strcmp(str,"e0") == 0) return (void *) e0; if (strcmp(str,"r0") == 0) return (void *) r0; if (strcmp(str,"nn") == 0) return (void *) nn; diff --git a/src/pair_coul_cut.cpp b/src/pair_coul_cut.cpp index e7c0e0aabb..196e064219 100644 --- a/src/pair_coul_cut.cpp +++ b/src/pair_coul_cut.cpp @@ -303,6 +303,7 @@ double PairCoulCut::single(int i, int j, int /*itype*/, int /*jtype*/, void *PairCoulCut::extract(const char *str, int &dim) { dim = 2; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut; if (strcmp(str,"scale") == 0) return (void *) scale; return NULL; } diff --git a/src/pair_lj_cut_coul_cut.cpp b/src/pair_lj_cut_coul_cut.cpp index 6f2ba75309..38a6e2c431 100644 --- a/src/pair_lj_cut_coul_cut.cpp +++ b/src/pair_lj_cut_coul_cut.cpp @@ -461,9 +461,8 @@ double PairLJCutCoulCut::single(int i, int j, int itype, int jtype, void *PairLJCutCoulCut::extract(const char *str, int &dim) { - dim = 0; - if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; dim = 2; + if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul; if (strcmp(str,"epsilon") == 0) return (void *) epsilon; if (strcmp(str,"sigma") == 0) return (void *) sigma; return NULL; From a36d2573cffef6e5cfe3b5b46d581a955941e821 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 09:10:00 -0400 Subject: [PATCH 316/760] make certain, we are not mixing cutoff and long-range coulomb when looking cutoffs --- src/pair_hybrid.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index eacd437118..9aff8a387a 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -945,17 +945,24 @@ void *PairHybrid::extract(const char *str, int &dim) void *cutptr = NULL; void *ptr; double cutvalue = 0.0; + int couldim = -1; for (int m = 0; m < nstyles; m++) { ptr = styles[m]->extract(str,dim); if (ptr && strcmp(str,"cut_coul") == 0) { + if (cutptr && dim != couldim) + error->all(FLERR, + "Coulomb styles of pair hybrid sub-styles do not match"); double *p_newvalue = (double *) ptr; double newvalue = *p_newvalue; - if (cutptr && newvalue != cutvalue) + if (cutptr && (newvalue != cutvalue)) error->all(FLERR, "Coulomb cutoffs of pair hybrid sub-styles do not match"); - cutptr = ptr; - cutvalue = newvalue; + if (dim == 0) { + cutptr = ptr; + cutvalue = newvalue; + } + couldim = dim; } else if (ptr) return ptr; } From 7afcfccf48fb06deccf9d185cabc377a5124d437 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 13:51:41 -0400 Subject: [PATCH 317/760] follow convention to list all commands in a file as header --- doc/src/kim_commands.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index f039202e4e..2aa705b483 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -6,7 +6,9 @@ :line -kim_commands :h3 +kim_init command :h3 +kim_interactions command :h3 +kim_query command :h3 [Syntax:] From 826a14f54ab8bef2472ef16876706ee2f95897e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 14:16:00 -0400 Subject: [PATCH 318/760] add workaround for handline include files # Conflicts: # src/input.h --- src/input.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/input.cpp b/src/input.cpp index 0111cb5738..32b6b697b1 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -78,6 +78,7 @@ Input::Input(LAMMPS *lmp, int argc, char **argv) : Pointers(lmp) echo_screen = 0; echo_log = 1; + eof_return = 0; label_active = 0; labelstr = NULL; @@ -206,6 +207,7 @@ void Input::file() MPI_Bcast(&n,1,MPI_INT,0,world); if (n == 0) { if (label_active) error->all(FLERR,"Label wasn't found in input script"); + if (eof_return) break; if (me == 0) { if (infile != stdin) { fclose(infile); @@ -1057,6 +1059,11 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; + eof_return = 1; + file(); + eof_return = 0; + nfile--; + infile = infiles[nfile-1]; } } From 7f26862f9841ebaab34961288eca4a5ba1187e9c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 14:16:51 -0400 Subject: [PATCH 319/760] simplify nested include file handling # Conflicts: # src/input.h --- src/input.cpp | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index 32b6b697b1..e5fbec6d5a 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -78,7 +78,6 @@ Input::Input(LAMMPS *lmp, int argc, char **argv) : Pointers(lmp) echo_screen = 0; echo_log = 1; - eof_return = 0; label_active = 0; labelstr = NULL; @@ -207,18 +206,7 @@ void Input::file() MPI_Bcast(&n,1,MPI_INT,0,world); if (n == 0) { if (label_active) error->all(FLERR,"Label wasn't found in input script"); - if (eof_return) break; - if (me == 0) { - if (infile != stdin) { - fclose(infile); - infile = NULL; - } - nfile--; - } - MPI_Bcast(&nfile,1,MPI_INT,0,world); - if (nfile == 0) break; - if (me == 0) infile = infiles[nfile-1]; - continue; + break; } if (n > maxline) reallocate(line,maxline,n); @@ -1059,9 +1047,8 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; - eof_return = 1; file(); - eof_return = 0; + fclose(infile); nfile--; infile = infiles[nfile-1]; } From 13237155c8f3d01be9a7b9375672d56bd2e787d5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 14:24:54 -0400 Subject: [PATCH 320/760] make processing of Input::file(const char* filename) more like processing an include file --- src/input.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index e5fbec6d5a..644446710f 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -240,8 +240,8 @@ void Input::file() } /* ---------------------------------------------------------------------- - process all input from filename - called from library interface + process all input from file at filename + mostly called from library interface ------------------------------------------------------------------------- */ void Input::file(const char *filename) @@ -251,21 +251,30 @@ void Input::file(const char *filename) // call to file() will close filename and decrement nfile if (me == 0) { - if (nfile > 1) - error->one(FLERR,"Invalid use of library file() function"); + if (nfile == maxfile) { + maxfile++; + infiles = (FILE **) + memory->srealloc(infiles,maxfile*sizeof(FILE *),"input:infiles"); + } - if (infile && infile != stdin) fclose(infile); infile = fopen(filename,"r"); if (infile == NULL) { char str[128]; snprintf(str,128,"Cannot open input script %s",filename); error->one(FLERR,str); } - infiles[0] = infile; - nfile = 1; + infiles[nfile++] = infile; } + // process contents of file + file(); + + if (me == 0) { + fclose(infile); + nfile--; + infile = infiles[nfile-1]; + } } /* ---------------------------------------------------------------------- @@ -1047,7 +1056,13 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; - file(); + } + + // process contents of file + + file(); + + if (me == 0) { fclose(infile); nfile--; infile = infiles[nfile-1]; From f2380a24ef90945f421a90e5d482c58e0bef49b5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 24 Jun 2019 14:27:05 -0400 Subject: [PATCH 321/760] fix parallel processing input include bug --- src/input.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index 268be5b774..2f617d2cd0 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -239,8 +239,8 @@ void Input::file() } /* ---------------------------------------------------------------------- - process all input from filename - called from library interface + process all input from file at filename + mostly called from library interface ------------------------------------------------------------------------- */ void Input::file(const char *filename) @@ -250,21 +250,30 @@ void Input::file(const char *filename) // call to file() will close filename and decrement nfile if (me == 0) { - if (nfile > 1) - error->one(FLERR,"Invalid use of library file() function"); + if (nfile == maxfile) { + maxfile++; + infiles = (FILE **) + memory->srealloc(infiles,maxfile*sizeof(FILE *),"input:infiles"); + } - if (infile && infile != stdin) fclose(infile); infile = fopen(filename,"r"); if (infile == NULL) { char str[128]; snprintf(str,128,"Cannot open input script %s",filename); error->one(FLERR,str); } - infiles[0] = infile; - nfile = 1; + infiles[nfile++] = infile; } + // process contents of file + file(); + + if (me == 0) { + fclose(infile); + nfile--; + infile = infiles[nfile-1]; + } } /* ---------------------------------------------------------------------- @@ -1041,7 +1050,13 @@ void Input::include() error->one(FLERR,str); } infiles[nfile++] = infile; - file(); + } + + // process contents of file + + file(); + + if (me == 0) { fclose(infile); nfile--; infile = infiles[nfile-1]; From 0ddcc023a5074e10b7e5974011e15542a2c5b105 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Mon, 24 Jun 2019 13:54:55 -0500 Subject: [PATCH 322/760] Improvements and additions to kim_commands doc --- doc/src/kim_commands.txt | 54 +++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index f039202e4e..68306ad6b7 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -170,10 +170,30 @@ SMs can never adjust their units.) If a match is possible, the LAMMPS {user_units}. If the match fails, the simulation is terminated with an error. -If unit conversion mode {is} active, then the LAMMPS "units"_units.html -command is called to set the units to the IM's required or preferred units. -Conversion factors between the IM's units and the {user_units} are -defined for all "physical quantities"_units.html (mass, distance, etc.). +Here is an example of a LAMMPS script to compute the cohesive energy +of a face-centered cubic (fcc) lattice for the Ercolessi and Adams (1994) +potential for Al: + +kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal +boundary p p p +lattice fcc 4.032 +region simbox block 0 1 0 1 0 1 units lattice +create_box 1 simbox +create_atoms 1 box +mass 1 26.981539 +kim_interactions Al +run 0 +variable Ec equal (pe/count(all))/$\{_u_energy\} +print "Cohesive Energy = $\{EcJ\} eV" +:pre + +The above script will end with an error in the {kim_init} line if the +IM is changed to another potential for Al that does not work with {metal} +units. To address this {kim_init} offers the {unit_conversion_mode}. +If unit conversion mode {is} active, then {kim_init} calls the LAMMPS +"units"_units.html command to set the units to the IM's required or +preferred units. Conversion factors between the IM's units and the {user_units} +are defined for all "physical quantities"_units.html (mass, distance, etc.). (Note that converting to or from the "lj" unit style is not supported.) These factors are stored as "internal style variables"_variable.html with standard names: @@ -197,9 +217,11 @@ If desired, the input script can be designed to work with these conversion factors so that the script will work without change with any OpenKIM IM. (This approach is used in the "OpenKIM Testing Framework"_https://openkim.org/getting-started/kim-tests/.) -For example, the following simple script constructs an fcc lattice with -a lattice parameter defined in meters, computes the total energy, -and prints the cohesive energy in Joules regardless of the units of the IM. +For example, the script given above for the cohesive energy of fcc Al +can be rewritten to work with any IM regardless of units. The following +script constructs an fcc lattice with a lattice parameter defined in +meters, computes the total energy, and prints the cohesive energy in +Joules regardless of the units of the IM. kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 si unit_conversion_mode boundary p p p @@ -339,18 +361,23 @@ lattice fcc $\{a0\} The {kim_query} command retrieves from "OpenKIM"_https://openkim.org the equilibrium lattice constant predicted by the Ercolessi and Adams (1994) -potential for the face-centered cubic (fcc) structure and places it in +potential for the fcc structure and places it in variable {a0}. This variable is then used on the next line to set up the crystal. By using {kim_query}, the user is saved the trouble and possible error of tracking this value down, or of having to perform an energy minimization to find the equilibrium lattice constant. +Note that in {unit_conversion_mode} the results obtained from a +{kim_query} would need to be converted to the appropriate units system. +For example, in the above script, the lattice command would need to be +changed to: "lattice fcc $\{a0\}*$\{_u_distance\}". + [Define a crystal at finite temperature accounting for thermal expansion] kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal boundary p p p kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] -kim_query alpha get_linear_thermal_expansion_fcc +kim_query alpha get_linear_thermal_expansion_fcc units=\{"1/K"\} variable DeltaT equal 300 lattice fcc $\{a0\}*$\{alpha\}*$\{DeltaT\} ... :pre @@ -375,6 +402,15 @@ The defect formation energy {Eform} is computed by subtracting from {Etot} the ideal fcc cohesive energy of the atoms in the system obtained from "OpenKIM"_https://openkim.org for the Ercolessi and Adams (1994) potential. +NOTE: {kim_query} commands return results archived in +"OpenKIM"_https://openkim.org. These results are obtained +using programs for computing material properties +(KIM Tests and KIM Test Drivers) that were contributed to OpenKIM. +In order to give credit to Test developers, the number of times results +from these programs are queried is tracked. No other information about +the nature of the query or its source is recorded. + + Citation of OpenKIM IMs :h4 When publishing results obtained using OpenKIM IMs researchers are requested From 1047d8f80e10a8c267eb4b022720da8f61f844c0 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Mon, 24 Jun 2019 14:32:40 -0500 Subject: [PATCH 323/760] Change of terminology to "KIM Portable Model" and streamlining --- doc/src/kim_commands.txt | 55 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index d42b509449..9be4a79db5 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -44,8 +44,8 @@ so that they can be used by LAMMPS scripts. These commands do not implement any computations directly, but rather generate LAMMPS input commands based on the information retrieved from the OpenKIM repository to initialize and activate OpenKIM IMs and query their predictions for use in the LAMMPS script. -All LAMMPS input commands executed by {kim_commands} are echoed to the -LAMMPS log file. +All LAMMPS input commands generated and executed by {kim_commands} are +echoed to the LAMMPS log file. Benefits of Using OpenKIM IMs :h4 @@ -65,7 +65,7 @@ OpenKIM is a member organization of "DataCite"_https://datacite.org/ and issues Convenience :h5 IMs in OpenKIM are distributed in binary form along with LAMMPS and can be used in a LAMMPS input script simply by providing their KIM ID in the {kim_init} command documented on this page. -The {kim_query} web query tool provides the ability to use the predictions of IMs for supported material properties (computed via "KIM Tests"https://openkim.org/getting-started/kim-tests/) as part of a LAMMPS input script setup and analysis. +The {kim_query} web query tool provides the ability to use the predictions of IMs for supported material properties (computed via "KIM Tests"_https://openkim.org/getting-started/kim-tests/) as part of a LAMMPS input script setup and analysis. Support is provided for unit conversion between the "unit style"_units.html used in the LAMMPS input script and the units required by the OpenKIM IM. This makes it possible to use a single input script with IMs using different units without change and minimizes the likelihood of errors due to incompatible units. :ul :link(IM_types) @@ -73,8 +73,8 @@ Types of IMs in OpenKIM :h4 There are two types of IMs archived in OpenKIM: -The first type is called a {KIM Model}. A KIM Model is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/). A KIM Model will work seamlessly with any simulation code that supports the KIM API (including LAMMPS; see "complete list of supported code"_https://openkim.org/projects-using-kim/). -The second type is called a {KIM Simulator Model} (SM). In this case, the IM is implemented natively within the simulation code ({simulator}), i.e. LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol +The first type is called a {KIM Portable Model} (PM). A KIM PM is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/) Portable Model Interface (PMI) standard. A KIM PM will work seamlessly with any simulation code that supports the KIM API/PMI standard (including LAMMPS; see "complete list of supported codes"_https://openkim.org/projects-using-kim/). +The second type is called a {KIM Simulator Model} (SM). A KIM SM is an IM that is implemented natively within a simulation code ({simulator}) that supports the KIM API/SMI (Simulator Model Interface); in this case LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol With these two IM types, OpenKIM can archive and test almost all IMs that can be used by LAMMPS. (It is easy to contribute new IMs to OpenKIM, see @@ -85,7 +85,7 @@ OpenKIM IMs are uniquely identified by a a human-readable prefix identifying the type of IM, authors, publication year, and supported species, separated by two underscores from the KIM ID itself, which begins with an IM code -({MO} for a KIM Model, and {SM} for a KIM Simulator Model) +({MO} for a KIM Portable Model, and {SM} for a KIM Simulator Model) followed by a unique 12-digit code and a 3-digit version identifier. By convention SM prefixes begin with {Sim_} to readily identify them. @@ -97,7 +97,7 @@ providing all the information on the IM including a title, description, authorship and citation information, test and verification check results, visualizations of results, a wiki with documentation and user comments, and access to raw files, and other information. -This is referred to as the "Model Page" or "SM Page". +This is referred to as the "PM Page" or "SM Page". The URL for such a page is constructed from the "extended KIM ID"_https://openkim.org/about-kim-ids/ of the IM: @@ -110,7 +110,7 @@ listed above the Model Page is located at: "https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005"_https://openkim.org/id/SW_StillingerWeber_1985_Si__MO_405512056662_005 :pre -See the "current list of KIM Models and SMs archived in OpenKIM"_https://openkim.org/browse/models/by-species. +See the "current list of KIM PMs and SMs archived in OpenKIM"_https://openkim.org/browse/models/by-species. This list is sorted by species and can be filtered to display only IMs for certain species combinations. @@ -124,7 +124,7 @@ IM and perform necessary initialization ({kim_init}), and the second to set up the IM for use by executing any necessary LAMMPS commands ({kim_interactions}). Both are required. -See the {examples/kim} directory for example input scripts that use KIM Models +See the {examples/kim} directory for example input scripts that use KIM PMs and KIM SMs. OpenKIM IM Initialization ({kim_init}) :h5 @@ -146,17 +146,17 @@ in the input script. (Any dimensioned numerical values in the input script and values read in from files are expected to be in the {user_units} system.) -The selected IM can be either a "KIM Model or a KIM SM"_#IM_types. +The selected IM can be either a "KIM PM or a KIM SM"_#IM_types. For a KIM SM, the {kim_init} command verifies that the SM is designed to work with LAMMPS (and not another simulation code). -In addition, the version strings for the LAMMPS version used for defining +In addition, the LAMMPS version used for defining the SM and the LAMMPS version being currently run are -printed, to help diagnose any incompatible changes to input script or +printed to help diagnose any incompatible changes to input script or command syntax between the two LAMMPS versions. Based on the selected model {kim_init} may modify the "atom_style"_atom_style.html. -Some SMs have requirements for this variable. If this is the case, then +Some SMs have requirements for this setting. If this is the case, then {atom_style} will be set to the required style. Otherwise, the value is left unchanged (which in the absence of an {atom_style} command in the input script is the "default atom_style value"_atom_style.html). @@ -166,7 +166,7 @@ on whether or not {unit conversion mode} is activated as indicated by the optional {unitarg} argument. If unit conversion mode is [not] active, then {user_units} must either match the required units of the IM or the IM must be able -to adjust its units to match. (The latter is only possible with some KIM Models; +to adjust its units to match. (The latter is only possible with some KIM PMs; SMs can never adjust their units.) If a match is possible, the LAMMPS "units"_units.html command is called to set the units to {user_units}. If the match fails, the simulation is terminated with @@ -198,7 +198,7 @@ preferred units. Conversion factors between the IM's units and the {user_units} are defined for all "physical quantities"_units.html (mass, distance, etc.). (Note that converting to or from the "lj" unit style is not supported.) These factors are stored as "internal style variables"_variable.html with -standard names: +the following standard names: _u_mass _u_distance @@ -241,7 +241,7 @@ Note the multiplication by $\{_u_distance\} and $\{_u_mass\} to convert from SI units (specified in the {kim_init} command) to whatever units the IM uses (metal in this case), and the division by $\{_u_energy\} to convert from the IM's energy units to SI units (Joule). This script -will work correctly for any IM for Al (KIM Model or SM) selected by the +will work correctly for any IM for Al (KIM PM or SM) selected by the {kim_init} command. Care must be taken to apply unit conversion to dimensional variables read in @@ -283,10 +283,10 @@ kim_interactions Si Si Si C The {kim_interactions} command performs all the necessary steps to set up the OpenKIM IM selected in the {kim_init} command. The specific actions depend -on whether the IM is a KIM Model or a KIM SM. For a KIM Model, +on whether the IM is a KIM PM or a KIM SM. For a KIM PM, a "pair_style kim"_pair_kim.html command is executed followed by the appropriate {pair_coeff} command. For example, for the -Ercolessi and Adams (1994) KIM Model for Al set by the following commands: +Ercolessi and Adams (1994) KIM PM for Al set by the following commands: kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal ... @@ -302,8 +302,7 @@ pair_coeff * * Al :pre For a KIM SM, the generated input commands may be more complex and require that LAMMPS is built with the required packages included for the type of potential being used. The set of commands to be executed -is defined in the SM specification file, which is part of the SM package -on "OpenKIM"_https://openkim.org. +is defined in the SM specification file, which is part of the SM package. For example, for the Strachan et al. (2003) ReaxFF SM set by the following commands: @@ -416,14 +415,16 @@ the nature of the query or its source is recorded. Citation of OpenKIM IMs :h4 When publishing results obtained using OpenKIM IMs researchers are requested -to cite the OpenKIM project "(Tadmor)"_#kim-mainpaper and KIM API -"(Elliott)"_#kim-api as well as the specific IM codes used in the simulations. +to cite the OpenKIM project "(Tadmor)"_#kim-mainpaper, KIM API +"(Elliott)"_#kim-api, and the specific IM codes used in the simulations, +in addition to the relevant scientific references for the IM. The citation format for an IM is displayed on its page on -"OpenKIM"_https://openkim.org along with the corresponding BibTex file. +"OpenKIM"_https://openkim.org along with the corresponding BibTex file, +and is automatically added to the LAMMPS {log.cite} file. -Citing the codes used in the simulation gives credit -to the researchers who developed them and enables open source efforts like -OpenKIM to function. +Citing the IM software (KIM infrastucture and specific PM or SM codes) +used in the simulation gives credit to the researchers who developed them +and enables open source efforts like OpenKIM to function. [Restrictions:] @@ -442,7 +443,7 @@ must be installed. [Related commands:] -"pair_style kim"_pair_kim.html, "units"_units.html +"pair_style kim"_pair_kim.html :line From b6535367501e4f9c3e85c32ade7cea6ef6cd6f9d Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Mon, 24 Jun 2019 14:38:44 -0500 Subject: [PATCH 324/760] Switched pair_style kim doc to "KIM Portable Model" terminology --- doc/src/pair_kim.txt | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 86d13808b0..41593675ba 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -27,11 +27,12 @@ potentials to enable their use in LAMMPS scripts. The preferred interface for using interatomic models archived in OpenKIM is the "kim_commands interface"_kim_commands.html. That -interface supports both "KIM Models" that conform to the KIM API -and can be used by any KIM-compliant simulation code, and +interface supports both "KIM Portable Models" (PMs) that conform to the +KIM API Portable Model Interface (PMI) and can be used by any +simulation code that conforms to the KIM API/PMI, and "KIM Simulator Models" that are natively implemented within a single simulation code (like LAMMPS) and can only be used with it. -The {pair_style kim} command is limited to KIM Models. It is +The {pair_style kim} command is limited to KIM PMs. It is used by the "kim_commands interface"_kim_commands.html as needed. NOTE: Since {pair_style kim} is called by {kim_interactions} as needed, @@ -39,23 +40,23 @@ is not recommended to be directly used in input scripts. :line -The argument {model} is the name of the KIM model for a specific -potential as KIM defines it. For potentials archived in OpenKIM +The argument {model} is the name of the KIM PM. +For potentials archived in OpenKIM this is the extended KIM ID (see "kim_commands"_kim_commands.html -for details). LAMMPS can invoke any KIM Model, however there can -be incompatibilities (for example unit matching issues). +for details). LAMMPS can invoke any KIM PM, however there can +be incompatibilities (for example due to unit matching issues). In the event of an incompatibility, the code will terminate with an error message. Check both the LAMMPS and KIM log files for details. Only a single {pair_coeff} command is used with the {kim} style, which specifies the mapping of LAMMPS atom types to the species supported by -the KIM Model. This is done by specifying {N} additional arguments +the KIM PM. This is done by specifying {N} additional arguments after the * * in the {pair_coeff} command, where {N} is the number of LAMMPS atom types: N element names = mapping of KIM elements to atom types :ul -For example, consider a KIM Model that supports Si and C species. +For example, consider a KIM PM that supports Si and C species. If the LAMMPS simulation has four atom types, where the first three are Si, and the fourth is C, the following {pair_coeff} command would be used: @@ -63,14 +64,14 @@ pair_coeff * * Si Si Si C :pre The first two arguments must be * * so as to span all LAMMPS atom types. The first three Si arguments map LAMMPS atom types 1, 2, and 3 to Si as -defined within KIM Model. The final C argument maps LAMMPS atom type 4 to C. +defined within KIM PM. The final C argument maps LAMMPS atom type 4 to C. :line In addition to the usual LAMMPS error messages, the KIM library itself may generate errors, which should be printed to the screen. In this case it is also useful to check the {kim.log} file for additional error -information. The file kim.log should be generated in the same +information. The file {kim.log} should be generated in the same directory where LAMMPS is running. To download, build, and install the KIM library on your system, see From 4284a4fac41a36d0d897ff9a3f079719f57973a0 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Mon, 24 Jun 2019 14:51:35 -0500 Subject: [PATCH 325/760] Changed me to me_si and fixed some typos in comments --- src/KIM/kim_units.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/KIM/kim_units.cpp b/src/KIM/kim_units.cpp index fe90d58e9e..40f4917601 100644 --- a/src/KIM/kim_units.cpp +++ b/src/KIM/kim_units.cpp @@ -76,9 +76,9 @@ double const Nav = 6.022140857e23; // [unitless] Avogadro's number // (NIST value) // double const Nav = 6.02214076e23; // [unitless] Avogadro's number // (official value May 2019) -double const me = 9.10938356e-31; // [kg] electron rest mass +double const me_si = 9.10938356e-31; // [kg] electron rest mass // (NIST value) -// double me = 9.10938291e-31; // [kg] electron rest mass +// double me_si = 9.10938291e-31; // [kg] electron rest mass double const e_si = 1.6021766208e-19; // [C] elementary charge // (charge of an electron/proton) // (NIST value) @@ -114,8 +114,9 @@ double const attogram_si = 1e-21; // [kg[ attogram double const atu_si = 2.418884326509e-17; // [s] atomic time unit // ( = hbar/E_h where E_h is the // Hartree energy) (NIST value) -double const atu_electron_si = atu_si*sqrt(amu_si/me); // [s] atomic time unit - // used in electron system (see https://sourceforge.net/p/lammps/mailman/lammps-users/thread/BCA2BDB2-BA03-4280-896F-1E6120EF47B2%40caltech.edu/) +double const atu_electron_si = atu_si*sqrt(amu_si/me_si); + // [s] atomic time unit + // used in electron system (see https://sourceforge.net/p/lammps/mailman/lammps-users/thread/BCA2BDB2-BA03-4280-896F-1E6120EF47B2%40caltech.edu/) double const microsecond_si = 1e-6; // [s] microsecond double const nanosecond_si = 1e-9; // [s] nanosecond double const picosecond_si = 1e-12; // [s] picosecond @@ -130,13 +131,12 @@ double const amu_per_bohrcu_si = amu_si/pow(bohr_si,3); // [kg/m^3] amu/bohr^3 double const picogram_per_micrometercu_si = picogram_si/pow(micrometer_si,3); // [kg/m^3] picogram/micrometer^3 double const attogram_per_nanometercu_si = - attogram_si/pow(nanometer_si,3); // [kg/m^3] attogram/ - // nanomaterial^3 + attogram_si/pow(nanometer_si,3); // [kg/m^3] attogram/nanometer^3 /*---------------------- Energy/torque units ------------------------ */ -double const kcal_si = 4184.0; // [J] kilocalroie (heat energy +double const kcal_si = 4184.0; // [J] kilocalorie (heat energy // involved in warming up one // kilogram of water by one // degree Kelvin) @@ -155,8 +155,8 @@ double const erg_si = 1e-7; // [J] erg double const dyne_centimeter_si = 1e-7; // [J[ dyne*centimeter double const picogram_micrometersq_per_microsecondsq_si = picogram_si*pow(micrometer_si,2)/pow(microsecond_si,2); - // [J] pigogram*micrometer^2/ - // micorsecond^2 + // [J] picogram*micrometer^2/ + // microsecond^2 double const attogram_nanometersq_per_nanosecondsq_si = attogram_si*pow(nanometer_si,2)/pow(nanosecond_si,2); // [J] attogram*nanometer^2/ From 86d878a7eb4b73432eab53538a2c114571be63e0 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Mon, 24 Jun 2019 15:26:41 -0500 Subject: [PATCH 326/760] Updated language on availability of ADP potentials in OpenKIM --- doc/src/pair_adp.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/src/pair_adp.txt b/doc/src/pair_adp.txt index d5b07e8431..de6717a6c3 100644 --- a/doc/src/pair_adp.txt +++ b/doc/src/pair_adp.txt @@ -49,12 +49,11 @@ Note that ADP potentials obtained from NIST must be converted into the extended DYNAMO {setfl} format discussed below. :l -The OpenKIM Project at https://openkim.org provides ADP potentials -as Simulator Models that can be used directly in LAMMPS with -the "kim_commands interface"_kim_commands.html. +The OpenKIM Project at https://openkim.org/browse/models/by-type provides +ADP potentials that can be used directly in LAMMPS with the "kim_commands +interface"_kim_commands.html. :l - :line Only a single pair_coeff command is used with the {adp} style which From 423eebda25f381c0cdd6a9e17815204c3081811c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Jun 2019 05:57:48 -0400 Subject: [PATCH 327/760] restore header --- src/CLASS2/pair_lj_class2_coul_long.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CLASS2/pair_lj_class2_coul_long.cpp b/src/CLASS2/pair_lj_class2_coul_long.cpp index 7bc67a5afa..c92c7b78f1 100644 --- a/src/CLASS2/pair_lj_class2_coul_long.cpp +++ b/src/CLASS2/pair_lj_class2_coul_long.cpp @@ -2,10 +2,12 @@ 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. ------------------------------------------------------------------------- */ From 50e76ff7a1369efdb1c6238d0c937d802db10f6f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 25 Jun 2019 05:59:29 -0400 Subject: [PATCH 328/760] restore virtual keyword and empty lines in comments --- src/CLASS2/pair_lj_class2_coul_long.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/CLASS2/pair_lj_class2_coul_long.h b/src/CLASS2/pair_lj_class2_coul_long.h index 447191ea1f..50d7092541 100644 --- a/src/CLASS2/pair_lj_class2_coul_long.h +++ b/src/CLASS2/pair_lj_class2_coul_long.h @@ -2,10 +2,12 @@ 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. ------------------------------------------------------------------------- */ @@ -29,7 +31,7 @@ class PairLJClass2CoulLong : public Pair { virtual void compute(int, int); virtual void settings(int, char **); void coeff(int, char **); - void init_style(); + virtual void init_style(); virtual double init_one(int, int); void write_restart(FILE *); void read_restart(FILE *); @@ -62,17 +64,28 @@ class PairLJClass2CoulLong : public Pair { #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 style lj/class2/coul/long requires atom attribute q + The atom style defined does not have this attribute. + E: Pair style requires a KSpace style + No kspace style is defined. + E: Pair cutoff < Respa interior cutoff + One or more pairwise cutoffs are too short to use with the specified rRESPA cutoffs. + */ From 6a6d08e18ef9f47e679dd79b841bdc1faf05d849 Mon Sep 17 00:00:00 2001 From: Julien Devemy Date: Tue, 25 Jun 2019 12:01:29 +0200 Subject: [PATCH 329/760] Better compute_pressure hybrid and doc --- doc/src/compute_pressure.txt | 8 ++++-- src/compute_pressure.cpp | 50 ++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/doc/src/compute_pressure.txt b/doc/src/compute_pressure.txt index bd6e38e392..fd9bfb7aff 100644 --- a/doc/src/compute_pressure.txt +++ b/doc/src/compute_pressure.txt @@ -16,12 +16,13 @@ ID, group-ID are documented in "compute"_compute.html command pressure = style name of this compute command temp-ID = ID of compute that calculates temperature, can be NULL if not needed zero or more keywords may be appended -keyword = {ke} or {pair} or {bond} or {angle} or {dihedral} or {improper} or {kspace} or {fix} or {virial} :ul +keyword = {ke} or {pair} or {bond} or {angle} or {dihedral} or {improper} or {kspace} or {fix} or {virial} or {hybridpair} :ul [Examples:] compute 1 all pressure thermo_temp -compute 1 all pressure NULL pair bond :pre +compute 1 all pressure NULL pair bond +compute 1 all pressure NULL hybridpair lj/cut :pre [Description:] @@ -67,6 +68,9 @@ extra keywords are listed, then only those components are summed to compute temperature or ke and/or the virial. The {virial} keyword means include all terms except the kinetic energy {ke}. +The {hybridpair} keyword means to only include contribution +from a subpair in a {hybrid} or {hybrid/overlay} pair style. + Details of how LAMMPS computes the virial efficiently for the entire system, including for many-body potentials and accounting for the effects of periodic boundary conditions are discussed in diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index 8381e04fa8..96f577219d 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -81,8 +81,37 @@ ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : int iarg = 4; while (iarg < narg) { if (strcmp(arg[iarg],"ke") == 0) keflag = 1; - else if (strcmp(arg[iarg],"hybridpair") == 0) - hybridpairflag = force->inumeric(FLERR, arg[++iarg]); + else if (strcmp(arg[iarg],"hybridpair") == 0) { + int n = strlen(arg[++iarg]) + 1; + if (lmp->suffix) n += strlen(lmp->suffix) + 1; + pstyle = new char[n]; + strcpy(pstyle,arg[iarg++]); + + nsub = 0; + + if (narg > iarg) { + if (isdigit(arg[iarg][0])) { + nsub = force->inumeric(FLERR,arg[iarg]); + ++iarg; + if (nsub <= 0) + error->all(FLERR,"Illegal compute pressure command"); + } + } + + // check if pair style with and without suffix exists + + hybridpair = (Pair *) force->pair_match(pstyle,1,nsub); + if (!hybridpair && lmp->suffix) { + strcat(pstyle,"/"); + strcat(pstyle,lmp->suffix); + hybridpair = (Pair *) force->pair_match(pstyle,1,nsub); + } + + if (!hybridpair) + error->all(FLERR,"Unrecognized pair style in compute pressure command"); + + hybridpairflag = 1; + } else if (strcmp(arg[iarg],"pair") == 0) pairflag = 1; else if (strcmp(arg[iarg],"bond") == 0) bondflag = 1; else if (strcmp(arg[iarg],"angle") == 0) angleflag = 1; @@ -144,12 +173,7 @@ void ComputePressure::init() nvirial = 0; vptr = NULL; - if (hybridpairflag > 0 && force->pair) { - if (strstr(force->pair_style, "hybrid")) { - PairHybrid *ph = (PairHybrid *) force->pair; - if (hybridpairflag <= ph->nstyles) nvirial++; - } - } + if (hybridpairflag && force->pair) nvirial++; if (pairflag && force->pair) nvirial++; if (bondflag && atom->molecular && force->bond) nvirial++; if (angleflag && atom->molecular && force->angle) nvirial++; @@ -162,12 +186,10 @@ void ComputePressure::init() if (nvirial) { vptr = new double*[nvirial]; nvirial = 0; - if (hybridpairflag > 0 && force->pair) { - if (strstr(force->pair_style, "hybrid")) { - PairHybrid *ph = (PairHybrid *) force->pair; - if (hybridpairflag <= ph->nstyles) - vptr[nvirial++] = ph->styles[hybridpairflag-1]->virial; - } + if (hybridpairflag && force->pair) { + PairHybrid *ph = (PairHybrid *) force->pair; + ph->no_virial_fdotr_compute = 1; + vptr[nvirial++] = hybridpair->virial; } if (pairflag && force->pair) vptr[nvirial++] = force->pair->virial; if (bondflag && force->bond) vptr[nvirial++] = force->bond->virial; From 61ddc98a5a9ef9d53dc7f3227262b755c20fb7f7 Mon Sep 17 00:00:00 2001 From: Julien Devemy Date: Tue, 25 Jun 2019 13:30:41 +0200 Subject: [PATCH 330/760] Missing compute_pressure.h --- src/compute_pressure.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/compute_pressure.h b/src/compute_pressure.h index 3259377bd8..31983e8e2c 100644 --- a/src/compute_pressure.h +++ b/src/compute_pressure.h @@ -42,10 +42,15 @@ class ComputePressure : public Compute { char *id_temp; double virial[6]; int hybridpairflag; + class Pair *hybridpair; int keflag,pairflag,bondflag,angleflag,dihedralflag,improperflag; int fixflag,kspaceflag; void virial_compute(int, int); + + private: + int nsub; + char *pstyle; }; } From 2fd924562b94c9fb4d1b6a933211416e07b3b869 Mon Sep 17 00:00:00 2001 From: Julien Devemy Date: Tue, 25 Jun 2019 15:15:30 +0200 Subject: [PATCH 331/760] Spell correction --- doc/src/compute_pressure.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_pressure.txt b/doc/src/compute_pressure.txt index fd9bfb7aff..070376075e 100644 --- a/doc/src/compute_pressure.txt +++ b/doc/src/compute_pressure.txt @@ -69,7 +69,7 @@ compute temperature or ke and/or the virial. The {virial} keyword means include all terms except the kinetic energy {ke}. The {hybridpair} keyword means to only include contribution -from a subpair in a {hybrid} or {hybrid/overlay} pair style. +from a sub-style in a {hybrid} or {hybrid/overlay} pair style. Details of how LAMMPS computes the virial efficiently for the entire system, including for many-body potentials and accounting for the From e08146c31fa887300dbba54ee01e3f69782440e5 Mon Sep 17 00:00:00 2001 From: "Dan S. Bolintineanu" Date: Tue, 25 Jun 2019 12:06:18 -0600 Subject: [PATCH 332/760] Allow twisting torque to be used without rolling torque in pair granular --- src/GRANULAR/pair_granular.cpp | 39 +++++++++++++++++----------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 913f6f8b59..77b1981786 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -475,16 +475,12 @@ void PairGranular::compute(int eflag, int vflag) fs3 = -Ft*vtr3; } - //**************************************** - // rolling resistance - //**************************************** - - if (roll_model[itype][jtype] != ROLL_NONE) { + if (roll_model[itype][jtype] != ROLL_NONE || + twist_model[itype][jtype] != TWIST_NONE){ relrot1 = omega[i][0] - omega[j][0]; relrot2 = omega[i][1] - omega[j][1]; relrot3 = omega[i][2] - omega[j][2]; - - // rolling velocity, + // rolling velocity, // see eq. 31 of Wang et al, Particuology v 23, p 49 (2015) // this is different from the Marshall papers, // which use the Bagi/Kuhn formulation @@ -492,7 +488,12 @@ void PairGranular::compute(int eflag, int vflag) // - 0.5*((radj-radi)/radsum)*vtr1; // - 0.5*((radj-radi)/radsum)*vtr2; // - 0.5*((radj-radi)/radsum)*vtr3; + } + //**************************************** + // rolling resistance + //**************************************** + if (roll_model[itype][jtype] != ROLL_NONE) { vrl1 = Reff*(relrot2*nz - relrot3*ny); vrl2 = Reff*(relrot3*nx - relrot1*nz); vrl3 = Reff*(relrot1*ny - relrot2*nx); @@ -1231,10 +1232,10 @@ void PairGranular::write_restart(FILE *fp) fwrite(&tangential_model[i][j],sizeof(int),1,fp); fwrite(&roll_model[i][j],sizeof(int),1,fp); fwrite(&twist_model[i][j],sizeof(int),1,fp); - fwrite(&normal_coeffs[i][j],sizeof(double),4,fp); - fwrite(&tangential_coeffs[i][j],sizeof(double),3,fp); - fwrite(&roll_coeffs[i][j],sizeof(double),3,fp); - fwrite(&twist_coeffs[i][j],sizeof(double),3,fp); + fwrite(normal_coeffs[i][j],sizeof(double),4,fp); + fwrite(tangential_coeffs[i][j],sizeof(double),3,fp); + fwrite(roll_coeffs[i][j],sizeof(double),3,fp); + fwrite(twist_coeffs[i][j],sizeof(double),3,fp); fwrite(&cutoff_type[i][j],sizeof(double),1,fp); } } @@ -1261,10 +1262,10 @@ void PairGranular::read_restart(FILE *fp) fread(&tangential_model[i][j],sizeof(int),1,fp); fread(&roll_model[i][j],sizeof(int),1,fp); fread(&twist_model[i][j],sizeof(int),1,fp); - fread(&normal_coeffs[i][j],sizeof(double),4,fp); - fread(&tangential_coeffs[i][j],sizeof(double),3,fp); - fread(&roll_coeffs[i][j],sizeof(double),3,fp); - fread(&twist_coeffs[i][j],sizeof(double),3,fp); + fread(normal_coeffs[i][j],sizeof(double),4,fp); + fread(tangential_coeffs[i][j],sizeof(double),3,fp); + fread(roll_coeffs[i][j],sizeof(double),3,fp); + fread(twist_coeffs[i][j],sizeof(double),3,fp); fread(&cutoff_type[i][j],sizeof(double),1,fp); } MPI_Bcast(&normal_model[i][j],1,MPI_INT,0,world); @@ -1272,10 +1273,10 @@ void PairGranular::read_restart(FILE *fp) MPI_Bcast(&tangential_model[i][j],1,MPI_INT,0,world); MPI_Bcast(&roll_model[i][j],1,MPI_INT,0,world); MPI_Bcast(&twist_model[i][j],1,MPI_INT,0,world); - MPI_Bcast(&normal_coeffs[i][j],4,MPI_DOUBLE,0,world); - MPI_Bcast(&tangential_coeffs[i][j],3,MPI_DOUBLE,0,world); - MPI_Bcast(&roll_coeffs[i][j],3,MPI_DOUBLE,0,world); - MPI_Bcast(&twist_coeffs[i][j],3,MPI_DOUBLE,0,world); + MPI_Bcast(normal_coeffs[i][j],4,MPI_DOUBLE,0,world); + MPI_Bcast(tangential_coeffs[i][j],3,MPI_DOUBLE,0,world); + MPI_Bcast(roll_coeffs[i][j],3,MPI_DOUBLE,0,world); + MPI_Bcast(twist_coeffs[i][j],3,MPI_DOUBLE,0,world); MPI_Bcast(&cutoff_type[i][j],1,MPI_DOUBLE,0,world); } } From f6319146b04b04e4887fdfe44a47ebc45544d97a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Tue, 25 Jun 2019 15:03:24 -0500 Subject: [PATCH 333/760] Update kim_query to new interface --- src/KIM/kim_query.cpp | 24 ++++++++++++++++++++---- src/KIM/kim_query.h | 3 +-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/KIM/kim_query.cpp b/src/KIM/kim_query.cpp index e4818abc94..2bb404ec26 100644 --- a/src/KIM/kim_query.cpp +++ b/src/KIM/kim_query.cpp @@ -51,7 +51,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-2.0.2 (and newer) package + Designed for use with the kim-api-2.1.0 (and newer) package ------------------------------------------------------------------------- */ #include @@ -61,7 +61,9 @@ #include "comm.h" #include "error.h" #include "input.h" +#include "modify.h" #include "variable.h" +#include "fix_store_kim.h" #if defined(LMP_KIM_CURL) #include @@ -77,7 +79,7 @@ struct WriteBuf { size_t sizeleft; }; -static char *do_query(char *, int, char **, int, MPI_Comm); +static char *do_query(char *, char *, int, char **, int, MPI_Comm); static size_t write_callback(void *, size_t, size_t, void *); #endif @@ -90,12 +92,23 @@ void KimQuery::command(int narg, char **arg) if (narg < 2) error->all(FLERR,"Illegal kim_query command"); + // check if we had a kim_init command by finding fix STORE/KIM + // retrieve model name. + char * model_name; + + int ifix = modify->find_fix("KIM_MODEL_STORE"); + if (ifix >= 0) { + FixStoreKIM *fix_store = (FixStoreKIM *) modify->fix[ifix]; + model_name = (char *)fix_store->getptr("model_name"); + } else error->all(FLERR,"Must use 'kim_init' before 'kim_query'"); + + varname = arg[0]; function = arg[1]; #if defined(LMP_KIM_CURL) - value = do_query(function, narg-2, arg+2, comm->me, world); + value = do_query(function, model_name, narg-2, arg+2, comm->me, world); // check for valid result // on error the content of "value" is a '\0' byte @@ -147,7 +160,8 @@ size_t write_callback(void *data, size_t size, size_t nmemb, void *userp) return 0; // done } -char *do_query(char *qfunction, int narg, char **arg, int rank, MPI_Comm comm) +char *do_query(char *qfunction, char * model_name, int narg, char **arg, + int rank, MPI_Comm comm) { char value[512], *retval; @@ -173,6 +187,8 @@ char *do_query(char *qfunction, int narg, char **arg, int rank, MPI_Comm comm) url += qfunction; std::string query(arg[0]); + query += "&model="; + query += model_name; for (int i=1; i < narg; ++i) { query += '&'; query += arg[i]; diff --git a/src/KIM/kim_query.h b/src/KIM/kim_query.h index 3644e4519b..b5433def79 100644 --- a/src/KIM/kim_query.h +++ b/src/KIM/kim_query.h @@ -51,7 +51,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-2.0.2 (and newer) package + Designed for use with the kim-api-2.1.0 (and newer) package ------------------------------------------------------------------------- */ #ifdef COMMAND_CLASS @@ -71,7 +71,6 @@ class KimQuery : protected Pointers { public: KimQuery(class LAMMPS *lmp) : Pointers(lmp) {}; void command(int, char **); - }; } From f1dfcaf514948935724df4b0b754adecfca3cf04 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 25 Jun 2019 14:47:21 -0600 Subject: [PATCH 334/760] WIP --- src/KOKKOS/pair_snap_kokkos.h | 25 +- src/KOKKOS/pair_snap_kokkos_impl.h | 381 +++++--- src/KOKKOS/sna_kokkos.h | 51 +- src/KOKKOS/sna_kokkos_impl.h | 1461 +++++++++++++++++----------- 4 files changed, 1183 insertions(+), 735 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos.h b/src/KOKKOS/pair_snap_kokkos.h index b2019879ed..8be0bf9afb 100644 --- a/src/KOKKOS/pair_snap_kokkos.h +++ b/src/KOKKOS/pair_snap_kokkos.h @@ -31,7 +31,10 @@ PairStyle(snap/kk/host,PairSNAPKokkos) namespace LAMMPS_NS { template -struct TagPairSNAP{}; +struct TagPairSNAPCompute{}; + +struct TagPairSNAPBeta{}; +struct TagPairSNAPBispectrum{}; template class PairSNAPKokkos : public PairSNAP { @@ -53,11 +56,17 @@ public: template KOKKOS_INLINE_FUNCTION - void operator() (TagPairSNAP,const typename Kokkos::TeamPolicy >::member_type& team) const; + void operator() (TagPairSNAPCompute,const typename Kokkos::TeamPolicy >::member_type& team) const; template KOKKOS_INLINE_FUNCTION - void operator() (TagPairSNAP,const typename Kokkos::TeamPolicy >::member_type& team, EV_FLOAT&) const; + void operator() (TagPairSNAPCompute,const typename Kokkos::TeamPolicy >::member_type& team, EV_FLOAT&) const; + + KOKKOS_INLINE_FUNCTION + void operator() (TagPairSNAPBeta,const typename Kokkos::TeamPolicy::member_type& team) const; + + KOKKOS_INLINE_FUNCTION + void operator() (TagPairSNAPBispectrum,const typename Kokkos::TeamPolicy::member_type& team) const; template KOKKOS_INLINE_FUNCTION @@ -82,10 +91,14 @@ protected: SNAKokkos snaKK; // How much parallelism to use within an interaction - int vector_length; + int vector_length,team_size; + int team_scratch_size; + int thread_scratch_size; int eflag,vflag; + void compute_beta(); + void compute_bispectrum(); void allocate(); //void read_files(char *, char *); /*template @@ -117,7 +130,9 @@ inline double dist2(double* x,double* y); Kokkos::View d_radelem; // element radii Kokkos::View d_wjelem; // elements weights Kokkos::View d_coeffelem; // element bispectrum coefficients - Kokkos::View d_map; // mapping from atom types to elements + Kokkos::View d_map; // mapping from atom types to elements + Kokkos::View d_beta; // betas for all atoms in list + Kokkos::View d_bispectrum; // bispectrum components for all atoms in list typedef Kokkos::DualView tdual_fparams; tdual_fparams k_cutsq; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 0ec4ed0995..687c9dc7cb 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -186,31 +186,45 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) snaKK.nmax = max_neighs; - T_INT team_scratch_size = snaKK.size_team_scratch_arrays(); - T_INT thread_scratch_size = snaKK.size_thread_scratch_arrays(); + team_scratch_size = snaKK.size_team_scratch_arrays(); + thread_scratch_size = snaKK.size_thread_scratch_arrays(); //printf("Sizes: %i %i\n",team_scratch_size/1024,thread_scratch_size/1024); int team_size_max = Kokkos::TeamPolicy::team_size_max(*this); - int vector_length = 8; + vector_length = 8; #ifdef KOKKOS_ENABLE_CUDA - int team_size = 32;//max_neighs; + team_size = 32;//max_neighs; if (team_size*vector_length > team_size_max) team_size = team_size_max/vector_length; #else - int team_size = 1; + team_size = 1; #endif + if (beta_max < list->inum) { // TODO: no init + d_beta = Kokkos::View("PairSNAPKokkos:beta", + list->inum,ncoeff); + d_bispectrum = Kokkos::View("PairSNAPKokkos:bispectrum", + list->inum,ncoeff); + beta_max = list->inum; + } + + // compute dE_i/dB_i = beta_i for all i in list + + if (quadraticflag || eflag) + compute_bispectrum(); + compute_beta(); + EV_FLOAT ev; if (eflag) { if (neighflag == HALF) { - typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); + typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); Kokkos::parallel_reduce(policy .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) ,*this,ev); } else if (neighflag == HALFTHREAD) { - typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); + typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); Kokkos::parallel_reduce(policy .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) @@ -218,13 +232,13 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) } } else { if (neighflag == HALF) { - typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); + typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); Kokkos::parallel_for(policy .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) ,*this); } else if (neighflag == HALFTHREAD) { - typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); + typename Kokkos::TeamPolicy > policy(inum,team_size,vector_length); Kokkos::parallel_for(policy .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) @@ -232,11 +246,6 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) } } -//static int step =0; -//step++; -//if (step%10==0) -// printf(" %e %e %e %e %e (%e %e): %e\n",t1,t2,t3,t4,t5,t6,t7,t1+t2+t3+t4+t5); - if (need_dup) Kokkos::Experimental::contribute(f, dup_f); @@ -275,6 +284,153 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) } } +/* ---------------------------------------------------------------------- + compute beta +------------------------------------------------------------------------- */ + +template +void PairSNAPKokkos::compute_beta() +{ + // TODO: use RangePolicy instead, or thread over ncoeff? + int inum = list->inum; + typename Kokkos::TeamPolicy policy(inum,team_size,vector_length); + Kokkos::parallel_for(policy + .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) + .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) + ,*this); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void PairSNAPKokkos::operator() (TagPairSNAPBeta,const typename Kokkos::TeamPolicy::member_type& team) const { + + const int ii = team.league_rank(); + const int i = d_ilist[ii]; + const int itype = type[i]; + const int ielem = map[itype]; + Kokkos::View> + d_coeffi(d_coeffelem,ielem,Kokkos::ALL); + + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + d_beta(ii,icoeff) = d_coeffi[icoeff+1]; + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = d_bispectrum(ii,icoeff); + d_beta(ii,icoeff) += d_coeffi[k]*bveci; + k++; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + double bvecj = d_bispectrum(ii,jcoeff); + d_beta(ii,icoeff) += d_coeffi[k]*bvecj; + d_beta(ii,jcoeff) += d_coeffi[k]*bveci; + k++; + } + } + } +} + +/* ---------------------------------------------------------------------- + compute bispectrum +------------------------------------------------------------------------- */ + +template +void PairSNAPKokkos::compute_bispectrum() +{ + int inum = list->inum; + typename Kokkos::TeamPolicy policy(inum,team_size,vector_length); + Kokkos::parallel_for(policy + .set_scratch_size(1,Kokkos::PerThread(thread_scratch_size)) + .set_scratch_size(1,Kokkos::PerTeam(team_scratch_size)) + ,*this); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void PairSNAPKokkos::operator() (TagPairSNAPBispectrum,const typename Kokkos::TeamPolicy::member_type& team) const { + + const int ii = team.league_rank(); + const int i = d_ilist[ii]; + SNAKokkos my_sna(snaKK,team); + 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 = d_map[itype]; + const double radi = d_radelem[ielem]; + + const int num_neighs = d_numneigh[i]; + + // 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 + + int ninside = 0; + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team,num_neighs), + [&] (const int jj, int& count) { + Kokkos::single(Kokkos::PerThread(team), [&] (){ + T_INT j = d_neighbors(i,jj); + const F_FLOAT dx = x(j,0) - xtmp; + const F_FLOAT dy = x(j,1) - ytmp; + const F_FLOAT dz = x(j,2) - ztmp; + + const int jtype = type(j); + const F_FLOAT rsq = dx*dx + dy*dy + dz*dz; + const int elem_j = d_map[jtype]; + + if ( rsq < rnd_cutsq(itype,jtype) ) + count++; + }); + },ninside); + + if (team.team_rank() == 0) + Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team,num_neighs), + [&] (const int jj, int& offset, bool final) { + //for (int jj = 0; jj < num_neighs; jj++) { + T_INT j = d_neighbors(i,jj); + const F_FLOAT dx = x(j,0) - xtmp; + const F_FLOAT dy = x(j,1) - ytmp; + const F_FLOAT dz = x(j,2) - ztmp; + + const int jtype = type(j); + const F_FLOAT rsq = dx*dx + dy*dy + dz*dz; + const int elem_j = d_map[jtype]; + + if ( rsq < rnd_cutsq(itype,jtype) ) { + if (final) { + my_sna.rij(offset,0) = dx; + my_sna.rij(offset,1) = dy; + my_sna.rij(offset,2) = dz; + my_sna.inside[offset] = j; + my_sna.wj[offset] = d_wjelem[elem_j]; + my_sna.rcutij[offset] = (radi + d_radelem[elem_j])*rcutfac; + } + offset++; + } + }); + team.team_barrier(); + + // compute Ui, Zi, and Bi for atom I + + my_sna.compute_ui(team,ninside); + team.team_barrier(); + + my_sna.compute_zi(team); + team.team_barrier(); + + my_sna.compute_bi(team); + team.team_barrier(); + + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + d_bispectrum(ii,icoeff) = my_sna.blist[icoeff]; +} + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ @@ -354,7 +510,7 @@ void PairSNAPKokkos::coeff(int narg, char **arg) template template KOKKOS_INLINE_FUNCTION -void PairSNAPKokkos::operator() (TagPairSNAP,const typename Kokkos::TeamPolicy >::member_type& team, EV_FLOAT& ev) const { +void PairSNAPKokkos::operator() (TagPairSNAPCompute,const typename Kokkos::TeamPolicy >::member_type& team, EV_FLOAT& ev) const { // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial @@ -364,12 +520,12 @@ void PairSNAPKokkos::operator() (TagPairSNAP,const const int ii = team.league_rank(); const int i = d_ilist[ii]; SNAKokkos my_sna(snaKK,team); - const double x_i = x(i,0); - const double y_i = x(i,1); - const double z_i = x(i,2); - const int type_i = type[i]; - const int elem_i = d_map[type_i]; - const double radi = d_radelem[elem_i]; + 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 = d_map[itype]; + const double radi = d_radelem[ielem]; const int num_neighs = d_numneigh[i]; @@ -379,41 +535,38 @@ void PairSNAPKokkos::operator() (TagPairSNAP,const // rcutij = cutoffs for neighbors of I within cutoff // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi - //Kokkos::Timer timer; int ninside = 0; Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team,num_neighs), [&] (const int jj, int& count) { Kokkos::single(Kokkos::PerThread(team), [&] (){ T_INT j = d_neighbors(i,jj); - const F_FLOAT dx = x(j,0) - x_i; - const F_FLOAT dy = x(j,1) - y_i; - const F_FLOAT dz = x(j,2) - z_i; + const F_FLOAT dx = x(j,0) - xtmp; + const F_FLOAT dy = x(j,1) - ytmp; + const F_FLOAT dz = x(j,2) - ztmp; - const int type_j = type(j); + const int jtype = type(j); const F_FLOAT rsq = dx*dx + dy*dy + dz*dz; - const int elem_j = d_map[type_j]; + const int elem_j = d_map[jtype]; - if ( rsq < rnd_cutsq(type_i,type_j) ) + if ( rsq < rnd_cutsq(itype,jtype) ) count++; }); },ninside); - //t1 += timer.seconds(); timer.reset(); - if (team.team_rank() == 0) Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team,num_neighs), - [&] (const int jj, int& offset, bool final){ + [&] (const int jj, int& offset, bool final) { //for (int jj = 0; jj < num_neighs; jj++) { T_INT j = d_neighbors(i,jj); - const F_FLOAT dx = x(j,0) - x_i; - const F_FLOAT dy = x(j,1) - y_i; - const F_FLOAT dz = x(j,2) - z_i; + const F_FLOAT dx = x(j,0) - xtmp; + const F_FLOAT dy = x(j,1) - ytmp; + const F_FLOAT dz = x(j,2) - ztmp; - const int type_j = type(j); + const int jtype = type(j); const F_FLOAT rsq = dx*dx + dy*dy + dz*dz; - const int elem_j = d_map[type_j]; + const int elem_j = d_map[jtype]; - if ( rsq < rnd_cutsq(type_i,type_j) ) { + if ( rsq < rnd_cutsq(itype,jtype) ) { if (final) { my_sna.rij(offset,0) = dx; my_sna.rij(offset,1) = dy; @@ -425,157 +578,85 @@ void PairSNAPKokkos::operator() (TagPairSNAP,const offset++; } }); - - //t2 += timer.seconds(); timer.reset(); - team.team_barrier(); - // compute Ui, Zi, and Bi for atom I + + // compute Ui, Yi for atom I + my_sna.compute_ui(team,ninside); - //t3 += timer.seconds(); timer.reset(); team.team_barrier(); - my_sna.compute_zi(team); - //t4 += timer.seconds(); timer.reset(); - team.team_barrier(); - - if (quadraticflag) { - my_sna.compute_bi(team); - team.team_barrier(); - my_sna.copy_bi2bvec(team); - team.team_barrier(); - } // 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 + + my_sna.compute_yi(team,d_beta,ii); + team.team_barrier(); Kokkos::View> - d_coeffi(d_coeffelem,elem_i,Kokkos::ALL); + d_coeffi(d_coeffelem,ielem,Kokkos::ALL); Kokkos::parallel_for (Kokkos::TeamThreadRange(team,ninside), [&] (const int jj) { //for (int jj = 0; jj < ninside; jj++) { int j = my_sna.inside[jj]; - //Kokkos::Timer timer2; my_sna.compute_duidrj(team,&my_sna.rij(jj,0), my_sna.wj[jj],my_sna.rcutij[jj]); - //t6 += timer2.seconds(); timer2.reset(); - my_sna.compute_dbidrj(team); - //t7 += timer2.seconds(); timer2.reset(); - my_sna.copy_dbi2dbvec(team); Kokkos::single(Kokkos::PerThread(team), [&] (){ - F_FLOAT fij[3]; - fij[0] = 0.0; - fij[1] = 0.0; - fij[2] = 0.0; - - // linear contributions - - for (int k = 1; k <= ncoeff; k++) { - double bgb = d_coeffi[k]; - fij[0] += bgb*my_sna.dbvec(k-1,0); - fij[1] += bgb*my_sna.dbvec(k-1,1); - fij[2] += bgb*my_sna.dbvec(k-1,2); - } - - if (quadraticflag) { - - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = my_sna.bvec[icoeff]; - double fack = d_coeffi[k]*bveci; - double dbvecix = my_sna.dbvec(icoeff,0); - double dbveciy = my_sna.dbvec(icoeff,1); - double dbveciz = my_sna.dbvec(icoeff,2); - fij[0] += fack*dbvecix; - fij[1] += fack*dbveciy; - fij[2] += fack*dbveciz; - k++; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double facki = d_coeffi[k]*bveci; - double fackj = d_coeffi[k]*my_sna.bvec[jcoeff]; - fij[0] += facki*my_sna.dbvec(jcoeff,0)+fackj*dbvecix; - fij[1] += facki*my_sna.dbvec(jcoeff,1)+fackj*dbveciy; - fij[2] += facki*my_sna.dbvec(jcoeff,2)+fackj*dbveciz; - k++; + F_FLOAT fij[3]; + my_sna.compute_deidrj(team,fij); + + a_f(i,0) += fij[0]; + a_f(i,1) += fij[1]; + a_f(i,2) += fij[2]; + a_f(j,0) -= fij[0]; + a_f(j,1) -= fij[1]; + a_f(j,2) -= fij[2]; + + // tally global and per-atom virial contribution + + if (EVFLAG) { + if (vflag_either) { + v_tally_xyz(ev,i,j, + fij[0],fij[1],fij[2], + -my_sna.rij(jj,0),-my_sna.rij(jj,1), + -my_sna.rij(jj,2)); } } - } - - // Hard-coded ZBL potential - //const double dx = my_sna.rij(jj,0); - //const double dy = my_sna.rij(jj,1); - //const double dz = my_sna.rij(jj,2); - //const double fdivr = -1.5e6/pow(dx*dx + dy*dy + dz*dz,7.0); - //fij[0] += dx*fdivr; - //fij[1] += dy*fdivr; - //fij[2] += dz*fdivr; - - //OK - //printf("%lf %lf %lf %lf %lf %lf %lf %lf %lf SNAP-COMPARE: FIJ\n" - // ,x(i,0),x(i,1),x(i,2),x(j,0),x(j,1),x(j,2),fij[0],fij[1],fij[2] ); - a_f(i,0) += fij[0]; - a_f(i,1) += fij[1]; - a_f(i,2) += fij[2]; - a_f(j,0) -= fij[0]; - a_f(j,1) -= fij[1]; - a_f(j,2) -= fij[2]; - - // tally global and per-atom virial contribution - - if (EVFLAG) { - if (vflag_either) { - v_tally_xyz(ev,i,j, - fij[0],fij[1],fij[2], - -my_sna.rij(jj,0),-my_sna.rij(jj,1), - -my_sna.rij(jj,2)); - } - } - + }); }); - //t5 += timer.seconds(); timer.reset(); // tally energy contribution if (EVFLAG) { if (eflag_either) { - if (!quadraticflag) { - my_sna.compute_bi(team); - team.team_barrier(); - my_sna.copy_bi2bvec(team); - team.team_barrier(); - } - - // 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 - Kokkos::single(Kokkos::PerTeam(team), [&] () { // evdwl = energy of atom I, sum over coeffs_k * Bi_k double evdwl = d_coeffi[0]; - + + // E = beta.B + 0.5*B^t.alpha.B + // linear contributions - // could use thread vector range on this loop - - for (int k = 1; k <= ncoeff; k++) - evdwl += d_coeffi[k]*my_sna.bvec[k-1]; - + + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + evdwl += d_coeffi[icoeff+1]*d_bispectrum(ii,icoeff); + // quadratic contributions - + if (quadraticflag) { int k = ncoeff+1; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = my_sna.bvec[icoeff]; + double bveci = d_bispectrum(ii,icoeff); evdwl += 0.5*d_coeffi[k++]*bveci*bveci; for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - evdwl += d_coeffi[k++]*bveci*my_sna.bvec[jcoeff]; + double bvecj = d_bispectrum(ii,jcoeff); + evdwl += d_coeffi[k++]*bveci*bvecj; } } } @@ -591,9 +672,9 @@ void PairSNAPKokkos::operator() (TagPairSNAP,const template template KOKKOS_INLINE_FUNCTION -void PairSNAPKokkos::operator() (TagPairSNAP,const typename Kokkos::TeamPolicy >::member_type& team) const { +void PairSNAPKokkos::operator() (TagPairSNAPCompute,const typename Kokkos::TeamPolicy >::member_type& team) const { EV_FLOAT ev; - this->template operator()(TagPairSNAP(), team, ev); + this->template operator()(TagPairSNAPCompute(), team, ev); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 40e5fe0ad4..ff2541dca3 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -25,7 +25,11 @@ namespace LAMMPS_NS { -struct SNAKK_LOOPINDICES { +struct SNAKK_ZINDICES { + int j1, j2, j, ma1min, ma2max, mb1min, mb2max, na, nb, jju; +}; + +struct SNAKK_BINDICES { int j1, j2, j; }; @@ -35,9 +39,9 @@ class SNAKokkos { public: typedef Kokkos::View t_sna_1i; typedef Kokkos::View t_sna_1d; + typedef Kokkos::View > t_sna_1d_atomic; typedef Kokkos::View t_sna_2d; typedef Kokkos::View t_sna_3d; - typedef Kokkos::View > t_sna_3d_atomic; typedef Kokkos::View t_sna_4d; typedef Kokkos::View t_sna_3d3; typedef Kokkos::View t_sna_5d; @@ -76,9 +80,10 @@ inline KOKKOS_INLINE_FUNCTION void compute_zi(const typename Kokkos::TeamPolicy::member_type& team); // ForceSNAP KOKKOS_INLINE_FUNCTION - void compute_bi(const typename Kokkos::TeamPolicy::member_type& team); // ForceSNAP + void compute_yi(const typename Kokkos::TeamPolicy::member_type& team, + const Kokkos::View &beta, const int ii); // ForceSNAP KOKKOS_INLINE_FUNCTION - void copy_bi2bvec(const typename Kokkos::TeamPolicy::member_type& team); //ForceSNAP + void compute_bi(const typename Kokkos::TeamPolicy::member_type& team); // ForceSNAP // functions for derivatives @@ -87,7 +92,7 @@ inline KOKKOS_INLINE_FUNCTION void compute_dbidrj(const typename Kokkos::TeamPolicy::member_type& team); //ForceSNAP KOKKOS_INLINE_FUNCTION - void copy_dbi2dbvec(const typename Kokkos::TeamPolicy::member_type& team); //ForceSNAP + void compute_deidrj(const typename Kokkos::TeamPolicy::member_type& team, double *); // ForceSNAP KOKKOS_INLINE_FUNCTION double compute_sfac(double, double); // add_uarraytot, compute_duarray KOKKOS_INLINE_FUNCTION @@ -114,37 +119,41 @@ inline int twojmax, diagonalstyle; // Per InFlight Particle - t_sna_3d barray; - t_sna_3d uarraytot_r, uarraytot_i; - t_sna_3d_atomic uarraytot_r_a, uarraytot_i_a; - t_sna_5d zarray_r, zarray_i; + t_sna_1d blist; + t_sna_1d ulisttot_r, ulisttot_i; + t_sna_1d_atomic ulisttot_r_a, ulisttot_i_a; + t_sna_1d zlist_r, zlist_i; // Per InFlight Interaction - t_sna_3d uarray_r, uarray_i; - - Kokkos::View bvec; + t_sna_1d ulist_r, ulist_i; + t_sna_1d ylist_r, ylist_i; // derivatives of data - Kokkos::View dbvec; - t_sna_4d duarray_r, duarray_i; - t_sna_4d dbarray; + t_sna_2d dulist_r, dulist_i; + t_sna_2d dblist; private: double rmin0, rfac0; //use indexlist instead of loops, constructor generates these - // Same accross all SNAKokkos - Kokkos::View idxj,idxj_full; - int idxj_max,idxj_full_max; + // Same across all SNAKokkos + Kokkos::View idxz; + Kokkos::View idxb; + int idxcg_max, idxu_max, idxz_max, idxb_max; + Kokkos::View idxcg_block; + Kokkos::View idxu_block; + Kokkos::View idxz_block; + Kokkos::View idxb_block; + // data for bispectrum coefficients // Same accross all SNAKokkos - t_sna_5d cgarray; + t_sna_1d cglist; t_sna_2d rootpqarray; - static const int nmaxfactorial = 167; - KOKKOS_INLINE_FUNCTION + static const double nfac_table[]; + inline double factorial(int); KOKKOS_INLINE_FUNCTION diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index c43003af97..4ca8ae4471 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -47,13 +47,13 @@ SNAKokkos::SNAKokkos(double rfac0_in, build_indexlist(); - int jdim = twojmax + 1; + int jdimpq = twojmax + 2; + rootpqarray = t_sna_2d("SNAKokkos::rootpqarray",jdimpq,jdimpq); - cgarray = t_sna_5d("SNAKokkos::cgarray",jdim,jdim,jdim,jdim,jdim); - rootpqarray = t_sna_2d("SNAKokkos::rootpqarray",jdim+1,jdim+1); + cglist = t_sna_1d("SNAKokkos::cglist",idxcg_max); if (bzero_flag) { - bzero = Kokkos::View("sna:bzero",jdim); + bzero = Kokkos::View("sna:bzero",twojmax+1); auto h_bzero = Kokkos::create_mirror_view(bzero); double www = wself*wself*wself; @@ -77,11 +77,17 @@ SNAKokkos::SNAKokkos(const SNAKokkos& sna, const typenam ncoeff = sna.ncoeff; nmax = sna.nmax; - idxj = sna.idxj; - idxj_max = sna.idxj_max; - idxj_full = sna.idxj_full; - idxj_full_max = sna.idxj_full_max; - cgarray = sna.cgarray; + idxz = sna.idxz; + idxb = sna.idxb; + idxcg_max = sna.idxcg_max; + idxu_max = sna.idxu_max; + idxz_max = sna.idxz_max; + idxb_max = sna.idxb_max; + idxcg_block = sna.idxcg_block; + idxu_block = sna.idxu_block; + idxz_block = sna.idxz_block; + idxb_block = sna.idxb_block; + cglist = sna.cglist; rootpqarray = sna.rootpqarray; bzero = sna.bzero; create_team_scratch_arrays(team); @@ -100,47 +106,133 @@ template inline void SNAKokkos::build_indexlist() { - int idxj_count = 0; - int idxj_full_count = 0; + // index list for cglist + + int jdim = twojmax + 1; + idxcg_block = Kokkos::View("SNAKokkos::idxcg_block",jdim,jdim,jdim); + auto h_idxcg_block = Kokkos::create_mirror_view(idxcg_block); + + int idxcg_count = 0; + 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) { + h_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; + Kokkos::deep_copy(idxcg_block,h_idxcg_block); + + // index list for uarray + // need to include both halves + + idxu_block = Kokkos::View("SNAKokkos::idxu_block",jdim); + auto h_idxu_block = Kokkos::create_mirror_view(idxu_block); + + int idxu_count = 0; + + for(int j = 0; j <= twojmax; j++) { + h_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; + Kokkos::deep_copy(idxu_block,h_idxu_block); + + // 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 = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) idxb_count++; + + idxb_max = idxb_count; + idxb = Kokkos::View("SNAKokkos::idxb",idxb_max); + auto h_idxb = Kokkos::create_mirror_view(idxb); + + idxb_count = 0; + 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) + if (j >= j1) { + h_idxb[idxb_count].j1 = j1; + h_idxb[idxb_count].j2 = j2; + h_idxb[idxb_count].j = j; + idxb_count++; + } + Kokkos::deep_copy(idxb,h_idxb); + + // reverse index list for beta and b + + idxb_block = Kokkos::View("SNAKokkos::idxb_block",jdim,jdim,jdim); + auto h_idxb_block = Kokkos::create_mirror_view(idxb_block); + + idxb_count = 0; + 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) { + if (j >= j1) { + h_idxb_block(j1,j2,j) = idxb_count; + idxb_count++; + } + } + Kokkos::deep_copy(idxb_block,h_idxb_block); + + // index list for zlist + + int 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) { - if (j >= j1) idxj_count++; - idxj_full_count++; - } - - // 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_max = idxj_count; - idxj_full_max = idxj_full_count; - - idxj_count = 0; - idxj_full_count = 0; + 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++; + + idxz_max = idxz_count; + idxz = Kokkos::View("SNAKokkos::idxz",idxz_max); + auto h_idxz = Kokkos::create_mirror_view(idxz); + idxz_block = Kokkos::View("SNAKokkos::idxz_block", jdim,jdim,jdim); + auto h_idxz_block = Kokkos::create_mirror_view(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) { - 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 j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { + h_idxz_block(j1,j2,j) = idxz_count; + // find right beta(ii,jjb) entry + // multiply and divide by j+1 factors + // account for multiplicity of 1, 2, or 3 + + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + h_idxz[idxz_count].j1 = j1; + h_idxz[idxz_count].j2 = j2; + h_idxz[idxz_count].j = j; + h_idxz[idxz_count].ma1min = MAX(0, (2 * ma - j - j2 + j1) / 2); + h_idxz[idxz_count].ma2max = (2 * ma - j - (2 * h_idxz[idxz_count].ma1min - j1) + j2) / 2; + h_idxz[idxz_count].na = MIN(j1, (2 * ma - j + j2 + j1) / 2) - h_idxz[idxz_count].ma1min + 1; + h_idxz[idxz_count].mb1min = MAX(0, (2 * mb - j - j2 + j1) / 2); + h_idxz[idxz_count].mb2max = (2 * mb - j - (2 * h_idxz[idxz_count].mb1min - j1) + j2) / 2; + h_idxz[idxz_count].nb = MIN(j1, (2 * mb - j + j2 + j1) / 2) - h_idxz[idxz_count].mb1min + 1; + + // apply to z(j1,j2,j,ma,mb) to unique element of y(j) + + const int jju = idxu_block[j] + (j+1)*mb + ma; + h_idxz[idxz_count].jju = jju; + + idxz_count++; + } + } + Kokkos::deep_copy(idxz,h_idxz); + Kokkos::deep_copy(idxz_block,h_idxz_block); } + /* ---------------------------------------------------------------------- */ template @@ -166,6 +258,7 @@ template KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy::member_type& team, int jnum) { + //printf("jnum %i\n",jnum); double rsq, r, x, y, z, z0, theta0; // utot(j,ma,mb) = 0 for all j,ma,ma @@ -211,93 +304,234 @@ template KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_zi(const typename Kokkos::TeamPolicy::member_type& team) { - // 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) + Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), + [&] (const int& jjz) { + //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; -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif + const double* cgblock = cglist.data() + idxcg_block(j1,j2,j); - // compute_dbidrj() requires full j1/j2/j chunk of z elements - // use zarray j1/j2 symmetry + zlist_r[jjz] = 0.0; + zlist_i[jjz] = 0.0; - Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxj_full_max), - [&] (const int& idx) { - const int j1 = idxj_full(idx).j1; - const int j2 = idxj_full(idx).j2; - const int j = idxj_full(idx).j; + 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++) { - const int bound = (j+2)/2; - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,(j+1)*bound), - [&] (const int mbma ) { - //for(int mb = 0; 2*mb <= j; mb++) - //for(int ma = 0; ma <= j; ma++) { - const int ma = mbma%(j+1); - const int mb = mbma/(j+1); + double suma1_r = 0.0; + double suma1_i = 0.0; - //zarray_r(j1,j2,j,ma,mb) = 0.0; - //zarray_i(j1,j2,j,ma,mb) = 0.0; - double z_r = 0.0; - double z_i = 0.0; + const double* u1_r = ulisttot_r.data() + jju1; + const double* u1_i = ulisttot_i.data() + jju1; + const double* u2_r = ulisttot_r.data() + jju2; + const double* u2_i = ulisttot_i.data() + jju2; - for(int ma1 = MAX(0, (2 * ma - j - j2 + j1) / 2); - ma1 <= MIN(j1, (2 * ma - j + j2 + j1) / 2); ma1++) { - double sumb1_r = 0.0; - double sumb1_i = 0.0; + 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 - const int ma2 = (2 * ma - j - (2 * ma1 - j1) + j2) / 2; + zlist_r[jjz] += cgblock[icgb] * suma1_r; + zlist_i[jjz] += cgblock[icgb] * suma1_i; + //printf("%i %i %i %g %g\n",j1,j2,j,cgblock[icgb],suma1_r); + jju1 += j1+1; + jju2 -= j2+1; + icgb += j2; + } // end loop over ib - for(int mb1 = MAX( 0, (2 * mb - j - j2 + j1) / 2); - mb1 <= MIN(j1, (2 * mb - j + j2 + j1) / 2); mb1++) { - - const int mb2 = (2 * mb - j - (2 * mb1 - j1) + j2) / 2; - const double cga = cgarray(j1,j2,j,mb1,mb2); - const double uat1_r = uarraytot_r(j1,ma1,mb1); - const double uat1_i = uarraytot_i(j1,ma1,mb1); - const double uat2_r = uarraytot_r(j2,ma2,mb2); - const double uat2_i = uarraytot_i(j2,ma2,mb2); - sumb1_r += cga * (uat1_r * uat2_r - uat1_i * uat2_i); - sumb1_i += cga * (uat1_r * uat2_i + uat1_i * uat2_r); - /*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 cga = cgarray(j1,j2,j,ma1,ma2); - z_r += sumb1_r * cga;//rray(j1,j2,j,ma1,ma2); - z_i += sumb1_i * cga;//rray(j1,j2,j,ma1,ma2); - } // end loop over ma1 - zarray_r(j1,j2,j,mb,ma) = z_r; - zarray_i(j1,j2,j,mb,ma) = z_i; - }); // end loop over ma, mb - // } - //} - }); - //} // 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 + }); // end loop over jjz } +/* ---------------------------------------------------------------------- + compute Yi from Ui without storing Zi, looping over zlist indices +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void SNAKokkos::compute_yi(const typename Kokkos::TeamPolicy::member_type& team, + const Kokkos::View &beta, const int ii) +{ + int j; + int jjz; + int jju; + double betaj; + + { + double* const ptr = ylist_r.data(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team,ylist_r.span()), + [&] (const int& i) { + ptr[i] = 0.0; + }); + } + { + double* const ptr = ylist_i.data(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team,ylist_i.span()), + [&] (const int& i) { + ptr[i] = 0.0; + }); + } + + Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), + [&] (const int& jjz) { + //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; + + const double* cgblock = cglist.data() + idxcg_block(j1,j2,j); + int mb = (2 * (mb1min+mb2max) - j1 - j2 + j) / 2; + int ma = (2 * (ma1min+ma2max) - j1 - j2 + j) / 2; + + 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.data() + jju1; + const double* u1_i = ulisttot_i.data() + jju1; + const double* u2_r = ulisttot_r.data() + jju2; + const double* u2_i = ulisttot_i.data() + 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(ii,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); + if (j1 == j) { + if (j2 == j) betaj = 3*beta(ii,jjb); + else betaj = 2*beta(ii,jjb); + } else betaj = beta(ii,jjb); + } else if (j >= j2) { + const int jjb = idxb_block(j,j2,j1); + if (j2 == j) betaj = 2*beta(ii,jjb)*(j1+1)/(j+1.0); + else betaj = beta(ii,jjb)*(j1+1)/(j+1.0); + } else { + const int jjb = idxb_block(j2,j,j1); + betaj = beta(ii,jjb)*(j1+1)/(j+1.0); + } + + ylist_r[jju] += betaj*ztmp_r; + ylist_i[jju] += betaj*ztmp_i; + //printf("yi %i %g %g\n",jju,ylist_r[jju],ylist_i[jju]); + + }); // end loop over jjz +} + +/* ---------------------------------------------------------------------- + compute dEidRj +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void SNAKokkos::compute_deidrj(const typename Kokkos::TeamPolicy::member_type& team, double* dedr) +{ + + for(int k = 0; k < 3; k++) + dedr[k] = 0.0; + + // TODO: which loop is faster to parallelize? + Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,twojmax+1), + [&] (const int& j) { + //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 jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + + for(int k = 0; k < 3; k++) + dedr[k] += + dulist_r(jju,k) * jjjmambyarray_r + + dulist_i(jju,k) * jjjmambyarray_i; + jju++; + } //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 jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + + for(int k = 0; k < 3; k++) + dedr[k] += + dulist_r(jju,k) * jjjmambyarray_r + + dulist_i(jju,k) * jjjmambyarray_i; + jju++; + } + + int ma = mb; + double jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + + for(int k = 0; k < 3; k++) + dedr[k] += + (dulist_r(jju,k) * jjjmambyarray_r + + dulist_i(jju,k) * jjjmambyarray_i)*0.5; + } // end if jeven + + }); // end loop over j + + for(int k = 0; k < 3; k++) + dedr[k] *= 2.0; + + //printf("dedr %g %g %g\n",dedr[0],dedr[1],dedr[2]); +} /* ---------------------------------------------------------------------- compute Bi by summing conj(Ui)*Zi @@ -316,31 +550,33 @@ void SNAKokkos::compute_bi(const typename Kokkos::TeamPolicy::compute_bi(const typename Kokkos::TeamPolicy -KOKKOS_INLINE_FUNCTION -void SNAKokkos::copy_bi2bvec(const typename Kokkos::TeamPolicy::member_type& team) -{ - /* int ncount, j1, j2, j; - - ncount = 0; - - for(j1 = 0; j1 <= twojmax; j1++) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) {*/ - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,idxj_max), - [&] (const int& JJ) { - //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; - bvec(JJ) = barray(j1,j2,j); - //ncount++; - }); -} - -/* ---------------------------------------------------------------------- - calculate derivative of Ui w.r.t. atom j -------------------------------------------------------------------------- */ - -template -KOKKOS_INLINE_FUNCTION -void SNAKokkos::compute_duidrj(const typename Kokkos::TeamPolicy::member_type& team, - 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; - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - - compute_duarray(team, 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 - } /* ---------------------------------------------------------------------- @@ -478,21 +649,18 @@ void SNAKokkos::compute_dbidrj(const typename Kokkos::TeamPolicy::compute_dbidrj(const typename Kokkos::TeamPolicy dbdr,sumzdu_r; // Sum terms Conj(dudr(j,ma,mb))*z(j1,j2,j,ma,mb) - // use zarray j1/j2 symmetry (optional) - - int j_,j1_,j2_; - if (j1 >= j2) { - //jjjzarray_r = &zarray_r(j1,j2,j); - //jjjzarray_i = &zarray_i(j1,j2,j); - j1_ = j1; - j2_ = j2; - j_ = j; - } else { - j1_ = j2; - j2_ = j1; - j_ = j; - //jjjzarray_r = &zarray_r(j2,j1,j); - //jjjzarray_i = &zarray_i(j2,j1,j); - } + int jjz = idxz_block(j1,j2,j); + int jju = idxu_block[j]; for(int mb = 0; 2*mb < j; mb++) for(int ma = 0; ma <= j; ma++) { - - dudr_r = &duarray_r(j,mb,ma,0); - dudr_i = &duarray_i(j,mb,ma,0); - jjjmambzarray_r = zarray_r(j1_,j2_,j_,mb,ma); - jjjmambzarray_i = zarray_i(j1_,j2_,j_,mb,ma); - sumzdu_r.x += (dudr_r[0] * jjjmambzarray_r + dudr_i[0] * jjjmambzarray_i); - sumzdu_r.y += (dudr_r[1] * jjjmambzarray_r + dudr_i[1] * jjjmambzarray_i); - sumzdu_r.z += (dudr_r[2] * jjjmambzarray_r + dudr_i[2] * jjjmambzarray_i); - + const int jju_index = jju+mb*(j+1)+ma; + const int jjz_index = jjz+mb*(j+1)+ma; + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz_index] + dulist_i(jju_index,0) * zlist_i[jjz_index]); + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz_index] + dulist_i(jju_index,1) * zlist_i[jjz_index]); + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz_index] + dulist_i(jju_index,2) * zlist_i[jjz_index]); } //end loop over ma mb // For j even, handle middle column @@ -535,14 +685,19 @@ void SNAKokkos::compute_dbidrj(const typename Kokkos::TeamPolicy::compute_dbidrj(const typename Kokkos::TeamPolicy= j2) { - j1_ = j; - j2_ = j2; - j_ = j1; - - //jjjzarray_r = zarray_r(j,j2,j1); - //jjjzarray_i = zarray_i(j,j2,j1); - } else { - j1_ = j2; - j2_ = j; - j_ = j1; - //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,mb1,ma1,0); - dudr_i = &duarray_i(j1,mb1,ma1,0); - jjjmambzarray_r = zarray_r(j1_,j2_,j_,mb1,ma1); - jjjmambzarray_i = zarray_i(j1_,j2_,j_,mb1,ma1); - sumzdu_r.x += (dudr_r[0] * jjjmambzarray_r + dudr_i[0] * jjjmambzarray_i); - sumzdu_r.y += (dudr_r[1] * jjjmambzarray_r + dudr_i[1] * jjjmambzarray_i); - sumzdu_r.z += (dudr_r[2] * jjjmambzarray_r + dudr_i[2] * jjjmambzarray_i); + for(int mb = 0; 2*mb < j1; mb++) + for(int ma = 0; ma <= j1; ma++) { + const int jju_index = jju+mb*(j1+1)+ma; + const int jjz_index = jjz+mb*(j1+1)+ma; + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz_index] + dulist_i(jju_index,0) * zlist_i[jjz_index]); + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz_index] + dulist_i(jju_index,1) * zlist_i[jjz_index]); + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz_index] + dulist_i(jju_index,2) * zlist_i[jjz_index]); } //end loop over ma1 mb1 // For j1 even, handle middle column if (j1%2 == 0) { - const int mb1 = j1/2; - for(int ma1 = 0; ma1 <= mb1; ma1++) { - dudr_r = &duarray_r(j1,mb1,ma1,0); - dudr_i = &duarray_i(j1,mb1,ma1,0); - const double factor = ma1==mb1?0.5:1.0; - jjjmambzarray_r = zarray_r(j1_,j2_,j_,mb1,ma1) * factor; - jjjmambzarray_i = zarray_i(j1_,j2_,j_,mb1,ma1) * factor; - sumzdu_r.x += (dudr_r[0] * jjjmambzarray_r + dudr_i[0] * jjjmambzarray_i); - sumzdu_r.y += (dudr_r[1] * jjjmambzarray_r + dudr_i[1] * jjjmambzarray_i); - sumzdu_r.z += (dudr_r[2] * jjjmambzarray_r + dudr_i[2] * jjjmambzarray_i); + const int mb = j1/2; + for(int ma = 0; ma <= mb; ma++) { + const int jju_index = jju+(mb-1)*(j1+1)+(j1+1)+ma; + const int jjz_index = jjz+(mb-1)*(j1+1)+(j1+1)+ma; + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz_index] + dulist_i(jju_index,0) * zlist_i[jjz_index]); + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz_index] + dulist_i(jju_index,1) * zlist_i[jjz_index]); + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz_index] + dulist_i(jju_index,2) * zlist_i[jjz_index]); + } + int ma = mb; + const int jju_index = jju+(mb-1)*(j1+1)+(j1+1)+ma; + const int jjz_index = jjz+(mb-1)*(j1+1)+(j1+1)+ma; + for(int k = 0; k < 3; k++) { + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz] + dulist_i(jju_index,0) * zlist_i[jjz_index])*0.5; + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz] + dulist_i(jju_index,1) * zlist_i[jjz_index])*0.5; + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz] + dulist_i(jju_index,2) * zlist_i[jjz_index])*0.5; } } // end if j1even @@ -605,94 +748,74 @@ void SNAKokkos::compute_dbidrj(const typename Kokkos::TeamPolicy= j) { - j1_ = j1; - j2_ = j; - j_ = j2; - //jjjzarray_r = zarray_r(j1,j,j2); - //jjjzarray_i = zarray_i(j1,j,j2); - } else { - j1_ = j; - j2_ = j1; - j_ = j2; - //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,mb2,ma2,0); - dudr_i = &duarray_i(j2,mb2,ma2,0); - jjjmambzarray_r = zarray_r(j1_,j2_,j_,mb2,ma2); - jjjmambzarray_i = zarray_i(j1_,j2_,j_,mb2,ma2); - sumzdu_r.x += (dudr_r[0] * jjjmambzarray_r + dudr_i[0] * jjjmambzarray_i); - sumzdu_r.y += (dudr_r[1] * jjjmambzarray_r + dudr_i[1] * jjjmambzarray_i); - sumzdu_r.z += (dudr_r[2] * jjjmambzarray_r + dudr_i[2] * jjjmambzarray_i); + for(int mb = 0; 2*mb < j2; mb++) + for(int ma = 0; ma <= j2; ma++) { + const int jju_index = jju+mb*(j2+1)+ma; + const int jjz_index = jjz+mb*(j2+1)+ma; + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz_index] + dulist_i(jju_index,0) * zlist_i[jjz_index]); + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz_index] + dulist_i(jju_index,1) * zlist_i[jjz_index]); + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz_index] + dulist_i(jju_index,2) * zlist_i[jjz_index]); } //end loop over ma2 mb2 // For j2 even, handle middle column if (j2%2 == 0) { - const int mb2 = j2/2; - for(int ma2 = 0; ma2 <= mb2; ma2++) { - dudr_r = &duarray_r(j2,mb2,ma2,0); - dudr_i = &duarray_i(j2,mb2,ma2,0); - const double factor = ma2==mb2?0.5:1.0; - jjjmambzarray_r = zarray_r(j1_,j2_,j_,mb2,ma2) * factor; - jjjmambzarray_i = zarray_i(j1_,j2_,j_,mb2,ma2) * factor; - sumzdu_r.x += (dudr_r[0] * jjjmambzarray_r + dudr_i[0] * jjjmambzarray_i); - sumzdu_r.y += (dudr_r[1] * jjjmambzarray_r + dudr_i[1] * jjjmambzarray_i); - sumzdu_r.z += (dudr_r[2] * jjjmambzarray_r + dudr_i[2] * jjjmambzarray_i); + const int mb = j2/2; + for(int ma = 0; ma <= mb; ma++) { + const int jju_index = jju+(mb-1)*(j2+1)+(j2+1)+ma; + const int jjz_index = jjz+(mb-1)*(j2+1)+(j2+1)+ma; + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz_index] + dulist_i(jju_index,0) * zlist_i[jjz_index]); + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz_index] + dulist_i(jju_index,1) * zlist_i[jjz_index]); + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz_index] + dulist_i(jju_index,2) * zlist_i[jjz_index]); + } + int ma = mb; + const int jju_index = jju+(mb-1)*(j2+1)+(j2+1)+ma; + const int jjz_index = jjz+(mb-1)*(j2+1)+(j2+1)+ma; + for(int k = 0; k < 3; k++) { + sumzdu_r.x += (dulist_r(jju_index,0) * zlist_r[jjz] + dulist_i(jju_index,0) * zlist_i[jjz_index])*0.5; + sumzdu_r.y += (dulist_r(jju_index,1) * zlist_r[jjz] + dulist_i(jju_index,1) * zlist_i[jjz_index])*0.5; + sumzdu_r.z += (dulist_r(jju_index,2) * zlist_r[jjz] + dulist_i(jju_index,2) * zlist_i[jjz_index])*0.5; } } // end if j2even dbdr += 2.0*sumzdu_r*j2fac; - dbarray(j1,j2,j,0) = dbdr.x; - dbarray(j1,j2,j,1) = dbdr.y; - dbarray(j1,j2,j,2) = dbdr.z; + dblist(jjb,0) = dbdr.x; + dblist(jjb,1) = dbdr.y; + dblist(jjb,2) = dbdr.z; + }); //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 - } /* ---------------------------------------------------------------------- - copy Bi derivatives into a vector + calculate derivative of Ui w.r.t. atom j ------------------------------------------------------------------------- */ template KOKKOS_INLINE_FUNCTION -void SNAKokkos::copy_dbi2dbvec(const typename Kokkos::TeamPolicy::member_type& team) +void SNAKokkos::compute_duidrj(const typename Kokkos::TeamPolicy::member_type& team, + 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++) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) {*/ - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,idxj_max), - [&] (const int& JJ) { - //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; - dbvec(JJ,0) = dbarray(j1,j2,j,0); - dbvec(JJ,1) = dbarray(j1,j2,j,1); - dbvec(JJ,2) = dbarray(j1,j2,j,2); - //ncount++; - }); + compute_duarray(team, x, y, z, z0, r, dz0dr, wj, rcut); } /* ---------------------------------------------------------------------- */ @@ -702,15 +825,15 @@ KOKKOS_INLINE_FUNCTION void SNAKokkos::zero_uarraytot(const typename Kokkos::TeamPolicy::member_type& team) { { - double* const ptr = uarraytot_r.data(); - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,uarraytot_r.span()), + double* const ptr = ulisttot_r.data(); + Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,ulisttot_r.span()), [&] (const int& i) { ptr[i] = 0.0; }); } { - double* const ptr = uarraytot_i.data(); - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,uarraytot_r.span()), + double* const ptr = ulisttot_i.data(); + Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,ulisttot_i.span()), [&] (const int& i) { ptr[i] = 0.0; }); @@ -723,12 +846,14 @@ template KOKKOS_INLINE_FUNCTION void SNAKokkos::addself_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, double wself_in) { - //for (int j = 0; j <= twojmax; j++) Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,twojmax+1), [&] (const int& 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; } }); } @@ -743,20 +868,11 @@ void SNAKokkos::add_uarraytot(const typename Kokkos::TeamPolicy::compute_uarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION void SNAKokkos::create_team_scratch_arrays(const typename Kokkos::TeamPolicy::member_type& team) { - int jdim = twojmax + 1; - uarraytot_r_a = uarraytot_r = t_sna_3d(team.team_scratch(1),jdim,jdim,jdim); - uarraytot_i_a = uarraytot_i = t_sna_3d(team.team_scratch(1),jdim,jdim,jdim); - zarray_r = t_sna_5d(team.team_scratch(1),jdim,jdim,jdim,jdim,jdim); - zarray_i = t_sna_5d(team.team_scratch(1),jdim,jdim,jdim,jdim,jdim); - bvec = Kokkos::View(team.team_scratch(1),ncoeff); - barray = t_sna_3d(team.team_scratch(1),jdim,jdim,jdim); + ulisttot_r_a = ulisttot_r = t_sna_1d(team.team_scratch(1),idxu_max); + ulisttot_i_a = ulisttot_i = t_sna_1d(team.team_scratch(1),idxu_max); + ylist_r = t_sna_1d(team.team_scratch(1),idxu_max); + ylist_i = t_sna_1d(team.team_scratch(1),idxu_max); + zlist_r = t_sna_1d(team.team_scratch(1),idxz_max); + zlist_i = t_sna_1d(team.team_scratch(1),idxz_max); + blist = t_sna_1d(team.team_scratch(1),idxb_max); + dblist = t_sna_2d(team.team_scratch(1),idxb_max,3); rij = t_sna_2d(team.team_scratch(1),nmax,3); rcutij = t_sna_1d(team.team_scratch(1),nmax); @@ -1043,19 +1184,16 @@ void SNAKokkos::create_team_scratch_arrays(const typename Kokkos::Te inside = t_sna_1i(team.team_scratch(1),nmax); } - template inline T_INT SNAKokkos::size_team_scratch_arrays() { T_INT size = 0; - int jdim = twojmax + 1; - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // uarraytot_r_a - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // uarraytot_i_a - size += t_sna_5d::shmem_size(jdim,jdim,jdim,jdim,jdim); // zarray_r - size += t_sna_5d::shmem_size(jdim,jdim,jdim,jdim,jdim); // zarray_i - size += Kokkos::View::shmem_size(ncoeff); // bvec - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // barray + size += t_sna_1d::shmem_size(idxu_max)*2; // ulisttot + size += t_sna_1d::shmem_size(idxu_max)*2; // ylist + size += t_sna_1d::shmem_size(idxz_max)*2; // zlist + size += t_sna_1d::shmem_size(idxb_max); // blist + size += t_sna_2d::shmem_size(idxb_max,3); // dblist size += t_sna_2d::shmem_size(nmax,3); // rij size += t_sna_1d::shmem_size(nmax); // rcutij @@ -1071,53 +1209,225 @@ template KOKKOS_INLINE_FUNCTION void SNAKokkos::create_thread_scratch_arrays(const typename Kokkos::TeamPolicy::member_type& team) { - int jdim = twojmax + 1; + dblist = t_sna_2d(team.thread_scratch(1),idxb_max,3); - dbvec = Kokkos::View(team.thread_scratch(1),ncoeff); - dbarray = t_sna_4d(team.thread_scratch(1),jdim,jdim,jdim); - - uarray_r = t_sna_3d(team.thread_scratch(1),jdim,jdim,jdim); - uarray_i = t_sna_3d(team.thread_scratch(1),jdim,jdim,jdim); - duarray_r = t_sna_4d(team.thread_scratch(1),jdim,jdim,jdim); - duarray_i = t_sna_4d(team.thread_scratch(1),jdim,jdim,jdim); + ulist_r = t_sna_1d(team.thread_scratch(1),idxu_max); + ulist_i = t_sna_1d(team.thread_scratch(1),idxu_max); + dulist_r = t_sna_2d(team.thread_scratch(1),idxu_max,3); + dulist_i = t_sna_2d(team.thread_scratch(1),idxu_max,3); } template inline T_INT SNAKokkos::size_thread_scratch_arrays() { T_INT size = 0; - int jdim = twojmax + 1; - size += Kokkos::View::shmem_size(ncoeff); // dbvec - size += t_sna_4d::shmem_size(jdim,jdim,jdim); // dbarray + size += t_sna_2d::shmem_size(idxb_max,3); // dblist - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // uarray_r - size += t_sna_3d::shmem_size(jdim,jdim,jdim); // uarray_i - size += t_sna_4d::shmem_size(jdim,jdim,jdim); // duarray_r - size += t_sna_4d::shmem_size(jdim,jdim,jdim); // duarray_i + size += t_sna_1d::shmem_size(idxu_max)*2; // ulist + size += t_sna_2d::shmem_size(idxu_max,3)*2; // dulist return size; } /* ---------------------------------------------------------------------- - factorial n + factorial n, wrapper for precomputed table ------------------------------------------------------------------------- */ template -KOKKOS_INLINE_FUNCTION +inline double SNAKokkos::factorial(int n) { - double result = 1.0; - for(int i=1; i<=n; i++) - result *= 1.0*i; - return result; + //if (n < 0 || n > nmaxfactorial) { + // char str[128]; + // sprintf(str, "Invalid argument to factorial %d", n); + // error->all(FLERR, str); + //} + + return nfac_table[n]; } +/* ---------------------------------------------------------------------- + factorial n table, size SNA::nmaxfactorial+1 +------------------------------------------------------------------------- */ + +template +const double SNAKokkos::nfac_table[] = { + 1, + 1, + 2, + 6, + 24, + 120, + 720, + 5040, + 40320, + 362880, + 3628800, + 39916800, + 479001600, + 6227020800, + 87178291200, + 1307674368000, + 20922789888000, + 355687428096000, + 6.402373705728e+15, + 1.21645100408832e+17, + 2.43290200817664e+18, + 5.10909421717094e+19, + 1.12400072777761e+21, + 2.5852016738885e+22, + 6.20448401733239e+23, + 1.5511210043331e+25, + 4.03291461126606e+26, + 1.08888694504184e+28, + 3.04888344611714e+29, + 8.8417619937397e+30, + 2.65252859812191e+32, + 8.22283865417792e+33, + 2.63130836933694e+35, + 8.68331761881189e+36, + 2.95232799039604e+38, + 1.03331479663861e+40, + 3.71993326789901e+41, + 1.37637530912263e+43, + 5.23022617466601e+44, + 2.03978820811974e+46, + 8.15915283247898e+47, + 3.34525266131638e+49, + 1.40500611775288e+51, + 6.04152630633738e+52, + 2.65827157478845e+54, + 1.1962222086548e+56, + 5.50262215981209e+57, + 2.58623241511168e+59, + 1.24139155925361e+61, + 6.08281864034268e+62, + 3.04140932017134e+64, + 1.55111875328738e+66, + 8.06581751709439e+67, + 4.27488328406003e+69, + 2.30843697339241e+71, + 1.26964033536583e+73, + 7.10998587804863e+74, + 4.05269195048772e+76, + 2.35056133128288e+78, + 1.3868311854569e+80, + 8.32098711274139e+81, + 5.07580213877225e+83, + 3.14699732603879e+85, + 1.98260831540444e+87, + 1.26886932185884e+89, + 8.24765059208247e+90, + 5.44344939077443e+92, + 3.64711109181887e+94, + 2.48003554243683e+96, + 1.71122452428141e+98, + 1.19785716699699e+100, + 8.50478588567862e+101, + 6.12344583768861e+103, + 4.47011546151268e+105, + 3.30788544151939e+107, + 2.48091408113954e+109, + 1.88549470166605e+111, + 1.45183092028286e+113, + 1.13242811782063e+115, + 8.94618213078297e+116, + 7.15694570462638e+118, + 5.79712602074737e+120, + 4.75364333701284e+122, + 3.94552396972066e+124, + 3.31424013456535e+126, + 2.81710411438055e+128, + 2.42270953836727e+130, + 2.10775729837953e+132, + 1.85482642257398e+134, + 1.65079551609085e+136, + 1.48571596448176e+138, + 1.3520015276784e+140, + 1.24384140546413e+142, + 1.15677250708164e+144, + 1.08736615665674e+146, + 1.03299784882391e+148, + 9.91677934870949e+149, + 9.61927596824821e+151, + 9.42689044888324e+153, + 9.33262154439441e+155, + 9.33262154439441e+157, + 9.42594775983835e+159, + 9.61446671503512e+161, + 9.90290071648618e+163, + 1.02990167451456e+166, + 1.08139675824029e+168, + 1.14628056373471e+170, + 1.22652020319614e+172, + 1.32464181945183e+174, + 1.44385958320249e+176, + 1.58824554152274e+178, + 1.76295255109024e+180, + 1.97450685722107e+182, + 2.23119274865981e+184, + 2.54355973347219e+186, + 2.92509369349301e+188, + 3.3931086844519e+190, + 3.96993716080872e+192, + 4.68452584975429e+194, + 5.5745857612076e+196, + 6.68950291344912e+198, + 8.09429852527344e+200, + 9.8750442008336e+202, + 1.21463043670253e+205, + 1.50614174151114e+207, + 1.88267717688893e+209, + 2.37217324288005e+211, + 3.01266001845766e+213, + 3.8562048236258e+215, + 4.97450422247729e+217, + 6.46685548922047e+219, + 8.47158069087882e+221, + 1.118248651196e+224, + 1.48727070609069e+226, + 1.99294274616152e+228, + 2.69047270731805e+230, + 3.65904288195255e+232, + 5.01288874827499e+234, + 6.91778647261949e+236, + 9.61572319694109e+238, + 1.34620124757175e+241, + 1.89814375907617e+243, + 2.69536413788816e+245, + 3.85437071718007e+247, + 5.5502938327393e+249, + 8.04792605747199e+251, + 1.17499720439091e+254, + 1.72724589045464e+256, + 2.55632391787286e+258, + 3.80892263763057e+260, + 5.71338395644585e+262, + 8.62720977423323e+264, + 1.31133588568345e+267, + 2.00634390509568e+269, + 3.08976961384735e+271, + 4.78914290146339e+273, + 7.47106292628289e+275, + 1.17295687942641e+278, + 1.85327186949373e+280, + 2.94670227249504e+282, + 4.71472363599206e+284, + 7.59070505394721e+286, + 1.22969421873945e+289, + 2.0044015765453e+291, + 3.28721858553429e+293, + 5.42391066613159e+295, + 9.00369170577843e+297, + 1.503616514865e+300, // nmaxfactorial = 167 +}; + /* ---------------------------------------------------------------------- the function delta given by VMK Eq. 8.2(1) ------------------------------------------------------------------------- */ template -KOKKOS_INLINE_FUNCTION +inline double SNAKokkos::deltacg(int j1, int j2, int j) { double sfaccg = factorial((j1 + j2 + j) / 2 + 1); @@ -1135,33 +1445,39 @@ template inline void SNAKokkos::init_clebsch_gordan() { + auto h_cglist = Kokkos::create_mirror_view(cglist); + double sum,dcg,sfaccg; int m, aa2, bb2, cc2; int ifac; - auto h_cgarray = Kokkos::create_mirror_view(cgarray); - 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 = 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) { + h_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) * @@ -1175,18 +1491,19 @@ void SNAKokkos::init_clebsch_gordan() 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)); - - h_cgarray(j1,j2,j,m1,m2) = sum * dcg * sfaccg; - //printf("SNAP-COMPARE: CG: %i %i %i %i %i %e\n",j1,j2,j,m1,m2,cgarray(j1,j2,j,m1,m2)); + factorial((j1 - aa2) / 2) * + factorial((j2 + bb2) / 2) * + factorial((j2 - bb2) / 2) * + factorial((j + cc2) / 2) * + factorial((j - cc2) / 2) * + (j + 1)); + + h_cglist[idxcg_count] = sum * dcg * sfaccg; + idxcg_count++; } } - Kokkos::deep_copy(cgarray,h_cgarray); + } + Kokkos::deep_copy(cglist,h_cglist); } /* ---------------------------------------------------------------------- @@ -1207,6 +1524,7 @@ void SNAKokkos::init_rootpqarray() /* ---------------------------------------------------------------------- */ + template inline int SNAKokkos::compute_ncoeff() @@ -1217,9 +1535,10 @@ int SNAKokkos::compute_ncoeff() 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) ncount++; + for (int j = j1 - j2; + j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) ncount++; + return ncount; } @@ -1266,15 +1585,39 @@ double SNAKokkos::compute_dsfac(double r, double rcut) template double SNAKokkos::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(std::complex); - bytes += 2 * jdim * jdim * jdim * sizeof(double); - bytes += jdim * jdim * jdim * 3 * sizeof(std::complex); - bytes += jdim * jdim * jdim * 3 * sizeof(double); - bytes += ncoeff * sizeof(double); - bytes += jdim * jdim * jdim * jdim * jdim * sizeof(std::complex); + + bytes = 0; + + bytes += jdimpq*jdimpq * sizeof(double); // pqarray + bytes += idxcg_max * sizeof(double); // cglist + + bytes += idxu_max * sizeof(double) * 2; // ulist + bytes += idxu_max * sizeof(double) * 2; // ulisttot + bytes += idxu_max * 3 * sizeof(double) * 2; // dulist + + bytes += idxz_max * sizeof(double) * 2; // zlist + bytes += idxb_max * sizeof(double); // blist + bytes += idxb_max * 3 * sizeof(double); // dblist + bytes += idxu_max * sizeof(double) * 2; // ylist + + 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(SNAKK_ZINDICES); // idxz + bytes += idxb_max * sizeof(SNAKK_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 + return bytes; } From 8c3d18520dd40ee990252aff3e9fb1e5f120b9a0 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Wed, 26 Jun 2019 10:45:31 -0600 Subject: [PATCH 335/760] add missing include needed on ppc64le --- lib/gpu/lal_device.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 5534d32e5f..9410cc5250 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -17,6 +17,7 @@ #include "lal_precision.h" #include #include +#include #ifdef _OPENMP #include #endif From 2be0fd61802b824363308985f415b40e8fb0e38a Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 26 Jun 2019 16:22:37 -0600 Subject: [PATCH 336/760] Fix GPU issues --- src/KOKKOS/pair_snap_kokkos_impl.h | 9 ++-- src/KOKKOS/sna_kokkos.h | 4 +- src/KOKKOS/sna_kokkos_impl.h | 78 ++++++++++-------------------- 3 files changed, 31 insertions(+), 60 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 687c9dc7cb..d56db05d19 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -309,7 +309,7 @@ void PairSNAPKokkos::operator() (TagPairSNAPBeta,const typename Kokk const int ii = team.league_rank(); const int i = d_ilist[ii]; const int itype = type[i]; - const int ielem = map[itype]; + const int ielem = d_map[itype]; Kokkos::View> d_coeffi(d_coeffelem,ielem,Kokkos::ALL); @@ -603,11 +603,10 @@ void PairSNAPKokkos::operator() (TagPairSNAPCompute::member_type& team, double, double, double, double, double); // compute_ui - KOKKOS_INLINE_FUNCTION + inline double deltacg(int, int, int); // init_clebsch_gordan inline diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 4ca8ae4471..e3ce1626d9 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -223,7 +223,7 @@ void SNAKokkos::build_indexlist() // apply to z(j1,j2,j,ma,mb) to unique element of y(j) - const int jju = idxu_block[j] + (j+1)*mb + ma; + const int jju = h_idxu_block[j] + (j+1)*mb + ma; h_idxz[idxz_count].jju = jju; idxz_count++; @@ -258,7 +258,6 @@ template KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy::member_type& team, int jnum) { - //printf("jnum %i\n",jnum); double rsq, r, x, y, z, z0, theta0; // utot(j,ma,mb) = 0 for all j,ma,ma @@ -348,7 +347,7 @@ void SNAKokkos::compute_zi(const typename Kokkos::TeamPolicy::compute_yi(const typename Kokkos::TeamPolicy::member_type& team, const Kokkos::View &beta, const int ii) { - int j; - int jjz; - int jju; double betaj; { @@ -400,8 +396,8 @@ void SNAKokkos::compute_yi(const typename Kokkos::TeamPolicy::compute_yi(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_deidrj(const typename Kokkos::TeamPolicy::member_type& team, double* dedr) { - - for(int k = 0; k < 3; k++) - dedr[k] = 0.0; + t_scalar3 sum; // TODO: which loop is faster to parallelize? - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,twojmax+1), - [&] (const int& j) { + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,twojmax+1), + [&] (const int& j, t_scalar3& sum_tmp) { //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 jjjmambyarray_r = ylist_r[jju]; - double jjjmambyarray_i = ylist_i[jju]; - - for(int k = 0; k < 3; k++) - dedr[k] += - dulist_r(jju,k) * jjjmambyarray_r + - dulist_i(jju,k) * jjjmambyarray_i; + sum_tmp.x += dulist_r(jju,0) * ylist_r[jju] + dulist_i(jju,0) * ylist_i[jju]; + sum_tmp.y += dulist_r(jju,1) * ylist_r[jju] + dulist_i(jju,1) * ylist_i[jju]; + sum_tmp.z += dulist_r(jju,2) * ylist_r[jju] + dulist_i(jju,2) * ylist_i[jju]; jju++; } //end loop over ma mb @@ -505,32 +495,26 @@ void SNAKokkos::compute_deidrj(const typename Kokkos::TeamPolicy::compute_bi(const typename Kokkos::TeamPolicy::compute_bi(const typename Kokkos::TeamPolicy::compute_uarray(const typename Kokkos::TeamPolicy::compute_uarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy::create_team_scratch_arrays(const typename Kokkos::Te zlist_r = t_sna_1d(team.team_scratch(1),idxz_max); zlist_i = t_sna_1d(team.team_scratch(1),idxz_max); blist = t_sna_1d(team.team_scratch(1),idxb_max); - dblist = t_sna_2d(team.team_scratch(1),idxb_max,3); rij = t_sna_2d(team.team_scratch(1),nmax,3); rcutij = t_sna_1d(team.team_scratch(1),nmax); @@ -1193,7 +1168,6 @@ T_INT SNAKokkos::size_team_scratch_arrays() { size += t_sna_1d::shmem_size(idxu_max)*2; // ylist size += t_sna_1d::shmem_size(idxz_max)*2; // zlist size += t_sna_1d::shmem_size(idxb_max); // blist - size += t_sna_2d::shmem_size(idxb_max,3); // dblist size += t_sna_2d::shmem_size(nmax,3); // rij size += t_sna_1d::shmem_size(nmax); // rcutij @@ -1210,7 +1184,6 @@ KOKKOS_INLINE_FUNCTION void SNAKokkos::create_thread_scratch_arrays(const typename Kokkos::TeamPolicy::member_type& team) { dblist = t_sna_2d(team.thread_scratch(1),idxb_max,3); - ulist_r = t_sna_1d(team.thread_scratch(1),idxu_max); ulist_i = t_sna_1d(team.thread_scratch(1),idxu_max); dulist_r = t_sna_2d(team.thread_scratch(1),idxu_max,3); @@ -1223,7 +1196,6 @@ T_INT SNAKokkos::size_thread_scratch_arrays() { T_INT size = 0; size += t_sna_2d::shmem_size(idxb_max,3); // dblist - size += t_sna_1d::shmem_size(idxu_max)*2; // ulist size += t_sna_2d::shmem_size(idxu_max,3)*2; // dulist return size; From ff36bad09964fecad2b6569fef6992b164e9b56d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 00:33:48 -0400 Subject: [PATCH 337/760] cleanup includes in variable.h --- src/variable.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/variable.h b/src/variable.h index 512195bd14..c5f501f266 100644 --- a/src/variable.h +++ b/src/variable.h @@ -14,9 +14,8 @@ #ifndef LMP_VARIABLE_H #define LMP_VARIABLE_H -#include +#include #include "pointers.h" -#include "input.h" namespace LAMMPS_NS { From f7507512b131e2c515db82751b1a793de66aa657 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 00:39:47 -0400 Subject: [PATCH 338/760] apply memory alignment settings from my_page.h to my_pool_chunk.h --- src/my_pool_chunk.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/my_pool_chunk.h b/src/my_pool_chunk.h index 8bf88d35bb..a313e45f05 100644 --- a/src/my_pool_chunk.h +++ b/src/my_pool_chunk.h @@ -43,6 +43,10 @@ public variables: #ifndef LAMMPS_MY_POOL_CHUNK_H #define LAMMPS_MY_POOL_CHUNK_H +#if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) && !defined(_WIN32) +#define LAMMPS_MEMALIGN 64 +#endif + #include namespace LAMMPS_NS { @@ -190,9 +194,17 @@ class MyPoolChunk { for (int i = oldpage; i < npage; i++) { whichbin[i] = ibin; +#if defined(LAMMPS_MEMALIGN) + void *ptr; + if (posix_memalign(&ptr, LAMMPS_MEMALIGN, + chunkperpage*chunksize[ibin]*sizeof(T))) + errorflag = 2; + pages[i] = (T *) ptr; +#else pages[i] = (T *) malloc(chunkperpage*chunksize[ibin]*sizeof(T)); size += chunkperpage*chunksize[ibin]; if (!pages[i]) errorflag = 2; +#endif } // reset free list for unused chunks on new pages From 17602b4c26fa94e02e204b3e8e85a48cecc65569 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 01:02:17 -0400 Subject: [PATCH 339/760] some more include file cleanup. include cstdlib where functions like atoi() are used remove unneeded include statements from headers --- src/PYTHON/python_impl.cpp | 1 + src/USER-MEAMC/meam.h | 1 - src/compute_reduce_chunk.cpp | 3 ++- src/fix_vector.cpp | 1 + src/lammps.cpp | 1 + src/variable.cpp | 1 + 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/PYTHON/python_impl.cpp b/src/PYTHON/python_impl.cpp index aaa4f74c69..9c650330af 100644 --- a/src/PYTHON/python_impl.cpp +++ b/src/PYTHON/python_impl.cpp @@ -15,6 +15,7 @@ Contributing author: Richard Berger and Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include #include #include "lmppython.h" #include "force.h" diff --git a/src/USER-MEAMC/meam.h b/src/USER-MEAMC/meam.h index 42fd722e01..bb40202243 100644 --- a/src/USER-MEAMC/meam.h +++ b/src/USER-MEAMC/meam.h @@ -3,7 +3,6 @@ #include "memory.h" #include -#include #define maxelt 5 diff --git a/src/compute_reduce_chunk.cpp b/src/compute_reduce_chunk.cpp index f31672ef74..5eda71b21b 100644 --- a/src/compute_reduce_chunk.cpp +++ b/src/compute_reduce_chunk.cpp @@ -12,7 +12,8 @@ ------------------------------------------------------------------------- */ #include -#include +#include +#include #include "compute_reduce_chunk.h" #include "atom.h" #include "update.h" diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 6387af7676..5657e59ab0 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "fix_vector.h" #include "update.h" diff --git a/src/lammps.cpp b/src/lammps.cpp index f8d04c9323..320d89ed52 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include diff --git a/src/variable.cpp b/src/variable.cpp index ea7f3044d7..1416754073 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -26,6 +26,7 @@ #include "region.h" #include "modify.h" #include "compute.h" +#include "input.h" #include "fix.h" #include "fix_store.h" #include "force.h" From 08ac695a062079390a47d7115e10428493c5cf75 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 01:03:08 -0400 Subject: [PATCH 340/760] move include statements from headers to implementation files where possible in USER-REAXC --- src/USER-OMP/reaxc_multi_body_omp.cpp | 1 + src/USER-REAXC/pair_reaxc.cpp | 1 + src/USER-REAXC/reaxc_control.cpp | 2 ++ src/USER-REAXC/reaxc_ffield.cpp | 2 ++ src/USER-REAXC/reaxc_forces.cpp | 1 + src/USER-REAXC/reaxc_init_md.cpp | 1 + src/USER-REAXC/reaxc_io_tools.cpp | 3 ++- src/USER-REAXC/reaxc_multi_body.cpp | 1 + src/USER-REAXC/reaxc_reset_tools.cpp | 1 + src/USER-REAXC/reaxc_tool_box.cpp | 5 +++++ src/USER-REAXC/reaxc_traj.cpp | 1 + src/USER-REAXC/reaxc_types.h | 10 +--------- 12 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/USER-OMP/reaxc_multi_body_omp.cpp b/src/USER-OMP/reaxc_multi_body_omp.cpp index 7552e7a733..d791f945a8 100644 --- a/src/USER-OMP/reaxc_multi_body_omp.cpp +++ b/src/USER-OMP/reaxc_multi_body_omp.cpp @@ -26,6 +26,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc_omp.h" #include "thr_data.h" diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 8f8dcfb8fc..224f3e2568 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -20,6 +20,7 @@ Hybrid and hybrid/overlay compatibility added by Ray Shan (Sandia) ------------------------------------------------------------------------- */ +#include #include "pair_reaxc.h" #include "atom.h" #include "update.h" diff --git a/src/USER-REAXC/reaxc_control.cpp b/src/USER-REAXC/reaxc_control.cpp index 535226fff8..060c1a0342 100644 --- a/src/USER-REAXC/reaxc_control.cpp +++ b/src/USER-REAXC/reaxc_control.cpp @@ -24,6 +24,8 @@ . ----------------------------------------------------------------------*/ +#include +#include #include "pair_reaxc.h" #include "reaxc_control.h" #include "reaxc_tool_box.h" diff --git a/src/USER-REAXC/reaxc_ffield.cpp b/src/USER-REAXC/reaxc_ffield.cpp index 9534637645..2160d180cf 100644 --- a/src/USER-REAXC/reaxc_ffield.cpp +++ b/src/USER-REAXC/reaxc_ffield.cpp @@ -24,6 +24,8 @@ . ----------------------------------------------------------------------*/ +#include +#include #include "pair_reaxc.h" #include "error.h" #include "reaxc_ffield.h" diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 186cde681a..79094ece43 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_forces.h" #include "reaxc_bond_orders.h" diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index df5de49034..a0e15e98f5 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_init_md.h" #include "reaxc_allocate.h" diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index 51aa8bca0f..f4a1486c48 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "update.h" #include "reaxc_io_tools.h" @@ -85,7 +86,7 @@ int Init_Output_Files( reax_system *system, control_params *control, /************************ close output files ************************/ -int Close_Output_Files( reax_system *system, control_params *control, +int Close_Output_Files( reax_system *system, control_params * /* control */, output_controls *out_control, mpi_datatypes * /*mpi_data*/ ) { if (out_control->write_steps > 0) diff --git a/src/USER-REAXC/reaxc_multi_body.cpp b/src/USER-REAXC/reaxc_multi_body.cpp index f7d72a2678..371b8ed65e 100644 --- a/src/USER-REAXC/reaxc_multi_body.cpp +++ b/src/USER-REAXC/reaxc_multi_body.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_multi_body.h" #include "reaxc_bond_orders.h" diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index e00656694c..c72ccbadcd 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_reset_tools.h" #include "reaxc_list.h" diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index ffe42e37bb..2cf66d8655 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -24,9 +24,14 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_tool_box.h" +#if !defined(_MSC_VER) +#include +#endif + #include "error.h" struct timeval tim; diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index 356d7b6eeb..a536445113 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -24,6 +24,7 @@ . ----------------------------------------------------------------------*/ +#include #include "pair_reaxc.h" #include "reaxc_traj.h" #include "reaxc_list.h" diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index 0821c065cc..319c373927 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -27,19 +27,11 @@ #ifndef __REAX_TYPES_H_ #define __REAX_TYPES_H_ -#include #include "lmptype.h" - -#include -#include +#include #include -#include -#include -#include -#include #include "accelerator_kokkos.h" - namespace LAMMPS_NS { class Error;} #if defined LMP_USER_OMP From 312a1fa004bbec6f6e11e800f17c6e3038f0ecdc Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Thu, 27 Jun 2019 07:58:32 -0500 Subject: [PATCH 341/760] Added species to kim_queries in docs and some other edits --- doc/src/kim_commands.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 9be4a79db5..48637ae722 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -32,7 +32,7 @@ kim_interactions Si kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real kim_init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 metal unit_conversion_mode kim_interactions C H O -kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] :pre +kim_query a0 get_lattice_constant_fcc species=\["Al"] units=\["angstrom"\] :pre [Description:] @@ -53,7 +53,7 @@ Employing OpenKIM IMs provides LAMMPS users with multiple benefits: Reliability :h5 -All content archived in OpenKIM is subject to quality control by the "KIM Editor"_https://openkim.org/governance/. +All content archived in OpenKIM is reviewed by the "KIM Editor"_https://openkim.org/governance/ for quality. IMs in OpenKIM are archived with full provenance control. Each is associated with a maintainer responsible for the integrity of the content. All changes are tracked and recorded. IMs in OpenKIM are exhaustively tested using "KIM Tests"_https://openkim.org/getting-started/kim-tests/ that compute a host of material properties, and "KIM Verification Checks"_https://openkim.org/about-verification-checks/ that provide the user with information on various aspects of the IM behavior and coding correctness. This information is displayed on the IM's page on "OpenKIM"_https://openkim.org. :ul @@ -73,8 +73,8 @@ Types of IMs in OpenKIM :h4 There are two types of IMs archived in OpenKIM: -The first type is called a {KIM Portable Model} (PM). A KIM PM is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran), which conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/) Portable Model Interface (PMI) standard. A KIM PM will work seamlessly with any simulation code that supports the KIM API/PMI standard (including LAMMPS; see "complete list of supported codes"_https://openkim.org/projects-using-kim/). -The second type is called a {KIM Simulator Model} (SM). A KIM SM is an IM that is implemented natively within a simulation code ({simulator}) that supports the KIM API/SMI (Simulator Model Interface); in this case LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol +The first type is called a {KIM Portable Model} (PM). A KIM PM is an independent computer implementation of an IM written in one of the languages supported by KIM (C, C++, Fortran) that conforms to the KIM Application Programming Interface ("KIM API"_https://openkim.org/kim-api/) Portable Model Interface (PMI) standard. A KIM PM will work seamlessly with any simulation code that supports the KIM API/PMI standard (including LAMMPS; see "complete list of supported codes"_https://openkim.org/projects-using-kim/). +The second type is called a {KIM Simulator Model} (SM). A KIM SM is an IM that is implemented natively within a simulation code ({simulator}) that supports the KIM API Simulator Model Interface (SMI); in this case LAMMPS. A separate SM package is archived in OpenKIM for each parameterization of the IM, which includes all of the necessary parameter files, LAMMPS commands, and metadata (supported species, units, etc.) needed to run the IM in LAMMPS. :ol With these two IM types, OpenKIM can archive and test almost all IMs that can be used by LAMMPS. (It is easy to contribute new IMs to OpenKIM, see @@ -356,7 +356,7 @@ or analysis phases of LAMMPS simulations. Some examples are given below. kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal boundary p p p -kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] +kim_query a0 get_lattice_constant_fcc species=\["Al"\] units=\["angstrom"\] lattice fcc $\{a0\} ... :pre @@ -377,8 +377,8 @@ changed to: "lattice fcc $\{a0\}*$\{_u_distance\}". kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal boundary p p p -kim_query a0 get_lattice_constant_fcc units=\["angstrom"\] -kim_query alpha get_linear_thermal_expansion_fcc units=\{"1/K"\} +kim_query a0 get_lattice_constant_fcc species=\["Al"\] units=\["angstrom"\] +kim_query alpha get_linear_thermal_expansion_fcc species=\["Al"\] units=\{"1/K"\} variable DeltaT equal 300 lattice fcc $\{a0\}*$\{alpha\}*$\{DeltaT\} ... :pre @@ -395,7 +395,7 @@ kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal ... Build fcc crystal containing some defect and compute the total energy ... which is stored in the variable {Etot} ... -kim_query Ec get_cohesive_energy_fcc units=\["eV"\] +kim_query Ec get_cohesive_energy_fcc species=\["Al"\] units=\["eV"\] variable Eform equal $\{Etot\} - count(all)*$\{Ec\} ... :pre From 84e156d380519a7091f657fb89387d4b866280be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 09:14:36 -0400 Subject: [PATCH 342/760] first batch of changes suggested by using include-what-you-use tool --- src/angle.cpp | 1 - src/angle.h | 2 +- src/angle_deprecated.cpp | 1 + src/angle_hybrid.cpp | 3 +-- src/angle_zero.cpp | 3 +-- src/bond.h | 2 +- src/compute.h | 2 +- src/dihedral.h | 2 +- src/dump.h | 2 +- src/fix.h | 2 +- src/improper.h | 2 +- src/lmptype.h | 4 ---- src/main.cpp | 3 --- src/pair.h | 2 +- src/pointers.h | 9 +++++++-- 15 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/angle.cpp b/src/angle.cpp index 2a297990ac..1b9532ea32 100644 --- a/src/angle.cpp +++ b/src/angle.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include "angle.h" #include "atom.h" #include "comm.h" diff --git a/src/angle.h b/src/angle.h index 3d8371242e..6fc8a664c6 100644 --- a/src/angle.h +++ b/src/angle.h @@ -15,7 +15,7 @@ #define LMP_ANGLE_H #include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/angle_deprecated.cpp b/src/angle_deprecated.cpp index b5af217b7b..73fcccc53a 100644 --- a/src/angle_deprecated.cpp +++ b/src/angle_deprecated.cpp @@ -16,6 +16,7 @@ ------------------------------------------------------------------------- */ #include +#include #include "angle_deprecated.h" #include "angle_hybrid.h" #include "comm.h" diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index 6afa7413b2..47baf770a5 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -11,13 +11,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include #include #include "angle_hybrid.h" #include "atom.h" #include "neighbor.h" -#include "domain.h" #include "comm.h" #include "force.h" #include "memory.h" diff --git a/src/angle_zero.cpp b/src/angle_zero.cpp index 6eb127fa58..62eab85aee 100644 --- a/src/angle_zero.cpp +++ b/src/angle_zero.cpp @@ -15,8 +15,7 @@ Contributing author: Carsten Svaneborg (SDU) ------------------------------------------------------------------------- */ -#include -#include +#include #include #include "angle_zero.h" #include "atom.h" diff --git a/src/bond.h b/src/bond.h index 8fb7040832..f9fb9384ed 100644 --- a/src/bond.h +++ b/src/bond.h @@ -15,7 +15,7 @@ #define LMP_BOND_H #include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/compute.h b/src/compute.h index a023834368..38d001db6f 100644 --- a/src/compute.h +++ b/src/compute.h @@ -14,7 +14,7 @@ #ifndef LMP_COMPUTE_H #define LMP_COMPUTE_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/dihedral.h b/src/dihedral.h index f1b42008bf..8654132ed5 100644 --- a/src/dihedral.h +++ b/src/dihedral.h @@ -15,7 +15,7 @@ #define LMP_DIHEDRAL_H #include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/dump.h b/src/dump.h index 1c6a131f76..d42e7f1f39 100644 --- a/src/dump.h +++ b/src/dump.h @@ -16,7 +16,7 @@ #include #include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/fix.h b/src/fix.h index 7eaff38bd3..7e55e96269 100644 --- a/src/fix.h +++ b/src/fix.h @@ -14,7 +14,7 @@ #ifndef LMP_FIX_H #define LMP_FIX_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/improper.h b/src/improper.h index d940b43a13..4af5ad4a35 100644 --- a/src/improper.h +++ b/src/improper.h @@ -15,7 +15,7 @@ #define LMP_IMPROPER_H #include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/lmptype.h b/src/lmptype.h index 12fa6cc4fb..8a596e9f83 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -48,10 +48,6 @@ namespace LAMMPS_NS { -// enum used for KOKKOS host/device flags - -enum ExecutionSpace{Host,Device}; - // reserve 2 hi bits in molecular system neigh list for special bonds flag // max local + ghost atoms per processor = 2^30 - 1 diff --git a/src/main.cpp b/src/main.cpp index 8eb5e4e543..1be9c253eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,9 +14,6 @@ #include #include "lammps.h" #include "input.h" -#include "error.h" -#include -#include #if defined(LAMMPS_TRAP_FPE) && defined(_GNU_SOURCE) #include diff --git a/src/pair.h b/src/pair.h index 7481514dae..501f3af8f8 100644 --- a/src/pair.h +++ b/src/pair.h @@ -14,7 +14,7 @@ #ifndef LMP_PAIR_H #define LMP_PAIR_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/pointers.h b/src/pointers.h index 44967f5135..fc359a5667 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -21,9 +21,10 @@ #ifndef LMP_POINTERS_H #define LMP_POINTERS_H -#include "lmptype.h" +#include "lmptype.h" // IWYU pragma: export #include -#include "lammps.h" +#include +#include "lammps.h" // IWYU pragma: export namespace LAMMPS_NS { @@ -34,6 +35,10 @@ namespace LAMMPS_NS { #define MIN(A,B) ((A) < (B) ? (A) : (B)) #define MAX(A,B) ((A) > (B) ? (A) : (B)) +// enum used for KOKKOS host/device flags + +enum ExecutionSpace{Host,Device}; + class Pointers { public: Pointers(LAMMPS *ptr) : From 333bec0222ed2f68fa84dc208c0b2f738e5e9da2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 10:12:53 -0400 Subject: [PATCH 343/760] headers that directly or indirectly include pointers.h may assume is loaded, too. --- src/angle.h | 1 - src/angle_hybrid.h | 1 - src/angle_zero.h | 1 - src/atom.cpp | 4 ---- src/bond.h | 1 - src/dihedral.h | 1 - src/dump.h | 1 - src/improper.h | 1 - src/pointers.h | 2 +- 9 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/angle.h b/src/angle.h index 6fc8a664c6..7a008f7ca7 100644 --- a/src/angle.h +++ b/src/angle.h @@ -14,7 +14,6 @@ #ifndef LMP_ANGLE_H #define LMP_ANGLE_H -#include #include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/angle_hybrid.h b/src/angle_hybrid.h index 4fde71e43f..730d55b0e2 100644 --- a/src/angle_hybrid.h +++ b/src/angle_hybrid.h @@ -20,7 +20,6 @@ AngleStyle(hybrid,AngleHybrid) #ifndef LMP_ANGLE_HYBRID_H #define LMP_ANGLE_HYBRID_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/angle_zero.h b/src/angle_zero.h index b91be5c8d7..bc1ce0725f 100644 --- a/src/angle_zero.h +++ b/src/angle_zero.h @@ -20,7 +20,6 @@ AngleStyle(zero,AngleZero) #ifndef LMP_ANGLE_ZERO_H #define LMP_ANGLE_ZERO_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/atom.cpp b/src/atom.cpp index 1f5d5a80c4..8176039165 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -12,11 +12,9 @@ ------------------------------------------------------------------------- */ #include -#include #include #include #include -#include #include "atom.h" #include "style_atom.h" #include "atom_vec.h" @@ -28,14 +26,12 @@ #include "fix.h" #include "compute.h" #include "output.h" -#include "thermo.h" #include "update.h" #include "domain.h" #include "group.h" #include "input.h" #include "variable.h" #include "molecule.h" -#include "atom_masks.h" #include "math_const.h" #include "memory.h" #include "error.h" diff --git a/src/bond.h b/src/bond.h index f9fb9384ed..5c3b933083 100644 --- a/src/bond.h +++ b/src/bond.h @@ -14,7 +14,6 @@ #ifndef LMP_BOND_H #define LMP_BOND_H -#include #include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/dihedral.h b/src/dihedral.h index 8654132ed5..ed6c02c5b9 100644 --- a/src/dihedral.h +++ b/src/dihedral.h @@ -14,7 +14,6 @@ #ifndef LMP_DIHEDRAL_H #define LMP_DIHEDRAL_H -#include #include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/dump.h b/src/dump.h index d42e7f1f39..0173aa3112 100644 --- a/src/dump.h +++ b/src/dump.h @@ -15,7 +15,6 @@ #define LMP_DUMP_H #include -#include #include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/improper.h b/src/improper.h index 4af5ad4a35..234dc9cb20 100644 --- a/src/improper.h +++ b/src/improper.h @@ -14,7 +14,6 @@ #ifndef LMP_IMPROPER_H #define LMP_IMPROPER_H -#include #include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/pointers.h b/src/pointers.h index fc359a5667..f9ef229c90 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -23,7 +23,7 @@ #include "lmptype.h" // IWYU pragma: export #include -#include +#include // IWYU pragma: export #include "lammps.h" // IWYU pragma: export namespace LAMMPS_NS { From 60adaa24cb8f19d9effc6da6f1ea6967c736a947 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 27 Jun 2019 08:52:34 -0600 Subject: [PATCH 344/760] Remove redundant computation --- src/KOKKOS/sna_kokkos_impl.h | 22 ---------------------- src/SNAP/sna.cpp | 22 ---------------------- 2 files changed, 44 deletions(-) diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index e3ce1626d9..9b96cb8a16 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -1006,11 +1006,9 @@ void SNAKokkos::compute_duarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy::compute_duarray(const typename Kokkos::TeamPolicy Date: Thu, 27 Jun 2019 08:53:58 -0600 Subject: [PATCH 345/760] Remove no-op --- src/SNAP/sna.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 949e0ee071..ada3f528d2 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -610,8 +610,6 @@ void SNA::compute_bi() 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; From 48220b39b5813b8144a9ca8aa6dd37aa688b238f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 10:13:43 -0400 Subject: [PATCH 346/760] include explicitly in .cpp files, though --- src/angle_hybrid.cpp | 1 + src/atom.cpp | 2 +- src/atom_map.cpp | 2 ++ src/atom_vec.cpp | 1 + src/atom_vec.h | 3 +-- src/atom_vec_body.h | 1 - 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index 47baf770a5..48bb241100 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -12,6 +12,7 @@ ------------------------------------------------------------------------- */ #include +#include #include #include #include "angle_hybrid.h" diff --git a/src/atom.cpp b/src/atom.cpp index 8176039165..b79febfc20 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -12,6 +12,7 @@ ------------------------------------------------------------------------- */ #include +#include #include #include #include @@ -25,7 +26,6 @@ #include "modify.h" #include "fix.h" #include "compute.h" -#include "output.h" #include "update.h" #include "domain.h" #include "group.h" diff --git a/src/atom_map.cpp b/src/atom_map.cpp index e9cd590624..35d7435ae2 100644 --- a/src/atom_map.cpp +++ b/src/atom_map.cpp @@ -11,6 +11,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "lmptype.h" +#include #include #include "atom.h" #include "comm.h" diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index a7ca6fcb19..91e1980dd0 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include #include "atom_vec.h" diff --git a/src/atom_vec.h b/src/atom_vec.h index 87fb35d9c7..26c181be1e 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -14,8 +14,7 @@ #ifndef LMP_ATOM_VEC_H #define LMP_ATOM_VEC_H -#include -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/atom_vec_body.h b/src/atom_vec_body.h index 4d02c4b3e0..09f03caca1 100644 --- a/src/atom_vec_body.h +++ b/src/atom_vec_body.h @@ -112,7 +112,6 @@ class AtomVecBody : public AtomVec { void grow_bonus(); void copy_bonus(int, int); - //void check(int); }; } From 121947e79d33d2d997bf705ec9b656da2c1edae3 Mon Sep 17 00:00:00 2001 From: Ellad Tadmor Date: Thu, 27 Jun 2019 12:52:20 -0500 Subject: [PATCH 347/760] Added hcp query example to kim_commands --- doc/src/kim_commands.txt | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/doc/src/kim_commands.txt b/doc/src/kim_commands.txt index 48637ae722..66319d7a08 100644 --- a/doc/src/kim_commands.txt +++ b/doc/src/kim_commands.txt @@ -352,7 +352,7 @@ webpage at "https://query.openkim.org"_https://query.openkim.org/ The data obtained by {kim_query} commands can be used as part of the setup or analysis phases of LAMMPS simulations. Some examples are given below. -[Define a crystal at its equilibrium lattice constant] +[Define an equilibrium fcc crystal] kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal boundary p p p @@ -373,6 +373,26 @@ Note that in {unit_conversion_mode} the results obtained from a For example, in the above script, the lattice command would need to be changed to: "lattice fcc $\{a0\}*$\{_u_distance\}". +[Define an equilibrium hcp crystal] + +kim_init EAM_Dynamo_Mendelev_2007_Zr__MO_848899341753_000 metal +boundary p p p +kim_query latconst get_lattice_constant_hcp species=\["Zr"\] units=\["angstrom"\] +variable a0 equal latconst_1 +variable c0 equal latconst_2 +variable c_to_a equal $\{c0\}/$\{a0\} +lattice custom $\{a0\} a1 0.5 -0.866025 0 a2 0.5 0.866025 0 a3 0 0 $\{c_to_a\} & + basis 0.333333 0.666666 0.25 basis 0.666666 0.333333 0.75 +... :pre + +In this case the {kim_query} returns two arguments (since the hexagonal +close packed (hcp) structure has two independent lattice constants). +In the case where a query returns multiple results, the default behavior +for {kim_query} is to split these into individual variables of the form +{prefix_I}, where {prefix} is set to the the {kim_query} {variable} argument +and {I} ranges from 1 to the number of returned values. The number and order of +the returned values is determined by the type of query performed. + [Define a crystal at finite temperature accounting for thermal expansion] kim_init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal From 03099d6e54e8b5832e945b32b81afcfeb3a3440b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 17:11:53 -0400 Subject: [PATCH 348/760] some more include file consistency changes --- src/atom_vec_body.cpp | 3 +-- src/atom_vec_body.h | 1 - src/atom_vec_ellipsoid.cpp | 2 +- src/atom_vec_line.cpp | 1 - src/atom_vec_sphere.cpp | 2 -- src/atom_vec_tri.cpp | 1 - src/balance.cpp | 3 --- src/balance.h | 1 - src/body.cpp | 3 --- src/body.h | 1 - src/bond.cpp | 2 +- src/bond_hybrid.cpp | 4 ++-- src/pointers.h | 5 +++++ 13 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index d5f286c077..3e9528d6b9 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -11,17 +11,16 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include #include #include "atom_vec_body.h" +#include "my_pool_chunk.h" #include "style_body.h" #include "body.h" #include "atom.h" #include "comm.h" #include "domain.h" #include "modify.h" -#include "force.h" #include "fix.h" #include "memory.h" #include "error.h" diff --git a/src/atom_vec_body.h b/src/atom_vec_body.h index 09f03caca1..38309648fb 100644 --- a/src/atom_vec_body.h +++ b/src/atom_vec_body.h @@ -21,7 +21,6 @@ AtomStyle(body,AtomVecBody) #define LMP_ATOM_VEC_BODY_H #include "atom_vec.h" -#include "my_pool_chunk.h" namespace LAMMPS_NS { diff --git a/src/atom_vec_ellipsoid.cpp b/src/atom_vec_ellipsoid.cpp index 2bf3f683d0..ad167bef79 100644 --- a/src/atom_vec_ellipsoid.cpp +++ b/src/atom_vec_ellipsoid.cpp @@ -16,11 +16,11 @@ ------------------------------------------------------------------------- */ #include +#include #include "atom_vec_ellipsoid.h" #include "math_extra.h" #include "atom.h" #include "comm.h" -#include "force.h" #include "domain.h" #include "modify.h" #include "fix.h" diff --git a/src/atom_vec_line.cpp b/src/atom_vec_line.cpp index 020b622c93..6b197d2663 100644 --- a/src/atom_vec_line.cpp +++ b/src/atom_vec_line.cpp @@ -19,7 +19,6 @@ #include "comm.h" #include "domain.h" #include "modify.h" -#include "force.h" #include "fix.h" #include "math_const.h" #include "memory.h" diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp index dec98e5200..b3f4bfe391 100644 --- a/src/atom_vec_sphere.cpp +++ b/src/atom_vec_sphere.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include #include #include "atom_vec_sphere.h" @@ -19,7 +18,6 @@ #include "comm.h" #include "domain.h" #include "modify.h" -#include "force.h" #include "fix.h" #include "fix_adapt.h" #include "math_const.h" diff --git a/src/atom_vec_tri.cpp b/src/atom_vec_tri.cpp index 8fbe0a92dc..b0b6eca19b 100644 --- a/src/atom_vec_tri.cpp +++ b/src/atom_vec_tri.cpp @@ -20,7 +20,6 @@ #include "comm.h" #include "domain.h" #include "modify.h" -#include "force.h" #include "fix.h" #include "math_const.h" #include "memory.h" diff --git a/src/balance.cpp b/src/balance.cpp index 61ac895467..04f342b69b 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -20,7 +20,6 @@ #include #include -#include #include #include "balance.h" #include "atom.h" @@ -30,7 +29,6 @@ #include "domain.h" #include "force.h" #include "update.h" -#include "group.h" #include "modify.h" #include "fix_store.h" #include "imbalance.h" @@ -39,7 +37,6 @@ #include "imbalance_neigh.h" #include "imbalance_store.h" #include "imbalance_var.h" -#include "timer.h" #include "memory.h" #include "error.h" diff --git a/src/balance.h b/src/balance.h index 420031502a..424da33757 100644 --- a/src/balance.h +++ b/src/balance.h @@ -20,7 +20,6 @@ CommandStyle(balance,Balance) #ifndef LMP_BALANCE_H #define LMP_BALANCE_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/body.cpp b/src/body.cpp index 78e2f5d71b..10f88bd43b 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -11,11 +11,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include #include #include "body.h" -#include "error.h" using namespace LAMMPS_NS; diff --git a/src/body.h b/src/body.h index 59001620f8..44581b75f6 100644 --- a/src/body.h +++ b/src/body.h @@ -16,7 +16,6 @@ #include "pointers.h" #include "atom_vec_body.h" -#include "my_pool_chunk.h" namespace LAMMPS_NS { diff --git a/src/bond.cpp b/src/bond.cpp index edcd869425..0d50b7e3e5 100644 --- a/src/bond.cpp +++ b/src/bond.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include "bond.h" #include "atom.h" #include "comm.h" diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 65609b4b6e..0fb23a3214 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -11,13 +11,13 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include +#include #include #include #include "bond_hybrid.h" #include "atom.h" #include "neighbor.h" -#include "domain.h" #include "comm.h" #include "force.h" #include "memory.h" diff --git a/src/pointers.h b/src/pointers.h index f9ef229c90..5df5b72d47 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -39,6 +39,11 @@ namespace LAMMPS_NS { enum ExecutionSpace{Host,Device}; +// global forward declarations + +template class MyPoolChunk; +template class MyPage; + class Pointers { public: Pointers(LAMMPS *ptr) : From 2c0a66b7f8c21ea580dc7bb893461d3585969559 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 20:50:25 -0400 Subject: [PATCH 349/760] increase buffer size of fix tune/kspace. header cleanup. remove use of iostreams --- src/KSPACE/fix_tune_kspace.cpp | 41 +++++++++++++++++----------------- src/KSPACE/fix_tune_kspace.h | 9 ++++---- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/KSPACE/fix_tune_kspace.cpp b/src/KSPACE/fix_tune_kspace.cpp index 0c726985dc..2b22b44340 100644 --- a/src/KSPACE/fix_tune_kspace.cpp +++ b/src/KSPACE/fix_tune_kspace.cpp @@ -15,13 +15,11 @@ Contributing author: Paul Crozier (SNL) ------------------------------------------------------------------------- */ +#include #include -#include +#include #include "fix_tune_kspace.h" #include "update.h" -#include "domain.h" -#include "atom.h" -#include "comm.h" #include "force.h" #include "kspace.h" #include "pair.h" @@ -31,9 +29,6 @@ #include "neighbor.h" #include "modify.h" #include "compute.h" -#include -#include -#include #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} #define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) #define GOLD 1.618034 @@ -101,7 +96,7 @@ void FixTuneKspace::init() double old_acc = force->kspace->accuracy/force->kspace->two_charge_force; char old_acc_str[16]; snprintf(old_acc_str,16,"%g",old_acc); - strcpy(new_acc_str,old_acc_str); + strncpy(new_acc_str,old_acc_str,16); int itmp; double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); @@ -131,36 +126,37 @@ void FixTuneKspace::pre_exchange() // test Ewald store_old_kspace_settings(); strcpy(new_kspace_style,"ewald"); - sprintf(new_pair_style,"%s/long",base_pair_style); + snprintf(new_pair_style,64,"%s/long",base_pair_style); update_pair_style(new_pair_style,pair_cut_coul); update_kspace_style(new_kspace_style,new_acc_str); } else if (niter == 2) { // test PPPM store_old_kspace_settings(); strcpy(new_kspace_style,"pppm"); - sprintf(new_pair_style,"%s/long",base_pair_style); + snprintf(new_pair_style,64,"%s/long",base_pair_style); update_pair_style(new_pair_style,pair_cut_coul); update_kspace_style(new_kspace_style,new_acc_str); } else if (niter == 3) { // test MSM store_old_kspace_settings(); strcpy(new_kspace_style,"msm"); - sprintf(new_pair_style,"%s/msm",base_pair_style); + snprintf(new_pair_style,64,"%s/msm",base_pair_style); update_pair_style(new_pair_style,pair_cut_coul); update_kspace_style(new_kspace_style,new_acc_str); } else if (niter == 4) { store_old_kspace_settings(); - cout << "ewald_time = " << ewald_time << endl; - cout << "pppm_time = " << pppm_time << endl; - cout << "msm_time = " << msm_time << endl; + if (screen) fprintf(screen,"ewald_time = %g\npppm_time = %g\nmsm_time = %g", + ewald_time, pppm_time, msm_time); + if (logfile) fprintf(logfile,"ewald_time = %g\npppm_time = %g\nmsm_time = %g", + ewald_time, pppm_time, msm_time); // switch to fastest one strcpy(new_kspace_style,"ewald"); - sprintf(new_pair_style,"%s/long",base_pair_style); + snprintf(new_pair_style,64,"%s/long",base_pair_style); if (pppm_time < ewald_time && pppm_time < msm_time) strcpy(new_kspace_style,"pppm"); else if (msm_time < pppm_time && msm_time < ewald_time) { strcpy(new_kspace_style,"msm"); - sprintf(new_pair_style,"%s/msm",base_pair_style); + snprintf(new_pair_style,64,"%s/msm",base_pair_style); } update_pair_style(new_pair_style,pair_cut_coul); update_kspace_style(new_kspace_style,new_acc_str); @@ -243,8 +239,8 @@ void FixTuneKspace::update_pair_style(char *new_pair_style, p_pair_settings_file = tmpfile(); force->pair->write_restart(p_pair_settings_file); rewind(p_pair_settings_file); - - cout << "Creating new pair style: " << new_pair_style << endl; + if (screen) fprintf(screen,"Creating new pair style: %s\n",new_pair_style); + if (logfile) fprintf(logfile,"Creating new pair style: %s\n",new_pair_style); // delete old pair style and create new one force->create_pair(new_pair_style,1); @@ -253,7 +249,8 @@ void FixTuneKspace::update_pair_style(char *new_pair_style, double *pcutoff = (double *) force->pair->extract("cut_coul",itmp); double current_cutoff = *pcutoff; - cout << "Coulomb cutoff for real space: " << current_cutoff << endl; + if (screen) fprintf(screen,"Coulomb cutoff for real space: %g\n", current_cutoff); + if (logfile) fprintf(logfile,"Coulomb cutoff for real space: %g\n", current_cutoff); // close temporary file fclose(p_pair_settings_file); @@ -321,7 +318,8 @@ void FixTuneKspace::adjust_rcut(double time) int itmp; double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); double current_cutoff = *p_cutoff; - cout << "Old Coulomb cutoff for real space: " << current_cutoff << endl; + if (screen) fprintf(screen,"Old Coulomb cutoff for real space: %g\n",current_cutoff); + if (logfile) fprintf(logfile,"Old Coulomb cutoff for real space: %g\n",current_cutoff); // use Brent's method from Numerical Recipes to find optimal real space cutoff @@ -391,7 +389,8 @@ void FixTuneKspace::adjust_rcut(double time) // report the new cutoff double *new_cutoff = (double *) force->pair->extract("cut_coul",itmp); current_cutoff = *new_cutoff; - cout << "Adjusted Coulomb cutoff for real space: " << current_cutoff << endl; + if (screen) fprintf(screen,"Adjusted Coulomb cutoff for real space: %g\n", current_cutoff); + if (logfile) fprintf(logfile,"Adjusted Coulomb cutoff for real space: %g\n", current_cutoff); store_old_kspace_settings(); update_pair_style(new_pair_style,pair_cut_coul); diff --git a/src/KSPACE/fix_tune_kspace.h b/src/KSPACE/fix_tune_kspace.h index 6f40fc8711..1ccd735317 100644 --- a/src/KSPACE/fix_tune_kspace.h +++ b/src/KSPACE/fix_tune_kspace.h @@ -20,7 +20,6 @@ FixStyle(tune/kspace,FixTuneKspace) #ifndef LMP_FIX_TUNE_KSPACE_H #define LMP_FIX_TUNE_KSPACE_H -#include #include "fix.h" namespace LAMMPS_NS { @@ -52,10 +51,10 @@ class FixTuneKspace : public Fix { double ewald_time,pppm_time,msm_time; double pair_cut_coul; - char new_acc_str[12]; - char new_kspace_style[20]; - char new_pair_style[20]; - char base_pair_style[20]; + char new_acc_str[16]; + char new_kspace_style[64]; + char new_pair_style[64]; + char base_pair_style[64]; int old_differentiation_flag; int old_slabflag; From 932f052cbf0cf4e94a4df52bbe3414dfeca90959 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 20:52:23 -0400 Subject: [PATCH 350/760] more header cleanup --- src/GPU/pair_vashishta_gpu.cpp | 1 - src/angle_deprecated.cpp | 1 - src/angle_hybrid.cpp | 1 - src/atom.cpp | 1 - src/atom_map.cpp | 2 +- src/atom_vec.cpp | 1 - src/atom_vec_hybrid.h | 1 - src/bond_zero.cpp | 4 ++-- src/change_box.cpp | 1 - src/citeme.cpp | 3 +-- src/citeme.h | 3 +-- src/comm.cpp | 1 + src/comm_brick.cpp | 8 -------- src/hashlittle.cpp | 2 +- src/lammps.cpp | 1 + 15 files changed, 8 insertions(+), 23 deletions(-) diff --git a/src/GPU/pair_vashishta_gpu.cpp b/src/GPU/pair_vashishta_gpu.cpp index b496359b8a..5539653756 100644 --- a/src/GPU/pair_vashishta_gpu.cpp +++ b/src/GPU/pair_vashishta_gpu.cpp @@ -14,7 +14,6 @@ /* ---------------------------------------------------------------------- Contributing author: Anders Hafreager (UiO) ------------------------------------------------------------------------- */ -#include #include #include #include diff --git a/src/angle_deprecated.cpp b/src/angle_deprecated.cpp index 73fcccc53a..b5af217b7b 100644 --- a/src/angle_deprecated.cpp +++ b/src/angle_deprecated.cpp @@ -16,7 +16,6 @@ ------------------------------------------------------------------------- */ #include -#include #include "angle_deprecated.h" #include "angle_hybrid.h" #include "comm.h" diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index 48bb241100..47baf770a5 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -12,7 +12,6 @@ ------------------------------------------------------------------------- */ #include -#include #include #include #include "angle_hybrid.h" diff --git a/src/atom.cpp b/src/atom.cpp index b79febfc20..eab8a3063d 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include #include "atom.h" diff --git a/src/atom_map.cpp b/src/atom_map.cpp index 35d7435ae2..b14ebdba68 100644 --- a/src/atom_map.cpp +++ b/src/atom_map.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "lmptype.h" +#include "pointers.h" #include #include #include "atom.h" diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index 91e1980dd0..a7ca6fcb19 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include #include #include "atom_vec.h" diff --git a/src/atom_vec_hybrid.h b/src/atom_vec_hybrid.h index a027923a17..8129baccba 100644 --- a/src/atom_vec_hybrid.h +++ b/src/atom_vec_hybrid.h @@ -20,7 +20,6 @@ AtomStyle(hybrid,AtomVecHybrid) #ifndef LMP_ATOM_VEC_HYBRID_H #define LMP_ATOM_VEC_HYBRID_H -#include #include "atom_vec.h" namespace LAMMPS_NS { diff --git a/src/bond_zero.cpp b/src/bond_zero.cpp index 0847cf9e6b..3932846cb4 100644 --- a/src/bond_zero.cpp +++ b/src/bond_zero.cpp @@ -15,8 +15,8 @@ Contributing author: Carsten Svaneborg (SDU) ------------------------------------------------------------------------- */ -#include -#include +#include +#include #include #include "bond_zero.h" #include "atom.h" diff --git a/src/change_box.cpp b/src/change_box.cpp index b7d3cb245f..1fed65b430 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include "change_box.h" #include "atom.h" diff --git a/src/citeme.cpp b/src/citeme.cpp index d021722671..24896b448c 100644 --- a/src/citeme.cpp +++ b/src/citeme.cpp @@ -11,10 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include "citeme.h" -#include "version.h" #include "universe.h" -#include "error.h" using namespace LAMMPS_NS; diff --git a/src/citeme.h b/src/citeme.h index 262b284337..c383ec2227 100644 --- a/src/citeme.h +++ b/src/citeme.h @@ -15,7 +15,6 @@ #define LMP_CITEME_H #include "pointers.h" -#include #include namespace LAMMPS_NS { @@ -29,7 +28,7 @@ class CiteMe : protected Pointers { private: FILE *fp; // opaque pointer to log.cite file object typedef std::set citeset; - citeset *cs; // registered set of publications + citeset *cs; // registered set of publications }; } diff --git a/src/comm.cpp b/src/comm.cpp index 052de93793..5f846cf292 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -21,6 +21,7 @@ #include "force.h" #include "pair.h" #include "modify.h" +#include "neighbor.h" #include "fix.h" #include "compute.h" #include "domain.h" diff --git a/src/comm_brick.cpp b/src/comm_brick.cpp index 330551aaed..47f60a3da6 100644 --- a/src/comm_brick.cpp +++ b/src/comm_brick.cpp @@ -19,23 +19,15 @@ #include #include #include -#include #include "comm_brick.h" -#include "comm_tiled.h" -#include "universe.h" #include "atom.h" #include "atom_vec.h" -#include "force.h" #include "pair.h" #include "domain.h" #include "neighbor.h" -#include "group.h" -#include "modify.h" #include "fix.h" #include "compute.h" -#include "output.h" #include "dump.h" -#include "math_extra.h" #include "error.h" #include "memory.h" diff --git a/src/hashlittle.cpp b/src/hashlittle.cpp index f612be9eeb..42109abd24 100644 --- a/src/hashlittle.cpp +++ b/src/hashlittle.cpp @@ -3,7 +3,7 @@ // bob_jenkins@burtleburtle.net #include -#include +#include #include // if the system defines the __BYTE_ORDER__ define, diff --git a/src/lammps.cpp b/src/lammps.cpp index 320d89ed52..83a2f057ee 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -12,6 +12,7 @@ ------------------------------------------------------------------------- */ #include +#include #include #include #include From 9c53a5ca3f1c756601b091a97ea5020a7187d2e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 21:40:28 -0400 Subject: [PATCH 351/760] add first draft of a summary of the rules for include files --- doc/include-file-conventions.md | 125 ++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 doc/include-file-conventions.md diff --git a/doc/include-file-conventions.md b/doc/include-file-conventions.md new file mode 100644 index 0000000000..5152051ba5 --- /dev/null +++ b/doc/include-file-conventions.md @@ -0,0 +1,125 @@ +# Outline of include file conventions in LAMMPS + +This purpose of this document is to provide a point of reference +for LAMMPS developers and contributors as to what include files +and definitions to put where into LAMMPS source. +Last change 2019-06-27 + +## Table of Contents + + * [Motivation](#motivation) + * [Rules](#rules) + * [Tools](#tools) + * [Legacy Code](#legacy-code) + +## Motivation + +The conventions outlined in this document are supposed to help making +maintenance of the LAMMPS software easier. By trying to achieve +consistency across files contributed by different developers, it will +become easier to modify and adjust files by the code maintainers, and +overall the chance for errors or portability issues will be reduced. +Also the rules employed are supposed to minimize naming conflicts and +simplify dependencies between files (and thus speed up compilation), as +well as make otherwise hidden dependencies visible. + +## Rules + +Below are the various rules that are applied. Not all a enforced +strictly and automatically. If there are no significant side effects, +exceptions may be possible for cases, where a full compliance to the +rules may require a large effort compared to the benefit. + +### Core Files Versus Package Files + +All rules listed below are most strictly observed for core LAMMPS files. +Which are the files that are not part of a package and files of the +packages MOLECULE, MANYBODY, KSPACE, and RIGID. On the other end of +the spectrum are USER packages and legacy packages that predate these +rules and thus may not be fully compliant. Also new contributions +will be checked more closely, while existing code is incrementally +adapted to the rules as time and required effort permits. + +### System Versus Local Header Files + +All system or library provided include files are included with angular +brackets (examples: `#include ` or `#include `) while +include files provided with LAMMPS are included with double quotes +(examples: `#include "pointers.h"` or `#include "compute_temp.h"`). + +For headers declaring functions of the C-library, the corresponding +C++ versions should be included (examples: `#include ` or +`#include `). However, those are limited to those defined +in the C++98 standard. Some files thus must use the older style unless +the minimum C++ standard requirement of LAMMPS is lifted to C++11 or +even beyond (examples: `#include ` versus `#include ` +or `#include ` versus `#include `). + +### C++ Standard Compliance + +LAMMPS core files currently correspond to the C++98 standard. Files +requiring C++11 or later are only permitted in (optional) packages +and particularly packages that are not part of the list of commonly +used packages like MOLECULE, KSPACE, MANYBODY, or RIGID. + +Also, LAMMPS uses the C-style stdio library for I/O instead of iostreams. +Since using both at the same time can cause problems, iostreams should +be avoided where possible. + +### Lean Header Files + +Header files will typically contain the definition of a (single) class. +These header files should have as few include statements as possible. +This is particularly important for classes that implement a "style" and +thus use a macro of the kind `SomeStyle(some/name,SomeName)`. These will +be all included in the auto-generated `"some_style.h"` files which will +result in a high potential for direct or indirect symbol name clashes. + +In the ideal case, the header would only include one file defining the +parent class. That would typically be either `#include "pointers.h"` for +the `Pointers` class, or a header of a class derived from it like +`#include "pair.h"` for the `Pair` class and so on. Referenced to other +classes inside the class should be make through pointers, for which forward +declarations (inside the `LAMMPS_NS` or the new class'es namespace) can +be employed. The full definition will then be included into the corresponding +implementation file. In the given example from above, the header file +would be called `some_name.h` and the implementation `some_name.cpp` (all +lower case with underscores, while the class itself would be in camel case +and no underscores, and the style name with lower case names separated by +a forward slash). + +### Implementation Files + +In the implementation files (typically, those would have the same base name +as the corresponding header with a .cpp extension instead of .h) include +statments should follow the "include what you use" principle. + +### Special Cases and Exceptions + +#### pointers.h + +The `pointer.h` header file also includes `cstdio` and `lmptype.h` +(and throught it `stdint.h`, `intttypes.h`, and `climits`). +This means any header including `pointers.h` can assume that `FILE`, +`NULL`, `INT_MAX` are defined. + +## Tools + +The [Include What You Use tool](https://include-what-you-use.org/) +can be used to provide supporting information about compliance with +the rules listed here. There are some limitations and the IWWU tool +may give incorrect advice. The tools is activated by setting the +CMake variable `CMAKE_CXX_INCLUDE_WHAT_YOU_USE` variable to the +path of the `include-what-you-use` command. When activated, the +tool will be run after each compilation and provide suggestions for +which include files should be added or removed. + +## Legacy Code + +A lot of code predates the application of the rules in this document, +and those rules are a moving target as well. So there is going to be +significant chunks of code, that does not fully comply. This applies +for example to the USER-REAXC, or the USER-ATC package. The LAMMPS +developers are dedicated to make an effort to improve the compliance +and welcome volunteers wanting to help with the process. + From 86a9e4fca24a7cefc832333a3ff75a057763e370 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 21:40:50 -0400 Subject: [PATCH 352/760] make body package compile again --- src/BODY/body_nparticle.cpp | 1 + src/BODY/body_rounded_polygon.cpp | 1 + src/BODY/body_rounded_polyhedron.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/src/BODY/body_nparticle.cpp b/src/BODY/body_nparticle.cpp index 10529ad3af..21070107f5 100644 --- a/src/BODY/body_nparticle.cpp +++ b/src/BODY/body_nparticle.cpp @@ -13,6 +13,7 @@ #include #include "body_nparticle.h" +#include "my_pool_chunk.h" #include "math_extra.h" #include "atom_vec_body.h" #include "atom.h" diff --git a/src/BODY/body_rounded_polygon.cpp b/src/BODY/body_rounded_polygon.cpp index d352c789d7..f7741ada88 100644 --- a/src/BODY/body_rounded_polygon.cpp +++ b/src/BODY/body_rounded_polygon.cpp @@ -17,6 +17,7 @@ #include #include "body_rounded_polygon.h" +#include "my_pool_chunk.h" #include "atom_vec_body.h" #include "atom.h" #include "force.h" diff --git a/src/BODY/body_rounded_polyhedron.cpp b/src/BODY/body_rounded_polyhedron.cpp index 99a380a932..34d918f1f6 100644 --- a/src/BODY/body_rounded_polyhedron.cpp +++ b/src/BODY/body_rounded_polyhedron.cpp @@ -17,6 +17,7 @@ #include #include "body_rounded_polyhedron.h" +#include "my_pool_chunk.h" #include "atom_vec_body.h" #include "atom.h" #include "force.h" From 4ec3a508fc1731e5d6d3708005515ff0addace9f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 21:54:07 -0400 Subject: [PATCH 353/760] bulk removal of #include from header files --- src/CLASS2/angle_class2.h | 1 - src/CLASS2/bond_class2.h | 1 - src/CLASS2/dihedral_class2.h | 1 - src/CLASS2/improper_class2.h | 1 - src/GPU/pair_eam_gpu.h | 1 - src/KOKKOS/atom_vec_hybrid_kokkos.h | 1 - src/KOKKOS/pair_eam_alloy_kokkos.h | 1 - src/KOKKOS/pair_eam_fs_kokkos.h | 1 - src/KOKKOS/pair_eam_kokkos.h | 1 - src/KOKKOS/pair_hybrid_kokkos.h | 1 - src/KOKKOS/pair_reaxc_kokkos.h | 1 - src/KOKKOS/pair_tersoff_kokkos.h | 1 - src/KOKKOS/pair_tersoff_mod_kokkos.h | 1 - src/KOKKOS/pair_tersoff_zbl_kokkos.h | 1 - src/MANYBODY/fix_qeq_comb.h | 1 - src/MANYBODY/pair_eam.h | 1 - src/MANYBODY/pair_eim.h | 1 - src/MC/fix_atom_swap.h | 1 - src/MC/fix_gcmc.h | 1 - src/MISC/fix_deposit.h | 1 - src/MOLECULE/angle_charmm.h | 1 - src/MOLECULE/angle_cosine.h | 1 - src/MOLECULE/angle_cosine_delta.h | 1 - src/MOLECULE/angle_cosine_periodic.h | 1 - src/MOLECULE/angle_cosine_squared.h | 1 - src/MOLECULE/angle_harmonic.h | 1 - src/MOLECULE/angle_table.h | 1 - src/MOLECULE/bond_fene.h | 1 - src/MOLECULE/bond_fene_expand.h | 1 - src/MOLECULE/bond_gromos.h | 1 - src/MOLECULE/bond_harmonic.h | 1 - src/MOLECULE/bond_morse.h | 1 - src/MOLECULE/bond_nonlinear.h | 1 - src/MOLECULE/bond_quartic.h | 1 - src/MOLECULE/bond_table.h | 1 - src/MOLECULE/dihedral_charmm.h | 1 - src/MOLECULE/dihedral_charmmfsw.h | 1 - src/MOLECULE/dihedral_harmonic.h | 1 - src/MOLECULE/dihedral_helix.h | 1 - src/MOLECULE/dihedral_multi_harmonic.h | 1 - src/MOLECULE/dihedral_opls.h | 1 - src/MOLECULE/improper_cvff.h | 1 - src/MOLECULE/improper_harmonic.h | 1 - src/MOLECULE/improper_umbrella.h | 1 - src/REPLICA/neb.h | 1 - src/SPIN/neb_spin.h | 1 - src/USER-CGDNA/mf_oxdna.h | 1 - src/USER-CGSDK/angle_sdk.h | 1 - src/USER-DIFFRACTION/fix_saed_vtk.h | 1 - src/USER-INTEL/angle_charmm_intel.h | 1 - src/USER-INTEL/angle_harmonic_intel.h | 1 - src/USER-INTEL/bond_fene_intel.h | 1 - src/USER-INTEL/bond_harmonic_intel.h | 1 - src/USER-INTEL/improper_cvff_intel.h | 1 - src/USER-INTEL/improper_harmonic_intel.h | 1 - src/USER-INTEL/intel_simd.h | 1 - src/USER-INTEL/pair_eam_intel.h | 1 - src/USER-MANIFOLD/manifold_thylakoid.h | 1 - src/USER-MGPT/mgpt_readpot.h | 1 - src/USER-MGPT/pair_mgpt.h | 1 - src/USER-MISC/angle_cosine_shift.h | 1 - src/USER-MISC/angle_cosine_shift_exp.h | 1 - src/USER-MISC/angle_dipole.h | 1 - src/USER-MISC/angle_fourier.h | 1 - src/USER-MISC/angle_fourier_simple.h | 1 - src/USER-MISC/angle_quartic.h | 1 - src/USER-MISC/bond_harmonic_shift.h | 1 - src/USER-MISC/bond_harmonic_shift_cut.h | 1 - src/USER-MISC/dihedral_cosine_shift_exp.h | 1 - src/USER-MISC/dihedral_fourier.h | 1 - src/USER-MISC/dihedral_nharmonic.h | 1 - src/USER-MISC/dihedral_quadratic.h | 1 - src/USER-MISC/dihedral_spherical.h | 1 - src/USER-MISC/fix_ave_correlate_long.h | 1 - src/USER-MISC/fix_srp.h | 1 - src/USER-MISC/improper_cossq.h | 1 - src/USER-MISC/improper_distance.h | 1 - src/USER-MISC/improper_fourier.h | 1 - src/USER-MISC/improper_ring.h | 1 - src/USER-MOFFF/angle_class2_p6.h | 1 - src/USER-MOFFF/angle_cosine_buck6d.h | 1 - src/USER-MOFFF/improper_inversion_harmonic.h | 1 - src/USER-REAXC/fix_reaxc_bonds.h | 1 - src/bond_hybrid.h | 1 - src/bond_zero.h | 1 - src/citeme.cpp | 1 - src/comm_brick.cpp | 1 - src/comm_tiled.cpp | 5 +---- src/comm_tiled.h | 1 + src/compute.cpp | 4 ---- src/compute_adf.h | 1 - src/compute_rdf.h | 1 - src/dihedral_hybrid.h | 1 - src/dihedral_zero.h | 1 - src/fix_ave_atom.h | 1 - src/fix_ave_chunk.h | 1 - src/fix_ave_correlate.h | 1 - src/fix_ave_histo.h | 1 - src/fix_ave_histo_weight.h | 1 - src/fix_ave_time.h | 1 - src/fix_balance.h | 1 - src/fix_halt.h | 1 - src/fix_move.h | 1 - src/fix_print.h | 1 - src/fix_store.h | 1 - src/fix_tmd.h | 1 - src/force.h | 1 - src/group.h | 1 - src/image.h | 1 - src/imbalance.h | 1 - src/improper_hybrid.h | 1 - src/improper_zero.h | 1 - src/input.h | 1 - src/lammps.h | 1 - src/modify.h | 1 - src/pair_hybrid.h | 1 - src/read_data.h | 1 - src/read_dump.h | 1 - src/read_restart.h | 1 - src/universe.h | 1 - src/variable.h | 1 - src/write_coeff.h | 1 - src/write_data.h | 1 - src/write_restart.h | 1 - 124 files changed, 2 insertions(+), 129 deletions(-) diff --git a/src/CLASS2/angle_class2.h b/src/CLASS2/angle_class2.h index 8444ada057..cc155747ac 100644 --- a/src/CLASS2/angle_class2.h +++ b/src/CLASS2/angle_class2.h @@ -20,7 +20,6 @@ AngleStyle(class2,AngleClass2) #ifndef LMP_ANGLE_CLASS2_H #define LMP_ANGLE_CLASS2_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/CLASS2/bond_class2.h b/src/CLASS2/bond_class2.h index 89d930b548..f0fcc6825e 100644 --- a/src/CLASS2/bond_class2.h +++ b/src/CLASS2/bond_class2.h @@ -20,7 +20,6 @@ BondStyle(class2,BondClass2) #ifndef LMP_BOND_CLASS2_H #define LMP_BOND_CLASS2_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/CLASS2/dihedral_class2.h b/src/CLASS2/dihedral_class2.h index a4ea9e4bd9..32cd289137 100644 --- a/src/CLASS2/dihedral_class2.h +++ b/src/CLASS2/dihedral_class2.h @@ -20,7 +20,6 @@ DihedralStyle(class2,DihedralClass2) #ifndef LMP_DIHEDRAL_CLASS2_H #define LMP_DIHEDRAL_CLASS2_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/CLASS2/improper_class2.h b/src/CLASS2/improper_class2.h index 1cc3417731..cac805046a 100644 --- a/src/CLASS2/improper_class2.h +++ b/src/CLASS2/improper_class2.h @@ -20,7 +20,6 @@ ImproperStyle(class2,ImproperClass2) #ifndef LMP_IMPROPER_CLASS2_H #define LMP_IMPROPER_CLASS2_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/GPU/pair_eam_gpu.h b/src/GPU/pair_eam_gpu.h index 099529f3df..e4742a3bef 100644 --- a/src/GPU/pair_eam_gpu.h +++ b/src/GPU/pair_eam_gpu.h @@ -20,7 +20,6 @@ PairStyle(eam/gpu,PairEAMGPU) #ifndef LMP_PAIR_EAM_GPU_H #define LMP_PAIR_EAM_GPU_H -#include #include "pair_eam.h" namespace LAMMPS_NS { diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index 1bbbd26319..4cfb186b17 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -20,7 +20,6 @@ AtomStyle(hybrid/kk,AtomVecHybridKokkos) #ifndef LMP_ATOM_VEC_HYBRID_KOKKOS_H #define LMP_ATOM_VEC_HYBRID_KOKKOS_H -#include #include "atom_vec_kokkos.h" #include "kokkos_type.h" diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.h b/src/KOKKOS/pair_eam_alloy_kokkos.h index 6593ccae73..e1dd9ab47d 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.h +++ b/src/KOKKOS/pair_eam_alloy_kokkos.h @@ -23,7 +23,6 @@ PairStyle(eam/alloy/kk/host,PairEAMAlloyKokkos) #ifndef LMP_PAIR_EAM_ALLOY_KOKKOS_H #define LMP_PAIR_EAM_ALLOY_KOKKOS_H -#include #include "kokkos_base.h" #include "pair_kokkos.h" #include "pair_eam.h" diff --git a/src/KOKKOS/pair_eam_fs_kokkos.h b/src/KOKKOS/pair_eam_fs_kokkos.h index f75605ff6d..e93977869e 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.h +++ b/src/KOKKOS/pair_eam_fs_kokkos.h @@ -23,7 +23,6 @@ PairStyle(eam/fs/kk/host,PairEAMFSKokkos) #ifndef LMP_PAIR_EAM_FS_KOKKOS_H #define LMP_PAIR_EAM_FS_KOKKOS_H -#include #include "kokkos_base.h" #include "pair_kokkos.h" #include "pair_eam.h" diff --git a/src/KOKKOS/pair_eam_kokkos.h b/src/KOKKOS/pair_eam_kokkos.h index 4040eba858..3bf89c549a 100644 --- a/src/KOKKOS/pair_eam_kokkos.h +++ b/src/KOKKOS/pair_eam_kokkos.h @@ -23,7 +23,6 @@ PairStyle(eam/kk/host,PairEAMKokkos) #ifndef LMP_PAIR_EAM_KOKKOS_H #define LMP_PAIR_EAM_KOKKOS_H -#include #include "kokkos_base.h" #include "pair_kokkos.h" #include "pair_eam.h" diff --git a/src/KOKKOS/pair_hybrid_kokkos.h b/src/KOKKOS/pair_hybrid_kokkos.h index 94e034f875..799354cf01 100644 --- a/src/KOKKOS/pair_hybrid_kokkos.h +++ b/src/KOKKOS/pair_hybrid_kokkos.h @@ -20,7 +20,6 @@ PairStyle(hybrid/kk,PairHybridKokkos) #ifndef LMP_PAIR_HYBRID_KOKKOS_H #define LMP_PAIR_HYBRID_KOKKOS_H -#include #include "pair_hybrid.h" #include "pair_kokkos.h" #include "kokkos_type.h" diff --git a/src/KOKKOS/pair_reaxc_kokkos.h b/src/KOKKOS/pair_reaxc_kokkos.h index 89dfc4d884..783ea33c4e 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -23,7 +23,6 @@ PairStyle(reax/c/kk/host,PairReaxCKokkos) #ifndef LMP_PAIR_REAXC_KOKKOS_H #define LMP_PAIR_REAXC_KOKKOS_H -#include #include "pair_kokkos.h" #include "pair_reaxc.h" #include "neigh_list_kokkos.h" diff --git a/src/KOKKOS/pair_tersoff_kokkos.h b/src/KOKKOS/pair_tersoff_kokkos.h index f73d4fe2d8..7d41fe2346 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.h +++ b/src/KOKKOS/pair_tersoff_kokkos.h @@ -23,7 +23,6 @@ PairStyle(tersoff/kk/host,PairTersoffKokkos) #ifndef LMP_PAIR_TERSOFF_KOKKOS_H #define LMP_PAIR_TERSOFF_KOKKOS_H -#include #include "pair_kokkos.h" #include "pair_tersoff.h" #include "neigh_list_kokkos.h" diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.h b/src/KOKKOS/pair_tersoff_mod_kokkos.h index d7c94ffc93..889e1eadfa 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.h +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.h @@ -23,7 +23,6 @@ PairStyle(tersoff/mod/kk/host,PairTersoffMODKokkos) #ifndef LMP_PAIR_TERSOFF_MOD_KOKKOS_H #define LMP_PAIR_TERSOFF_MOD_KOKKOS_H -#include #include "pair_kokkos.h" #include "pair_tersoff_mod.h" #include "neigh_list_kokkos.h" diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.h b/src/KOKKOS/pair_tersoff_zbl_kokkos.h index 3af4e0d8eb..0c7fa2e963 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.h +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.h @@ -23,7 +23,6 @@ PairStyle(tersoff/zbl/kk/host,PairTersoffZBLKokkos) #ifndef LMP_PAIR_TERSOFF_ZBL_KOKKOS_H #define LMP_PAIR_TERSOFF_ZBL_KOKKOS_H -#include #include "pair_kokkos.h" #include "pair_tersoff_zbl.h" #include "neigh_list_kokkos.h" diff --git a/src/MANYBODY/fix_qeq_comb.h b/src/MANYBODY/fix_qeq_comb.h index dd4c9f7290..c3a0ac08f3 100644 --- a/src/MANYBODY/fix_qeq_comb.h +++ b/src/MANYBODY/fix_qeq_comb.h @@ -20,7 +20,6 @@ FixStyle(qeq/comb,FixQEQComb) #ifndef LMP_FIX_QEQ_COMB_H #define LMP_FIX_QEQ_COMB_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/MANYBODY/pair_eam.h b/src/MANYBODY/pair_eam.h index 234552157b..8bcb44c347 100644 --- a/src/MANYBODY/pair_eam.h +++ b/src/MANYBODY/pair_eam.h @@ -20,7 +20,6 @@ PairStyle(eam,PairEAM) #ifndef LMP_PAIR_EAM_H #define LMP_PAIR_EAM_H -#include #include "pair.h" namespace LAMMPS_NS { diff --git a/src/MANYBODY/pair_eim.h b/src/MANYBODY/pair_eim.h index 50f9934c44..f9fb2d5a77 100644 --- a/src/MANYBODY/pair_eim.h +++ b/src/MANYBODY/pair_eim.h @@ -20,7 +20,6 @@ PairStyle(eim,PairEIM) #ifndef LMP_PAIR_EIM_H #define LMP_PAIR_EIM_H -#include #include "pair.h" namespace LAMMPS_NS { diff --git a/src/MC/fix_atom_swap.h b/src/MC/fix_atom_swap.h index 19895704f1..a5ce89b16b 100644 --- a/src/MC/fix_atom_swap.h +++ b/src/MC/fix_atom_swap.h @@ -20,7 +20,6 @@ FixStyle(atom/swap,FixAtomSwap) #ifndef LMP_FIX_MCSWAP_H #define LMP_FIX_MCSWAP_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/MC/fix_gcmc.h b/src/MC/fix_gcmc.h index 5d0b7aab8f..da4232d19b 100644 --- a/src/MC/fix_gcmc.h +++ b/src/MC/fix_gcmc.h @@ -20,7 +20,6 @@ FixStyle(gcmc,FixGCMC) #ifndef LMP_FIX_GCMC_H #define LMP_FIX_GCMC_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/MISC/fix_deposit.h b/src/MISC/fix_deposit.h index 38958b80e7..e3104c890d 100644 --- a/src/MISC/fix_deposit.h +++ b/src/MISC/fix_deposit.h @@ -20,7 +20,6 @@ FixStyle(deposit,FixDeposit) #ifndef LMP_FIX_DEPOSIT_H #define LMP_FIX_DEPOSIT_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_charmm.h b/src/MOLECULE/angle_charmm.h index 2228ad8732..444c833d37 100644 --- a/src/MOLECULE/angle_charmm.h +++ b/src/MOLECULE/angle_charmm.h @@ -20,7 +20,6 @@ AngleStyle(charmm,AngleCharmm) #ifndef LMP_ANGLE_CHARMM_H #define LMP_ANGLE_CHARMM_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_cosine.h b/src/MOLECULE/angle_cosine.h index f2406bc5dd..ca1f4178f8 100644 --- a/src/MOLECULE/angle_cosine.h +++ b/src/MOLECULE/angle_cosine.h @@ -20,7 +20,6 @@ AngleStyle(cosine,AngleCosine) #ifndef LMP_ANGLE_COSINE_H #define LMP_ANGLE_COSINE_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_cosine_delta.h b/src/MOLECULE/angle_cosine_delta.h index 1e19ecaf79..70b574b234 100644 --- a/src/MOLECULE/angle_cosine_delta.h +++ b/src/MOLECULE/angle_cosine_delta.h @@ -20,7 +20,6 @@ AngleStyle(cosine/delta,AngleCosineDelta) #ifndef LMP_ANGLE_COSINE_DELTA_H #define LMP_ANGLE_COSINE_DELTA_H -#include #include "angle_cosine_squared.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_cosine_periodic.h b/src/MOLECULE/angle_cosine_periodic.h index e131e85101..f0188b6c17 100644 --- a/src/MOLECULE/angle_cosine_periodic.h +++ b/src/MOLECULE/angle_cosine_periodic.h @@ -20,7 +20,6 @@ AngleStyle(cosine/periodic, AngleCosinePeriodic) #ifndef LMP_ANGLE_PERIODIC_H #define LMP_ANGLE_PERIODIC_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_cosine_squared.h b/src/MOLECULE/angle_cosine_squared.h index 8e8c84c0f9..a19a923850 100644 --- a/src/MOLECULE/angle_cosine_squared.h +++ b/src/MOLECULE/angle_cosine_squared.h @@ -20,7 +20,6 @@ AngleStyle(cosine/squared,AngleCosineSquared) #ifndef LMP_ANGLE_COSINE_SQUARED_H #define LMP_ANGLE_COSINE_SQUARED_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_harmonic.h b/src/MOLECULE/angle_harmonic.h index e0c067653b..f371178d58 100644 --- a/src/MOLECULE/angle_harmonic.h +++ b/src/MOLECULE/angle_harmonic.h @@ -20,7 +20,6 @@ AngleStyle(harmonic,AngleHarmonic) #ifndef LMP_ANGLE_HARMONIC_H #define LMP_ANGLE_HARMONIC_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/angle_table.h b/src/MOLECULE/angle_table.h index 0088ace39b..46633d28cc 100644 --- a/src/MOLECULE/angle_table.h +++ b/src/MOLECULE/angle_table.h @@ -20,7 +20,6 @@ AngleStyle(table,AngleTable) #ifndef LMP_ANGLE_TABLE_H #define LMP_ANGLE_TABLE_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_fene.h b/src/MOLECULE/bond_fene.h index 58cd6ce289..1963e3ca22 100644 --- a/src/MOLECULE/bond_fene.h +++ b/src/MOLECULE/bond_fene.h @@ -20,7 +20,6 @@ BondStyle(fene,BondFENE) #ifndef LMP_BOND_FENE_H #define LMP_BOND_FENE_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_fene_expand.h b/src/MOLECULE/bond_fene_expand.h index cb316ac5f2..8cfc17dc68 100644 --- a/src/MOLECULE/bond_fene_expand.h +++ b/src/MOLECULE/bond_fene_expand.h @@ -20,7 +20,6 @@ BondStyle(fene/expand,BondFENEExpand) #ifndef LMP_BOND_FENE_EXPAND_H #define LMP_BOND_FENE_EXPAND_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_gromos.h b/src/MOLECULE/bond_gromos.h index c26ad64b3d..966b914437 100644 --- a/src/MOLECULE/bond_gromos.h +++ b/src/MOLECULE/bond_gromos.h @@ -20,7 +20,6 @@ BondStyle(gromos,BondGromos) #ifndef LMP_BOND_GROMOS_H #define LMP_BOND_GROMOS_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_harmonic.h b/src/MOLECULE/bond_harmonic.h index 5c692b2a8e..576e63629b 100644 --- a/src/MOLECULE/bond_harmonic.h +++ b/src/MOLECULE/bond_harmonic.h @@ -20,7 +20,6 @@ BondStyle(harmonic,BondHarmonic) #ifndef LMP_BOND_HARMONIC_H #define LMP_BOND_HARMONIC_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_morse.h b/src/MOLECULE/bond_morse.h index c4d60bc217..030a94a8da 100644 --- a/src/MOLECULE/bond_morse.h +++ b/src/MOLECULE/bond_morse.h @@ -20,7 +20,6 @@ BondStyle(morse,BondMorse) #ifndef LMP_BOND_MORSE_H #define LMP_BOND_MORSE_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_nonlinear.h b/src/MOLECULE/bond_nonlinear.h index 175421264b..7782b93778 100644 --- a/src/MOLECULE/bond_nonlinear.h +++ b/src/MOLECULE/bond_nonlinear.h @@ -20,7 +20,6 @@ BondStyle(nonlinear,BondNonlinear) #ifndef LMP_BOND_NONLINEAR_H #define LMP_BOND_NONLINEAR_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_quartic.h b/src/MOLECULE/bond_quartic.h index 2aaa76e2c3..60ccf307b9 100644 --- a/src/MOLECULE/bond_quartic.h +++ b/src/MOLECULE/bond_quartic.h @@ -20,7 +20,6 @@ BondStyle(quartic,BondQuartic) #ifndef LMP_BOND_QUARTIC_H #define LMP_BOND_QUARTIC_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/bond_table.h b/src/MOLECULE/bond_table.h index 5766239167..3db3ade3ab 100644 --- a/src/MOLECULE/bond_table.h +++ b/src/MOLECULE/bond_table.h @@ -20,7 +20,6 @@ BondStyle(table,BondTable) #ifndef LMP_BOND_TABLE_H #define LMP_BOND_TABLE_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_charmm.h b/src/MOLECULE/dihedral_charmm.h index 8f51b398db..4be3925dad 100644 --- a/src/MOLECULE/dihedral_charmm.h +++ b/src/MOLECULE/dihedral_charmm.h @@ -20,7 +20,6 @@ DihedralStyle(charmm,DihedralCharmm) #ifndef LMP_DIHEDRAL_CHARMM_H #define LMP_DIHEDRAL_CHARMM_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_charmmfsw.h b/src/MOLECULE/dihedral_charmmfsw.h index dd31067a8d..b33250004b 100644 --- a/src/MOLECULE/dihedral_charmmfsw.h +++ b/src/MOLECULE/dihedral_charmmfsw.h @@ -20,7 +20,6 @@ DihedralStyle(charmmfsw,DihedralCharmmfsw) #ifndef LMP_DIHEDRAL_CHARMMFSW_H #define LMP_DIHEDRAL_CHARMMFSW_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_harmonic.h b/src/MOLECULE/dihedral_harmonic.h index 2031261256..938e59918b 100644 --- a/src/MOLECULE/dihedral_harmonic.h +++ b/src/MOLECULE/dihedral_harmonic.h @@ -20,7 +20,6 @@ DihedralStyle(harmonic,DihedralHarmonic) #ifndef LMP_DIHEDRAL_HARMONIC_H #define LMP_DIHEDRAL_HARMONIC_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_helix.h b/src/MOLECULE/dihedral_helix.h index 745ab84115..0213c59e8a 100644 --- a/src/MOLECULE/dihedral_helix.h +++ b/src/MOLECULE/dihedral_helix.h @@ -20,7 +20,6 @@ DihedralStyle(helix,DihedralHelix) #ifndef LMP_DIHEDRAL_HELIX_H #define LMP_DIHEDRAL_HELIX_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_multi_harmonic.h b/src/MOLECULE/dihedral_multi_harmonic.h index 32f17e75ae..bb3d7183f7 100644 --- a/src/MOLECULE/dihedral_multi_harmonic.h +++ b/src/MOLECULE/dihedral_multi_harmonic.h @@ -20,7 +20,6 @@ DihedralStyle(multi/harmonic,DihedralMultiHarmonic) #ifndef LMP_DIHEDRAL_MULTI_HARMONIC_H #define LMP_DIHEDRAL_MULTI_HARMONIC_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/dihedral_opls.h b/src/MOLECULE/dihedral_opls.h index c1e64ada1e..01878173cd 100644 --- a/src/MOLECULE/dihedral_opls.h +++ b/src/MOLECULE/dihedral_opls.h @@ -20,7 +20,6 @@ DihedralStyle(opls,DihedralOPLS) #ifndef LMP_DIHEDRAL_OPLS_H #define LMP_DIHEDRAL_OPLS_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/improper_cvff.h b/src/MOLECULE/improper_cvff.h index d4c30cc2ee..055d2ca9b8 100644 --- a/src/MOLECULE/improper_cvff.h +++ b/src/MOLECULE/improper_cvff.h @@ -20,7 +20,6 @@ ImproperStyle(cvff,ImproperCvff) #ifndef LMP_IMPROPER_CVFF_H #define LMP_IMPROPER_CVFF_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/improper_harmonic.h b/src/MOLECULE/improper_harmonic.h index fbbb8d33d6..5949c6911e 100644 --- a/src/MOLECULE/improper_harmonic.h +++ b/src/MOLECULE/improper_harmonic.h @@ -20,7 +20,6 @@ ImproperStyle(harmonic,ImproperHarmonic) #ifndef LMP_IMPROPER_HARMONIC_H #define LMP_IMPROPER_HARMONIC_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/MOLECULE/improper_umbrella.h b/src/MOLECULE/improper_umbrella.h index dc2262d01c..da9d6c8f4b 100644 --- a/src/MOLECULE/improper_umbrella.h +++ b/src/MOLECULE/improper_umbrella.h @@ -20,7 +20,6 @@ ImproperStyle(umbrella,ImproperUmbrella) #ifndef LMP_IMPROPER_UMBRELLA_H #define LMP_IMPROPER_UMBRELLA_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/REPLICA/neb.h b/src/REPLICA/neb.h index f585a0c8a7..b53992711c 100644 --- a/src/REPLICA/neb.h +++ b/src/REPLICA/neb.h @@ -20,7 +20,6 @@ CommandStyle(neb,NEB) #ifndef LMP_NEB_H #define LMP_NEB_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h index c128eaffa4..568eca0957 100644 --- a/src/SPIN/neb_spin.h +++ b/src/SPIN/neb_spin.h @@ -20,7 +20,6 @@ CommandStyle(neb/spin,NEBSpin) #ifndef LMP_NEB_SPIN_H #define LMP_NEB_SPIN_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/USER-CGDNA/mf_oxdna.h b/src/USER-CGDNA/mf_oxdna.h index c63a37cde2..e4ed1bbd03 100644 --- a/src/USER-CGDNA/mf_oxdna.h +++ b/src/USER-CGDNA/mf_oxdna.h @@ -14,7 +14,6 @@ #ifndef MF_OXDNA_H #define MF_OXDNA_H -#include #include "math_extra.h" namespace MFOxdna { diff --git a/src/USER-CGSDK/angle_sdk.h b/src/USER-CGSDK/angle_sdk.h index 293004ad4d..2e94b44470 100644 --- a/src/USER-CGSDK/angle_sdk.h +++ b/src/USER-CGSDK/angle_sdk.h @@ -20,7 +20,6 @@ AngleStyle(sdk,AngleSDK) #ifndef LMP_ANGLE_SDK_H #define LMP_ANGLE_SDK_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-DIFFRACTION/fix_saed_vtk.h b/src/USER-DIFFRACTION/fix_saed_vtk.h index 2fc09c781c..94abbf0194 100644 --- a/src/USER-DIFFRACTION/fix_saed_vtk.h +++ b/src/USER-DIFFRACTION/fix_saed_vtk.h @@ -20,7 +20,6 @@ FixStyle(saed/vtk,FixSAEDVTK) #ifndef LMP_FIX_SAED_VTK_H #define LMP_FIX_SAED_VTK_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/USER-INTEL/angle_charmm_intel.h b/src/USER-INTEL/angle_charmm_intel.h index 5d173ee6a9..155ecfaff9 100644 --- a/src/USER-INTEL/angle_charmm_intel.h +++ b/src/USER-INTEL/angle_charmm_intel.h @@ -24,7 +24,6 @@ AngleStyle(charmm/intel,AngleCharmmIntel) #ifndef LMP_ANGLE_CHARMM_INTEL_H #define LMP_ANGLE_CHARMM_INTEL_H -#include #include "angle_charmm.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/angle_harmonic_intel.h b/src/USER-INTEL/angle_harmonic_intel.h index e7768542a1..c00292f7ce 100644 --- a/src/USER-INTEL/angle_harmonic_intel.h +++ b/src/USER-INTEL/angle_harmonic_intel.h @@ -24,7 +24,6 @@ AngleStyle(harmonic/intel,AngleHarmonicIntel) #ifndef LMP_ANGLE_HARMONIC_INTEL_H #define LMP_ANGLE_HARMONIC_INTEL_H -#include #include "angle_harmonic.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/bond_fene_intel.h b/src/USER-INTEL/bond_fene_intel.h index afe3b85470..58fcdb8669 100644 --- a/src/USER-INTEL/bond_fene_intel.h +++ b/src/USER-INTEL/bond_fene_intel.h @@ -24,7 +24,6 @@ BondStyle(fene/intel,BondFENEIntel) #ifndef LMP_BOND_FENE_INTEL_H #define LMP_BOND_FENE_INTEL_H -#include #include "bond_fene.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/bond_harmonic_intel.h b/src/USER-INTEL/bond_harmonic_intel.h index b86a560d6e..3c1d050a3b 100644 --- a/src/USER-INTEL/bond_harmonic_intel.h +++ b/src/USER-INTEL/bond_harmonic_intel.h @@ -24,7 +24,6 @@ BondStyle(harmonic/intel,BondHarmonicIntel) #ifndef LMP_BOND_HARMONIC_INTEL_H #define LMP_BOND_HARMONIC_INTEL_H -#include #include "bond_harmonic.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/improper_cvff_intel.h b/src/USER-INTEL/improper_cvff_intel.h index e815fa75c9..812b49d50c 100644 --- a/src/USER-INTEL/improper_cvff_intel.h +++ b/src/USER-INTEL/improper_cvff_intel.h @@ -24,7 +24,6 @@ ImproperStyle(cvff/intel,ImproperCvffIntel) #ifndef LMP_IMPROPER_CVFF_INTEL_H #define LMP_IMPROPER_CVFF_INTEL_H -#include #include "improper_cvff.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/improper_harmonic_intel.h b/src/USER-INTEL/improper_harmonic_intel.h index ce38e8fc31..6d7c829961 100644 --- a/src/USER-INTEL/improper_harmonic_intel.h +++ b/src/USER-INTEL/improper_harmonic_intel.h @@ -24,7 +24,6 @@ ImproperStyle(harmonic/intel,ImproperHarmonicIntel) #ifndef LMP_IMPROPER_HARMONIC_INTEL_H #define LMP_IMPROPER_HARMONIC_INTEL_H -#include #include "improper_harmonic.h" #include "fix_intel.h" diff --git a/src/USER-INTEL/intel_simd.h b/src/USER-INTEL/intel_simd.h index 75fc9828b9..9022f439c4 100644 --- a/src/USER-INTEL/intel_simd.h +++ b/src/USER-INTEL/intel_simd.h @@ -29,7 +29,6 @@ authors for more details. #ifndef INTEL_SIMD_H #define INTEL_SIMD_H -#include #include "intel_preprocess.h" #include "immintrin.h" diff --git a/src/USER-INTEL/pair_eam_intel.h b/src/USER-INTEL/pair_eam_intel.h index 83b1fbf6a1..a9590f6b3d 100644 --- a/src/USER-INTEL/pair_eam_intel.h +++ b/src/USER-INTEL/pair_eam_intel.h @@ -20,7 +20,6 @@ PairStyle(eam/intel,PairEAMIntel) #ifndef LMP_PAIR_EAM_INTEL_H #define LMP_PAIR_EAM_INTEL_H -#include #include "pair_eam.h" #include "fix_intel.h" diff --git a/src/USER-MANIFOLD/manifold_thylakoid.h b/src/USER-MANIFOLD/manifold_thylakoid.h index 5e5d3b9c41..d8ebe2e94f 100644 --- a/src/USER-MANIFOLD/manifold_thylakoid.h +++ b/src/USER-MANIFOLD/manifold_thylakoid.h @@ -3,7 +3,6 @@ #include "manifold.h" #include -#include #include "manifold_thylakoid_shared.h" diff --git a/src/USER-MGPT/mgpt_readpot.h b/src/USER-MGPT/mgpt_readpot.h index c19ea40774..62f66883b6 100644 --- a/src/USER-MGPT/mgpt_readpot.h +++ b/src/USER-MGPT/mgpt_readpot.h @@ -19,7 +19,6 @@ #ifndef READPOT__ #define READPOT__ -#include #include "mgpt_splinetab.h" diff --git a/src/USER-MGPT/pair_mgpt.h b/src/USER-MGPT/pair_mgpt.h index 94c66fb603..70b36364b1 100644 --- a/src/USER-MGPT/pair_mgpt.h +++ b/src/USER-MGPT/pair_mgpt.h @@ -32,7 +32,6 @@ PairStyle(mgpt,PairMGPT) #include #include -#include #include #include "pair.h" diff --git a/src/USER-MISC/angle_cosine_shift.h b/src/USER-MISC/angle_cosine_shift.h index 030709a0e2..febabcc090 100644 --- a/src/USER-MISC/angle_cosine_shift.h +++ b/src/USER-MISC/angle_cosine_shift.h @@ -20,7 +20,6 @@ AngleStyle(cosine/shift,AngleCosineShift) #ifndef LMP_ANGLE_COSINE_SHIFT_H #define LMP_ANGLE_COSINE_SHIFT_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/angle_cosine_shift_exp.h b/src/USER-MISC/angle_cosine_shift_exp.h index 8b8e389380..9614ddcc19 100644 --- a/src/USER-MISC/angle_cosine_shift_exp.h +++ b/src/USER-MISC/angle_cosine_shift_exp.h @@ -18,7 +18,6 @@ AngleStyle(cosine/shift/exp,AngleCosineShiftExp) #ifndef LMP_ANGLE_COSINE_SHIFT_EXP_H #define LMP_ANGLE_COSINE_SHIFT_EXP_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/angle_dipole.h b/src/USER-MISC/angle_dipole.h index 6c5dccb803..187822d0d4 100644 --- a/src/USER-MISC/angle_dipole.h +++ b/src/USER-MISC/angle_dipole.h @@ -20,7 +20,6 @@ AngleStyle(dipole,AngleDipole) #ifndef LMP_ANGLE_DIPOLE_H #define LMP_ANGLE_DIPOLE_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/angle_fourier.h b/src/USER-MISC/angle_fourier.h index 14b4eedf57..53eeea98da 100644 --- a/src/USER-MISC/angle_fourier.h +++ b/src/USER-MISC/angle_fourier.h @@ -20,7 +20,6 @@ AngleStyle(fourier,AngleFourier) #ifndef ANGLE_FOURIER_H #define ANGLE_FOURIER_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/angle_fourier_simple.h b/src/USER-MISC/angle_fourier_simple.h index 3a7bd37750..df2253317f 100644 --- a/src/USER-MISC/angle_fourier_simple.h +++ b/src/USER-MISC/angle_fourier_simple.h @@ -20,7 +20,6 @@ AngleStyle(fourier/simple,AngleFourierSimple) #ifndef ANGLE_FOURIER_SIMPLE_H #define ANGLE_FOURIER_SIMPLE_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/angle_quartic.h b/src/USER-MISC/angle_quartic.h index 7043cab064..b916a5f89f 100644 --- a/src/USER-MISC/angle_quartic.h +++ b/src/USER-MISC/angle_quartic.h @@ -20,7 +20,6 @@ AngleStyle(quartic,AngleQuartic) #ifndef LMP_ANGLE_QUARTIC_H #define LMP_ANGLE_QUARTIC_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/bond_harmonic_shift.h b/src/USER-MISC/bond_harmonic_shift.h index ff0d358243..b77cefb4af 100644 --- a/src/USER-MISC/bond_harmonic_shift.h +++ b/src/USER-MISC/bond_harmonic_shift.h @@ -20,7 +20,6 @@ BondStyle(harmonic/shift,BondHarmonicShift) #ifndef LMP_BOND_HARMONIC_SHIFT_H #define LMP_BOND_HARMONIC_SHIFT_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/bond_harmonic_shift_cut.h b/src/USER-MISC/bond_harmonic_shift_cut.h index 5db76d51aa..ad2bcd61ad 100644 --- a/src/USER-MISC/bond_harmonic_shift_cut.h +++ b/src/USER-MISC/bond_harmonic_shift_cut.h @@ -20,7 +20,6 @@ BondStyle(harmonic/shift/cut,BondHarmonicShiftCut) #ifndef LMP_BOND_HARMONIC_SHIFT_CUT_H #define LMP_BOND_HARMONIC_SHIFT_CUT_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/dihedral_cosine_shift_exp.h b/src/USER-MISC/dihedral_cosine_shift_exp.h index fc4be5049b..4d180f42de 100644 --- a/src/USER-MISC/dihedral_cosine_shift_exp.h +++ b/src/USER-MISC/dihedral_cosine_shift_exp.h @@ -20,7 +20,6 @@ DihedralStyle(cosine/shift/exp,DihedralCosineShiftExp) #ifndef LMP_DIHEDRAL_COSINE_SHIFT_EXP_H #define LMP_DIHEDRAL_COSINE_SHIFT_EXP_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/dihedral_fourier.h b/src/USER-MISC/dihedral_fourier.h index c1ed843c34..8b6291fc4c 100644 --- a/src/USER-MISC/dihedral_fourier.h +++ b/src/USER-MISC/dihedral_fourier.h @@ -20,7 +20,6 @@ DihedralStyle(fourier,DihedralFourier) #ifndef LMP_DIHEDRAL_FOURIER_H #define LMP_DIHEDRAL_FOURIER_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/dihedral_nharmonic.h b/src/USER-MISC/dihedral_nharmonic.h index 7c6a35b200..6fd1da3b8b 100644 --- a/src/USER-MISC/dihedral_nharmonic.h +++ b/src/USER-MISC/dihedral_nharmonic.h @@ -20,7 +20,6 @@ DihedralStyle(nharmonic,DihedralNHarmonic) #ifndef DIHEDRAL_NHARMONIC_H #define DIHEDRAL_NHARMONIC_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/dihedral_quadratic.h b/src/USER-MISC/dihedral_quadratic.h index edc29c3cf8..0b99cbc4f7 100644 --- a/src/USER-MISC/dihedral_quadratic.h +++ b/src/USER-MISC/dihedral_quadratic.h @@ -20,7 +20,6 @@ DihedralStyle(quadratic,DihedralQuadratic) #ifndef LMP_DIHEDRAL_QUADRATIC_H #define LMP_DIHEDRAL_QUADRATIC_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/dihedral_spherical.h b/src/USER-MISC/dihedral_spherical.h index ae0ece189a..472db36f33 100644 --- a/src/USER-MISC/dihedral_spherical.h +++ b/src/USER-MISC/dihedral_spherical.h @@ -20,7 +20,6 @@ DihedralStyle(spherical,DihedralSpherical) #ifndef LMP_DIHEDRAL_SPHERICAL_H #define LMP_DIHEDRAL_SPHERICAL_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/fix_ave_correlate_long.h b/src/USER-MISC/fix_ave_correlate_long.h index 548a0e7183..a0c5863e99 100644 --- a/src/USER-MISC/fix_ave_correlate_long.h +++ b/src/USER-MISC/fix_ave_correlate_long.h @@ -20,7 +20,6 @@ FixStyle(ave/correlate/long,FixAveCorrelateLong) #ifndef LMP_FIX_AVE_CORRELATE_LONG_H #define LMP_FIX_AVE_CORRELATE_LONG_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/fix_srp.h b/src/USER-MISC/fix_srp.h index 7dbf044bda..f8343df8a6 100644 --- a/src/USER-MISC/fix_srp.h +++ b/src/USER-MISC/fix_srp.h @@ -20,7 +20,6 @@ FixStyle(SRP,FixSRP) #ifndef LMP_FIX_SRP_H #define LMP_FIX_SRP_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/improper_cossq.h b/src/USER-MISC/improper_cossq.h index ea880adfaf..9e430bfa1a 100644 --- a/src/USER-MISC/improper_cossq.h +++ b/src/USER-MISC/improper_cossq.h @@ -20,7 +20,6 @@ ImproperStyle(cossq,ImproperCossq) #ifndef LMP_IMPROPER_COSSQ_H #define LMP_IMPROPER_COSSQ_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/improper_distance.h b/src/USER-MISC/improper_distance.h index 57e4d671e9..d7575c3585 100644 --- a/src/USER-MISC/improper_distance.h +++ b/src/USER-MISC/improper_distance.h @@ -20,7 +20,6 @@ ImproperStyle(distance,ImproperDistance) #ifndef LMP_IMPROPER_DISTANCE_H #define LMP_IMPROPER_DISTANCE_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/improper_fourier.h b/src/USER-MISC/improper_fourier.h index 0525c45494..91dfacfd8e 100644 --- a/src/USER-MISC/improper_fourier.h +++ b/src/USER-MISC/improper_fourier.h @@ -20,7 +20,6 @@ ImproperStyle(fourier,ImproperFourier) #ifndef LMP_IMPROPER_FOURIER_H #define LMP_IMPROPER_FOURIER_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/USER-MISC/improper_ring.h b/src/USER-MISC/improper_ring.h index c31329816f..7c53c6f59f 100644 --- a/src/USER-MISC/improper_ring.h +++ b/src/USER-MISC/improper_ring.h @@ -20,7 +20,6 @@ ImproperStyle(ring,ImproperRing) #ifndef LMP_IMPROPER_RING_H #define LMP_IMPROPER_RING_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/USER-MOFFF/angle_class2_p6.h b/src/USER-MOFFF/angle_class2_p6.h index b583a45b19..f2f324c0c6 100644 --- a/src/USER-MOFFF/angle_class2_p6.h +++ b/src/USER-MOFFF/angle_class2_p6.h @@ -20,7 +20,6 @@ AngleStyle(class2/p6,AngleClass2P6) #ifndef LMP_ANGLE_CLASS2_P6_H #define LMP_ANGLE_CLASS2_P6_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MOFFF/angle_cosine_buck6d.h b/src/USER-MOFFF/angle_cosine_buck6d.h index 689b1634e0..1d0df10228 100644 --- a/src/USER-MOFFF/angle_cosine_buck6d.h +++ b/src/USER-MOFFF/angle_cosine_buck6d.h @@ -20,7 +20,6 @@ AngleStyle(cosine/buck6d, AngleCosineBuck6d) #ifndef LMP_ANGLE_COSINE_BUCK6D_H #define LMP_ANGLE_COSINE_BUCK6D_H -#include #include "angle.h" namespace LAMMPS_NS { diff --git a/src/USER-MOFFF/improper_inversion_harmonic.h b/src/USER-MOFFF/improper_inversion_harmonic.h index 201c9e358d..206b40aebf 100644 --- a/src/USER-MOFFF/improper_inversion_harmonic.h +++ b/src/USER-MOFFF/improper_inversion_harmonic.h @@ -20,7 +20,6 @@ ImproperStyle(inversion/harmonic,ImproperInversionHarmonic) #ifndef LMP_IMPROPER_INVERSION_HARMONIC_H #define LMP_IMPROPER_INVERSION_HARMONIC_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/USER-REAXC/fix_reaxc_bonds.h b/src/USER-REAXC/fix_reaxc_bonds.h index d72f5446b5..60f41beb02 100644 --- a/src/USER-REAXC/fix_reaxc_bonds.h +++ b/src/USER-REAXC/fix_reaxc_bonds.h @@ -20,7 +20,6 @@ FixStyle(reax/c/bonds,FixReaxCBonds) #ifndef LMP_FIX_REAXC_BONDS_H #define LMP_FIX_REAXC_BONDS_H -#include #include "fix.h" #include "pointers.h" diff --git a/src/bond_hybrid.h b/src/bond_hybrid.h index e51d467ac1..19e4debfed 100644 --- a/src/bond_hybrid.h +++ b/src/bond_hybrid.h @@ -20,7 +20,6 @@ BondStyle(hybrid,BondHybrid) #ifndef LMP_BOND_HYBRID_H #define LMP_BOND_HYBRID_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/bond_zero.h b/src/bond_zero.h index 9443ff0784..7cbd2b9a96 100644 --- a/src/bond_zero.h +++ b/src/bond_zero.h @@ -20,7 +20,6 @@ BondStyle(zero,BondZero) #ifndef LMP_BOND_ZERO_H #define LMP_BOND_ZERO_H -#include #include "bond.h" namespace LAMMPS_NS { diff --git a/src/citeme.cpp b/src/citeme.cpp index 24896b448c..c8745891cf 100644 --- a/src/citeme.cpp +++ b/src/citeme.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include "citeme.h" #include "universe.h" diff --git a/src/comm_brick.cpp b/src/comm_brick.cpp index 47f60a3da6..dcf30807f5 100644 --- a/src/comm_brick.cpp +++ b/src/comm_brick.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include "comm_brick.h" #include "atom.h" #include "atom_vec.h" diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index d1d625445a..a85520ed45 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -11,19 +11,16 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "comm_tiled.h" -#include "comm_brick.h" #include "atom.h" #include "atom_vec.h" #include "domain.h" -#include "force.h" #include "pair.h" #include "neighbor.h" -#include "modify.h" #include "fix.h" #include "compute.h" -#include "output.h" #include "dump.h" #include "memory.h" #include "error.h" diff --git a/src/comm_tiled.h b/src/comm_tiled.h index 13ecbc4b01..5a9beb28f7 100644 --- a/src/comm_tiled.h +++ b/src/comm_tiled.h @@ -14,6 +14,7 @@ #ifndef LMP_COMM_TILED_H #define LMP_COMM_TILED_H +#include #include "comm.h" namespace LAMMPS_NS { diff --git a/src/compute.cpp b/src/compute.cpp index 207f825ec8..8ff8487104 100644 --- a/src/compute.cpp +++ b/src/compute.cpp @@ -11,15 +11,11 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include #include #include #include "compute.h" -#include "atom.h" #include "domain.h" #include "force.h" -#include "comm.h" #include "group.h" #include "modify.h" #include "fix.h" diff --git a/src/compute_adf.h b/src/compute_adf.h index a7983b7173..f768013207 100644 --- a/src/compute_adf.h +++ b/src/compute_adf.h @@ -20,7 +20,6 @@ ComputeStyle(adf,ComputeADF) #ifndef LMP_COMPUTE_ADF_H #define LMP_COMPUTE_ADF_H -#include #include "compute.h" namespace LAMMPS_NS { diff --git a/src/compute_rdf.h b/src/compute_rdf.h index 52a93a38dd..85f6ce6ad2 100644 --- a/src/compute_rdf.h +++ b/src/compute_rdf.h @@ -20,7 +20,6 @@ ComputeStyle(rdf,ComputeRDF) #ifndef LMP_COMPUTE_RDF_H #define LMP_COMPUTE_RDF_H -#include #include "compute.h" namespace LAMMPS_NS { diff --git a/src/dihedral_hybrid.h b/src/dihedral_hybrid.h index 0839fdfc61..2804060af4 100644 --- a/src/dihedral_hybrid.h +++ b/src/dihedral_hybrid.h @@ -20,7 +20,6 @@ DihedralStyle(hybrid,DihedralHybrid) #ifndef LMP_DIHEDRAL_HYBRID_H #define LMP_DIHEDRAL_HYBRID_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/dihedral_zero.h b/src/dihedral_zero.h index e7dbb0d3a5..e97f8f6641 100644 --- a/src/dihedral_zero.h +++ b/src/dihedral_zero.h @@ -24,7 +24,6 @@ DihedralStyle(zero,DihedralZero) #ifndef LMP_DIHEDRAL_ZERO_H #define LMP_DIHEDRAL_ZERO_H -#include #include "dihedral.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_atom.h b/src/fix_ave_atom.h index e4baf6bda1..42aa282d53 100644 --- a/src/fix_ave_atom.h +++ b/src/fix_ave_atom.h @@ -20,7 +20,6 @@ FixStyle(ave/atom,FixAveAtom) #ifndef LMP_FIX_AVE_ATOM_H #define LMP_FIX_AVE_ATOM_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_chunk.h b/src/fix_ave_chunk.h index 4dc1c1c246..dac5761ae8 100644 --- a/src/fix_ave_chunk.h +++ b/src/fix_ave_chunk.h @@ -20,7 +20,6 @@ FixStyle(ave/chunk,FixAveChunk) #ifndef LMP_FIX_AVE_CHUNK_H #define LMP_FIX_AVE_CHUNK_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_correlate.h b/src/fix_ave_correlate.h index ff20e8ba94..05fd6b6576 100644 --- a/src/fix_ave_correlate.h +++ b/src/fix_ave_correlate.h @@ -20,7 +20,6 @@ FixStyle(ave/correlate,FixAveCorrelate) #ifndef LMP_FIX_AVE_CORRELATE_H #define LMP_FIX_AVE_CORRELATE_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_histo.h b/src/fix_ave_histo.h index 3616959c61..35bdfcfa7f 100644 --- a/src/fix_ave_histo.h +++ b/src/fix_ave_histo.h @@ -20,7 +20,6 @@ FixStyle(ave/histo,FixAveHisto) #ifndef LMP_FIX_AVE_HISTO_H #define LMP_FIX_AVE_HISTO_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_histo_weight.h b/src/fix_ave_histo_weight.h index e5638e1215..6ec3ba5721 100644 --- a/src/fix_ave_histo_weight.h +++ b/src/fix_ave_histo_weight.h @@ -20,7 +20,6 @@ FixStyle(ave/histo/weight,FixAveHistoWeight) #ifndef LMP_FIX_AVE_HISTO_WEIGHT_H #define LMP_FIX_AVE_HISTO_WEIGHT_H -#include #include "fix_ave_histo.h" namespace LAMMPS_NS { diff --git a/src/fix_ave_time.h b/src/fix_ave_time.h index 62dfbad296..01228f9e55 100644 --- a/src/fix_ave_time.h +++ b/src/fix_ave_time.h @@ -20,7 +20,6 @@ FixStyle(ave/time,FixAveTime) #ifndef LMP_FIX_AVE_TIME_H #define LMP_FIX_AVE_TIME_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_balance.h b/src/fix_balance.h index 64383b5950..76cbea258a 100644 --- a/src/fix_balance.h +++ b/src/fix_balance.h @@ -20,7 +20,6 @@ FixStyle(balance,FixBalance) #ifndef LMP_FIX_BALANCE_H #define LMP_FIX_BALANCE_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_halt.h b/src/fix_halt.h index 372c915a7f..93c5e95078 100644 --- a/src/fix_halt.h +++ b/src/fix_halt.h @@ -20,7 +20,6 @@ FixStyle(halt,FixHalt) #ifndef LMP_FIX_HALT_H #define LMP_FIX_HALT_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_move.h b/src/fix_move.h index 5993d7d6e8..740b051be0 100644 --- a/src/fix_move.h +++ b/src/fix_move.h @@ -20,7 +20,6 @@ FixStyle(move,FixMove) #ifndef LMP_FIX_MOVE_H #define LMP_FIX_MOVE_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_print.h b/src/fix_print.h index 37b6680aee..5644160220 100644 --- a/src/fix_print.h +++ b/src/fix_print.h @@ -20,7 +20,6 @@ FixStyle(print,FixPrint) #ifndef LMP_FIX_PRINT_H #define LMP_FIX_PRINT_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_store.h b/src/fix_store.h index 5524770a97..437c14f0f7 100644 --- a/src/fix_store.h +++ b/src/fix_store.h @@ -20,7 +20,6 @@ FixStyle(STORE,FixStore) #ifndef LMP_FIX_STORE_H #define LMP_FIX_STORE_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/fix_tmd.h b/src/fix_tmd.h index b6db41dd5a..f23a64a027 100644 --- a/src/fix_tmd.h +++ b/src/fix_tmd.h @@ -20,7 +20,6 @@ FixStyle(tmd,FixTMD) #ifndef LMP_FIX_TMD_H #define LMP_FIX_TMD_H -#include #include "fix.h" namespace LAMMPS_NS { diff --git a/src/force.h b/src/force.h index 227b9427c0..26a3ecdfb8 100644 --- a/src/force.h +++ b/src/force.h @@ -15,7 +15,6 @@ #define LMP_FORCE_H #include "pointers.h" -#include #include #include diff --git a/src/group.h b/src/group.h index 962d37b32a..ec913f98bc 100644 --- a/src/group.h +++ b/src/group.h @@ -14,7 +14,6 @@ #ifndef LMP_GROUP_H #define LMP_GROUP_H -#include #include "pointers.h" #include diff --git a/src/image.h b/src/image.h index 5672bf85c5..7df81425d9 100644 --- a/src/image.h +++ b/src/image.h @@ -15,7 +15,6 @@ #define LMP_IMAGE_H #include -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/imbalance.h b/src/imbalance.h index d3c3b9a642..5f43c2e51d 100644 --- a/src/imbalance.h +++ b/src/imbalance.h @@ -14,7 +14,6 @@ #ifndef LMP_IMBALANCE_H #define LMP_IMBALANCE_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/improper_hybrid.h b/src/improper_hybrid.h index 89595ccfc4..3e5423b173 100644 --- a/src/improper_hybrid.h +++ b/src/improper_hybrid.h @@ -20,7 +20,6 @@ ImproperStyle(hybrid,ImproperHybrid) #ifndef LMP_IMPROPER_HYBRID_H #define LMP_IMPROPER_HYBRID_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/improper_zero.h b/src/improper_zero.h index 0a2290b6f7..1a70059070 100644 --- a/src/improper_zero.h +++ b/src/improper_zero.h @@ -20,7 +20,6 @@ ImproperStyle(zero,ImproperZero) #ifndef LMP_IMPROPER_ZERO_H #define LMP_IMPROPER_ZERO_H -#include #include "improper.h" namespace LAMMPS_NS { diff --git a/src/input.h b/src/input.h index 33e83bfb06..9573b569bc 100644 --- a/src/input.h +++ b/src/input.h @@ -14,7 +14,6 @@ #ifndef LMP_INPUT_H #define LMP_INPUT_H -#include #include "pointers.h" #include #include diff --git a/src/lammps.h b/src/lammps.h index e02d0c764a..5820f25591 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -14,7 +14,6 @@ #ifndef LMP_LAMMPS_H #define LMP_LAMMPS_H -#include namespace LAMMPS_NS { diff --git a/src/modify.h b/src/modify.h index 5ff81855fe..b736485196 100644 --- a/src/modify.h +++ b/src/modify.h @@ -14,7 +14,6 @@ #ifndef LMP_MODIFY_H #define LMP_MODIFY_H -#include #include "pointers.h" #include #include diff --git a/src/pair_hybrid.h b/src/pair_hybrid.h index e313e16f18..074517a859 100644 --- a/src/pair_hybrid.h +++ b/src/pair_hybrid.h @@ -20,7 +20,6 @@ PairStyle(hybrid,PairHybrid) #ifndef LMP_PAIR_HYBRID_H #define LMP_PAIR_HYBRID_H -#include #include "pair.h" namespace LAMMPS_NS { diff --git a/src/read_data.h b/src/read_data.h index 26ab6ff381..98de607f6b 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -20,7 +20,6 @@ CommandStyle(read_data,ReadData) #ifndef LMP_READ_DATA_H #define LMP_READ_DATA_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/read_dump.h b/src/read_dump.h index 3ee13f779c..6fb4f11ed1 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -23,7 +23,6 @@ CommandStyle(read_dump,ReadDump) #define LMP_READ_DUMP_H #include -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/read_restart.h b/src/read_restart.h index 23d6ec3fba..63adf37b22 100644 --- a/src/read_restart.h +++ b/src/read_restart.h @@ -20,7 +20,6 @@ CommandStyle(read_restart,ReadRestart) #ifndef LMP_READ_RESTART_H #define LMP_READ_RESTART_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/universe.h b/src/universe.h index 3073409b86..fd6655c749 100644 --- a/src/universe.h +++ b/src/universe.h @@ -14,7 +14,6 @@ #ifndef LMP_UNIVERSE_H #define LMP_UNIVERSE_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/variable.h b/src/variable.h index c5f501f266..a504da14ec 100644 --- a/src/variable.h +++ b/src/variable.h @@ -14,7 +14,6 @@ #ifndef LMP_VARIABLE_H #define LMP_VARIABLE_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/write_coeff.h b/src/write_coeff.h index 569a615e6e..b995e60d63 100644 --- a/src/write_coeff.h +++ b/src/write_coeff.h @@ -20,7 +20,6 @@ CommandStyle(write_coeff,WriteCoeff) #ifndef LMP_WRITE_COEFF_H #define LMP_WRITE_COEFF_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/write_data.h b/src/write_data.h index 6f1bb2ec47..1c0f6b2a7c 100644 --- a/src/write_data.h +++ b/src/write_data.h @@ -20,7 +20,6 @@ CommandStyle(write_data,WriteData) #ifndef LMP_WRITE_DATA_H #define LMP_WRITE_DATA_H -#include #include "pointers.h" namespace LAMMPS_NS { diff --git a/src/write_restart.h b/src/write_restart.h index c6202acbfd..e7cdc6a501 100644 --- a/src/write_restart.h +++ b/src/write_restart.h @@ -20,7 +20,6 @@ CommandStyle(write_restart,WriteRestart) #ifndef LMP_WRITE_RESTART_H #define LMP_WRITE_RESTART_H -#include #include "pointers.h" namespace LAMMPS_NS { From 123bd57376066ade0dc92c891bd97de152afd2ad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 21:59:05 -0400 Subject: [PATCH 354/760] try to make KOKKOS compile again --- src/KOKKOS/kokkos_type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index 942c2af241..e900bbd6d1 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -14,7 +14,7 @@ #ifndef LMP_LMPTYPE_KOKKOS_H #define LMP_LMPTYPE_KOKKOS_H -#include "lmptype.h" +#include "pointers.h" #include #include From 2c119551f7af4eb6dfe1d0424debdec0d6089f80 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 22:13:42 -0400 Subject: [PATCH 355/760] add statement about order of include files --- doc/include-file-conventions.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/include-file-conventions.md b/doc/include-file-conventions.md index 5152051ba5..8d70d6cdec 100644 --- a/doc/include-file-conventions.md +++ b/doc/include-file-conventions.md @@ -94,6 +94,14 @@ In the implementation files (typically, those would have the same base name as the corresponding header with a .cpp extension instead of .h) include statments should follow the "include what you use" principle. +### Order of Include Statements + +Include files should be included in this order: +* lmptype.h (should only be included if `MPI_LMP_XXX` data types are used) +* mpi.h +* system and library headers (anything that is using angular brackets; C-library headers first, then C++) +* LAMMPS local headers (first the header matching the implementation file, the rest in mostly alphabetical order) + ### Special Cases and Exceptions #### pointers.h From a5cb6ddd4a798e4618e2e506ad9d14021f0c4670 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 27 Jun 2019 22:14:06 -0400 Subject: [PATCH 356/760] lammps.h must include cstdio and mpi.h --- src/lammps.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lammps.h b/src/lammps.h index 5820f25591..dc2916f214 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -14,6 +14,8 @@ #ifndef LMP_LAMMPS_H #define LMP_LAMMPS_H +#include +#include namespace LAMMPS_NS { From 378474c4e642f34614d471953bb3758c04c8754a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 28 Jun 2019 02:01:08 -0400 Subject: [PATCH 357/760] more include file cleanup suggested by IWYU --- src/atom_map.cpp | 1 - src/atom_vec_body.cpp | 1 + src/bond_hybrid.cpp | 1 - src/bond_zero.cpp | 1 - src/comm.h | 2 +- src/comm_tiled.cpp | 1 + src/compute_adf.cpp | 3 --- src/compute_aggregate_atom.cpp | 1 + src/compute_angle.cpp | 2 +- src/compute_angmom_chunk.cpp | 1 + src/compute_bond.cpp | 2 +- src/compute_centro_atom.cpp | 1 - src/compute_chunk_atom.cpp | 6 ++++-- src/compute_cluster_atom.cpp | 2 +- src/compute_cna_atom.cpp | 2 +- src/compute_com_chunk.cpp | 1 + src/compute_contact_atom.cpp | 3 --- src/compute_coord_atom.cpp | 1 - src/compute_dihedral.cpp | 2 +- src/compute_dihedral_local.cpp | 2 -- src/compute_dipole_chunk.cpp | 2 ++ src/compute_displace_atom.cpp | 1 - src/compute_erotate_sphere.cpp | 3 --- src/compute_fragment_atom.cpp | 1 + src/compute_global_atom.cpp | 4 ---- src/compute_group_group.cpp | 1 - src/compute_gyration.cpp | 2 +- src/compute_gyration_chunk.cpp | 1 + src/compute_heat_flux.cpp | 3 +-- src/compute_hexorder_atom.cpp | 4 ++-- src/compute_improper.cpp | 2 +- src/compute_improper_local.cpp | 1 - src/compute_inertia_chunk.cpp | 1 + src/compute_ke.cpp | 2 -- src/compute_msd.cpp | 1 + src/compute_msd_chunk.cpp | 1 + src/compute_omega_chunk.cpp | 1 + src/compute_pair_local.cpp | 1 - src/compute_pe_atom.cpp | 1 - src/compute_pressure.cpp | 1 - src/compute_property_chunk.cpp | 1 + src/compute_rdf.cpp | 1 - src/compute_reduce.cpp | 2 -- src/compute_reduce_region.cpp | 3 +-- 44 files changed, 30 insertions(+), 47 deletions(-) diff --git a/src/atom_map.cpp b/src/atom_map.cpp index b14ebdba68..6af3b9c288 100644 --- a/src/atom_map.cpp +++ b/src/atom_map.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "pointers.h" #include #include #include "atom.h" diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 3e9528d6b9..fad5b3eae0 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "atom_vec_body.h" #include "my_pool_chunk.h" #include "style_body.h" diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 0fb23a3214..9028886758 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -12,7 +12,6 @@ ------------------------------------------------------------------------- */ #include -#include #include #include #include "bond_hybrid.h" diff --git a/src/bond_zero.cpp b/src/bond_zero.cpp index 3932846cb4..c473abbe4b 100644 --- a/src/bond_zero.cpp +++ b/src/bond_zero.cpp @@ -16,7 +16,6 @@ ------------------------------------------------------------------------- */ #include -#include #include #include "bond_zero.h" #include "atom.h" diff --git a/src/comm.h b/src/comm.h index 30360b1059..6d5592585f 100644 --- a/src/comm.h +++ b/src/comm.h @@ -14,7 +14,7 @@ #ifndef LMP_COMM_H #define LMP_COMM_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index a85520ed45..385b7fdf22 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include #include "comm_tiled.h" diff --git a/src/compute_adf.cpp b/src/compute_adf.cpp index e9f9ba2b6f..a17561ff54 100644 --- a/src/compute_adf.cpp +++ b/src/compute_adf.cpp @@ -17,18 +17,15 @@ #include #include -#include #include #include "compute_adf.h" #include "atom.h" #include "update.h" #include "force.h" #include "pair.h" -#include "domain.h" #include "neighbor.h" #include "neigh_request.h" #include "neigh_list.h" -#include "group.h" #include "math_const.h" #include "memory.h" #include "error.h" diff --git a/src/compute_aggregate_atom.cpp b/src/compute_aggregate_atom.cpp index 6c8c8e5d9a..9a797124bd 100644 --- a/src/compute_aggregate_atom.cpp +++ b/src/compute_aggregate_atom.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include #include #include #include "compute_aggregate_atom.h" diff --git a/src/compute_angle.cpp b/src/compute_angle.cpp index 59945f5832..c1c02a1cc4 100644 --- a/src/compute_angle.cpp +++ b/src/compute_angle.cpp @@ -12,8 +12,8 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_angle.h" +#include "angle.h" #include "update.h" #include "force.h" #include "angle_hybrid.h" diff --git a/src/compute_angmom_chunk.cpp b/src/compute_angmom_chunk.cpp index a70eaaf49f..ec42015527 100644 --- a/src/compute_angmom_chunk.cpp +++ b/src/compute_angmom_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_angmom_chunk.h" #include "atom.h" diff --git a/src/compute_bond.cpp b/src/compute_bond.cpp index 896aaec9bd..4fd3bbef30 100644 --- a/src/compute_bond.cpp +++ b/src/compute_bond.cpp @@ -12,8 +12,8 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_bond.h" +#include "bond.h" #include "update.h" #include "force.h" #include "bond_hybrid.h" diff --git a/src/compute_centro_atom.cpp b/src/compute_centro_atom.cpp index 5096879b32..7df94271fc 100644 --- a/src/compute_centro_atom.cpp +++ b/src/compute_centro_atom.cpp @@ -16,7 +16,6 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_centro_atom.h" #include "atom.h" #include "update.h" diff --git a/src/compute_chunk_atom.cpp b/src/compute_chunk_atom.cpp index 61b653b375..fd9204f1cb 100644 --- a/src/compute_chunk_atom.cpp +++ b/src/compute_chunk_atom.cpp @@ -14,8 +14,11 @@ // NOTE: allow for bin center to be variables for sphere/cylinder #include +#include #include #include +#include +#include #include "compute_chunk_atom.h" #include "atom.h" #include "update.h" @@ -24,6 +27,7 @@ #include "region.h" #include "lattice.h" #include "modify.h" +#include "fix.h" #include "fix_store.h" #include "comm.h" #include "group.h" @@ -33,8 +37,6 @@ #include "memory.h" #include "error.h" -#include - using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index 0c34b42671..febe0658a0 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -11,9 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include -#include #include "compute_cluster_atom.h" #include "atom.h" #include "update.h" diff --git a/src/compute_cna_atom.cpp b/src/compute_cna_atom.cpp index b8ad3f0f64..d764e739b3 100644 --- a/src/compute_cna_atom.cpp +++ b/src/compute_cna_atom.cpp @@ -15,8 +15,8 @@ Contributing author: Wan Liang (Chinese Academy of Sciences) ------------------------------------------------------------------------- */ +#include #include -#include #include #include "compute_cna_atom.h" #include "atom.h" diff --git a/src/compute_com_chunk.cpp b/src/compute_com_chunk.cpp index ec66767245..7b4c960cf4 100644 --- a/src/compute_com_chunk.cpp +++ b/src/compute_com_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_com_chunk.h" #include "atom.h" diff --git a/src/compute_contact_atom.cpp b/src/compute_contact_atom.cpp index e60a51832a..e4afc1d761 100644 --- a/src/compute_contact_atom.cpp +++ b/src/compute_contact_atom.cpp @@ -11,9 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include -#include #include "compute_contact_atom.h" #include "atom.h" #include "update.h" @@ -22,7 +20,6 @@ #include "neigh_list.h" #include "neigh_request.h" #include "force.h" -#include "pair.h" #include "comm.h" #include "memory.h" #include "error.h" diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index 54f4c70c71..8cedcbc027 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -13,7 +13,6 @@ #include #include -#include #include "compute_coord_atom.h" #include "compute_orientorder_atom.h" #include "atom.h" diff --git a/src/compute_dihedral.cpp b/src/compute_dihedral.cpp index 3595b2eda3..16823050da 100644 --- a/src/compute_dihedral.cpp +++ b/src/compute_dihedral.cpp @@ -12,10 +12,10 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_dihedral.h" #include "update.h" #include "force.h" +#include "dihedral.h" #include "dihedral_hybrid.h" #include "error.h" diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp index 9efdd61cb8..784ae9c607 100644 --- a/src/compute_dihedral_local.cpp +++ b/src/compute_dihedral_local.cpp @@ -20,10 +20,8 @@ #include "update.h" #include "domain.h" #include "force.h" -#include "dihedral.h" #include "input.h" #include "variable.h" - #include "math_const.h" #include "memory.h" #include "error.h" diff --git a/src/compute_dipole_chunk.cpp b/src/compute_dipole_chunk.cpp index b0474b6359..090bc5df94 100644 --- a/src/compute_dipole_chunk.cpp +++ b/src/compute_dipole_chunk.cpp @@ -11,6 +11,8 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include +#include #include #include "compute_dipole_chunk.h" #include "atom.h" diff --git a/src/compute_displace_atom.cpp b/src/compute_displace_atom.cpp index d8f279058e..3773159143 100644 --- a/src/compute_displace_atom.cpp +++ b/src/compute_displace_atom.cpp @@ -19,7 +19,6 @@ #include "group.h" #include "domain.h" #include "modify.h" -#include "fix.h" #include "fix_store.h" #include "input.h" #include "variable.h" diff --git a/src/compute_erotate_sphere.cpp b/src/compute_erotate_sphere.cpp index 31ed0aaba5..65bb8a9770 100644 --- a/src/compute_erotate_sphere.cpp +++ b/src/compute_erotate_sphere.cpp @@ -14,11 +14,8 @@ #include #include "compute_erotate_sphere.h" #include "atom.h" -#include "atom_vec.h" #include "update.h" #include "force.h" -#include "domain.h" -#include "group.h" #include "error.h" using namespace LAMMPS_NS; diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index bb273f3bdb..d59b519d09 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include #include #include "compute_fragment_atom.h" #include "atom.h" diff --git a/src/compute_global_atom.cpp b/src/compute_global_atom.cpp index dc9ab52f49..6685f746a1 100644 --- a/src/compute_global_atom.cpp +++ b/src/compute_global_atom.cpp @@ -16,12 +16,8 @@ #include "compute_global_atom.h" #include "atom.h" #include "update.h" -#include "domain.h" #include "modify.h" #include "fix.h" -#include "force.h" -#include "comm.h" -#include "group.h" #include "input.h" #include "variable.h" #include "memory.h" diff --git a/src/compute_group_group.cpp b/src/compute_group_group.cpp index e55f679b2e..11e1aac720 100644 --- a/src/compute_group_group.cpp +++ b/src/compute_group_group.cpp @@ -33,7 +33,6 @@ #include "comm.h" #include "domain.h" #include "math_const.h" -#include "utils.h" using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/compute_gyration.cpp b/src/compute_gyration.cpp index f8d19853e0..3c5656a5af 100644 --- a/src/compute_gyration.cpp +++ b/src/compute_gyration.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include "compute_gyration.h" #include "update.h" #include "atom.h" diff --git a/src/compute_gyration_chunk.cpp b/src/compute_gyration_chunk.cpp index 6a23398aca..f3db37d62f 100644 --- a/src/compute_gyration_chunk.cpp +++ b/src/compute_gyration_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include #include "compute_gyration_chunk.h" diff --git a/src/compute_heat_flux.cpp b/src/compute_heat_flux.cpp index e402da7842..9bd827c713 100644 --- a/src/compute_heat_flux.cpp +++ b/src/compute_heat_flux.cpp @@ -16,14 +16,13 @@ Mario Pinto (Computational Research Lab, Pune, India) ------------------------------------------------------------------------- */ -#include +#include #include #include "compute_heat_flux.h" #include "atom.h" #include "update.h" #include "modify.h" #include "force.h" -#include "group.h" #include "error.h" using namespace LAMMPS_NS; diff --git a/src/compute_hexorder_atom.cpp b/src/compute_hexorder_atom.cpp index 6d17ae15bd..c54f4b1aae 100644 --- a/src/compute_hexorder_atom.cpp +++ b/src/compute_hexorder_atom.cpp @@ -15,9 +15,9 @@ Contributing author: Aidan Thompson (SNL) ------------------------------------------------------------------------- */ -#include +#include #include -#include +#include #include "compute_hexorder_atom.h" #include "atom.h" #include "update.h" diff --git a/src/compute_improper.cpp b/src/compute_improper.cpp index ac2a23e727..2f068dfb74 100644 --- a/src/compute_improper.cpp +++ b/src/compute_improper.cpp @@ -12,10 +12,10 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_improper.h" #include "update.h" #include "force.h" +#include "improper.h" #include "improper_hybrid.h" #include "error.h" diff --git a/src/compute_improper_local.cpp b/src/compute_improper_local.cpp index 2861850c79..ec1734cd96 100644 --- a/src/compute_improper_local.cpp +++ b/src/compute_improper_local.cpp @@ -20,7 +20,6 @@ #include "update.h" #include "domain.h" #include "force.h" -#include "improper.h" #include "math_const.h" #include "memory.h" #include "error.h" diff --git a/src/compute_inertia_chunk.cpp b/src/compute_inertia_chunk.cpp index a33073c35a..d1a7cb9fc1 100644 --- a/src/compute_inertia_chunk.cpp +++ b/src/compute_inertia_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_inertia_chunk.h" #include "atom.h" diff --git a/src/compute_ke.cpp b/src/compute_ke.cpp index fb3c5a9695..3418cc678f 100644 --- a/src/compute_ke.cpp +++ b/src/compute_ke.cpp @@ -16,8 +16,6 @@ #include "atom.h" #include "update.h" #include "force.h" -#include "domain.h" -#include "group.h" #include "error.h" using namespace LAMMPS_NS; diff --git a/src/compute_msd.cpp b/src/compute_msd.cpp index fc47b2609a..d2e17eff9e 100644 --- a/src/compute_msd.cpp +++ b/src/compute_msd.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_msd.h" #include "atom.h" diff --git a/src/compute_msd_chunk.cpp b/src/compute_msd_chunk.cpp index 1f974cc06c..8520b36993 100644 --- a/src/compute_msd_chunk.cpp +++ b/src/compute_msd_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_msd_chunk.h" #include "atom.h" diff --git a/src/compute_omega_chunk.cpp b/src/compute_omega_chunk.cpp index 23447da602..360255e908 100644 --- a/src/compute_omega_chunk.cpp +++ b/src/compute_omega_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_omega_chunk.h" #include "atom.h" diff --git a/src/compute_pair_local.cpp b/src/compute_pair_local.cpp index c356a08be9..1ab46a0297 100644 --- a/src/compute_pair_local.cpp +++ b/src/compute_pair_local.cpp @@ -22,7 +22,6 @@ #include "neighbor.h" #include "neigh_request.h" #include "neigh_list.h" -#include "group.h" #include "memory.h" #include "error.h" diff --git a/src/compute_pe_atom.cpp b/src/compute_pe_atom.cpp index 2f1dc5650e..b3ace2d419 100644 --- a/src/compute_pe_atom.cpp +++ b/src/compute_pe_atom.cpp @@ -24,7 +24,6 @@ #include "improper.h" #include "kspace.h" #include "modify.h" -#include "fix.h" #include "memory.h" #include "error.h" diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index dde02a5aed..431f039de3 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -13,7 +13,6 @@ #include #include -#include #include "compute_pressure.h" #include "atom.h" #include "update.h" diff --git a/src/compute_property_chunk.cpp b/src/compute_property_chunk.cpp index 489890e1cc..089e867598 100644 --- a/src/compute_property_chunk.cpp +++ b/src/compute_property_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_property_chunk.h" #include "atom.h" diff --git a/src/compute_rdf.cpp b/src/compute_rdf.cpp index d49485b4ea..b1fa8bb2a3 100644 --- a/src/compute_rdf.cpp +++ b/src/compute_rdf.cpp @@ -17,7 +17,6 @@ #include #include -#include #include #include "compute_rdf.h" #include "atom.h" diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 16dc84628a..e7692b0797 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -20,8 +20,6 @@ #include "domain.h" #include "modify.h" #include "fix.h" -#include "force.h" -#include "comm.h" #include "group.h" #include "input.h" #include "variable.h" diff --git a/src/compute_reduce_region.cpp b/src/compute_reduce_region.cpp index 8e91a299e8..30a5c6393f 100644 --- a/src/compute_reduce_region.cpp +++ b/src/compute_reduce_region.cpp @@ -11,8 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include +#include #include "compute_reduce_region.h" #include "atom.h" #include "update.h" From df7c56d88160add5ce3492c1f5b9e757b34ebace Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 28 Jun 2019 05:28:54 -0400 Subject: [PATCH 358/760] use suffix compatible pair style matching when looking for ReaxFF pair style --- src/QEQ/fix_qeq_shielded.cpp | 2 +- src/USER-REAXC/fix_qeq_reax.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index a74eee7d29..6367feacc5 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -80,7 +80,7 @@ void FixQEqShielded::init() void FixQEqShielded::extract_reax() { - Pair *pair = force->pair_match("reax/c",1); + Pair *pair = force->pair_match("^reax/c",0); if (pair == NULL) error->all(FLERR,"No pair reax/c for fix qeq/shielded"); int tmp; chi = (double *) pair->extract("chi",tmp); diff --git a/src/USER-REAXC/fix_qeq_reax.cpp b/src/USER-REAXC/fix_qeq_reax.cpp index b37c8fff83..faa0632608 100644 --- a/src/USER-REAXC/fix_qeq_reax.cpp +++ b/src/USER-REAXC/fix_qeq_reax.cpp @@ -124,7 +124,7 @@ FixQEqReax::FixQEqReax(LAMMPS *lmp, int narg, char **arg) : // register with Atom class reaxc = NULL; - reaxc = (PairReaxC *) force->pair_match("reax/c",0); + reaxc = (PairReaxC *) force->pair_match("^reax/c",0); s_hist = t_hist = NULL; grow_arrays(atom->nmax); From 557a1274e48fdb950a998c28f2e5eba6a996065d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 28 Jun 2019 02:12:47 -0400 Subject: [PATCH 359/760] even more include file cleanup --- src/compute_slice.cpp | 2 +- src/compute_stress_atom.cpp | 1 - src/compute_temp.cpp | 2 -- src/compute_temp_chunk.cpp | 1 + src/compute_temp_com.cpp | 3 --- src/compute_temp_partial.cpp | 1 - src/compute_temp_profile.cpp | 2 -- src/compute_temp_ramp.cpp | 2 -- src/compute_temp_sphere.cpp | 2 -- src/compute_torque_chunk.cpp | 1 + src/compute_vacf.cpp | 1 + src/compute_vcm_chunk.cpp | 2 +- src/create_atoms.cpp | 5 +---- src/create_bonds.cpp | 2 +- src/create_box.cpp | 2 -- src/delete_atoms.cpp | 3 ++- src/delete_bonds.cpp | 1 - src/deprecated.cpp | 1 - src/dihedral.cpp | 3 --- 19 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/compute_slice.cpp b/src/compute_slice.cpp index ac70e7dd15..6e509c24d4 100644 --- a/src/compute_slice.cpp +++ b/src/compute_slice.cpp @@ -11,13 +11,13 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include #include "compute_slice.h" #include "update.h" #include "modify.h" #include "fix.h" -#include "group.h" #include "input.h" #include "variable.h" #include "memory.h" diff --git a/src/compute_stress_atom.cpp b/src/compute_stress_atom.cpp index 5211f015ab..f84c977bdb 100644 --- a/src/compute_stress_atom.cpp +++ b/src/compute_stress_atom.cpp @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include #include "compute_stress_atom.h" #include "atom.h" diff --git a/src/compute_temp.cpp b/src/compute_temp.cpp index f7d3a890ec..c330249a7e 100644 --- a/src/compute_temp.cpp +++ b/src/compute_temp.cpp @@ -12,13 +12,11 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_temp.h" #include "atom.h" #include "update.h" #include "force.h" #include "domain.h" -#include "comm.h" #include "group.h" #include "error.h" diff --git a/src/compute_temp_chunk.cpp b/src/compute_temp_chunk.cpp index 920515e05c..229e98e258 100644 --- a/src/compute_temp_chunk.cpp +++ b/src/compute_temp_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_temp_chunk.h" #include "atom.h" diff --git a/src/compute_temp_com.cpp b/src/compute_temp_com.cpp index f2ad40ea43..21814e1940 100644 --- a/src/compute_temp_com.cpp +++ b/src/compute_temp_com.cpp @@ -12,15 +12,12 @@ ------------------------------------------------------------------------- */ #include -#include -#include #include "compute_temp_com.h" #include "atom.h" #include "update.h" #include "force.h" #include "group.h" #include "domain.h" -#include "lattice.h" #include "error.h" using namespace LAMMPS_NS; diff --git a/src/compute_temp_partial.cpp b/src/compute_temp_partial.cpp index 4425aebdda..8d5ff66796 100644 --- a/src/compute_temp_partial.cpp +++ b/src/compute_temp_partial.cpp @@ -12,7 +12,6 @@ ------------------------------------------------------------------------- */ #include -#include #include "compute_temp_partial.h" #include "atom.h" #include "update.h" diff --git a/src/compute_temp_profile.cpp b/src/compute_temp_profile.cpp index c7f0b28a6c..21c87b31a2 100644 --- a/src/compute_temp_profile.cpp +++ b/src/compute_temp_profile.cpp @@ -12,14 +12,12 @@ ------------------------------------------------------------------------- */ #include -#include #include #include "compute_temp_profile.h" #include "atom.h" #include "update.h" #include "force.h" #include "group.h" -#include "fix.h" #include "domain.h" #include "memory.h" #include "error.h" diff --git a/src/compute_temp_ramp.cpp b/src/compute_temp_ramp.cpp index ba572645f3..715d2aa9f4 100644 --- a/src/compute_temp_ramp.cpp +++ b/src/compute_temp_ramp.cpp @@ -12,14 +12,12 @@ ------------------------------------------------------------------------- */ #include -#include #include #include "compute_temp_ramp.h" #include "atom.h" #include "update.h" #include "force.h" #include "group.h" -#include "fix.h" #include "domain.h" #include "lattice.h" #include "memory.h" diff --git a/src/compute_temp_sphere.cpp b/src/compute_temp_sphere.cpp index 651da6dee5..b490a5ec45 100644 --- a/src/compute_temp_sphere.cpp +++ b/src/compute_temp_sphere.cpp @@ -15,12 +15,10 @@ #include #include "compute_temp_sphere.h" #include "atom.h" -#include "atom_vec.h" #include "update.h" #include "force.h" #include "domain.h" #include "modify.h" -#include "comm.h" #include "group.h" #include "error.h" diff --git a/src/compute_torque_chunk.cpp b/src/compute_torque_chunk.cpp index d9de99bcb2..e43155493f 100644 --- a/src/compute_torque_chunk.cpp +++ b/src/compute_torque_chunk.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_torque_chunk.h" #include "atom.h" diff --git a/src/compute_vacf.cpp b/src/compute_vacf.cpp index 3ef3acf0bf..787c2503ca 100644 --- a/src/compute_vacf.cpp +++ b/src/compute_vacf.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_vacf.h" #include "atom.h" diff --git a/src/compute_vcm_chunk.cpp b/src/compute_vcm_chunk.cpp index a6dd796c63..cf30130763 100644 --- a/src/compute_vcm_chunk.cpp +++ b/src/compute_vcm_chunk.cpp @@ -11,13 +11,13 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "compute_vcm_chunk.h" #include "atom.h" #include "update.h" #include "modify.h" #include "compute_chunk_atom.h" -#include "domain.h" #include "memory.h" #include "error.h" diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 52e4256fca..8504023a70 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -11,8 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include +#include #include #include "create_atoms.h" #include "atom.h" @@ -23,8 +22,6 @@ #include "modify.h" #include "force.h" #include "special.h" -#include "fix.h" -#include "compute.h" #include "domain.h" #include "lattice.h" #include "region.h" diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index e19b565554..e00fe109ca 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -15,7 +15,7 @@ Contributing authors: Mike Salerno (NRL) added single methods ------------------------------------------------------------------------- */ -#include +#include #include #include "create_bonds.h" #include "atom.h" diff --git a/src/create_box.cpp b/src/create_box.cpp index b5e37b759c..5ec960bec4 100644 --- a/src/create_box.cpp +++ b/src/create_box.cpp @@ -11,12 +11,10 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include #include "create_box.h" #include "atom.h" #include "atom_vec.h" -#include "force.h" #include "domain.h" #include "region.h" #include "region_prism.h" diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 41df167f07..ff4b97a3a4 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -11,8 +11,9 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include +#include #include +#include #include "delete_atoms.h" #include "atom.h" #include "atom_vec.h" diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index fe32bca879..c4d591543a 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -18,7 +18,6 @@ #include "atom.h" #include "atom_vec.h" #include "domain.h" -#include "neighbor.h" #include "comm.h" #include "force.h" #include "group.h" diff --git a/src/deprecated.cpp b/src/deprecated.cpp index b937482669..66ddcfeff4 100644 --- a/src/deprecated.cpp +++ b/src/deprecated.cpp @@ -18,7 +18,6 @@ #include #include "deprecated.h" #include "comm.h" -#include "force.h" #include "error.h" #include "input.h" diff --git a/src/dihedral.cpp b/src/dihedral.cpp index adccf2a490..d2de841dd0 100644 --- a/src/dihedral.cpp +++ b/src/dihedral.cpp @@ -11,13 +11,10 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include #include "dihedral.h" #include "atom.h" #include "comm.h" #include "force.h" -#include "pair.h" -#include "suffix.h" #include "atom_masks.h" #include "memory.h" #include "error.h" From d918432047743f70a0650713ba7a21f0935d5245 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 28 Jun 2019 09:54:24 -0600 Subject: [PATCH 360/760] Fix issue with compute_duarray --- src/KOKKOS/pair_snap_kokkos_impl.h | 11 +++++----- src/KOKKOS/sna_kokkos.h | 11 +++++----- src/KOKKOS/sna_kokkos_impl.h | 33 +++++++++++++++++++++++------- src/SNAP/compute_snad_atom.cpp | 2 +- src/SNAP/compute_snav_atom.cpp | 2 +- src/SNAP/pair_snap.cpp | 2 +- src/SNAP/sna.cpp | 27 +++++++++++++++++++----- src/SNAP/sna.h | 7 ++++--- 8 files changed, 67 insertions(+), 28 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index d56db05d19..d0c7e09e84 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -309,7 +309,7 @@ void PairSNAPKokkos::operator() (TagPairSNAPBeta,const typename Kokk const int ii = team.league_rank(); const int i = d_ilist[ii]; const int itype = type[i]; - const int ielem = d_map[itype]; + const int ielem = map[itype]; Kokkos::View> d_coeffi(d_coeffelem,ielem,Kokkos::ALL); @@ -601,12 +601,13 @@ void PairSNAPKokkos::operator() (TagPairSNAPCompute::member_type& team, double*, double, double); //ForceSNAP + void compute_duidrj(const typename Kokkos::TeamPolicy::member_type& team, double*, double, double, int); //ForceSNAP KOKKOS_INLINE_FUNCTION void compute_dbidrj(const typename Kokkos::TeamPolicy::member_type& team); //ForceSNAP KOKKOS_INLINE_FUNCTION @@ -123,10 +123,11 @@ inline t_sna_1d ulisttot_r, ulisttot_i; t_sna_1d_atomic ulisttot_r_a, ulisttot_i_a; t_sna_1d zlist_r, zlist_i; + t_sna_2d ulist_r_ij, ulist_i_ij; // Per InFlight Interaction t_sna_1d ulist_r, ulist_i; - t_sna_1d_atomic ylist_r, ylist_i; + t_sna_1d ylist_r, ylist_i; // derivatives of data t_sna_2d dulist_r, dulist_i; @@ -171,13 +172,13 @@ inline KOKKOS_INLINE_FUNCTION void addself_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, double); // compute_ui KOKKOS_INLINE_FUNCTION - void add_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, double, double, double); // compute_ui + void add_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, double, double, double, int); // compute_ui KOKKOS_INLINE_FUNCTION void compute_uarray(const typename Kokkos::TeamPolicy::member_type& team, double, double, double, double, double); // compute_ui - inline + KOKKOS_INLINE_FUNCTION double deltacg(int, int, int); // init_clebsch_gordan inline @@ -185,7 +186,7 @@ inline KOKKOS_INLINE_FUNCTION void compute_duarray(const typename Kokkos::TeamPolicy::member_type& team, double, double, double, // compute_duidrj - double, double, double, double, double); + double, double, double, double, double, int); // Sets the style for the switching function // 0 = none diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 9b96cb8a16..8cbb3eb3f6 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -289,7 +289,7 @@ void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy::compute_dbidrj(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_duidrj(const typename Kokkos::TeamPolicy::member_type& team, - double* rij, double wj, double rcut) + double* rij, double wj, double rcut, int jj) { double rsq, r, x, y, z, z0, theta0, cs, sn; double dz0dr; @@ -797,7 +797,7 @@ void SNAKokkos::compute_duidrj(const typename Kokkos::TeamPolicy::addself_uarraytot(const typename Kokkos::TeamPolicy< template KOKKOS_INLINE_FUNCTION -void SNAKokkos::add_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, double r, double wj, double rcut) +void SNAKokkos::add_uarraytot(const typename Kokkos::TeamPolicy::member_type& team, + double r, double wj, double rcut, int j) { const double sfac = compute_sfac(r, rcut) * wj; @@ -854,10 +855,19 @@ void SNAKokkos::add_uarraytot(const typename Kokkos::TeamPolicy> + ulist_r_j(ulist_r_ij,j,Kokkos::ALL); + Kokkos::View> + ulist_i_j(ulist_i_ij,j,Kokkos::ALL); + Kokkos::parallel_for(Kokkos::ThreadVectorRange(team,ulisttot_r.span()), [&] (const int& i) { Kokkos::atomic_add(ptrtot_r+i, sfac * ptr_r[i]); Kokkos::atomic_add(ptrtot_i+i, sfac * ptr_i[i]); + + ulist_r_j(i) = ulist_r(i); + ulist_i_j(i) = ulist_i(i); }); } @@ -962,7 +972,7 @@ KOKKOS_INLINE_FUNCTION void SNAKokkos::compute_duarray(const typename Kokkos::TeamPolicy::member_type& team, double x, double y, double z, double z0, double r, double dz0dr, - double wj, double rcut) + double wj, double rcut, int jj) { double r0inv; double a_r, a_i, b_r, b_i; @@ -1006,6 +1016,11 @@ void SNAKokkos::compute_duarray(const typename Kokkos::TeamPolicy> + ulist_r(ulist_r_ij,jj,Kokkos::ALL); + Kokkos::View> + ulist_i(ulist_i_ij,jj,Kokkos::ALL); + dulist_r(0,0) = 0.0; dulist_r(0,1) = 0.0; dulist_r(0,2) = 0.0; @@ -1135,6 +1150,8 @@ void SNAKokkos::create_team_scratch_arrays(const typename Kokkos::Te rcutij = t_sna_1d(team.team_scratch(1),nmax); wj = t_sna_1d(team.team_scratch(1),nmax); inside = t_sna_1i(team.team_scratch(1),nmax); + ulist_r_ij = t_sna_2d(team.team_scratch(1),nmax,idxu_max); + ulist_i_ij = t_sna_2d(team.team_scratch(1),nmax,idxu_max); } template @@ -1151,6 +1168,7 @@ T_INT SNAKokkos::size_team_scratch_arrays() { size += t_sna_1d::shmem_size(nmax); // rcutij size += t_sna_1d::shmem_size(nmax); // wj size += t_sna_1i::shmem_size(nmax); // inside + size += t_sna_2d::shmem_size(nmax,idxu_max)*2; // ulist_ij return size; } @@ -1558,8 +1576,8 @@ double SNAKokkos::memory_usage() bytes += jdim * jdim * jdim * sizeof(int); // idxz_block bytes += jdim * jdim * jdim * sizeof(int); // idxb_block - bytes += idxz_max * sizeof(SNAKK_ZINDICES); // idxz - bytes += idxb_max * sizeof(SNAKK_BINDICES); // idxb + bytes += idxz_max * sizeof(SNAKK_ZINDICES); // idxz + bytes += idxb_max * sizeof(SNAKK_BINDICES); // idxb bytes += jdim * sizeof(double); // bzero @@ -1567,6 +1585,7 @@ double SNAKokkos::memory_usage() bytes += nmax * sizeof(int); // inside bytes += nmax * sizeof(double); // wj bytes += nmax * sizeof(double); // rcutij + bytes += nmax * idxu_max * sizeof(double) * 2; // ulist_ij return bytes; } diff --git a/src/SNAP/compute_snad_atom.cpp b/src/SNAP/compute_snad_atom.cpp index 37587a0aae..0a82cdeb00 100644 --- a/src/SNAP/compute_snad_atom.cpp +++ b/src/SNAP/compute_snad_atom.cpp @@ -263,7 +263,7 @@ void ComputeSNADAtom::compute_peratom() const int j = snaptr->inside[jj]; snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj], - snaptr->rcutij[jj]); + snaptr->rcutij[jj],jj); snaptr->compute_dbidrj(); // Accumulate -dBi/dRi, -dBi/dRj diff --git a/src/SNAP/compute_snav_atom.cpp b/src/SNAP/compute_snav_atom.cpp index 1f702496ed..374bf32298 100644 --- a/src/SNAP/compute_snav_atom.cpp +++ b/src/SNAP/compute_snav_atom.cpp @@ -258,7 +258,7 @@ void ComputeSNAVAtom::compute_peratom() snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj], - snaptr->rcutij[jj]); + snaptr->rcutij[jj],jj); snaptr->compute_dbidrj(); // Accumulate -dBi/dRi*Ri, -dBi/dRj*Rj diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index f9ba8922a0..4dce39361f 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -176,7 +176,7 @@ void PairSNAP::compute(int eflag, int vflag) 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->wj[jj],snaptr->rcutij[jj],jj); snaptr->compute_deidrj(fij); diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index ada3f528d2..f9696e1f12 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -134,6 +134,8 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, nmax = 0; idxz = NULL; idxb = NULL; + ulist_r_ij = NULL; + ulist_i_ij = NULL; build_indexlist(); create_twojmax_arrays(); @@ -154,6 +156,8 @@ SNA::~SNA() memory->destroy(inside); memory->destroy(wj); memory->destroy(rcutij); + memory->destroy(ulist_r_ij); + memory->destroy(ulist_i_ij); delete[] idxz; delete[] idxb; destroy_twojmax_arrays(); @@ -299,10 +303,14 @@ void SNA::grow_rij(int newnmax) memory->destroy(inside); memory->destroy(wj); memory->destroy(rcutij); + memory->destroy(ulist_r_ij); + memory->destroy(ulist_i_ij); 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->create(ulist_r_ij, nmax, idxu_max, "sna:ulist_ij"); + memory->create(ulist_i_ij, nmax, idxu_max, "sna:ulist_ij"); } /* ---------------------------------------------------------------------- @@ -334,7 +342,7 @@ void SNA::compute_ui(int jnum) z0 = r / tan(theta0); compute_uarray(x, y, z, z0, r); - add_uarraytot(r, wj[j], rcutij[j]); + add_uarraytot(r, wj[j], rcutij[j], j); } } @@ -826,7 +834,7 @@ void SNA::compute_dbidrj() calculate derivative of Ui w.r.t. atom j ------------------------------------------------------------------------- */ -void SNA::compute_duidrj(double* rij, double wj, double rcut) +void SNA::compute_duidrj(double* rij, double wj, double rcut, int jj) { double rsq, r, x, y, z, z0, theta0, cs, sn; double dz0dr; @@ -843,7 +851,7 @@ void SNA::compute_duidrj(double* rij, double wj, double rcut) z0 = r * cs / sn; dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq; - compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut); + compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut, jj); } /* ---------------------------------------------------------------------- */ @@ -879,7 +887,7 @@ void SNA::addself_uarraytot(double wself_in) add Wigner U-functions for one neighbor to the total ------------------------------------------------------------------------- */ -void SNA::add_uarraytot(double r, double wj, double rcut) +void SNA::add_uarraytot(double r, double wj, double rcut, int jj) { double sfac; @@ -887,6 +895,9 @@ void SNA::add_uarraytot(double r, double wj, double rcut) sfac *= wj; + double* ulist_r_j = ulist_r_ij[jj]; + double* ulist_i_j = ulist_i_ij[jj]; + for (int j = 0; j <= twojmax; j++) { int jju = idxu_block[j]; for (int mb = 0; mb <= j; mb++) @@ -895,6 +906,9 @@ void SNA::add_uarraytot(double r, double wj, double rcut) sfac * ulist_r[jju]; ulisttot_i[jju] += sfac * ulist_i[jju]; + + ulist_r_j[jju] = ulist_r[jju]; + ulist_i_j[jju] = ulist_i[jju]; jju++; } } @@ -992,7 +1006,7 @@ void SNA::compute_uarray(double x, double y, double z, void SNA::compute_duarray(double x, double y, double z, double z0, double r, double dz0dr, - double wj, double rcut) + double wj, double rcut, int jj) { double r0inv; double a_r, a_i, b_r, b_i; @@ -1036,6 +1050,9 @@ void SNA::compute_duarray(double x, double y, double z, db_i[0] += -r0inv; db_r[1] += r0inv; + double* ulist_r = ulist_r_ij[jj]; + double* ulist_i = ulist_i_ij[jj]; + dulist_r[0][0] = 0.0; dulist_r[0][1] = 0.0; dulist_r[0][2] = 0.0; diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index 1e08ef123c..81582cf9e5 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -53,7 +53,7 @@ public: // functions for derivatives - void compute_duidrj(double*, double, double); + void compute_duidrj(double*, double, double, int); void compute_dbidrj(); void compute_deidrj(double*); double compute_sfac(double, double); @@ -86,6 +86,7 @@ private: double* ulisttot_r, * ulisttot_i; double* ulist_r, * ulist_i; + double** ulist_r_ij, ** ulist_i_ij; int* idxu_block; double* zlist_r, * zlist_i; @@ -106,13 +107,13 @@ private: void init_rootpqarray(); void zero_uarraytot(); void addself_uarraytot(double); - void add_uarraytot(double, double, double); + void add_uarraytot(double, double, double, int); void compute_uarray(double, double, double, double, double); double deltacg(int, int, int); int compute_ncoeff(); void compute_duarray(double, double, double, - double, double, double, double, double); + double, double, double, double, double, int); // Sets the style for the switching function // 0 = none From 5eabc820240604ef4ea3859d054e6c03febc3827 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 28 Jun 2019 10:17:22 -0600 Subject: [PATCH 361/760] Restore lost changes --- src/KOKKOS/pair_snap_kokkos_impl.h | 9 ++++----- src/KOKKOS/sna_kokkos.h | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index d0c7e09e84..20e04605ce 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -309,7 +309,7 @@ void PairSNAPKokkos::operator() (TagPairSNAPBeta,const typename Kokk const int ii = team.league_rank(); const int i = d_ilist[ii]; const int itype = type[i]; - const int ielem = map[itype]; + const int ielem = d_map[itype]; Kokkos::View> d_coeffi(d_coeffelem,ielem,Kokkos::ALL); @@ -603,11 +603,10 @@ void PairSNAPKokkos::operator() (TagPairSNAPCompute::member_type& team, double, double, double, double, double); // compute_ui - KOKKOS_INLINE_FUNCTION + inline double deltacg(int, int, int); // init_clebsch_gordan inline From ea2e73119da7c6c7633da5073d8cef8ed8e05b5c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 28 Jun 2019 11:23:24 -0600 Subject: [PATCH 362/760] Update Kokkos library in LAMMPS to v2.9.00 --- lib/kokkos/CHANGELOG.md | 34 + lib/kokkos/Makefile.kokkos | 111 +- lib/kokkos/Makefile.targets | 13 +- .../algorithms/cmake/Dependencies.cmake | 2 +- lib/kokkos/algorithms/src/Kokkos_Sort.hpp | 2 + .../algorithms/unit_tests/CMakeLists.txt | 6 + lib/kokkos/algorithms/unit_tests/Makefile | 12 + lib/kokkos/algorithms/unit_tests/TestHPX.cpp | 96 + lib/kokkos/algorithms/unit_tests/TestSort.hpp | 8 +- lib/kokkos/cmake/kokkos_build.cmake | 24 +- lib/kokkos/cmake/kokkos_functions.cmake | 2 +- lib/kokkos/cmake/kokkos_options.cmake | 41 +- lib/kokkos/cmake/kokkos_settings.cmake | 6 + lib/kokkos/cmake/tribits.cmake | 8 + .../containers/cmake/Dependencies.cmake | 2 +- .../performance_tests/CMakeLists.txt | 4 + .../containers/performance_tests/Makefile | 12 + .../performance_tests/TestDynRankView.hpp | 12 +- .../performance_tests/TestGlobal2LocalIds.hpp | 6 +- .../containers/performance_tests/TestHPX.cpp | 130 ++ .../performance_tests/TestScatterView.hpp | 2 + .../TestUnorderedMapPerformance.hpp | 4 +- lib/kokkos/containers/src/Kokkos_Bitset.hpp | 26 +- lib/kokkos/containers/src/Kokkos_DualView.hpp | 4 +- .../containers/src/Kokkos_DynRankView.hpp | 19 +- .../containers/src/Kokkos_DynamicView.hpp | 14 +- .../containers/src/Kokkos_OffsetView.hpp | 16 +- .../containers/src/Kokkos_ScatterView.hpp | 405 +++- .../containers/src/Kokkos_UnorderedMap.hpp | 8 +- lib/kokkos/containers/src/Kokkos_Vector.hpp | 4 +- .../containers/unit_tests/CMakeLists.txt | 25 + lib/kokkos/containers/unit_tests/Makefile | 26 + .../containers/unit_tests/TestBitset.hpp | 6 +- .../containers/unit_tests/TestDynViewAPI.hpp | 2 + .../unit_tests/TestErrorReporter.hpp | 2 + .../containers/unit_tests/TestScatterView.hpp | 452 +++- .../unit_tests/TestUnorderedMap.hpp | 14 +- .../unit_tests/hpx/TestHPX_BitSet.cpp | 47 + .../unit_tests/hpx/TestHPX_Category.hpp | 65 + .../unit_tests/hpx/TestHPX_DualView.cpp | 47 + .../hpx/TestHPX_DynRankViewAPI_generic.cpp | 47 + .../hpx/TestHPX_DynRankViewAPI_rank12345.cpp | 47 + .../hpx/TestHPX_DynRankViewAPI_rank67.cpp | 47 + .../unit_tests/hpx/TestHPX_DynamicView.cpp | 47 + .../unit_tests/hpx/TestHPX_ErrorReporter.cpp | 47 + .../unit_tests/hpx/TestHPX_OffsetView.cpp | 47 + .../unit_tests/hpx/TestHPX_ScatterView.cpp | 47 + .../unit_tests/hpx/TestHPX_StaticCrsGraph.cpp | 47 + .../unit_tests/hpx/TestHPX_UnorderedMap.cpp | 47 + .../unit_tests/hpx/TestHPX_Vector.cpp | 47 + .../hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp | 47 + lib/kokkos/core/cmake/Dependencies.cmake | 2 +- lib/kokkos/core/perf_test/CMakeLists.txt | 1 + lib/kokkos/core/perf_test/Makefile | 1 + .../core/perf_test/PerfTestBlasKernels.hpp | 75 +- .../core/perf_test/PerfTestGramSchmidt.cpp | 2 +- lib/kokkos/core/perf_test/PerfTestHexGrad.cpp | 4 +- lib/kokkos/core/perf_test/PerfTestMDRange.hpp | 24 +- .../PerfTest_ExecSpacePartitioning.cpp | 564 +++++ .../core/perf_test/PerfTest_ViewAllocate.cpp | 1 + .../core/perf_test/PerfTest_ViewCopy.hpp | 5 + .../core/perf_test/PerfTest_ViewFill.hpp | 5 + .../core/perf_test/PerfTest_ViewResize.hpp | 10 + lib/kokkos/core/perf_test/test_atomic.cpp | 40 +- lib/kokkos/core/perf_test/test_mempool.cpp | 1 + lib/kokkos/core/perf_test/test_taskdag.cpp | 45 +- lib/kokkos/core/src/CMakeLists.txt | 10 + lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp | 419 ---- lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp | 12 +- .../Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp | 657 ++++++ ...uda_Atomic_Intrinsics_Restore_Builtins.hpp | 68 + ...pp => Kokkos_Cuda_BlockSize_Deduction.hpp} | 131 +- ...Cuda_Impl.cpp => Kokkos_Cuda_Instance.cpp} | 200 +- .../core/src/Cuda/Kokkos_Cuda_Instance.hpp | 156 ++ .../src/Cuda/Kokkos_Cuda_KernelLaunch.hpp | 579 +++++ .../core/src/Cuda/Kokkos_Cuda_Parallel.hpp | 719 ++---- .../core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp | 17 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp | 190 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp | 728 ++++-- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp | 178 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp | 2 +- .../src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp | 3 +- lib/kokkos/core/src/HPX/Kokkos_HPX.cpp | 152 ++ .../Kokkos_HPX_Task.cpp} | 41 +- lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp | 298 +++ .../src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp | 57 + .../src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp | 57 + .../src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp | 116 + .../core/src/KokkosExp_MDRangePolicy.hpp | 79 +- lib/kokkos/core/src/Kokkos_Atomic.hpp | 15 + lib/kokkos/core/src/Kokkos_Complex.hpp | 6 +- lib/kokkos/core/src/Kokkos_Concepts.hpp | 54 +- lib/kokkos/core/src/Kokkos_CopyViews.hpp | 860 ++++++- lib/kokkos/core/src/Kokkos_Core.hpp | 5 + lib/kokkos/core/src/Kokkos_Core_fwd.hpp | 10 + lib/kokkos/core/src/Kokkos_Crs.hpp | 4 +- lib/kokkos/core/src/Kokkos_Cuda.hpp | 41 +- lib/kokkos/core/src/Kokkos_ExecPolicy.hpp | 175 +- lib/kokkos/core/src/Kokkos_Extents.hpp | 186 ++ lib/kokkos/core/src/Kokkos_Future.hpp | 567 +++++ lib/kokkos/core/src/Kokkos_HPX.hpp | 1999 +++++++++++++++++ lib/kokkos/core/src/Kokkos_HostSpace.hpp | 13 +- lib/kokkos/core/src/Kokkos_Layout.hpp | 21 +- lib/kokkos/core/src/Kokkos_Macros.hpp | 112 +- lib/kokkos/core/src/Kokkos_MemoryPool.hpp | 6 + lib/kokkos/core/src/Kokkos_MemoryTraits.hpp | 9 +- lib/kokkos/core/src/Kokkos_OpenMP.hpp | 8 +- lib/kokkos/core/src/Kokkos_Pair.hpp | 9 + lib/kokkos/core/src/Kokkos_Parallel.hpp | 4 +- .../core/src/Kokkos_Parallel_Reduce.hpp | 257 ++- .../core/src/Kokkos_PointerOwnership.hpp | 74 + lib/kokkos/core/src/Kokkos_ROCm.hpp | 9 +- lib/kokkos/core/src/Kokkos_Serial.hpp | 26 +- lib/kokkos/core/src/Kokkos_TaskScheduler.hpp | 1110 ++++----- .../core/src/Kokkos_TaskScheduler_fwd.hpp | 249 ++ lib/kokkos/core/src/Kokkos_Threads.hpp | 6 + lib/kokkos/core/src/Kokkos_View.hpp | 64 +- .../core/src/Kokkos_WorkGraphPolicy.hpp | 13 +- lib/kokkos/core/src/Makefile | 8 + .../core/src/Makefile.generate_build_files | 5 +- .../core/src/Makefile.generate_header_lists | 4 + .../core/src/OpenMP/Kokkos_OpenMP_Exec.cpp | 4 + .../core/src/OpenMP/Kokkos_OpenMP_Exec.hpp | 5 + .../src/OpenMP/Kokkos_OpenMP_Parallel.hpp | 25 +- .../core/src/OpenMP/Kokkos_OpenMP_Task.cpp | 220 +- .../core/src/OpenMP/Kokkos_OpenMP_Task.hpp | 384 +++- .../core/src/OpenMP/Kokkos_OpenMP_Team.hpp | 23 +- .../OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp | 5 +- .../Kokkos_OpenMPTarget_Parallel.hpp | 16 +- .../src/Qthreads/Kokkos_Qthreads_Parallel.hpp | 1 - lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp | 2 +- .../core/src/ROCm/Kokkos_ROCm_Parallel.hpp | 25 +- .../core/src/Threads/Kokkos_ThreadsExec.cpp | 4 + .../core/src/Threads/Kokkos_ThreadsExec.hpp | 4 + .../core/src/Threads/Kokkos_ThreadsTeam.hpp | 169 +- .../src/Threads/Kokkos_Threads_Parallel.hpp | 1 - lib/kokkos/core/src/eti/CMakeLists.txt | 3 + lib/kokkos/core/src/eti/HPX/CMakeLists.txt | 148 ++ ...TIInst_int64_t_double_LayoutLeft_Rank1.cpp | 54 + ...TIInst_int64_t_double_LayoutLeft_Rank2.cpp | 54 + ...TIInst_int64_t_double_LayoutLeft_Rank3.cpp | 54 + ...TIInst_int64_t_double_LayoutLeft_Rank4.cpp | 54 + ...TIInst_int64_t_double_LayoutLeft_Rank5.cpp | 54 + ...TIInst_int64_t_double_LayoutLeft_Rank8.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank1.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank2.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank3.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank4.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank5.cpp | 54 + ...IInst_int64_t_double_LayoutRight_Rank8.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank1.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank2.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank3.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank4.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank5.cpp | 54 + ...Inst_int64_t_double_LayoutStride_Rank8.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank1.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank2.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank3.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank4.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank5.cpp | 54 + ...ETIInst_int64_t_float_LayoutLeft_Rank8.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank1.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank2.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank3.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank4.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank5.cpp | 54 + ...TIInst_int64_t_float_LayoutRight_Rank8.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank1.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank2.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank3.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank4.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank5.cpp | 54 + ...IInst_int64_t_float_LayoutStride_Rank8.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank1.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank2.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank3.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank4.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank5.cpp | 54 + ...IInst_int64_t_int64_t_LayoutLeft_Rank8.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank1.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank2.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank3.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank4.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank5.cpp | 54 + ...Inst_int64_t_int64_t_LayoutRight_Rank8.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank1.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank2.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank3.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank4.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank5.cpp | 54 + ...nst_int64_t_int64_t_LayoutStride_Rank8.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank1.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank2.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank3.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank4.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank5.cpp | 54 + ...pyETIInst_int64_t_int_LayoutLeft_Rank8.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank1.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank2.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank3.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank4.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank5.cpp | 54 + ...yETIInst_int64_t_int_LayoutRight_Rank8.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank1.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank2.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank3.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank4.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank5.cpp | 54 + ...ETIInst_int64_t_int_LayoutStride_Rank8.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank1.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank2.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank3.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank4.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank5.cpp | 54 + ...opyETIInst_int_double_LayoutLeft_Rank8.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank1.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank2.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank3.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank4.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank5.cpp | 54 + ...pyETIInst_int_double_LayoutRight_Rank8.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank1.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank2.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank3.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank4.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank5.cpp | 54 + ...yETIInst_int_double_LayoutStride_Rank8.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank1.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank2.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank3.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank4.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank5.cpp | 54 + ...CopyETIInst_int_float_LayoutLeft_Rank8.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank1.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank2.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank3.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank4.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank5.cpp | 54 + ...opyETIInst_int_float_LayoutRight_Rank8.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank1.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank2.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank3.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank4.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank5.cpp | 54 + ...pyETIInst_int_float_LayoutStride_Rank8.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank1.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank2.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank3.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank4.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank5.cpp | 54 + ...pyETIInst_int_int64_t_LayoutLeft_Rank8.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank1.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank2.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank3.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank4.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank5.cpp | 54 + ...yETIInst_int_int64_t_LayoutRight_Rank8.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank1.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank2.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank3.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank4.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank5.cpp | 54 + ...ETIInst_int_int64_t_LayoutStride_Rank8.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank1.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank2.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank3.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank4.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank5.cpp | 54 + ...ewCopyETIInst_int_int_LayoutLeft_Rank8.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank1.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank2.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank3.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank4.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank5.cpp | 54 + ...wCopyETIInst_int_int_LayoutRight_Rank8.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank1.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank2.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank3.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank4.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank5.cpp | 54 + ...CopyETIInst_int_int_LayoutStride_Rank8.cpp | 54 + lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX | 288 +++ .../core/src/impl/Kokkos_AnalyzePolicy.hpp | 31 +- .../Kokkos_Atomic_Compare_Exchange_Strong.hpp | 167 +- .../Kokkos_Atomic_Compare_Exchange_Weak.hpp | 418 ++++ .../core/src/impl/Kokkos_Atomic_Fetch_Add.hpp | 14 +- .../core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp | 24 +- .../core/src/impl/Kokkos_Atomic_Generic.hpp | 28 +- .../core/src/impl/Kokkos_Atomic_Load.hpp | 266 +++ .../src/impl/Kokkos_Atomic_Memory_Order.hpp | 122 + .../core/src/impl/Kokkos_Atomic_Store.hpp | 258 +++ lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp | 314 +++ lib/kokkos/core/src/impl/Kokkos_Core.cpp | 52 +- lib/kokkos/core/src/impl/Kokkos_EBO.hpp | 343 +++ lib/kokkos/core/src/impl/Kokkos_Error.hpp | 48 + .../src/impl/Kokkos_FixedBufferMemoryPool.hpp | 307 +++ .../core/src/impl/Kokkos_FunctorAdapter.hpp | 5 +- lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp | 12 +- .../src/impl/Kokkos_HostSpace_deepcopy.cpp | 134 ++ .../src/impl/Kokkos_HostSpace_deepcopy.hpp | 54 + .../core/src/impl/Kokkos_HostThreadTeam.hpp | 292 ++- lib/kokkos/core/src/impl/Kokkos_LIFO.hpp | 431 ++++ .../core/src/impl/Kokkos_LinkedListNode.hpp | 206 ++ .../src/impl/Kokkos_MemoryPoolAllocator.hpp | 140 ++ .../src/impl/Kokkos_MultipleTaskQueue.hpp | 616 +++++ .../core/src/impl/Kokkos_OptionalRef.hpp | 242 ++ .../core/src/impl/Kokkos_Serial_Task.cpp | 99 +- .../core/src/impl/Kokkos_Serial_Task.hpp | 223 +- .../core/src/impl/Kokkos_SharedAlloc.cpp | 37 +- .../src/impl/Kokkos_SimpleTaskScheduler.hpp | 646 ++++++ .../core/src/impl/Kokkos_SingleTaskQueue.hpp | 207 ++ lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp | 329 +++ lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp | 758 +++++++ .../core/src/impl/Kokkos_TaskPolicyData.hpp | 195 ++ lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp | 388 +--- .../core/src/impl/Kokkos_TaskQueueCommon.hpp | 569 +++++ .../impl/Kokkos_TaskQueueMemoryManager.hpp | 251 +++ .../src/impl/Kokkos_TaskQueueMultiple.hpp | 286 +++ .../impl/Kokkos_TaskQueueMultiple_impl.hpp | 72 + .../core/src/impl/Kokkos_TaskQueue_impl.hpp | 119 +- .../core/src/impl/Kokkos_TaskResult.hpp | 151 ++ .../core/src/impl/Kokkos_TaskTeamMember.hpp | 135 ++ lib/kokkos/core/src/impl/Kokkos_Traits.hpp | 48 + .../core/src/impl/Kokkos_VLAEmulation.hpp | 295 +++ lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp | 2 + .../core/src/impl/Kokkos_ViewMapping.hpp | 146 +- lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp | 12 + lib/kokkos/core/unit_test/CMakeLists.txt | 682 +++++- lib/kokkos/core/unit_test/Makefile | 521 +++-- lib/kokkos/core/unit_test/TestAtomic.hpp | 20 +- .../core/unit_test/TestAtomicOperations.hpp | 52 +- .../TestAtomicOperations_complexdouble.hpp | 57 + .../TestAtomicOperations_complexfloat.hpp | 57 + lib/kokkos/core/unit_test/TestCXX11.hpp | 2 + .../core/unit_test/TestCompilerMacros.hpp | 2 +- lib/kokkos/core/unit_test/TestDeepCopy.hpp | 167 ++ .../unit_test/TestDefaultDeviceTypeInit.hpp | 8 + .../core/unit_test/TestLocalDeepCopy.hpp | 904 ++++++++ lib/kokkos/core/unit_test/TestMDRange.hpp | 5 + .../core/unit_test/TestPolicyConstruction.hpp | 3 + .../unit_test/TestReduceCombinatorical.hpp | 6 + .../core/unit_test/TestReduceDeviceView.hpp | 8 +- lib/kokkos/core/unit_test/TestReducers.hpp | 11 + lib/kokkos/core/unit_test/TestScan.hpp | 7 +- lib/kokkos/core/unit_test/TestSharedAlloc.hpp | 12 +- .../core/unit_test/TestTaskScheduler.hpp | 470 +++- .../unit_test/TestTaskScheduler_single.hpp | 92 + lib/kokkos/core/unit_test/TestTeam.hpp | 14 +- lib/kokkos/core/unit_test/TestTeamVector.hpp | 53 +- .../core/unit_test/TestTeamVectorRange.hpp | 464 ++++ lib/kokkos/core/unit_test/TestTile.hpp | 7 + lib/kokkos/core/unit_test/TestViewAPI.hpp | 46 +- lib/kokkos/core/unit_test/TestViewAPI_e.hpp | 42 + .../core/unit_test/TestViewMapping_a.hpp | 6 +- .../core/unit_test/TestViewMapping_b.hpp | 6 +- .../unit_test/TestViewMapping_subview.hpp | 1 + lib/kokkos/core/unit_test/TestViewSubview.hpp | 204 ++ lib/kokkos/core/unit_test/TestWorkGraph.hpp | 1 + ...estCuda_AtomicOperations_complexdouble.cpp | 46 + ...TestCuda_AtomicOperations_complexfloat.cpp | 46 + .../cuda/TestCuda_DeepCopyAlignment.cpp | 48 + ..._InterOp.cpp => TestCuda_InterOp_Init.cpp} | 0 .../cuda/TestCuda_InterOp_Streams.cpp | 180 ++ .../unit_test/cuda/TestCuda_LocalDeepCopy.cpp | 46 + .../core/unit_test/cuda/TestCuda_Spaces.cpp | 6 +- .../unit_test/cuda/TestCuda_SubView_a.cpp | 7 + .../cuda/TestCuda_TeamVectorRange.cpp | 48 + .../hpx/TestHPX_AtomicOperations_double.cpp | 46 + .../hpx/TestHPX_AtomicOperations_float.cpp | 46 + .../hpx/TestHPX_AtomicOperations_int.cpp | 46 + .../hpx/TestHPX_AtomicOperations_longint.cpp | 46 + .../TestHPX_AtomicOperations_longlongint.cpp | 46 + .../TestHPX_AtomicOperations_unsignedint.cpp | 46 + ...stHPX_AtomicOperations_unsignedlongint.cpp | 46 + .../unit_test/hpx/TestHPX_AtomicViews.cpp | 47 + .../core/unit_test/hpx/TestHPX_Atomics.cpp | 46 + .../core/unit_test/hpx/TestHPX_Category.hpp | 65 + .../core/unit_test/hpx/TestHPX_Complex.cpp | 47 + lib/kokkos/core/unit_test/hpx/TestHPX_Crs.cpp | 45 + .../core/unit_test/hpx/TestHPX_Init.cpp | 50 + .../core/unit_test/hpx/TestHPX_InterOp.cpp | 56 + .../core/unit_test/hpx/TestHPX_MDRange_a.cpp | 47 + .../core/unit_test/hpx/TestHPX_MDRange_b.cpp | 47 + .../core/unit_test/hpx/TestHPX_MDRange_c.cpp | 47 + .../core/unit_test/hpx/TestHPX_MDRange_d.cpp | 47 + .../core/unit_test/hpx/TestHPX_MDRange_e.cpp | 47 + .../core/unit_test/hpx/TestHPX_Other.cpp | 43 + .../unit_test/hpx/TestHPX_RangePolicy.cpp | 47 + .../core/unit_test/hpx/TestHPX_Reducers_a.cpp | 45 + .../core/unit_test/hpx/TestHPX_Reducers_b.cpp | 45 + .../core/unit_test/hpx/TestHPX_Reducers_c.cpp | 45 + .../core/unit_test/hpx/TestHPX_Reducers_d.cpp | 45 + .../core/unit_test/hpx/TestHPX_Reductions.cpp | 46 + .../core/unit_test/hpx/TestHPX_Scan.cpp | 47 + .../unit_test/hpx/TestHPX_SharedAlloc.cpp | 55 + .../core/unit_test/hpx/TestHPX_SubView_a.cpp | 104 + .../core/unit_test/hpx/TestHPX_SubView_b.cpp | 63 + .../unit_test/hpx/TestHPX_SubView_c01.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c02.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c03.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c04.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c05.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c06.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c07.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c08.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c09.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c10.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c11.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c12.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c13.cpp | 54 + .../unit_test/hpx/TestHPX_SubView_c_all.cpp | 13 + .../core/unit_test/hpx/TestHPX_Task.cpp | 47 + .../core/unit_test/hpx/TestHPX_Team.cpp | 75 + .../hpx/TestHPX_TeamReductionScan.cpp | 81 + .../unit_test/hpx/TestHPX_TeamScratch.cpp | 83 + .../unit_test/hpx/TestHPX_TeamVectorRange.cpp | 48 + .../unit_test/hpx/TestHPX_UniqueToken.cpp | 46 + .../core/unit_test/hpx/TestHPX_ViewAPI_a.cpp | 45 + .../core/unit_test/hpx/TestHPX_ViewAPI_b.cpp | 45 + .../core/unit_test/hpx/TestHPX_ViewAPI_c.cpp | 45 + .../core/unit_test/hpx/TestHPX_ViewAPI_d.cpp | 45 + .../core/unit_test/hpx/TestHPX_ViewAPI_e.cpp | 45 + .../unit_test/hpx/TestHPX_ViewMapping_a.cpp | 46 + .../unit_test/hpx/TestHPX_ViewMapping_b.cpp | 46 + .../hpx/TestHPX_ViewMapping_subview.cpp | 46 + .../unit_test/hpx/TestHPX_ViewOfClass.cpp | 46 + .../core/unit_test/hpx/TestHPX_View_64bit.cpp | 45 + .../core/unit_test/hpx/TestHPX_WorkGraph.cpp | 45 + ...tOpenMP_AtomicOperations_complexdouble.cpp | 46 + ...stOpenMP_AtomicOperations_complexfloat.cpp | 46 + .../openmp/TestOpenMP_DeepCopyAlignment.cpp | 45 + .../openmp/TestOpenMP_LocalDeepCopy.cpp | 46 + .../unit_test/openmp/TestOpenMP_SubView_a.cpp | 7 + .../openmp/TestOpenMP_TeamVectorRange.cpp | 48 + ...PTarget_AtomicOperations_complexdouble.cpp | 46 + ...MPTarget_AtomicOperations_complexfloat.cpp | 46 + .../TestOpenMPTarget_DeepCopyAlignment.cpp | 45 + .../TestOpenMPTarget_SubView_a.cpp | 7 + ...threads_AtomicOperations_complexdouble.cpp | 46 + ...qthreads_AtomicOperations_complexfloat.cpp | 46 + .../TestQthreads_DeepCopyAlignment.cpp | 45 + .../qthreads/TestQthreads_Reductions.cpp | 4 +- .../rocm/TestROCm_DeepCopyAlignment.cpp | 45 + .../core/unit_test/rocm/TestROCm_Spaces.cpp | 2 +- .../unit_test/rocm/TestROCm_SubView_a.cpp | 7 + ...tSerial_AtomicOperations_complexdouble.cpp | 46 + ...stSerial_AtomicOperations_complexfloat.cpp | 46 + .../serial/TestSerial_DeepCopyAlignment.cpp | 45 + .../serial/TestSerial_LocalDeepCopy.cpp | 46 + .../unit_test/serial/TestSerial_SubView_a.cpp | 7 + .../serial/TestSerial_TeamVectorRange.cpp | 48 + .../unit_test/standalone/UnitTestMainInit.cpp | 11 +- ...Threads_AtomicOperations_complexdouble.cpp | 46 + ...tThreads_AtomicOperations_complexfloat.cpp | 46 + .../threads/TestThreads_DeepCopyAlignment.cpp | 45 + .../threads/TestThreads_LocalDeepCopy.cpp | 46 + .../threads/TestThreads_SubView_a.cpp | 7 + .../threads/TestThreads_TeamVectorRange.cpp | 48 + lib/kokkos/doc/Doxyfile | 127 -- lib/kokkos/doc/Kokkos_PG.pdf | Bin 1359256 -> 0 bytes .../doc/SAND2017-10464-Kokkos-Task-DAG.pdf | Bin 761252 -> 0 bytes lib/kokkos/doc/build_docs | 15 - .../doc/design_notes_space_instances.md | 131 -- lib/kokkos/doc/develop_builds.md | 76 - .../query_cuda_arch.cpp | 24 - lib/kokkos/doc/index.doc | 72 - lib/kokkos/doc/kokkos-promotion.txt | 196 -- lib/kokkos/example/cmake/Dependencies.cmake | 2 +- lib/kokkos/example/common/VectorImport.hpp | 10 +- lib/kokkos/example/feint/Makefile | 4 + lib/kokkos/example/feint/feint_hpx.cpp | 67 + lib/kokkos/example/fenl/CGSolve.hpp | 4 +- lib/kokkos/example/fenl/fenl.cpp | 22 + lib/kokkos/example/fenl/fenl_functors.hpp | 14 +- lib/kokkos/example/fenl/fenl_impl.hpp | 6 +- lib/kokkos/example/fenl/main.cpp | 12 +- lib/kokkos/example/md_skeleton/force.cpp | 2 +- lib/kokkos/example/md_skeleton/neighbor.cpp | 6 +- lib/kokkos/example/multi_fem/Explicit.hpp | 6 +- .../example/multi_fem/ExplicitFunctors.hpp | 24 +- lib/kokkos/example/multi_fem/Implicit.hpp | 8 +- lib/kokkos/example/multi_fem/LinAlgBLAS.hpp | 74 +- lib/kokkos/example/multi_fem/Nonlinear.hpp | 8 +- lib/kokkos/example/multi_fem/TestCuda.cpp | 46 +- lib/kokkos/example/multi_fem/TestHost.cpp | 25 +- .../Advanced_Views/03_subviews/subviews.cpp | 1 + .../overlapping_deepcopy.cpp | 2 +- lib/kokkos/generate_makefile.bash | 35 +- lib/kokkos/master_history.txt | 1 + .../scripts/eti/generate_view_copy_cpp_files | 12 - .../eti/generate_view_copy_cpp_files_iterate | 21 - .../eti/generate_view_copy_cpp_files_rank | 17 - .../eti/generate_view_copy_cpp_files_write | 41 - lib/kokkos/scripts/snapshot.py | 291 --- lib/kokkos/scripts/testing_scripts/README | 5 - .../testing_scripts/jenkins_test_driver | 83 - .../testing_scripts/obj_size_opt_check | 287 --- .../scripts/testing_scripts/test_all_sandia | 811 ------- .../test_kokkos_master_develop_promotion.sh | 66 - .../blake_jenkins_run_script_pthread_intel | 63 - .../blake_jenkins_run_script_serial_intel | 63 - .../scripts/trilinos-integration/checkin-test | 4 - .../prepare_trilinos_repos.sh | 59 - .../white_run_jenkins_script_cuda | 67 - .../white_run_jenkins_script_omp | 62 - 506 files changed, 37043 insertions(+), 6851 deletions(-) create mode 100644 lib/kokkos/algorithms/unit_tests/TestHPX.cpp create mode 100644 lib/kokkos/containers/performance_tests/TestHPX.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp create mode 100644 lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp create mode 100644 lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp delete mode 100644 lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp create mode 100644 lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp create mode 100644 lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp rename lib/kokkos/core/src/Cuda/{Kokkos_Cuda_Internal.hpp => Kokkos_Cuda_BlockSize_Deduction.hpp} (69%) rename lib/kokkos/core/src/Cuda/{Kokkos_Cuda_Impl.cpp => Kokkos_Cuda_Instance.cpp} (86%) create mode 100644 lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp create mode 100644 lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp create mode 100644 lib/kokkos/core/src/HPX/Kokkos_HPX.cpp rename lib/kokkos/core/src/{impl/Kokkos_StaticAssert.hpp => HPX/Kokkos_HPX_Task.cpp} (76%) create mode 100644 lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp create mode 100644 lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp create mode 100644 lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp create mode 100644 lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Extents.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Future.hpp create mode 100644 lib/kokkos/core/src/Kokkos_HPX.hpp create mode 100644 lib/kokkos/core/src/Kokkos_PointerOwnership.hpp create mode 100644 lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp create mode 100644 lib/kokkos/core/src/eti/HPX/CMakeLists.txt create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp create mode 100644 lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX create mode 100644 lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_EBO.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_LIFO.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp create mode 100644 lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp create mode 100644 lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp create mode 100644 lib/kokkos/core/unit_test/TestDeepCopy.hpp create mode 100644 lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp create mode 100644 lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp create mode 100644 lib/kokkos/core/unit_test/TestTeamVectorRange.hpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_DeepCopyAlignment.cpp rename lib/kokkos/core/unit_test/cuda/{TestCuda_InterOp.cpp => TestCuda_InterOp_Init.cpp} (100%) create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_InterOp_Streams.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_LocalDeepCopy.cpp create mode 100644 lib/kokkos/core/unit_test/cuda/TestCuda_TeamVectorRange.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_double.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_float.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_int.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_longint.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_longlongint.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_unsignedint.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicOperations_unsignedlongint.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_AtomicViews.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Atomics.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Category.hpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Complex.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Crs.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Init.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_InterOp.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_MDRange_a.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_MDRange_b.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_MDRange_c.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_MDRange_d.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_MDRange_e.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Other.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_RangePolicy.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Reducers_a.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Reducers_b.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Reducers_c.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Reducers_d.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Reductions.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Scan.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SharedAlloc.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_a.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_b.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c01.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c02.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c03.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c04.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c05.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c06.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c07.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c08.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c09.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c10.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c11.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c12.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c13.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_SubView_c_all.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Task.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_Team.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_TeamReductionScan.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_TeamScratch.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_TeamVectorRange.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_UniqueToken.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewAPI_a.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewAPI_b.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewAPI_c.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewAPI_d.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewAPI_e.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewMapping_a.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewMapping_b.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewMapping_subview.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_ViewOfClass.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_View_64bit.cpp create mode 100644 lib/kokkos/core/unit_test/hpx/TestHPX_WorkGraph.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_LocalDeepCopy.cpp create mode 100644 lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamVectorRange.cpp create mode 100644 lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/qthreads/TestQthreads_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/rocm/TestROCm_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_LocalDeepCopy.cpp create mode 100644 lib/kokkos/core/unit_test/serial/TestSerial_TeamVectorRange.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_AtomicOperations_complexdouble.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_AtomicOperations_complexfloat.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_DeepCopyAlignment.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_LocalDeepCopy.cpp create mode 100644 lib/kokkos/core/unit_test/threads/TestThreads_TeamVectorRange.cpp delete mode 100644 lib/kokkos/doc/Doxyfile delete mode 100644 lib/kokkos/doc/Kokkos_PG.pdf delete mode 100644 lib/kokkos/doc/SAND2017-10464-Kokkos-Task-DAG.pdf delete mode 100755 lib/kokkos/doc/build_docs delete mode 100644 lib/kokkos/doc/design_notes_space_instances.md delete mode 100644 lib/kokkos/doc/develop_builds.md delete mode 100644 lib/kokkos/doc/hardware_identification/query_cuda_arch.cpp delete mode 100644 lib/kokkos/doc/index.doc delete mode 100644 lib/kokkos/doc/kokkos-promotion.txt create mode 100644 lib/kokkos/example/feint/feint_hpx.cpp delete mode 100755 lib/kokkos/scripts/eti/generate_view_copy_cpp_files delete mode 100755 lib/kokkos/scripts/eti/generate_view_copy_cpp_files_iterate delete mode 100755 lib/kokkos/scripts/eti/generate_view_copy_cpp_files_rank delete mode 100755 lib/kokkos/scripts/eti/generate_view_copy_cpp_files_write delete mode 100755 lib/kokkos/scripts/snapshot.py delete mode 100644 lib/kokkos/scripts/testing_scripts/README delete mode 100755 lib/kokkos/scripts/testing_scripts/jenkins_test_driver delete mode 100755 lib/kokkos/scripts/testing_scripts/obj_size_opt_check delete mode 100755 lib/kokkos/scripts/testing_scripts/test_all_sandia delete mode 100755 lib/kokkos/scripts/testing_scripts/test_kokkos_master_develop_promotion.sh delete mode 100755 lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_pthread_intel delete mode 100755 lib/kokkos/scripts/trilinos-integration/blake_jenkins_run_script_serial_intel delete mode 100644 lib/kokkos/scripts/trilinos-integration/checkin-test delete mode 100755 lib/kokkos/scripts/trilinos-integration/prepare_trilinos_repos.sh delete mode 100755 lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_cuda delete mode 100755 lib/kokkos/scripts/trilinos-integration/white_run_jenkins_script_omp diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 9d503663ae..8d196e2c35 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,5 +1,39 @@ # Change Log +## [2.9.00](https://github.com/kokkos/kokkos/tree/2.9.00) (2019-06-24) +[Full Changelog](https://github.com/kokkos/kokkos/compare/2.8.00...2.9.00) + +**Implemented enhancements:** + +- Capability: CUDA Streams [\#1723](https://github.com/kokkos/kokkos/issues/1723) +- Capability: CUDA Stream support for parallel\_reduce [\#2061](https://github.com/kokkos/kokkos/issues/2061) +- Capability: Feature Request: TeamVectorRange [\#713](https://github.com/kokkos/kokkos/issues/713) +- Capability: Adding HPX backend [\#2080](https://github.com/kokkos/kokkos/issues/2080) +- Capability: TaskScheduler to have multiple queues [\#565](https://github.com/kokkos/kokkos/issues/565) +- Capability: Support for additional reductions in ScatterView [\#1674](https://github.com/kokkos/kokkos/issues/1674) +- Capability: Request: deep\_copy within parallel regions [\#689](https://github.com/kokkos/kokkos/issues/689) +- Capability: Feature Request: `create\_mirror\_view\_without\_initializing` [\#1765](https://github.com/kokkos/kokkos/issues/1765) +- View: Use SFINAE to restrict possible View type conversions [\#2127](https://github.com/kokkos/kokkos/issues/2127) +- Deprecation: Deprecate ExecutionSpace::fence\(\) as static function and make it non-static [\#2140](https://github.com/kokkos/kokkos/issues/2140) +- Deprecation: Deprecate LayoutTileLeft [\#2122](https://github.com/kokkos/kokkos/issues/2122) +- Macros: KOKKOS\_RESTRICT defined for non-Intel compilers [\#2038](https://github.com/kokkos/kokkos/issues/2038) + +**Fixed bugs:** + +- Cuda: TeamThreadRange loop count on device is passed by reference to host static constexpr [\#1733](https://github.com/kokkos/kokkos/issues/1733) +- Cuda: Build error with relocatable device code with CUDA 10.1 GCC 7.3 [\#2134](https://github.com/kokkos/kokkos/issues/2134) +- Cuda: cudaFuncSetCacheConfig is setting CachePreferShared too often [\#2066](https://github.com/kokkos/kokkos/issues/2066) +- Cuda: TeamPolicy doesn't throw then created with non-viable vector length and also doesn't backscale to viable one [\#2020](https://github.com/kokkos/kokkos/issues/2020) +- Cuda: cudaMemcpy error for large league sizes on V100 [\#1991](https://github.com/kokkos/kokkos/issues/1991) +- Cuda: illegal warp sync in parallel\_reduce by functor on Turing 75 [\#1958](https://github.com/kokkos/kokkos/issues/1958) +- TeamThreadRange: Inconsistent results from TeamThreadRange reduction [\#1905](https://github.com/kokkos/kokkos/issues/1905) +- Atomics: atomic\_fetch\_oper & atomic\_oper\_fetch don't build for complex\ [\#1964](https://github.com/kokkos/kokkos/issues/1964) +- Views: Kokkos randomread Views leak memory [\#2155](https://github.com/kokkos/kokkos/issues/2155) +- ScatterView: LayoutLeft overload currently non-functional [\#2165](https://github.com/kokkos/kokkos/issues/2165) +- KNL: With intel 17.2.174 illegal instruction in random number test [\#2078](https://github.com/kokkos/kokkos/issues/2078) +- Bitset: Enable copy constructor on device [\#2094](https://github.com/kokkos/kokkos/issues/2094) +- Examples: do not compile due to template deduction error \(multi\_fem\) [\#1928](https://github.com/kokkos/kokkos/issues/1928) + ## [2.8.00](https://github.com/kokkos/kokkos/tree/2.8.00) (2019-02-05) [Full Changelog](https://github.com/kokkos/kokkos/compare/2.7.24...2.8.00) diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index a90e86b9f8..e9ad57f0ae 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -23,7 +23,7 @@ KOKKOS_DEBUG ?= "no" KOKKOS_USE_TPLS ?= "" # Options: c++11,c++14,c++1y,c++17,c++1z,c++2a KOKKOS_CXX_STANDARD ?= "c++11" -# Options: aggressive_vectorization,disable_profiling,disable_deprecated_code,enable_large_mem_tests +# Options: aggressive_vectorization,disable_profiling,enable_deprecated_code,disable_deprecated_code,enable_large_mem_tests KOKKOS_OPTIONS ?= "" # Option for setting ETI path KOKKOS_ETI_PATH ?= ${KOKKOS_PATH}/core/src/eti @@ -33,11 +33,19 @@ KOKKOS_CMAKE ?= "no" # Options: force_uvm,use_ldg,rdc,enable_lambda KOKKOS_CUDA_OPTIONS ?= "enable_lambda" +# Default settings specific options. +# Options: enable_async_dispatch +KOKKOS_HPX_OPTIONS ?= "" + # Return a 1 if a string contains a substring and 0 if not # Note the search string should be without '"' # Example: $(call kokkos_has_string,"hwloc,librt",hwloc) # Will return a 1 kokkos_has_string=$(if $(findstring $2,$1),1,0) +# Returns 1 if the path exists, 0 otherwise +# Example: $(call kokkos_path_exists,/path/to/file) +# Will return a 1 if /path/to/file exists +kokkos_path_exists=$(if $(wildcard $1),1,0) # Check for general settings. KOKKOS_INTERNAL_ENABLE_DEBUG := $(call kokkos_has_string,$(KOKKOS_DEBUG),yes) @@ -58,6 +66,7 @@ KOKKOS_INTERNAL_ENABLE_COMPILER_WARNINGS := $(call kokkos_has_string,$(KOKKOS_OP KOKKOS_INTERNAL_OPT_RANGE_AGGRESSIVE_VECTORIZATION := $(call kokkos_has_string,$(KOKKOS_OPTIONS),aggressive_vectorization) KOKKOS_INTERNAL_DISABLE_PROFILING := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_profiling) KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_deprecated_code) +KOKKOS_INTERNAL_ENABLE_DEPRECATED_CODE := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_deprecated_code) KOKKOS_INTERNAL_DISABLE_DUALVIEW_MODIFY_CHECK := $(call kokkos_has_string,$(KOKKOS_OPTIONS),disable_dualview_modify_check) KOKKOS_INTERNAL_ENABLE_PROFILING_LOAD_PRINT := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_profile_load_print) KOKKOS_INTERNAL_ENABLE_LARGE_MEM_TESTS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_large_mem_tests) @@ -65,6 +74,7 @@ KOKKOS_INTERNAL_CUDA_USE_LDG := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS), KOKKOS_INTERNAL_CUDA_USE_UVM := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),force_uvm) KOKKOS_INTERNAL_CUDA_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),rdc) KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_lambda) +KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch) KOKKOS_INTERNAL_ENABLE_ETI := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_eti) @@ -72,12 +82,15 @@ KOKKOS_INTERNAL_ENABLE_ETI := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_ KOKKOS_INTERNAL_USE_OPENMP := $(call kokkos_has_string,$(subst OpenMPTarget,,$(KOKKOS_DEVICES)),OpenMP) KOKKOS_INTERNAL_USE_PTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Pthread) KOKKOS_INTERNAL_USE_QTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Qthreads) +KOKKOS_INTERNAL_USE_HPX := $(call kokkos_has_string,$(KOKKOS_DEVICES),HPX) KOKKOS_INTERNAL_USE_SERIAL := $(call kokkos_has_string,$(KOKKOS_DEVICES),Serial) ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 0) ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 0) ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 0) - KOKKOS_INTERNAL_USE_SERIAL := 1 + ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) + KOKKOS_INTERNAL_USE_SERIAL := 1 + endif endif endif endif @@ -112,7 +125,7 @@ KOKKOS_INTERNAL_COMPILER_XL := $(strip $(shell $(CXX) -qversion 2 KOKKOS_INTERNAL_COMPILER_CRAY := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep "CC-" | wc -l)) KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); $(CXX) --version 2>&1 | grep nvcc | wc -l)) KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),clang) -KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),apple-darwin) +KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),Apple LLVM) KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC) # Check Host Compiler if using NVCC through nvcc_wrapper @@ -283,9 +296,9 @@ KOKKOS_INTERNAL_USE_ARCH_NVIDIA := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_KEPLE + $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL61) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL60) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ - + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ + + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53)) @@ -300,19 +313,19 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 0) + $(KOKKOS_INTERNAL_USE_ARCH_KEPLER37) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL61) \ + $(KOKKOS_INTERNAL_USE_ARCH_PASCAL60) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ - + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ - + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA70) \ + + $(KOKKOS_INTERNAL_USE_ARCH_VOLTA72) \ + + $(KOKKOS_INTERNAL_USE_ARCH_TURING75) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL50) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL52) \ + $(KOKKOS_INTERNAL_USE_ARCH_MAXWELL53)) endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NVIDIA), 1) - ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) - KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc) - CUDA_PATH ?= $(KOKKOS_INTERNAL_NVCC_PATH:/bin/nvcc=) + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc) + CUDA_PATH ?= $(KOKKOS_INTERNAL_NVCC_PATH:/bin/nvcc=) + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) KOKKOS_INTERNAL_OPENMPTARGET_FLAG := $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) --cuda-path=$(CUDA_PATH) endif endif @@ -441,6 +454,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_QTHREADS") endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HPX") +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_SERIAL") endif @@ -559,9 +576,15 @@ ifeq ($(KOKKOS_INTERNAL_DISABLE_PROFILING), 0) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_PROFILING") endif -ifeq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 0) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEPRECATED_CODE), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") + endif + ifeq ($(KOKKOS_INTERNAL_DISABLE_DEPRECATED_CODE), 0) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_DEPRECATED_CODE") + endif endif + ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_ETI") endif @@ -593,8 +616,13 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) ifeq ($(KOKKOS_INTERNAL_CUDA_USE_RELOC), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE") - KOKKOS_CXXFLAGS += --relocatable-device-code=true - KOKKOS_LDFLAGS += --relocatable-device-code=true + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + KOKKOS_CXXFLAGS += -fcuda-rdc + KOKKOS_LDFLAGS += -fcuda-rdc + else + KOKKOS_CXXFLAGS += --relocatable-device-code=true + KOKKOS_LDFLAGS += --relocatable-device-code=true + endif endif ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) @@ -625,6 +653,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) endif endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + ifeq ($(KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HPX_ASYNC_DISPATCH") + endif +endif + # Add Architecture flags. ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV80), 1) @@ -908,7 +942,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) KOKKOS_INTERNAL_CUDA_ARCH_FLAG=--cuda-gpu-arch KOKKOS_CXXFLAGS += -x cuda else - $(error Makefile.kokkos: CUDA is enabled but the compiler is neither NVCC nor Clang) + $(error Makefile.kokkos: CUDA is enabled but the compiler is neither NVCC nor Clang (got version string $(KOKKOS_CXX_VERSION)) ) endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1) @@ -1058,10 +1092,18 @@ endif ifneq ($(KOKKOS_CMAKE), yes) KOKKOS_CXXFLAGS += -I$(CUDA_PATH)/include endif - KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64 - KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib64 + ifeq ($(call kokkos_path_exists,$(CUDA_PATH)/lib64), 1) + KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib64 + KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib64 + KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib64 + else ifeq ($(call kokkos_path_exists,$(CUDA_PATH)/lib), 1) + KOKKOS_LDFLAGS += -L$(CUDA_PATH)/lib + KOKKOS_CXXLDFLAGS += -L$(CUDA_PATH)/lib + KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib + else + $(error Can't find CUDA library directory: no lib64 or lib directory in $(CUDA_PATH)) + endif KOKKOS_TPL_INCLUDE_DIRS += $(CUDA_PATH)/include - KOKKOS_TPL_LIBRARY_DIRS += $(CUDA_PATH)/lib64 ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) KOKKOS_CXXFLAGS += --cuda-path=$(CUDA_PATH) endif @@ -1124,6 +1166,33 @@ ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) KOKKOS_TPL_LIBRARY_NAMES += qthread endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.cpp) + KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.hpp) + ifneq ($(HPX_PATH),) + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1) + KOKKOS_CXXFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --cflags hpx_application_debug) + KOKKOS_CXXLDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application_debug) + KOKKOS_LDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application_debug) + else + KOKKOS_CXXFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --cflags hpx_application) + KOKKOS_CXXLDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application) + KOKKOS_LDFLAGS += $(shell PKG_CONFIG_PATH=$(HPX_PATH)/lib64/pkgconfig pkg-config --libs hpx_application) + endif + else + ifeq ($(KOKKOS_INTERNAL_ENABLE_DEBUG), 1) + KOKKOS_CXXFLAGS += $(shell pkg-config --cflags hpx_application_debug) + KOKKOS_CXXLDFLAGS += $(shell pkg-config --libs hpx_application_debug) + KOKKOS_LDFLAGS += $(shell pkg-config --libs hpx_application_debug) + else + KOKKOS_CXXFLAGS += $(shell pkg-config --cflags hpx_application) + KOKKOS_CXXLDFLAGS += $(shell pkg-config --libs hpx_application) + KOKKOS_LDFLAGS += $(shell pkg-config --libs hpx_application) + endif + endif + KOKKOS_TPL_LIBRARY_NAMES += hpx +endif + # Explicitly set the GCC Toolchain for Clang. ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) KOKKOS_INTERNAL_GCC_PATH = $(shell which g++) diff --git a/lib/kokkos/Makefile.targets b/lib/kokkos/Makefile.targets index 44da1e082a..e7d5a3c907 100644 --- a/lib/kokkos/Makefile.targets +++ b/lib/kokkos/Makefile.targets @@ -30,6 +30,8 @@ Kokkos_SharedAlloc.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_ $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_SharedAlloc.cpp Kokkos_MemoryPool.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_MemoryPool.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_MemoryPool.cpp +Kokkos_HostSpace_deepcopy.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace_deepcopy.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace_deepcopy.cpp ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) @@ -38,8 +40,8 @@ endif endif ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) -Kokkos_Cuda_Impl.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Impl.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Impl.cpp +Kokkos_Cuda_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Instance.cpp Kokkos_CudaSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Cuda/Kokkos_CudaSpace.cpp Kokkos_Cuda_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Cuda/Kokkos_Cuda_Task.cpp @@ -92,6 +94,13 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) endif endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) +Kokkos_HPX.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX.cpp +Kokkos_HPX_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HPX/Kokkos_HPX_Task.cpp +endif + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) Kokkos_OpenMPTarget_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp diff --git a/lib/kokkos/algorithms/cmake/Dependencies.cmake b/lib/kokkos/algorithms/cmake/Dependencies.cmake index c36b62523f..1b41310681 100644 --- a/lib/kokkos/algorithms/cmake/Dependencies.cmake +++ b/lib/kokkos/algorithms/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES KokkosCore KokkosContainers - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index 8bdd876723..7fb8505fe5 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -328,6 +328,8 @@ public: parallel_for("Kokkos::Sort::Copy", Kokkos::RangePolicy(0,len),functor); } + + Kokkos::fence(); } template diff --git a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt index f5aa24e9be..e238b37c8e 100644 --- a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt +++ b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt @@ -42,6 +42,12 @@ IF(Kokkos_ENABLE_OpenMP) ) ENDIF() +IF(Kokkos_ENABLE_HPX) + LIST( APPEND SOURCES + TestHPX.cpp + ) +ENDIF() + IF(Kokkos_ENABLE_Serial) LIST( APPEND SOURCES TestSerial.cpp diff --git a/lib/kokkos/algorithms/unit_tests/Makefile b/lib/kokkos/algorithms/unit_tests/Makefile index b5848c451e..3c862d03dc 100644 --- a/lib/kokkos/algorithms/unit_tests/Makefile +++ b/lib/kokkos/algorithms/unit_tests/Makefile @@ -49,6 +49,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = TestHPX.o UnitTestMain.o gtest-all.o + TARGETS += KokkosAlgorithms_UnitTest_HPX + TEST_TARGETS += test-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = TestSerial.o UnitTestMain.o gtest-all.o TARGETS += KokkosAlgorithms_UnitTest_Serial @@ -67,6 +73,9 @@ KokkosAlgorithms_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosAlgorithms_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_OpenMP +KokkosAlgorithms_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_HPX + KokkosAlgorithms_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_SERIAL) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosAlgorithms_UnitTest_Serial @@ -82,6 +91,9 @@ test-threads: KokkosAlgorithms_UnitTest_Threads test-openmp: KokkosAlgorithms_UnitTest_OpenMP ./KokkosAlgorithms_UnitTest_OpenMP +test-hpx: KokkosAlgorithms_UnitTest_HPX + ./KokkosAlgorithms_UnitTest_HPX + test-serial: KokkosAlgorithms_UnitTest_Serial ./KokkosAlgorithms_UnitTest_Serial diff --git a/lib/kokkos/algorithms/unit_tests/TestHPX.cpp b/lib/kokkos/algorithms/unit_tests/TestHPX.cpp new file mode 100644 index 0000000000..e5b7dbdb7a --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestHPX.cpp @@ -0,0 +1,96 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#include +#ifdef KOKKOS_ENABLE_HPX + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include +#include + +namespace Test { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() + { + std::cout << std::setprecision(5) << std::scientific; + } + + static void TearDownTestCase() + { + } +}; + +#define HPX_RANDOM_XORSHIFT64( num_draws ) \ + TEST_F( hpx, Random_XorShift64 ) { \ + Impl::test_random >(num_draws); \ + } + +#define HPX_RANDOM_XORSHIFT1024( num_draws ) \ + TEST_F( hpx, Random_XorShift1024 ) { \ + Impl::test_random >(num_draws); \ + } + +#define HPX_SORT_UNSIGNED( size ) \ + TEST_F( hpx, SortUnsigned ) { \ + Impl::test_sort< Kokkos::Experimental::HPX, unsigned >(size); \ + } + +HPX_RANDOM_XORSHIFT64( 10240000 ) +HPX_RANDOM_XORSHIFT1024( 10130144 ) +HPX_SORT_UNSIGNED(171) + +#undef HPX_RANDOM_XORSHIFT64 +#undef HPX_RANDOM_XORSHIFT1024 +#undef HPX_SORT_UNSIGNED +} // namespace test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTHPX_PREVENT_LINK_ERROR() {} +#endif + diff --git a/lib/kokkos/algorithms/unit_tests/TestSort.hpp b/lib/kokkos/algorithms/unit_tests/TestSort.hpp index e0c646c199..5fd7f09b50 100644 --- a/lib/kokkos/algorithms/unit_tests/TestSort.hpp +++ b/lib/kokkos/algorithms/unit_tests/TestSort.hpp @@ -225,9 +225,9 @@ void test_dynamic_view_sort(unsigned int n ) Kokkos::Random_XorShift64_Pool g(1931); Kokkos::fill_random(keys_view,g,Kokkos::Random_XorShift64_Pool::generator_type::MAX_URAND); - ExecutionSpace::fence(); + ExecutionSpace().fence(); Kokkos::deep_copy(keys,keys_view); - //ExecutionSpace::fence(); + //ExecutionSpace().fence(); double sum_before = 0.0; double sum_after = 0.0; @@ -237,9 +237,9 @@ void test_dynamic_view_sort(unsigned int n ) Kokkos::sort(keys, 0 /* begin */ , n /* end */ ); - ExecutionSpace::fence(); // Need this fence to prevent BusError with Cuda + ExecutionSpace().fence(); // Need this fence to prevent BusError with Cuda Kokkos::deep_copy( keys_view , keys ); - //ExecutionSpace::fence(); + //ExecutionSpace().fence(); Kokkos::parallel_reduce(n,sum(keys_view),sum_after); Kokkos::parallel_reduce(n-1,is_sorted_struct(keys_view),sort_fails); diff --git a/lib/kokkos/cmake/kokkos_build.cmake b/lib/kokkos/cmake/kokkos_build.cmake index 8178483d01..f9b995baae 100644 --- a/lib/kokkos/cmake/kokkos_build.cmake +++ b/lib/kokkos/cmake/kokkos_build.cmake @@ -76,8 +76,20 @@ IF(KOKKOS_SEPARATE_LIBS) ) foreach(lib IN LISTS KOKKOS_TPL_LIBRARY_NAMES) - if ("${lib}" STREQUAL "cuda") + if (("${lib}" STREQUAL "cuda") AND (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) set(LIB_cuda "-lcuda") + elseif ("${lib}" STREQUAL "hpx") + find_package(HPX REQUIRED) + if(${HPX_FOUND}) + target_link_libraries(kokkoscore PUBLIC ${HPX_LIBRARIES}) + target_link_libraries(kokkoscontainers PUBLIC ${HPX_LIBRARIES}) + target_link_libraries(kokkosalgorithms PUBLIC ${HPX_LIBRARIES}) + target_include_directories(kokkoscore PUBLIC ${HPX_INCLUDE_DIRS}) + target_include_directories(kokkoscontainers PUBLIC ${HPX_INCLUDE_DIRS}) + target_include_directories(kokkosalgorithms PUBLIC ${HPX_INCLUDE_DIRS}) + else() + message(ERROR "HPX not found. Check the value of HPX_DIR (= ${HPX_DIR}) or CMAKE_PREFIX_PATH (= ${CMAKE_PREFIX_PATH}).") + endif() else() find_library(LIB_${lib} ${lib} PATHS ${KOKKOS_TPL_LIBRARY_DIRS}) endif() @@ -158,8 +170,16 @@ ELSE() ) foreach(lib IN LISTS KOKKOS_TPL_LIBRARY_NAMES) - if ("${lib}" STREQUAL "cuda") + if (("${lib}" STREQUAL "cuda") AND (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) set(LIB_cuda "-lcuda") + elseif ("${lib}" STREQUAL "hpx") + find_package(HPX REQUIRED) + if(${HPX_FOUND}) + target_link_libraries(kokkos PUBLIC ${HPX_LIBRARIES}) + target_include_directories(kokkos PUBLIC ${HPX_INCLUDE_DIRS}) + else() + message(ERROR "HPX not found. Check the value of HPX_DIR (= ${HPX_DIR}) or CMAKE_PREFIX_PATH (= ${CMAKE_PREFIX_PATH}).") + endif() else() find_library(LIB_${lib} ${lib} PATHS ${KOKKOS_TPL_LIBRARY_DIRS}) endif() diff --git a/lib/kokkos/cmake/kokkos_functions.cmake b/lib/kokkos/cmake/kokkos_functions.cmake index bc490115af..616618753b 100644 --- a/lib/kokkos/cmake/kokkos_functions.cmake +++ b/lib/kokkos/cmake/kokkos_functions.cmake @@ -95,7 +95,7 @@ function(set_kokkos_cxx_compiler) message(FATAL_ERROR "Compiling CUDA code directly with Clang requires version 4.0.0 or higher.") endif() elseif(NOT INTERNAL_CXX_COMPILER_ID STREQUAL NVIDIA) - message(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang.") + message(FATAL_ERROR "Invalid compiler for CUDA. The compiler must be nvcc_wrapper or Clang, but compiler ID was ${INTERNAL_CXX_COMPILER_ID}") endif() endif() diff --git a/lib/kokkos/cmake/kokkos_options.cmake b/lib/kokkos/cmake/kokkos_options.cmake index be494e5df0..e730a94664 100644 --- a/lib/kokkos/cmake/kokkos_options.cmake +++ b/lib/kokkos/cmake/kokkos_options.cmake @@ -14,6 +14,7 @@ list(APPEND KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST OpenMP Pthread Qthread + HPX Cuda ROCm HWLOC @@ -23,6 +24,7 @@ list(APPEND KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST Cuda_Relocatable_Device_Code Cuda_UVM Cuda_LDG_Intrinsic + HPX_ASYNC_DISPATCH Debug Debug_DualView_Modify_Check Debug_Bounds_Check @@ -116,6 +118,7 @@ list(APPEND KOKKOS_DEVICES_LIST OpenMP # OpenMP Pthread # pthread Qthreads # qthreads + HPX # HPX Serial # serial ROCm # Relocatable device code ) @@ -173,6 +176,19 @@ set(KOKKOS_INTERNAL_RELOCATABLE_DEVICE_CODE rdc) set(KOKKOS_INTERNAL_LAMBDA enable_lambda) +#------------------------------------------------------------------------------- +# List of possible Options for HPX +#------------------------------------------------------------------------------- +# From Makefile.kokkos: Options: enable_async_dispatch +set(KOKKOS_HPX_OPTIONS_LIST) +list(APPEND KOKKOS_HPX_OPTIONS_LIST + ASYNC_DISPATCH # enable_async_dispatch + ) + +# Map of cmake variables to Makefile variables +set(KOKKOS_INTERNAL_ENABLE_ASYNC_DISPATCH enable_async_dispatch) + + #------------------------------------------------------------------------------- #------------------------------- Create doc strings ---------------------------- #------------------------------------------------------------------------------- @@ -202,6 +218,11 @@ set(KOKKOS_SEPARATE_LIBS OFF CACHE BOOL "OFF = kokkos. ON = kokkoscore, kokkosc # Qthreads options. set(KOKKOS_QTHREADS_DIR "" CACHE PATH "Location of Qthreads library.") +# HPX options. +set(KOKKOS_HPX_DIR "" CACHE PATH "Location of HPX library.") + +# Whether to build separate libraries or now +set(KOKKOS_SEPARATE_TESTS OFF CACHE BOOL "Provide unit test targets with finer granularity.") #------------------------------------------------------------------------------- #------------------------------- KOKKOS_DEVICES -------------------------------- @@ -215,6 +236,11 @@ IF(Trilinos_ENABLE_Kokkos) ELSE() set_kokkos_default_default(QTHREADS OFF) ENDIF() + IF(TPL_ENABLE_HPX) + set_kokkos_default_default(HPX ON) + ELSE() + set_kokkos_default_default(HPX OFF) + ENDIF() IF(Trilinos_ENABLE_OpenMP) set_kokkos_default_default(OPENMP ${Trilinos_ENABLE_OpenMP}) ELSE() @@ -231,6 +257,7 @@ ELSE() set_kokkos_default_default(OPENMP OFF) set_kokkos_default_default(PTHREAD OFF) set_kokkos_default_default(QTHREAD OFF) + set_kokkos_default_default(HPX OFF) set_kokkos_default_default(CUDA OFF) set_kokkos_default_default(ROCM OFF) ENDIF() @@ -241,6 +268,7 @@ set(KOKKOS_ENABLE_SERIAL ${KOKKOS_INTERNAL_ENABLE_SERIAL_DEFAULT} CACHE BOOL "Wh set(KOKKOS_ENABLE_OPENMP ${KOKKOS_INTERNAL_ENABLE_OPENMP_DEFAULT} CACHE BOOL "Enable OpenMP support in Kokkos." FORCE) set(KOKKOS_ENABLE_PTHREAD ${KOKKOS_INTERNAL_ENABLE_PTHREAD_DEFAULT} CACHE BOOL "Enable Pthread support in Kokkos.") set(KOKKOS_ENABLE_QTHREADS ${KOKKOS_INTERNAL_ENABLE_QTHREADS_DEFAULT} CACHE BOOL "Enable Qthreads support in Kokkos.") +set(KOKKOS_ENABLE_HPX ${KOKKOS_INTERNAL_ENABLE_HPX_DEFAULT} CACHE BOOL "Enable HPX support in Kokkos.") set(KOKKOS_ENABLE_CUDA ${KOKKOS_INTERNAL_ENABLE_CUDA_DEFAULT} CACHE BOOL "Enable CUDA support in Kokkos.") set(KOKKOS_ENABLE_ROCM ${KOKKOS_INTERNAL_ENABLE_ROCM_DEFAULT} CACHE BOOL "Enable ROCm support in Kokkos.") @@ -343,6 +371,18 @@ set(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE ${KOKKOS_INTERNAL_ENABLE_CUDA_REL set(KOKKOS_ENABLE_CUDA_LAMBDA ${KOKKOS_INTERNAL_ENABLE_CUDA_LAMBDA_DEFAULT} CACHE BOOL "Enable lambdas for CUDA. (cuda option)") +#------------------------------------------------------------------------------- +#------------------------------- KOKKOS_HPX_OPTIONS ---------------------------- +#------------------------------------------------------------------------------- + +# HPX options. +# Set Defaults +set_kokkos_default_default(HPX_ASYNC_DISPATCH OFF) + +# Set actual options +set(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH ${KOKKOS_INTERNAL_ENABLE_HPX_ASYNC_DISPATCH_DEFAULT} CACHE BOOL "Enable HPX async dispatch.") + + #------------------------------------------------------------------------------- #----------------------- HOST ARCH AND LEGACY TRIBITS -------------------------- #------------------------------------------------------------------------------- @@ -376,4 +416,3 @@ foreach(opt ${KOKKOS_INTERNAL_ENABLE_OPTIONS_LIST}) SET(Kokkos_ENABLE_${opt} ${KOKKOS_ENABLE_${OPT}} CACHE BOOL "CamelCase Compatibility setting for KOKKOS_ENABLE_${OPT}") ENDIF() endforeach() - diff --git a/lib/kokkos/cmake/kokkos_settings.cmake b/lib/kokkos/cmake/kokkos_settings.cmake index 387ced6d52..2c622d0de9 100644 --- a/lib/kokkos/cmake/kokkos_settings.cmake +++ b/lib/kokkos/cmake/kokkos_settings.cmake @@ -198,6 +198,8 @@ if(KOKKOS_CMAKE_VERBOSE) message(STATUS " Host Parallel: Pthread") elseif(KOKKOS_ENABLE_QTHREADS) message(STATUS " Host Parallel: Qthreads") + elseif(KOKKOS_ENABLE_HPX) + message(STATUS " Host Parallel: HPX") else() message(STATUS " Host Parallel: None") endif() @@ -244,6 +246,10 @@ if(KOKKOS_CMAKE_VERBOSE) message(STATUS " KOKKOS_MEMKIND_DIR: ${KOKKOS_MEMKIND_DIR}") endif() + if(KOKKOS_HPX_DIR) + message(STATUS " KOKKOS_HPX_DIR: ${KOKKOS_HPX_DIR}") + endif() + message(STATUS "") message(STATUS "Final kokkos settings variable:") message(STATUS " ${KOKKOS_SETTINGS}") diff --git a/lib/kokkos/cmake/tribits.cmake b/lib/kokkos/cmake/tribits.cmake index f8eebc29f8..1f467f0662 100644 --- a/lib/kokkos/cmake/tribits.cmake +++ b/lib/kokkos/cmake/tribits.cmake @@ -9,6 +9,10 @@ IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_OpenMP) SET(${PROJECT_NAME}_ENABLE_OpenMP OFF) ENDIF() +IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_HPX) + SET(${PROJECT_NAME}_ENABLE_HPX OFF) +ENDIF() + IF(NOT DEFINED ${PROJECT_NAME}_ENABLE_DEBUG) SET(${PROJECT_NAME}_ENABLE_DEBUG OFF) ENDIF() @@ -309,6 +313,10 @@ ENDFUNCTION() FUNCTION(TRIBITS_TPL_TENTATIVELY_ENABLE) ENDFUNCTION() +FUNCTION(TRIBITS_ADD_ADVANCED_TEST) + # TODO Write this +ENDFUNCTION() + FUNCTION(TRIBITS_ADD_EXECUTABLE_AND_TEST EXE_NAME) SET(options STANDARD_PASS_OUTPUT WILL_FAIL) diff --git a/lib/kokkos/containers/cmake/Dependencies.cmake b/lib/kokkos/containers/cmake/Dependencies.cmake index 1d71d8af34..5e29157369 100644 --- a/lib/kokkos/containers/cmake/Dependencies.cmake +++ b/lib/kokkos/containers/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( LIB_REQUIRED_PACKAGES KokkosCore - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/containers/performance_tests/CMakeLists.txt b/lib/kokkos/containers/performance_tests/CMakeLists.txt index 1203a8bd81..3c6584bc34 100644 --- a/lib/kokkos/containers/performance_tests/CMakeLists.txt +++ b/lib/kokkos/containers/performance_tests/CMakeLists.txt @@ -24,6 +24,10 @@ IF(Kokkos_ENABLE_OpenMP) LIST( APPEND SOURCES TestOpenMP.cpp) ENDIF() +IF(Kokkos_ENABLE_HPX) + LIST( APPEND SOURCES TestHPX.cpp) +ENDIF() + # Per #374, we always want to build this test, but we only want to run # it as a PERFORMANCE test. That's why we separate building the test # from running the test. diff --git a/lib/kokkos/containers/performance_tests/Makefile b/lib/kokkos/containers/performance_tests/Makefile index ebed75ccd6..f309a220d0 100644 --- a/lib/kokkos/containers/performance_tests/Makefile +++ b/lib/kokkos/containers/performance_tests/Makefile @@ -49,6 +49,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = TestHPX.o TestMain.o gtest-all.o + TARGETS += KokkosContainers_PerformanceTest_HPX + TEST_TARGETS += test-hpx +endif + KokkosContainers_PerformanceTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_Cuda @@ -61,6 +67,9 @@ KokkosContainers_PerformanceTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosContainers_PerformanceTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_OpenMP +KokkosContainers_PerformanceTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(KOKKOS_LDFLAGS) $(LDFLAGS) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) -o KokkosContainers_PerformanceTest_HPX + test-cuda: KokkosContainers_PerformanceTest_Cuda ./KokkosContainers_PerformanceTest_Cuda @@ -73,6 +82,9 @@ test-threads: KokkosContainers_PerformanceTest_Threads test-openmp: KokkosContainers_PerformanceTest_OpenMP ./KokkosContainers_PerformanceTest_OpenMP +test-hpx: KokkosContainers_PerformanceTest_HPX + ./KokkosContainers_PerformanceTest_HPX + build_all: $(TARGETS) test: $(TEST_TARGETS) diff --git a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp index 0d2fae32a3..db6274e057 100644 --- a/lib/kokkos/containers/performance_tests/TestDynRankView.hpp +++ b/lib/kokkos/containers/performance_tests/TestDynRankView.hpp @@ -197,7 +197,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_view = timer.seconds(); std::cout << " View time (init only): " << elapsed_time_view << std::endl; @@ -205,7 +205,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::View sumview("sumview",par_size); Kokkos::parallel_for( policy , typename FunctorType::SumComputationTest(testview, sumview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_compview = timer.seconds(); std::cout << " View sum computation time: " << elapsed_time_view << std::endl; @@ -215,7 +215,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::parallel_for( policy , FunctorStrideType(teststrideview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_strideview = timer.seconds(); std::cout << " Strided View time (init only): " << elapsed_time_strideview << std::endl; } @@ -226,7 +226,7 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_view_rank7 = timer.seconds(); std::cout << " View Rank7 time (init only): " << elapsed_time_view_rank7 << std::endl; } @@ -237,14 +237,14 @@ void test_dynrankview_op_perf( const int par_size ) timer.reset(); Kokkos::RangePolicy policy(0,par_size); Kokkos::parallel_for( policy , FunctorType(testdrview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_drview = timer.seconds(); std::cout << " DynRankView time (init only): " << elapsed_time_drview << std::endl; timer.reset(); Kokkos::DynRankView sumview("sumview",par_size); Kokkos::parallel_for( policy , typename FunctorType::SumComputationTest(testdrview, sumview) ); - DeviceType::fence(); + DeviceType().fence(); elapsed_time_compdrview = timer.seconds(); std::cout << " DynRankView sum computation time: " << elapsed_time_compdrview << std::endl; diff --git a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp index dcaca776be..98997b3239 100644 --- a/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp +++ b/lib/kokkos/containers/performance_tests/TestGlobal2LocalIds.hpp @@ -192,7 +192,7 @@ void test_global_to_local_ids(unsigned num_ids) { generate_ids gen(local_2_global); } - Device::fence(); + Device().fence(); // generate elasped_time = timer.seconds(); std::cout << elasped_time << ", "; @@ -201,7 +201,7 @@ void test_global_to_local_ids(unsigned num_ids) { fill_map fill(global_2_local, local_2_global); } - Device::fence(); + Device().fence(); // fill elasped_time = timer.seconds(); @@ -214,7 +214,7 @@ void test_global_to_local_ids(unsigned num_ids) { find_test find(global_2_local, local_2_global,num_errors); } - Device::fence(); + Device().fence(); // find elasped_time = timer.seconds(); diff --git a/lib/kokkos/containers/performance_tests/TestHPX.cpp b/lib/kokkos/containers/performance_tests/TestHPX.cpp new file mode 100644 index 0000000000..0f43377cee --- /dev/null +++ b/lib/kokkos/containers/performance_tests/TestHPX.cpp @@ -0,0 +1,130 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#if defined( KOKKOS_ENABLE_HPX ) + +#include + +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + + +namespace Performance { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() + { + std::cout << std::setprecision(5) << std::scientific; + + Kokkos::initialize(); + Kokkos::print_configuration( std::cout ); + } + + static void TearDownTestCase() + { + Kokkos::finalize(); + } +}; + +TEST_F( hpx, dynrankview_perf ) +{ + std::cout << "HPX" << std::endl; + std::cout << " DynRankView vs View: Initialization Only " << std::endl; + test_dynrankview_op_perf( 8192 ); +} + +TEST_F( hpx, global_2_local) +{ + std::cout << "HPX" << std::endl; + std::cout << "size, create, generate, fill, find" << std::endl; + for (unsigned i=Performance::begin_id_size; i<=Performance::end_id_size; i *= Performance::id_step) + test_global_to_local_ids(i); +} + +TEST_F( hpx, unordered_map_performance_near) +{ + unsigned num_hpx = 4; + std::ostringstream base_file_name; + base_file_name << "hpx-" << num_hpx << "-near"; + Perf::run_performance_tests(base_file_name.str()); +} + +TEST_F( hpx, unordered_map_performance_far) +{ + unsigned num_hpx = 4; + std::ostringstream base_file_name; + base_file_name << "hpx-" << num_hpx << "-far"; + Perf::run_performance_tests(base_file_name.str()); +} + +TEST_F( hpx, scatter_view) +{ + std::cout << "ScatterView data-duplicated test:\n"; + Perf::test_scatter_view(10, 1000 * 1000); +//std::cout << "ScatterView atomics test:\n"; +//Perf::test_scatter_view(10, 1000 * 1000); +} + +} // namespace test +#else +void KOKKOS_CONTAINERS_PERFORMANCE_TESTS_TESTHPX_PREVENT_EMPTY_LINK_ERROR() {} +#endif + diff --git a/lib/kokkos/containers/performance_tests/TestScatterView.hpp b/lib/kokkos/containers/performance_tests/TestScatterView.hpp index 03129d2b09..bd9121bb82 100644 --- a/lib/kokkos/containers/performance_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/performance_tests/TestScatterView.hpp @@ -83,6 +83,7 @@ void test_scatter_view(int m, int n) for (int k = 0; k < m; ++k) { Kokkos::parallel_for(policy, f2, "hand_coded_duplicate_scatter_view_test"); } + Kokkos::fence(); auto t = timer.seconds(); std::cout << "hand-coded test took " << t << " seconds\n"; } @@ -101,6 +102,7 @@ void test_scatter_view(int m, int n) for (int k = 0; k < m; ++k) { Kokkos::parallel_for(policy, f, "scatter_view_test"); } + Kokkos::fence(); auto t = timer.seconds(); std::cout << "test took " << t << " seconds\n"; } diff --git a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp index e8734b259d..8d09281ed3 100644 --- a/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp +++ b/lib/kokkos/containers/performance_tests/TestUnorderedMapPerformance.hpp @@ -108,7 +108,7 @@ struct UnorderedMapTest std::cout << std::setprecision(2) << std::fixed << std::setw(5) << (1e9*(seconds/(inserts))) << "; " << std::flush; histogram.calculate(); - Device::fence(); + Device().fence(); } void print(std::ostream & metrics_out, std::ostream & length_out, std::ostream & distance_out, std::ostream & block_distance_out) @@ -236,7 +236,7 @@ void run_performance_tests(std::string const & base_file_name) uint32_t inserts = static_cast(test_ratios[j]*(capacity)); std::cout << capacity << std::flush; UnorderedMapTest test(capacity, inserts*collisions[i], collisions[i]); - Device::fence(); + Device().fence(); test.print(metrics_out, length_out, distance_out, block_distance_out); } std::cout << "\b\b " << std::endl; diff --git a/lib/kokkos/containers/src/Kokkos_Bitset.hpp b/lib/kokkos/containers/src/Kokkos_Bitset.hpp index bfe8080f3b..4d78430fc6 100644 --- a/lib/kokkos/containers/src/Kokkos_Bitset.hpp +++ b/lib/kokkos/containers/src/Kokkos_Bitset.hpp @@ -107,22 +107,20 @@ public: } } - /// assignment - Bitset & operator = (Bitset const & rhs) - { - this->m_size = rhs.m_size; - this->m_last_block_mask = rhs.m_last_block_mask; - this->m_blocks = rhs.m_blocks; + KOKKOS_INLINE_FUNCTION + Bitset (const Bitset&) = default; - return *this; - } + KOKKOS_INLINE_FUNCTION + Bitset& operator= (const Bitset&) = default; - /// copy constructor - Bitset( Bitset const & rhs) - : m_size( rhs.m_size ) - , m_last_block_mask( rhs.m_last_block_mask ) - , m_blocks( rhs.m_blocks ) - {} + KOKKOS_INLINE_FUNCTION + Bitset (Bitset&&) = default; + + KOKKOS_INLINE_FUNCTION + Bitset& operator= (Bitset&&) = default; + + KOKKOS_INLINE_FUNCTION + ~Bitset () = default; /// number of bits in the set /// can be call from the host or the device diff --git a/lib/kokkos/containers/src/Kokkos_DualView.hpp b/lib/kokkos/containers/src/Kokkos_DualView.hpp index f6631a4149..d9b14d67a2 100644 --- a/lib/kokkos/containers/src/Kokkos_DualView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DualView.hpp @@ -484,8 +484,8 @@ public: } } if(std::is_same::value) { - t_dev::execution_space::fence(); - t_host::execution_space::fence(); + typename t_dev::execution_space().fence(); + typename t_host::execution_space().fence(); } } diff --git a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp index 3f284e6a8d..d1e6704a57 100644 --- a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp @@ -75,7 +75,7 @@ struct DynRankDimTraits { , const size_t N4 , const size_t N5 , const size_t N6 - , const size_t N7 ) + , const size_t /* N7 */) { return ( (N6 == unspecified && N5 == unspecified && N4 == unspecified && N3 == unspecified && N2 == unspecified && N1 == unspecified && N0 == unspecified) ? 0 @@ -106,7 +106,7 @@ struct DynRankDimTraits { // Extra overload to match that for specialize types v2 template KOKKOS_INLINE_FUNCTION - static size_t computeRank( const Kokkos::Impl::ViewCtorProp& prop, const Layout& layout ) + static size_t computeRank( const Kokkos::Impl::ViewCtorProp& /* prop */, const Layout& layout ) { return computeRank(layout); } @@ -155,7 +155,7 @@ struct DynRankDimTraits { // Extra overload to match that for specialize types template KOKKOS_INLINE_FUNCTION - static typename std::enable_if< (std::is_same::value || std::is_same::value || std::is_same::value) , typename Traits::array_layout >::type createLayout( const Kokkos::Impl::ViewCtorProp& prop, const typename Traits::array_layout& layout ) + static typename std::enable_if< (std::is_same::value || std::is_same::value || std::is_same::value) , typename Traits::array_layout >::type createLayout( const Kokkos::Impl::ViewCtorProp& /* prop */, const typename Traits::array_layout& layout ) { return createLayout( layout ); } @@ -655,7 +655,7 @@ public: const size_t dim_scalar = m_map.dimension_scalar(); const size_t bytes = this->span() / dim_scalar; - typedef Kokkos::View > tmp_view_type; + typedef Kokkos::View > tmp_view_type; tmp_view_type rankone_view(this->data(), bytes, dim_scalar); return rankone_view(i0); } @@ -1060,7 +1060,7 @@ public: } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -1070,18 +1070,18 @@ public: // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , Impl::DynRankDimTraits::template createLayout(arg_prop, arg_layout) ); + record = m_map.allocate_shared( prop_copy, Impl::DynRankDimTraits::template createLayout(arg_prop, arg_layout) ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ @@ -1609,7 +1609,7 @@ struct DynRankViewFill { closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; @@ -1650,6 +1650,7 @@ struct DynRankViewRemap { typedef Kokkos::RangePolicy< ExecSpace > Policy ; const Kokkos::Impl::ParallelFor< DynRankViewRemap , Policy > closure( *this , Policy( 0 , n0 ) ); closure.execute(); + // Kokkos::fence(); // ?? } KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp index ab782a82ad..37d56e7cfb 100644 --- a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp @@ -288,8 +288,8 @@ public: >::type resize_serial( IntType const & n ) { - typedef typename traits::value_type value_type ; - typedef value_type * value_pointer_type ; + typedef typename traits::value_type local_value_type ; + typedef local_value_type * value_pointer_type ; const uintptr_t NC = ( n + m_chunk_mask ) >> m_chunk_shift ; // New total number of chunks needed for resize @@ -304,8 +304,8 @@ public: if ( *pc < NC ) { while ( *pc < NC ) { m_chunks[*pc] = reinterpret_cast - ( - typename traits::memory_space().allocate( sizeof(value_type) << m_chunk_shift ) + ( + typename traits::memory_space().allocate( sizeof(local_value_type) << m_chunk_shift ) ); ++*pc ; } @@ -314,7 +314,7 @@ public: while ( NC + 1 <= *pc ) { --*pc ; typename traits::memory_space().deallocate( m_chunks[*pc] - , sizeof(value_type) << m_chunk_shift ); + , sizeof(local_value_type) << m_chunk_shift ); m_chunks[*pc] = 0 ; } } @@ -376,8 +376,8 @@ public: closure.execute(); - traits::execution_space::fence(); - //Impl::ChunkArraySpace< typename traits::memory_space >::memory_space::execution_space::fence(); + typename traits::execution_space().fence(); + //Impl::ChunkArraySpace< typename traits::memory_space >::memory_space::execution_space().fence(); } void construct_shared_allocation() diff --git a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp index b614764ee7..4ce1f4d84f 100644 --- a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp +++ b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp @@ -202,8 +202,8 @@ namespace Kokkos { template ::value, iType>::type = 0> KOKKOS_INLINE_FUNCTION - int64_t begin(const iType dimension) const { - return dimension < Rank ? m_begins[dimension] : 0; + int64_t begin(const iType local_dimension) const { + return local_dimension < Rank ? m_begins[local_dimension] : 0; } KOKKOS_INLINE_FUNCTION @@ -211,7 +211,9 @@ namespace Kokkos { template ::value, iType>::type = 0> KOKKOS_INLINE_FUNCTION - int64_t end(const iType dimension) const {return begin(dimension) + m_map.extent(dimension);} + int64_t end(const iType local_dimension) const { + return begin(local_dimension) + m_map.extent(local_dimension); + } private: @@ -1068,7 +1070,7 @@ namespace Kokkos { } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -1078,18 +1080,18 @@ namespace Kokkos { // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , arg_layout ); + record = m_map.allocate_shared( prop_copy , arg_layout ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ diff --git a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp index 8e56857887..a8c05e3f36 100644 --- a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp +++ b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp @@ -57,9 +57,16 @@ namespace Kokkos { namespace Experimental { -//TODO: replace this enum with the Kokkos::Sum, etc reducers for parallel_reduce +/* + * Reduction Type list + * - These corresponds to subset of the reducers in parallel_reduce + * - See Implementations of ScatterValue for details. + */ enum : int { ScatterSum, + ScatterProd, + ScatterMax, + ScatterMin, }; enum : int { @@ -114,6 +121,21 @@ struct DefaultContribution +struct DefaultDuplication { + enum : int { value = Kokkos::Experimental::ScatterDuplicated }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterAtomic }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterNonAtomic }; +}; +#endif + #ifdef KOKKOS_ENABLE_THREADS template <> struct DefaultDuplication { @@ -144,39 +166,277 @@ struct DefaultContribution is the object returned by the access operator() of ScatterAccess, + This class inherits from the Sum<> reducer and it wraps join(dest, src) with convenient operator+=, etc. + Note the addition of update(ValueType const& rhs) and reset() so that all reducers can have common functions + See ReduceDuplicates and ResetDuplicates ) */ template struct ScatterValue; template -struct ScatterValue { +struct ScatterValue : + Sum { public: - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : value( value_in ) {} - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : value( other.value ) {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Sum(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Sum(other.reference()) + {} KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { - value += rhs; + this->join( this->reference(), rhs ); } KOKKOS_FORCEINLINE_FUNCTION void operator-=(ValueType const& rhs) { - value -= rhs; + this->join( this->reference(), -rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); } - private: - ValueType& value; }; +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps Kokkos::atomic_add with convenient + operator+=, etc. This version also has the update(rhs) and reset() functions. */ template -struct ScatterValue { +struct ScatterValue : + Sum { public: - KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : value( value_in ) {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Sum(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { - Kokkos::atomic_add(&value, rhs); + this->join(this->reference(), rhs); } KOKKOS_FORCEINLINE_FUNCTION void operator-=(ValueType const& rhs) { - Kokkos::atomic_add(&value, -rhs); + this->join(this->reference(), -rhs); } - private: - ValueType& value; + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + Kokkos::atomic_add(&dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + Kokkos::atomic_add(&dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() of ScatterAccess, + This class inherits from the Prod<> reducer and it wraps join(dest, src) with convenient operator*=, etc. + Note the addition of update(ValueType const& rhs) and reset() so that all reducers can have common functions + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Prod { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Prod(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Prod(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void operator/=(ValueType const& rhs) { + this->join( this->reference(), static_cast(1)/rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_prod with convenient + operator*=, etc. atomic_prod uses the atomic_compare_exchange. This version also has the update(rhs) and reset() functions. */ +template +struct ScatterValue : + Prod { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Prod(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { + this->join(this->reference(), rhs); + } + KOKKOS_FORCEINLINE_FUNCTION void operator/=(ValueType const& rhs) { + this->join(this->reference(), static_cast(1)/rhs); + } + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_prod(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = dest_old * src; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_prod(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_prod(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + +}; + +/* ScatterValue is the object returned by the access operator() of ScatterAccess, + This class inherits from the Min<> reducer and it wraps join(dest, src) with convenient update(rhs). + Note the addition of update(ValueType const& rhs) and reset() are so that all reducers can have a common update function + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Min { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Min(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Min(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_min with the update(rhs) + function. atomic_min uses the atomic_compare_exchange. This version also has the reset() function */ +template +struct ScatterValue : + Min { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Min(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_min(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = ( dest_old > src ) ? src : dest_old; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_min(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_min(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + +}; + +/* ScatterValue is the object returned by the access operataor() of ScatterAccess, + This class inherits from the Max<> reducer and it wraps join(dest, src) with convenient update(rhs). + Note the addition of update(ValueType const& rhs) and reset() are so that all reducers can have a common update function + See ReduceDuplicates and ResetDuplicates ) */ +template +struct ScatterValue : + Max { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Max(value_in) + {} + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) : + Max(other.reference()) + {} + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } +}; + +/* ScatterValue is the object returned by the access operator() + * of ScatterAccess, similar to that returned by an Atomic View, it wraps and atomic_max with the update(rhs) + function. atomic_max uses the atomic_compare_exchange. This version also has the reset() function */ +template +struct ScatterValue : + Max { + public: + KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) : + Max(value_in) + {} + + KOKKOS_FORCEINLINE_FUNCTION + void atomic_max(ValueType & dest, const ValueType& src) const { + + bool success = false; + while(!success) { + ValueType dest_old = dest; + ValueType dest_new = ( dest_old < src ) ? src : dest_old; + dest_new = Kokkos::atomic_compare_exchange(&dest,dest_old,dest_new); + success = ( (dest_new - dest_old)/dest_old <= 1e-15 ); + } + } + + KOKKOS_INLINE_FUNCTION + void join(ValueType& dest, const ValueType& src) const { + atomic_max(dest, src); + } + + KOKKOS_INLINE_FUNCTION + void join(volatile ValueType& dest, const volatile ValueType& src) const { + atomic_max(dest, src); + } + + KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { + this->join( this->reference(), rhs ); + } + KOKKOS_FORCEINLINE_FUNCTION void reset() { + this->init( this->reference() ); + } + }; /* DuplicatedDataType, given a View DataType, will create a new DataType @@ -226,6 +486,18 @@ struct DuplicatedDataType { typedef typename DuplicatedDataType::value_type* value_type; }; +/* Insert integer argument pack into array */ + +template +void args_to_array(size_t* array, int pos, T dim0) { + array[pos] = dim0; +} +template +void args_to_array(size_t* array, int pos, T dim0, Dims ... dims) { + array[pos] = dim0; + args_to_array(array,pos+1,dims...); +} + /* Slice is just responsible for stuffing the correct number of Kokkos::ALL arguments on the correct side of the index in a call to subview() to get a subview where the index specified is the largest-stride one. */ @@ -304,21 +576,26 @@ struct ReduceDuplicatesBase { } }; -template -struct ReduceDuplicates : - public ReduceDuplicatesBase +/* ReduceDuplicates -- Perform reduction on destination array using strided source + * Use ScatterValue<> specific to operation to wrap destination array so that + * the reduction operation can be accessed via the update(rhs) function */ +template +struct ReduceDuplicates : + public ReduceDuplicatesBase { - typedef ReduceDuplicatesBase Base; + typedef ReduceDuplicatesBase Base; ReduceDuplicates(ValueType const* src_in, ValueType* dst_in, size_t stride_in, size_t start_in, size_t n_in, std::string const& name): Base(src_in, dst_in, stride_in, start_in, n_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { for (size_t j = Base::start; j < Base::n; ++j) { - Base::dst[i] += Base::src[i + Base::stride * j]; + ScatterValue sv(Base::dst[i]); + sv.update( Base::src[i + Base::stride * j] ); } } }; + template struct ResetDuplicates; @@ -347,19 +624,24 @@ struct ResetDuplicatesBase { } }; -template -struct ResetDuplicates : - public ResetDuplicatesBase +/* ResetDuplicates -- Perform reset on destination array + * Use ScatterValue<> specific to operation to wrap destination array so that + * the reset operation can be accessed via the reset() function */ +template +struct ResetDuplicates : + public ResetDuplicatesBase { - typedef ResetDuplicatesBase Base; + typedef ResetDuplicatesBase Base; ResetDuplicates(ValueType* data_in, size_t size_in, std::string const& name): Base(data_in, size_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { - Base::data[i] = Kokkos::reduction_identity::sum(); + ScatterValue sv(Base::data[i]); + sv.reset(); } }; + }}} // Kokkos::Impl::Experimental namespace Kokkos { @@ -519,12 +801,22 @@ public: typedef Kokkos::Impl::Experimental::ScatterValue< original_value_type, Op, override_contribution> value_type; + KOKKOS_INLINE_FUNCTION + ScatterAccess() : + view(view_type()) { + } + KOKKOS_INLINE_FUNCTION ScatterAccess(view_type const& view_in) : view(view_in) { } + KOKKOS_INLINE_FUNCTION + ~ScatterAccess() + { + } + template KOKKOS_FORCEINLINE_FUNCTION value_type operator()(Args ... args) const { @@ -608,7 +900,7 @@ public: } template - inline + KOKKOS_FORCEINLINE_FUNCTION ScatterAccess access() const { return ScatterAccess{*this}; @@ -729,14 +1021,14 @@ public: : unique_token() { size_t arg_N[8] = { - original_view.extent(0), - original_view.extent(1), - original_view.extent(2), - original_view.extent(3), - original_view.extent(4), - original_view.extent(5), - original_view.extent(6), - 0 + original_view.rank>0?original_view.extent(0):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>1?original_view.extent(1):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>2?original_view.extent(2):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>3?original_view.extent(3):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>4?original_view.extent(4):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>5?original_view.extent(5):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>6?original_view.extent(6):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + KOKKOS_IMPL_CTOR_DEFAULT_ARG }; arg_N[internal_view_type::rank - 1] = unique_token.size(); internal_view = internal_view_type( @@ -748,14 +1040,28 @@ public: } template - ScatterView(std::string const& name, Dims ... dims) - : internal_view(Kokkos::ViewAllocateWithoutInitializing(name), dims ..., unique_token.size()) - { + ScatterView(std::string const& name, Dims ... dims) { + original_view_type original_view; + size_t arg_N[8] = { + original_view.rank>0?original_view.static_extent(0):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>1?original_view.static_extent(1):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>2?original_view.static_extent(2):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>3?original_view.static_extent(3):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>4?original_view.static_extent(4):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>5?original_view.static_extent(5):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + original_view.rank>6?original_view.static_extent(6):KOKKOS_IMPL_CTOR_DEFAULT_ARG, + KOKKOS_IMPL_CTOR_DEFAULT_ARG + }; + Kokkos::Impl::Experimental::args_to_array(arg_N,0,dims ...); + arg_N[internal_view_type::rank - 1] = unique_token.size(); + internal_view = internal_view_type(Kokkos::ViewAllocateWithoutInitializing(name), + arg_N[0], arg_N[1], arg_N[2], arg_N[3], + arg_N[4], arg_N[5], arg_N[6], arg_N[7]); reset(); } template - inline + KOKKOS_FORCEINLINE_FUNCTION ScatterAccess access() const { return ScatterAccess{*this}; @@ -770,9 +1076,13 @@ public: } template - void contribute_into(View const& dest) const + void contribute_into(View const& dest) const { - typedef View dest_type; + typedef View dest_type; + static_assert(std::is_same< + typename dest_type::value_type, + typename original_view_type::non_const_value_type>::value, + "ScatterView deep_copy destination has wrong value_type"); static_assert(std::is_same< typename dest_type::array_layout, Kokkos::LayoutLeft>::value, @@ -891,12 +1201,14 @@ public: typedef Kokkos::Impl::Experimental::ScatterValue< original_value_type, Op, override_contribution> value_type; - inline ScatterAccess(view_type const& view_in) + KOKKOS_FORCEINLINE_FUNCTION + ScatterAccess(view_type const& view_in) : view(view_in) , thread_id(view_in.unique_token.acquire()) { } - inline ~ScatterAccess() { + KOKKOS_FORCEINLINE_FUNCTION + ~ScatterAccess() { if (thread_id != ~thread_id_type(0)) view.unique_token.release(thread_id); } @@ -926,8 +1238,9 @@ private: public: // do need to allow moves though, for the common // auto b = a.access(); - // that assignments turns into a move constructor call - inline ScatterAccess(ScatterAccess&& other) + // that assignments turns into a move constructor call + KOKKOS_FORCEINLINE_FUNCTION + ScatterAccess(ScatterAccess&& other) : view(other.view) , thread_id(other.thread_id) { diff --git a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp index 64601e6b59..aed723288f 100644 --- a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp +++ b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp @@ -437,9 +437,9 @@ public: { bool result = !erasable(); if (is_insertable_map && result) { - execution_space::fence(); + execution_space().fence(); set_flag(erasable_idx); - execution_space::fence(); + execution_space().fence(); } return result; } @@ -448,10 +448,10 @@ public: { bool result = erasable(); if (is_insertable_map && result) { - execution_space::fence(); + execution_space().fence(); Impl::UnorderedMapErase f(*this); f.apply(); - execution_space::fence(); + execution_space().fence(); reset_flag(erasable_idx); } return result; diff --git a/lib/kokkos/containers/src/Kokkos_Vector.hpp b/lib/kokkos/containers/src/Kokkos_Vector.hpp index 76c515941e..9b151d9505 100644 --- a/lib/kokkos/containers/src/Kokkos_Vector.hpp +++ b/lib/kokkos/containers/src/Kokkos_Vector.hpp @@ -121,12 +121,12 @@ public: if( DV::template need_sync() ) { set_functor_host f(DV::h_view,val); parallel_for(n,f); - DV::t_host::execution_space::fence(); + typename DV::t_host::execution_space().fence(); DV::template modify(); } else { set_functor f(DV::d_view,val); parallel_for(n,f); - DV::t_dev::execution_space::fence(); + typename DV::t_dev::execution_space().fence(); DV::template modify(); } } diff --git a/lib/kokkos/containers/unit_tests/CMakeLists.txt b/lib/kokkos/containers/unit_tests/CMakeLists.txt index 0f94afec8c..8564bd9ddd 100644 --- a/lib/kokkos/containers/unit_tests/CMakeLists.txt +++ b/lib/kokkos/containers/unit_tests/CMakeLists.txt @@ -86,6 +86,31 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( ) ENDIF() +IF(Kokkos_ENABLE_HPX) +TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_HPX + SOURCES + UnitTestMain.cpp + hpx/TestHPX_BitSet.cpp + hpx/TestHPX_DualView.cpp + hpx/TestHPX_DynamicView.cpp + hpx/TestHPX_DynRankViewAPI_generic.cpp + hpx/TestHPX_DynRankViewAPI_rank12345.cpp + hpx/TestHPX_DynRankViewAPI_rank67.cpp + hpx/TestHPX_ErrorReporter.cpp + hpx/TestHPX_OffsetView.cpp + hpx/TestHPX_ScatterView.cpp + hpx/TestHPX_StaticCrsGraph.cpp + hpx/TestHPX_UnorderedMap.cpp + hpx/TestHPX_Vector.cpp + hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) +ENDIF() + IF(Kokkos_ENABLE_Cuda) TRIBITS_ADD_EXECUTABLE_AND_TEST( UnitTest_Cuda diff --git a/lib/kokkos/containers/unit_tests/Makefile b/lib/kokkos/containers/unit_tests/Makefile index c0e5d2820c..a7e0233f8a 100644 --- a/lib/kokkos/containers/unit_tests/Makefile +++ b/lib/kokkos/containers/unit_tests/Makefile @@ -4,6 +4,7 @@ GTEST_PATH = ../../TPL/gtest vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/openmp +vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/hpx vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/serial vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/threads vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/rocm @@ -106,6 +107,25 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) TEST_TARGETS += test-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = UnitTestMain.o gtest-all.o + OBJ_HPX += TestHPX_BitSet.o + OBJ_HPX += TestHPX_DualView.o + OBJ_HPX += TestHPX_DynamicView.o + OBJ_HPX += TestHPX_DynRankViewAPI_generic.o + OBJ_HPX += TestHPX_DynRankViewAPI_rank12345.o + OBJ_HPX += TestHPX_DynRankViewAPI_rank67.o + OBJ_HPX += TestHPX_ErrorReporter.o + OBJ_HPX += TestHPX_OffsetView.o + OBJ_HPX += TestHPX_ScatterView.o + OBJ_HPX += TestHPX_StaticCrsGraph.o + OBJ_HPX += TestHPX_UnorderedMap.o + OBJ_HPX += TestHPX_Vector.o + OBJ_HPX += TestHPX_ViewCtorPropEmbeddedDim.o + TARGETS += KokkosContainers_UnitTest_HPX + TEST_TARGETS += test-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = UnitTestMain.o gtest-all.o OBJ_SERIAL += TestSerial_BitSet.o @@ -137,6 +157,9 @@ KokkosContainers_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosContainers_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_OpenMP +KokkosContainers_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_HPX + KokkosContainers_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_SERIAL) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_Serial @@ -152,6 +175,9 @@ test-threads: KokkosContainers_UnitTest_Threads test-openmp: KokkosContainers_UnitTest_OpenMP ./KokkosContainers_UnitTest_OpenMP +test-hpx: KokkosContainers_UnitTest_HPX + ./KokkosContainers_UnitTest_HPX + test-serial: KokkosContainers_UnitTest_Serial ./KokkosContainers_UnitTest_Serial diff --git a/lib/kokkos/containers/unit_tests/TestBitset.hpp b/lib/kokkos/containers/unit_tests/TestBitset.hpp index 6200124644..371c0288b1 100644 --- a/lib/kokkos/containers/unit_tests/TestBitset.hpp +++ b/lib/kokkos/containers/unit_tests/TestBitset.hpp @@ -66,7 +66,7 @@ struct TestBitset unsigned testit(unsigned collisions) { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size()*collisions, *this, count); @@ -114,7 +114,7 @@ struct TestBitsetTest unsigned testit() { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size(), *this, count); @@ -151,7 +151,7 @@ struct TestBitsetAny unsigned testit() { - execution_space::fence(); + execution_space().fence(); unsigned count = 0; Kokkos::parallel_reduce( m_bitset.size(), *this, count); diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp index 6684a55452..13e56c9f8d 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp @@ -1276,6 +1276,7 @@ public: Kokkos::deep_copy( dx , hx ); Kokkos::deep_copy( dy , dx ); Kokkos::deep_copy( hy , dy ); + Kokkos::fence(); for ( size_t ip = 0 ; ip < N0 ; ++ip ) { for ( size_t i1 = 0 ; i1 < N1 ; ++i1 ) { @@ -1286,6 +1287,7 @@ public: Kokkos::deep_copy( dx , T(0) ); Kokkos::deep_copy( hx , dx ); + Kokkos::fence(); for ( size_t ip = 0 ; ip < N0 ; ++ip ) { for ( size_t i1 = 0 ; i1 < N1 ; ++i1 ) { diff --git a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp index ecb7542232..7e48089b43 100644 --- a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp +++ b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp @@ -162,6 +162,7 @@ struct ErrorReporterDriver : public ErrorReporterDriverBase void execute(int reporter_capacity, int test_size) { Kokkos::parallel_for(Kokkos::RangePolicy(0,test_size), *this); + Kokkos::fence(); driver_base::check_expectations(reporter_capacity, test_size); } @@ -194,6 +195,7 @@ struct ErrorReporterDriverUseLambda : public ErrorReporterDriverBase driver_base::m_errorReporter.add_report(work_idx, report); } }); + Kokkos::fence(); driver_base::check_expectations(reporter_capacity, test_size); } diff --git a/lib/kokkos/containers/unit_tests/TestScatterView.hpp b/lib/kokkos/containers/unit_tests/TestScatterView.hpp index d402a91b9f..a9d97b32f3 100644 --- a/lib/kokkos/containers/unit_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/unit_tests/TestScatterView.hpp @@ -48,79 +48,387 @@ namespace Test { +template +struct test_scatter_view_impl_cls; + template -void test_scatter_view_config(int n) +struct test_scatter_view_impl_cls { - Kokkos::View original_view("original_view", n); - { - auto scatter_view = Kokkos::Experimental::create_scatter_view - < Kokkos::Experimental::ScatterSum - , duplication - , contribution - > (original_view); -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - auto policy = Kokkos::RangePolicy(0, n); - auto f = KOKKOS_LAMBDA(int i) { +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterSum + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 0.0; + host_view(i, 1) = 0.0; + host_view(i, 2) = 0.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Sum"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { auto scatter_access = scatter_view.access(); auto scatter_access_atomic = scatter_view.template access(); for (int j = 0; j < 10; ++j) { - auto k = (i + j) % n; + auto k = (i + j) % scatterSize; scatter_access(k, 0) += 4.2; scatter_access_atomic(k, 1) += 2.0; scatter_access(k, 2) += 1.0; } - }; - Kokkos::parallel_for(policy, f, "scatter_view_test"); -#endif - Kokkos::Experimental::contribute(original_view, scatter_view); - scatter_view.reset_except(original_view); -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - Kokkos::parallel_for(policy, f, "scatter_view_test"); -#endif - Kokkos::Experimental::contribute(original_view, scatter_view); - } -#if defined( KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA ) - Kokkos::fence(); - auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), original_view); - Kokkos::fence(); - for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { - auto val0 = host_view(i, 0); - auto val1 = host_view(i, 1); - auto val2 = host_view(i, 2); - EXPECT_TRUE(std::fabs((val0 - 84.0) / 84.0) < 1e-15); - EXPECT_TRUE(std::fabs((val1 - 40.0) / 40.0) < 1e-15); - EXPECT_TRUE(std::fabs((val2 - 20.0) / 20.0) < 1e-15); - } -#endif - { - Kokkos::Experimental::ScatterView - < double*[3] - , Layout - , ExecSpace - , Kokkos::Experimental::ScatterSum - , duplication - , contribution - > - persistent_view("persistent", n); - auto result_view = persistent_view.subview(); - contribute(result_view, persistent_view); - } -} + } -template + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 84.0) / 84.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 40.0) / 40.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 20.0) / 20.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterProd + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 1.0; + host_view(i, 1) = 1.0; + host_view(i, 2) = 1.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0) *= 4.0; + scatter_access_atomic(k, 1) *= 2.0; + scatter_access(k, 2) *= 1.0; + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 65536.0) / 65536.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 256.0) / 256.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 1.0) / 1.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterMin + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 999999.0; + host_view(i, 1) = 999999.0; + host_view(i, 2) = 999999.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0).update((double)(j+1)*4); + scatter_access_atomic(k, 1).update((double)(j+1)*2.0); + scatter_access(k, 2).update((double)(j+1)*1.0); + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 4.0) / 4.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 2.0) / 2.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 1.0) / 1.0) < 1e-14); + } + } +}; + + +template +struct test_scatter_view_impl_cls +{ +public: + + typedef Kokkos::Experimental::ScatterView + < double*[3] + , Layout + , ExecSpace + , Kokkos::Experimental::ScatterMax + , duplication + , contribution + > scatter_view_type; + + typedef Kokkos::View orig_view_type; + + + scatter_view_type scatter_view; + int scatterSize; + + test_scatter_view_impl_cls(const scatter_view_type& view){ + scatter_view = view; + scatterSize = 0; + } + + void initialize(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + host_view(i, 0) = 0.0; + host_view(i, 1) = 0.0; + host_view(i, 2) = 0.0; + } + Kokkos::fence(); + Kokkos::deep_copy(orig, host_view); + } + + void run_parallel(int n) { + scatterSize = n; + auto policy = Kokkos::RangePolicy(0, n); + Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); + } + + KOKKOS_INLINE_FUNCTION + void operator()(int i) const { + auto scatter_access = scatter_view.access(); + auto scatter_access_atomic = scatter_view.template access(); + for (int j = 0; j < 4; ++j) { + auto k = (i + j) % scatterSize; + scatter_access(k, 0).update((double)(j+1)*4); + scatter_access_atomic(k, 1).update((double)(j+1)*2.0); + scatter_access(k, 2).update((double)(j+1)*1.0); + } + } + + void validateResults(orig_view_type orig) { + auto host_view = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), orig); + Kokkos::fence(); + for (typename decltype(host_view)::size_type i = 0; i < host_view.extent(0); ++i) { + auto val0 = host_view(i, 0); + auto val1 = host_view(i, 1); + auto val2 = host_view(i, 2); + EXPECT_TRUE(std::fabs((val0 - 16.0) / 16.0) < 1e-14); + EXPECT_TRUE(std::fabs((val1 - 8.0) / 8.0) < 1e-14); + EXPECT_TRUE(std::fabs((val2 - 4.0) / 4.0) < 1e-14); + } + } +}; + + + +template +struct test_scatter_view_config +{ + public: + typedef typename test_scatter_view_impl_cls::scatter_view_type scatter_view_def; + typedef typename test_scatter_view_impl_cls::orig_view_type orig_view_def; + + test_scatter_view_config() { + } + + void run_test(int n) + { + //Test creation via create_scatter_view + { + orig_view_def original_view("original_view", n); + scatter_view_def scatter_view = Kokkos::Experimental::create_scatter_view + < op + , duplication + , contribution + > (original_view); + + test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); + scatter_view_test_impl.initialize(original_view); + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + scatter_view.reset_except(original_view); + + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + Kokkos::fence(); + + scatter_view_test_impl.validateResults(original_view); + + { + scatter_view_def persistent_view("persistent", n); + auto result_view = persistent_view.subview(); + contribute(result_view, persistent_view); + Kokkos::fence(); + } + } + //Test creation via constructor + { + orig_view_def original_view("original_view", n); + scatter_view_def scatter_view(original_view); + + test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); + scatter_view_test_impl.initialize(original_view); + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + scatter_view.reset_except(original_view); + + scatter_view_test_impl.run_parallel(n); + + Kokkos::Experimental::contribute(original_view, scatter_view); + Kokkos::fence(); + + scatter_view_test_impl.validateResults(original_view); + + { + scatter_view_def persistent_view("persistent", n); + auto result_view = persistent_view.subview(); + contribute(result_view, persistent_view); + Kokkos::fence(); + } + } + } + +}; + + +template struct TestDuplicatedScatterView { TestDuplicatedScatterView(int n) { + // ScatterSum test test_scatter_view_config(n); + Kokkos::Experimental::ScatterNonAtomic, + ScatterType> test_sv_right_config; + test_sv_right_config.run_test(n); + test_scatter_view_config test_sv_left_config; + test_sv_left_config.run_test(n); } }; #ifdef KOKKOS_ENABLE_CUDA // disable duplicated instantiation with CUDA until // UniqueToken can support it -template <> -struct TestDuplicatedScatterView { +template +struct TestDuplicatedScatterView { TestDuplicatedScatterView(int) { } }; @@ -129,14 +437,14 @@ struct TestDuplicatedScatterView { #ifdef KOKKOS_ENABLE_ROCM // disable duplicated instantiation with ROCm until // UniqueToken can support it -template <> -struct TestDuplicatedScatterView { +template +struct TestDuplicatedScatterView { TestDuplicatedScatterView(int) { } }; #endif -template +template void test_scatter_view(int n) { // all of these configurations should compile okay, but only some of them are @@ -149,29 +457,47 @@ void test_scatter_view(int n) if (unique_token.size() == 1) { test_scatter_view_config(n); + Kokkos::Experimental::ScatterNonAtomic, + ScatterType> test_sv_config; + test_sv_config.run_test(n); } #ifdef KOKKOS_ENABLE_SERIAL if (!std::is_same::value) { #endif test_scatter_view_config(n); + Kokkos::Experimental::ScatterAtomic, + ScatterType> test_sv_config; + test_sv_config.run_test(n); #ifdef KOKKOS_ENABLE_SERIAL } #endif - - TestDuplicatedScatterView duptest(n); + // with hundreds of threads we were running out of memory. + // limit (n) so that duplication doesn't exceed 8GB + constexpr std::size_t maximum_allowed_total_bytes = 8ull * 1024ull * 1024ull * 1024ull; + std::size_t const maximum_allowed_copy_bytes = maximum_allowed_total_bytes / std::size_t(unique_token.size()); + constexpr std::size_t bytes_per_value = sizeof(double) * 3; + std::size_t const maximum_allowed_copy_values = maximum_allowed_copy_bytes / bytes_per_value; + n = std::min(n, int(maximum_allowed_copy_values)); + TestDuplicatedScatterView duptest(n); } TEST_F( TEST_CATEGORY, scatterview) { #ifndef KOKKOS_ENABLE_ROCM - test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + // tests were timing out in DEBUG mode, reduce the amount of work #ifdef KOKKOS_ENABLE_DEBUG - test_scatter_view(100000); + int big_n = 100 * 1000; #else - test_scatter_view(10000000); + int big_n = 10 * 1000 * 1000; #endif + test_scatter_view(big_n); + test_scatter_view(big_n); + test_scatter_view(big_n); + test_scatter_view(big_n); #endif } diff --git a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp index 426db1dbf0..2d34267df3 100644 --- a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp +++ b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp @@ -69,7 +69,7 @@ struct TestInsert void testit( bool rehash_on_fail = true ) { - execution_space::fence(); + execution_space().fence(); uint32_t failed_count = 0; do { @@ -82,7 +82,7 @@ struct TestInsert } } while (rehash_on_fail && failed_count > 0u); - execution_space::fence(); + execution_space().fence(); } @@ -122,9 +122,9 @@ struct TestInsert void testit() { - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for(m_num_erase, *this); - execution_space::fence(); + execution_space().fence(); } KOKKOS_INLINE_FUNCTION @@ -161,9 +161,9 @@ struct TestInsert void testit(value_type &errors) { - execution_space::execution_space::fence(); + execution_space().fence(); Kokkos::parallel_reduce(m_map.capacity(), *this, errors); - execution_space::execution_space::fence(); + execution_space().fence(); } KOKKOS_INLINE_FUNCTION @@ -247,7 +247,7 @@ void test_failed_insert( uint32_t num_nodes) map_type map(num_nodes); Impl::TestInsert test_insert(map, 2u*num_nodes, 1u); test_insert.testit(false /*don't rehash on fail*/); - Device::execution_space::fence(); + typename Device::execution_space().fence(); EXPECT_TRUE( map.failed_insert() ); } diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp new file mode 100644 index 0000000000..cec24e00c7 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp new file mode 100644 index 0000000000..358b42d1aa --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TEST_HPX_HPP +#define KOKKOS_TEST_HPX_HPP + +#include + +namespace Test { + +class hpx : public ::testing::Test { +protected: + static void SetUpTestCase() { + } + + static void TearDownTestCase() { + } +}; + +} // namespace Test + +#define TEST_CATEGORY hpx +#define TEST_EXECSPACE Kokkos::Experimental::HPX + +#endif diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp new file mode 100644 index 0000000000..80af9dc33a --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp new file mode 100644 index 0000000000..95d49c8acf --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp new file mode 100644 index 0000000000..72e0bc6616 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp new file mode 100644 index 0000000000..5a104f0de2 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp new file mode 100644 index 0000000000..718b322684 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp new file mode 100644 index 0000000000..ea819ae343 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp new file mode 100644 index 0000000000..4d3684923f --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp new file mode 100644 index 0000000000..6a871cc121 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp new file mode 100644 index 0000000000..fbb70a762b --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp new file mode 100644 index 0000000000..7e7aad309f --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp new file mode 100644 index 0000000000..5fb3664197 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp new file mode 100644 index 0000000000..fb9c263c83 --- /dev/null +++ b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + diff --git a/lib/kokkos/core/cmake/Dependencies.cmake b/lib/kokkos/core/cmake/Dependencies.cmake index 8d9872725e..9ad7660bdf 100644 --- a/lib/kokkos/core/cmake/Dependencies.cmake +++ b/lib/kokkos/core/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC QTHREADS DLlib + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC QTHREADS DLlib HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/core/perf_test/CMakeLists.txt b/lib/kokkos/core/perf_test/CMakeLists.txt index d9c0f89413..d92462a357 100644 --- a/lib/kokkos/core/perf_test/CMakeLists.txt +++ b/lib/kokkos/core/perf_test/CMakeLists.txt @@ -47,6 +47,7 @@ TRIBITS_ADD_EXECUTABLE( PerformanceTest_TaskDAG SOURCES test_taskdag.cpp COMM serial mpi + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_TEST( diff --git a/lib/kokkos/core/perf_test/Makefile b/lib/kokkos/core/perf_test/Makefile index a0ce1e2c31..ca98ca6dde 100644 --- a/lib/kokkos/core/perf_test/Makefile +++ b/lib/kokkos/core/perf_test/Makefile @@ -30,6 +30,7 @@ TARGETS = # OBJ_PERF = PerfTestMain.o gtest-all.o +OBJ_PERF += PerfTest_ExecSpacePartitioning.o OBJ_PERF += PerfTestGramSchmidt.o OBJ_PERF += PerfTestHexGrad.o OBJ_PERF += PerfTest_CustomReduction.o diff --git a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp index bb2fb5fce5..ff9bf5a91b 100644 --- a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp +++ b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp @@ -44,6 +44,8 @@ #ifndef KOKKOS_BLAS_KERNELS_HPP #define KOKKOS_BLAS_KERNELS_HPP +#include + namespace Kokkos { template< class ConstVectorType , @@ -123,15 +125,10 @@ struct Dot { typedef typename Device::execution_space execution_space ; - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< Type::Rank > >::type ok_rank ; + static_assert( static_cast(Type::Rank) == static_cast(1), + "Dot static_assert Fail: Rank != 1"); -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename Type::execution_space >::type ok_device ;*/ - typedef double value_type ; #if 1 @@ -164,13 +161,8 @@ struct DotSingle { typedef typename Device::execution_space execution_space ; - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< Type::Rank > >::type ok_rank ; - -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename Type::execution_space >::type ok_device ;*/ + static_assert( static_cast(Type::Rank) == static_cast(1), + "DotSingle static_assert Fail: Rank != 1"); typedef double value_type ; @@ -204,25 +196,11 @@ struct Scale { typedef typename Device::execution_space execution_space ; -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename ScalarType::execution_space >::type - ok_scalar_device ; + static_assert( static_cast(ScalarType::Rank) == static_cast(0), + "Scale static_assert Fail: ScalarType::Rank != 0"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename VectorType::execution_space >::type - ok_vector_device ;*/ - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 0 > , - Impl::unsigned_< ScalarType::Rank > >::type - ok_scalar_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< VectorType::Rank > >::type - ok_vector_rank ; + static_assert( static_cast(VectorType::Rank) == static_cast(1), + "Scale static_assert Fail: VectorType::Rank != 1"); #if 1 typename ScalarType::const_type alpha ; @@ -251,35 +229,14 @@ struct AXPBY { typedef typename Device::execution_space execution_space ; -/* typedef typename - Impl::StaticAssertSame< execution_space , - typename ScalarType::execution_space >::type - ok_scalar_device ; + static_assert( static_cast(ScalarType::Rank) == static_cast(0), + "AXPBY static_assert Fail: ScalarType::Rank != 0"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename ConstVectorType::execution_space >::type - ok_const_vector_device ; + static_assert( static_cast(ConstVectorType::Rank) == static_cast(1), + "AXPBY static_assert Fail: ConstVectorType::Rank != 1"); - typedef typename - Impl::StaticAssertSame< execution_space , - typename VectorType::execution_space >::type - ok_vector_device ;*/ - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 0 > , - Impl::unsigned_< ScalarType::Rank > >::type - ok_scalar_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< ConstVectorType::Rank > >::type - ok_const_vector_rank ; - - typedef typename - Impl::StaticAssertSame< Impl::unsigned_< 1 > , - Impl::unsigned_< VectorType::Rank > >::type - ok_vector_rank ; + static_assert( static_cast(VectorType::Rank) == static_cast(1), + "AXPBY static_assert Fail: VectorType::Rank != 1"); #if 1 typename ScalarType::const_type alpha , beta ; diff --git a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp index b169b02903..d812b16d85 100644 --- a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp +++ b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp @@ -183,7 +183,7 @@ struct ModifiedGramSchmidt } } - execution_space::fence(); + execution_space().fence(); return timer.seconds(); } diff --git a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp index b228dd2e2e..03285a375c 100644 --- a/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp +++ b/lib/kokkos/core/perf_test/PerfTestHexGrad.cpp @@ -253,12 +253,12 @@ struct HexGrad double dt_min = 0 ; Kokkos::parallel_for( count , Init( coord ) ); - execution_space::fence(); + execution_space().fence(); for ( int i = 0 ; i < iter ; ++i ) { Kokkos::Timer timer ; Kokkos::parallel_for( count , HexGrad( coord , grad ) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; diff --git a/lib/kokkos/core/perf_test/PerfTestMDRange.hpp b/lib/kokkos/core/perf_test/PerfTestMDRange.hpp index 51affa6a2e..f433451f78 100644 --- a/lib/kokkos/core/perf_test/PerfTestMDRange.hpp +++ b/lib/kokkos/core/perf_test/PerfTestMDRange.hpp @@ -125,15 +125,15 @@ struct MultiDimRangePerf3D Kokkos::MDRangePolicy, execution_space > policy(point_type{{0,0,0}},point_type{{icount,jcount,kcount}},tile_type{{Ti,Tj,Tk}} ); Kokkos::parallel_for( policy_initA, Init(Atest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest, icount+2, jcount+2, kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for( policy, FunctorType(Atest, Btest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -189,15 +189,15 @@ struct MultiDimRangePerf3D Kokkos::MDRangePolicy, execution_space > policy({{0,0,0}},{{icount,jcount,kcount}},{{Ti,Tj,Tk}} ); Kokkos::parallel_for( policy_initA, Init(Atest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest, icount+2, jcount+2, kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for( policy, FunctorType(Atest, Btest, icount, jcount, kcount) ); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -368,15 +368,15 @@ struct RangePolicyCollapseTwo double dt_min = 0; Kokkos::parallel_for( policy, Init(Atest,icount,jcount,kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest,icount+2,jcount+2,kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for(policy, FunctorType(Atest, Btest, icount, jcount, kcount)); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; @@ -513,15 +513,15 @@ struct RangePolicyCollapseAll double dt_min = 0; Kokkos::parallel_for( policy, Init(Atest,icount,jcount,kcount) ); - execution_space::fence(); + execution_space().fence(); Kokkos::parallel_for( policy_initB, Init(Btest,icount+2,jcount+2,kcount+2) ); - execution_space::fence(); + execution_space().fence(); for (int i = 0; i < iter; ++i) { Kokkos::Timer timer; Kokkos::parallel_for(policy, FunctorType(Atest, Btest, icount, jcount, kcount)); - execution_space::fence(); + execution_space().fence(); const double dt = timer.seconds(); if ( 0 == i ) dt_min = dt ; else dt_min = dt < dt_min ? dt : dt_min ; diff --git a/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp new file mode 100644 index 0000000000..2fc889beed --- /dev/null +++ b/lib/kokkos/core/perf_test/PerfTest_ExecSpacePartitioning.cpp @@ -0,0 +1,564 @@ +#include +#include +#include + + +namespace Test { + +namespace { + template + struct SpaceInstance { + static ExecSpace create() { + return ExecSpace(); + } + static void destroy(ExecSpace&) { + } + static bool overlap() { + return false; + } + }; + + #ifndef KOKKOS_ENABLE_DEBUG + #ifdef KOKKOS_ENABLE_CUDA + template<> + struct SpaceInstance { + static Kokkos::Cuda create() { + cudaStream_t stream; + cudaStreamCreate(&stream); + return Kokkos::Cuda(stream); + } + static void destroy(Kokkos::Cuda& space) { + cudaStream_t stream = space.cuda_stream(); + cudaStreamDestroy(stream); + } + static bool overlap() { + bool value = true; + auto local_rank_str = std::getenv("CUDA_LAUNCH_BLOCKING"); + if(local_rank_str) { + value = (std::atoi(local_rank_str)==0); + } + return value; + } + }; + #endif + #endif +} + +struct FunctorRange { + int M,R; + Kokkos::View a; + FunctorRange(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i) const { + for(int r=0;r a; + FunctorMDRange(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, const int) const { + for(int j=0;j a; + FunctorTeam(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const Kokkos::TeamPolicy::member_type& team) const { + int i = team.league_rank(); + for(int r=0;r a; + FunctorRangeReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, double& tmp) const { + for(int r=0;r a; + FunctorMDRangeReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const int i, const int, double& tmp) const { + for(int j=0;j a; + FunctorTeamReduce(int M_, int R_, Kokkos::View a_):M(M_),R(R_),a(a_){} + KOKKOS_INLINE_FUNCTION + void operator() (const Kokkos::TeamPolicy::member_type& team, double& tmp) const { + int i = team.league_rank(); + for(int r=0;r::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorRange f(M,R,a); + FunctorRangeReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::RangePolicy(0,N), FunctorRange(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorRange(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorRange(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time RangePolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space1,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_range_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(space2,0,N), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time RangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space1); + SpaceInstance::destroy(space2); +} + +TEST_F( default_exec, overlap_mdrange_policy ) { + int N = 200; + int M = 10000; + int R = 10; + + TEST_EXECSPACE space; + TEST_EXECSPACE space1 = SpaceInstance::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorMDRange f(M,R,a); + FunctorMDRangeReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>({0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorMDRange(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time MDRangePolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space1,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_mdrange_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::MDRangePolicy>(space2,{0,0},{N,R}), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time MDRangePolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space2); + SpaceInstance::destroy(space1); + +} + +TEST_F( default_exec, overlap_team_policy ) { + int N = 20; + int M = 1000000; + int R = 10; + + TEST_EXECSPACE space; + TEST_EXECSPACE space1 = SpaceInstance::create(); + TEST_EXECSPACE space2 = SpaceInstance::create(); + + Kokkos::View a("A",N,M); + FunctorTeam f(M,R,a); + FunctorTeamReduce fr(M,R,a); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel0", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel1", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel2", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + Kokkos::Timer timer; + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel3", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel4", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel5", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel6", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , FunctorTeam(M,R,a)); + Kokkos::fence(); + double time_overlap = timer.seconds(); + + timer.reset(); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel7", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::parallel_for("default_exec::overlap_range_policy::kernel8", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , f); + Kokkos::fence(); + double time_end = timer.seconds(); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE( (time_end > 1.5*time_overlap) ); + } + printf("Time TeamPolicy: NonOverlap: %lf Time Overlap: %lf\n",time_end,time_overlap); + + Kokkos::View result("result"); + Kokkos::View result1("result1"); + Kokkos::View result2("result2"); + Kokkos::View h_result("h_result"); + Kokkos::View h_result1("h_result1"); + Kokkos::View h_result2("h_result2"); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_fenced = timer.seconds(); + Kokkos::deep_copy(h_result,result); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + double time_not_fenced = timer.seconds(); + Kokkos::fence(); + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_fenced>2.0*time_not_fenced); + } + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result); + Kokkos::fence(); + double time_no_overlapped_reduce = timer.seconds(); + + timer.reset(); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space1,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result1); + Kokkos::parallel_reduce("default_exec::overlap_team_policy::kernel_reduce", + Kokkos::Experimental::require( + Kokkos::TeamPolicy(space2,N,Kokkos::AUTO), + Kokkos::Experimental::WorkItemProperty::HintLightWeight) + , fr, result2); + Kokkos::fence(); + double time_overlapped_reduce = timer.seconds(); + + Kokkos::deep_copy(h_result2,result2); + Kokkos::deep_copy(h_result1,result1); + + ASSERT_EQ(h_result1(),h_result()); + ASSERT_EQ(h_result2(),h_result()); + + if(SpaceInstance::overlap()) { + ASSERT_TRUE(time_overlapped_reduce < 1.5*time_no_overlapped_reduce); + } + printf("Time TeamPolicy Reduce: NonOverlap: %lf Time Overlap: %lf\n",time_no_overlapped_reduce,time_overlapped_reduce); + SpaceInstance::destroy(space1); + SpaceInstance::destroy(space2); +} +} diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp index 7d64591d9f..685194c150 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewAllocate.cpp @@ -121,6 +121,7 @@ void run_allocateview_tests(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a_ptr[i] = 0.0; }); + Kokkos::fence(); Kokkos::kokkos_free(a_ptr); } time_raw = timer.seconds()/R; diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp index 3f46187957..eff31c69bb 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewCopy.hpp @@ -95,6 +95,7 @@ void run_deepcopyview_tests123(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -135,6 +136,7 @@ void run_deepcopyview_tests45(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -169,6 +171,7 @@ void run_deepcopyview_tests6(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -202,6 +205,7 @@ void run_deepcopyview_tests7(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -235,6 +239,7 @@ void run_deepcopyview_tests8(int N, int R) { a_ptr[i] = b_ptr[i]; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp index c50d13d1ed..b17356f0c8 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewFill.hpp @@ -90,6 +90,7 @@ void run_fillview_tests123(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -126,6 +127,7 @@ void run_fillview_tests45(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -157,6 +159,7 @@ void run_fillview_tests6(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -187,6 +190,7 @@ void run_fillview_tests7(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -217,6 +221,7 @@ void run_fillview_tests8(int N, int R) { a_ptr[i] = 1.1; }); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp b/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp index 2720f4855c..b5019b467a 100644 --- a/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_ViewResize.hpp @@ -95,7 +95,9 @@ void run_resizeview_tests123(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -143,7 +145,9 @@ void run_resizeview_tests45(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -181,7 +185,9 @@ void run_resizeview_tests6(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -218,7 +224,9 @@ void run_resizeview_tests7(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif @@ -255,7 +263,9 @@ void run_resizeview_tests8(int N, int R) { Kokkos::parallel_for(N8, KOKKOS_LAMBDA (const int& i) { a1_ptr[i] = a_ptr[i]; }); + Kokkos::fence(); } + Kokkos::fence(); time_raw = timer.seconds()/R; } #endif diff --git a/lib/kokkos/core/perf_test/test_atomic.cpp b/lib/kokkos/core/perf_test/test_atomic.cpp index 6bb22e4e30..24e4f015d3 100644 --- a/lib/kokkos/core/perf_test/test_atomic.cpp +++ b/lib/kokkos/core/perf_test/test_atomic.cpp @@ -69,7 +69,7 @@ typedef Kokkos::DefaultExecutionSpace exec_space; #define WHITE 8 void textcolor(int attr, int fg, int bg) -{ char command[13]; +{ char command[40]; /* Command is the control command to the terminal */ sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40); @@ -85,7 +85,7 @@ struct ZeroFunctor{ typedef typename Kokkos::View::HostMirror h_type; type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { data() = 0; } }; @@ -101,7 +101,7 @@ struct AddFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { Kokkos::atomic_fetch_add(&data(),(T)1); } }; @@ -113,12 +113,12 @@ T AddLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct AddFunctor f_add; f_add.data = data; Kokkos::parallel_for(loop,f_add); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -132,7 +132,7 @@ struct AddNonAtomicFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { data()+=(T)1; } }; @@ -145,12 +145,12 @@ T AddLoopNonAtomic(int loop) { f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct AddNonAtomicFunctor f_add; f_add.data = data; Kokkos::parallel_for(loop,f_add); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -178,7 +178,7 @@ struct CASFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { T old = data(); T newval, assumed; do { @@ -197,12 +197,12 @@ T CASLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct CASFunctor f_cas; f_cas.data = data; Kokkos::parallel_for(loop,f_cas); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -217,7 +217,7 @@ struct CASNonAtomicFunctor{ type data; KOKKOS_INLINE_FUNCTION - void operator()(int i) const { + void operator()(int) const { volatile T assumed; volatile T newval; bool fail=1; @@ -240,12 +240,12 @@ T CASLoopNonAtomic(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct CASNonAtomicFunctor f_cas; f_cas.data = data; Kokkos::parallel_for(loop,f_cas); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); T val = h_data(); @@ -296,19 +296,19 @@ T ExchLoop(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); typename ZeroFunctor::type data2("Data"); typename ZeroFunctor::h_type h_data2("HData"); f_zero.data = data2; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct ExchFunctor f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for(loop,f_exch); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); Kokkos::deep_copy(h_data2,data2); @@ -339,19 +339,19 @@ T ExchLoopNonAtomic(int loop) { typename ZeroFunctor::h_type h_data("HData"); f_zero.data = data; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); typename ZeroFunctor::type data2("Data"); typename ZeroFunctor::h_type h_data2("HData"); f_zero.data = data2; Kokkos::parallel_for(1,f_zero); - exec_space::fence(); + exec_space().fence(); struct ExchNonAtomicFunctor f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for(loop,f_exch); - exec_space::fence(); + exec_space().fence(); Kokkos::deep_copy(h_data,data); Kokkos::deep_copy(h_data2,data2); diff --git a/lib/kokkos/core/perf_test/test_mempool.cpp b/lib/kokkos/core/perf_test/test_mempool.cpp index 9fd58eda91..c47730ec69 100644 --- a/lib/kokkos/core/perf_test/test_mempool.cpp +++ b/lib/kokkos/core/perf_test/test_mempool.cpp @@ -153,6 +153,7 @@ struct TestFunctor { typedef Kokkos::RangePolicy< ExecSpace , TagDel > policy ; Kokkos::parallel_for( policy(0,range_iter), *this ); + Kokkos::fence(); } //---------------------------------------- diff --git a/lib/kokkos/core/perf_test/test_taskdag.cpp b/lib/kokkos/core/perf_test/test_taskdag.cpp index 8d5e1c475f..41198edfe1 100644 --- a/lib/kokkos/core/perf_test/test_taskdag.cpp +++ b/lib/kokkos/core/perf_test/test_taskdag.cpp @@ -92,27 +92,26 @@ long fib_alloc_count( long n ) return count[ n & mask ]; } -template< class Space > +template< class Scheduler > struct TestFib { - using Scheduler = Kokkos::TaskScheduler< Space > ; using MemorySpace = typename Scheduler::memory_space ; using MemberType = typename Scheduler::member_type ; - using FutureType = Kokkos::Future< long , Space > ; + using FutureType = Kokkos::BasicFuture< long , Scheduler > ; typedef long value_type ; - Scheduler sched ; FutureType dep[2] ; const value_type n ; KOKKOS_INLINE_FUNCTION - TestFib( const Scheduler & arg_sched , const value_type arg_n ) - : sched( arg_sched ), dep{} , n( arg_n ) {} + TestFib( const value_type arg_n ) + : dep{} , n( arg_n ) {} KOKKOS_INLINE_FUNCTION - void operator()( const MemberType & , value_type & result ) noexcept + void operator()( MemberType & member, value_type & result ) noexcept { + auto& sched = member.scheduler(); if ( n < 2 ) { result = n ; } @@ -126,13 +125,13 @@ struct TestFib { dep[1] = Kokkos::task_spawn ( Kokkos::TaskSingle( sched, Kokkos::TaskPriority::High ) - , TestFib( sched, n - 2 ) ); + , TestFib( n - 2 ) ); dep[0] = Kokkos::task_spawn ( Kokkos::TaskSingle( sched ) - , TestFib( sched, n - 1 ) ); + , TestFib( n - 1 ) ); - Kokkos::Future< ExecSpace > fib_all = Kokkos::when_all( dep, 2 ); + auto fib_all = sched.when_all( dep, 2 ); if ( ! dep[0].is_null() && ! dep[1].is_null() && ! fib_all.is_null() ) { // High priority to retire this branch. @@ -202,13 +201,15 @@ int main( int argc , char* argv[] ) return -1; } - typedef TestFib< ExecSpace > Functor ; + using Scheduler = Kokkos::TaskSchedulerMultiple; + + typedef TestFib< Scheduler > Functor ; Kokkos::initialize(argc,argv); { - Functor::Scheduler sched( Functor::MemorySpace() + Scheduler sched( Functor::MemorySpace() , total_alloc_size , min_block_size , max_block_size @@ -217,21 +218,21 @@ int main( int argc , char* argv[] ) Functor::FutureType f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ) - , Functor( sched , fib_input ) + , Functor( fib_input ) ); Kokkos::wait( sched ); test_result = f.get(); - task_count_max = sched.allocated_task_count_max(); - task_count_accum = sched.allocated_task_count_accum(); + //task_count_max = sched.allocated_task_count_max(); + //task_count_accum = sched.allocated_task_count_accum(); - if ( number_alloc != task_count_accum ) { - std::cout << " number_alloc( " << number_alloc << " )" - << " != task_count_accum( " << task_count_accum << " )" - << std::endl ; - } + //if ( number_alloc != task_count_accum ) { + // std::cout << " number_alloc( " << number_alloc << " )" + // << " != task_count_accum( " << task_count_accum << " )" + // << std::endl ; + //} if ( fib_output != test_result ) { std::cout << " answer( " << fib_output << " )" @@ -239,7 +240,7 @@ int main( int argc , char* argv[] ) << std::endl ; } - if ( fib_output != test_result || number_alloc != task_count_accum ) { + if ( fib_output != test_result) { // || number_alloc != task_count_accum ) { printf(" TEST FAILED\n"); return -1; } @@ -252,7 +253,7 @@ int main( int argc , char* argv[] ) Functor::FutureType ftmp = Kokkos::host_spawn( Kokkos::TaskSingle( sched ) - , Functor( sched , fib_input ) + , Functor( fib_input ) ); Kokkos::wait( sched ); diff --git a/lib/kokkos/core/src/CMakeLists.txt b/lib/kokkos/core/src/CMakeLists.txt index ab7f3f55c7..a941c5da0c 100644 --- a/lib/kokkos/core/src/CMakeLists.txt +++ b/lib/kokkos/core/src/CMakeLists.txt @@ -61,6 +61,16 @@ IF(KOKKOS_LEGACY_TRIBITS) #----------------------------------------------------------------------------- + FILE(GLOB HEADERS_HPX HPX/*.hpp) + FILE(GLOB SOURCES_HPX HPX/*.cpp) + + LIST(APPEND HEADERS_PRIVATE ${HEADERS_HPX} ) + LIST(APPEND SOURCES ${SOURCES_HPX} ) + + INSTALL(FILES ${HEADERS_HPX} DESTINATION ${TRILINOS_INCDIR}/HPX/) + + #----------------------------------------------------------------------------- + FILE(GLOB HEADERS_CUDA Cuda/*.hpp) FILE(GLOB SOURCES_CUDA Cuda/*.cpp) diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp deleted file mode 100644 index c31b7f5b5d..0000000000 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaExec.hpp +++ /dev/null @@ -1,419 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 2.0 -// Copyright (2014) Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_CUDAEXEC_HPP -#define KOKKOS_CUDAEXEC_HPP - -#include -#ifdef KOKKOS_ENABLE_CUDA - -#include -#include -#include -#include -#include -#include -#include - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -struct CudaTraits { - enum { WarpSize = 32 /* 0x0020 */ }; - enum { WarpIndexMask = 0x001f /* Mask for warpindex */ }; - enum { WarpIndexShift = 5 /* WarpSize == 1 << WarpShift */ }; - - enum { SharedMemoryBanks = 32 /* Compute device 2.0 */ }; - enum { SharedMemoryCapacity = 0x0C000 /* 48k shared / 16k L1 Cache */ }; - enum { SharedMemoryUsage = 0x04000 /* 16k shared / 48k L1 Cache */ }; - - enum { UpperBoundGridCount = 65535 /* Hard upper bound */ }; - enum { ConstantMemoryCapacity = 0x010000 /* 64k bytes */ }; - enum { ConstantMemoryUsage = 0x008000 /* 32k bytes */ }; - enum { ConstantMemoryCache = 0x002000 /* 8k bytes */ }; - - typedef unsigned long - ConstantGlobalBufferType[ ConstantMemoryUsage / sizeof(unsigned long) ]; - - enum { ConstantMemoryUseThreshold = 0x000200 /* 512 bytes */ }; - - KOKKOS_INLINE_FUNCTION static - CudaSpace::size_type warp_count( CudaSpace::size_type i ) - { return ( i + WarpIndexMask ) >> WarpIndexShift ; } - - KOKKOS_INLINE_FUNCTION static - CudaSpace::size_type warp_align( CudaSpace::size_type i ) - { - enum { Mask = ~CudaSpace::size_type( WarpIndexMask ) }; - return ( i + WarpIndexMask ) & Mask ; - } -}; - -//---------------------------------------------------------------------------- - -CudaSpace::size_type cuda_internal_multiprocessor_count(); -CudaSpace::size_type cuda_internal_maximum_warp_count(); -CudaSpace::size_type cuda_internal_maximum_grid_count(); -CudaSpace::size_type cuda_internal_maximum_shared_words(); - -CudaSpace::size_type cuda_internal_maximum_concurrent_block_count(); - -CudaSpace::size_type * cuda_internal_scratch_flags( const CudaSpace::size_type size ); -CudaSpace::size_type * cuda_internal_scratch_space( const CudaSpace::size_type size ); -CudaSpace::size_type * cuda_internal_scratch_unified( const CudaSpace::size_type size ); - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#if defined( __CUDACC__ ) - -/** \brief Access to constant memory on the device */ -#ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE - -__device__ __constant__ -extern unsigned long kokkos_impl_cuda_constant_memory_buffer[] ; - -#else - -__device__ __constant__ -unsigned long kokkos_impl_cuda_constant_memory_buffer[ Kokkos::Impl::CudaTraits::ConstantMemoryUsage / sizeof(unsigned long) ] ; - -#endif - -namespace Kokkos { -namespace Impl { - void* cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink = false); -} -} - -template< typename T > -inline -__device__ -T * kokkos_impl_cuda_shared_memory() -{ extern __shared__ Kokkos::CudaSpace::size_type sh[]; return (T*) sh ; } - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- -// See section B.17 of Cuda C Programming Guide Version 3.2 -// for discussion of -// __launch_bounds__(maxThreadsPerBlock,minBlocksPerMultiprocessor) -// function qualifier which could be used to improve performance. -//---------------------------------------------------------------------------- -// Maximize L1 cache and minimize shared memory: -// cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1 ); -// For 2.0 capability: 48 KB L1 and 16 KB shared -//---------------------------------------------------------------------------- - -template< class DriverType> -__global__ -static void cuda_parallel_launch_constant_memory() -{ - const DriverType & driver = - *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); - - driver(); -} - -template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > -__global__ -__launch_bounds__(maxTperB, minBperSM) -static void cuda_parallel_launch_constant_memory() -{ - const DriverType & driver = - *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); - - driver(); -} - -template< class DriverType> -__global__ -static void cuda_parallel_launch_local_memory( const DriverType driver ) -{ - driver(); -} - -template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > -__global__ -__launch_bounds__(maxTperB, minBperSM) -static void cuda_parallel_launch_local_memory( const DriverType driver ) -{ - driver(); -} - -template < class DriverType - , class LaunchBounds = Kokkos::LaunchBounds<> - , bool Large = ( CudaTraits::ConstantMemoryUseThreshold < sizeof(DriverType) ) > -struct CudaParallelLaunch ; - -template < class DriverType - , unsigned int MaxThreadsPerBlock - , unsigned int MinBlocksPerSM > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds< MaxThreadsPerBlock - , MinBlocksPerSM > - , true > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - // Fence before changing settings and copying closure - Kokkos::Cuda::fence(); - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_constant_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - // Copy functor to constant memory on the device - cudaMemcpyToSymbol( - kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType) ); - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_constant_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - <<< grid , block , shmem , stream >>>(); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds<> - , true > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - // Fence before changing settings and copying closure - Kokkos::Cuda::fence(); - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_constant_memory< DriverType > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - // Copy functor to constant memory on the device - cudaMemcpyToSymbol( - kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType) ); - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_constant_memory< DriverType > - <<< grid , block , shmem , stream >>>(); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType - , unsigned int MaxThreadsPerBlock - , unsigned int MinBlocksPerSM > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds< MaxThreadsPerBlock - , MinBlocksPerSM > - , false > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_local_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_local_memory - < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > - <<< grid , block , shmem , stream >>>( driver ); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -template < class DriverType > -struct CudaParallelLaunch< DriverType - , Kokkos::LaunchBounds<> - , false > -{ - inline - CudaParallelLaunch( const DriverType & driver - , const dim3 & grid - , const dim3 & block - , const int shmem - , const cudaStream_t stream = 0 ) - { - if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { - - if ( sizeof( Kokkos::Impl::CudaTraits::ConstantGlobalBufferType ) < - sizeof( DriverType ) ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: Functor is too large") ); - } - - if ( CudaTraits::SharedMemoryCapacity < shmem ) { - Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); - } - #ifndef KOKKOS_ARCH_KEPLER - // On Kepler the L1 has no benefit since it doesn't cache reads - else { - CUDA_SAFE_CALL( - cudaFuncSetCacheConfig - ( cuda_parallel_launch_local_memory< DriverType > - , ( shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) - ) ); - } - #endif - - KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - - // Invoke the driver function on the device - cuda_parallel_launch_local_memory< DriverType > - <<< grid , block , shmem , stream >>>( driver ); - -#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) - CUDA_SAFE_CALL( cudaGetLastError() ); - Kokkos::Cuda::fence(); -#endif - } - } -}; - -//---------------------------------------------------------------------------- - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* defined( __CUDACC__ ) */ -#endif /* defined( KOKKOS_ENABLE_CUDA ) */ -#endif /* #ifndef KOKKOS_CUDAEXEC_HPP */ - diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp index e13744e327..4c9ed47085 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp @@ -55,7 +55,7 @@ #include #include -#include +//#include #include #if defined(KOKKOS_ENABLE_PROFILING) @@ -183,7 +183,7 @@ void * CudaUVMSpace::allocate( const size_t arg_alloc_size ) const enum { max_uvm_allocations = 65536 }; - Cuda::fence(); + Cuda::impl_static_fence(); if ( arg_alloc_size > 0 ) { Kokkos::Impl::num_uvm_allocations++; @@ -194,7 +194,7 @@ void * CudaUVMSpace::allocate( const size_t arg_alloc_size ) const CUDA_SAFE_CALL( cudaMallocManaged( &ptr, arg_alloc_size , cudaMemAttachGlobal ) ); } - Cuda::fence(); + Cuda::impl_static_fence(); return ptr ; } @@ -217,14 +217,14 @@ void CudaSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_all void CudaUVMSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_alloc_size */ ) const { - Cuda::fence(); + Cuda::impl_static_fence(); try { if ( arg_alloc_ptr != nullptr ) { Kokkos::Impl::num_uvm_allocations--; CUDA_SAFE_CALL( cudaFree( arg_alloc_ptr ) ); } } catch(...) {} - Cuda::fence(); + Cuda::impl_static_fence(); } void CudaHostPinnedSpace::deallocate( void * const arg_alloc_ptr , const size_t /* arg_alloc_size */ ) const @@ -390,7 +390,7 @@ SharedAllocationRecord< Kokkos::CudaUVMSpace , void >:: { #if defined(KOKKOS_ENABLE_PROFILING) if(Kokkos::Profiling::profileLibraryLoaded()) { - Cuda::fence(); //Make sure I can access the label ... + Cuda::impl_static_fence(); //Make sure I can access the label ... Kokkos::Profiling::deallocateData( Kokkos::Profiling::SpaceHandle(Kokkos::CudaUVMSpace::name()),RecordBase::m_alloc_ptr->m_label, data(),size()); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp new file mode 100644 index 0000000000..9d4bcbc8cf --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics.hpp @@ -0,0 +1,657 @@ +/* +@HEADER +================================================================================ + +ORIGINAL LICENSE +---------------- + +Copyright (c) 2018, NVIDIA Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +================================================================================ + +LICENSE ASSOCIATED WITH SUBSEQUENT MODIFICATIONS +------------------------------------------------ + +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +@HEADER +*/ + +#include +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#include + +#ifndef _SIMT_DETAILS_CONFIG +#define _SIMT_DETAILS_CONFIG + +namespace Kokkos { +namespace Impl { + + +#ifndef __simt_scope +// Modification: Kokkos GPU atomics should default to `gpu` scope +#define __simt_scope "gpu" +#endif + +#define __simt_fence_signal_() asm volatile("":::"memory") +#define __simt_fence_sc_() asm volatile("fence.sc." __simt_scope ";":::"memory") +#define __simt_fence_() asm volatile("fence." __simt_scope ";":::"memory") + +#define __simt_load_acquire_8_as_32(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b8 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_8_as_32(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b8 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_8_as_32(ptr,desired) asm volatile("st.release." __simt_scope ".b8 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_store_relaxed_8_as_32(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b8 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") + +#define __simt_load_acquire_16(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b16 %0, [%1];" : "=h"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_16(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b16 %0, [%1];" : "=h"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_16(ptr,desired) asm volatile("st.release." __simt_scope ".b16 [%0], %1;" :: "l"(ptr), "h"(desired) : "memory") +#define __simt_store_relaxed_16(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b16 [%0], %1;" :: "l"(ptr), "h"(desired) : "memory") + +#define __simt_load_acquire_32(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b32 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_32(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b32 %0, [%1];" : "=r"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_32(ptr,desired) asm volatile("st.release." __simt_scope ".b32 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_store_relaxed_32(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b32 [%0], %1;" :: "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_release_32(ptr,old,desired) asm volatile("atom.exch.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_acquire_32(ptr,old,desired) asm volatile("atom.exch.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_acq_rel_32(ptr,old,desired) asm volatile("atom.exch.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_exch_relaxed_32(ptr,old,desired) asm volatile("atom.exch.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(desired) : "memory") +#define __simt_cas_release_32(ptr,old,expected,desired) asm volatile("atom.cas.release." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_acquire_32(ptr,old,expected,desired) asm volatile("atom.cas.acquire." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_acq_rel_32(ptr,old,expected,desired) asm volatile("atom.cas.acq_rel." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_cas_relaxed_32(ptr,old,expected,desired) asm volatile("atom.cas.relaxed." __simt_scope ".b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +#define __simt_add_release_32(ptr,old,addend) asm volatile("atom.add.release." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_acquire_32(ptr,old,addend) asm volatile("atom.add.acquire." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_acq_rel_32(ptr,old,addend) asm volatile("atom.add.acq_rel." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_add_relaxed_32(ptr,old,addend) asm volatile("atom.add.relaxed." __simt_scope ".u32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(addend) : "memory") +#define __simt_and_release_32(ptr,old,andend) asm volatile("atom.and.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_acquire_32(ptr,old,andend) asm volatile("atom.and.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_acq_rel_32(ptr,old,andend) asm volatile("atom.and.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_and_relaxed_32(ptr,old,andend) asm volatile("atom.and.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(andend) : "memory") +#define __simt_or_release_32(ptr,old,orend) asm volatile("atom.or.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_acquire_32(ptr,old,orend) asm volatile("atom.or.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_acq_rel_32(ptr,old,orend) asm volatile("atom.or.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_or_relaxed_32(ptr,old,orend) asm volatile("atom.or.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(orend) : "memory") +#define __simt_xor_release_32(ptr,old,xorend) asm volatile("atom.xor.release." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_acquire_32(ptr,old,xorend) asm volatile("atom.xor.acquire." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_acq_rel_32(ptr,old,xorend) asm volatile("atom.xor.acq_rel." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") +#define __simt_xor_relaxed_32(ptr,old,xorend) asm volatile("atom.xor.relaxed." __simt_scope ".b32 %0, [%1], %2;" : "=r"(old) : "l"(ptr), "r"(xorend) : "memory") + +#define __simt_load_acquire_64(ptr,ret) asm volatile("ld.acquire." __simt_scope ".b64 %0, [%1];" : "=l"(ret) : "l"(ptr) : "memory") +#define __simt_load_relaxed_64(ptr,ret) asm volatile("ld.relaxed." __simt_scope ".b64 %0, [%1];" : "=l"(ret) : "l"(ptr) : "memory") +#define __simt_store_release_64(ptr,desired) asm volatile("st.release." __simt_scope ".b64 [%0], %1;" :: "l"(ptr), "l"(desired) : "memory") +#define __simt_store_relaxed_64(ptr,desired) asm volatile("st.relaxed." __simt_scope ".b64 [%0], %1;" :: "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_release_64(ptr,old,desired) asm volatile("atom.exch.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_acquire_64(ptr,old,desired) asm volatile("atom.exch.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_acq_rel_64(ptr,old,desired) asm volatile("atom.exch.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_exch_relaxed_64(ptr,old,desired) asm volatile("atom.exch.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(desired) : "memory") +#define __simt_cas_release_64(ptr,old,expected,desired) asm volatile("atom.cas.release." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_acquire_64(ptr,old,expected,desired) asm volatile("atom.cas.acquire." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_acq_rel_64(ptr,old,expected,desired) asm volatile("atom.cas.acq_rel." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_cas_relaxed_64(ptr,old,expected,desired) asm volatile("atom.cas.relaxed." __simt_scope ".b64 %0, [%1], %2, %3;" : "=l"(old) : "l"(ptr), "l"(expected), "l"(desired) : "memory") +#define __simt_add_release_64(ptr,old,addend) asm volatile("atom.add.release." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_acquire_64(ptr,old,addend) asm volatile("atom.add.acquire." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_acq_rel_64(ptr,old,addend) asm volatile("atom.add.acq_rel." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_add_relaxed_64(ptr,old,addend) asm volatile("atom.add.relaxed." __simt_scope ".u64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(addend) : "memory") +#define __simt_and_release_64(ptr,old,andend) asm volatile("atom.and.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_acquire_64(ptr,old,andend) asm volatile("atom.and.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_acq_rel_64(ptr,old,andend) asm volatile("atom.and.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_and_relaxed_64(ptr,old,andend) asm volatile("atom.and.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(andend) : "memory") +#define __simt_or_release_64(ptr,old,orend) asm volatile("atom.or.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_acquire_64(ptr,old,orend) asm volatile("atom.or.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_acq_rel_64(ptr,old,orend) asm volatile("atom.or.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_or_relaxed_64(ptr,old,orend) asm volatile("atom.or.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(orend) : "memory") +#define __simt_xor_release_64(ptr,old,xorend) asm volatile("atom.xor.release." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_acquire_64(ptr,old,xorend) asm volatile("atom.xor.acquire." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_acq_rel_64(ptr,old,xorend) asm volatile("atom.xor.acq_rel." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") +#define __simt_xor_relaxed_64(ptr,old,xorend) asm volatile("atom.xor.relaxed." __simt_scope ".b64 %0, [%1], %2;" : "=l"(old) : "l"(ptr), "l"(xorend) : "memory") + +#define __simt_nanosleep(timeout) asm volatile("nanosleep.u32 %0;" :: "r"(unsigned(timeout)) : ) + +/* + definitions +*/ + +#ifndef __GCC_ATOMIC_BOOL_LOCK_FREE +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#endif + +#ifndef __ATOMIC_RELAXED +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +#endif + +inline __device__ int __stronger_order_simt_(int a, int b) { + if (b == __ATOMIC_SEQ_CST) return __ATOMIC_SEQ_CST; + if (b == __ATOMIC_RELAXED) return a; + switch (a) { + case __ATOMIC_SEQ_CST: + case __ATOMIC_ACQ_REL: return a; + case __ATOMIC_CONSUME: + case __ATOMIC_ACQUIRE: if (b != __ATOMIC_ACQUIRE) return __ATOMIC_ACQ_REL; else return __ATOMIC_ACQUIRE; + case __ATOMIC_RELEASE: if (b != __ATOMIC_RELEASE) return __ATOMIC_ACQ_REL; else return __ATOMIC_RELEASE; + case __ATOMIC_RELAXED: return b; + default: assert(0); + } + return __ATOMIC_SEQ_CST; +} + +/* + base +*/ + +#define DO__atomic_load_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_load_simt_ (const type *ptr, type *ret, int memorder) { \ + int##bits##_t tmp = 0; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_load_acquire_##bits(ptr, tmp); break; \ + case __ATOMIC_RELAXED: __simt_load_relaxed_##bits(ptr, tmp); break; \ + default: assert(0); \ + } \ + memcpy(ret, &tmp, bytes); \ +} +DO__atomic_load_simt_(1,32) +DO__atomic_load_simt_(2,16) +DO__atomic_load_simt_(4,32) +DO__atomic_load_simt_(8,64) + +template +type __device__ __atomic_load_n_simt_(const type *ptr, int memorder) { + type ret; + __atomic_load_simt_(ptr, &ret, memorder); + return ret; +} + +#define DO__atomic_store_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_store_simt_ (type *ptr, type *val, int memorder) { \ + int##bits##_t tmp = 0; \ + memcpy(&tmp, val, bytes); \ + switch (memorder) { \ + case __ATOMIC_RELEASE: __simt_store_release_##bits(ptr, tmp); break; \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_RELAXED: __simt_store_relaxed_##bits(ptr, tmp); break; \ + default: assert(0); \ + } \ +} +DO__atomic_store_simt_(1,32) +DO__atomic_store_simt_(2,16) +DO__atomic_store_simt_(4,32) +DO__atomic_store_simt_(8,64) + +template +void __device__ __atomic_store_n_simt_(type *ptr, type val, int memorder) { + __atomic_store_simt_(ptr, &val, memorder); +} + +#define DO__atomic_compare_exchange_simt_(bytes, bits) \ +template::type = 0> \ +bool __device__ __atomic_compare_exchange_simt_ (type *ptr, type *expected, const type *desired, bool, int success_memorder, int failure_memorder) { \ + int##bits##_t tmp = 0, old = 0, old_tmp; \ + memcpy(&tmp, desired, bytes); \ + memcpy(&old, expected, bytes); \ + old_tmp = old; \ + switch (__stronger_order_simt_(success_memorder, failure_memorder)) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_cas_acquire_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_ACQ_REL: __simt_cas_acq_rel_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_RELEASE: __simt_cas_release_##bits(ptr, old, old_tmp, tmp); break; \ + case __ATOMIC_RELAXED: __simt_cas_relaxed_##bits(ptr, old, old_tmp, tmp); break; \ + default: assert(0); \ + } \ + bool const ret = old == old_tmp; \ + memcpy(expected, &old, bytes); \ + return ret; \ +} +DO__atomic_compare_exchange_simt_(4, 32) +DO__atomic_compare_exchange_simt_(8, 64) + +template::type = 0> \ +bool __device__ __atomic_compare_exchange_simt_(type *ptr, type *expected, const type *desired, bool, int success_memorder, int failure_memorder) { + + using R = typename std::conditional::value, volatile uint32_t, uint32_t>::type; + auto const aligned = (R*)((intptr_t)ptr & ~(sizeof(uint32_t) - 1)); + auto const offset = uint32_t((intptr_t)ptr & (sizeof(uint32_t) - 1)) * 8; + auto const mask = ((1 << sizeof(type)*8) - 1) << offset; + + uint32_t old = *expected << offset, old_value; + while (1) { + old_value = (old & mask) >> offset; + if (old_value != *expected) + break; + uint32_t const attempt = (old & ~mask) | (*desired << offset); + if (__atomic_compare_exchange_simt_ (aligned, &old, &attempt, true, success_memorder, failure_memorder)) + return true; + } + *expected = old_value; + return false; +} + +template +bool __device__ __atomic_compare_exchange_n_simt_(type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(ptr, expected, &desired, weak, success_memorder, failure_memorder); +} + +#define DO__atomic_exchange_simt_(bytes, bits) \ +template::type = 0> \ +void __device__ __atomic_exchange_simt_ (type *ptr, type *val, type *ret, int memorder) { \ + int##bits##_t tmp = 0; \ + memcpy(&tmp, val, bytes); \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_exch_acquire_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_ACQ_REL: __simt_exch_acq_rel_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_RELEASE: __simt_exch_release_##bits(ptr, tmp, tmp); break; \ + case __ATOMIC_RELAXED: __simt_exch_relaxed_##bits(ptr, tmp, tmp); break; \ + default: assert(0); \ + } \ + memcpy(ret, &tmp, bytes); \ +} +DO__atomic_exchange_simt_(4,32) +DO__atomic_exchange_simt_(8,64) + +template::type = 0> +void __device__ __atomic_exchange_simt_ (type *ptr, type *val, type *ret, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + while(!__atomic_compare_exchange_simt_(ptr, &expected, val, true, memorder, memorder)) + ; + *ret = expected; +} + +template +type __device__ __atomic_exchange_n_simt_(type *ptr, type val, int memorder) { + type ret; + __atomic_exchange_simt_(ptr, &val, &ret, memorder); + return ret; +} + +#define DO__atomic_fetch_add_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_add_simt_ (type *ptr, delta val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_add_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_add_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_add_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_add_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_add_simt_(4, 32) +DO__atomic_fetch_add_simt_(8, 64) + +template::type = 0> +type __device__ __atomic_fetch_add_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected + val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_sub_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_sub_simt_ (type *ptr, delta val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_add_acquire_##bits(ptr, ret, -val); break; \ + case __ATOMIC_ACQ_REL: __simt_add_acq_rel_##bits(ptr, ret, -val); break; \ + case __ATOMIC_RELEASE: __simt_add_release_##bits(ptr, ret, -val); break; \ + case __ATOMIC_RELAXED: __simt_add_relaxed_##bits(ptr, ret, -val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_sub_simt_(4,32) +DO__atomic_fetch_sub_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_sub_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected - val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_and_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_and_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_and_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_and_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_and_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_and_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_and_simt_(4,32) +DO__atomic_fetch_and_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_and_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected & val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_xor_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_xor_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_xor_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_xor_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_xor_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_xor_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_xor_simt_(4,32) +DO__atomic_fetch_xor_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_xor_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected ^ val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +#define DO__atomic_fetch_or_simt_(bytes, bits) \ +template::type = 0> \ +type __device__ __atomic_fetch_or_simt_ (type *ptr, type val, int memorder) { \ + type ret; \ + switch (memorder) { \ + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); \ + case __ATOMIC_CONSUME: \ + case __ATOMIC_ACQUIRE: __simt_or_acquire_##bits(ptr, ret, val); break; \ + case __ATOMIC_ACQ_REL: __simt_or_acq_rel_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELEASE: __simt_or_release_##bits(ptr, ret, val); break; \ + case __ATOMIC_RELAXED: __simt_or_relaxed_##bits(ptr, ret, val); break; \ + default: assert(0); \ + } \ + return ret; \ +} +DO__atomic_fetch_or_simt_(4,32) +DO__atomic_fetch_or_simt_(8,64) + +template::type = 0> +type __device__ __atomic_fetch_or_simt_ (type *ptr, delta val, int memorder) { + + type expected = __atomic_load_n_simt_(ptr, __ATOMIC_RELAXED); + type const desired = expected | val; + while(!__atomic_compare_exchange_simt_(ptr, &expected, &desired, true, memorder, memorder)) + ; + return expected; +} + +template +inline bool __device__ __atomic_test_and_set_simt_(type *ptr, int memorder) { + return __atomic_exchange_n_simt_((char*)ptr, (char)1, memorder) == 1; +} +template +inline void __device__ __atomic_clear_simt_(type *ptr, int memorder) { + return __atomic_store_n_simt_((char*)ptr, (char)0, memorder); +} + +inline constexpr __device__ bool __atomic_always_lock_free_simt_ (size_t size, void *) { + return size <= 8; +} +inline __device__ bool __atomic_is_lock_free_simt_(size_t size, void * ptr) { + return __atomic_always_lock_free_simt_(size, ptr); +} + +/* + fences +*/ + +inline void __device__ __atomic_thread_fence_simt(int memorder) { + switch (memorder) { + case __ATOMIC_SEQ_CST: __simt_fence_sc_(); break; + case __ATOMIC_CONSUME: + case __ATOMIC_ACQUIRE: + case __ATOMIC_ACQ_REL: + case __ATOMIC_RELEASE: __simt_fence_(); break; + case __ATOMIC_RELAXED: break; + default: assert(0); + } +} +inline void __device__ __atomic_signal_fence_simt(int memorder) { + __atomic_thread_fence_simt(memorder); +} + +/* + non-volatile +*/ + +template type __device__ __atomic_load_n_simt(const type *ptr, int memorder) { + return __atomic_load_n_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_load_simt(const type *ptr, type *ret, int memorder) { + __atomic_load_simt_(const_cast(ptr), ret, memorder); +} +template void __device__ __atomic_store_n_simt(type *ptr, type val, int memorder) { + __atomic_store_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_store_simt(type *ptr, type *val, int memorder) { + __atomic_store_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_exchange_n_simt(type *ptr, type val, int memorder) { + return __atomic_exchange_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_exchange_simt(type *ptr, type *val, type *ret, int memorder) { + __atomic_exchange_simt_(const_cast(ptr), val, ret, memorder); +} +template bool __device__ __atomic_compare_exchange_n_simt(type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_n_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template bool __device__ __atomic_compare_exchange_simt(type *ptr, type *expected, type *desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template type __device__ __atomic_fetch_add_simt(type *ptr, delta val, int memorder) { + return __atomic_fetch_add_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_sub_simt(type *ptr, delta val, int memorder) { + return __atomic_fetch_sub_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_and_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_and_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_xor_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_xor_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_or_simt(type *ptr, type val, int memorder) { + return __atomic_fetch_or_simt_(const_cast(ptr), val, memorder); +} +template bool __device__ __atomic_test_and_set_simt(void *ptr, int memorder) { + return __atomic_test_and_set_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_clear_simt(void *ptr, int memorder) { + return __atomic_clear_simt_(const_cast(ptr), memorder); +} +inline bool __device__ __atomic_always_lock_free_simt(size_t size, void *ptr) { + return __atomic_always_lock_free_simt_(size, const_cast(ptr)); +} +inline bool __device__ __atomic_is_lock_free_simt(size_t size, void *ptr) { + return __atomic_is_lock_free_simt_(size, const_cast(ptr)); +} + +/* + volatile +*/ + +template type __device__ __atomic_load_n_simt(const volatile type *ptr, int memorder) { + return __atomic_load_n_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_load_simt(const volatile type *ptr, type *ret, int memorder) { + __atomic_load_simt_(const_cast(ptr), ret, memorder); +} +template void __device__ __atomic_store_n_simt(volatile type *ptr, type val, int memorder) { + __atomic_store_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_store_simt(volatile type *ptr, type *val, int memorder) { + __atomic_store_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_exchange_n_simt(volatile type *ptr, type val, int memorder) { + return __atomic_exchange_n_simt_(const_cast(ptr), val, memorder); +} +template void __device__ __atomic_exchange_simt(volatile type *ptr, type *val, type *ret, int memorder) { + __atomic_exchange_simt_(const_cast(ptr), val, ret, memorder); +} +template bool __device__ __atomic_compare_exchange_n_simt(volatile type *ptr, type *expected, type desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_n_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template bool __device__ __atomic_compare_exchange_simt(volatile type *ptr, type *expected, type *desired, bool weak, int success_memorder, int failure_memorder) { + return __atomic_compare_exchange_simt_(const_cast(ptr), expected, desired, weak, success_memorder, failure_memorder); +} +template type __device__ __atomic_fetch_add_simt(volatile type *ptr, delta val, int memorder) { + return __atomic_fetch_add_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_sub_simt(volatile type *ptr, delta val, int memorder) { + return __atomic_fetch_sub_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_and_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_and_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_xor_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_xor_simt_(const_cast(ptr), val, memorder); +} +template type __device__ __atomic_fetch_or_simt(volatile type *ptr, type val, int memorder) { + return __atomic_fetch_or_simt_(const_cast(ptr), val, memorder); +} +template bool __device__ __atomic_test_and_set_simt(volatile void *ptr, int memorder) { + return __atomic_test_and_set_simt_(const_cast(ptr), memorder); +} +template void __device__ __atomic_clear_simt(volatile void *ptr, int memorder) { + return __atomic_clear_simt_(const_cast(ptr), memorder); +} + + + +} // end namespace Impl +} // end namespace Kokkos + +#endif //_SIMT_DETAILS_CONFIG + +#ifndef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED +/* + builtins +*/ + +#define __atomic_load_n __atomic_load_n_simt +#define __atomic_load __atomic_load_simt +#define __atomic_store_n __atomic_store_n_simt +#define __atomic_store __atomic_store_simt +#define __atomic_exchange_n __atomic_exchange_n_simt +#define __atomic_exchange __atomic_exchange_simt +#define __atomic_compare_exchange_n __atomic_compare_exchange_n_simt +#define __atomic_compare_exchange __atomic_compare_exchange_simt +#define __atomic_fetch_add __atomic_fetch_add_simt +#define __atomic_fetch_sub __atomic_fetch_sub_simt +#define __atomic_fetch_and __atomic_fetch_and_simt +#define __atomic_fetch_xor __atomic_fetch_xor_simt +#define __atomic_fetch_or __atomic_fetch_or_simt +#define __atomic_test_and_set __atomic_test_and_set_simt +#define __atomic_clear __atomic_clear_simt +#define __atomic_always_lock_free __atomic_always_lock_free_simt +#define __atomic_is_lock_free __atomic_is_lock_free_simt +#define __atomic_thread_fence __atomic_thread_fence_simt +#define __atomic_signal_fence __atomic_signal_fence_simt + +#define KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#endif //__CUDA_ARCH__ && KOKKOS_ENABLE_CUDA_ASM_ATOMICS +#endif // KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp new file mode 100644 index 0000000000..bedb147227 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Atomic_Intrinsics_Restore_Builtins.hpp @@ -0,0 +1,68 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifdef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#undef __atomic_load_n +#undef __atomic_load +#undef __atomic_store_n +#undef __atomic_store +#undef __atomic_exchange_n +#undef __atomic_exchange +#undef __atomic_compare_exchange_n +#undef __atomic_compare_exchange +#undef __atomic_fetch_add +#undef __atomic_fetch_sub +#undef __atomic_fetch_and +#undef __atomic_fetch_xor +#undef __atomic_fetch_or +#undef __atomic_test_and_set +#undef __atomic_clear +#undef __atomic_always_lock_free +#undef __atomic_is_lock_free +#undef __atomic_thread_fence +#undef __atomic_signal_fence + +#undef KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED + +#endif // KOKKOS_SIMT_ATOMIC_BUILTIN_REPLACEMENTS_DEFINED diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp similarity index 69% rename from lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp rename to lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp index 145d93ed76..932bde2b37 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Internal.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp @@ -58,7 +58,68 @@ struct CudaGetMaxBlockSize; template int cuda_get_max_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); + return CudaGetMaxBlockSize::get_block_size(f,vector_length, shmem_extra_block,shmem_extra_thread); +} + +template +int cuda_get_max_block_size(const CudaInternal* cuda_instance, const cudaFuncAttributes& attr, const FunctorType& f, const size_t vector_length, + const size_t shmem_block, const size_t shmem_thread) { + + const int min_blocks_per_sm = LaunchBounds::minBperSM == 0 ? + 1 : LaunchBounds::minBperSM ; + const int max_threads_per_block = LaunchBounds::maxTperB == 0 ? + cuda_instance->m_maxThreadsPerBlock : LaunchBounds::maxTperB ; + + const int regs_per_thread = attr.numRegs; + const int regs_per_sm = cuda_instance->m_regsPerSM; + const int shmem_per_sm = cuda_instance->m_shmemPerSM; + const int max_shmem_per_block = cuda_instance->m_maxShmemPerBlock; + const int max_blocks_per_sm = cuda_instance->m_maxBlocksPerSM; + const int max_threads_per_sm = cuda_instance->m_maxThreadsPerSM; + + int block_size = std::min(attr.maxThreadsPerBlock,max_threads_per_block); + + int functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + int total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + int max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + int max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + int blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + int threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + int opt_block_size = (blocks_per_sm>=min_blocks_per_sm) ? block_size : 0; + int opt_threads_per_sm = threads_per_sm; + //printf("BlockSizeMax: %i Shmem: %i %i %i %i Regs: %i %i Blocks: %i %i Achieved: %i %i Opt: %i %i\n",block_size, + // shmem_per_sm,max_shmem_per_block,functor_shmem,total_shmem, + // regs_per_sm,regs_per_thread,max_blocks_shmem,max_blocks_regs,blocks_per_sm,threads_per_sm,opt_block_size,opt_threads_per_sm); + block_size-=32; + while ((blocks_per_sm==0) && (block_size>=32)) { + functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + if((blocks_per_sm >= min_blocks_per_sm) && (blocks_per_sm <= max_blocks_per_sm)) { + if(threads_per_sm>=opt_threads_per_sm) { + opt_block_size = block_size; + opt_threads_per_sm = threads_per_sm; + } + } + //printf("BlockSizeMax: %i Shmem: %i %i %i %i Regs: %i %i Blocks: %i %i Achieved: %i %i Opt: %i %i\n",block_size, + // shmem_per_sm,max_shmem_per_block,functor_shmem,total_shmem, + // regs_per_sm,regs_per_thread,max_blocks_shmem,max_blocks_regs,blocks_per_sm,threads_per_sm,opt_block_size,opt_threads_per_sm); + block_size-=32; + } + return opt_block_size; } @@ -241,11 +302,71 @@ struct CudaGetOptBlockSize; template int cuda_get_opt_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { - return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); + return CudaGetOptBlockSize::get_block_size(f,vector_length,shmem_extra_block,shmem_extra_thread); +} + +template +int cuda_get_opt_block_size(const CudaInternal* cuda_instance, const cudaFuncAttributes& attr, const FunctorType& f, const size_t vector_length, + const size_t shmem_block, const size_t shmem_thread) { + + const int min_blocks_per_sm = LaunchBounds::minBperSM == 0 ? + 1 : LaunchBounds::minBperSM ; + const int max_threads_per_block = LaunchBounds::maxTperB == 0 ? + cuda_instance->m_maxThreadsPerBlock : LaunchBounds::maxTperB ; + + const int regs_per_thread = attr.numRegs; + const int regs_per_sm = cuda_instance->m_regsPerSM; + const int shmem_per_sm = cuda_instance->m_shmemPerSM; + const int max_shmem_per_block = cuda_instance->m_maxShmemPerBlock; + const int max_blocks_per_sm = cuda_instance->m_maxBlocksPerSM; + const int max_threads_per_sm = cuda_instance->m_maxThreadsPerSM; + + int block_size = std::min(attr.maxThreadsPerBlock,max_threads_per_block); + + int functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + int total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + int max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + int max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + int blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + int threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + int opt_block_size = (blocks_per_sm>=min_blocks_per_sm) ? block_size : 0; + int opt_threads_per_sm = threads_per_sm; + + block_size-=32; + while ((block_size>=32)) { + functor_shmem = FunctorTeamShmemSize< FunctorType >::value( f , block_size/vector_length ); + total_shmem = shmem_block + shmem_thread*(block_size/vector_length) + functor_shmem + attr.sharedSizeBytes; + max_blocks_regs = regs_per_sm/(regs_per_thread*block_size); + max_blocks_shmem = (total_shmem0?shmem_per_sm/total_shmem:max_blocks_regs):0; + blocks_per_sm = std::min(max_blocks_regs,max_blocks_shmem); + threads_per_sm = blocks_per_sm * block_size; + if(threads_per_sm > max_threads_per_sm) { + blocks_per_sm = max_threads_per_sm/block_size; + threads_per_sm = blocks_per_sm * block_size; + } + if((blocks_per_sm >= min_blocks_per_sm) && (blocks_per_sm <= max_blocks_per_sm)) { + if(threads_per_sm>=opt_threads_per_sm) { + opt_block_size = block_size; + opt_threads_per_sm = threads_per_sm; + } + } + block_size-=32; + } + return opt_block_size; } template -struct CudaGetOptBlockSize,true> { +struct CudaGetOptBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -275,7 +396,7 @@ struct CudaGetOptBlockSize,true> { }; template -struct CudaGetOptBlockSize,false> { +struct CudaGetOptBlockSize,false> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; @@ -305,7 +426,7 @@ struct CudaGetOptBlockSize,false> { }; template -struct CudaGetOptBlockSize,true> { +struct CudaGetOptBlockSize,true> { static int get_block_size(const typename DriverType::functor_type & f, const size_t vector_length, const size_t shmem_extra_block, const size_t shmem_extra_thread) { int blockSize=16; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp similarity index 86% rename from lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp rename to lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp index 4fd7a9c69e..0ca9e3c160 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Impl.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp @@ -50,7 +50,8 @@ #include #include -#include +#include +#include #include #include #include @@ -217,78 +218,6 @@ const CudaInternalDevices & CudaInternalDevices::singleton() } -//---------------------------------------------------------------------------- - -class CudaInternal { -private: - - CudaInternal( const CudaInternal & ); - CudaInternal & operator = ( const CudaInternal & ); - - -public: - - typedef Cuda::size_type size_type ; - - int m_cudaDev ; - int m_cudaArch ; - unsigned m_multiProcCount ; - unsigned m_maxWarpCount ; - unsigned m_maxBlock ; - unsigned m_maxSharedWords ; - uint32_t m_maxConcurrency ; - size_type m_scratchSpaceCount ; - size_type m_scratchFlagsCount ; - size_type m_scratchUnifiedCount ; - size_type m_scratchUnifiedSupported ; - size_type m_streamCount ; - size_type * m_scratchSpace ; - size_type * m_scratchFlags ; - size_type * m_scratchUnified ; - uint32_t * m_scratchConcurrentBitset ; - cudaStream_t * m_stream ; - - static int was_initialized; - static int was_finalized; - - static CudaInternal & singleton(); - - int verify_is_initialized( const char * const label ) const ; - - int is_initialized() const - { return 0 != m_scratchSpace && 0 != m_scratchFlags ; } - - void initialize( int cuda_device_id , int stream_count ); - void finalize(); - - void print_configuration( std::ostream & ) const ; - - ~CudaInternal(); - - CudaInternal() - : m_cudaDev( -1 ) - , m_cudaArch( -1 ) - , m_multiProcCount( 0 ) - , m_maxWarpCount( 0 ) - , m_maxBlock( 0 ) - , m_maxSharedWords( 0 ) - , m_maxConcurrency( 0 ) - , m_scratchSpaceCount( 0 ) - , m_scratchFlagsCount( 0 ) - , m_scratchUnifiedCount( 0 ) - , m_scratchUnifiedSupported( 0 ) - , m_streamCount( 0 ) - , m_scratchSpace( 0 ) - , m_scratchFlags( 0 ) - , m_scratchUnified( 0 ) - , m_scratchConcurrentBitset( 0 ) - , m_stream( 0 ) - {} - - size_type * scratch_space( const size_type size ); - size_type * scratch_flags( const size_type size ); - size_type * scratch_unified( const size_type size ); -}; int CudaInternal::was_initialized = 0; int CudaInternal::was_finalized = 0; @@ -366,8 +295,11 @@ CudaInternal & CudaInternal::singleton() static CudaInternal self ; return self ; } +void CudaInternal::fence() const { + cudaStreamSynchronize(m_stream); +} -void CudaInternal::initialize( int cuda_device_id , int stream_count ) +void CudaInternal::initialize( int cuda_device_id , cudaStream_t stream ) { if ( was_finalized ) Kokkos::abort("Calling Cuda::initialize after Cuda::finalize is illegal\n"); was_initialized = 1; @@ -454,6 +386,15 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) m_maxBlock = cudaProp.maxGridSize[0] ; + m_shmemPerSM = cudaProp.sharedMemPerMultiprocessor ; + m_maxShmemPerBlock = cudaProp.sharedMemPerBlock ; + m_regsPerSM = cudaProp.regsPerMultiprocessor ; + m_maxBlocksPerSM = m_cudaArch < 500 ? 16 : ( + m_cudaArch < 750 ? 32 : ( + m_cudaArch == 750 ? 16 : 32)); + m_maxThreadsPerSM = cudaProp.maxThreadsPerMultiProcessor ; + m_maxThreadsPerBlock = cudaProp.maxThreadsPerBlock ; + //---------------------------------- m_scratchUnifiedSupported = cudaProp.unifiedAddressing ; @@ -482,10 +423,9 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) // Concurrent bitset for obtaining unique tokens from within // an executing kernel. { - const unsigned max_threads_per_sm = 2048 ; // up to capability 7.0 m_maxConcurrency = - max_threads_per_sm * cudaProp.multiProcessorCount ; + m_maxThreadsPerSM * cudaProp.multiProcessorCount ; const int32_t buffer_bound = Kokkos::Impl::concurrent_bitset::buffer_bound( m_maxConcurrency ); @@ -507,11 +447,6 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) } //---------------------------------- - if ( stream_count ) { - m_stream = (cudaStream_t*) ::malloc( stream_count * sizeof(cudaStream_t) ); - m_streamCount = stream_count ; - for ( size_type i = 0 ; i < m_streamCount ; ++i ) m_stream[i] = 0 ; - } } else { @@ -539,7 +474,7 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) if( Kokkos::show_warnings() && !cuda_launch_blocking() ) { std::cerr << "Kokkos::Cuda::initialize WARNING: Cuda is allocating into UVMSpace by default" << std::endl; std::cerr << " without setting CUDA_LAUNCH_BLOCKING=1." << std::endl; - std::cerr << " The code must call Cuda::fence() after each kernel" << std::endl; + std::cerr << " The code must call Cuda().fence() after each kernel" << std::endl; std::cerr << " or will likely crash when accessing data on the host." << std::endl; } @@ -568,7 +503,10 @@ void CudaInternal::initialize( int cuda_device_id , int stream_count ) #endif // Init the array for used for arbitrarily sized atomics - Impl::initialize_host_cuda_lock_arrays(); + if(stream == 0) + Impl::initialize_host_cuda_lock_arrays(); + + m_stream = stream; } //---------------------------------------------------------------------------- @@ -578,7 +516,7 @@ enum { sizeScratchGrain = sizeof(ScratchGrain) }; Cuda::size_type * -CudaInternal::scratch_flags( const Cuda::size_type size ) +CudaInternal::scratch_flags( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_flags") && m_scratchFlagsCount * sizeScratchGrain < size ) { @@ -587,6 +525,9 @@ CudaInternal::scratch_flags( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + if( m_scratchFlags ) + Record::decrement( Record::get_record( m_scratchFlags ) ); + Record * const r = Record::allocate( Kokkos::CudaSpace() , "InternalScratchFlags" , ( sizeof( ScratchGrain ) * m_scratchFlagsCount ) ); @@ -602,7 +543,7 @@ CudaInternal::scratch_flags( const Cuda::size_type size ) } Cuda::size_type * -CudaInternal::scratch_space( const Cuda::size_type size ) +CudaInternal::scratch_space( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_space") && m_scratchSpaceCount * sizeScratchGrain < size ) { @@ -610,6 +551,9 @@ CudaInternal::scratch_space( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + if( m_scratchSpace ) + Record::decrement( Record::get_record( m_scratchSpace ) ); + Record * const r = Record::allocate( Kokkos::CudaSpace() , "InternalScratchSpace" , ( sizeof( ScratchGrain ) * m_scratchSpaceCount ) ); @@ -623,7 +567,7 @@ CudaInternal::scratch_space( const Cuda::size_type size ) } Cuda::size_type * -CudaInternal::scratch_unified( const Cuda::size_type size ) +CudaInternal::scratch_unified( const Cuda::size_type size ) const { if ( verify_is_initialized("scratch_unified") && m_scratchUnifiedSupported && m_scratchUnifiedCount * sizeScratchGrain < size ) { @@ -632,6 +576,9 @@ CudaInternal::scratch_unified( const Cuda::size_type size ) typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaHostPinnedSpace , void > Record ; + if( m_scratchUnified ) + Record::decrement( Record::get_record( m_scratchUnified ) ); + Record * const r = Record::allocate( Kokkos::CudaHostPinnedSpace() , "InternalScratchUnified" , ( sizeof( ScratchGrain ) * m_scratchUnifiedCount ) ); @@ -644,6 +591,31 @@ CudaInternal::scratch_unified( const Cuda::size_type size ) return m_scratchUnified ; } +Cuda::size_type * +CudaInternal::scratch_functor( const Cuda::size_type size ) const +{ + if ( verify_is_initialized("scratch_functor") && + m_scratchFunctorSize < size ) { + + m_scratchFunctorSize = size ; + + typedef Kokkos::Impl::SharedAllocationRecord< Kokkos::CudaSpace , void > Record ; + + if( m_scratchFunctor ) + Record::decrement( Record::get_record( m_scratchFunctor ) ); + + Record * const r = Record::allocate( Kokkos::CudaSpace() + , "InternalScratchFunctor" + , m_scratchFunctorSize ); + + Record::increment( r ); + + m_scratchFunctor = reinterpret_cast( r->data() ); + } + + return m_scratchFunctor ; +} + //---------------------------------------------------------------------------- void CudaInternal::finalize() @@ -653,13 +625,7 @@ void CudaInternal::finalize() Impl::finalize_host_cuda_lock_arrays(); - if ( m_stream ) { - for ( size_type i = 1 ; i < m_streamCount ; ++i ) { - cudaStreamDestroy( m_stream[i] ); - m_stream[i] = 0 ; - } - ::free( m_stream ); - } + if(m_stream!=0) cudaStreamDestroy(m_stream); typedef Kokkos::Impl::SharedAllocationRecord< CudaSpace > RecordCuda ; typedef Kokkos::Impl::SharedAllocationRecord< CudaHostPinnedSpace > RecordHost ; @@ -668,6 +634,8 @@ void CudaInternal::finalize() RecordCuda::decrement( RecordCuda::get_record( m_scratchSpace ) ); RecordHost::decrement( RecordHost::get_record( m_scratchUnified ) ); RecordCuda::decrement( RecordCuda::get_record( m_scratchConcurrentBitset ) ); + if(m_scratchFunctorSize>0) + RecordCuda::decrement( RecordCuda::get_record( m_scratchFunctor ) ); m_cudaDev = -1 ; m_multiProcCount = 0 ; @@ -713,14 +681,14 @@ Cuda::size_type cuda_internal_maximum_grid_count() Cuda::size_type cuda_internal_maximum_shared_words() { return CudaInternal::singleton().m_maxSharedWords ; } -Cuda::size_type * cuda_internal_scratch_space( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_space( size ); } +Cuda::size_type * cuda_internal_scratch_space( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_space( size ); } -Cuda::size_type * cuda_internal_scratch_flags( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_flags( size ); } +Cuda::size_type * cuda_internal_scratch_flags( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_flags( size ); } -Cuda::size_type * cuda_internal_scratch_unified( const Cuda::size_type size ) -{ return CudaInternal::singleton().scratch_unified( size ); } +Cuda::size_type * cuda_internal_scratch_unified( const Cuda& instance, const Cuda::size_type size ) +{ return instance.impl_internal_space_instance()->scratch_unified( size ); } } // namespace Impl @@ -749,7 +717,7 @@ void Cuda::initialize( const Cuda::SelectDevice config , size_t num_instances ) void Cuda::impl_initialize( const Cuda::SelectDevice config , size_t num_instances ) #endif { - Impl::CudaInternal::singleton().initialize( config.cuda_device_id , num_instances ); + Impl::CudaInternal::singleton().initialize( config.cuda_device_id , 0 ); #if defined(KOKKOS_ENABLE_PROFILING) Kokkos::Profiling::initialize(); @@ -800,19 +768,17 @@ void Cuda::impl_finalize() } Cuda::Cuda() - : m_device( Impl::CudaInternal::singleton().m_cudaDev ) - , m_stream( 0 ) + : m_space_instance( &Impl::CudaInternal::singleton() ) { Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ); } -Cuda::Cuda( const int instance_id ) - : m_device( Impl::CudaInternal::singleton().m_cudaDev ) - , m_stream( - Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ) - ? Impl::CudaInternal::singleton().m_stream[ instance_id % Impl::CudaInternal::singleton().m_streamCount ] - : 0 ) -{} +Cuda::Cuda(cudaStream_t stream) + : m_space_instance(new Impl::CudaInternal) +{ + Impl::CudaInternal::singleton().verify_is_initialized( "Cuda instance constructor" ); + m_space_instance->initialize(Impl::CudaInternal::singleton().m_cudaDev,stream); +} void Cuda::print_configuration( std::ostream & s , const bool ) { Impl::CudaInternal::singleton().print_configuration( s ); } @@ -823,13 +789,27 @@ bool Cuda::sleep() { return false ; } bool Cuda::wake() { return true ; } #endif -void Cuda::fence() +void Cuda::impl_static_fence() { Kokkos::Impl::cuda_device_synchronize(); } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE +void Cuda::fence() { + impl_static_fence(); +} +#else +void Cuda::fence() const { + m_space_instance->fence(); +} +#endif + const char* Cuda::name() { return "Cuda"; } +cudaStream_t Cuda::cuda_stream() const { return m_space_instance->m_stream ; } +int Cuda::cuda_device() const { return m_space_instance->m_cudaDev ; } + + } // namespace Kokkos namespace Kokkos { diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp new file mode 100644 index 0000000000..f9e333fcf0 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp @@ -0,0 +1,156 @@ +#ifndef KOKKOS_CUDA_INSTANCE_HPP_ +#define KOKKOS_CUDA_INSTANCE_HPP_ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct CudaTraits { + enum { WarpSize = 32 /* 0x0020 */ }; + enum { WarpIndexMask = 0x001f /* Mask for warpindex */ }; + enum { WarpIndexShift = 5 /* WarpSize == 1 << WarpShift */ }; + + enum { ConstantMemoryUsage = 0x008000 /* 32k bytes */ }; + enum { ConstantMemoryCache = 0x002000 /* 8k bytes */ }; + enum { KernelArgumentLimit = 0x001000 /* 4k bytes */ }; + + typedef unsigned long + ConstantGlobalBufferType[ ConstantMemoryUsage / sizeof(unsigned long) ]; + +#if defined(KOKKOS_ARCH_VOLTA) || \ + defined(KOKKOS_ARCH_PASCAL) + enum { ConstantMemoryUseThreshold = 0x000200 /* 0 bytes -> always use constant (or global)*/ }; +#else + enum { ConstantMemoryUseThreshold = 0x000200 /* 512 bytes */ }; +#endif + + KOKKOS_INLINE_FUNCTION static + CudaSpace::size_type warp_count( CudaSpace::size_type i ) + { return ( i + WarpIndexMask ) >> WarpIndexShift ; } + + KOKKOS_INLINE_FUNCTION static + CudaSpace::size_type warp_align( CudaSpace::size_type i ) + { + enum { Mask = ~CudaSpace::size_type( WarpIndexMask ) }; + return ( i + WarpIndexMask ) & Mask ; + } +}; + +//---------------------------------------------------------------------------- + +CudaSpace::size_type cuda_internal_multiprocessor_count(); +CudaSpace::size_type cuda_internal_maximum_warp_count(); +CudaSpace::size_type cuda_internal_maximum_grid_count(); +CudaSpace::size_type cuda_internal_maximum_shared_words(); + +CudaSpace::size_type cuda_internal_maximum_concurrent_block_count(); + +CudaSpace::size_type * cuda_internal_scratch_flags( const Cuda&, const CudaSpace::size_type size ); +CudaSpace::size_type * cuda_internal_scratch_space( const Cuda&, const CudaSpace::size_type size ); +CudaSpace::size_type * cuda_internal_scratch_unified( const Cuda&, const CudaSpace::size_type size ); + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +class CudaInternal { +private: + + CudaInternal( const CudaInternal & ); + CudaInternal & operator = ( const CudaInternal & ); + + +public: + + typedef Cuda::size_type size_type ; + + int m_cudaDev ; + + // Device Properties + int m_cudaArch ; + unsigned m_multiProcCount ; + unsigned m_maxWarpCount ; + unsigned m_maxBlock ; + unsigned m_maxSharedWords ; + uint32_t m_maxConcurrency ; + int m_shmemPerSM ; + int m_maxShmemPerBlock ; + int m_regsPerSM ; + int m_maxBlocksPerSM ; + int m_maxThreadsPerSM ; + int m_maxThreadsPerBlock ; + + mutable size_type m_scratchSpaceCount ; + mutable size_type m_scratchFlagsCount ; + mutable size_type m_scratchUnifiedCount ; + mutable size_type m_scratchFunctorSize ; + size_type m_scratchUnifiedSupported ; + size_type m_streamCount ; + mutable size_type * m_scratchSpace ; + mutable size_type * m_scratchFlags ; + mutable size_type * m_scratchUnified ; + mutable size_type * m_scratchFunctor ; + uint32_t * m_scratchConcurrentBitset ; + cudaStream_t m_stream ; + + static int was_initialized; + static int was_finalized; + + static CudaInternal & singleton(); + + int verify_is_initialized( const char * const label ) const ; + + int is_initialized() const + { return 0 != m_scratchSpace && 0 != m_scratchFlags ; } + + void initialize( int cuda_device_id , cudaStream_t stream = 0 ); + void finalize(); + + void print_configuration( std::ostream & ) const ; + + void fence() const ; + + ~CudaInternal(); + + CudaInternal() + : m_cudaDev( -1 ) + , m_cudaArch( -1 ) + , m_multiProcCount( 0 ) + , m_maxWarpCount( 0 ) + , m_maxBlock( 0 ) + , m_maxSharedWords( 0 ) + , m_maxConcurrency( 0 ) + , m_shmemPerSM( 0 ) + , m_maxShmemPerBlock( 0 ) + , m_regsPerSM( 0 ) + , m_maxBlocksPerSM( 0 ) + , m_maxThreadsPerSM( 0 ) + , m_maxThreadsPerBlock( 0 ) + , m_scratchSpaceCount( 0 ) + , m_scratchFlagsCount( 0 ) + , m_scratchUnifiedCount( 0 ) + , m_scratchFunctorSize( 0 ) + , m_scratchUnifiedSupported( 0 ) + , m_streamCount( 0 ) + , m_scratchSpace( 0 ) + , m_scratchFlags( 0 ) + , m_scratchUnified( 0 ) + , m_scratchFunctor( 0 ) + , m_scratchConcurrentBitset( 0 ) + , m_stream( 0 ) + {} + + size_type * scratch_space( const size_type size ) const ; + size_type * scratch_flags( const size_type size ) const ; + size_type * scratch_unified( const size_type size ) const ; + size_type * scratch_functor( const size_type size ) const ; +}; + +} // Namespace Impl +} // Namespace Kokkos +#endif diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp new file mode 100644 index 0000000000..2ec868c1f1 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp @@ -0,0 +1,579 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_CUDAEXEC_HPP +#define KOKKOS_CUDAEXEC_HPP + +#include +#ifdef KOKKOS_ENABLE_CUDA + +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#if defined( __CUDACC__ ) + +/** \brief Access to constant memory on the device */ +#ifdef KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE + +__device__ __constant__ +extern unsigned long kokkos_impl_cuda_constant_memory_buffer[] ; + +#else + +__device__ __constant__ +unsigned long kokkos_impl_cuda_constant_memory_buffer[ Kokkos::Impl::CudaTraits::ConstantMemoryUsage / sizeof(unsigned long) ] ; + +#endif + +namespace Kokkos { +namespace Impl { + void* cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink = false); +} +} + +template< typename T > +inline +__device__ +T * kokkos_impl_cuda_shared_memory() +{ extern __shared__ Kokkos::CudaSpace::size_type sh[]; return (T*) sh ; } + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +// See section B.17 of Cuda C Programming Guide Version 3.2 +// for discussion of +// __launch_bounds__(maxThreadsPerBlock,minBlocksPerMultiprocessor) +// function qualifier which could be used to improve performance. +//---------------------------------------------------------------------------- +// Maximize L1 cache and minimize shared memory: +// cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1 ); +// For 2.0 capability: 48 KB L1 and 16 KB shared +//---------------------------------------------------------------------------- + +template< class DriverType> +__global__ +static void cuda_parallel_launch_constant_memory() +{ + const DriverType & driver = + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_constant_memory() +{ + const DriverType & driver = + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_local_memory( const DriverType driver ) +{ + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_local_memory( const DriverType driver ) +{ + driver(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_global_memory( const DriverType* driver ) +{ + driver->operator()(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_global_memory( const DriverType* driver ) +{ + driver->operator()(); +} + +template< class DriverType> +__global__ +static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr ) +{ + const DriverType & driver = driver_ptr!=NULL ? *driver_ptr : + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType, unsigned int maxTperB, unsigned int minBperSM > +__global__ +__launch_bounds__(maxTperB, minBperSM) +static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr ) +{ + const DriverType & driver = driver_ptr!=NULL ? *driver_ptr : + *((const DriverType *) kokkos_impl_cuda_constant_memory_buffer ); + + driver(); +} + +template< class DriverType > +struct DeduceCudaLaunchMechanism { + constexpr static const Kokkos::Experimental::WorkItemProperty::HintLightWeight_t light_weight = Kokkos::Experimental::WorkItemProperty::HintLightWeight; + constexpr static const Kokkos::Experimental::WorkItemProperty::HintHeavyWeight_t heavy_weight = Kokkos::Experimental::WorkItemProperty::HintHeavyWeight ; + constexpr static const typename DriverType::Policy::work_item_property property = typename DriverType::Policy::work_item_property(); + + static constexpr const Experimental::CudaLaunchMechanism valid_launch_mechanism = + // BuildValidMask + (sizeof(DriverType) + , Experimental::CudaLaunchMechanism LaunchMechanism = + DeduceCudaLaunchMechanism::launch_mechanism > +struct CudaParallelLaunch ; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM > + , Experimental::CudaLaunchMechanism::ConstantMemory> +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + // Copy functor to constant memory on the device + cudaMemcpyToSymbolAsync( + kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType), 0, cudaMemcpyHostToDevice, cudaStream_t(cuda_instance->m_stream)); + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>(); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_constant_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::ConstantMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_constant_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + // Copy functor to constant memory on the device + cudaMemcpyToSymbolAsync( + kokkos_impl_cuda_constant_memory_buffer, &driver, sizeof(DriverType), 0, cudaMemcpyHostToDevice, cudaStream_t(cuda_instance->m_stream)); + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_constant_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>(); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_constant_memory + < DriverType >); + return attr; + } +}; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM > +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM > + , Experimental::CudaLaunchMechanism::LocalMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_local_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::LocalMemory > +{ + static_assert(sizeof(DriverType)m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_local_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + // Invoke the driver function on the device + cuda_parallel_launch_local_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_local_memory + < DriverType >); + return attr; + } +}; + +template < class DriverType + , unsigned int MaxThreadsPerBlock + , unsigned int MinBlocksPerSM> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds< MaxThreadsPerBlock + , MinBlocksPerSM> + , Experimental::CudaLaunchMechanism::GlobalMemory > +{ + inline + CudaParallelLaunch( const DriverType & driver + , const dim3 & grid + , const dim3 & block + , const int shmem + , CudaInternal* cuda_instance + , const bool prefer_shmem ) + { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { + + if ( cuda_instance->m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + DriverType* driver_ptr = NULL; + driver_ptr = reinterpret_cast(cuda_instance->scratch_functor(sizeof(DriverType))); + cudaMemcpyAsync(driver_ptr,&driver, sizeof(DriverType), cudaMemcpyDefault, cuda_instance->m_stream); + + // Invoke the driver function on the device + cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver_ptr ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_global_memory + < DriverType, MaxThreadsPerBlock, MinBlocksPerSM >); + return attr; + } + +}; + +template < class DriverType> +struct CudaParallelLaunch< DriverType + , Kokkos::LaunchBounds<0,0> + , Experimental::CudaLaunchMechanism::GlobalMemory > +{ + inline + CudaParallelLaunch( const DriverType & driver + , const dim3 & grid + , const dim3 & block + , const int shmem + , CudaInternal* cuda_instance + , const bool prefer_shmem) + { + if ( (grid.x != 0) && ( ( block.x * block.y * block.z ) != 0 ) ) { + + if ( cuda_instance->m_maxShmemPerBlock < shmem ) { + Kokkos::Impl::throw_runtime_exception( std::string("CudaParallelLaunch FAILED: shared memory request is too large") ); + } + #ifndef KOKKOS_ARCH_KEPLER + // On Kepler the L1 has no benefit since it doesn't cache reads + else { + CUDA_SAFE_CALL( + cudaFuncSetCacheConfig + ( cuda_parallel_launch_global_memory< DriverType > + , ( prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1 ) + ) ); + } + #endif + + KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); + + DriverType* driver_ptr = NULL; + driver_ptr = reinterpret_cast(cuda_instance->scratch_functor(sizeof(DriverType))); + cudaMemcpyAsync(driver_ptr,&driver, sizeof(DriverType), cudaMemcpyDefault, cuda_instance->m_stream); + + cuda_parallel_launch_global_memory< DriverType > + <<< grid , block , shmem , cuda_instance->m_stream >>>( driver_ptr ); + +#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) + CUDA_SAFE_CALL( cudaGetLastError() ); + Kokkos::Cuda().fence(); +#endif + } + } + + static cudaFuncAttributes get_cuda_func_attributes() { + cudaFuncAttributes attr; + cudaFuncGetAttributes(&attr,cuda_parallel_launch_global_memory + < DriverType >); + return attr; + } +}; +//---------------------------------------------------------------------------- + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined( __CUDACC__ ) */ +#endif /* defined( KOKKOS_ENABLE_CUDA ) */ +#endif /* #ifndef KOKKOS_CUDAEXEC_HPP */ + diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp index 665d0732a7..c05fbcc6c1 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp @@ -55,9 +55,9 @@ #include #include -#include +#include #include -#include +#include #include #include #include @@ -73,6 +73,9 @@ //---------------------------------------------------------------------------- namespace Kokkos { + +extern bool show_warnings() noexcept; + namespace Impl { template< class ... Properties > @@ -85,10 +88,14 @@ public: typedef PolicyTraits traits; + template< class ExecSpace, class ... OtherProperties > + friend class TeamPolicyInternal; + private: enum { MAX_WARP = 8 }; + typename traits::execution_space m_space; int m_league_size ; int m_team_size ; int m_vector_length ; @@ -101,6 +108,19 @@ public: //! Execution space of this execution policy typedef Kokkos::Cuda execution_space ; + template + TeamPolicyInternal( const TeamPolicyInternal& p ) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + m_space = p.m_space; + } + TeamPolicyInternal& operator = (const TeamPolicyInternal& p) { m_league_size = p.m_league_size; m_team_size = p.m_team_size; @@ -110,6 +130,7 @@ public: m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; m_chunk_size = p.m_chunk_size; + m_space = p.m_space; return *this; } @@ -117,7 +138,7 @@ public: #ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > - inline static + static inline int team_size_max( const FunctorType & functor ) { int n = MAX_WARP * Impl::CudaTraits::WarpSize ; @@ -128,7 +149,7 @@ public: /* for team reduce */ + ( n + 2 ) * sizeof(double) /* for team shared */ + Impl::FunctorTeamShmemSize< FunctorType >::value( functor , n ); - if ( shmem_size < Impl::CudaTraits::SharedMemoryCapacity ) break ; + if ( shmem_size < typename traits::execution_space().impl_internal_space_instance()->m_maxShmemPerBlock ) break ; } return n ; @@ -138,7 +159,10 @@ public: template int team_size_max( const FunctorType& f, const ParallelForTag& ) const { typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; - int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + int block_size = Kokkos::Impl::cuda_get_max_block_size< FunctorType, typename traits::launch_bounds >( + space().impl_internal_space_instance(),attr,f ,(size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) ); return block_size/vector_length(); } @@ -150,7 +174,10 @@ public: typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; - int block_size = Kokkos::Impl::cuda_get_max_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + int block_size = Kokkos::Impl::cuda_get_max_block_size< FunctorType, typename traits::launch_bounds >( + space().impl_internal_space_instance(),attr,f ,(size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); @@ -178,7 +205,11 @@ public: template int team_size_recommended( const FunctorType& f, const ParallelForTag& ) const { typedef Impl::ParallelFor< FunctorType , TeamPolicy > closure_type; - int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), + attr, f , (size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double)); return block_size/vector_length(); } @@ -190,10 +221,18 @@ public: typedef Impl::ParallelReduce< FunctorType , TeamPolicy, reducer_type > closure_type; typedef Impl::FunctorValueTraits< FunctorType , typename traits::work_tag > functor_value_traits; - int block_size = Kokkos::Impl::cuda_get_opt_block_size< closure_type, typename traits::launch_bounds >( f ,(size_t) vector_length(), + cudaFuncAttributes attr = CudaParallelLaunch< closure_type, typename traits::launch_bounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), + attr, f , (size_t) vector_length(), (size_t) team_scratch_size(0) + 2*sizeof(double), (size_t) thread_scratch_size(0) + sizeof(double) + ((functor_value_traits::StaticValueSize!=0)?0:functor_value_traits::value_size( f ))); - return block_size/vector_length(); + // Currently we require Power-of-2 team size for reductions. + int p2 = 1; + while(p2<=block_size) p2*=2; + p2/=2; + return p2/vector_length(); } @@ -201,6 +240,25 @@ public: int vector_length_max() { return Impl::CudaTraits::WarpSize; } + inline static + int verify_requested_vector_length( int requested_vector_length ) { + int test_vector_length = std::min( requested_vector_length, vector_length_max() ); + + // Allow only power-of-two vector_length + if ( !(is_integral_power_of_two( test_vector_length ) ) ) { + int test_pow2 = 1; + for (int i = 0; i < 5; i++) { + test_pow2 = test_pow2 << 1; + if (test_pow2 > test_vector_length) { + break; + } + } + test_vector_length = test_pow2 >> 1; + } + + return test_vector_length; + } + inline static int scratch_size_max(int level) { return (level==0? @@ -224,9 +282,14 @@ public: return m_thread_scratch_size[level]; } + inline typename traits::execution_space space() const { + return m_space; + } + TeamPolicyInternal() - : m_league_size( 0 ) - , m_team_size( 0 ) + : m_space(typename traits::execution_space()) + , m_league_size( 0 ) + , m_team_size( -1 ) , m_vector_length( 0 ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} @@ -234,22 +297,18 @@ public: {} /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space space_ , int league_size_ , int team_size_request , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( space_ ) + , m_league_size( league_size_ ) , m_team_size( team_size_request ) - , m_vector_length( vector_length_request ) + , m_vector_length( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -261,22 +320,18 @@ public: } /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space space_ , int league_size_ , const Kokkos::AUTO_t & /* team_size_request */ , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( space_ ) + , m_league_size( league_size_ ) , m_team_size( -1 ) - , m_vector_length( vector_length_request ) + , m_vector_length( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -285,18 +340,14 @@ public: TeamPolicyInternal( int league_size_ , int team_size_request , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( typename traits::execution_space() ) + , m_league_size( league_size_ ) , m_team_size( team_size_request ) - , m_vector_length ( vector_length_request ) + , m_vector_length ( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -310,18 +361,14 @@ public: TeamPolicyInternal( int league_size_ , const Kokkos::AUTO_t & /* team_size_request */ , int vector_length_request = 1 ) - : m_league_size( league_size_ ) + : m_space( typename traits::execution_space() ) + , m_league_size( league_size_ ) , m_team_size( -1 ) - , m_vector_length ( vector_length_request ) + , m_vector_length ( verify_requested_vector_length(vector_length_request) ) , m_team_scratch_size {0,0} , m_thread_scratch_size {0,0} , m_chunk_size ( 32 ) { - // Allow only power-of-two vector_length - if ( ! Kokkos::Impl::is_integral_power_of_two( vector_length_request ) ) { - Impl::throw_runtime_exception( "Requested non-power-of-two vector length for TeamPolicy."); - } - // Make sure league size is permissable if(league_size_ >= int(Impl::cuda_internal_maximum_grid_count())) Impl::throw_runtime_exception( "Requested too large league_size for TeamPolicy on Cuda execution space."); @@ -431,9 +478,10 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::RangePolicy< Traits ... > Policy; private: - typedef Kokkos::RangePolicy< Traits ... > Policy; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -479,11 +527,17 @@ public: void execute() const { const typename Policy::index_type nwork = m_policy.end() - m_policy.begin(); - const int block_size = Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds>( m_functor , 1, 0 , 0 ); - const dim3 block( 1 , block_size , 1); - const dim3 grid( std::min( typename Policy::index_type(( nwork + block.y - 1 ) / block.y) , typename Policy::index_type(cuda_internal_maximum_grid_count()) ) , 1 , 1); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + cudaFuncAttributes attr = CudaParallelLaunch< ParallelFor, LaunchBounds >:: + get_cuda_func_attributes(); + const int block_size = Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , 1, 0 , 0 ); + const dim3 block( 1 , block_size , 1); + const dim3 grid( std::min( typename Policy::index_type(( nwork + block.y - 1 ) / block.y) , + typename Policy::index_type(cuda_internal_maximum_grid_count()) ) , 1 , 1); + + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_policy.space().impl_internal_space_instance() , false ); } ParallelFor( const FunctorType & arg_functor , @@ -491,6 +545,7 @@ public: : m_functor( arg_functor ) , m_policy( arg_policy ) { } + }; @@ -501,8 +556,9 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { -private: +public: typedef Kokkos::MDRangePolicy< Traits ... > Policy ; +private: using RP = Policy; typedef typename Policy::array_index_type array_index_type; typedef typename Policy::index_type index_type; @@ -526,7 +582,7 @@ public: void execute() const { if(m_rp.m_num_tiles==0) return; - const array_index_type maxblocks = static_cast(Kokkos::Impl::CudaTraits::UpperBoundGridCount); + const array_index_type maxblocks = static_cast(m_rp.space().impl_internal_space_instance()->m_maxBlock); if ( RP::rank == 2 ) { const dim3 block( m_rp.m_tile[0] , m_rp.m_tile[1] , 1); @@ -535,7 +591,7 @@ public: , std::min( ( m_rp.m_upper[1] - m_rp.m_lower[1] + block.y - 1 ) / block.y , maxblocks ) , 1 ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 3 ) { @@ -545,7 +601,7 @@ public: , std::min( ( m_rp.m_upper[1] - m_rp.m_lower[1] + block.y - 1 ) / block.y , maxblocks ) , std::min( ( m_rp.m_upper[2] - m_rp.m_lower[2] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 4 ) { @@ -557,7 +613,7 @@ public: , std::min( ( m_rp.m_upper[2] - m_rp.m_lower[2] + block.y - 1 ) / block.y , maxblocks ) , std::min( ( m_rp.m_upper[3] - m_rp.m_lower[3] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 5 ) { @@ -570,7 +626,7 @@ public: , static_cast(maxblocks) ) , std::min( ( m_rp.m_upper[4] - m_rp.m_lower[4] + block.z - 1 ) / block.z , maxblocks ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else if ( RP::rank == 6 ) { @@ -584,7 +640,7 @@ public: , std::min( static_cast( m_rp.m_tile_end[4] * m_rp.m_tile_end[5] ) , static_cast(maxblocks) ) ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 ); + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this , grid , block , 0 , m_rp.space().impl_internal_space_instance() , false ); } else { @@ -609,9 +665,10 @@ class ParallelFor< FunctorType , Kokkos::Cuda > { +public: + typedef TeamPolicyInternal< Kokkos::Cuda , Properties ... > Policy ; private: - typedef TeamPolicyInternal< Kokkos::Cuda , Properties ... > Policy ; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -631,13 +688,14 @@ private: // const FunctorType m_functor ; + const Policy m_policy ; const size_type m_league_size ; - const size_type m_team_size ; + int m_team_size ; const size_type m_vector_size ; - const int m_shmem_begin ; - const int m_shmem_size ; + int m_shmem_begin ; + int m_shmem_size ; void* m_scratch_ptr[2] ; - const int m_scratch_size[2] ; + int m_scratch_size[2] ; template< class TagType > __device__ inline @@ -705,7 +763,7 @@ public: const dim3 grid( int(m_league_size) , 1 , 1 ); const dim3 block( int(m_vector_size) , int(m_team_size) , 1 ); - CudaParallelLaunch< ParallelFor, LaunchBounds >( *this, grid, block, shmem_size_total ); // copy to device and execute + CudaParallelLaunch< ParallelFor, LaunchBounds >( *this, grid, block, shmem_size_total, m_policy.space().impl_internal_space_instance() , true ); // copy to device and execute } @@ -713,26 +771,37 @@ public: , const Policy & arg_policy ) : m_functor( arg_functor ) + , m_policy( arg_policy ) , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelFor, LaunchBounds >( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) - , m_shmem_begin( sizeof(double) * ( m_team_size + 2 ) ) - , m_shmem_size( arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( m_functor , m_team_size ) ) - , m_scratch_ptr{NULL,NULL} - , m_scratch_size{arg_policy.scratch_size(0,m_team_size),arg_policy.scratch_size(1,m_team_size)} { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelFor, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size:Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + + m_shmem_begin = ( sizeof(double) * ( m_team_size + 2 ) ); + m_shmem_size = ( m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( m_functor , m_team_size ) ); + m_scratch_size[0] = m_policy.scratch_size(0,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + // Functor's reduce memory, team scan memory, and team shared memory depend upon team size. - m_scratch_ptr[1] = cuda_resize_scratch_space(m_scratch_size[1]*(Cuda::concurrency()/(m_team_size*m_vector_size))); + m_scratch_ptr[0] = NULL; + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*static_cast(Cuda::concurrency()/(m_team_size*m_vector_size))); const int shmem_size_total = m_shmem_begin + m_shmem_size ; - if ( CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + if ( m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { + printf("%i %i\n",m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock,shmem_size_total); Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelFor< Cuda > insufficient shared memory")); } if ( int(m_team_size) > - int(Kokkos::Impl::cuda_get_max_block_size< ParallelFor, LaunchBounds > - ( arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { + int(Kokkos::Impl::cuda_get_max_block_size< FunctorType, LaunchBounds > + ( m_policy.space().impl_internal_space_instance(), + attr, arg_functor , arg_policy.vector_length(), arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / arg_policy.vector_length())) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelFor< Cuda > requested too large team size.")); } } @@ -754,9 +823,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::RangePolicy< Traits ... > Policy ; private: - typedef Kokkos::RangePolicy< Traits ... > Policy ; typedef typename Policy::WorkRange WorkRange ; typedef typename Policy::work_tag WorkTag ; @@ -897,11 +967,16 @@ public: }*/ // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { unsigned n = CudaTraits::WarpSize * 8 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + int shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + while ( (n && (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size)) || + (n > static_cast(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce, LaunchBounds>( f , 1, shmem_size , 0 )))) { + n >>= 1 ; + shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + } return n ; } @@ -912,9 +987,9 @@ public: if ( nwork ) { const int block_size = local_block_size( m_functor ); - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); // REQUIRED ( 1 , N , 1 ) const dim3 block( 1 , block_size , 1 ); @@ -923,10 +998,10 @@ public: const int shmem = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( m_functor , block.y ); - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -987,9 +1062,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef Kokkos::MDRangePolicy< Traits ... > Policy ; private: - typedef Kokkos::MDRangePolicy< Traits ... > Policy ; typedef typename Policy::array_index_type array_index_type; typedef typename Policy::index_type index_type; @@ -1121,11 +1197,16 @@ public: } */ // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { unsigned n = CudaTraits::WarpSize * 8 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + int shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + while ( (n && (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size)) || + (n > static_cast(Kokkos::Impl::cuda_get_max_block_size< ParallelReduce, LaunchBounds>( f , 1, shmem_size , 0 )))) { + n >>= 1 ; + shmem_size = cuda_single_inter_block_reduce_scan_shmem( f , n ); + } return n ; } @@ -1144,9 +1225,9 @@ public: block_size = (block_size > suggested_blocksize) ? block_size : suggested_blocksize ; //Note: block_size must be less than or equal to 512 - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_size /* block_size == max block_count */ ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); // REQUIRED ( 1 , N , 1 ) const dim3 block( 1 , block_size , 1 ); @@ -1155,10 +1236,10 @@ public: const int shmem = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( m_functor , block.y ); - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -1213,8 +1294,6 @@ public: //---------------------------------------------------------------------------- -#if 1 - template< class FunctorType , class ReducerType, class ... Properties > class ParallelReduce< FunctorType , Kokkos::TeamPolicy< Properties ... > @@ -1222,9 +1301,10 @@ class ParallelReduce< FunctorType , Kokkos::Cuda > { +public: + typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; private: - typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::launch_bounds LaunchBounds ; @@ -1261,6 +1341,7 @@ private: // const FunctorType m_functor ; + const Policy m_policy ; const ReducerType m_reducer ; const pointer_type m_result_ptr ; const bool m_result_ptr_device_accessible ; @@ -1273,7 +1354,7 @@ private: void* m_scratch_ptr[2] ; int m_scratch_size[2] ; const size_type m_league_size ; - const size_type m_team_size ; + int m_team_size ; const size_type m_vector_size ; template< class TagType > @@ -1412,20 +1493,20 @@ public: const int nwork = m_league_size * m_team_size ; if ( nwork ) { const int block_count = UseShflReduction? std::min( m_league_size , size_type(1024*32) ) - :std::min( m_league_size , m_team_size ); + :std::min( int(m_league_size) , m_team_size ); - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_count ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) ); - m_unified_space = cuda_internal_scratch_unified( ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); + m_scratch_space = cuda_internal_scratch_space(m_policy.space(), ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) * block_count ); + m_scratch_flags = cuda_internal_scratch_flags(m_policy.space(), sizeof(size_type) ); + m_unified_space = cuda_internal_scratch_unified( m_policy.space(),ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ) ); const dim3 block( m_vector_size , m_team_size , 1 ); const dim3 grid( block_count , 1 , 1 ); const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size ; - CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem_size_total ); // copy to device and execute + CudaParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem_size_total , m_policy.space().impl_internal_space_instance() , true ); // copy to device and execute if(!m_result_ptr_device_accessible) { - Cuda::fence(); + Cuda().fence(); if ( m_result_ptr ) { if ( m_unified_space ) { @@ -1454,6 +1535,7 @@ public: Kokkos::is_view< ViewType >::value ,void*>::type = NULL) : m_functor( arg_functor ) + , m_policy ( arg_policy ) , m_reducer( InvalidType() ) , m_result_ptr( arg_result.data() ) , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ViewType::memory_space>::accessible ) @@ -1464,35 +1546,30 @@ public: , m_shmem_begin( 0 ) , m_shmem_size( 0 ) , m_scratch_ptr{NULL,NULL} - , m_scratch_size{ - arg_policy.scratch_size(0,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) - ), arg_policy.scratch_size(1,( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) - )} , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelReduce, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size: + Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + // Return Init value if the number of worksets is zero - if( arg_policy.league_size() == 0) { + if( m_league_size*m_team_size == 0) { ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , arg_result.data() ); return ; } m_team_begin = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( arg_functor , m_team_size ); m_shmem_begin = sizeof(double) * ( m_team_size + 2 ); - m_shmem_size = arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); - m_scratch_ptr[1] = cuda_resize_scratch_space(static_cast(m_scratch_size[1])*(static_cast(Cuda::concurrency()/(m_team_size*m_vector_size)))); + m_shmem_size = m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); m_scratch_size[0] = m_shmem_size; - m_scratch_size[1] = arg_policy.scratch_size(1,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*(static_cast(Cuda::concurrency()/(m_team_size*m_vector_size)))); // The global parallel_reduce does not support vector_length other than 1 at the moment if( (arg_policy.vector_length() > 1) && !UseShflReduction ) @@ -1509,7 +1586,7 @@ public: Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } - if ( CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + if ( m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > requested too much L0 scratch memory")); } @@ -1523,6 +1600,7 @@ public: , const Policy & arg_policy , const ReducerType & reducer) : m_functor( arg_functor ) + , m_policy( arg_policy ) , m_reducer( reducer ) , m_result_ptr( reducer.view().data() ) , m_result_ptr_device_accessible(MemorySpaceAccess< Kokkos::CudaSpace , typename ReducerType::result_view_type::memory_space>::accessible ) @@ -1534,12 +1612,17 @@ public: , m_shmem_size( 0 ) , m_scratch_ptr{NULL,NULL} , m_league_size( arg_policy.league_size() ) - , m_team_size( 0 <= arg_policy.team_size() ? arg_policy.team_size() : - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds >( arg_functor , arg_policy.vector_length(), - arg_policy.team_scratch_size(0),arg_policy.thread_scratch_size(0) ) / - arg_policy.vector_length() ) + , m_team_size( arg_policy.team_size() ) , m_vector_size( arg_policy.vector_length() ) { + cudaFuncAttributes attr = CudaParallelLaunch< ParallelReduce, LaunchBounds >:: + get_cuda_func_attributes(); + m_team_size = m_team_size>=0?m_team_size: + Kokkos::Impl::cuda_get_opt_block_size< FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), + attr, m_functor , m_vector_size, + m_policy.team_scratch_size(0), m_policy.thread_scratch_size(0) )/m_vector_size; + // Return Init value if the number of worksets is zero if( arg_policy.league_size() == 0) { ValueInit::init( ReducerConditional::select(m_functor , m_reducer) , m_result_ptr ); @@ -1548,10 +1631,10 @@ public: m_team_begin = UseShflReduction?0:cuda_single_inter_block_reduce_scan_shmem( arg_functor , m_team_size ); m_shmem_begin = sizeof(double) * ( m_team_size + 2 ); - m_shmem_size = arg_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); - m_scratch_ptr[1] = cuda_resize_scratch_space(m_scratch_size[1]*(Cuda::concurrency()/(m_team_size*m_vector_size))); + m_shmem_size = m_policy.scratch_size(0,m_team_size) + FunctorTeamShmemSize< FunctorType >::value( arg_functor , m_team_size ); m_scratch_size[0] = m_shmem_size; - m_scratch_size[1] = arg_policy.scratch_size(1,m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1,m_team_size); + m_scratch_ptr[1] = m_team_size<=0?NULL:cuda_resize_scratch_space(static_cast(m_scratch_size[1])*static_cast(Cuda::concurrency()/(m_team_size*m_vector_size))); // The global parallel_reduce does not support vector_length other than 1 at the moment if( (arg_policy.vector_length() > 1) && !UseShflReduction ) @@ -1565,7 +1648,7 @@ public: const int shmem_size_total = m_team_begin + m_shmem_begin + m_shmem_size ; if ( (! Kokkos::Impl::is_integral_power_of_two( m_team_size ) && !UseShflReduction ) || - CudaTraits::SharedMemoryCapacity < shmem_size_total ) { + m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < shmem_size_total ) { Kokkos::Impl::throw_runtime_exception(std::string("Kokkos::Impl::ParallelReduce< Cuda > bad team size")); } if ( int(m_team_size) > arg_policy.team_size_max(m_functor,ParallelReduceTag()) ) { @@ -1575,365 +1658,6 @@ public: } }; -//---------------------------------------------------------------------------- -#else -//---------------------------------------------------------------------------- - -template< class FunctorType , class ReducerType, class ... Properties > -class ParallelReduce< FunctorType - , Kokkos::TeamPolicy< Properties ... > - , ReducerType - , Kokkos::Cuda - > -{ -private: - - enum : int { align_scratch_value = 0x0100 /* 256 */ }; - enum : int { align_scratch_mask = align_scratch_value - 1 }; - - KOKKOS_INLINE_FUNCTION static constexpr - int align_scratch( const int n ) - { - return ( n & align_scratch_mask ) - ? n + align_scratch_value - ( n & align_scratch_mask ) : n ; - } - - //---------------------------------------- - // Reducer does not wrap a functor - template< class R = ReducerType , class F = void > - struct reducer_type : public R { - - template< class S > - using rebind = reducer_type< typename R::rebind , void > ; - - KOKKOS_INLINE_FUNCTION - reducer_type( FunctorType const * - , ReducerType const * arg_reducer - , typename R::value_type * arg_value ) - : R( *arg_reducer , arg_value ) {} - }; - - // Reducer does wrap a functor - template< class R > - struct reducer_type< R , FunctorType > : public R { - - template< class S > - using rebind = reducer_type< typename R::rebind , FunctorType > ; - - KOKKOS_INLINE_FUNCTION - reducer_type( FunctorType const * arg_functor - , ReducerType const * - , typename R::value_type * arg_value ) - : R( arg_functor , arg_value ) {} - }; - - //---------------------------------------- - - typedef TeamPolicyInternal< Kokkos::Cuda, Properties ... > Policy ; - typedef CudaTeamMember Member ; - typedef typename Policy::work_tag WorkTag ; - typedef typename reducer_type<>::pointer_type pointer_type ; - typedef typename reducer_type<>::reference_type reference_type ; - typedef typename reducer_type<>::value_type value_type ; - typedef typename Policy::launch_bounds LaunchBounds ; - - typedef Kokkos::Impl::FunctorAnalysis - < Kokkos::Impl::FunctorPatternInterface::REDUCE - , Policy - , FunctorType - > Analysis ; - -public: - - typedef FunctorType functor_type ; - typedef Cuda::size_type size_type ; - -private: - - const FunctorType m_functor ; - const reducer_type<> m_reducer ; - size_type * m_scratch_space ; - size_type * m_unified_space ; - size_type m_team_begin ; - size_type m_shmem_begin ; - size_type m_shmem_size ; - void* m_scratch_ptr[2] ; - int m_scratch_size[2] ; - const size_type m_league_size ; - const size_type m_team_size ; - const size_type m_vector_size ; - - template< class TagType > - __device__ inline - typename std::enable_if< std::is_same< TagType , void >::value >::type - exec_team( const Member & member , reference_type update ) const - { m_functor( member , update ); } - - template< class TagType > - __device__ inline - typename std::enable_if< ! std::is_same< TagType , void >::value >::type - exec_team( const Member & member , reference_type update ) const - { m_functor( TagType() , member , update ); } - - -public: - - __device__ inline - void operator() () const - { - void * const shmem = kokkos_impl_cuda_shared_memory(); - - const bool reduce_to_host = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::HostSpace >::value && - m_reducer.data(); - - value_type value ; - - typename reducer_type<>::rebind< CudaSpace > - reduce( & m_functor , & m_reducer , & value ); - - reduce.init( reduce.data() ); - - // Iterate this block through the league - - for ( int league_rank = blockIdx.x - ; league_rank < m_league_size - ; league_rank += gridDim.x ) { - - // Initialization of team member data: - - const Member member - ( shmem - , m_shmem_team_begin - , m_shmem_team_size - , reinterpret_cast(m_scratch_space) + m_global_team_begin - , m_global_team_size - , league_rank - , m_league_size ); - - ParallelReduce::template - exec_team< WorkTag >( member , reduce.reference() ); - } - - if ( Member::global_reduce( reduce - , m_scratch_space - , reinterpret_cast(m_scratch_space) - + aligned_flag_size - , shmem - , m_shmem_size ) ) { - - // Single thread with data in value - - reduce.final( reduce.data() ); - - if ( reduce_to_host ) { - reducer.copy( m_unified_space , reduce.data() ); - } - } - } - - - inline - void execute() - { - const bool reduce_to_host = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::HostSpace >::value && - m_reducer.data(); - - const bool reduce_to_gpu = - std::is_same< typename reducer_type<>::memory_space - , Kokkos::CudaSpace >::value && - m_reducer.data(); - - if ( m_league_size && m_team_size ) { - - const int value_size = Analysis::value_size( m_functor ); - - m_scratch_space = cuda_internal_scratch_space( m_scratch_size ); - m_unified_space = cuda_internal_scratch_unified( value_size ); - - const dim3 block( m_vector_size , m_team_size , m_team_per_block ); - const dim3 grid( m_league_size , 1 , 1 ); - const int shmem = m_shmem_team_begin + m_shmem_team_size ; - - // copy to device and execute - CudaParallelLaunch( *this, grid, block, shmem ); - - Cuda::fence(); - - if ( reduce_to_host ) { - m_reducer.copy( m_reducer.data() , pointer_type(m_unified_space) ); - } - } - else if ( reduce_to_host ) { - m_reducer.init( m_reducer.data() ); - } - else if ( reduce_to_gpu ) { - value_type tmp ; - m_reduce.init( & tmp ); - cudaMemcpy( m_reduce.data() , & tmp , cudaMemcpyHostToDevice ); - } - } - - - /**\brief Set up parameters and allocations for kernel launch. - * - * block = { vector_size , team_size , team_per_block } - * grid = { number_of_teams , 1 , 1 } - * - * shmem = shared memory for: - * [ team_reduce_buffer - * , team_scratch_buffer_level_0 ] - * reused by: - * [ global_reduce_buffer ] - * - * global_scratch for: - * [ global_reduce_flag_buffer - * , global_reduce_value_buffer - * , team_scratch_buffer_level_1 * max_concurrent_team ] - */ - - ParallelReduce( FunctorType && arg_functor - , Policy && arg_policy - , ReducerType const & arg_reducer - ) - : m_functor( arg_functor ) - // the input reducer may wrap the input functor so must - // generate a reducer bound to the copied functor. - , m_reducer( & m_functor , & arg_reducer , arg_reducer.data() ) - , m_scratch_space( 0 ) - , m_unified_space( 0 ) - , m_team_begin( 0 ) - , m_shmem_begin( 0 ) - , m_shmem_size( 0 ) - , m_scratch_ptr{NULL,NULL} - , m_league_size( arg_policy.league_size() ) - , m_team_per_block( 0 ) - , m_team_size( arg_policy.team_size() ) - , m_vector_size( arg_policy.vector_length() ) - { - if ( 0 == m_league_size ) return ; - - const int value_size = Analysis::value_size( m_functor ); - - //---------------------------------------- - // Vector length must be <= WarpSize and power of two - - const bool ok_vector = m_vector_size < CudaTraits::WarpSize && - Kokkos::Impl::is_integral_power_of_two( m_vector_size ); - - //---------------------------------------- - - if ( 0 == m_team_size ) { - // Team size is AUTO, use a whole block per team. - // Calculate block size using the occupance calculator. - // Occupancy calculator assumes whole block. - - m_team_size = - Kokkos::Impl::cuda_get_opt_block_size< ParallelReduce, LaunchBounds > - ( arg_functor - , arg_policy.vector_length() - , arg_policy.team_scratch_size(0) - , arg_policy.thread_scratch_size(0) / arg_policy.vector_length() ); - - m_team_per_block = 1 ; - } - - //---------------------------------------- - // How many CUDA threads per team. - // If more than a warp or multiple teams cannot exactly fill a warp - // then only one team per block. - - const int team_threads = m_team_size * m_vector_size ; - - if ( ( CudaTraits::WarpSize < team_threads ) || - ( CudaTraits::WarpSize % team_threads ) ) { - m_team_per_block = 1 ; - } - - //---------------------------------------- - // How much team scratch shared memory determined from - // either the functor or the policy: - - if ( CudaTraits::WarpSize < team_threads ) { - // Need inter-warp team reduction (collectives) shared memory - // Speculate an upper bound for the value size - - m_shmem_team_begin = - align_scratch( CudaTraits::warp_count(team_threads) * sizeof(double) ); - } - - m_shmem_team_size = arg_policy.scratch_size(0,m_team_size); - - if ( 0 == m_shmem_team_size ) { - m_shmem_team_size = Analysis::team_shmem_size( m_functor , m_team_size ); - } - - m_shmem_team_size = align_scratch( m_shmem_team_size ); - - // Can fit a team in a block: - - const bool ok_shmem_team = - ( m_shmem_team_begin + m_shmem_team_size ) - < CudaTraits::SharedMemoryCapacity ; - - //---------------------------------------- - - if ( 0 == m_team_per_block ) { - // Potentially more than one team per block. - // Determine number of teams per block based upon - // how much team scratch can fit and exactly filling each warp. - - const int team_per_warp = team_threads / CudaTraits::WarpSize ; - - const int max_team_per_block = - Kokkos::Impl::CudaTraits::SharedMemoryCapacity - / shmem_team_scratch_size ; - - for ( m_team_per_block = team_per_warp ; - m_team_per_block + team_per_warp < max_team_per_block ; - m_team_per_block += team_per_warp ); - } - - //---------------------------------------- - // How much global reduce scratch shared memory. - - int shmem_global_reduce_size = 8 * value_size ; - - //---------------------------------------- - // Global scratch memory requirements. - - const int aligned_flag_size = align_scratch( sizeof(int) ); - - const int max_concurrent_block = - cuda_internal_maximum_concurrent_block_count(); - - // Reduce space has claim flag followed by vaue buffer - const int global_reduce_value_size = - max_concurrent_block * - ( aligned_flag_size + align_scratch( value_size ) ); - - // Scratch space has claim flag followed by scratch buffer - const int global_team_scratch_size = - max_concurrent_block * m_team_per_block * - ( aligned_flag_size + - align_scratch( arg_policy.scratch_size(1,m_team_size) / m_vector_size ) - ); - - const int global_size = aligned_flag_size - + global_reduce_value_size - + global_team_scratch_size ; - - m_global_reduce_begin = aligned_flag_size ; - m_global_team_begin = m_global_reduce_begin + global_reduce_value_size ; - m_global_size = m_global_team_begin + global_team_scratch_size ; - } -}; - -#endif - } // namespace Impl } // namespace Kokkos @@ -1949,9 +1673,9 @@ class ParallelScan< FunctorType , Kokkos::Cuda > { -private: - +public: typedef Kokkos::RangePolicy< Traits ... > Policy ; +private: typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::WorkRange WorkRange ; @@ -2105,7 +1829,7 @@ public: } // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { // blockDim.y must be power of two = 128 (4 warps) or 256 (8 warps) or 512 (16 warps) @@ -2114,7 +1838,7 @@ public: // 4 warps was 10% faster than 8 warps and 20% faster than 16 warps in unit testing unsigned n = CudaTraits::WarpSize * 4 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + while ( n && unsigned(m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock) < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } return n ; } @@ -2140,18 +1864,18 @@ public: // How many block are really needed for this much work: const int grid_x = ( nwork + work_per_block - 1 ) / work_per_block ; - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( m_functor ) * grid_x ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) * 1 ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( m_functor ) * grid_x ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) * 1 ); const dim3 grid( grid_x , 1 , 1 ); const dim3 block( 1 , block_size , 1 ); // REQUIRED DIMENSIONS ( 1 , N , 1 ) const int shmem = ValueTraits::value_size( m_functor ) * ( block_size + 2 ); m_final = false ; - CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute m_final = true ; - CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScan, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute } } @@ -2173,9 +1897,10 @@ class ParallelScanWithTotal< FunctorType , Kokkos::Cuda > { -private: - +public: typedef Kokkos::RangePolicy< Traits ... > Policy ; + +private: typedef typename Policy::member_type Member ; typedef typename Policy::work_tag WorkTag ; typedef typename Policy::WorkRange WorkRange ; @@ -2332,7 +2057,7 @@ public: } // Determine block size constrained by shared memory: - static inline + inline unsigned local_block_size( const FunctorType & f ) { // blockDim.y must be power of two = 128 (4 warps) or 256 (8 warps) or 512 (16 warps) @@ -2341,7 +2066,7 @@ public: // 4 warps was 10% faster than 8 warps and 20% faster than 16 warps in unit testing unsigned n = CudaTraits::WarpSize * 4 ; - while ( n && CudaTraits::SharedMemoryCapacity < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } + while ( n && unsigned(m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock) < cuda_single_inter_block_reduce_scan_shmem( f , n ) ) { n >>= 1 ; } return n ; } @@ -2367,18 +2092,18 @@ public: // How many block are really needed for this much work: const int grid_x = ( nwork + work_per_block - 1 ) / work_per_block ; - m_scratch_space = cuda_internal_scratch_space( ValueTraits::value_size( m_functor ) * grid_x ); - m_scratch_flags = cuda_internal_scratch_flags( sizeof(size_type) * 1 ); + m_scratch_space = cuda_internal_scratch_space( m_policy.space(), ValueTraits::value_size( m_functor ) * grid_x ); + m_scratch_flags = cuda_internal_scratch_flags( m_policy.space(), sizeof(size_type) * 1 ); const dim3 grid( grid_x , 1 , 1 ); const dim3 block( 1 , block_size , 1 ); // REQUIRED DIMENSIONS ( 1 , N , 1 ) const int shmem = ValueTraits::value_size( m_functor ) * ( block_size + 2 ); m_final = false ; - CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute m_final = true ; - CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute + CudaParallelLaunch< ParallelScanWithTotal, LaunchBounds >( *this, grid, block, shmem , m_policy.space().impl_internal_space_instance() , false ); // copy to device and execute const int size = ValueTraits::value_size( m_functor ); DeepCopy( &m_returnvalue, m_scratch_space + (grid_x - 1)*size/sizeof(int), size ); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp index d09854c3a5..c39dddb198 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp @@ -376,13 +376,13 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_intra_warp_reduction( const ReducerType& reducer, + typename ReducerType::value_type& result, const uint32_t max_active_thread = blockDim.y) { typedef typename ReducerType::value_type ValueType; unsigned int shift = 1; - ValueType result = reducer.reference(); //Reduce over values from threads with different threadIdx.y while(blockDim.x * shift < 32 ) { const ValueType tmp = shfl_down(result, blockDim.x*shift,32u); @@ -400,6 +400,7 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_inter_warp_reduction( const ReducerType& reducer, + typename ReducerType::value_type value, const int max_active_thread = blockDim.y) { typedef typename ReducerType::value_type ValueType; @@ -410,7 +411,6 @@ cuda_inter_warp_reduction( const ReducerType& reducer, // could lead to race conditions __shared__ double sh_result[(sizeof(ValueType)+7)/8*STEP_WIDTH]; ValueType* result = (ValueType*) & sh_result; - ValueType value = reducer.reference(); const int step = 32 / blockDim.x; int shift = STEP_WIDTH; const int id = threadIdx.y%step==0?threadIdx.y/step:65000; @@ -438,9 +438,18 @@ template< class ReducerType > __device__ inline typename std::enable_if< Kokkos::is_reducer::value >::type cuda_intra_block_reduction( const ReducerType& reducer, + typename ReducerType::value_type value, const int max_active_thread = blockDim.y) { - cuda_intra_warp_reduction(reducer,max_active_thread); - cuda_inter_warp_reduction(reducer,max_active_thread); + cuda_intra_warp_reduction(reducer,value,max_active_thread); + cuda_inter_warp_reduction(reducer,value,max_active_thread); +} + +template< class ReducerType > +__device__ inline +typename std::enable_if< Kokkos::is_reducer::value >::type +cuda_intra_block_reduction( const ReducerType& reducer, + const int max_active_thread = blockDim.y) { + cuda_intra_block_reduction(reducer,reducer.reference(),max_active_thread); } template< class ReducerType> diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp index ee949583f1..ac36cfd67e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.cpp @@ -54,194 +54,8 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::Cuda > ; - -//---------------------------------------------------------------------------- - -__device__ -void TaskQueueSpecialization< Kokkos::Cuda >::driver - ( TaskQueueSpecialization< Kokkos::Cuda >::queue_type * const queue - , int32_t shmem_per_warp ) -{ - using Member = TaskExec< Kokkos::Cuda > ; - using Queue = TaskQueue< Kokkos::Cuda > ; - using task_root_type = TaskBase< void , void , void > ; - - extern __shared__ int32_t shmem_all[]; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - int32_t * const warp_shmem = - shmem_all + ( threadIdx.z * shmem_per_warp ) / sizeof(int32_t); - - task_root_type * const task_shmem = (task_root_type *) warp_shmem ; - - const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x ; - - Member single_exec( warp_shmem , 1 ); - Member team_exec( warp_shmem , blockDim.y ); - - task_root_type * task_ptr ; - - // Loop until all queues are empty and no tasks in flight - - do { - - // Each team lead attempts to acquire either a thread team task - // or collection of single thread tasks for the team. - - if ( 0 == warp_lane ) { - - task_ptr = 0 < *((volatile int *) & queue->m_ready_count) ? end : 0 ; - - // Loop by priority and then type - for ( int i = 0 ; i < Queue::NumQueue && end == task_ptr ; ++i ) { - for ( int j = 0 ; j < 2 && end == task_ptr ; ++j ) { - task_ptr = Queue::pop_ready_task( & queue->m_ready[i][j] ); - } - } - -#if 0 -printf("TaskQueue::driver(%d,%d) task(%lx)\n",threadIdx.z,blockIdx.x - , uintptr_t(task_ptr)); -#endif - - } - - // Synchronize warp with memory fence before broadcasting task pointer: - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "A" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // Broadcast task pointer: - - ((int*) & task_ptr )[0] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[0] , 0 , 32 ); - ((int*) & task_ptr )[1] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[1] , 0 , 32 ); - -#if defined( KOKKOS_DEBUG ) - KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "TaskQueue CUDA task_ptr" ); -#endif - - if ( 0 == task_ptr ) break ; // 0 == queue->m_ready_count - - if ( end != task_ptr ) { - - // Whole warp copy task's closure to/from shared memory. - // Use all threads of warp for coalesced read/write. - - int32_t const b = sizeof(task_root_type) / sizeof(int32_t); - int32_t const e = *((int32_t volatile *)( & task_ptr->m_alloc_size )) / sizeof(int32_t); - - int32_t volatile * const task_mem = (int32_t volatile *) task_ptr ; - - // copy task closure from global to shared memory: - - for ( int32_t i = warp_lane ; i < e ; i += CudaTraits::WarpSize ) { - warp_shmem[i] = task_mem[i] ; - } - - // Synchronize threads of the warp and insure memory - // writes are visible to all threads in the warp. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "B" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - if ( task_root_type::TaskTeam == task_shmem->m_task_type ) { - // Thread Team Task - (*task_shmem->m_apply)( task_shmem , & team_exec ); - } - else if ( 0 == threadIdx.y ) { - // Single Thread Task - (*task_shmem->m_apply)( task_shmem , & single_exec ); - } - - // Synchronize threads of the warp and insure memory - // writes are visible to all threads in the warp. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "C" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // copy task closure from shared to global memory: - - for ( int32_t i = b + warp_lane ; i < e ; i += CudaTraits::WarpSize ) { - task_mem[i] = warp_shmem[i] ; - } - - // Synchronize threads of the warp and insure memory - // writes are visible to root thread of the warp for - // respawn or completion. - - // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "D" ); - KOKKOS_IMPL_CUDA_SYNCWARP ; - - // If respawn requested copy respawn data back to main memory - - if ( 0 == warp_lane ) { - - if ( ((task_root_type *) task_root_type::LockTag) != task_shmem->m_next ) { - ( (volatile task_root_type *) task_ptr )->m_next = task_shmem->m_next ; - ( (volatile task_root_type *) task_ptr )->m_priority = task_shmem->m_priority ; - } - - queue->complete( task_ptr ); - } - } - } while(1); -} - -namespace { - -__global__ -void cuda_task_queue_execute( TaskQueue< Kokkos::Cuda > * queue - , int32_t shmem_size ) -{ TaskQueueSpecialization< Kokkos::Cuda >::driver( queue , shmem_size ); } - -} - -void TaskQueueSpecialization< Kokkos::Cuda >::execute - ( TaskQueue< Kokkos::Cuda > * const queue ) -{ - const int shared_per_warp = 2048 ; - const int warps_per_block = 4 ; - const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); - const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); - const int shared_total = shared_per_warp * warps_per_block ; - const cudaStream_t stream = 0 ; - - CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - -#if 0 -printf("cuda_task_queue_execute before\n"); -#endif - - // Query the stack size, in bytes: - - size_t previous_stack_size = 0 ; - CUDA_SAFE_CALL( cudaDeviceGetLimit( & previous_stack_size , cudaLimitStackSize ) ); - - // If not large enough then set the stack size, in bytes: - - const size_t larger_stack_size = 2048 ; - - if ( previous_stack_size < larger_stack_size ) { - CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , larger_stack_size ) ); - } - - cuda_task_queue_execute<<< grid , block , shared_total , stream >>>( queue , shared_per_warp ); - - CUDA_SAFE_CALL( cudaGetLastError() ); - - CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - - if ( previous_stack_size < larger_stack_size ) { - CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , previous_stack_size ) ); - } - -#if 0 -printf("cuda_task_queue_execute after\n"); -#endif - -} +template class TaskQueue< Kokkos::Cuda, Impl::default_tasking_memory_space_for_execution_space_t > ; +template class TaskQueueMultiple< Kokkos::Cuda, Impl::default_tasking_memory_space_for_execution_space_t > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp index 8fa1192567..c35987e49e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp @@ -50,6 +50,14 @@ //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- +#include + +#include +#include // CUDA_SAFE_CALL +#include + +//---------------------------------------------------------------------------- + namespace Kokkos { namespace Impl { namespace { @@ -57,54 +65,498 @@ namespace { template< typename TaskType > __global__ void set_cuda_task_base_apply_function_pointer - ( TaskBase::function_type * ptr ) -{ *ptr = TaskType::apply ; } + ( typename TaskType::function_type * ptr, typename TaskType::destroy_type* dtor ) +{ + *ptr = TaskType::apply; + *dtor = TaskType::destroy; +} + +template< typename Scheduler > +__global__ +void cuda_task_queue_execute( Scheduler scheduler, int32_t shmem_size ) { + TaskQueueSpecialization< Scheduler >::driver( std::move(scheduler) , shmem_size ); +} } -template< class > class TaskExec ; +template class TaskExec ; -template<> -class TaskQueueSpecialization< Kokkos::Cuda > +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::Cuda ; - using memory_space = Kokkos::CudaUVMSpace ; - using queue_type = TaskQueue< execution_space > ; - using member_type = TaskExec< Kokkos::Cuda > ; + using scheduler_type = SimpleTaskScheduler; + using execution_space = Kokkos::Cuda; + using memory_space = Kokkos::CudaUVMSpace; + using member_type = TaskExec ; + enum : long { max_league_size = 16 }; + enum : int { warps_per_block = 4 }; + + KOKKOS_INLINE_FUNCTION static - void iff_single_thread_recursive_execute( queue_type * const ) {} + void iff_single_thread_recursive_execute( scheduler_type const& ) {} + + static int get_max_team_count( + execution_space const& + ) { + return Kokkos::Impl::cuda_internal_multiprocessor_count() * warps_per_block; + } __device__ - static void driver( queue_type * const , int32_t ); + static void driver(scheduler_type scheduler, int32_t shmem_per_warp) + { + using queue_type = typename scheduler_type::task_queue_type; + using task_base_type = typename scheduler_type::task_base_type; + using runnable_task_base_type = typename scheduler_type::runnable_task_base_type; + using scheduling_info_storage_type = + SchedulingInfoStorage< + runnable_task_base_type, + typename scheduler_type::task_scheduling_info_type + >; + + extern __shared__ int32_t shmem_all[]; + + int32_t* const warp_shmem = shmem_all + (threadIdx.z * shmem_per_warp) / sizeof(int32_t); + + task_base_type* const shared_memory_task_copy = (task_base_type*)warp_shmem; + + const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x; + + member_type single_exec(scheduler, warp_shmem, 1); + member_type team_exec(scheduler, warp_shmem, blockDim.y); + + auto& queue = scheduler.queue(); + auto& team_scheduler = team_exec.scheduler(); + + auto current_task = OptionalRef(); + + // Loop until all queues are empty and no tasks in flight + while(not queue.is_done()) { + + if(warp_lane == 0) { // should be (?) same as team_exec.team_rank() == 0 + // pop off a task + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + } + + // Broadcast task pointer: + + // Sync before the broadcast + KOKKOS_IMPL_CUDA_SYNCWARP; + + // pretend it's an int* for shuffle purposes + ((int*) ¤t_task)[0] = KOKKOS_IMPL_CUDA_SHFL(((int*) ¤t_task)[0], 0, 32); + ((int*) ¤t_task)[1] = KOKKOS_IMPL_CUDA_SHFL(((int*) ¤t_task)[1], 0, 32); + + if(current_task) { + + KOKKOS_ASSERT(!current_task->as_runnable_task().get_respawn_flag()); + + int32_t b = sizeof(scheduling_info_storage_type) / sizeof(int32_t); + static_assert( + sizeof(scheduling_info_storage_type) % sizeof(int32_t) == 0, + "bad task size" + ); + int32_t const e = current_task->get_allocation_size() / sizeof(int32_t); + KOKKOS_ASSERT(current_task->get_allocation_size() % sizeof(int32_t) == 0); + + int32_t volatile* const task_mem = (int32_t volatile*)current_task.get(); + + // do a coordinated copy of the task closure from global to shared memory: + for(int32_t i = warp_lane; i < e; i += CudaTraits::WarpSize) { + warp_shmem[i] = task_mem[i]; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + KOKKOS_IMPL_CUDA_SYNCWARP; + + if(shared_memory_task_copy->is_team_runnable()) { + // Thread Team Task + shared_memory_task_copy->as_runnable_task().run(team_exec); + } + else if(threadIdx.y == 0) { + // TODO @tasking @optimization DSH Change this to warp_lane == 0 when we allow blockDim.x to be more than 1 + // Single Thread Task + shared_memory_task_copy->as_runnable_task().run(single_exec); + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + KOKKOS_IMPL_CUDA_SYNCWARP; + + //if(warp_lane < b % CudaTraits::WarpSize) b += CudaTraits::WarpSize; + //b -= b % CudaTraits::WarpSize; + + // copy task closure from shared to global memory: + for (int32_t i = b + warp_lane; i < e; i += CudaTraits::WarpSize) { + task_mem[i] = warp_shmem[i]; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to root thread of the warp for + // respawn or completion. + + KOKKOS_IMPL_CUDA_SYNCWARP; + + + if (warp_lane == 0) { + // If respawn requested copy respawn data back to main memory + if(shared_memory_task_copy->as_runnable_task().get_respawn_flag()) { + if(shared_memory_task_copy->as_runnable_task().has_predecessor()) { + // It's not necessary to make this a volatile write because + // the next read of the predecessor is on this thread in complete, + // and the predecessor is cleared there (using a volatile write) + current_task->as_runnable_task().acquire_predecessor_from( + shared_memory_task_copy->as_runnable_task() + ); + } + + // It may not necessary to make this a volatile write, since the + // next read will be done by this thread in complete where the + // rescheduling occurs, but since the task could be stolen later + // before this is written again, we should do the volatile write + // here. (It might not be necessary though because I don't know + // where else the priority would be read after it is scheduled + // by this thread; for now, we leave it volatile, but we should + // benchmark the cost of this.) + current_task.as_volatile()->set_priority(shared_memory_task_copy->get_priority()); + + // It's not necessary to make this a volatile write, since the + // next read of it (if true) will be by this thread in `complete()`, + // which will unset the flag (using volatile) once it has handled + // the respawn + current_task->as_runnable_task().set_respawn_flag(); + + } + + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + } + } static - void execute( queue_type * const ); + void execute(scheduler_type const& scheduler) + { + const int shared_per_warp = 2048 ; + const dim3 grid(Kokkos::Impl::cuda_internal_multiprocessor_count(), 1, 1); + const dim3 block(1, Kokkos::Impl::CudaTraits::WarpSize, warps_per_block); + const int shared_total = shared_per_warp * warps_per_block; + const cudaStream_t stream = nullptr; + + KOKKOS_ASSERT( + static_cast(grid.x * grid.y * grid.z * block.x * block.y * block.z) + == static_cast(get_max_team_count(scheduler.get_execution_space()) * Kokkos::Impl::CudaTraits::WarpSize) + ); + + auto& queue = scheduler.queue(); + + CUDA_SAFE_CALL(cudaDeviceSynchronize()); + + // Query the stack size, in bytes: + + size_t previous_stack_size = 0; + CUDA_SAFE_CALL(cudaDeviceGetLimit(&previous_stack_size, cudaLimitStackSize)); + + // If not large enough then set the stack size, in bytes: + + const size_t larger_stack_size = 1 << 11; + + if (previous_stack_size < larger_stack_size) { + CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, larger_stack_size)); + } + + cuda_task_queue_execute<<>>(scheduler, shared_per_warp); + + CUDA_SAFE_CALL(cudaGetLastError()); + + CUDA_SAFE_CALL(cudaDeviceSynchronize()); + + if (previous_stack_size < larger_stack_size) { + CUDA_SAFE_CALL(cudaDeviceSetLimit(cudaLimitStackSize, previous_stack_size)); + } + } + + template + static + // TODO @tasking @optimiazation DSH specialize this for trivially destructible types + void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + using function_type = typename TaskType::function_type; + using destroy_type = typename TaskType::destroy_type; + + // TODO @tasking @minor DSH make sure there aren't any alignment concerns? + void* storage = cuda_internal_scratch_unified( + Kokkos::Cuda(), + sizeof(function_type) + sizeof(destroy_type) + ); + function_type* ptr_ptr = (function_type*)storage; + destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr_ptr, dtor_ptr); + + CUDA_SAFE_CALL( cudaGetLastError() ); + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + ptr = *ptr_ptr; + dtor = *dtor_ptr; + } +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + using scheduler_type = Scheduler; + using execution_space = Kokkos::Cuda; + using memory_space = Kokkos::CudaUVMSpace; + using member_type = TaskExec ; + + enum : long { max_league_size = 16 }; + + KOKKOS_INLINE_FUNCTION + static + void iff_single_thread_recursive_execute( scheduler_type const& ) {} + + __device__ + static void driver(scheduler_type scheduler, int32_t shmem_per_warp) + { + using queue_type = typename scheduler_type::queue_type; + using task_root_type = TaskBase; + + extern __shared__ int32_t shmem_all[]; + + task_root_type* const end = (task_root_type *) task_root_type::EndTag ; + task_root_type* const no_more_tasks_sentinel = nullptr; + + int32_t * const warp_shmem = + shmem_all + ( threadIdx.z * shmem_per_warp ) / sizeof(int32_t); + + task_root_type * const task_shmem = (task_root_type *) warp_shmem ; + + const int warp_lane = threadIdx.x + threadIdx.y * blockDim.x ; + + member_type single_exec(scheduler, warp_shmem, 1); + member_type team_exec(scheduler, warp_shmem, blockDim.y); + + auto& team_queue = team_exec.scheduler().queue(); + + task_root_type * task_ptr = no_more_tasks_sentinel; + + // Loop until all queues are empty and no tasks in flight + + do { + + // Each team lead attempts to acquire either a thread team task + // or collection of single thread tasks for the team. + + if ( 0 == warp_lane ) { + + if( *((volatile int *) & team_queue.m_ready_count) > 0 ) { + task_ptr = end; + // Attempt to acquire a task + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task_ptr ; ++i ) { + for ( int j = 0 ; j < 2 && end == task_ptr ; ++j ) { + task_ptr = queue_type::pop_ready_task( & team_queue.m_ready[i][j] ); + } + } + } + else { + // returns nullptr if and only if all other queues have a ready + // count of 0 also. Otherwise, returns a task from another queue + // or `end` if one couldn't be popped + task_ptr = team_queue.attempt_to_steal_task(); + #if 0 + if(task != no_more_tasks_sentinel && task != end) { + std::printf("task stolen on rank %d\n", team_exec.league_rank()); + } + #endif + } + + } + + // Synchronize warp with memory fence before broadcasting task pointer: + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "A" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // Broadcast task pointer: + + ((int*) & task_ptr )[0] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[0] , 0 , 32 ); + ((int*) & task_ptr )[1] = KOKKOS_IMPL_CUDA_SHFL( ((int*) & task_ptr )[1] , 0 , 32 ); + + #if defined( KOKKOS_DEBUG ) + KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "TaskQueue CUDA task_ptr" ); + #endif + + if ( 0 == task_ptr ) break ; // 0 == queue->m_ready_count + + if ( end != task_ptr ) { + + // Whole warp copy task's closure to/from shared memory. + // Use all threads of warp for coalesced read/write. + + int32_t const b = sizeof(task_root_type) / sizeof(int32_t); + int32_t const e = *((int32_t volatile *)( & task_ptr->m_alloc_size )) / sizeof(int32_t); + + int32_t volatile * const task_mem = (int32_t volatile *) task_ptr ; + + KOKKOS_ASSERT(e * sizeof(int32_t) < shmem_per_warp); + + // copy task closure from global to shared memory: + + for ( int32_t i = warp_lane ; i < e ; i += CudaTraits::WarpSize ) { + warp_shmem[i] = task_mem[i] ; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "B" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + if ( task_root_type::TaskTeam == task_shmem->m_task_type ) { + // Thread Team Task + (*task_shmem->m_apply)( task_shmem , & team_exec ); + } + else if ( 0 == threadIdx.y ) { + // Single Thread Task + (*task_shmem->m_apply)( task_shmem , & single_exec ); + } + + // Synchronize threads of the warp and insure memory + // writes are visible to all threads in the warp. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "C" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // copy task closure from shared to global memory: + + for ( int32_t i = b + warp_lane ; i < e ; i += CudaTraits::WarpSize ) { + task_mem[i] = warp_shmem[i] ; + } + + // Synchronize threads of the warp and insure memory + // writes are visible to root thread of the warp for + // respawn or completion. + + // KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN( "D" ); + KOKKOS_IMPL_CUDA_SYNCWARP ; + + // If respawn requested copy respawn data back to main memory + + if ( 0 == warp_lane ) { + + if ( ((task_root_type *) task_root_type::LockTag) != task_shmem->m_next ) { + ( (volatile task_root_type *) task_ptr )->m_next = task_shmem->m_next ; + ( (volatile task_root_type *) task_ptr )->m_priority = task_shmem->m_priority ; + } + + team_queue.complete( task_ptr ); + } + + } + } while(1); + } + + static + void execute(scheduler_type const& scheduler) + { + const int shared_per_warp = 2048 ; + const int warps_per_block = 4 ; + const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); + //const dim3 grid( 1 , 1 , 1 ); + const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); + const int shared_total = shared_per_warp * warps_per_block ; + const cudaStream_t stream = 0 ; + + auto& queue = scheduler.queue(); + queue.initialize_team_queues(warps_per_block * grid.x); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + // Query the stack size, in bytes: + + size_t previous_stack_size = 0 ; + CUDA_SAFE_CALL( cudaDeviceGetLimit( & previous_stack_size , cudaLimitStackSize ) ); + + // If not large enough then set the stack size, in bytes: + + const size_t larger_stack_size = 2048 ; + + if ( previous_stack_size < larger_stack_size ) { + CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , larger_stack_size ) ); + } + + cuda_task_queue_execute<<< grid , block , shared_total , stream >>>( scheduler , shared_per_warp ); + + CUDA_SAFE_CALL( cudaGetLastError() ); + + CUDA_SAFE_CALL( cudaDeviceSynchronize() ); + + if ( previous_stack_size < larger_stack_size ) { + CUDA_SAFE_CALL( cudaDeviceSetLimit( cudaLimitStackSize , previous_stack_size ) ); + } + + } template< typename TaskType > static - typename TaskType::function_type - get_function_pointer() + void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { - using function_type = typename TaskType::function_type ; + using function_type = typename TaskType::function_type; + using destroy_type = typename TaskType::destroy_type; - function_type * const ptr = - (function_type*) cuda_internal_scratch_unified( sizeof(function_type) ); + void* storage = cuda_internal_scratch_unified( + Kokkos::Cuda(), + sizeof(function_type) + sizeof(destroy_type) + ); + function_type* ptr_ptr = (function_type*)storage; + destroy_type* dtor_ptr = (destroy_type*)((char*)storage + sizeof(function_type)); CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr); + set_cuda_task_base_apply_function_pointer<<<1,1>>>(ptr_ptr, dtor_ptr); CUDA_SAFE_CALL( cudaGetLastError() ); CUDA_SAFE_CALL( cudaDeviceSynchronize() ); - return *ptr ; + ptr = *ptr_ptr; + dtor = *dtor_ptr; + } }; -extern template class TaskQueue< Kokkos::Cuda > ; +extern template class TaskQueue< Kokkos::Cuda, default_tasking_memory_space_for_execution_space_t > ; }} /* namespace Kokkos::Impl */ @@ -136,8 +588,8 @@ namespace Impl { * When executing a single thread task the syncwarp or other * warp synchronizing functions must not be called. */ -template<> -class TaskExec< Kokkos::Cuda > +template +class TaskExec { private: @@ -148,24 +600,39 @@ private: TaskExec & operator = ( TaskExec && ) = delete ; TaskExec & operator = ( TaskExec const & ) = delete ; - friend class Kokkos::Impl::TaskQueue< Kokkos::Cuda > ; - friend class Kokkos::Impl::TaskQueueSpecialization< Kokkos::Cuda > ; + friend class Kokkos::Impl::TaskQueue< Kokkos::Cuda, default_tasking_memory_space_for_execution_space_t > ; + template + friend class Kokkos::Impl::TaskQueueSpecializationConstrained; + template + friend class Kokkos::Impl::TaskQueueSpecialization; int32_t * m_team_shmem ; const int m_team_size ; + Scheduler m_scheduler; // If constructed with arg_team_size == 1 the object // can only be used by 0 == threadIdx.y. - __device__ - TaskExec( int32_t * arg_team_shmem , int arg_team_size = blockDim.y ) - : m_team_shmem( arg_team_shmem ) - , m_team_size( arg_team_size ) {} + KOKKOS_INLINE_FUNCTION + TaskExec( + Scheduler const& parent_scheduler, + int32_t* arg_team_shmem, + int arg_team_size = blockDim.y + ) + : m_team_shmem(arg_team_shmem), + m_team_size(arg_team_size), + m_scheduler(parent_scheduler.get_team_scheduler(league_rank())) + { } public: + using thread_team_member = TaskExec; + #if defined( __CUDA_ARCH__ ) - __device__ int team_rank() const { return threadIdx.y ; } - __device__ int team_size() const { return m_team_size ; } + __device__ int team_rank() const { return threadIdx.y ; } + __device__ int team_size() const { return m_team_size ; } + //__device__ int league_rank() const { return threadIdx.z; } + __device__ int league_rank() const { return blockIdx.x * blockDim.z + threadIdx.z; } + __device__ int league_size() const { return blockDim.z * gridDim.x; } __device__ void team_barrier() const { @@ -186,13 +653,18 @@ public: } #else - __host__ int team_rank() const { return 0 ; } - __host__ int team_size() const { return 0 ; } + __host__ int team_rank() const { return 0 ; } + __host__ int team_size() const { return 0 ; } + __host__ int league_rank() const { return 0; } + __host__ int league_size() const { return 0; } __host__ void team_barrier() const {} template< class ValueType > __host__ void team_broadcast( ValueType & , const int ) const {} #endif + KOKKOS_INLINE_FUNCTION Scheduler const& scheduler() const noexcept { return m_scheduler; } + KOKKOS_INLINE_FUNCTION Scheduler& scheduler() noexcept { return m_scheduler; } + }; }} /* namespace Kokkos::Impl */ @@ -203,20 +675,22 @@ public: namespace Kokkos { namespace Impl { -template -struct TeamThreadRangeBoundariesStruct > +template +struct TeamThreadRangeBoundariesStruct> { - typedef iType index_type; + using index_type = iType; + using member_type = TaskExec; + const iType start ; const iType end ; const iType increment ; - const TaskExec< Kokkos::Cuda > & thread; + member_type const& thread; #if defined( __CUDA_ARCH__ ) __device__ inline TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const iType& arg_count) + ( member_type const& arg_thread, const iType& arg_count) : start( threadIdx.y ) , end(arg_count) , increment( blockDim.y ) @@ -225,7 +699,7 @@ struct TeamThreadRangeBoundariesStruct > __device__ inline TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread + ( member_type const& arg_thread , const iType & arg_start , const iType & arg_end ) @@ -238,10 +712,10 @@ struct TeamThreadRangeBoundariesStruct > #else TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const iType& arg_count); + ( member_type const& arg_thread, const iType& arg_count); TeamThreadRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread + ( member_type const& arg_thread , const iType & arg_start , const iType & arg_end ); @@ -252,20 +726,22 @@ struct TeamThreadRangeBoundariesStruct > //---------------------------------------------------------------------------- -template -struct ThreadVectorRangeBoundariesStruct > +template +struct ThreadVectorRangeBoundariesStruct > { - typedef iType index_type; + using index_type = iType; + using member_type = TaskExec; + const index_type start ; const index_type end ; const index_type increment ; - const TaskExec< Kokkos::Cuda > & thread; + const member_type& thread; #if defined( __CUDA_ARCH__ ) __device__ inline ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_count ) + ( member_type const& arg_thread, const index_type& arg_count ) : start( threadIdx.x ) , end(arg_count) , increment( blockDim.x ) @@ -274,9 +750,9 @@ struct ThreadVectorRangeBoundariesStruct > __device__ inline ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_begin, const index_type& arg_end ) + ( member_type const& arg_thread, const index_type& arg_begin, const index_type& arg_end ) : start( arg_begin + threadIdx.x ) - , end(arg_count) + , end(arg_end) , increment( blockDim.x ) , thread(arg_thread) {} @@ -284,10 +760,10 @@ struct ThreadVectorRangeBoundariesStruct > #else ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_count ); + ( member_type const& arg_thread, const index_type& arg_count ); ThreadVectorRangeBoundariesStruct - ( const TaskExec< Kokkos::Cuda > & arg_thread, const index_type& arg_begin, const index_type& arg_end); + ( member_type const& arg_thread, const index_type& arg_begin, const index_type& arg_end); #endif @@ -299,69 +775,69 @@ struct ThreadVectorRangeBoundariesStruct > namespace Kokkos { -template -KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > > -TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread, const iType & count ) -{ - return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( thread, count ); -} +//template +//KOKKOS_INLINE_FUNCTION +//Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > > +//TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread, const iType & count ) +//{ +// return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( thread, count ); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::TeamThreadRangeBoundariesStruct +// < typename std::common_type::type +// , Impl::TaskExec< Kokkos::Cuda > > +//TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType1 & begin, const iType2 & end ) +//{ +// typedef typename std::common_type< iType1, iType2 >::type iType; +// return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( +// thread, iType(begin), iType(end) ); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::ThreadVectorRangeBoundariesStruct > +//ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType & count ) +//{ +// return Impl::ThreadVectorRangeBoundariesStruct >(thread,count); +//} +// +//template +//KOKKOS_INLINE_FUNCTION +//Impl::ThreadVectorRangeBoundariesStruct > +//ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread +// , const iType & arg_begin +// , const iType & arg_end ) +//{ +// return Impl::ThreadVectorRangeBoundariesStruct >(thread,arg_begin,arg_end); +//} -template -KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct - < typename std::common_type::type - , Impl::TaskExec< Kokkos::Cuda > > -TeamThreadRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType1 & begin, const iType2 & end ) -{ - typedef typename std::common_type< iType1, iType2 >::type iType; - return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::TaskExec< Kokkos::Cuda > >( - thread, iType(begin), iType(end) ); -} +// KOKKOS_INLINE_FUNCTION +// Impl::ThreadSingleStruct > +// PerTeam(const Impl::TaskExec< Kokkos::Cuda >& thread) +// { +// return Impl::ThreadSingleStruct >(thread); +// } -template -KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType & count ) -{ - return Impl::ThreadVectorRangeBoundariesStruct >(thread,count); -} - -template -KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange( const Impl::TaskExec< Kokkos::Cuda > & thread - , const iType & arg_begin - , const iType & arg_end ) -{ - return Impl::ThreadVectorRangeBoundariesStruct >(thread,arg_begin,arg_end); -} - -KOKKOS_INLINE_FUNCTION -Impl::ThreadSingleStruct > -PerTeam(const Impl::TaskExec< Kokkos::Cuda >& thread) -{ - return Impl::ThreadSingleStruct >(thread); -} - -KOKKOS_INLINE_FUNCTION -Impl::VectorSingleStruct > -PerThread(const Impl::TaskExec< Kokkos::Cuda >& thread) -{ - return Impl::VectorSingleStruct >(thread); -} +// KOKKOS_INLINE_FUNCTION +// Impl::VectorSingleStruct > +// PerThread(const Impl::TaskExec< Kokkos::Cuda >& thread) +// { +// return Impl::VectorSingleStruct >(thread); +// } /** \brief Inter-thread parallel_for. Executes lambda(iType i) for each i=0..N-1. * * The range i=0..N-1 is mapped to all threads of the the calling thread team. * This functionality requires C++11 support. */ -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries + ( const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries , const Lambda& lambda ) { @@ -370,10 +846,10 @@ void parallel_for } } -template< typename iType, class Lambda > +template< typename iType, class Lambda, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_for - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda) { for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { lambda(i); @@ -459,14 +935,14 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, ValueType& initialized_result) { - //TODO what is the point of creating this temporary? + //TODO @internal_documentation what is the point of creating this temporary? ValueType result = initialized_result; for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { lambda(i,result); @@ -487,15 +963,15 @@ void parallel_reduce } } -template< typename iType, class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { typedef typename ReducerType::value_type ValueType; - //TODO what is the point of creating this temporary? + //TODO @internal_documentation what is the point of creating this temporary? ValueType result = ValueType(); reducer.init(result); @@ -549,10 +1025,10 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, ValueType& initialized_result) { @@ -576,10 +1052,10 @@ void parallel_reduce } } -template< typename iType, class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { @@ -611,10 +1087,10 @@ void parallel_reduce // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Closure > +template< typename iType, class Closure, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_scan - (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, + (const Impl::TeamThreadRangeBoundariesStruct >& loop_boundaries, const Closure & closure ) { // Extract value_type from closure @@ -676,10 +1152,10 @@ void parallel_scan // blockDim.y == team_size // threadIdx.x == position in vec // threadIdx.y == member number -template< typename iType, class Closure > +template< typename iType, class Closure, class Scheduler > KOKKOS_INLINE_FUNCTION void parallel_scan - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, const Closure & closure ) { // Extract value_type from closure @@ -735,25 +1211,25 @@ void parallel_scan namespace Kokkos { - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::VectorSingleStruct >& , const FunctorType& lambda) { + void single(const Impl::VectorSingleStruct >& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0) lambda(); #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::ThreadSingleStruct >& , const FunctorType& lambda) { + void single(const Impl::ThreadSingleStruct >& , const FunctorType& lambda) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0 && threadIdx.y == 0) lambda(); #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::VectorSingleStruct >& s , const FunctorType& lambda, ValueType& val) { + void single(const Impl::VectorSingleStruct >& s , const FunctorType& lambda, ValueType& val) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0) lambda(val); if ( 1 < s.team_member.team_size() ) { @@ -762,9 +1238,9 @@ namespace Kokkos { #endif } - template + template KOKKOS_INLINE_FUNCTION - void single(const Impl::ThreadSingleStruct >& single_struct, const FunctorType& lambda, ValueType& val) { + void single(const Impl::ThreadSingleStruct >& single_struct, const FunctorType& lambda, ValueType& val) { #ifdef __CUDA_ARCH__ if(threadIdx.x == 0 && threadIdx.y == 0) { lambda(val); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp index 18271a5146..587ad6001d 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp @@ -56,9 +56,9 @@ #include #include -#include +#include #include -#include +#include #include #if defined(KOKKOS_ENABLE_PROFILING) @@ -101,11 +101,13 @@ struct CudaJoinFunctor { * total available shared memory must be partitioned among teams. */ class CudaTeamMember { -private: +public: typedef Kokkos::Cuda execution_space ; typedef execution_space::scratch_memory_space scratch_memory_space ; +private: + mutable void * m_team_reduce ; scratch_memory_space m_team_shared ; int m_team_reduce_size ; @@ -221,12 +223,21 @@ public: KOKKOS_INLINE_FUNCTION typename std::enable_if< is_reducer< ReducerType >::value >::type team_reduce( ReducerType const & reducer ) const noexcept + { + team_reduce(reducer,reducer.reference()); + } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer, typename ReducerType::value_type& value ) const noexcept { #ifdef __CUDA_ARCH__ - cuda_intra_block_reduction(reducer,blockDim.y); + cuda_intra_block_reduction(reducer,value,blockDim.y); #endif /* #ifdef __CUDA_ARCH__ */ } + //-------------------------------------------------------------------------- /** \brief Intra-team exclusive prefix sum with team_rank() ordering * with intra-team non-deterministic ordering accumulation. @@ -281,20 +292,28 @@ public: template< typename ReducerType > KOKKOS_INLINE_FUNCTION static typename std::enable_if< is_reducer< ReducerType >::value >::type - vector_reduce( ReducerType const & reducer ) + vector_reduce( ReducerType const & reducer ) { + vector_reduce(reducer,reducer.reference()); + } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION static + typename std::enable_if< is_reducer< ReducerType >::value >::type + vector_reduce( ReducerType const & reducer, typename ReducerType::value_type& value ) { #ifdef __CUDA_ARCH__ if(blockDim.x == 1) return; // Intra vector lane shuffle reduction: - typename ReducerType::value_type tmp ( reducer.reference() ); + typename ReducerType::value_type tmp ( value ); + typename ReducerType::value_type tmp2 = tmp; unsigned mask = blockDim.x==32?0xffffffff:((1<>= 1 ) ; ) { - cuda_shfl_down( reducer.reference() , tmp , i , blockDim.x , mask ); - if ( (int)threadIdx.x < i ) { reducer.join( tmp , reducer.reference() ); } + cuda_shfl_down( tmp2 , tmp , i , blockDim.x , mask ); + if ( (int)threadIdx.x < i ) { reducer.join( tmp , tmp2 ); } } // Broadcast from root lane to all other lanes. @@ -302,7 +321,9 @@ public: // because floating point summation is not associative // and thus different threads could have different results. - cuda_shfl( reducer.reference() , tmp , 0 , blockDim.x , mask ); + cuda_shfl( tmp2 , tmp , 0 , blockDim.x , mask ); + value = tmp2; + reducer.reference() = tmp2; #endif } @@ -543,19 +564,37 @@ struct TeamThreadRangeBoundariesStruct { const iType end; KOKKOS_INLINE_FUNCTION - TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& count) + TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, iType count) : member(thread_) , start( 0 ) , end( count ) {} KOKKOS_INLINE_FUNCTION - TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& begin_, const iType& end_) + TeamThreadRangeBoundariesStruct (const CudaTeamMember& thread_, iType begin_, iType end_) : member(thread_) , start( begin_ ) , end( end_ ) {} }; +template +struct TeamVectorRangeBoundariesStruct { + typedef iType index_type; + const CudaTeamMember& member; + const iType start; + const iType end; + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& count) + : member(thread_) + , start( 0 ) + , end( count ) {} + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct (const CudaTeamMember& thread_, const iType& begin_, const iType& end_) + : member(thread_) + , start( begin_ ) + , end( end_ ) {} +}; template struct ThreadVectorRangeBoundariesStruct { @@ -564,19 +603,19 @@ struct ThreadVectorRangeBoundariesStruct { const index_type end; KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const CudaTeamMember, const index_type& count) + ThreadVectorRangeBoundariesStruct (const CudaTeamMember, index_type count) : start( static_cast(0) ), end( count ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const index_type& count) + ThreadVectorRangeBoundariesStruct (index_type count) : start( static_cast(0) ), end( count ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const CudaTeamMember, const index_type& arg_begin, const index_type& arg_end) + ThreadVectorRangeBoundariesStruct (const CudaTeamMember, index_type arg_begin, index_type arg_end) : start( arg_begin ), end( arg_end ) {} KOKKOS_INLINE_FUNCTION - ThreadVectorRangeBoundariesStruct (const index_type& arg_begin, const index_type& arg_end) + ThreadVectorRangeBoundariesStruct (index_type arg_begin, index_type arg_end) : start( arg_begin ), end( arg_end ) {} }; @@ -585,7 +624,7 @@ struct ThreadVectorRangeBoundariesStruct { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember > -TeamThreadRange( const Impl::CudaTeamMember & thread, const iType & count ) { +TeamThreadRange( const Impl::CudaTeamMember & thread, iType count ) { return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, count ); } @@ -593,22 +632,38 @@ template< typename iType1, typename iType2 > KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, Impl::CudaTeamMember > -TeamThreadRange( const Impl::CudaTeamMember & thread, const iType1 & begin, const iType2 & end ) { +TeamThreadRange( const Impl::CudaTeamMember & thread, iType1 begin, iType2 end ) { typedef typename std::common_type< iType1, iType2 >::type iType; return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, iType(begin), iType(end) ); } +template +KOKKOS_INLINE_FUNCTION +Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember > +TeamVectorRange( const Impl::CudaTeamMember & thread, const iType & count ) { + return Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, count ); +} + +template< typename iType1, typename iType2 > +KOKKOS_INLINE_FUNCTION +Impl::TeamVectorRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, + Impl::CudaTeamMember > +TeamVectorRange( const Impl::CudaTeamMember & thread, const iType1 & begin, const iType2 & end ) { + typedef typename std::common_type< iType1, iType2 >::type iType; + return Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember >( thread, iType(begin), iType(end) ); +} + template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange(const Impl::CudaTeamMember& thread, const iType& count) { +ThreadVectorRange(const Impl::CudaTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange(const Impl::CudaTeamMember& thread, const iType& arg_begin, const iType& arg_end) { +ThreadVectorRange(const Impl::CudaTeamMember& thread, iType arg_begin, iType arg_end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,arg_begin,arg_end); } @@ -667,16 +722,16 @@ parallel_reduce ) { #ifdef __CUDA_ARCH__ - - reducer.init( reducer.reference() ); + typename ReducerType::value_type value; + reducer.init( value ); for( iType i = loop_boundaries.start + threadIdx.y ; i < loop_boundaries.end ; i += blockDim.y ) { - closure(i,reducer.reference()); + closure(i,value); } - loop_boundaries.member.team_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer, value ); #endif } @@ -701,19 +756,88 @@ parallel_reduce ) { #ifdef __CUDA_ARCH__ - - Kokkos::Sum reducer(result); + ValueType val; + Kokkos::Sum reducer(val); reducer.init( reducer.reference() ); for( iType i = loop_boundaries.start + threadIdx.y ; i < loop_boundaries.end ; i += blockDim.y ) { - closure(i,result); + closure(i,val); } - loop_boundaries.member.team_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer , val); + result = reducer.reference(); +#endif +} +template +KOKKOS_INLINE_FUNCTION +void parallel_for + ( const Impl::TeamVectorRangeBoundariesStruct& + loop_boundaries + , const Closure & closure + ) +{ + #ifdef __CUDA_ARCH__ + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y*blockDim.x ) + closure(i); + #endif +} + +template< typename iType, class Closure, class ReducerType > +KOKKOS_INLINE_FUNCTION +typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +parallel_reduce + ( const Impl::TeamVectorRangeBoundariesStruct & + loop_boundaries + , const Closure & closure + , const ReducerType & reducer + ) +{ +#ifdef __CUDA_ARCH__ + typename ReducerType::value_type value; + reducer.init( value ); + + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y * blockDim.x ) { + closure(i,value); + } + + loop_boundaries.member.vector_reduce( reducer, value ); + loop_boundaries.member.team_reduce( reducer, value ); +#endif +} + +template< typename iType, class Closure, typename ValueType > +KOKKOS_INLINE_FUNCTION +typename std::enable_if< ! Kokkos::is_reducer< ValueType >::value >::type +parallel_reduce + ( const Impl::TeamVectorRangeBoundariesStruct & + loop_boundaries + , const Closure & closure + , ValueType & result + ) +{ +#ifdef __CUDA_ARCH__ + ValueType val; + Kokkos::Sum reducer(val); + + reducer.init( reducer.reference() ); + + for( iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x + ; i < loop_boundaries.end + ; i += blockDim.y * blockDim.x ) { + closure(i,val); + } + + loop_boundaries.member.vector_reduce( reducer ); + loop_boundaries.member.team_reduce( reducer ); + result = reducer.reference(); #endif } diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp index af2aff8b35..2fe9d8ccf7 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp @@ -241,7 +241,7 @@ class ViewDataHandle< Traits , sizeof(typename Traits::const_value_type) == 16 ) && // Random access trait - ( Traits::memory_traits::RandomAccess != 0 ) + ( Traits::memory_traits::is_random_access != 0 ) )>::type > { public: diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp index 94e293d7c7..9c0ac470c8 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_WorkGraphPolicy.hpp @@ -102,9 +102,8 @@ public: const dim3 grid( Kokkos::Impl::cuda_internal_multiprocessor_count() , 1 , 1 ); const dim3 block( 1 , Kokkos::Impl::CudaTraits::WarpSize , warps_per_block ); const int shared = 0 ; - const cudaStream_t stream = 0 ; - Kokkos::Impl::CudaParallelLaunch(*this, grid, block, shared, stream); + Kokkos::Impl::CudaParallelLaunch(*this, grid, block, shared, Cuda().impl_internal_space_instance() , false ); } inline diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp new file mode 100644 index 0000000000..da9783467c --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp @@ -0,0 +1,152 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + + +#include + +#ifdef KOKKOS_ENABLE_HPX +#include + +#include + +namespace Kokkos { +namespace Experimental { + +bool HPX::m_hpx_initialized = false; +Kokkos::Impl::thread_buffer HPX::m_buffer; +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) +hpx::future HPX::m_future = hpx::make_ready_future(); +#endif + +int HPX::concurrency() { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return hpx::threads::hardware_concurrency(); + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return hpx::resource::get_thread_pool(0).get_os_thread_count(); + } else { + return hpx::this_thread::get_pool()->get_os_thread_count(); + } + } +} + +void HPX::impl_initialize(int thread_count) { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + std::vector config = { + "hpx.os_threads=" + std::to_string(thread_count), +#ifdef KOKKOS_DEBUG + "--hpx:attach-debugger=exception", +#endif + }; + int argc_hpx = 1; + char name[] = "kokkos_hpx"; + char *argv_hpx[] = {name, nullptr}; + hpx::start(nullptr, argc_hpx, argv_hpx, config); + + // NOTE: Wait for runtime to start. hpx::start returns as soon as + // possible, meaning some operations are not allowed immediately + // after hpx::start. Notably, hpx::stop needs state_running. This + // needs to be fixed in HPX itself. + + // Get runtime pointer again after it has been started. + rt = hpx::get_runtime_ptr(); + hpx::util::yield_while( + [rt]() { return rt->get_state() < hpx::state_running; }); + + m_hpx_initialized = true; + } +} + +void HPX::impl_initialize() { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + std::vector config = { +#ifdef KOKKOS_DEBUG + "--hpx:attach-debugger=exception", +#endif + }; + int argc_hpx = 1; + char name[] = "kokkos_hpx"; + char *argv_hpx[] = {name, nullptr}; + hpx::start(nullptr, argc_hpx, argv_hpx, config); + + // NOTE: Wait for runtime to start. hpx::start returns as soon as + // possible, meaning some operations are not allowed immediately + // after hpx::start. Notably, hpx::stop needs state_running. This + // needs to be fixed in HPX itself. + + // Get runtime pointer again after it has been started. + rt = hpx::get_runtime_ptr(); + hpx::util::yield_while( + [rt]() { return rt->get_state() < hpx::state_running; }); + + m_hpx_initialized = true; + } +} + +bool HPX::impl_is_initialized() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + return rt != nullptr; +} + +void HPX::impl_finalize() { + if (m_hpx_initialized) { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt != nullptr) { + hpx::apply([]() { hpx::finalize(); }); + hpx::stop(); + } else { + Kokkos::abort("Kokkos::Experimental::HPX::impl_finalize: Kokkos started " + "HPX but something else already stopped HPX\n"); + } + } +} + +} // namespace Experimental +} // namespace Kokkos + +#else +void KOKKOS_CORE_SRC_IMPL_HPX_PREVENT_LINK_ERROR() {} +#endif //#ifdef KOKKOS_ENABLE_HPX diff --git a/lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp similarity index 76% rename from lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp rename to lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp index d001e0a88c..df7c403685 100644 --- a/lib/kokkos/core/src/impl/Kokkos_StaticAssert.hpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.cpp @@ -41,38 +41,25 @@ //@HEADER */ -#ifndef KOKKOS_STATICASSERT_HPP -#define KOKKOS_STATICASSERT_HPP +#include +#if defined(KOKKOS_ENABLE_HPX) && defined(KOKKOS_ENABLE_TASKDAG) + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- namespace Kokkos { namespace Impl { -template < bool , class T = void > -struct StaticAssert ; - -template< class T > -struct StaticAssert< true , T > { - typedef T type ; - static const bool value = true ; -}; - -template < class A , class B > -struct StaticAssertSame ; - -template < class A > -struct StaticAssertSame { typedef A type ; }; - -template < class A , class B > -struct StaticAssertAssignable ; - -template < class A > -struct StaticAssertAssignable { typedef A type ; }; - -template < class A > -struct StaticAssertAssignable< const A , A > { typedef const A type ; }; +template class TaskQueue; } // namespace Impl } // namespace Kokkos -#endif /* KOKKOS_STATICASSERT_HPP */ - +#else +void KOKKOS_CORE_SRC_IMPL_HPX_TASK_PREVENT_LINK_ERROR() {} +#endif // #if defined( KOKKOS_ENABLE_HPX ) && defined( KOKKOS_ENABLE_TASKDAG ) diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp new file mode 100644 index 0000000000..c3a14efee6 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp @@ -0,0 +1,298 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_TASK_HPP +#define KOKKOS_HPX_TASK_HPP + +#include +#if defined(KOKKOS_ENABLE_HPX) && defined(KOKKOS_ENABLE_TASKDAG) + +#include + +#include + +#include +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +class TaskQueueSpecialization< + SimpleTaskScheduler> { +public: + using execution_space = Kokkos::Experimental::HPX; + using scheduler_type = + SimpleTaskScheduler; + using member_type = + TaskTeamMemberAdapter; + using memory_space = Kokkos::HostSpace; + + static void execute(scheduler_type const &scheduler) { + // NOTE: We create an instance so that we can use dispatch_execute_task. + // This is not necessarily the most efficient, but can be improved later. + TaskQueueSpecialization task_queue; + task_queue.scheduler = &scheduler; + Kokkos::Impl::dispatch_execute_task(&task_queue); + Kokkos::Experimental::HPX().fence(); + } + + // Must provide task queue execution function + void execute_task() const { + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + using task_base_type = typename scheduler_type::task_base_type; + + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 512); + + auto &queue = scheduler->queue(); + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem, &queue, &buffer, num_worker_threads, thread]() { + // NOTE: This implementation has been simplified based on the + // assumption that team_size = 1. The HPX backend currently only + // supports a team size of 1. + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()); + HPXTeamMember member(TeamPolicyInternal( + Kokkos::Experimental::HPX(), num_worker_threads, 1), + 0, t, buffer.get(t), 512); + + member_type single_exec(*scheduler, member); + member_type &team_exec = single_exec; + + auto &team_scheduler = team_exec.scheduler(); + auto current_task = OptionalRef(nullptr); + + while (!queue.is_done()) { + current_task = + queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + if (current_task) { + KOKKOS_ASSERT(current_task->is_single_runnable() || + current_task->is_team_runnable()); + current_task->as_runnable_task().run(single_exec); + queue.complete((*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info()); + } + } + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + static uint32_t get_max_team_count(execution_space const &espace) { + return static_cast(espace.concurrency()); + } + + template + static void get_function_pointer(typename TaskType::function_type &ptr, + typename TaskType::destroy_type &dtor) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } + +private: + const scheduler_type *scheduler; +}; + +template +class TaskQueueSpecializationConstrained< + Scheduler, typename std::enable_if< + std::is_same::value>::type> { +public: + using execution_space = Kokkos::Experimental::HPX; + using scheduler_type = Scheduler; + using member_type = + TaskTeamMemberAdapter; + using memory_space = Kokkos::HostSpace; + + static void + iff_single_thread_recursive_execute(scheduler_type const &scheduler) { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + if (1 == Kokkos::Experimental::HPX::concurrency()) { + task_base_type *const end = (task_base_type *)task_base_type::EndTag; + task_base_type *task = end; + + HPXTeamMember member(TeamPolicyInternal( + Kokkos::Experimental::HPX(), 1, 1), + 0, 0, nullptr, 0); + member_type single_exec(scheduler, member); + + do { + task = end; + + // Loop by priority and then type + for (int i = 0; i < queue_type::NumQueue && end == task; ++i) { + for (int j = 0; j < 2 && end == task; ++j) { + task = + queue_type::pop_ready_task(&scheduler.m_queue->m_ready[i][j]); + } + } + + if (end == task) + break; + + (*task->m_apply)(task, &single_exec); + + scheduler.m_queue->complete(task); + + } while (true); + } + } + + static void execute(scheduler_type const &scheduler) { + // NOTE: We create an instance so that we can use dispatch_execute_task. + // This is not necessarily the most efficient, but can be improved later. + TaskQueueSpecializationConstrained task_queue; + task_queue.scheduler = &scheduler; + Kokkos::Impl::dispatch_execute_task(&task_queue); + Kokkos::Experimental::HPX().fence(); + } + + // Must provide task queue execution function + void execute_task() const { + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + static task_base_type *const end = (task_base_type *)task_base_type::EndTag; + constexpr task_base_type *no_more_tasks_sentinel = nullptr; + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 512); + + auto &queue = scheduler->queue(); + queue.initialize_team_queues(num_worker_threads); + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem, &buffer, num_worker_threads, thread]() { + // NOTE: This implementation has been simplified based on the assumption + // that team_size = 1. The HPX backend currently only supports a team + // size of 1. + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()); + HPXTeamMember member( + TeamPolicyInternal( + Kokkos::Experimental::HPX(), num_worker_threads, 1), + 0, t, buffer.get(t), 512); + + member_type single_exec(*scheduler, member); + member_type &team_exec = single_exec; + + auto &team_queue = team_exec.scheduler().queue(); + task_base_type *task = no_more_tasks_sentinel; + + do { + if (task != no_more_tasks_sentinel && task != end) { + team_queue.complete(task); + } + + if (*((volatile int *)&team_queue.m_ready_count) > 0) { + task = end; + for (int i = 0; i < queue_type::NumQueue && end == task; ++i) { + for (int j = 0; j < 2 && end == task; ++j) { + task = queue_type::pop_ready_task(&team_queue.m_ready[i][j]); + } + } + } else { + task = team_queue.attempt_to_steal_task(); + } + + if (task != no_more_tasks_sentinel && task != end) { + (*task->m_apply)(task, &single_exec); + } + } while (task != no_more_tasks_sentinel); + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + template + static void get_function_pointer(typename TaskType::function_type &ptr, + typename TaskType::destroy_type &dtor) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } + +private: + const scheduler_type *scheduler; +}; + +extern template class TaskQueue< + Kokkos::Experimental::HPX, + typename Kokkos::Experimental::HPX::memory_space>; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_HPX_TASK_HPP */ diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp new file mode 100644 index 0000000000..bbc1b33bf9 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIAvail.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_VIEWETIAVAIL_HPP +#define KOKKOS_HPX_VIEWETIAVAIL_HPP + +namespace Kokkos { +namespace Impl { +#define KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE Kokkos::Experimental::HPX + +#include + +#undef KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE +} +} +#endif + diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp new file mode 100644 index 0000000000..aa1c2f1518 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_ViewCopyETIDecl.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_VIEWETIDECL_HPP +#define KOKKOS_HPX_VIEWETIDECL_HPP + +namespace Kokkos { +namespace Impl { +#define KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE Kokkos::Experimental::HPX + +#include + +#undef KOKKOS_IMPL_VIEWCOPY_ETI_AVAIL_EXECSPACE +} +} +#endif + diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp new file mode 100644 index 0000000000..4dd28dd994 --- /dev/null +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp @@ -0,0 +1,116 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_WORKGRAPHPOLICY_HPP +#define KOKKOS_HPX_WORKGRAPHPOLICY_HPP + +#include +#include + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::WorkGraphPolicy; + using WorkTag = typename Policy::work_tag; + + Policy m_policy; + FunctorType m_functor; + + template + typename std::enable_if::value>::type + execute_functor(const std::int32_t w) const noexcept { + m_functor(w); + } + + template + typename std::enable_if::value>::type + execute_functor(const std::int32_t w) const noexcept { + const TagType t{}; + m_functor(t, w); + } + +public: + void execute() const { + dispatch_execute_task(this); + Kokkos::Experimental::HPX().fence(); + } + + void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + + for (int thread = 0; thread < num_worker_threads; ++thread) { + apply([this, &sem]() { + std::int32_t w = m_policy.pop_work(); + while (w != Policy::COMPLETED_TOKEN) { + if (w != Policy::END_TOKEN) { + execute_functor(w); + m_policy.completed_work(w); + } + + w = m_policy.pop_work(); + } + + sem.signal(1); + }); + } + + sem.wait(num_worker_threads); + } + + inline ParallelFor(const FunctorType &arg_functor, const Policy &arg_policy) + : m_policy(arg_policy), m_functor(arg_functor) {} +}; + +} // namespace Impl +} // namespace Kokkos + +#endif /* #define KOKKOS_HPX_WORKGRAPHPOLICY_HPP */ diff --git a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp index fb0d6cde84..1972aa485b 100644 --- a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp +++ b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp @@ -125,6 +125,8 @@ struct MDRangePolicy using traits = Kokkos::Impl::PolicyTraits; using range_policy = RangePolicy; + typename traits::execution_space m_space; + using impl_range_policy = RangePolicy< typename traits::execution_space , typename traits::schedule_type , typename traits::index_type @@ -132,6 +134,9 @@ struct MDRangePolicy typedef MDRangePolicy execution_policy; // needed for is_execution_space interrogation + template + friend struct MDRangePolicy; + static_assert( !std::is_same::value , "Kokkos Error: MD iteration pattern not defined" ); @@ -192,13 +197,54 @@ struct MDRangePolicy static constexpr int Right = static_cast( Iterate::Right ); static constexpr int Left = static_cast( Iterate::Left ); + KOKKOS_INLINE_FUNCTION const typename traits::execution_space & space() const { return m_space ; } + template < typename LT , typename UT , typename TT = array_index_type > + MDRangePolicy(std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + : m_space() { + init(lower, upper, tile); + } + + template < typename LT , typename UT , typename TT = array_index_type > + MDRangePolicy(const typename traits::execution_space & work_space, + std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + : m_space( work_space ) { + init(lower, upper, tile); + } + MDRangePolicy( point_type const& lower, point_type const& upper, tile_type const& tile = tile_type{} ) - : m_lower(lower) + : m_space() + , m_lower(lower) , m_upper(upper) , m_tile(tile) , m_num_tiles(1) - , m_prod_tile_dims(1) - { + , m_prod_tile_dims(1) { + init(); + } + + MDRangePolicy( const typename traits::execution_space & work_space, + point_type const& lower, point_type const& upper, tile_type const& tile = tile_type{} ) + : m_space( work_space ) + , m_lower(lower) + , m_upper(upper) + , m_tile(tile) + , m_num_tiles(1) + , m_prod_tile_dims(1) { + init(); + } + + template + MDRangePolicy( const MDRangePolicy p ): + m_space(p.m_space), + m_lower(p.m_lower), + m_upper(p.m_upper), + m_tile(p.m_tile), + m_tile_end(p.m_tile_end), + m_num_tiles(p.m_num_tiles), + m_prod_tile_dims(p.m_prod_tile_dims) {} + +private: + + void init() { // Host if ( true #if defined(KOKKOS_ENABLE_CUDA) @@ -211,7 +257,7 @@ struct MDRangePolicy { index_type span; for (int i=0; i 0)) ) @@ -311,11 +357,9 @@ struct MDRangePolicy #endif } - template < typename LT , typename UT , typename TT = array_index_type > - MDRangePolicy( std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) + void init( std::initializer_list const& lower, std::initializer_list const& upper, std::initializer_list const& tile = {} ) { - if(static_cast(m_lower.size()) != rank || static_cast(m_upper.size()) != rank) Kokkos::abort("MDRangePolicy: Constructor initializer lists have wrong size"); @@ -589,5 +633,26 @@ void md_parallel_reduce( const std::string& str } } // namespace Kokkos::Experimental #endif +namespace Kokkos { +namespace Experimental { +namespace Impl { + +template +struct PolicyPropertyAdaptor,MDRangePolicy> { + typedef MDRangePolicy policy_in_t; + typedef MDRangePolicy> policy_out_t; +}; + +} +} +} + + #endif //KOKKOS_CORE_EXP_MD_RANGE_POLICY_HPP diff --git a/lib/kokkos/core/src/Kokkos_Atomic.hpp b/lib/kokkos/core/src/Kokkos_Atomic.hpp index cf0f25969d..c2268bd35f 100644 --- a/lib/kokkos/core/src/Kokkos_Atomic.hpp +++ b/lib/kokkos/core/src/Kokkos_Atomic.hpp @@ -90,6 +90,7 @@ #if ! defined( KOKKOS_ENABLE_GNU_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_INTEL_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_OPENMP_ATOMICS ) && \ + ! defined( KOKKOS_ENABLE_STD_ATOMICS ) && \ ! defined( KOKKOS_ENABLE_SERIAL_ATOMICS ) // Compiling for non-Cuda atomic implementation has not been pre-selected. @@ -168,6 +169,12 @@ const char * atomic_query_version() } // namespace Kokkos +//---------------------------------------------------------------------------- +// Atomic Memory Orders +// +// Implements Strongly-typed analogs of C++ standard memory orders +#include "impl/Kokkos_Atomic_Memory_Order.hpp" + #if defined( KOKKOS_ENABLE_ROCM ) namespace Kokkos { namespace Impl { @@ -287,6 +294,14 @@ void unlock_address_rocm_space(void* ptr); #ifndef _WIN32 #include "impl/Kokkos_Atomic_Generic.hpp" #endif + +//---------------------------------------------------------------------------- +// Provide atomic loads and stores with memory order semantics + +#include "impl/Kokkos_Atomic_Load.hpp" +#include "impl/Kokkos_Atomic_Store.hpp" + + //---------------------------------------------------------------------------- // This atomic-style macro should be an inlined function, not a macro diff --git a/lib/kokkos/core/src/Kokkos_Complex.hpp b/lib/kokkos/core/src/Kokkos_Complex.hpp index 08cbba3b31..a3ada5d55e 100644 --- a/lib/kokkos/core/src/Kokkos_Complex.hpp +++ b/lib/kokkos/core/src/Kokkos_Complex.hpp @@ -631,8 +631,10 @@ RealType real (const complex& x) { template KOKKOS_INLINE_FUNCTION RealType abs (const complex& x) { - // FIXME (mfh 31 Oct 2014) Scale to avoid unwarranted overflow. - return std::sqrt (real (x) * real (x) + imag (x) * imag (x)); +#ifndef __CUDA_ARCH__ + using std::hypot; +#endif + return hypot(x.real(),x.imag()); } //! Power of a complex number diff --git a/lib/kokkos/core/src/Kokkos_Concepts.hpp b/lib/kokkos/core/src/Kokkos_Concepts.hpp index 117469b0a2..98ae141de4 100644 --- a/lib/kokkos/core/src/Kokkos_Concepts.hpp +++ b/lib/kokkos/core/src/Kokkos_Concepts.hpp @@ -79,6 +79,45 @@ struct IndexType using type = T; }; +namespace Experimental { + struct WorkItemProperty { + template + struct ImplWorkItemProperty { + static const unsigned value = Property; + using work_item_property = ImplWorkItemProperty; + }; + + constexpr static const ImplWorkItemProperty<0> None = ImplWorkItemProperty<0>(); + constexpr static const ImplWorkItemProperty<1> HintLightWeight = ImplWorkItemProperty<1>(); + constexpr static const ImplWorkItemProperty<2> HintHeavyWeight = ImplWorkItemProperty<2>(); + constexpr static const ImplWorkItemProperty<4> HintRegular = ImplWorkItemProperty<4>(); + constexpr static const ImplWorkItemProperty<8> HintIrregular = ImplWorkItemProperty<8>(); + typedef ImplWorkItemProperty<0> None_t; + typedef ImplWorkItemProperty<1> HintLightWeight_t; + typedef ImplWorkItemProperty<2> HintHeavyWeight_t; + typedef ImplWorkItemProperty<4> HintRegular_t; + typedef ImplWorkItemProperty<8> HintIrregular_t; + }; + +template +inline constexpr WorkItemProperty::ImplWorkItemProperty operator | + (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return WorkItemProperty::ImplWorkItemProperty(); +} + +template +inline constexpr WorkItemProperty::ImplWorkItemProperty operator & + (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return WorkItemProperty::ImplWorkItemProperty(); +} + +template +inline constexpr bool operator == (WorkItemProperty::ImplWorkItemProperty, WorkItemProperty::ImplWorkItemProperty) { + return pv1 == pv2; +} + +} + /**\brief Specify Launch Bounds for CUDA execution. * * If no launch bounds specified then do not set launch bounds. @@ -105,9 +144,13 @@ namespace Kokkos { template< typename T > struct is_ ## CONCEPT { \ private: \ template< typename , typename = std::true_type > struct have : std::false_type {}; \ - template< typename U > struct have::type, \ - typename std::remove_cv::type \ + template< typename U > struct have::type, \ + typename std::remove_cv::type \ + >::type> : std::true_type {}; \ + template< typename U > struct have::type, \ + typename std::remove_cv::type \ >::type> : std::true_type {}; \ public: \ enum { value = is_ ## CONCEPT::template have::value }; \ @@ -121,6 +164,9 @@ KOKKOS_IMPL_IS_CONCEPT( execution_space ) KOKKOS_IMPL_IS_CONCEPT( execution_policy ) KOKKOS_IMPL_IS_CONCEPT( array_layout ) KOKKOS_IMPL_IS_CONCEPT( reducer ) +namespace Experimental { +KOKKOS_IMPL_IS_CONCEPT( work_item_property ) +} namespace Impl { @@ -138,6 +184,8 @@ KOKKOS_IMPL_IS_CONCEPT( iteration_pattern ) KOKKOS_IMPL_IS_CONCEPT( schedule_type ) KOKKOS_IMPL_IS_CONCEPT( index_type ) KOKKOS_IMPL_IS_CONCEPT( launch_bounds ) +KOKKOS_IMPL_IS_CONCEPT( thread_team_member ) +KOKKOS_IMPL_IS_CONCEPT( host_thread_team_member ) } diff --git a/lib/kokkos/core/src/Kokkos_CopyViews.hpp b/lib/kokkos/core/src/Kokkos_CopyViews.hpp index 31605c9d39..f919fdb755 100644 --- a/lib/kokkos/core/src/Kokkos_CopyViews.hpp +++ b/lib/kokkos/core/src/Kokkos_CopyViews.hpp @@ -186,9 +186,9 @@ struct ViewFill typedef Kokkos::RangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-1D",policy_type(0,a.extent(0)),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -206,10 +206,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-2D", policy_type({0,0},{a.extent(0),a.extent(1)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -227,10 +227,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-3D", policy_type({0,0,0},{a.extent(0),a.extent(1),a.extent(2)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -248,10 +248,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-4D", policy_type({0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -269,10 +269,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-5D", policy_type({0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3),a.extent(4)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -290,10 +290,10 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-6D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3),a.extent(4),a.extent(5)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -311,11 +311,11 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-7D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2),a.extent(3), a.extent(5),a.extent(6)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -335,11 +335,11 @@ struct ViewFill typedef Kokkos::MDRangePolicy> policy_type; ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_):a(a_),val(val_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-8D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(5),a.extent(6),a.extent(7)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -437,10 +437,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-1D", policy_type(0,a.extent(0)),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -459,10 +459,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-2D", policy_type({0,0},{a.extent(0),a.extent(1)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -482,10 +482,10 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-3D", policy_type({0,0,0},{a.extent(0),a.extent(1),a.extent(2)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -505,11 +505,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-4D", policy_type({0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -530,11 +530,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-5D", policy_type({0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3),a.extent(4)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -555,11 +555,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-6D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(2), a.extent(3),a.extent(4),a.extent(5)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -581,11 +581,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-7D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(4),a.extent(5),a.extent(6)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -607,11 +607,11 @@ struct ViewCopy> policy_type; ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_):a(a_),b(b_) { - ExecSpace::fence(); + ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewCopy-8D", policy_type({0,0,0,0,0,0},{a.extent(0),a.extent(1),a.extent(3), a.extent(5),a.extent(6),a.extent(7)}),*this); - ExecSpace::fence(); + ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -1538,6 +1538,779 @@ void deep_copy } } +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Experimental { +/** \brief A local deep copy between views of the default specialization, compatible type, + * same non-zero rank. + */ +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const TeamType& team, const View & dst, const View & src) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, src.span()), [&] (const int& i) { + dst.data()[i] = src.data()[i]; + }); +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const View & dst, const View & src) { + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 && + unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + dst(i) = src(i); + }); + team.team_barrier(); +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 && + unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int i1 = i/dst.extent(0); + dst(i0,i1) = src(i0,i1); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 && + unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + int i2 = itmp/dst.extent(1); + dst(i0,i1,i2) = src(i0,i1,i2); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 && + unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + int i3 = itmp/dst.extent(2); + dst(i0,i1,i2,i3) = src(i0,i1,i2,i3); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 && + unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + int i4 = itmp/dst.extent(3); + dst(i0,i1,i2,i3,i4) = src(i0,i1,i2,i3,i4); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 && + unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + int i5 = itmp/dst.extent(4); + dst(i0,i1,i2,i3,i4,i5) = src(i0,i1,i2,i3,i4,i5); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 && + unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5)*dst.extent(6); + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,src); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + itmp = itmp/dst.extent(4); + int i5 = itmp%dst.extent(5); + int i6 = itmp/dst.extent(5); + dst(i0,i1,i2,i3,i4,i5,i6) = src(i0,i1,i2,i3,i4,i5,i6); + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP , class ST , class ... SP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 && + unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 && + unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 && + unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 && + unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 && + unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 && + unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + const View & src, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 && + unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() && src.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,src); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const TeamType& team, const View & dst, typename ViewTraits::const_value_type & value) { + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, dst.span()), [&] (const int& i) { + dst.data()[i] = value; + }); +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy_contiguous(const View & dst, typename ViewTraits::const_value_type & value) { + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + dst(i) = value; + }); + team.team_barrier(); +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int i1 = i/dst.extent(0); + dst(i0,i1) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + int i2 = itmp/dst.extent(1); + dst(i0,i1,i2) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + int i3 = itmp/dst.extent(2); + dst(i0,i1,i2,i3) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + int i4 = itmp/dst.extent(3); + dst(i0,i1,i2,i3,i4) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + int i5 = itmp/dst.extent(4); + dst(i0,i1,i2,i3,i4,i5) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class TeamType, class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const TeamType& team, const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0)*dst.extent(1)*dst.extent(2)*dst.extent(3)*dst.extent(4)*dst.extent(5)*dst.extent(6); + + if ( dst.span_is_contiguous() ) { + team.team_barrier(); + local_deep_copy_contiguous(team,dst,value); + team.team_barrier(); + } else { + team.team_barrier(); + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, N), [&] (const int& i) { + int i0 = i%dst.extent(0); + int itmp = i/dst.extent(0); + int i1 = itmp%dst.extent(1); + itmp = itmp/dst.extent(1); + int i2 = itmp%dst.extent(2); + itmp = itmp/dst.extent(2); + int i3 = itmp%dst.extent(3); + itmp = itmp/dst.extent(3); + int i4 = itmp%dst.extent(4); + itmp = itmp/dst.extent(4); + int i5 = itmp%dst.extent(5); + int i6 = itmp/dst.extent(5); + dst(i0,i1,i2,i3,i4,i5,i6) = value; + }); + team.team_barrier(); + } +} +//---------------------------------------------------------------------------- +template< class DT , class ... DP > +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 1 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + const size_t N = dst.extent(0); + + + for(size_t i=0;i +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 2 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 3 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 4 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 5 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 6 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0 +void KOKKOS_INLINE_FUNCTION local_deep_copy (const View & dst, + typename ViewTraits::const_value_type & value, + typename std::enable_if<( unsigned(ViewTraits::rank) == 7 + )>::type * = 0 ) +{ + if( dst.data() == nullptr ) { + return; + } + + if ( dst.span_is_contiguous() ) { + local_deep_copy_contiguous(dst,value); + } else { + + for(size_t i0=0;i0::value_type >::value , "deep_copy requires non-const type" ); - ExecSpace::fence(); + ExecSpace().fence(); typedef typename View::uniform_runtime_nomemspace_type ViewTypeUniform; Kokkos::Impl::ViewFill< ViewTypeUniform >( dst , value ); - ExecSpace::fence(); + ExecSpace().fence(); } /** \brief Deep copy into a value in Host memory from a view. */ @@ -2184,6 +2957,25 @@ create_mirror_view_and_copy(const Space& , const Kokkos::View & src deep_copy(mirror, src); return mirror; } + +// Create a mirror view in a new space without initializing (specialization for same space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , Kokkos::Impl::WithoutInitializing_t + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + return src; +} + +// Create a mirror view in a new space without initializing (specialization for different space) +template +typename Impl::MirrorViewType::view_type +create_mirror_view(const Space& , const Kokkos::View & src + , Kokkos::Impl::WithoutInitializing_t + , typename std::enable_if::is_same_memspace>::type* = 0 ) { + using Mirror = typename Impl::MirrorViewType::view_type; + return Mirror(Kokkos::ViewAllocateWithoutInitializing(src.label()), src.layout()); +} } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/Kokkos_Core.hpp b/lib/kokkos/core/src/Kokkos_Core.hpp index 4d0625ee1b..9fbba0abfa 100644 --- a/lib/kokkos/core/src/Kokkos_Core.hpp +++ b/lib/kokkos/core/src/Kokkos_Core.hpp @@ -66,6 +66,10 @@ #include #endif +#if defined( KOKKOS_ENABLE_HPX ) +#include +#endif + #if defined( KOKKOS_ENABLE_THREADS ) #include #endif @@ -87,6 +91,7 @@ #include #include #include +#include #include diff --git a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp index 150865d0f5..55c6a5494a 100644 --- a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp +++ b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp @@ -100,6 +100,12 @@ class Serial; ///< Execution space main process on CPU. class Qthreads; ///< Execution space with Qthreads back-end. #endif +#if defined( KOKKOS_ENABLE_HPX ) +namespace Experimental { +class HPX; ///< Execution space with HPX back-end. +} +#endif + #if defined( KOKKOS_ENABLE_THREADS ) class Threads; ///< Execution space with pthreads back-end. #endif @@ -156,6 +162,8 @@ namespace Kokkos { typedef Threads DefaultExecutionSpace; //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) // typedef Qthreads DefaultExecutionSpace; +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) + typedef Kokkos::Experimental::HPX DefaultExecutionSpace; #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) typedef Serial DefaultExecutionSpace; #else @@ -176,6 +184,8 @@ namespace Kokkos { typedef Threads DefaultHostExecutionSpace; //#elif defined( KOKKOS_ENABLE_QTHREADS ) // typedef Qthreads DefaultHostExecutionSpace; +#elif defined( KOKKOS_ENABLE_HPX ) + typedef Kokkos::Experimental::HPX DefaultHostExecutionSpace; #elif defined( KOKKOS_ENABLE_SERIAL ) typedef Serial DefaultHostExecutionSpace; #else diff --git a/lib/kokkos/core/src/Kokkos_Crs.hpp b/lib/kokkos/core/src/Kokkos_Crs.hpp index ccc3944d86..8412ced921 100644 --- a/lib/kokkos/core/src/Kokkos_Crs.hpp +++ b/lib/kokkos/core/src/Kokkos_Crs.hpp @@ -187,7 +187,7 @@ class GetCrsTransposeCounts { using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, index_type(in.entries.size()))); closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; @@ -266,7 +266,7 @@ class FillCrsTransposeEntries { using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, index_type(in.numRows()))); closure.execute(); - execution_space::fence(); + execution_space().fence(); } }; diff --git a/lib/kokkos/core/src/Kokkos_Cuda.hpp b/lib/kokkos/core/src/Kokkos_Cuda.hpp index 726a574961..4eb8ab4d4b 100644 --- a/lib/kokkos/core/src/Kokkos_Cuda.hpp +++ b/lib/kokkos/core/src/Kokkos_Cuda.hpp @@ -52,6 +52,7 @@ #include #include +#include #include #include @@ -67,6 +68,7 @@ namespace Kokkos { namespace Impl { class CudaExec ; +class CudaInternal ; } // namespace Impl } // namespace Kokkos @@ -74,6 +76,23 @@ class CudaExec ; namespace Kokkos { +namespace Impl { + namespace Experimental { + enum class CudaLaunchMechanism:unsigned{Default=0,ConstantMemory=1,GlobalMemory=2,LocalMemory=4}; + + constexpr inline CudaLaunchMechanism operator | (CudaLaunchMechanism p1, CudaLaunchMechanism p2) { + return static_cast(static_cast(p1) | static_cast(p2)); + } + constexpr inline CudaLaunchMechanism operator & (CudaLaunchMechanism p1, CudaLaunchMechanism p2) { + return static_cast(static_cast(p1) & static_cast(p2)); + } + + template + struct CudaDispatchProperties { + CudaLaunchMechanism launch_mechanism = l; + }; + } +} /// \class Cuda /// \brief Kokkos Execution Space that uses CUDA to run on GPUs. /// @@ -153,7 +172,13 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence(); + #else + void fence() const; + #endif /** \brief Return the maximum amount of concurrency. */ static int concurrency(); @@ -165,15 +190,18 @@ public: //-------------------------------------------------- //! \name Cuda space instances + KOKKOS_INLINE_FUNCTION ~Cuda() {} + Cuda(); - explicit Cuda( const int instance_id ); Cuda( Cuda && ) = default ; Cuda( const Cuda & ) = default ; Cuda & operator = ( Cuda && ) = default ; Cuda & operator = ( const Cuda & ) = default ; + Cuda(cudaStream_t stream); + //-------------------------------------------------------------------------- //! \name Device-specific functions //@{ @@ -219,18 +247,18 @@ public: */ static std::vector detect_device_arch(); - cudaStream_t cuda_stream() const { return m_stream ; } - int cuda_device() const { return m_device ; } + cudaStream_t cuda_stream() const; + int cuda_device() const; //@} //-------------------------------------------------------------------------- static const char* name(); + inline Impl::CudaInternal* impl_internal_space_instance() const { return m_space_instance; } private: - int m_device ; - cudaStream_t m_stream ; + Impl::CudaInternal* m_space_instance; }; } // namespace Kokkos @@ -302,7 +330,8 @@ struct VerifyExecutionCanAccessMemorySpace /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ -#include +#include +#include #include #include #include diff --git a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp index d4693b43c1..5c85850fda 100644 --- a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp @@ -46,12 +46,14 @@ #include #include -#include #include #include #include #include #include +#if defined(KOKKOS_ENABLE_PROFILING) +#include +#endif // KOKKOS_ENABLE_PROFILING //---------------------------------------------------------------------------- @@ -91,8 +93,9 @@ template class RangePolicy : public Impl::PolicyTraits { -private: +public: typedef Impl::PolicyTraits traits; +private: typename traits::execution_space m_space ; typename traits::index_type m_begin ; @@ -100,6 +103,9 @@ private: typename traits::index_type m_granularity ; typename traits::index_type m_granularity_mask ; + template + friend class RangePolicy; + public: //! Tag this class as an execution policy typedef RangePolicy execution_policy; @@ -118,6 +124,15 @@ public: RangePolicy(const RangePolicy&) = default; RangePolicy(RangePolicy&&) = default; + template + RangePolicy(const RangePolicy p) { + m_space = p.m_space; + m_begin = p.m_begin; + m_end = p.m_end; + m_granularity = p.m_granularity; + m_granularity_mask = p.m_granularity_mask; + } + inline RangePolicy() : m_space(), m_begin(0), m_end(0) {} /** \brief Total range */ @@ -523,19 +538,22 @@ class TeamPolicy: public typename Impl::PolicyTraits::execution_space, Properties ...> internal_policy; - typedef Impl::PolicyTraits traits; + template + friend class TeamPolicy; public: + typedef Impl::PolicyTraits traits; + typedef TeamPolicy execution_policy; TeamPolicy& operator = (const TeamPolicy&) = default; /** \brief Construct policy with the given instance of the execution space */ - TeamPolicy( const typename traits::execution_space & , int league_size_request , int team_size_request , int vector_length_request = 1 ) - : internal_policy(typename traits::execution_space(),league_size_request,team_size_request, vector_length_request) {first_arg = false;} + TeamPolicy( const typename traits::execution_space & space_ , int league_size_request , int team_size_request , int vector_length_request = 1 ) + : internal_policy(space_,league_size_request,team_size_request, vector_length_request) {first_arg = false;} - TeamPolicy( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & , int vector_length_request = 1 ) - : internal_policy(typename traits::execution_space(),league_size_request,Kokkos::AUTO(), vector_length_request) {first_arg = false;} + TeamPolicy( const typename traits::execution_space & space_, int league_size_request , const Kokkos::AUTO_t & , int vector_length_request = 1 ) + : internal_policy(space_,league_size_request,Kokkos::AUTO(), vector_length_request) {first_arg = false;} /** \brief Construct policy with the default instance of the execution space */ TeamPolicy( int league_size_request , int team_size_request , int vector_length_request = 1 ) @@ -618,6 +636,11 @@ public: } #endif + template + TeamPolicy(const TeamPolicy p):internal_policy(p) { + first_arg = p.first_arg; + } + private: bool first_arg; TeamPolicy(const internal_policy& p):internal_policy(p) {first_arg = false;} @@ -754,6 +777,59 @@ public: {} }; +template +struct TeamVectorRangeBoundariesStruct { +private: + + KOKKOS_INLINE_FUNCTION static + iType ibegin( const iType & arg_begin + , const iType & arg_end + , const iType & arg_rank + , const iType & arg_size + ) + { + return arg_begin + ( ( arg_end - arg_begin + arg_size - 1 ) / arg_size ) * arg_rank ; + } + + KOKKOS_INLINE_FUNCTION static + iType iend( const iType & arg_begin + , const iType & arg_end + , const iType & arg_rank + , const iType & arg_size + ) + { + const iType end_ = arg_begin + ( ( arg_end - arg_begin + arg_size - 1 ) / arg_size ) * ( arg_rank + 1 ); + return end_ < arg_end ? end_ : arg_end ; + } + +public: + + typedef iType index_type; + const iType start; + const iType end; + enum {increment = 1}; + const TeamMemberType& thread; + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct( const TeamMemberType& arg_thread + , const iType& arg_end + ) + : start( ibegin( 0 , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , end( iend( 0 , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , thread( arg_thread ) + {} + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct( const TeamMemberType& arg_thread + , const iType& arg_begin + , const iType& arg_end + ) + : start( ibegin( arg_begin , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , end( iend( arg_begin , arg_end , arg_thread.team_rank() , arg_thread.team_size() ) ) + , thread( arg_thread ) + {} +}; + template struct ThreadVectorRangeBoundariesStruct { typedef iType index_type; @@ -804,10 +880,10 @@ struct VectorSingleStruct { * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::TeamThreadRangeBoundariesStruct -TeamThreadRange( const TeamMemberType&, const iType& count ); +TeamThreadRange( const TeamMemberType&, const iType& count ) = delete; /** \brief Execution policy for parallel work over a threads within a team. * @@ -815,10 +891,32 @@ TeamThreadRange( const TeamMemberType&, const iType& count ); * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a begin and end. So the range is (begin,end]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::TeamThreadRangeBoundariesStruct::type, TeamMemberType> -TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ); +TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ) = delete; + +/** \brief Execution policy for parallel work over a threads within a team. + * + * The range is split over all threads in a team. The Mapping scheme depends on the architecture. + * This policy is used together with a parallel pattern as a nested layer within a kernel launched + * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. + */ +template +KOKKOS_INLINE_FUNCTION_DELETED +Impl::TeamThreadRangeBoundariesStruct +TeamVectorRange( const TeamMemberType&, const iType& count ) = delete; + +/** \brief Execution policy for parallel work over a threads within a team. + * + * The range is split over all threads in a team. The Mapping scheme depends on the architecture. + * This policy is used together with a parallel pattern as a nested layer within a kernel launched + * with the TeamPolicy. This variant expects a begin and end. So the range is (begin,end]. + */ +template +KOKKOS_INLINE_FUNCTION_DELETED +Impl::TeamThreadRangeBoundariesStruct::type, TeamMemberType> +TeamVectorRange( const TeamMemberType&, const iType1& begin, const iType2& end ) = delete; /** \brief Execution policy for a vector parallel loop. * @@ -826,15 +924,15 @@ TeamThreadRange( const TeamMemberType&, const iType1& begin, const iType2& end ) * This policy is used together with a parallel pattern as a nested layer within a kernel launched * with the TeamPolicy. This variant expects a single count. So the range is (0,count]. */ -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange( const TeamMemberType&, const iType& count ); +ThreadVectorRange( const TeamMemberType&, const iType& count ) = delete; -template -KOKKOS_INLINE_FUNCTION +template +KOKKOS_INLINE_FUNCTION_DELETED Impl::ThreadVectorRangeBoundariesStruct -ThreadVectorRange( const TeamMemberType&, const iType& arg_begin, const iType& arg_end ); +ThreadVectorRange( const TeamMemberType&, const iType& arg_begin, const iType& arg_end ) = delete; #if defined(KOKKOS_ENABLE_PROFILING) namespace Impl { @@ -877,5 +975,44 @@ struct ParallelConstructName { } // namespace Kokkos +namespace Kokkos { +namespace Experimental { + +namespace Impl { + template + struct PolicyPropertyAdaptor; + + template + struct PolicyPropertyAdaptor,RangePolicy> { + typedef RangePolicy policy_in_t; + typedef RangePolicy> policy_out_t; + }; + + template + struct PolicyPropertyAdaptor,TeamPolicy> { + typedef TeamPolicy policy_in_t; + typedef TeamPolicy> policy_out_t; + }; +} + +template +constexpr typename Impl::PolicyPropertyAdaptor,PolicyType>::policy_out_t + require(const PolicyType p, WorkItemProperty::ImplWorkItemProperty

){ + return typename Impl::PolicyPropertyAdaptor,PolicyType>::policy_out_t(p); +} +} //Experimental +} //Kokkos #endif /* #define KOKKOS_EXECPOLICY_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_Extents.hpp b/lib/kokkos/core/src/Kokkos_Extents.hpp new file mode 100644 index 0000000000..c8b9110485 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_Extents.hpp @@ -0,0 +1,186 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_KOKKOS_EXTENTS_HPP +#define KOKKOS_KOKKOS_EXTENTS_HPP + +#include + +namespace Kokkos { +namespace Experimental { + +constexpr ptrdiff_t dynamic_extent = -1; + +template +struct Extents { + /* TODO @enhancement flesh this out more */ +}; + +template +struct PrependExtent; + +template +struct PrependExtent< + Extents, NewExtent +> { + using type = Extents; +}; + +template +struct AppendExtent; + +template +struct AppendExtent< + Extents, NewExtent +> { + using type = Extents; +}; + +} // end namespace Experimental + +namespace Impl { + +namespace _parse_view_extents_impl { + +template +struct _all_remaining_extents_dynamic : std::true_type { }; + +template +struct _all_remaining_extents_dynamic + : _all_remaining_extents_dynamic +{ }; + +template +struct _all_remaining_extents_dynamic + : std::false_type +{ }; + +template +struct _parse_impl { + using type = Result; +}; + +// We have to treat the case of int**[x] specially, since it *doesn't* go backwards +template +struct _parse_impl< + T*, Experimental::Extents, + typename std::enable_if<_all_remaining_extents_dynamic::value>::type +> + : _parse_impl< + T, Experimental::Extents + > +{ }; + +// int*(*[x])[y] should still work also (meaning int[][x][][y]) +template +struct _parse_impl< + T*, Experimental::Extents, + typename std::enable_if::value>::type +> +{ + using _next = Kokkos::Experimental::AppendExtent< + typename _parse_impl, void>::type, + Experimental::dynamic_extent + >; + using type = typename _next::type; +}; + +template +struct _parse_impl< + T[N], Experimental::Extents, void +> + : _parse_impl< + T, Experimental::Extents // TODO @pedantic this could be a narrowing cast + > +{ }; + +} // end namespace _parse_view_extents_impl + +template +struct ParseViewExtents { + using type = + typename _parse_view_extents_impl + ::_parse_impl>::type; +}; + +template +struct ApplyExtent +{ + using type = ValueType[Ext]; +}; + +template +struct ApplyExtent +{ + using type = ValueType*; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type[N]; +}; + +template +struct ApplyExtent +{ + using type = ValueType*[Ext]; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type*; +}; + +template +struct ApplyExtent +{ + using type = typename ApplyExtent::type[N]; +}; + +} // end namespace Impl + +} // end namespace Kokkos + +#endif //KOKKOS_KOKKOS_EXTENTS_HPP diff --git a/lib/kokkos/core/src/Kokkos_Future.hpp b/lib/kokkos/core/src/Kokkos_Future.hpp new file mode 100644 index 0000000000..665ce71cf5 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_Future.hpp @@ -0,0 +1,567 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_FUTURE_HPP +#define KOKKOS_FUTURE_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include +#include +#include + +#include // is_space + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// For now, hack this in as a partial specialization +// TODO @tasking @cleanup Make this the "normal" class template and make the old code the specialization +template +class BasicFuture> +{ +public: + + using value_type = ValueType; + using execution_space = ExecutionSpace; + using scheduler_type = SimpleTaskScheduler; + using queue_type = typename scheduler_type::task_queue_type; + + +private: + + template + friend class SimpleTaskScheduler; + template + friend class BasicFuture; + + using task_base_type = typename scheduler_type::task_base_type; + using task_queue_type = typename scheduler_type::task_queue_type; + + using task_queue_traits = typename scheduler_type::task_queue_traits; + using task_scheduling_info_type = typename scheduler_type::task_scheduling_info_type; + + using result_storage_type = + Impl::TaskResultStorage< + ValueType, + Impl::SchedulingInfoStorage< + Impl::RunnableTaskBase, + task_scheduling_info_type + > + >; + + + + OwningRawPtr m_task = nullptr; + + KOKKOS_INLINE_FUNCTION + explicit + BasicFuture(task_base_type* task) + : m_task(task) + { + // Note: reference count starts at 2 to account for initial increment + // TODO @tasking @minor DSH verify reference count here and/or encapsulate starting reference count closer to here + } + +public: + + KOKKOS_INLINE_FUNCTION + BasicFuture() noexcept : m_task(nullptr) { } + + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept + : m_task(std::move(rhs.m_task)) + { + rhs.m_task = nullptr; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) + // : m_task(rhs.m_task) + : m_task(nullptr) + { + *static_cast(&m_task) = rhs.m_task; + if(m_task) m_task->increment_reference_count(); + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) noexcept + { + if(m_task != rhs.m_task) { + clear(); + //m_task = std::move(rhs.m_task); + *static_cast(&m_task) = rhs.m_task; + // rhs.m_task reference count is unchanged, since this is a move + } + else { + // They're the same, but this is a move, so 1 fewer references now + rhs.clear(); + } + rhs.m_task = nullptr; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture const& rhs) + { + if(m_task != rhs.m_task) { + clear(); + //m_task = rhs.m_task; + *static_cast(&m_task) = rhs.m_task; + } + if(m_task != nullptr) { m_task->increment_reference_count(); } + return *this; + } + + //---------------------------------------- + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept // NOLINT(google-explicit-constructor) + : m_task(std::move(rhs.m_task)) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Moved Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Moved Futures must have the same value_type" + ); + + // reference counts are unchanged, since this is a move + rhs.m_task = nullptr; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) // NOLINT(google-explicit-constructor) + //: m_task(rhs.m_task) + : m_task(nullptr) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Copied Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Copied Futures must have the same value_type" + ); + + *static_cast(&m_task) = rhs.m_task; + if(m_task) m_task->increment_reference_count(); + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& + operator=(BasicFuture const& rhs) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same value_type" + ); + + if(m_task != rhs.m_task) { + clear(); + //m_task = rhs.m_task; + *static_cast(&m_task) = rhs.m_task; + if(m_task != nullptr) { m_task->increment_reference_count(); } + } + return *this; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) + { + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same scheduler" + ); + + static_assert( + std::is_same::value || + std::is_same::value, + "Assigned Futures must have the same value_type" + ); + + if(m_task != rhs.m_task) { + clear(); + //m_task = std::move(rhs.m_task); + *static_cast(&m_task) = rhs.m_task; + // rhs.m_task reference count is unchanged, since this is a move + } + else { + // They're the same, but this is a move, so 1 fewer references now + rhs.clear(); + } + rhs.m_task = nullptr; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + ~BasicFuture() noexcept { clear(); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + void clear() noexcept { + if(m_task) { + bool should_delete = m_task->decrement_and_check_reference_count(); + if(should_delete) { + static_cast(m_task->ready_queue_base_ptr()) + ->deallocate(std::move(*m_task)); + } + } + //m_task = nullptr; + *static_cast(&m_task) = nullptr; + } + + KOKKOS_INLINE_FUNCTION + bool is_null() const noexcept { + return m_task == nullptr; + } + + + KOKKOS_INLINE_FUNCTION + bool is_ready() const noexcept { + return (m_task == nullptr) || m_task->wait_queue_is_consumed(); + } + + KOKKOS_INLINE_FUNCTION + const typename Impl::TaskResult< ValueType >::reference_type + get() const + { + KOKKOS_EXPECTS(is_ready()); + return static_cast(m_task)->value_reference(); + //return Impl::TaskResult::get(m_task); + } + +}; + +//////////////////////////////////////////////////////////////////////////////// +// OLD CODE +//////////////////////////////////////////////////////////////////////////////// + +template +class BasicFuture { +private: + + template< typename , typename > friend class BasicTaskScheduler ; + template< typename , typename > friend class BasicFuture ; + friend class Impl::TaskBase ; + template< typename , typename , typename > friend class Impl::Task ; + + + //---------------------------------------- + +public: + + //---------------------------------------- + + using scheduler_type = Scheduler; + using queue_type = typename scheduler_type::queue_type; + using execution_space = typename scheduler_type::execution_space; + using value_type = ValueType; + + //---------------------------------------- + +private: + + //---------------------------------------- + + using task_base = Impl::TaskBase; + + task_base * m_task ; + + KOKKOS_INLINE_FUNCTION explicit + BasicFuture( task_base * task ) : m_task(0) + { if ( task ) queue_type::assign( & m_task , task ); } + + //---------------------------------------- + +public: + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + bool is_null() const { return 0 == m_task ; } + + KOKKOS_INLINE_FUNCTION + int reference_count() const + { return 0 != m_task ? m_task->reference_count() : 0 ; } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + void clear() + { if ( m_task ) queue_type::assign( & m_task , (task_base*)0 ); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + ~BasicFuture() { clear(); } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + BasicFuture() noexcept : m_task(nullptr) { } + + KOKKOS_INLINE_FUNCTION + BasicFuture( BasicFuture && rhs ) noexcept + : m_task( rhs.m_task ) + { + rhs.m_task = 0; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture( const BasicFuture & rhs ) + : m_task(0) + { if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) noexcept + { + clear(); + m_task = rhs.m_task ; + rhs.m_task = 0 ; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture const& rhs) + { + if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + return *this ; + } + + //---------------------------------------- + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture&& rhs) noexcept // NOLINT(google-explicit-constructor) + : m_task( rhs.m_task ) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + rhs.m_task = 0 ; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture(BasicFuture const& rhs) // NOLINT(google-explicit-constructor) + : m_task(nullptr) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& + operator=(BasicFuture const& rhs) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); + return *this ; + } + + template + KOKKOS_INLINE_FUNCTION + BasicFuture& operator=(BasicFuture&& rhs) + { + static_assert + ( std::is_same::value || + std::is_same::value + , "Assigned Futures must have the same scheduler" ); + + static_assert + ( std::is_same< value_type , void >::value || + std::is_same::value + , "Assigned Futures must have the same value_type" ); + + clear(); + m_task = rhs.m_task ; + rhs.m_task = 0 ; + return *this ; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + int is_ready() const noexcept + { return ( 0 == m_task ) || ( ((task_base*) task_base::LockTag) == m_task->m_wait ); } + + KOKKOS_INLINE_FUNCTION + const typename Impl::TaskResult< ValueType >::reference_type + get() const + { + if ( 0 == m_task ) { + Kokkos::abort( "Kokkos:::Future::get ERROR: is_null()"); + } + return Impl::TaskResult< ValueType >::get( m_task ); + } +}; + +// Is a Future with the given execution space +template< typename , typename ExecSpace = void > +struct is_future : public std::false_type {}; + +template +struct is_future, ExecSpace> + : std::integral_constant::value + || std::is_void::value + > +{}; + +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + +namespace Impl { + +template +class ResolveFutureArgOrder { +private: + enum { Arg1_is_space = Kokkos::is_space::value }; + enum { Arg2_is_space = Kokkos::is_space::value }; + enum { Arg1_is_value = !Arg1_is_space && !std::is_same::value }; + enum { Arg2_is_value = !Arg2_is_space && !std::is_same::value }; + + static_assert( + ! ( Arg1_is_space && Arg2_is_space ), + "Future cannot be given two spaces" + ); + + static_assert( + ! ( Arg1_is_value && Arg2_is_value ), + "Future cannot be given two value types" + ); + + using value_type = + typename std::conditional::type + >::type; + + using execution_space = + typename std::conditional::type + >::type::execution_space; + +public: + + using type = BasicFuture>; + +}; + +} // end namespace Impl + +/** + * + * Future< space > // value_type == void + * Future< value > // space == Default + * Future< value , space > + * + */ +template +using Future = typename Impl::ResolveFutureArgOrder::type; + +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_FUTURE */ diff --git a/lib/kokkos/core/src/Kokkos_HPX.hpp b/lib/kokkos/core/src/Kokkos_HPX.hpp new file mode 100644 index 0000000000..79a2b74da4 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_HPX.hpp @@ -0,0 +1,1999 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HPX_HPP +#define KOKKOS_HPX_HPP + +#include +#if defined(KOKKOS_ENABLE_HPX) + +#include + +#include +#include +#include + +#ifdef KOKKOS_ENABLE_HBWSPACE +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// There are currently two different implementations for the parallel dispatch +// functions: +// +// - 0: The HPX way. Unfortunately, this comes with unnecessary +// overheads at the moment, so there is +// - 1: The manual way. This way is more verbose and does not take advantage of +// e.g. parallel::for_loop in HPX but it is significantly faster in many +// benchmarks. +// +// In the long run 0 should be the preferred implementation, but until HPX is +// improved 1 will be the default. +#ifndef KOKKOS_HPX_IMPLEMENTATION +#define KOKKOS_HPX_IMPLEMENTATION 1 +#endif + +#if (KOKKOS_HPX_IMPLEMENTATION < 0) || (KOKKOS_HPX_IMPLEMENTATION > 1) +#error "You have chosen an invalid value for KOKKOS_HPX_IMPLEMENTATION" +#endif + +namespace Kokkos { +namespace Impl { +class thread_buffer { + static constexpr std::size_t m_cache_line_size = 64; + + std::size_t m_num_threads; + std::size_t m_size_per_thread; + std::size_t m_size_total; + char *m_data; + + void pad_to_cache_line(std::size_t &size) { + size = ((size + m_cache_line_size - 1) / m_cache_line_size) * + m_cache_line_size; + } + +public: + thread_buffer() + : m_num_threads(0), m_size_per_thread(0), m_size_total(0), + m_data(nullptr) {} + thread_buffer(const std::size_t num_threads, + const std::size_t size_per_thread) { + resize(num_threads, size_per_thread); + } + ~thread_buffer() { delete[] m_data; } + + thread_buffer(const thread_buffer &) = delete; + thread_buffer(thread_buffer &&) = delete; + thread_buffer &operator=(const thread_buffer &) = delete; + thread_buffer &operator=(thread_buffer) = delete; + + void resize(const std::size_t num_threads, + const std::size_t size_per_thread) { + m_num_threads = num_threads; + m_size_per_thread = size_per_thread; + + pad_to_cache_line(m_size_per_thread); + + std::size_t size_total_new = m_num_threads * m_size_per_thread; + + if (m_size_total < size_total_new) { + delete[] m_data; + m_data = new char[size_total_new]; + m_size_total = size_total_new; + } + } + + char *get(std::size_t thread_num) { + assert(thread_num < m_num_threads); + if (m_data == nullptr) { + return nullptr; + } + return &m_data[thread_num * m_size_per_thread]; + } + + std::size_t size_per_thread() const noexcept { return m_size_per_thread; } + std::size_t size_total() const noexcept { return m_size_total; } +}; +} // namespace Impl + +namespace Experimental { +class HPX { +private: + static bool m_hpx_initialized; + static Kokkos::Impl::thread_buffer m_buffer; +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + static hpx::future m_future; +#endif + +public: + using execution_space = HPX; + using memory_space = HostSpace; + using device_type = Kokkos::Device; + using array_layout = LayoutRight; + using size_type = memory_space::size_type; + using scratch_memory_space = ScratchMemorySpace; + + HPX() noexcept {} + static void print_configuration(std::ostream &, + const bool /* verbose */ = false) { + std::cout << "HPX backend" << std::endl; + } + + static bool in_parallel(HPX const & = HPX()) noexcept { return false; } + static void impl_static_fence(HPX const & = HPX()) + #if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + { + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([]() { impl_get_future().wait(); }); + } else { + impl_get_future().wait(); + } + } + #else + noexcept { + } + #endif + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + static void fence(HPX const & = HPX()) { + #else + void fence() const { + #endif + impl_static_fence(); + } + + static bool is_asynchronous(HPX const & = HPX()) noexcept { +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + return true; +#else + return false; +#endif + } + + static std::vector partition(...) { + Kokkos::abort("Kokkos::Experimental::HPX::partition_master: can't partition an HPX " + "instance\n"); + return std::vector(); + } + + template + static void partition_master(F const &f, int requested_num_partitions = 0, + int requested_partition_size = 0) { + if (requested_num_partitions > 1) { + Kokkos::abort("Kokkos::Experimental::HPX::partition_master: can't partition an " + "HPX instance\n"); + } + } + + static int concurrency(); + static void impl_initialize(int thread_count); + static void impl_initialize(); + static bool impl_is_initialized() noexcept; + static void impl_finalize(); + + static int impl_thread_pool_size() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return 0; + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return hpx::resource::get_thread_pool(0).get_os_thread_count(); + } else { + return hpx::this_thread::get_pool()->get_os_thread_count(); + } + } + } + + static int impl_thread_pool_rank() noexcept { + hpx::runtime *rt = hpx::get_runtime_ptr(); + if (rt == nullptr) { + return 0; + } else { + if (hpx::threads::get_self_ptr() == nullptr) { + return 0; + } else { + return hpx::this_thread::get_pool()->get_pool_index(); + } + } + } + + static int impl_thread_pool_size(int depth) { + if (depth == 0) { + return impl_thread_pool_size(); + } else { + return 1; + } + } + + static int impl_max_hardware_threads() noexcept { + return hpx::threads::hardware_concurrency(); + } + + static int impl_hardware_thread_id() noexcept { + return hpx::get_worker_thread_num(); + } + + static Kokkos::Impl::thread_buffer &impl_get_buffer() noexcept { + return m_buffer; + } +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + static hpx::future &impl_get_future() noexcept { return m_future; } +#endif + + static constexpr const char *name() noexcept { return "HPX"; } +}; +} // namespace Experimental + +namespace Impl { +template +inline void dispatch_execute_task(Closure *closure) { +#if defined(KOKKOS_ENABLE_HPX_ASYNC_DISPATCH) + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([closure]() { + hpx::future &fut = Kokkos::Experimental::HPX::impl_get_future(); + Closure closure_copy = *closure; + fut = fut.then([closure_copy](hpx::future &&) { + closure_copy.execute_task(); + }); + }); + } else { + hpx::future &fut = Kokkos::Experimental::HPX::impl_get_future(); + Closure closure_copy = *closure; + fut = fut.then( + [closure_copy](hpx::future &&) { closure_copy.execute_task(); }); + } +#else + if (hpx::threads::get_self_ptr() == nullptr) { + hpx::threads::run_as_hpx_thread([closure]() { closure->execute_task(); }); + } else { + closure->execute_task(); + } +#endif +} +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template <> +struct MemorySpaceAccess { + enum { assignable = false }; + enum { accessible = true }; + enum { deepcopy = false }; +}; + +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::Experimental::HPX::memory_space, + Kokkos::Experimental::HPX::scratch_memory_space> { + enum { value = true }; + inline static void verify(void) {} + inline static void verify(const void *) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Experimental { +template <> class UniqueToken { +public: + using execution_space = HPX; + using size_type = int; + UniqueToken(execution_space const & = execution_space()) noexcept {} + + // NOTE: Currently this assumes that there is no oversubscription. + // hpx::get_num_worker_threads can't be used directly because it may yield + // it's task (problematic if called after hpx::get_worker_thread_num). + int size() const noexcept { return HPX::impl_max_hardware_threads(); } + int acquire() const noexcept { return HPX::impl_hardware_thread_id(); } + void release(int) const noexcept {} +}; + +template <> class UniqueToken { +public: + using execution_space = HPX; + using size_type = int; + UniqueToken(execution_space const & = execution_space()) noexcept {} + + // NOTE: Currently this assumes that there is no oversubscription. + // hpx::get_num_worker_threads can't be used directly because it may yield + // it's task (problematic if called after hpx::get_worker_thread_num). + int size() const noexcept { return HPX::impl_max_hardware_threads(); } + int acquire() const noexcept { return HPX::impl_hardware_thread_id(); } + void release(int) const noexcept {} +}; +} // namespace Experimental +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +struct HPXTeamMember { +public: + using execution_space = Kokkos::Experimental::HPX; + using scratch_memory_space = + Kokkos::ScratchMemorySpace; + +private: + scratch_memory_space m_team_shared; + std::size_t m_team_shared_size; + + int m_league_size; + int m_league_rank; + int m_team_size; + int m_team_rank; + +public: + KOKKOS_INLINE_FUNCTION + const scratch_memory_space &team_shmem() const { + return m_team_shared.set_team_thread_mode(0, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space &team_scratch(const int) const { + return m_team_shared.set_team_thread_mode(0, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space &thread_scratch(const int) const { + return m_team_shared.set_team_thread_mode(0, team_size(), team_rank()); + } + + KOKKOS_INLINE_FUNCTION int league_rank() const noexcept { + return m_league_rank; + } + + KOKKOS_INLINE_FUNCTION int league_size() const noexcept { + return m_league_size; + } + + KOKKOS_INLINE_FUNCTION int team_rank() const noexcept { return m_team_rank; } + KOKKOS_INLINE_FUNCTION int team_size() const noexcept { return m_team_size; } + + template + constexpr KOKKOS_INLINE_FUNCTION + HPXTeamMember(const TeamPolicyInternal &policy, + const int team_rank, const int league_rank, void *scratch, + int scratch_size) noexcept + : m_team_shared(scratch, scratch_size, scratch, scratch_size), + m_team_shared_size(scratch_size), m_league_size(policy.league_size()), + m_league_rank(league_rank), m_team_size(policy.team_size()), + m_team_rank(team_rank) {} + + KOKKOS_INLINE_FUNCTION + void team_barrier() const {} + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(ValueType &, const int &) const { + static_assert(std::is_trivially_default_constructible(), + "Only trivial constructible types can be broadcasted"); + } + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(const Closure &, ValueType &, + const int &) const { + static_assert(std::is_trivially_default_constructible(), + "Only trivial constructible types can be broadcasted"); + } + + template + KOKKOS_INLINE_FUNCTION ValueType team_reduce(const ValueType &value, + const JoinOp &) const { + return value; + } + + template + KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + team_reduce(const ReducerType &reducer) const {} + + template + KOKKOS_INLINE_FUNCTION Type + team_scan(const Type &value, Type *const global_accum = nullptr) const { + if (global_accum) { + Kokkos::atomic_fetch_add(global_accum, value); + } + + return 0; + } +}; + +template +class TeamPolicyInternal + : public PolicyTraits { + using traits = PolicyTraits; + + int m_league_size; + int m_team_size; + std::size_t m_team_scratch_size[2]; + std::size_t m_thread_scratch_size[2]; + int m_chunk_size; + +public: + using member_type = HPXTeamMember; + + // NOTE: Max size is 1 for simplicity. In most cases more than 1 is not + // necessary on CPU. Implement later if there is a need. + template + inline static int team_size_max(const FunctorType &) { + return 1; + } + + template + inline static int team_size_recommended(const FunctorType &) { + return 1; + } + + template + inline static int team_size_recommended(const FunctorType &, const int &) { + return 1; + } + + template + int team_size_max(const FunctorType &, const ParallelForTag &) const { + return 1; + } + + template + int team_size_max(const FunctorType &, const ParallelReduceTag &) const { + return 1; + } + template + int team_size_recommended(const FunctorType &, const ParallelForTag &) const { + return 1; + } + template + int team_size_recommended(const FunctorType &, + const ParallelReduceTag &) const { + return 1; + } + +private: + inline void init(const int league_size_request, const int team_size_request) { + m_league_size = league_size_request; + const int max_team_size = 1; // TODO: Can't use team_size_max(...) because + // it requires a functor as argument. + m_team_size = + team_size_request > max_team_size ? max_team_size : team_size_request; + + if (m_chunk_size > 0) { + if (!Impl::is_integral_power_of_two(m_chunk_size)) + Kokkos::abort("TeamPolicy blocking granularity must be power of two"); + } else { + int new_chunk_size = 1; + while (new_chunk_size * 4 * Kokkos::Experimental::HPX::concurrency() < + m_league_size) { + new_chunk_size *= 2; + } + + if (new_chunk_size < 128) { + new_chunk_size = 1; + while ((new_chunk_size * Kokkos::Experimental::HPX::concurrency() < + m_league_size) && + (new_chunk_size < 128)) + new_chunk_size *= 2; + } + + m_chunk_size = new_chunk_size; + } + } + +public: + inline int team_size() const { return m_team_size; } + inline int league_size() const { return m_league_size; } + + inline size_t scratch_size(const int &level, int team_size_ = -1) const { + if (team_size_ < 0) { + team_size_ = m_team_size; + } + return m_team_scratch_size[level] + + team_size_ * m_thread_scratch_size[level]; + } + +public: + template + friend class TeamPolicyInternal; + + template + TeamPolicyInternal( + const TeamPolicyInternal &p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + + TeamPolicyInternal(const typename traits::execution_space &, + int league_size_request, int team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, team_size_request); + } + + TeamPolicyInternal(const typename traits::execution_space &, + int league_size_request, + const Kokkos::AUTO_t &team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, 1); + } + + TeamPolicyInternal(int league_size_request, int team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, team_size_request); + } + + TeamPolicyInternal(int league_size_request, + const Kokkos::AUTO_t &team_size_request, + int /* vector_length_request */ = 1) + : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, + m_chunk_size(0) { + init(league_size_request, 1); + } + + inline int chunk_size() const { return m_chunk_size; } + + inline TeamPolicyInternal & + set_chunk_size(typename traits::index_type chunk_size_) { + m_chunk_size = chunk_size_; + return *this; + } + + inline TeamPolicyInternal &set_scratch_size(const int &level, + const PerTeamValue &per_team) { + m_team_scratch_size[level] = per_team.value; + return *this; + } + + inline TeamPolicyInternal & + set_scratch_size(const int &level, const PerThreadValue &per_thread) { + m_thread_scratch_size[level] = per_thread.value; + return *this; + } + + inline TeamPolicyInternal & + set_scratch_size(const int &level, const PerTeamValue &per_team, + const PerThreadValue &per_thread) { + m_team_scratch_size[level] = per_team.value; + m_thread_scratch_size[level] = per_thread.value; + return *this; + } +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + + const FunctorType m_functor; + const Policy m_policy; + + template + static typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i) { + functor(i); + } + + template + static typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i) { + const TagType t{}; + functor(t, i); + } + + template + static typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i); + } + } + + template + static typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i); + } + } + +public: + void execute() const { Kokkos::Impl::dispatch_execute_task(this); } + + void execute_task() const { +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this](const Member i) { + execute_functor(m_functor, i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &sem, i_begin]() { + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + execute_functor_range(m_functor, i_begin, i_end); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + inline ParallelFor(const FunctorType &arg_functor, Policy arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using MDRangePolicy = Kokkos::MDRangePolicy; + using Policy = typename MDRangePolicy::impl_range_policy; + using WorkTag = typename MDRangePolicy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using iterate_type = + typename Kokkos::Impl::HostIterateTile; + + const FunctorType m_functor; + const MDRangePolicy m_mdr_policy; + const Policy m_policy; + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this](const Member i) { + iterate_type(m_mdr_policy, m_functor)(i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &sem, i_begin]() { + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + for (Member i = i_begin; i < i_end; ++i) { + iterate_type(m_mdr_policy, m_functor)(i); + } + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + inline ParallelFor(const FunctorType &arg_functor, MDRangePolicy arg_policy) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using value_type = typename Analysis::value_type; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + + const FunctorType m_functor; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + + bool m_force_synchronous; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i, + reference_type update) { + functor(i, update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Member i, + reference_type update) { + const TagType t{}; + functor(t, i, update); + } + + template + inline typename std::enable_if::value>::type + execute_functor_range(reference_type update, const Member i_begin, + const Member i_end) const { + for (Member i = i_begin; i < i_end; ++i) { + m_functor(i, update); + } + } + + template + inline typename std::enable_if::value>::type + execute_functor_range(reference_type update, const Member i_begin, + const Member i_end) const { + const TagType t{}; + + for (Member i = i_begin; i < i_end; ++i) { + m_functor(t, i, update); + } + } + + class value_type_wrapper { + private: + std::size_t m_value_size; + char *m_value_buffer; + + public: + value_type_wrapper() : m_value_size(0), m_value_buffer(nullptr) {} + + value_type_wrapper(const std::size_t value_size) + : m_value_size(value_size), m_value_buffer(new char[m_value_size]) {} + + value_type_wrapper(const value_type_wrapper &other) + : m_value_size(0), m_value_buffer(nullptr) { + if (this != &other) { + m_value_buffer = new char[other.m_value_size]; + m_value_size = other.m_value_size; + + std::copy(other.m_value_buffer, other.m_value_buffer + m_value_size, + m_value_buffer); + } + } + + ~value_type_wrapper() { delete[] m_value_buffer; } + + value_type_wrapper(value_type_wrapper &&other) + : m_value_size(0), m_value_buffer(nullptr) { + if (this != &other) { + m_value_buffer = other.m_value_buffer; + m_value_size = other.m_value_size; + + other.m_value_buffer = nullptr; + other.m_value_size = 0; + } + } + + value_type_wrapper &operator=(const value_type_wrapper &other) { + if (this != &other) { + delete[] m_value_buffer; + m_value_buffer = new char[other.m_value_size]; + m_value_size = other.m_value_size; + + std::copy(other.m_value_buffer, other.m_value_buffer + m_value_size, + m_value_buffer); + } + + return *this; + } + + value_type_wrapper &operator=(value_type_wrapper &&other) { + if (this != &other) { + delete[] m_value_buffer; + m_value_buffer = other.m_value_buffer; + m_value_size = other.m_value_size; + + other.m_value_buffer = nullptr; + other.m_value_size = 0; + } + + return *this; + } + + pointer_type pointer() const { + return reinterpret_cast(m_value_buffer); + } + + reference_type reference() const { + return ValueOps::reference( + reinterpret_cast(m_value_buffer)); + } + }; + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + // NOTE: This version makes the most use of HPX functionality, but + // requires the struct value_type_wrapper to handle different + // reference_types. It is also significantly slower than the version + // below due to not reusing the buffer used by other functions. + using hpx::parallel::reduction; + using hpx::parallel::execution::static_chunk_size; + + value_type_wrapper final_value(value_size); + value_type_wrapper identity(value_size); + + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + final_value.pointer()); + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + identity.pointer()); + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), + reduction(final_value, identity, + [this](value_type_wrapper &a, + value_type_wrapper &b) -> value_type_wrapper & { + ValueJoin::join( + ReducerConditional::select(m_functor, m_reducer), + a.pointer(), b.pointer()); + return a; + }), + [this](Member i, value_type_wrapper &update) { + execute_functor(m_functor, i, update.reference()); + }); + + pointer_type final_value_ptr = final_value.pointer(); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size); + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, i_begin]() { + reference_type update = + ValueOps::reference(reinterpret_cast( + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + execute_functor_range(update, i_begin, i_end); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); + + for (int i = 1; i < num_worker_threads; ++i) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0)), + reinterpret_cast(buffer.get(i))); + } + + pointer_type final_value_ptr = + reinterpret_cast(buffer.get(0)); +#endif + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), final_value_ptr); + + if (m_result_ptr != nullptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = final_value_ptr[j]; + } + } + } + + template + inline ParallelReduce( + const FunctorType &arg_functor, Policy arg_policy, + const ViewType &arg_view, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), + m_result_ptr(arg_view.data()), + m_force_synchronous(!arg_view.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, Policy arg_policy, + const ReducerType &reducer) + : m_functor(arg_functor), m_policy(arg_policy), m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; + +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HPX> { +private: + using MDRangePolicy = Kokkos::MDRangePolicy; + using Policy = typename MDRangePolicy::impl_range_policy; + using WorkTag = typename MDRangePolicy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = FunctorAnalysis; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using value_type = typename Analysis::value_type; + using reference_type = typename Analysis::reference_type; + using iterate_type = + typename Kokkos::Impl::HostIterateTile; + + const FunctorType m_functor; + const MDRangePolicy m_mdr_policy; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + + bool m_force_synchronous; + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), + m_policy.begin(), m_policy.end(), [this, &buffer](const Member i) { + reference_type update = ValueOps::reference( + reinterpret_cast(buffer.get( + Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + iterate_type(m_mdr_policy, m_functor, update)(i); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (Member i_begin = m_policy.begin(); i_begin < m_policy.end(); + i_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, i_begin]() { + reference_type update = + ValueOps::reference(reinterpret_cast( + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()))); + const Member i_end = + (std::min)(i_begin + m_policy.chunk_size(), m_policy.end()); + + for (Member i = i_begin; i < i_end; ++i) { + iterate_type(m_mdr_policy, m_functor, update)(i); + } + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + + for (int i = 1; i < num_worker_threads; ++i) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0)), + reinterpret_cast(buffer.get(i))); + } + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(0))); + + if (m_result_ptr != nullptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = reinterpret_cast(buffer.get(0))[j]; + } + } + } + + template + inline ParallelReduce( + const FunctorType &arg_functor, MDRangePolicy arg_policy, + const ViewType &arg_view, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), + m_reducer(InvalidType()), m_result_ptr(arg_view.data()), + m_force_synchronous(!arg_view.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, + MDRangePolicy arg_policy, const ReducerType &reducer) + : m_functor(arg_functor), m_mdr_policy(arg_policy), + m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), + m_reducer(reducer), m_result_ptr(reducer.view().data()), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +template +class ParallelScan, + Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const Policy m_policy; + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i, update, final); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i, update, final); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const int value_count = Analysis::value_count(m_functor); + const std::size_t value_size = Analysis::value_size(m_functor); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 2 * value_size); + + using hpx::lcos::local::barrier; + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + barrier bar(num_worker_threads); + + for_loop(par.with(static_chunk_size(1)), 0, num_worker_threads, + [this, &buffer, &bar, num_worker_threads, value_count, + value_size](std::size_t const t) { + reference_type update_sum = ValueInit::init( + m_functor, reinterpret_cast(buffer.get(t))); + + const WorkRange range(m_policy, t, num_worker_threads); + execute_functor_range(m_functor, range.begin(), + range.end(), update_sum, false); + + bar.wait(); + + if (t == 0) { + ValueInit::init(m_functor, reinterpret_cast( + buffer.get(0) + value_size)); + + for (int i = 1; i < num_worker_threads; ++i) { + pointer_type ptr_1_prev = + reinterpret_cast(buffer.get(i - 1)); + pointer_type ptr_2_prev = reinterpret_cast( + buffer.get(i - 1) + value_size); + pointer_type ptr_2 = reinterpret_cast( + buffer.get(i) + value_size); + + for (int j = 0; j < value_count; ++j) { + ptr_2[j] = ptr_2_prev[j]; + } + + ValueJoin::join(m_functor, ptr_2, ptr_1_prev); + } + } + + bar.wait(); + + reference_type update_base = ValueOps::reference( + reinterpret_cast(buffer.get(t) + value_size)); + + execute_functor_range(m_functor, range.begin(), + range.end(), update_base, true); + }); + } + + inline ParallelScan(const FunctorType &arg_functor, const Policy &arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +template +class ParallelScanWithTotal, + ReturnType, Kokkos::Experimental::HPX> { +private: + using Policy = Kokkos::RangePolicy; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using Member = typename Policy::member_type; + using Analysis = + FunctorAnalysis; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const Policy m_policy; + ReturnType &m_returnvalue; + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + for (Member i = i_begin; i < i_end; ++i) { + functor(i, update, final); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Member i_begin, + const Member i_end, reference_type update, + const bool final) { + const TagType t{}; + for (Member i = i_begin; i < i_end; ++i) { + functor(t, i, update, final); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const int value_count = Analysis::value_count(m_functor); + const std::size_t value_size = Analysis::value_size(m_functor); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, 2 * value_size); + + using hpx::lcos::local::barrier; + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + barrier bar(num_worker_threads); + + for_loop(par.with(static_chunk_size(1)), 0, num_worker_threads, + [this, &buffer, &bar, num_worker_threads, value_count, + value_size](std::size_t const t) { + reference_type update_sum = ValueInit::init( + m_functor, reinterpret_cast(buffer.get(t))); + + const WorkRange range(m_policy, t, num_worker_threads); + execute_functor_range(m_functor, range.begin(), + range.end(), update_sum, false); + + bar.wait(); + + if (t == 0) { + ValueInit::init(m_functor, reinterpret_cast( + buffer.get(0) + value_size)); + + for (int i = 1; i < num_worker_threads; ++i) { + pointer_type ptr_1_prev = + reinterpret_cast(buffer.get(i - 1)); + pointer_type ptr_2_prev = reinterpret_cast( + buffer.get(i - 1) + value_size); + pointer_type ptr_2 = reinterpret_cast( + buffer.get(i) + value_size); + + for (int j = 0; j < value_count; ++j) { + ptr_2[j] = ptr_2_prev[j]; + } + + ValueJoin::join(m_functor, ptr_2, ptr_1_prev); + } + } + + bar.wait(); + + reference_type update_base = ValueOps::reference( + reinterpret_cast(buffer.get(t) + value_size)); + + execute_functor_range(m_functor, range.begin(), + range.end(), update_base, true); + + if (t == std::size_t(num_worker_threads - 1)) { + m_returnvalue = update_base; + } + }); + } + + inline ParallelScanWithTotal(const FunctorType &arg_functor, + const Policy &arg_policy, + ReturnType &arg_returnvalue) + : m_functor(arg_functor), m_policy(arg_policy), + m_returnvalue(arg_returnvalue) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { +template +class ParallelFor, + Kokkos::Experimental::HPX> { +private: + using Policy = TeamPolicyInternal; + using WorkTag = typename Policy::work_tag; + using Member = typename Policy::member_type; + using memory_space = Kokkos::HostSpace; + + const FunctorType m_functor; + const Policy m_policy; + const int m_league; + const std::size_t m_shared; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size) { + const TagType t{}; + functor(t, Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size) { + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size) { + const TagType t{}; + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(t, + Member(policy, 0, league_rank, local_buffer, local_buffer_size)); + } + } + +public: + void execute() const { dispatch_execute_task(this); } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, m_shared); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + using hpx::parallel::execution::static_chunk_size; + + for_loop(par.with(static_chunk_size(m_policy.chunk_size())), 0, + m_policy.league_size(), [this, &buffer](const int league_rank) { + execute_functor( + m_functor, m_policy, league_rank, + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()), + m_shared); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (int league_rank_begin = 0; league_rank_begin < m_policy.league_size(); + league_rank_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, league_rank_begin]() { + const int league_rank_end = (std::min)( + league_rank_begin + m_policy.chunk_size(), m_policy.league_size()); + execute_functor_range( + m_functor, m_policy, league_rank_begin, league_rank_end, + buffer.get(Kokkos::Experimental::HPX::impl_hardware_thread_id()), m_shared); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + } + + ParallelFor(const FunctorType &arg_functor, const Policy &arg_policy) + : m_functor(arg_functor), m_policy(arg_policy), + m_league(arg_policy.league_size()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + arg_functor, arg_policy.team_size())) {} +}; + +template +class ParallelReduce, + ReducerType, Kokkos::Experimental::HPX> { +private: + using Policy = TeamPolicyInternal; + using Analysis = + FunctorAnalysis; + using Member = typename Policy::member_type; + using WorkTag = typename Policy::work_tag; + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + using ValueOps = Kokkos::Impl::FunctorValueOps; + using pointer_type = typename Analysis::pointer_type; + using reference_type = typename Analysis::reference_type; + using value_type = typename Analysis::value_type; + + const FunctorType m_functor; + const int m_league; + const Policy m_policy; + const ReducerType m_reducer; + pointer_type m_result_ptr; + const std::size_t m_shared; + + bool m_force_synchronous; + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor(const FunctorType &functor, const Policy &policy, + const int league_rank, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + const TagType t{}; + functor(t, Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + } + + template + inline static + typename std::enable_if::value>::type + execute_functor_range(const FunctorType &functor, const Policy &policy, + const int league_rank_begin, + const int league_rank_end, char *local_buffer, + const std::size_t local_buffer_size, + reference_type update) { + const TagType t{}; + for (int league_rank = league_rank_begin; league_rank < league_rank_end; + ++league_rank) { + functor(t, + Member(policy, 0, league_rank, local_buffer, local_buffer_size), + update); + } + } + +public: + void execute() const { + dispatch_execute_task(this); + } + + inline void execute_task() const { + const int num_worker_threads = Kokkos::Experimental::HPX::concurrency(); + const std::size_t value_size = + Analysis::value_size(ReducerConditional::select(m_functor, m_reducer)); + + thread_buffer &buffer = Kokkos::Experimental::HPX::impl_get_buffer(); + buffer.resize(num_worker_threads, value_size + m_shared); + + using hpx::parallel::for_loop; + using hpx::parallel::execution::par; + + for_loop(par, 0, num_worker_threads, [this, &buffer](std::size_t t) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + reinterpret_cast(buffer.get(t))); + }); + +#if KOKKOS_HPX_IMPLEMENTATION == 0 + using hpx::parallel::execution::static_chunk_size; + + hpx::parallel::for_loop( + par.with(static_chunk_size(m_policy.chunk_size())), 0, + m_policy.league_size(), + [this, &buffer, value_size](const int league_rank) { + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + reference_type update = ValueOps::reference( + reinterpret_cast(buffer.get(t))); + + execute_functor(m_functor, m_policy, league_rank, + buffer.get(t) + value_size, m_shared, + update); + }); + +#elif KOKKOS_HPX_IMPLEMENTATION == 1 + using hpx::apply; + using hpx::lcos::local::counting_semaphore; + + counting_semaphore sem(0); + std::size_t num_tasks = 0; + + for (int league_rank_begin = 0; league_rank_begin < m_policy.league_size(); + league_rank_begin += m_policy.chunk_size()) { + apply([this, &buffer, &sem, league_rank_begin, value_size]() { + std::size_t t = Kokkos::Experimental::HPX::impl_hardware_thread_id(); + reference_type update = + ValueOps::reference(reinterpret_cast(buffer.get(t))); + const int league_rank_end = (std::min)( + league_rank_begin + m_policy.chunk_size(), m_policy.league_size()); + execute_functor_range( + m_functor, m_policy, league_rank_begin, league_rank_end, + buffer.get(t) + value_size, m_shared, update); + + sem.signal(1); + }); + + ++num_tasks; + } + + sem.wait(num_tasks); +#endif + + const pointer_type ptr = reinterpret_cast(buffer.get(0)); + for (int t = 1; t < num_worker_threads; ++t) { + ValueJoin::join(ReducerConditional::select(m_functor, m_reducer), ptr, + reinterpret_cast(buffer.get(t))); + } + + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), ptr); + + if (m_result_ptr) { + const int n = Analysis::value_count( + ReducerConditional::select(m_functor, m_reducer)); + + for (int j = 0; j < n; ++j) { + m_result_ptr[j] = ptr[j]; + } + } + } + + template + ParallelReduce( + const FunctorType &arg_functor, const Policy &arg_policy, + const ViewType &arg_result, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void *>::type = NULL) + : m_functor(arg_functor), m_league(arg_policy.league_size()), + m_policy(arg_policy), m_reducer(InvalidType()), + m_result_ptr(arg_result.data()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + m_functor, arg_policy.team_size())), + m_force_synchronous(!arg_result.impl_track().has_record()) {} + + inline ParallelReduce(const FunctorType &arg_functor, Policy arg_policy, + const ReducerType &reducer) + : m_functor(arg_functor), m_league(arg_policy.league_size()), + m_policy(arg_policy), m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_shared(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + + FunctorTeamShmemSize::value( + arg_functor, arg_policy.team_size())), + m_force_synchronous(!reducer.view().impl_track().has_record()) {} +}; +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamThreadRangeBoundariesStruct + TeamThreadRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::TeamThreadRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type::type, Impl::HPXTeamMember> +TeamThreadRange(const Impl::HPXTeamMember &thread, const iType1 &i_begin, + const iType2 &i_end) { + using iType = typename std::common_type::type; + return Impl::TeamThreadRangeBoundariesStruct( + thread, iType(i_begin), iType(i_end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamThreadRangeBoundariesStruct + TeamVectorRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::TeamThreadRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type::type, Impl::HPXTeamMember> +TeamVectorRange(const Impl::HPXTeamMember &thread, const iType1 &i_begin, + const iType2 &i_end) { + using iType = typename std::common_type::type; + return Impl::TeamThreadRangeBoundariesStruct( + thread, iType(i_begin), iType(i_end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HPXTeamMember &thread, const iType &count) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HPXTeamMember &thread, const iType &i_begin, + const iType &i_end) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, i_begin, i_end); +} + +KOKKOS_INLINE_FUNCTION +Impl::ThreadSingleStruct +PerTeam(const Impl::HPXTeamMember &thread) { + return Impl::ThreadSingleStruct(thread); +} + +KOKKOS_INLINE_FUNCTION +Impl::VectorSingleStruct +PerThread(const Impl::HPXTeamMember &thread) { + return Impl::VectorSingleStruct(thread); +} + +/** \brief Inter-thread parallel_for. Executes lambda(iType i) for each + * i=0..N-1. + * + * The range i=0..N-1 is mapped to all threads of the the calling thread team. + * This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda) { + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) + lambda(i); +} + +/** \brief Inter-thread vector parallel_reduce. Executes lambda(iType i, + * ValueType & val) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all threads of the the calling thread team + * and a summation of val is performed and put into result. This functionality + * requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, ValueType &result) { + result = ValueType(); + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, result); + } +} + +/** \brief Intra-thread vector parallel_for. Executes lambda(iType i) for each + * i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes of the the calling thread. + * This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda) { +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i); + } +} + +/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, + * ValueType & val) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes of the the calling thread + * and a summation of val is performed and put into result. This functionality + * requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, ValueType &result) { + result = ValueType(); +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, result); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::TeamThreadRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, const ReducerType &reducer) { + reducer.init(reducer.reference()); + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, reducer.reference()); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_reduce( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const Lambda &lambda, const ReducerType &reducer) { + reducer.init(reducer.reference()); +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, reducer.reference()); + } +} + +template +KOKKOS_INLINE_FUNCTION void parallel_scan( + Impl::TeamThreadRangeBoundariesStruct const + &loop_boundaries, + const FunctorType &lambda) { + using value_type = typename Kokkos::Impl::FunctorAnalysis< + Kokkos::Impl::FunctorPatternInterface::SCAN, void, + FunctorType>::value_type; + + value_type scan_val = value_type(); + + // Intra-member scan + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, false); + } + + // 'scan_val' output is the exclusive prefix sum + scan_val = loop_boundaries.thread.team_scan(scan_val); + + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, true); + } +} + +/** \brief Intra-thread vector parallel exclusive prefix sum. Executes + * lambda(iType i, ValueType & val, bool final) for each i=0..N-1. + * + * The range i=0..N-1 is mapped to all vector lanes in the thread and a scan + * operation is performed. Depending on the target execution space the operator + * might be called twice: once with final=false and once with final=true. When + * final==true val contains the prefix sum value. The contribution of this "i" + * needs to be added to val no matter whether final==true or not. In a serial + * execution (i.e. team_size==1) the operator is only called once with + * final==true. Scan_val will be set to the final sum value over all vector + * lanes. This functionality requires C++11 support.*/ +template +KOKKOS_INLINE_FUNCTION void parallel_scan( + const Impl::ThreadVectorRangeBoundariesStruct + &loop_boundaries, + const FunctorType &lambda) { + using ValueTraits = Kokkos::Impl::FunctorValueTraits; + using value_type = typename ValueTraits::value_type; + + value_type scan_val = value_type(); + +#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP +#pragma ivdep +#endif + for (iType i = loop_boundaries.start; i < loop_boundaries.end; + i += loop_boundaries.increment) { + lambda(i, scan_val, true); + } +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::VectorSingleStruct &single_struct, + const FunctorType &lambda) { + lambda(); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::ThreadSingleStruct &single_struct, + const FunctorType &lambda) { + lambda(); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::VectorSingleStruct &single_struct, + const FunctorType &lambda, ValueType &val) { + lambda(val); +} + +template +KOKKOS_INLINE_FUNCTION void +single(const Impl::ThreadSingleStruct &single_struct, + const FunctorType &lambda, ValueType &val) { + lambda(val); +} + +} // namespace Kokkos + +#include + +#endif /* #if defined( KOKKOS_ENABLE_HPX ) */ +#endif /* #ifndef KOKKOS_HPX_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_HostSpace.hpp b/lib/kokkos/core/src/Kokkos_HostSpace.hpp index 3fd55d9148..921ba0df34 100644 --- a/lib/kokkos/core/src/Kokkos_HostSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_HostSpace.hpp @@ -57,6 +57,8 @@ #include #include +#include "impl/Kokkos_HostSpace_deepcopy.hpp" + /*--------------------------------------------------------------------------*/ namespace Kokkos { @@ -113,6 +115,8 @@ public: typedef Kokkos::OpenMP execution_space; #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) typedef Kokkos::Threads execution_space; +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) + typedef Kokkos::Experimental::HPX execution_space; //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) // typedef Kokkos::Qthreads execution_space; #elif defined( KOKKOS_ENABLE_OPENMP ) @@ -121,6 +125,8 @@ public: typedef Kokkos::Threads execution_space; //#elif defined( KOKKOS_ENABLE_QTHREADS ) // typedef Kokkos::Qthreads execution_space; +#elif defined( KOKKOS_ENABLE_HPX ) + typedef Kokkos::Experimental::HPX execution_space; #elif defined( KOKKOS_ENABLE_SERIAL ) typedef Kokkos::Serial execution_space; #else @@ -291,15 +297,18 @@ namespace Kokkos { namespace Impl { +#define PAR_DEEP_COPY_USE_MEMCPY + template< class ExecutionSpace > struct DeepCopy< HostSpace, HostSpace, ExecutionSpace > { DeepCopy( void * dst, const void * src, size_t n ) { - memcpy( dst, src, n ); + hostspace_parallel_deepcopy(dst,src,n); } DeepCopy( const ExecutionSpace& exec, void * dst, const void * src, size_t n ) { exec.fence(); - memcpy( dst, src, n ); + hostspace_parallel_deepcopy(dst,src,n); + exec.fence(); } }; diff --git a/lib/kokkos/core/src/Kokkos_Layout.hpp b/lib/kokkos/core/src/Kokkos_Layout.hpp index 43e117783b..6f423d545f 100644 --- a/lib/kokkos/core/src/Kokkos_Layout.hpp +++ b/lib/kokkos/core/src/Kokkos_Layout.hpp @@ -193,6 +193,9 @@ struct LayoutStride { {} }; +// ========================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + //---------------------------------------------------------------------------- /// \struct LayoutTileLeft /// \brief Memory layout tag indicating left-to-right (Fortran scheme) @@ -243,6 +246,8 @@ struct LayoutTileLeft { : dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {} }; +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =================================================================================== ////////////////////////////////////////////////////////////////////////////////////// @@ -269,14 +274,14 @@ namespace Experimental { template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP, unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 = 0, unsigned ArgN3 = 0, unsigned ArgN4 = 0, unsigned ArgN5 = 0, unsigned ArgN6 = 0, unsigned ArgN7 = 0, bool IsPowerOfTwo = - ( Impl::is_integral_power_of_two(ArgN0) && - Impl::is_integral_power_of_two(ArgN1) && - (Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && - (Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && - (Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && - (Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && - (Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && - (Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) + ( Kokkos::Impl::is_integral_power_of_two(ArgN0) && + Kokkos::Impl::is_integral_power_of_two(ArgN1) && + (Kokkos::Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) && + (Kokkos::Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) ) ) > struct LayoutTiled { diff --git a/lib/kokkos/core/src/Kokkos_Macros.hpp b/lib/kokkos/core/src/Kokkos_Macros.hpp index 10fc09423e..6b8ae02f82 100644 --- a/lib/kokkos/core/src/Kokkos_Macros.hpp +++ b/lib/kokkos/core/src/Kokkos_Macros.hpp @@ -50,6 +50,7 @@ * KOKKOS_ENABLE_CUDA Kokkos::Cuda execution and memory spaces * KOKKOS_ENABLE_THREADS Kokkos::Threads execution space * KOKKOS_ENABLE_QTHREADS Kokkos::Qthreads execution space + * KOKKOS_ENABLE_HPX Kokkos::Experimental::HPX execution space * KOKKOS_ENABLE_OPENMP Kokkos::OpenMP execution space * KOKKOS_ENABLE_OPENMPTARGET Kokkos::Experimental::OpenMPTarget execution space * KOKKOS_ENABLE_HWLOC HWLOC library is available. @@ -98,12 +99,14 @@ #if defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_THREADS) || \ defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_QTHREADS) || \ + defined(KOKKOS_ENABLE_HPX) || \ defined(KOKKOS_ENABLE_ROCM) || defined(KOKKOS_ENABLE_OPENMPTARGET) #define KOKKOS_INTERNAL_ENABLE_NON_CUDA_BACKEND #endif #if !defined(KOKKOS_ENABLE_THREADS) && !defined(KOKKOS_ENABLE_CUDA) && \ !defined(KOKKOS_ENABLE_OPENMP) && !defined(KOKKOS_ENABLE_QTHREADS) && \ + !defined(KOKKOS_ENABLE_HPX) && \ !defined(KOKKOS_ENABLE_ROCM) && !defined(KOKKOS_ENABLE_OPENMPTARGET) #define KOKKOS_INTERNAL_NOT_PARALLEL #endif @@ -174,33 +177,22 @@ #if ( 10000 > CUDA_VERSION ) #define KOKKOS_ENABLE_PRE_CUDA_10_DEPRECATION_API #endif + + #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 700) + // PTX atomics with memory order semantics are only available on volta and later + #if !defined(KOKKOS_DISABLE_CUDA_ASM) + #if !defined(KOKKOS_ENABLE_CUDA_ASM) + #define KOKKOS_ENABLE_CUDA_ASM + #if !defined(KOKKOS_DISABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_ENABLE_CUDA_ASM_ATOMICS + #endif + #endif + #endif + #endif + + #endif // #if defined( KOKKOS_ENABLE_CUDA ) && defined( __CUDACC__ ) -//---------------------------------------------------------------------------- -// Language info: C++, CUDA, OPENMP - -#if defined( KOKKOS_ENABLE_CUDA ) - // Compiling Cuda code to 'ptx' - - #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__ - #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline - #define KOKKOS_FUNCTION __device__ __host__ -#endif // #if defined( __CUDA_ARCH__ ) - -#if defined( KOKKOS_ENABLE_ROCM ) && defined( __HCC__ ) - - #define KOKKOS_FORCEINLINE_FUNCTION __attribute__((amp,cpu)) inline - #define KOKKOS_INLINE_FUNCTION __attribute__((amp,cpu)) inline - #define KOKKOS_FUNCTION __attribute__((amp,cpu)) - #define KOKKOS_LAMBDA [=] __attribute__((amp,cpu)) -#endif - -#if defined( _OPENMP ) - // Compiling with OpenMP. - // The value of _OPENMP is an integer value YYYYMM - // where YYYY and MM are the year and month designation - // of the supported OpenMP API version. -#endif // #if defined( _OPENMP ) //---------------------------------------------------------------------------- // Mapping compiler built-ins to KOKKOS_COMPILER_*** macros @@ -263,7 +255,7 @@ #endif #endif -#if defined( __PGIC__ ) +#if defined( __PGIC__ ) #define KOKKOS_COMPILER_PGI __PGIC__*100+__PGIC_MINOR__*10+__PGIC_PATCHLEVEL__ #if ( 1540 > KOKKOS_COMPILER_PGI ) @@ -272,6 +264,36 @@ #endif //#endif // #if !defined( __CUDA_ARCH__ ) +//---------------------------------------------------------------------------- +// Language info: C++, CUDA, OPENMP + +#if defined( KOKKOS_ENABLE_CUDA ) + // Compiling Cuda code to 'ptx' + + #define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__ + #define KOKKOS_INLINE_FUNCTION __device__ __host__ inline + #define KOKKOS_FUNCTION __device__ __host__ + #if defined( KOKKOS_COMPILER_NVCC ) + #define KOKKOS_INLINE_FUNCTION_DELETED inline + #else + #define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline + #endif +#endif // #if defined( __CUDA_ARCH__ ) + +#if defined( KOKKOS_ENABLE_ROCM ) && defined( __HCC__ ) + + #define KOKKOS_FORCEINLINE_FUNCTION __attribute__((amp,cpu)) inline + #define KOKKOS_INLINE_FUNCTION __attribute__((amp,cpu)) inline + #define KOKKOS_FUNCTION __attribute__((amp,cpu)) + #define KOKKOS_LAMBDA [=] __attribute__((amp,cpu)) +#endif + +#if defined( _OPENMP ) + // Compiling with OpenMP. + // The value of _OPENMP is an integer value YYYYMM + // where YYYY and MM are the year and month designation + // of the supported OpenMP API version. +#endif // #if defined( _OPENMP ) //---------------------------------------------------------------------------- // Intel compiler macros @@ -320,7 +342,10 @@ #if defined( KOKKOS_ARCH_AVX512MIC ) #define KOKKOS_ENABLE_RFO_PREFETCH 1 - #endif + #if (KOKKOS_COMPILER_INTEL < 1800) && !defined(KOKKOS_KNL_USE_ASM_WORKAROUND) + #define KOKKOS_KNL_USE_ASM_WORKAROUND 1 + #endif + #endif #if defined( __MIC__ ) // Compiling for Xeon Phi @@ -386,6 +411,8 @@ #define KOKKOS_FORCEINLINE_FUNCTION inline __attribute__((always_inline)) #endif + #define KOKKOS_RESTRICT __restrict__ + #if !defined( KOKKOS_ENABLE_ASM ) && !defined( __PGIC__ ) && \ ( defined( __amd64 ) || defined( __amd64__ ) || \ defined( __x86_64 ) || defined( __x86_64__ ) || \ @@ -416,7 +443,7 @@ // Define function marking macros if compiler specific macros are undefined: #if !defined( KOKKOS_FORCEINLINE_FUNCTION ) - #define KOKKOS_FORCEINLINE_FUNCTION inline + define KOKKOS_FORCEINLINE_FUNCTION inline #endif #if !defined( KOKKOS_INLINE_FUNCTION ) @@ -427,6 +454,9 @@ #define KOKKOS_FUNCTION /**/ #endif +#if !defined( KOKKOS_INLINE_FUNCTION_DELETED ) + #define KOKKOS_INLINE_FUNCTION_DELETED inline +#endif //---------------------------------------------------------------------------- // Define empty macro for restrict if necessary: @@ -459,18 +489,20 @@ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) ? 1 : 0 ) + \ + ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) ? 1 : 0 ) + \ ( defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) ? 1 : 0 ) ) #error "More than one KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_* specified." #endif // If default is not specified then chose from enabled execution spaces. -// Priority: CUDA, OPENMP, THREADS, QTHREADS, SERIAL +// Priority: CUDA, OPENMP, THREADS, QTHREADS, HPX, SERIAL #if defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS ) //#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) +#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX ) #elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL ) #elif defined( KOKKOS_ENABLE_CUDA ) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA @@ -484,6 +516,8 @@ #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS //#elif defined( KOKKOS_ENABLE_QTHREADS ) // #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS +#elif defined( KOKKOS_ENABLE_HPX ) + #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX #else #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL #endif @@ -539,7 +573,27 @@ #define KOKKOS_IMPL_CTOR_DEFAULT_ARG KOKKOS_INVALID_INDEX #endif +#if (defined(KOKKOS_ENABLE_CXX14) || defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20)) + #define KOKKOS_CONSTEXPR_14 constexpr + #define KOKKOS_DEPRECATED [[deprecated]] + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE +#else + #define KOKKOS_CONSTEXPR_14 + #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) + #define KOKKOS_DEPRECATED + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE __attribute__ ((deprecated)) + #else + #define KOKKOS_DEPRECATED + #define KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE + #endif +#endif +// DJS 05/28/2019: Bugfix: Issue 2155 +// Use KOKKOS_ENABLE_CUDA_LDG_INTRINSIC to avoid memory leak in RandomAccess View +#if defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_CUDA_LDG_INTRINSIC) + #define KOKKOS_ENABLE_CUDA_LDG_INTRINSIC +#endif + #endif // #ifndef KOKKOS_MACROS_HPP diff --git a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp index 157345c552..365db2baec 100644 --- a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp +++ b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp @@ -132,12 +132,18 @@ private: public: + using memory_space = typename DeviceType::memory_space; + /**\brief The maximum size of a superblock and block */ enum : uint32_t { max_superblock_size = 1LU << 31 /* 2 gigabytes */ }; enum : uint32_t { max_block_per_superblock = max_bit_count }; //-------------------------------------------------------------------------- + KOKKOS_INLINE_FUNCTION + bool operator==(MemoryPool const& other) const + { return m_sb_state_array == other.m_sb_state_array; } + KOKKOS_INLINE_FUNCTION size_t capacity() const noexcept { return size_t(m_sb_count) << m_sb_size_lg2 ; } diff --git a/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp b/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp index eebc83cf3d..509ac6499e 100644 --- a/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp +++ b/lib/kokkos/core/src/Kokkos_MemoryTraits.hpp @@ -71,13 +71,18 @@ template < unsigned T > struct MemoryTraits { //! Tag this class as a kokkos memory traits: typedef MemoryTraits memory_traits ; - +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE enum : bool { Unmanaged = (unsigned(0) != (T & unsigned(Kokkos::Unmanaged))) }; enum : bool { RandomAccess = (unsigned(0) != (T & unsigned(Kokkos::RandomAccess))) }; enum : bool { Atomic = (unsigned(0) != (T & unsigned(Kokkos::Atomic))) }; enum : bool { Restrict = (unsigned(0) != (T & unsigned(Kokkos::Restrict))) }; enum : bool { Aligned = (unsigned(0) != (T & unsigned(Kokkos::Aligned))) }; - +#endif + enum : bool { is_unmanaged = (unsigned(0) != (T & unsigned(Kokkos::Unmanaged))) }; + enum : bool { is_random_access = (unsigned(0) != (T & unsigned(Kokkos::RandomAccess))) }; + enum : bool { is_atomic = (unsigned(0) != (T & unsigned(Kokkos::Atomic))) }; + enum : bool { is_restrict = (unsigned(0) != (T & unsigned(Kokkos::Restrict))) }; + enum : bool { is_aligned = (unsigned(0) != (T & unsigned(Kokkos::Aligned))) }; }; } // namespace Kokkos diff --git a/lib/kokkos/core/src/Kokkos_OpenMP.hpp b/lib/kokkos/core/src/Kokkos_OpenMP.hpp index ed4071a6da..6ee8f08dc8 100644 --- a/lib/kokkos/core/src/Kokkos_OpenMP.hpp +++ b/lib/kokkos/core/src/Kokkos_OpenMP.hpp @@ -107,8 +107,14 @@ public: /// \brief Wait until all dispatched functors complete on the given instance /// /// This is a no-op on OpenMP - inline + static void impl_static_fence( OpenMP const& = OpenMP() ) noexcept; + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence( OpenMP const& = OpenMP() ) noexcept; + #else + void fence() const; + #endif + /// \brief Does the given instance return immediately after launching /// a parallel algorithm diff --git a/lib/kokkos/core/src/Kokkos_Pair.hpp b/lib/kokkos/core/src/Kokkos_Pair.hpp index 1be763be85..ab0ab8152a 100644 --- a/lib/kokkos/core/src/Kokkos_Pair.hpp +++ b/lib/kokkos/core/src/Kokkos_Pair.hpp @@ -528,6 +528,15 @@ KOKKOS_FORCEINLINE_FUNCTION constexpr bool operator>= (const pair& lhs, const pair& rhs) { return !(lhs struct is_pair_like : std::false_type { }; +template struct is_pair_like> : std::true_type { }; +template struct is_pair_like> : std::true_type { }; + +} // end namespace Impl + } // namespace Kokkos diff --git a/lib/kokkos/core/src/Kokkos_Parallel.hpp b/lib/kokkos/core/src/Kokkos_Parallel.hpp index b095f5728e..09dcf60b11 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel.hpp @@ -525,7 +525,7 @@ void parallel_scan( const ExecutionPolicy & policy Kokkos::Profiling::endParallelScan(kpID); } #endif - + Kokkos::fence(); } template< class FunctorType, class ReturnType > @@ -560,7 +560,7 @@ void parallel_scan( const size_t work_count Kokkos::Profiling::endParallelScan(kpID); } #endif - + Kokkos::fence(); } template< class ExecutionPolicy, class FunctorType, class ReturnType > diff --git a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp index 06aaa6546e..36bc6e4153 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp @@ -69,18 +69,19 @@ public: typedef Sum reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Sum(value_type& value_): value(&value_) {} + Sum(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Sum(const result_view_type& value_): value(value_.data()) {} + Sum(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -100,12 +101,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -116,18 +122,19 @@ public: typedef Prod reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Prod(value_type& value_): value(&value_) {} + Prod(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Prod(const result_view_type& value_): value(value_.data()) {} + Prod(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -147,12 +154,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -163,18 +175,19 @@ public: typedef Min reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Min(value_type& value_): value(&value_) {} + Min(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Min(const result_view_type& value_): value(value_.data()) {} + Min(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -196,12 +209,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -212,18 +230,19 @@ public: typedef Max reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - Max(value_type& value_): value(&value_) {} + Max(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - Max(const result_view_type& value_): value(value_.data()) {} + Max(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -246,12 +265,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -262,18 +286,19 @@ public: typedef LAnd reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - LAnd(value_type& value_): value(&value_) {} + LAnd(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - LAnd(const result_view_type& value_): value(value_.data()) {} + LAnd(const result_view_type& value_): value(value_),references_scalar_v(false) {} KOKKOS_INLINE_FUNCTION void join(value_type& dest, const value_type& src) const { @@ -292,12 +317,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -308,18 +338,19 @@ public: typedef LOr reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - LOr(value_type& value_): value(&value_) {} + LOr(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - LOr(const result_view_type& value_): value(value_.data()) {} + LOr(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -339,12 +370,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -355,18 +391,19 @@ public: typedef BAnd reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - BAnd(value_type& value_): value(&value_) {} + BAnd(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - BAnd(const result_view_type& value_): value(value_.data()) {} + BAnd(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -386,12 +423,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -402,18 +444,19 @@ public: typedef BOr reducer; typedef typename std::remove_cv::type value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - BOr(value_type& value_): value(&value_) {} + BOr(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - BOr(const result_view_type& value_): value(value_.data()) {} + BOr(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -433,12 +476,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -471,18 +519,19 @@ public: typedef MinLoc reducer; typedef ValLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinLoc(value_type& value_): value(&value_) {} + MinLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinLoc(const result_view_type& value_): value(value_.data()) {} + MinLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required @@ -506,12 +555,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -526,18 +580,19 @@ public: typedef MaxLoc reducer; typedef ValLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MaxLoc(value_type& value_): value(&value_) {} + MaxLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MaxLoc(const result_view_type& value_): value(value_.data()) {} + MaxLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -560,12 +615,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -596,18 +656,19 @@ public: typedef MinMax reducer; typedef MinMaxScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinMax(value_type& value_): value(&value_) {} + MinMax(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinMax(const result_view_type& value_): value(value_.data()) {} + MinMax(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -638,12 +699,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; @@ -680,18 +746,19 @@ public: typedef MinMaxLoc reducer; typedef MinMaxLocScalar value_type; - typedef Kokkos::View > result_view_type; + typedef Kokkos::View result_view_type; private: - value_type* value; + result_view_type value; + bool references_scalar_v; public: KOKKOS_INLINE_FUNCTION - MinMaxLoc(value_type& value_): value(&value_) {} + MinMaxLoc(value_type& value_): value(&value_),references_scalar_v(true) {} KOKKOS_INLINE_FUNCTION - MinMaxLoc(const result_view_type& value_): value(value_.data()) {} + MinMaxLoc(const result_view_type& value_): value(value_),references_scalar_v(false) {} //Required KOKKOS_INLINE_FUNCTION @@ -728,12 +795,17 @@ public: KOKKOS_INLINE_FUNCTION value_type& reference() const { - return *value; + return *value.data(); } KOKKOS_INLINE_FUNCTION result_view_type view() const { - return result_view_type(value); + return value; + } + + KOKKOS_INLINE_FUNCTION + bool references_scalar() const { + return references_scalar_v; } }; } @@ -813,7 +885,7 @@ struct ParallelReduceReturnValue + struct ReducerHasTestReferenceFunction + { + template static std::true_type test_func( decltype(&E::references_scalar) ) ; + template static std::false_type test_func(...); + + enum { value = std::is_same(0))>::value }; + }; + + template::value> + struct ParallelReduceFence { + static void fence(const T&) { + Kokkos::fence(); + } + }; + template + struct ParallelReduceFence, false> { + static void fence(const View) {}; + }; + template + struct ParallelReduceFence { + static void fence(const T& reducer) { + if(reducer.references_scalar()) + Kokkos::fence(); + } + }; +} + /** \brief Parallel reduction * * parallel_reduce performs parallel reductions with arbitrary functions - i.e. @@ -959,6 +1062,7 @@ void parallel_reduce(const std::string& label, Kokkos::Impl::is_execution_policy::value >::type * = 0) { Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class PolicyType, class FunctorType, class ReturnType > @@ -970,6 +1074,7 @@ void parallel_reduce(const PolicyType& policy, Kokkos::Impl::is_execution_policy::value >::type * = 0) { Impl::ParallelReduceAdaptor::execute("",policy,functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -979,6 +1084,7 @@ void parallel_reduce(const size_t& policy, ReturnType& return_value) { typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; Impl::ParallelReduceAdaptor::execute("",policy_type(0,policy),functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -989,6 +1095,7 @@ void parallel_reduce(const std::string& label, ReturnType& return_value) { typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; Impl::ParallelReduceAdaptor::execute(label,policy_type(0,policy),functor,return_value); + Impl::ParallelReduceFence::fence(return_value); } // ReturnValue as View or Reducer: take by copy to allow for inline construction @@ -1004,6 +1111,7 @@ void parallel_reduce(const std::string& label, >::type * = 0) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute(label,policy,functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class PolicyType, class FunctorType, class ReturnType > @@ -1016,6 +1124,7 @@ void parallel_reduce(const PolicyType& policy, >::type * = 0) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute("",policy,functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -1026,6 +1135,7 @@ void parallel_reduce(const size_t& policy, typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute("",policy_type(0,policy),functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } template< class FunctorType, class ReturnType > @@ -1037,6 +1147,7 @@ void parallel_reduce(const std::string& label, typedef typename Impl::ParallelReducePolicyType::policy_type policy_type; ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute(label,policy_type(0,policy),functor,return_value_impl); + Impl::ParallelReduceFence::fence(return_value); } // No Return Argument diff --git a/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp b/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp new file mode 100644 index 0000000000..be76ec3def --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_PointerOwnership.hpp @@ -0,0 +1,74 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_POINTEROWNERSHIP_HPP +#define KOKKOS_IMPL_POINTEROWNERSHIP_HPP + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +/// Trivial wrapper for raw pointers that express ownership. +template +using OwningRawPtr = T*; + +/// Trivial wrapper for raw pointers that do not express ownership. +template +using ObservingRawPtr = T*; + +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_POINTEROWNERSHIP_HPP */ + diff --git a/lib/kokkos/core/src/Kokkos_ROCm.hpp b/lib/kokkos/core/src/Kokkos_ROCm.hpp index 469d6b2787..96207e73c6 100644 --- a/lib/kokkos/core/src/Kokkos_ROCm.hpp +++ b/lib/kokkos/core/src/Kokkos_ROCm.hpp @@ -140,7 +140,14 @@ public: static bool wake() ; /** \brief Wait until all dispatched functors complete. A noop for OpenMP. */ - static void fence() ; + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + static void fence(); + #else + void fence() const; + #endif + /// \brief Print configuration information to the given output stream. static void print_configuration( std::ostream & , const bool detail = false ); diff --git a/lib/kokkos/core/src/Kokkos_Serial.hpp b/lib/kokkos/core/src/Kokkos_Serial.hpp index 01701e53a2..5821b0c0c5 100644 --- a/lib/kokkos/core/src/Kokkos_Serial.hpp +++ b/lib/kokkos/core/src/Kokkos_Serial.hpp @@ -118,10 +118,16 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence() {} + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence() {} + #else + void fence() const {} + #endif /** \brief Return the maximum amount of concurrency. */ - static int concurrency() {return 1;}; + static int concurrency() {return 1;} //! Print configuration information to the given output stream. static void print_configuration( std::ostream & , const bool /* detail */ = false ) {} @@ -261,6 +267,20 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + + //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE template< class FunctorType > @@ -302,7 +322,7 @@ public: 20*1024*1024); } /** \brief Specify league size, request team size */ - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space & , int league_size_request #ifndef KOKKOS_ENABLE_DEPRECATED_CODE , int team_size_request @@ -320,7 +340,7 @@ public: #endif } - TeamPolicyInternal( execution_space & + TeamPolicyInternal( const execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1 ) diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp index 5045e9cbbc..1c3d58af08 100644 --- a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp @@ -50,393 +50,203 @@ #if defined( KOKKOS_ENABLE_TASKDAG ) #include +#include //---------------------------------------------------------------------------- #include #include -//---------------------------------------------------------------------------- - -namespace Kokkos { - -// Forward declarations used in Impl::TaskQueue - -template< typename Arg1 = void , typename Arg2 = void > -class Future ; - -template< typename Space > -class TaskScheduler ; - -template< typename Space > -void wait( TaskScheduler< Space > const & ); - -template< typename Space > -struct is_scheduler : public std::false_type {}; - -template< typename Space > -struct is_scheduler< TaskScheduler< Space > > : public std::true_type {}; - -} // namespace Kokkos - +#include #include +#include +#include +#include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- namespace Kokkos { + namespace Impl { -/*\brief Implementation data for task data management, access, and execution. - * - * CRTP Inheritance structure to allow static_cast from the - * task root type and a task's FunctorType. - * - * TaskBase< Space , ResultType , FunctorType > - * : TaskBase< Space , ResultType , void > - * , FunctorType - * { ... }; - * - * TaskBase< Space , ResultType , void > - * : TaskBase< Space , void , void > - * { ... }; - */ -template< typename Space , typename ResultType , typename FunctorType > -class TaskBase ; +template +class TaskExec; -} // namespace Impl -} // namespace Kokkos +} // end namespace Impl -//---------------------------------------------------------------------------- - -namespace Kokkos { - -/** - * - * Future< space > // value_type == void - * Future< value > // space == Default - * Future< value , space > - * - */ -template< typename Arg1 , typename Arg2 > -class Future { -private: - - template< typename > friend class TaskScheduler ; - template< typename , typename > friend class Future ; - template< typename , typename , typename > friend class Impl::TaskBase ; - - enum { Arg1_is_space = Kokkos::is_space< Arg1 >::value }; - enum { Arg2_is_space = Kokkos::is_space< Arg2 >::value }; - enum { Arg1_is_value = ! Arg1_is_space && - ! std::is_same< Arg1 , void >::value }; - enum { Arg2_is_value = ! Arg2_is_space && - ! std::is_same< Arg2 , void >::value }; - - static_assert( ! ( Arg1_is_space && Arg2_is_space ) - , "Future cannot be given two spaces" ); - - static_assert( ! ( Arg1_is_value && Arg2_is_value ) - , "Future cannot be given two value types" ); - - using ValueType = - typename std::conditional< Arg1_is_value , Arg1 , - typename std::conditional< Arg2_is_value , Arg2 , void - >::type >::type ; - - using Space = - typename std::conditional< Arg1_is_space , Arg1 , - typename std::conditional< Arg2_is_space , Arg2 , void - >::type >::type ; - - using task_base = Impl::TaskBase< void , void , void > ; - using queue_type = Impl::TaskQueue< Space > ; - - task_base * m_task ; - - KOKKOS_INLINE_FUNCTION explicit - Future( task_base * task ) : m_task(0) - { if ( task ) queue_type::assign( & m_task , task ); } - - //---------------------------------------- +template +class BasicTaskScheduler : public Impl::TaskSchedulerBase +{ public: - using execution_space = typename Space::execution_space ; - using value_type = ValueType ; + using scheduler_type = BasicTaskScheduler; + using execution_space = ExecSpace; + using queue_type = QueueType; + using memory_space = typename queue_type::memory_space; + using memory_pool = typename queue_type::memory_pool; + using specialization = Impl::TaskQueueSpecialization; + using member_type = typename specialization::member_type; + using team_scheduler_type = BasicTaskScheduler; + template + using runnable_task_type = Impl::Task; + template + using future_type = Kokkos::BasicFuture; + template + using future_type_for_functor = future_type; - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - bool is_null() const { return 0 == m_task ; } - - KOKKOS_INLINE_FUNCTION - int reference_count() const - { return 0 != m_task ? m_task->reference_count() : 0 ; } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - void clear() - { if ( m_task ) queue_type::assign( & m_task , (task_base*)0 ); } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - ~Future() { clear(); } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - constexpr Future() noexcept : m_task(0) {} - - KOKKOS_INLINE_FUNCTION - Future( Future && rhs ) - : m_task( rhs.m_task ) { rhs.m_task = 0 ; } - - KOKKOS_INLINE_FUNCTION - Future( const Future & rhs ) - : m_task(0) - { if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); } - - KOKKOS_INLINE_FUNCTION - Future & operator = ( Future && rhs ) - { - clear(); - m_task = rhs.m_task ; - rhs.m_task = 0 ; - return *this ; - } - - KOKKOS_INLINE_FUNCTION - Future & operator = ( const Future & rhs ) - { - if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - return *this ; - } - - //---------------------------------------- - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future( Future && rhs ) - : m_task( rhs.m_task ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - rhs.m_task = 0 ; - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future( const Future & rhs ) - : m_task(0) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - if ( rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future & operator = ( const Future & rhs ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - if ( m_task || rhs.m_task ) queue_type::assign( & m_task , rhs.m_task ); - return *this ; - } - - template< class A1 , class A2 > - KOKKOS_INLINE_FUNCTION - Future & operator = ( Future && rhs ) - { - static_assert - ( std::is_same< Space , void >::value || - std::is_same< Space , typename Future::Space >::value - , "Assigned Futures must have the same space" ); - - static_assert - ( std::is_same< value_type , void >::value || - std::is_same< value_type , typename Future::value_type >::value - , "Assigned Futures must have the same value_type" ); - - clear(); - m_task = rhs.m_task ; - rhs.m_task = 0 ; - return *this ; - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - int is_ready() const noexcept - { return ( 0 == m_task ) || ( ((task_base*) task_base::LockTag) == m_task->m_wait ); } - - KOKKOS_INLINE_FUNCTION - const typename Impl::TaskResult< ValueType >::reference_type - get() const - { - if ( 0 == m_task ) { - Kokkos::abort( "Kokkos:::Future::get ERROR: is_null()"); - } - return Impl::TaskResult< ValueType >::get( m_task ); - } -}; - -// Is a Future with the given execution space -template< typename , typename ExecSpace = void > -struct is_future : public std::false_type {}; - -template< typename Arg1 , typename Arg2 , typename ExecSpace > -struct is_future< Future , ExecSpace > - : public std::integral_constant - < bool , - ( std::is_same< ExecSpace , void >::value || - std::is_same< ExecSpace - , typename Future::execution_space >::value ) - > {}; - -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -enum class TaskPriority : int { High = 0 - , Regular = 1 - , Low = 2 }; - -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- - -template< int TaskEnum , typename DepFutureType > -struct TaskPolicyData -{ - using execution_space = typename DepFutureType::execution_space ; - using scheduler_type = TaskScheduler< execution_space > ; - - enum : int { m_task_type = TaskEnum }; - - scheduler_type const * m_scheduler ; - DepFutureType const m_dependence ; - int m_priority ; - - TaskPolicyData() = delete ; - TaskPolicyData( TaskPolicyData && ) = default ; - TaskPolicyData( TaskPolicyData const & ) = default ; - TaskPolicyData & operator = ( TaskPolicyData && ) = default ; - TaskPolicyData & operator = ( TaskPolicyData const & ) = default ; - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( DepFutureType const & arg_future - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( 0 ) - , m_dependence( arg_future ) - , m_priority( static_cast( arg_priority ) ) - {} - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( scheduler_type const & arg_scheduler - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( & arg_scheduler ) - , m_dependence() - , m_priority( static_cast( arg_priority ) ) - {} - - KOKKOS_INLINE_FUNCTION - TaskPolicyData( scheduler_type const & arg_scheduler - , DepFutureType const & arg_future - , Kokkos::TaskPriority const & arg_priority ) - : m_scheduler( & arg_scheduler ) - , m_dependence( arg_future ) - , m_priority( static_cast( arg_priority ) ) - {} -}; - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -template< typename ExecSpace > -class TaskScheduler -{ private: using track_type = Kokkos::Impl::SharedAllocationTracker ; - using queue_type = Kokkos::Impl::TaskQueue< ExecSpace > ; - using task_base = Impl::TaskBase< void , void , void > ; + using task_base = Impl::TaskBase; - track_type m_track ; - queue_type * m_queue ; + track_type m_track; + queue_type * m_queue; //---------------------------------------- + template + friend class Impl::TaskQueue; + template + friend struct Impl::TaskQueueSpecialization; + template + friend class Impl::TaskQueueSpecializationConstrained; + template + friend class Impl::TaskTeamMemberAdapter; + template + friend class Impl::TaskExec; + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + BasicTaskScheduler( + track_type arg_track, + queue_type* arg_queue + ) + : m_track(std::move(arg_track)), + m_queue(std::move(arg_queue)) + { } + + KOKKOS_INLINE_FUNCTION + team_scheduler_type get_team_scheduler(int team_rank) const { + return { m_track, &m_queue->get_team_queue(team_rank) }; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + static constexpr task_base* _get_task_ptr(std::nullptr_t) { return nullptr; } + + template + KOKKOS_INLINE_FUNCTION + static constexpr task_base* _get_task_ptr(future_type&& f) + { + return f.m_task; + } + + template< int TaskEnum , typename DepTaskType , typename FunctorType > + KOKKOS_FUNCTION + Kokkos::BasicFuture + _spawn_impl( + DepTaskType* arg_predecessor_task, + TaskPriority arg_priority, + typename task_base::function_type arg_function, + typename task_base::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + using functor_future_type = future_type_for_functor::type>; + using task_type = Impl::Task; + + //---------------------------------------- + // Give single-thread back-ends an opportunity to clear + // queue of ready tasks before allocating a new task + + // TODO @tasking @optimization DSH re-enable this, maybe? + // specialization::iff_single_thread_recursive_execute(scheduler); + + //---------------------------------------- + + functor_future_type f ; + + // Allocate task from memory pool + + const size_t alloc_size = + m_queue->template spawn_allocation_size< FunctorType >(); + + void* task_storage = m_queue->allocate(alloc_size); + + if (task_storage) { + + // Placement new construction + // Reference count starts at two: + // +1 for the matching decrement when task is complete + // +1 for the future + f.m_task = new (task_storage) task_type( std::forward(arg_functor) ); + + f.m_task->m_apply = arg_function; + //f.m_task->m_destroy = arg_destroy; + f.m_task->m_queue = m_queue; + f.m_task->m_next = arg_predecessor_task; + f.m_task->m_ref_count = 2; + f.m_task->m_alloc_size = alloc_size; + f.m_task->m_task_type = TaskEnum; + f.m_task->m_priority = (int16_t)arg_priority; + + Kokkos::memory_fence(); + + // The dependence (if any) is processed immediately + // within the schedule function, as such the dependence's + // reference count does not need to be incremented for + // the assignment. + + m_queue->schedule_runnable( f.m_task ); + // This task may be updated or executed at any moment, + // even during the call to 'schedule'. + } + + return f; + + } + public: - using execution_space = ExecSpace ; - using memory_space = typename queue_type::memory_space ; - using memory_pool = typename queue_type::memory_pool ; - using member_type = - typename Kokkos::Impl::TaskQueueSpecialization< ExecSpace >::member_type ; KOKKOS_INLINE_FUNCTION - TaskScheduler() : m_track(), m_queue(0) {} + BasicTaskScheduler() : m_track(), m_queue(0) {} KOKKOS_INLINE_FUNCTION - TaskScheduler( TaskScheduler && rhs ) - : m_track( rhs.m_track ), m_queue( rhs.m_queue ) {} + BasicTaskScheduler( BasicTaskScheduler && rhs ) noexcept + : m_track(rhs.m_track), // probably should be a move, but this is deprecated code anyway + m_queue(std::move(rhs.m_queue)) + { } KOKKOS_INLINE_FUNCTION - TaskScheduler( TaskScheduler const & rhs ) - : m_track( rhs.m_track ), m_queue( rhs.m_queue ) {} + BasicTaskScheduler( BasicTaskScheduler const & rhs ) + : m_track(rhs.m_track), + m_queue(rhs.m_queue) + { } KOKKOS_INLINE_FUNCTION - TaskScheduler & operator = ( TaskScheduler && rhs ) - { m_track = rhs.m_track ; m_queue = rhs.m_queue ; return *this ; } + BasicTaskScheduler& operator=(BasicTaskScheduler&& rhs) noexcept + { + m_track = rhs.m_track; // probably should be a move, but this is deprecated code anyway + m_queue = std::move(rhs.m_queue); + return *this; + } KOKKOS_INLINE_FUNCTION - TaskScheduler & operator = ( TaskScheduler const & rhs ) - { m_track = rhs.m_track ; m_queue = rhs.m_queue ; return *this ; } + BasicTaskScheduler& operator=(BasicTaskScheduler const& rhs) + { + m_track = rhs.m_track; + m_queue = rhs.m_queue; + return *this; + } - TaskScheduler( memory_pool const & arg_memory_pool ) - : m_track() - , m_queue(0) + explicit BasicTaskScheduler(memory_pool const & arg_memory_pool) noexcept + : m_track(), m_queue(0) { typedef Kokkos::Impl::SharedAllocationRecord < memory_space , typename queue_type::Destroy > @@ -455,13 +265,13 @@ public: m_track.assign_allocated_record_to_uninitialized( record ); } - TaskScheduler( memory_space const & arg_memory_space + BasicTaskScheduler( memory_space const & arg_memory_space , size_t const mempool_capacity , unsigned const mempool_min_block_size // = 1u << 6 , unsigned const mempool_max_block_size // = 1u << 10 , unsigned const mempool_superblock_size // = 1u << 12 ) - : TaskScheduler( memory_pool( arg_memory_space + : BasicTaskScheduler( memory_pool( arg_memory_space , mempool_capacity , mempool_min_block_size , mempool_max_block_size @@ -470,6 +280,12 @@ public: //---------------------------------------- + KOKKOS_INLINE_FUNCTION + queue_type& queue() const noexcept { + KOKKOS_EXPECTS(m_queue != nullptr); + return *m_queue; + } + KOKKOS_INLINE_FUNCTION memory_pool * memory() const noexcept { return m_queue ? &( m_queue->m_memory ) : (memory_pool*) 0 ; } @@ -486,216 +302,173 @@ public: size_t when_all_allocation_size( int narg ) const { return m_queue->when_all_allocation_size( narg ); } + //---------------------------------------- - template< int TaskEnum , typename DepFutureType , typename FunctorType > + template KOKKOS_FUNCTION static - Kokkos::Future< typename FunctorType::value_type , execution_space > - spawn( Impl::TaskPolicyData const & arg_policy - , typename task_base::function_type arg_function - , FunctorType && arg_functor - ) - { - using value_type = typename FunctorType::value_type ; - using future_type = Future< value_type , execution_space > ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithScheduler&& arg_policy, + typename task_base::function_type arg_function, + typename task_base::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + return std::move(arg_policy.scheduler()).template _spawn_impl( + _get_task_ptr(std::move(arg_policy.predecessor())), + arg_policy.priority(), + arg_function, + arg_destroy, + std::forward(arg_functor) + ); + } - queue_type * const queue = - arg_policy.m_scheduler ? arg_policy.m_scheduler->m_queue : ( - arg_policy.m_dependence.m_task - ? static_cast(arg_policy.m_dependence.m_task->m_queue) - : (queue_type*) 0 ); + template + KOKKOS_FUNCTION + future_type_for_functor::type> + spawn( + Impl::TaskPolicyWithPredecessor&& arg_policy, + FunctorType&& arg_functor + ) + { + using task_type = runnable_task_type; + typename task_type::function_type const ptr = task_type::apply; + typename task_type::destroy_type const dtor = task_type::destroy; - if ( 0 == queue ) { - Kokkos::abort("Kokkos spawn requires scheduler or non-null Future"); - } + return _spawn_impl( + _get_task_ptr(std::move(arg_policy).predecessor()), + arg_policy.priority(), + ptr, dtor, + std::forward(arg_functor) + ); + } - if ( arg_policy.m_dependence.m_task != 0 && - arg_policy.m_dependence.m_task->m_queue != queue ) { - Kokkos::abort("Kokkos spawn given incompatible scheduler and Future"); - } - - //---------------------------------------- - // Give single-thread back-ends an opportunity to clear - // queue of ready tasks before allocating a new task - - queue->iff_single_thread_recursive_execute(); - - //---------------------------------------- - - future_type f ; - - // Allocate task from memory pool - - const size_t alloc_size = - queue->template spawn_allocation_size< FunctorType >(); - - f.m_task = - reinterpret_cast< task_type * >(queue->allocate(alloc_size) ); - - if ( f.m_task ) { - - // Placement new construction - // Reference count starts at two: - // +1 for the matching decrement when task is complete - // +1 for the future - new ( f.m_task ) task_type( std::move(arg_functor) ); - - f.m_task->m_apply = arg_function ; - f.m_task->m_queue = queue ; - f.m_task->m_next = arg_policy.m_dependence.m_task ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_task_type = arg_policy.m_task_type ; - f.m_task->m_priority = arg_policy.m_priority ; - - Kokkos::memory_fence(); - - // The dependence (if any) is processed immediately - // within the schedule function, as such the dependence's - // reference count does not need to be incremented for - // the assignment. - - queue->schedule_runnable( f.m_task ); - // This task may be updated or executed at any moment, - // even during the call to 'schedule'. - } - - return f ; - } - - template< typename FunctorType , typename A1 , typename A2 > + template KOKKOS_FUNCTION static void - respawn( FunctorType * arg_self - , Future const & arg_dependence - , TaskPriority const & arg_priority - ) - { - // Precondition: task is in Executing state + respawn( + FunctorType* arg_self, + BasicFuture const & arg_dependence, + TaskPriority const & arg_priority + ) { + // Precondition: task is in Executing state - using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using value_type = typename FunctorType::value_type ; + using task_type = Impl::Task; - task_type * const task = static_cast< task_type * >( arg_self ); + task_type * const task = static_cast< task_type * >( arg_self ); - task->m_priority = static_cast(arg_priority); + task->m_priority = static_cast(arg_priority); - task->add_dependence( arg_dependence.m_task ); + task->add_dependence( arg_dependence.m_task ); - // Postcondition: task is in Executing-Respawn state - } + // Postcondition: task is in Executing-Respawn state + } template< typename FunctorType > KOKKOS_FUNCTION static void - respawn( FunctorType * arg_self - , TaskScheduler const & - , TaskPriority const & arg_priority - ) - { - // Precondition: task is in Executing state + respawn( + FunctorType* arg_self, + BasicTaskScheduler const &, + TaskPriority const & arg_priority + ) + { + // Precondition: task is in Executing state - using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using value_type = typename FunctorType::value_type; + using task_type = Impl::Task; - task_type * const task = static_cast< task_type * >( arg_self ); + task_type * const task = static_cast< task_type * >( arg_self ); - task->m_priority = static_cast(arg_priority); + task->m_priority = static_cast(arg_priority); - task->add_dependence( (task_base*) 0 ); + task->add_dependence( (task_base*) 0 ); - // Postcondition: task is in Executing-Respawn state - } + // Postcondition: task is in Executing-Respawn state + } //---------------------------------------- /**\brief Return a future that is complete * when all input futures are complete. */ - template< typename A1 , typename A2 > - KOKKOS_FUNCTION static - Future< execution_space > - when_all( Future< A1 , A2 > const arg[] , int narg ) - { - using future_type = Future< execution_space > ; + template + KOKKOS_FUNCTION + BasicFuture< void, scheduler_type > + when_all(BasicFuture const arg[], int narg) + { - future_type f ; + future_type f ; - if ( narg ) { + if ( narg ) { - queue_type * queue = 0 ; + queue_type* q = m_queue; - for ( int i = 0 ; i < narg ; ++i ) { - task_base * const t = arg[i].m_task ; - if ( 0 != t ) { - // Increment reference count to track subsequent assignment. - Kokkos::atomic_increment( &(t->m_ref_count) ); - if ( queue == 0 ) { - queue = static_cast< queue_type * >( t->m_queue ); - } - else if ( queue != static_cast< queue_type * >( t->m_queue ) ) { - Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); - } - } - } + //BasicTaskScheduler const* scheduler_ptr = nullptr; - if ( queue != 0 ) { - - size_t const alloc_size = queue->when_all_allocation_size( narg ); - - f.m_task = - reinterpret_cast< task_base * >( queue->allocate( alloc_size ) ); - - if ( f.m_task ) { - - // Reference count starts at two: - // +1 to match decrement when task completes - // +1 for the future - - new( f.m_task ) task_base(); - - f.m_task->m_queue = queue ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_dep_count = narg ; - f.m_task->m_task_type = task_base::Aggregate ; - - // Assign dependences, reference counts were already incremented - - task_base * volatile * const dep = - f.m_task->aggregate_dependences(); - - for ( int i = 0 ; i < narg ; ++i ) { dep[i] = arg[i].m_task ; } - - Kokkos::memory_fence(); - - queue->schedule_aggregate( f.m_task ); - // this when_all may be processed at any moment + for ( int i = 0 ; i < narg ; ++i ) { + task_base * const t = arg[i].m_task ; + if ( nullptr != t ) { + // Increment reference count to track subsequent assignment. + Kokkos::atomic_increment( &(t->m_ref_count) ); + if(q != static_cast< queue_type const* >(t->m_queue)) { + Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); } } } - return f ; + if ( q != 0 ) { // this should probably handle the queue == 0 case, but this is deprecated code anyway + + size_t const alloc_size = q->when_all_allocation_size( narg ); + + f.m_task = + reinterpret_cast< task_base * >( q->allocate( alloc_size ) ); + //f.m_scheduler = *scheduler_ptr; + + if ( f.m_task ) { + + // Reference count starts at two: + // +1 to match decrement when task completes + // +1 for the future + + new( f.m_task ) task_base(); + + f.m_task->m_queue = q; + f.m_task->m_ref_count = 2 ; + f.m_task->m_alloc_size = static_cast(alloc_size); + f.m_task->m_dep_count = narg ; + f.m_task->m_task_type = task_base::Aggregate ; + + // Assign dependences, reference counts were already incremented + + task_base * volatile * const dep = + f.m_task->aggregate_dependences(); + + for ( int i = 0 ; i < narg ; ++i ) { dep[i] = arg[i].m_task ; } + + Kokkos::memory_fence(); + + q->schedule_aggregate( f.m_task ); + // this when_all may be processed at any moment + } + } } + return f ; + } + template < class F > KOKKOS_FUNCTION - Future< execution_space > + BasicFuture< void, scheduler_type > when_all( int narg , F const func ) { using input_type = decltype( func(0) ); - using future_type = Future< execution_space > ; static_assert( is_future< input_type >::value , "Functor must return a Kokkos::Future" ); - future_type f ; + future_type f ; if ( 0 == narg ) return f ; @@ -711,12 +484,16 @@ public: // +1 for the future new( f.m_task ) task_base(); + //f.m_scheduler = *this; - f.m_task->m_queue = m_queue ; - f.m_task->m_ref_count = 2 ; - f.m_task->m_alloc_size = alloc_size ; - f.m_task->m_dep_count = narg ; - f.m_task->m_task_type = task_base::Aggregate ; + //f.m_task->m_scheduler = &f.m_scheduler; + f.m_task->m_queue = m_queue; + f.m_task->m_ref_count = 2 ; + f.m_task->m_alloc_size = static_cast(alloc_size); + f.m_task->m_dep_count = narg ; + f.m_task->m_task_type = task_base::Aggregate ; + //f.m_task->m_apply = nullptr; + //f.m_task->m_destroy = nullptr; // Assign dependences, reference counts were already incremented @@ -727,9 +504,10 @@ public: const input_type arg_f = func(i); if ( 0 != arg_f.m_task ) { - if ( m_queue != static_cast< queue_type * >( arg_f.m_task->m_queue ) ) { - Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); - } + // Not scheduled, so task scheduler is not yet set + //if ( m_queue != static_cast< BasicTaskScheduler const * >( arg_f.m_task->m_scheduler )->m_queue ) { + // Kokkos::abort("Kokkos when_all Futures must be in the same scheduler" ); + //} // Increment reference count to track subsequent assignment. Kokkos::atomic_increment( &(arg_f.m_task->m_ref_count) ); dep[i] = arg_f.m_task ; @@ -764,9 +542,9 @@ public: //---------------------------------------- - template< typename S > + template friend - void Kokkos::wait( Kokkos::TaskScheduler< S > const & ); + void wait(Kokkos::BasicTaskScheduler const&); }; @@ -780,84 +558,122 @@ namespace Kokkos { //---------------------------------------------------------------------------- // Construct a TaskTeam execution policy -template< typename T > -Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - > +template +Impl::TaskPolicyWithPredecessor< + Impl::TaskType::TaskTeam, + Kokkos::BasicFuture +> KOKKOS_INLINE_FUNCTION -TaskTeam( T const & arg - , TaskPriority const & arg_priority = TaskPriority::Regular - ) +TaskTeam( + Kokkos::BasicFuture arg_future, + TaskPriority arg_priority = TaskPriority::Regular +) { - static_assert( Kokkos::is_future::value || - Kokkos::is_scheduler::value - , "Kokkos TaskTeam argument must be Future or TaskScheduler" ); - - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - >( arg , arg_priority ); + return { std::move(arg_future), arg_priority }; } -template< typename E , typename F > -Kokkos::Impl:: - TaskPolicyData< Kokkos::Impl::TaskBase::TaskTeam , F > +template +Impl::TaskPolicyWithScheduler< + Impl::TaskType::TaskTeam, Scheduler +> KOKKOS_INLINE_FUNCTION -TaskTeam( TaskScheduler const & arg_scheduler - , F const & arg_future - , typename std::enable_if< Kokkos::is_future::value , - TaskPriority >::type const & arg_priority = TaskPriority::Regular - ) +TaskTeam( + Scheduler arg_scheduler, + typename std::enable_if< + Kokkos::is_scheduler::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) { - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskTeam , F > - ( arg_scheduler , arg_future , arg_priority ); + return { std::move(arg_scheduler), arg_priority }; +} + +template< + class Scheduler, + class PredecessorFuture +> +Impl::TaskPolicyWithScheduler< + Kokkos::Impl::TaskType::TaskTeam, + Scheduler, + PredecessorFuture +> +KOKKOS_INLINE_FUNCTION +TaskTeam( + Scheduler arg_scheduler, + PredecessorFuture arg_future, + typename std::enable_if< + Kokkos::is_scheduler::value + && Kokkos::is_future::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) +{ + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + return { std::move(arg_scheduler), std::move(arg_future), arg_priority }; } // Construct a TaskSingle execution policy -template< typename T > -Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - > +template +Impl::TaskPolicyWithPredecessor< + Impl::TaskType::TaskSingle, + Kokkos::BasicFuture +> KOKKOS_INLINE_FUNCTION -TaskSingle( T const & arg - , TaskPriority const & arg_priority = TaskPriority::Regular - ) +TaskSingle( + Kokkos::BasicFuture arg_future, + TaskPriority arg_priority = TaskPriority::Regular +) { - static_assert( Kokkos::is_future::value || - Kokkos::is_scheduler::value - , "Kokkos TaskSingle argument must be Future or TaskScheduler" ); - - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle - , typename std::conditional< Kokkos::is_future< T >::value , T , - typename Kokkos::Future< typename T::execution_space > >::type - >( arg , arg_priority ); + return { std::move(arg_future), arg_priority }; } -template< typename E , typename F > -Kokkos::Impl:: - TaskPolicyData< Kokkos::Impl::TaskBase::TaskSingle , F > +template +Impl::TaskPolicyWithScheduler< + Impl::TaskType::TaskSingle, Scheduler +> KOKKOS_INLINE_FUNCTION -TaskSingle( TaskScheduler const & arg_scheduler - , F const & arg_future - , typename std::enable_if< Kokkos::is_future::value , - TaskPriority >::type const & arg_priority = TaskPriority::Regular - ) +TaskSingle( + Scheduler arg_scheduler, + typename std::enable_if< + Kokkos::is_scheduler::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) { - return - Kokkos::Impl::TaskPolicyData - < Kokkos::Impl::TaskBase::TaskSingle , F > - ( arg_scheduler , arg_future , arg_priority ); + return { std::move(arg_scheduler), arg_priority }; +} + +template< + class Scheduler, + class PredecessorFuture +> +Impl::TaskPolicyWithScheduler< + Kokkos::Impl::TaskType::TaskSingle, + Scheduler, + PredecessorFuture +> +KOKKOS_INLINE_FUNCTION +TaskSingle( + Scheduler arg_scheduler, + PredecessorFuture arg_future, + typename std::enable_if< + Kokkos::is_scheduler::value + && Kokkos::is_future::value, + TaskPriority + >::type arg_priority = TaskPriority::Regular +) +{ + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + return { std::move(arg_scheduler), std::move(arg_future), arg_priority }; } //---------------------------------------------------------------------------- @@ -868,34 +684,31 @@ TaskSingle( TaskScheduler const & arg_scheduler * 2) With scheduler or dependence * 3) High, Normal, or Low priority */ -template< int TaskEnum - , typename DepFutureType - , typename FunctorType > -Future< typename FunctorType::value_type - , typename DepFutureType::execution_space > -host_spawn( Impl::TaskPolicyData const & arg_policy - , FunctorType && arg_functor - ) -{ - using exec_space = typename DepFutureType::execution_space ; - using scheduler = TaskScheduler< exec_space > ; +template +typename Scheduler::template future_type_for_functor::type> +host_spawn( + Impl::TaskPolicyWithScheduler arg_policy, + FunctorType&& arg_functor +) { + using scheduler_type = Scheduler; + using task_type = + typename scheduler_type::template runnable_task_type; - typedef Impl::TaskBase< exec_space - , typename FunctorType::value_type - , FunctorType - > task_type ; - - static_assert( TaskEnum == task_type::TaskTeam || - TaskEnum == task_type::TaskSingle - , "Kokkos host_spawn requires TaskTeam or TaskSingle" ); + static_assert( + TaskEnum == Impl::TaskType::TaskTeam || TaskEnum == Impl::TaskType::TaskSingle, + "Kokkos host_spawn requires TaskTeam or TaskSingle" + ); // May be spawning a Cuda task, must use the specialization // to query on-device function pointer. - typename task_type::function_type const ptr = - Kokkos::Impl::TaskQueueSpecialization< exec_space >:: - template get_function_pointer< task_type >(); + typename task_type::function_type ptr; + typename task_type::destroy_type dtor; + Kokkos::Impl::TaskQueueSpecialization< scheduler_type >:: + template get_function_pointer< task_type >(ptr, dtor); - return scheduler::spawn( arg_policy , ptr , std::move(arg_functor) ); + return scheduler_type::spawn( + std::move(arg_policy), ptr, dtor, std::forward(arg_functor) + ); } /**\brief A task spawns a task with options @@ -904,39 +717,38 @@ host_spawn( Impl::TaskPolicyData const & arg_policy * 2) With scheduler or dependence * 3) High, Normal, or Low priority */ -template< int TaskEnum - , typename DepFutureType - , typename FunctorType > -Future< typename FunctorType::value_type - , typename DepFutureType::execution_space > +template +typename Scheduler::template future_type_for_functor::type> KOKKOS_INLINE_FUNCTION -task_spawn( Impl::TaskPolicyData const & arg_policy - , FunctorType && arg_functor - ) +task_spawn( + Impl::TaskPolicyWithScheduler arg_policy, + FunctorType&& arg_functor +) { - using exec_space = typename DepFutureType::execution_space ; - using scheduler = TaskScheduler< exec_space > ; + using scheduler_type = Scheduler; - typedef Impl::TaskBase< exec_space - , typename FunctorType::value_type - , FunctorType - > task_type ; + using task_type = + typename scheduler_type::template runnable_task_type; -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) && \ - defined( KOKKOS_ENABLE_CUDA ) + #if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) && \ + defined( KOKKOS_ENABLE_CUDA ) - static_assert( ! std::is_same< Kokkos::Cuda , exec_space >::value - , "Error calling Kokkos::task_spawn for Cuda space within Host code" ); + static_assert( ! std::is_same< Kokkos::Cuda , typename Scheduler::execution_space >::value + , "Error calling Kokkos::task_spawn for Cuda space within Host code" ); -#endif + #endif - static_assert( TaskEnum == task_type::TaskTeam || - TaskEnum == task_type::TaskSingle - , "Kokkos host_spawn requires TaskTeam or TaskSingle" ); + static_assert( + TaskEnum == Impl::TaskType::TaskTeam || TaskEnum == Impl::TaskType::TaskSingle, + "Kokkos task_spawn requires TaskTeam or TaskSingle" + ); typename task_type::function_type const ptr = task_type::apply ; + typename task_type::destroy_type const dtor = task_type::destroy ; - return scheduler::spawn( arg_policy , ptr , std::move(arg_functor) ); + return scheduler_type::spawn(std::move(arg_policy), ptr, dtor, + std::forward(arg_functor) + ); } /**\brief A task respawns itself with options @@ -956,36 +768,42 @@ respawn( FunctorType * arg_self Kokkos::is_scheduler::value , "Kokkos respawn argument must be Future or TaskScheduler" ); - TaskScheduler< typename T::execution_space >:: - respawn( arg_self , arg , arg_priority ); + T::scheduler_type::respawn( + arg_self , arg , arg_priority + ); } //---------------------------------------------------------------------------- -template< typename A1 , typename A2 > -KOKKOS_INLINE_FUNCTION -Future< typename Future< A1 , A2 >::execution_space > -when_all( Future< A1 , A2 > const arg[] - , int narg - ) -{ - return TaskScheduler< typename Future::execution_space >:: - when_all( arg , narg ); -} +//template +//KOKKOS_INLINE_FUNCTION +//BasicFuture +//when_all(BasicFuture const arg[], int narg) +//{ +// return BasicFuture::scheduler_type::when_all(arg, narg); +//} //---------------------------------------------------------------------------- // Wait for all runnable tasks to complete -template< typename ExecSpace > +template inline -void wait( TaskScheduler< ExecSpace > const & scheduler ) -{ scheduler.m_queue->execute(); } +void wait(BasicTaskScheduler const& scheduler) +{ + using scheduler_type = BasicTaskScheduler; + scheduler_type::specialization::execute(scheduler); + //scheduler.m_queue->execute(); +} } // namespace Kokkos //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ #endif /* #ifndef KOKKOS_TASKSCHEDULER_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp new file mode 100644 index 0000000000..79d502c729 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler_fwd.hpp @@ -0,0 +1,249 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TASKSCHEDULER_FWD_HPP +#define KOKKOS_TASKSCHEDULER_FWD_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// Forward declarations used in Impl::TaskQueue + +template +class BasicFuture; + +template +class SimpleTaskScheduler; + +template +class BasicTaskScheduler; + +template< typename Space > +struct is_scheduler : public std::false_type {}; + +template +struct is_scheduler> : public std::true_type {}; + +template +struct is_scheduler> : public std::true_type {}; + +enum class TaskPriority : int { + High = 0, + Regular = 1, + Low = 2 +}; + +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { + +template +class MemoryPool; + +namespace Impl { + +template +class TaskNode; + +class TaskBase; + +/*\brief Implementation data for task data management, access, and execution. + * (Deprecated) + * CRTP Inheritance structure to allow static_cast from the + * task root type and a task's FunctorType. + * + * TaskBase< Space , ResultType , FunctorType > + * : TaskBase< Space , ResultType , void > + * , FunctorType + * { ... }; + * + * TaskBase< Space , ResultType , void > + * : TaskBase< Space , void , void > + * { ... }; + */ +template< typename Space , typename ResultType , typename FunctorType > +class Task; + +class TaskQueueBase; + +template< typename Space, typename MemorySpace> +class TaskQueue; + +template< typename ExecSpace, typename MemorySpace> +class TaskQueueMultiple; + +template< + typename ExecSpace, typename MemSpace, typename TaskQueueTraits, + class MemoryPool = Kokkos::MemoryPool> +> +class SingleTaskQueue; + +template< typename ExecSpace, typename MemSpace, typename TaskQueueTraits, class MemoryPool> +class MultipleTaskQueue; + +struct TaskQueueTraitsLockBased; + +template +struct TaskQueueTraitsChaseLev; + +template< typename ResultType > +struct TaskResult; + +struct TaskSchedulerBase; + +template +struct default_tasking_memory_space_for_execution_space +{ + using type = typename ExecSpace::memory_space; +}; + +#if defined( KOKKOS_ENABLE_CUDA ) +template <> +struct default_tasking_memory_space_for_execution_space +{ + using type = Kokkos::CudaUVMSpace; +}; +#endif + +template +using default_tasking_memory_space_for_execution_space_t = + typename default_tasking_memory_space_for_execution_space::type; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { + +template< typename Space > +using DeprecatedTaskScheduler = BasicTaskScheduler< + Space, + Impl::TaskQueue> +>; + +template< typename Space > +using DeprecatedTaskSchedulerMultiple = BasicTaskScheduler< + Space, + Impl::TaskQueueMultiple> +>; + +template< typename Space > +using TaskScheduler = SimpleTaskScheduler< + Space, + Impl::SingleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsLockBased + > +>; + +template< typename Space > +using TaskSchedulerMultiple = SimpleTaskScheduler< + Space, + Impl::MultipleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsLockBased, + Kokkos::MemoryPool< + Kokkos::Device< + Space, + Impl::default_tasking_memory_space_for_execution_space_t + > + > + > +>; + +template< typename Space > +using ChaseLevTaskScheduler = SimpleTaskScheduler< + Space, + Impl::MultipleTaskQueue< + Space, + Impl::default_tasking_memory_space_for_execution_space_t, + Impl::TaskQueueTraitsChaseLev<>, + Kokkos::MemoryPool< + Kokkos::Device< + Space, + Impl::default_tasking_memory_space_for_execution_space_t + > + > + > +>; + +template +void wait(BasicTaskScheduler const&); + +namespace Impl { + +struct TaskSchedulerBase { }; + +class TaskQueueBase { }; + +template +class TaskQueueSpecializationConstrained { }; + +template +struct TaskQueueSpecialization : TaskQueueSpecializationConstrained { }; + +template +struct TaskPolicyData; + + +} // end namespace Impl + +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_TASKSCHEDULER_FWD_HPP */ + diff --git a/lib/kokkos/core/src/Kokkos_Threads.hpp b/lib/kokkos/core/src/Kokkos_Threads.hpp index d5e684e4ea..03dab1acaf 100644 --- a/lib/kokkos/core/src/Kokkos_Threads.hpp +++ b/lib/kokkos/core/src/Kokkos_Threads.hpp @@ -105,7 +105,13 @@ public: /// return asynchronously, before the functor completes. This /// method does not return until all dispatched functors on this /// device have completed. + static void impl_static_fence(); + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE static void fence(); + #else + void fence() const; + #endif /** \brief Return the maximum amount of concurrency. */ static int concurrency(); diff --git a/lib/kokkos/core/src/Kokkos_View.hpp b/lib/kokkos/core/src/Kokkos_View.hpp index 754a0ab8c0..3fe8e6f067 100644 --- a/lib/kokkos/core/src/Kokkos_View.hpp +++ b/lib/kokkos/core/src/Kokkos_View.hpp @@ -74,7 +74,11 @@ template< class DataType , class ArrayLayout struct ViewDataAnalysis ; template< class , class ... > -class ViewMapping { public: enum { is_assignable = false }; }; +class ViewMapping { + public: + enum { is_assignable_data_type = false }; + enum { is_assignable = false }; +}; @@ -97,6 +101,7 @@ std::size_t count_valid_integers(const IntType i0, } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION void runtime_check_rank_device(const size_t dyn_rank, const bool is_void_spec, @@ -109,8 +114,6 @@ void runtime_check_rank_device(const size_t dyn_rank, const size_t i6, const size_t i7 ){ -#ifndef KOKKOS_ENABLE_DEPRECATED_CODE - if ( is_void_spec ) { const size_t num_passed_args = count_valid_integers(i0, i1, i2, i3, i4, i5, i6, i7); @@ -121,10 +124,25 @@ void runtime_check_rank_device(const size_t dyn_rank, } } -#endif } +#else +KOKKOS_INLINE_FUNCTION +void runtime_check_rank_device(const size_t , + const bool , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t ){ + +} +#endif #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE KOKKOS_INLINE_FUNCTION void runtime_check_rank_host(const size_t dyn_rank, const bool is_void_spec, @@ -137,7 +155,6 @@ void runtime_check_rank_host(const size_t dyn_rank, const size_t i6, const size_t i7, const std::string & label ){ -#ifndef KOKKOS_ENABLE_DEPRECATED_CODE if ( is_void_spec ) { const size_t num_passed_args = count_valid_integers(i0, i1, i2, i3, @@ -150,8 +167,20 @@ void runtime_check_rank_host(const size_t dyn_rank, Kokkos::abort(message.c_str()) ; } } -#endif } +#else +KOKKOS_INLINE_FUNCTION +void runtime_check_rank_host(const size_t , + const bool , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , + const size_t , const std::string &){} +#endif #endif } /* namespace Impl */ @@ -362,8 +391,8 @@ public: typedef typename MemorySpace::size_type size_type ; enum { is_hostspace = std::is_same< MemorySpace , HostSpace >::value }; - enum { is_managed = MemoryTraits::Unmanaged == 0 }; - enum { is_random_access = MemoryTraits::RandomAccess == 1 }; + enum { is_managed = MemoryTraits::is_unmanaged == 0 }; + enum { is_random_access = MemoryTraits::is_random_access == 1 }; //------------------------------------ }; @@ -1965,7 +1994,10 @@ public: template< class RT , class ... RP > KOKKOS_INLINE_FUNCTION - View( const View & rhs ) + View( const View & rhs, + typename std::enable_if::traits , typename traits::specialize >::is_assignable_data_type>::type* = 0 + ) : m_track( rhs.m_track , traits::is_managed ) , m_map() { @@ -1977,7 +2009,9 @@ public: template< class RT , class ... RP > KOKKOS_INLINE_FUNCTION - View & operator = ( const View & rhs ) + typename std::enable_if::traits , typename traits::specialize >::is_assignable_data_type, + View>::type & operator = ( const View & rhs ) { typedef typename View::traits SrcTraits ; typedef Kokkos::Impl::ViewMapping< traits , SrcTraits , typename traits::specialize > Mapping ; @@ -1994,7 +2028,7 @@ public: template< class RT , class ... RP , class Arg0 , class ... Args > KOKKOS_INLINE_FUNCTION View( const View< RT , RP... > & src_view - , const Arg0 & arg0 , Args ... args ) + , const Arg0 arg0 , Args ... args ) : m_track( src_view.m_track , traits::is_managed ) , m_map() { @@ -2077,7 +2111,7 @@ public: } // Copy the input allocation properties with possibly defaulted properties - alloc_prop prop( arg_prop ); + alloc_prop prop_copy( arg_prop ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) @@ -2087,18 +2121,18 @@ public: // Fence using the trait's executon space (which will be Kokkos::Cuda) // to avoid incomplete type errors from usng Kokkos::Cuda directly. if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ Kokkos::Impl::SharedAllocationRecord<> * - record = m_map.allocate_shared( prop , arg_layout ); + record = m_map.allocate_shared( prop_copy , arg_layout ); //------------------------------------------------------------ #if defined( KOKKOS_ENABLE_CUDA ) if ( std::is_same< Kokkos::CudaUVMSpace , typename traits::device_type::memory_space >::value ) { - traits::device_type::memory_space::execution_space::fence(); + typename traits::device_type::memory_space::execution_space().fence(); } #endif //------------------------------------------------------------ diff --git a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp index 33a0579df5..dd5e29a400 100644 --- a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp @@ -55,7 +55,7 @@ class WorkGraphExec; namespace Kokkos { template< class ... Properties > -class WorkGraphPolicy +class WorkGraphPolicy: public Kokkos::Impl::PolicyTraits { public: @@ -64,7 +64,6 @@ public: using traits = Kokkos::Impl::PolicyTraits; using index_type = typename traits::index_type; using member_type = index_type; - using work_tag = typename traits::work_tag; using execution_space = typename traits::execution_space; using memory_space = typename execution_space::memory_space; using graph_type = Kokkos::Crs; @@ -217,7 +216,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this, policy_type(0, m_queue.size())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } { // execute-after counts @@ -225,7 +224,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this,policy_type(0,m_graph.entries.size())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } { // Scheduling ready tasks @@ -233,7 +232,7 @@ public: using closure_type = Kokkos::Impl::ParallelFor; const closure_type closure(*this,policy_type(0,m_graph.numRows())); closure.execute(); - execution_space::fence(); + execution_space().fence(); } } }; @@ -256,4 +255,8 @@ public: #include "Threads/Kokkos_Threads_WorkGraphPolicy.hpp" #endif +#ifdef KOKKOS_ENABLE_HPX +#include "HPX/Kokkos_HPX_WorkGraphPolicy.hpp" +#endif + #endif /* #define KOKKOS_WORKGRAPHPOLICY_HPP */ diff --git a/lib/kokkos/core/src/Makefile b/lib/kokkos/core/src/Makefile index c2dbddf45e..ae8dc17510 100644 --- a/lib/kokkos/core/src/Makefile +++ b/lib/kokkos/core/src/Makefile @@ -40,6 +40,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) CONDITIONAL_COPIES += copy-openmp endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + CONDITIONAL_COPIES += copy-hpx +endif + ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) CONDITIONAL_COPIES += copy-rocm endif @@ -91,6 +95,10 @@ copy-openmp: mkdir mkdir -p $(PREFIX)/include/OpenMP $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_OPENMP) $(PREFIX)/include/OpenMP +copy-hpx: mkdir + mkdir -p $(PREFIX)/include/HPX + $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_HPX) $(PREFIX)/include/HPX + copy-rocm: mkdir mkdir -p $(PREFIX)/include/ROCm $(CP) $(COPY_FLAG) $(KOKKOS_HEADERS_ROCM) $(PREFIX)/include/ROCm diff --git a/lib/kokkos/core/src/Makefile.generate_build_files b/lib/kokkos/core/src/Makefile.generate_build_files index cc856ee9a3..651b9d5fe9 100644 --- a/lib/kokkos/core/src/Makefile.generate_build_files +++ b/lib/kokkos/core/src/Makefile.generate_build_files @@ -84,6 +84,7 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) $(KOKKOS_PKGCONFIG) @$(call kokkos_append_var,KOKKOS_HEADERS_IMPL,'STRING "Kokkos headers impl list"') @$(call kokkos_append_var,KOKKOS_HEADERS_CUDA,'STRING "Kokkos headers Cuda list"') @$(call kokkos_append_var,KOKKOS_HEADERS_OPENMP,'STRING "Kokkos headers OpenMP list"') + @$(call kokkos_append_var,KOKKOS_HEADERS_HPX,'STRING "Kokkos headers HPX list"') @$(call kokkos_append_var,KOKKOS_HEADERS_ROCM,'STRING "Kokkos headers ROCm list"') @$(call kokkos_append_var,KOKKOS_HEADERS_THREADS,'STRING "Kokkos headers Threads list"') @$(call kokkos_append_var,KOKKOS_HEADERS_QTHREADS,'STRING "Kokkos headers QThreads list"') @@ -103,11 +104,13 @@ generate_build_settings: $(KOKKOS_CONFIG_HEADER) $(KOKKOS_PKGCONFIG) @$(call kokkos_append_string,"#Internal settings which need to propagated for Kokkos examples") @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_CUDA,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_OPENMP,'STRING ""') + @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_HPX,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_PTHREADS,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_SERIAL,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_ROCM,'STRING ""') + @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_HPX,'STRING ""') @$(call kokkos_append_var,KOKKOS_INTERNAL_USE_QTHREADS,'STRING ""') # Not in original cmake gen - @$(call kokkos_append_cmakefile "mark_as_advanced(KOKKOS_HEADERS KOKKOS_SRC KOKKOS_INTERNAL_USE_CUDA KOKKOS_INTERNAL_USE_OPENMP KOKKOS_INTERNAL_USE_PTHREADS KOKKOS_INTERNAL_USE_SERIAL)") + @$(call kokkos_append_cmakefile "mark_as_advanced(KOKKOS_HEADERS KOKKOS_SRC KOKKOS_INTERNAL_USE_CUDA KOKKOS_INTERNAL_USE_OPENMP KOKKOS_INTERNAL_USE_HPX KOKKOS_INTERNAL_USE_PTHREADS KOKKOS_INTERNAL_USE_SERIAL)") @$(call kokkos_append_makefile,"") @$(call kokkos_append_makefile,"#Fake kokkos-clean target") @$(call kokkos_append_makefile,"kokkos-clean:") diff --git a/lib/kokkos/core/src/Makefile.generate_header_lists b/lib/kokkos/core/src/Makefile.generate_header_lists index cd308bf8f4..afbefb3806 100644 --- a/lib/kokkos/core/src/Makefile.generate_header_lists +++ b/lib/kokkos/core/src/Makefile.generate_header_lists @@ -22,6 +22,10 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) KOKKOS_HEADERS_OPENMP += $(wildcard $(KOKKOS_PATH)/core/src/OpenMP/*.hpp) endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + KOKKOS_HEADERS_HPX += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.hpp) +endif + ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) KOKKOS_HEADERS_ROCM += $(wildcard $(KOKKOS_PATH)/core/src/ROCm/*.hpp) endif diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp index e57b61d7cb..1946c10741 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp @@ -472,6 +472,10 @@ int OpenMP::concurrency() { return Impl::g_openmp_hardware_max_threads; } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +void OpenMP::fence() const {} +#endif + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE void OpenMP::initialize( int thread_count , int, int ) diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp index 43fa7888cf..5178199ac2 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp @@ -184,8 +184,13 @@ int OpenMP::impl_thread_pool_rank() noexcept #endif } +inline +void OpenMP::impl_static_fence( OpenMP const& instance ) noexcept {} + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE inline void OpenMP::fence( OpenMP const& instance ) noexcept {} +#endif inline bool OpenMP::is_asynchronous( OpenMP const& instance ) noexcept diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp index e0bb572a3b..ae6b49f650 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp @@ -128,11 +128,10 @@ public: OpenMPExec::verify_is_master("Kokkos::OpenMP parallel_for"); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -228,11 +227,10 @@ public: OpenMPExec::verify_is_master("Kokkos::OpenMP parallel_for"); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -703,11 +701,10 @@ public: ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -840,11 +837,10 @@ public: ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); @@ -1005,11 +1001,10 @@ public: , thread_local_size ); #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { HostThreadTeamData & data = *(m_instance->get_thread_data()); diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp index 2f2c768460..3b1c187c6d 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.cpp @@ -48,6 +48,8 @@ #include #include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -55,200 +57,44 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::OpenMP > ; +template class TaskQueue< Kokkos::OpenMP, typename Kokkos::OpenMP::memory_space > ; -class HostThreadTeamDataSingleton : private HostThreadTeamData { -private: - - HostThreadTeamDataSingleton() : HostThreadTeamData() - { - Kokkos::OpenMP::memory_space space ; - const size_t num_pool_reduce_bytes = 32 ; - const size_t num_team_reduce_bytes = 32 ; - const size_t num_team_shared_bytes = 1024 ; - const size_t num_thread_local_bytes = 1024 ; - const size_t alloc_bytes = - HostThreadTeamData::scratch_size( num_pool_reduce_bytes - , num_team_reduce_bytes - , num_team_shared_bytes - , num_thread_local_bytes ); - - HostThreadTeamData::scratch_assign - ( space.allocate( alloc_bytes ) - , alloc_bytes - , num_pool_reduce_bytes - , num_team_reduce_bytes - , num_team_shared_bytes - , num_thread_local_bytes ); - } - - ~HostThreadTeamDataSingleton() - { - Kokkos::OpenMP::memory_space space ; - space.deallocate( HostThreadTeamData::scratch_buffer() - , HostThreadTeamData::scratch_bytes() ); - } - -public: - - static HostThreadTeamData & singleton() - { - static HostThreadTeamDataSingleton s ; - return s ; - } -}; - -//---------------------------------------------------------------------------- - -void TaskQueueSpecialization< Kokkos::OpenMP >::execute - ( TaskQueue< Kokkos::OpenMP > * const queue ) +HostThreadTeamData& HostThreadTeamDataSingleton::singleton() { - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; - - static task_root_type * const end = - (task_root_type *) task_root_type::EndTag ; - - - HostThreadTeamData & team_data_single = - HostThreadTeamDataSingleton::singleton(); - - Impl::OpenMPExec * instance = t_openmp_instance; -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); -#else - const int pool_size = OpenMP::impl_thread_pool_size(); -#endif - - const int team_size = 1; // Threads per core - instance->resize_thread_data( 0 /* global reduce buffer */ - , 512 * team_size /* team reduce buffer */ - , 0 /* team shared buffer */ - , 0 /* thread local buffer */ - ); - - #pragma omp parallel num_threads(pool_size) - { - Impl::HostThreadTeamData & self = *(instance->get_thread_data()); - - // Organizing threads into a team performs a barrier across the - // entire pool to insure proper initialization of the team - // rendezvous mechanism before a team rendezvous can be performed. - - if ( self.organize_team( team_size ) ) { - - Member single_exec( team_data_single ); - Member team_exec( self ); - - // Loop until all queues are empty and no tasks in flight - - task_root_type * task = 0 ; - - do { - // Each team lead attempts to acquire either a thread team task - // or a single thread task for the team. - - if ( 0 == team_exec.team_rank() ) { - - bool leader_loop = false ; - - do { - - if ( 0 != task && end != task ) { - // team member #0 completes the previously executed task, - // completion may delete the task - queue->complete( task ); - } - - // If 0 == m_ready_count then set task = 0 - - task = 0 < *((volatile int *) & queue->m_ready_count) ? end : 0 ; - - // Attempt to acquire a task - // Loop by priority and then type - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - // If still tasks are still executing - // and no task could be acquired - // then continue this leader loop - leader_loop = end == task ; - - if ( ( ! leader_loop ) && - ( 0 != task ) && - ( task_root_type::TaskSingle == task->m_task_type ) ) { - - // if a single thread task then execute now - - (*task->m_apply)( task , & single_exec ); - - leader_loop = true ; - } - } while ( leader_loop ); - } - - // Team lead either found 0 == m_ready_count or a team task - // Team lead broadcast acquired task: - - team_exec.team_broadcast( task , 0); - - if ( 0 != task ) { // Thread Team Task - - (*task->m_apply)( task , & team_exec ); - - // The m_apply function performs a barrier - } - } while( 0 != task ); - } - self.disband_team(); - } + static HostThreadTeamDataSingleton s; + return s; } -void TaskQueueSpecialization< Kokkos::OpenMP >:: - iff_single_thread_recursive_execute - ( TaskQueue< Kokkos::OpenMP > * const queue ) +HostThreadTeamDataSingleton::HostThreadTeamDataSingleton() + : HostThreadTeamData() { - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< execution_space > ; + Kokkos::OpenMP::memory_space space ; + const size_t num_pool_reduce_bytes = 32 ; + const size_t num_team_reduce_bytes = 32 ; + const size_t num_team_shared_bytes = 1024 ; + const size_t num_thread_local_bytes = 1024 ; + const size_t alloc_bytes = + HostThreadTeamData::scratch_size( num_pool_reduce_bytes + , num_team_reduce_bytes + , num_team_shared_bytes + , num_thread_local_bytes ); -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - if ( 1 == OpenMP::thread_pool_size() ) -#else - if ( 1 == OpenMP::impl_thread_pool_size() ) -#endif - { + HostThreadTeamData::scratch_assign + ( space.allocate( alloc_bytes ) + , alloc_bytes + , num_pool_reduce_bytes + , num_team_reduce_bytes + , num_team_shared_bytes + , num_thread_local_bytes ); +} - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - HostThreadTeamData & team_data_single = - HostThreadTeamDataSingleton::singleton(); - - Member single_exec( team_data_single ); - - task_root_type * task = end ; - - do { - - task = end ; - - // Loop by priority and then type - for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end == task ) break ; - - (*task->m_apply)( task , & single_exec ); - - queue->complete( task ); - - } while(1); - } +HostThreadTeamDataSingleton::~HostThreadTeamDataSingleton() +{ + Kokkos::OpenMP::memory_space space ; + space.deallocate( + HostThreadTeamData::scratch_buffer(), + static_cast(HostThreadTeamData::scratch_bytes()) + ); } }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp index b99c149b06..4029c015b3 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp @@ -47,38 +47,388 @@ #include #if defined( KOKKOS_ENABLE_OPENMP ) && defined( KOKKOS_ENABLE_TASKDAG ) +#include + +#include +#include + +#include +#include + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- namespace Kokkos { namespace Impl { -template<> -class TaskQueueSpecialization< Kokkos::OpenMP > +class HostThreadTeamDataSingleton : private HostThreadTeamData { +private: + + HostThreadTeamDataSingleton(); + ~HostThreadTeamDataSingleton(); + +public: + + static HostThreadTeamData & singleton(); + +}; + +// Hack this as a partial specialization for now +// TODO @tasking @cleanup DSH Make this the general class template and make the old code the partial specialization +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::OpenMP ; - using queue_type = Kokkos::Impl::TaskQueue< execution_space > ; - using task_base_type = Kokkos::Impl::TaskBase< void , void , void > ; - using member_type = Kokkos::Impl::HostThreadTeamMember< execution_space > ; + using execution_space = Kokkos::OpenMP; + using scheduler_type = SimpleTaskScheduler; + using member_type = TaskTeamMemberAdapter< + Kokkos::Impl::HostThreadTeamMember, + scheduler_type + >; + using memory_space = Kokkos::HostSpace; - // Must specify memory space - using memory_space = Kokkos::HostSpace ; - - static - void iff_single_thread_recursive_execute( queue_type * const ); + enum : int { max_league_size = HostThreadTeamData::max_pool_members }; // Must provide task queue execution function - static void execute( queue_type * const ); + static void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base_type; - template< typename TaskType > - static - typename TaskType::function_type - get_function_pointer() { return TaskType::apply ; } + // Unused; ChaseLev queue still needs worker ID even in single case (so we need to use + // the thread data from inside of the parallel region. Team size is fixed at 1 for now + // anyway + //HostThreadTeamData& team_data_single = HostThreadTeamDataSingleton::singleton(); + + // TODO @tasking @generalization DSH use scheduler.get_execution_space().impl() (or something like that) instead of the thread-local variable + Impl::OpenMPExec* instance = t_openmp_instance; + const int pool_size = get_max_team_count(scheduler.get_execution_space()); + + // TODO @tasking @new_feature DSH allow team sizes other than 1 + const int team_size = 1; // Threads per core + instance->resize_thread_data( + 0, /* global reduce buffer */ + 512 * team_size, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); + assert(pool_size % team_size == 0); + + auto& queue = scheduler.queue(); + + //queue.initialize_team_queues(pool_size / team_size); + + #pragma omp parallel num_threads(pool_size) + { + Impl::HostThreadTeamData & self = *(instance->get_thread_data()); + + // Organizing threads into a team performs a barrier across the + // entire pool to insure proper initialization of the team + // rendezvous mechanism before a team rendezvous can be performed. + + // organize_team() returns true if this is an active team member + if(self.organize_team(team_size)) { + + member_type single_exec(scheduler, self); + member_type team_exec(scheduler, self); + + auto& team_scheduler = team_exec.scheduler(); + + auto current_task = OptionalRef(nullptr); + + while(not queue.is_done()) { + + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + if(team_exec.team_rank() == 0) { + + // loop while both: + // - the queue is not done + // - the most recently popped task is a single task or empty + while(not queue.is_done()) { + + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + if(current_task) { + + if(current_task->is_team_runnable()) { + // break out of the team leader loop to run the team task + break; + } + else { + KOKKOS_ASSERT(current_task->is_single_runnable()); + current_task->as_runnable_task().run(single_exec); + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } // end if current_task is not null + + current_task = nullptr; + + } // end team leader loop + + } + + // Otherwise, make sure everyone in the team has the same task + team_exec.team_broadcast(current_task, 0); + + if(current_task) { + KOKKOS_ASSERT(current_task->is_team_runnable()); + current_task->as_runnable_task().run(team_exec); + + if(team_exec.team_rank() == 0) { + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + + } + } + self.disband_team(); + } // end pragma omp parallel + } + + static uint32_t + get_max_team_count(execution_space const& espace) { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + return static_cast(espace.thread_pool_size()); +#else + return static_cast(espace.impl_thread_pool_size()); +#endif + } + + // TODO @tasking @optimization DSH specialize this for trivially destructible types + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } }; -extern template class TaskQueue< Kokkos::OpenMP > ; + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + using execution_space = Kokkos::OpenMP; + using scheduler_type = Scheduler; + using member_type = TaskTeamMemberAdapter< + Kokkos::Impl::HostThreadTeamMember, + scheduler_type + >; + using memory_space = Kokkos::HostSpace ; + + enum : int { max_league_size = HostThreadTeamData::max_pool_members }; + + static + void iff_single_thread_recursive_execute( scheduler_type const& scheduler ) { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + if ( 1 == OpenMP::thread_pool_size() ) +#else + if ( 1 == OpenMP::impl_thread_pool_size() ) +#endif + { + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + HostThreadTeamData & team_data_single = + HostThreadTeamDataSingleton::singleton(); + + member_type single_exec( scheduler, team_data_single ); + + task_base_type * task = end ; + + do { + + task = end ; + + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & scheduler.m_queue->m_ready[i][j] ); + } + } + + if ( end == task ) break ; + + (*task->m_apply)( task , & single_exec ); + + scheduler.m_queue->complete( task ); + + } while(1); + } + + } + + // Must provide task queue execution function + static void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base; + using queue_type = typename scheduler_type::queue_type; + + static task_base_type * const end = + (task_base_type *) task_base_type::EndTag ; + + constexpr task_base_type* no_more_tasks_sentinel = nullptr; + + + HostThreadTeamData & team_data_single = + HostThreadTeamDataSingleton::singleton(); + + Impl::OpenMPExec * instance = t_openmp_instance; +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + const int pool_size = OpenMP::thread_pool_size(); +#else + const int pool_size = OpenMP::impl_thread_pool_size(); +#endif + + const int team_size = 1; // Threads per core + instance->resize_thread_data( 0 /* global reduce buffer */ + , 512 * team_size /* team reduce buffer */ + , 0 /* team shared buffer */ + , 0 /* thread local buffer */ + ); + assert(pool_size % team_size == 0); + auto& queue = scheduler.queue(); + queue.initialize_team_queues(pool_size / team_size); + +#pragma omp parallel num_threads(pool_size) + { + Impl::HostThreadTeamData & self = *(instance->get_thread_data()); + + // Organizing threads into a team performs a barrier across the + // entire pool to insure proper initialization of the team + // rendezvous mechanism before a team rendezvous can be performed. + + // organize_team() returns true if this is an active team member + if ( self.organize_team( team_size ) ) { + + member_type single_exec(scheduler, team_data_single); + member_type team_exec(scheduler, self); + + auto& team_queue = team_exec.scheduler().queue(); + + // Loop until all queues are empty and no tasks in flight + + task_base_type * task = no_more_tasks_sentinel; + + + do { + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + + if ( 0 == team_exec.team_rank() ) { + + bool leader_loop = false ; + + do { + + if ( task != no_more_tasks_sentinel && task != end ) { + // team member #0 completes the previously executed task, + // completion may delete the task + team_queue.complete( task ); + } + + // If 0 == m_ready_count then set task = 0 + + if( *((volatile int *) & team_queue.m_ready_count) > 0 ) { + task = end; + // Attempt to acquire a task + // Loop by priority and then type + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & team_queue.m_ready[i][j] ); + } + } + } + else { + // returns nullptr if and only if all other queues have a ready + // count of 0 also. Otherwise, returns a task from another queue + // or `end` if one couldn't be popped + task = team_queue.attempt_to_steal_task(); + #if 0 + if(task != no_more_tasks_sentinel && task != end) { + std::printf("task stolen on rank %d\n", team_exec.league_rank()); + } + #endif + } + + // If still tasks are still executing + // and no task could be acquired + // then continue this leader loop + if(task == end) { + // this means that the ready task count was not zero, but we + // couldn't pop a task (because, for instance, someone else + // got there before us + leader_loop = true; + } + else if ( ( task != no_more_tasks_sentinel ) && + ( task_base_type::TaskSingle == task->m_task_type ) ) { + + // if a single thread task then execute now + + (*task->m_apply)(task, &single_exec); + + leader_loop = true; + } + else { + leader_loop = false; + } + } while ( leader_loop ); + } + + // Team lead either found 0 == m_ready_count or a team task + // Team lead broadcast acquired task: + + team_exec.team_broadcast( task , 0); + + if ( task != no_more_tasks_sentinel ) { // Thread Team Task + + (*task->m_apply)( task , & team_exec ); + + // The m_apply function performs a barrier + } + } while( task != no_more_tasks_sentinel ); + } + self.disband_team(); + } // end pragma omp parallel + } + + template< typename TaskType > + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } +}; + +extern template class TaskQueue< Kokkos::OpenMP, typename Kokkos::OpenMP::memory_space > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp index e8fbc467e0..38b062bdc0 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp @@ -74,6 +74,21 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_alloc = p.m_team_alloc; + m_team_iter = p.m_team_iter; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE @@ -208,7 +223,7 @@ public: } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , int team_size_request , int /* vector_length_request */ = 1 ) @@ -217,14 +232,18 @@ public: , m_chunk_size(0) { init( league_size_request , team_size_request ); } - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1) : m_team_scratch_size { 0 , 0 } , m_thread_scratch_size { 0 , 0 } , m_chunk_size(0) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE { init( league_size_request , traits::execution_space::thread_pool_size(2) ); } +#else + { init( league_size_request , traits::execution_space::impl_thread_pool_size(2) ); } +#endif TeamPolicyInternal( int league_size_request , int team_size_request diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp index 879d5d2d24..0742575cb8 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_WorkGraphPolicy.hpp @@ -76,11 +76,10 @@ public: void execute() { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int pool_size = OpenMP::thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::thread_pool_size()) #else - const int pool_size = OpenMP::impl_thread_pool_size(); + #pragma omp parallel num_threads(OpenMP::impl_thread_pool_size()) #endif - #pragma omp parallel num_threads(pool_size) { // Spin until COMPLETED_TOKEN. // END_TOKEN indicates no work is currently available. diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp index fc31a91b22..c93a88606d 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp @@ -697,13 +697,13 @@ namespace Impl { const iType increment; inline - TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const iType& count): + TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, iType count): start( thread_.team_rank() ), end( count ), increment( thread_.team_size() ) {} inline - TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const iType& begin_, const iType& end_): + TeamThreadRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, iType begin_, iType end_): start( begin_+thread_.team_rank() ), end( end_ ), increment( thread_.team_size() ) @@ -718,13 +718,13 @@ namespace Impl { const index_type increment; inline - ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const index_type& count): + ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, index_type count): start( thread_.m_vector_lane ), end( count ), increment( thread_.m_vector_length ) {} inline - ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, const index_type& begin_, const index_type& end_): + ThreadVectorRangeBoundariesStruct (const OpenMPTargetExecTeamMember& thread_, index_type begin_, index_type end_): start( begin_+thread_.m_vector_lane ), end( end_ ), increment( thread_.m_vector_length ) @@ -734,28 +734,28 @@ namespace Impl { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& count) { + TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, iType count) { return Impl::TeamThreadRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& begin, const iType& end) { + TeamThreadRange(const Impl::OpenMPTargetExecTeamMember& thread, iType begin, iType end) { return Impl::TeamThreadRangeBoundariesStruct(thread,begin,end); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& count) { + ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, const iType& begin, const iType& end) { + ThreadVectorRange(const Impl::OpenMPTargetExecTeamMember& thread, iType begin, iType end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,begin,end); } diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp index 5ad90436af..7b1b63befe 100644 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp +++ b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp @@ -51,7 +51,6 @@ #include -#include #include #include diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp index 205e6a2955..3e81883278 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Exec.hpp @@ -227,7 +227,7 @@ struct ROCmParallelLaunch< DriverType //#if defined( KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK ) // ROCM_SAFE_CALL( rocmGetLastError() ); -// Kokkos::ROCm::fence(); +// Kokkos::ROCm().fence(); //#endif } } diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp index edd1c12e45..48654555b2 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp @@ -86,6 +86,21 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + TeamPolicyInternal() : m_league_size( 0 ) , m_team_size( 0 ) @@ -1099,7 +1114,7 @@ public: ROCmParallelLaunch< ParallelReduce, LaunchBounds >( *this, grid, block, shmem ); // copy to device and execute - ROCM::fence(); + ROCM().fence(); if ( m_result_ptr ) { const int size = ValueTraits::value_size( ReducerConditional::select(m_functor , m_reducer) ); @@ -1494,14 +1509,14 @@ namespace Kokkos { template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::ROCmTeamMember& thread, const iType& count) { + TeamThreadRange(const Impl::ROCmTeamMember& thread, iType count) { return Impl::TeamThreadRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct::type,Impl::ROCmTeamMember> - TeamThreadRange(const Impl::ROCmTeamMember& thread, const iType1& begin, const iType2& end) { + TeamThreadRange(const Impl::ROCmTeamMember& thread, iType1 begin, iType2 end) { typedef typename std::common_type< iType1, iType2 >::type iType; return Impl::TeamThreadRangeBoundariesStruct(thread,begin,end); } @@ -1509,14 +1524,14 @@ Impl::TeamThreadRangeBoundariesStruct KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::ROCmTeamMember& thread, const iType& count) { + ThreadVectorRange(const Impl::ROCmTeamMember& thread, iType count) { return Impl::ThreadVectorRangeBoundariesStruct(thread,count); } template KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct - ThreadVectorRange(const Impl::ROCmTeamMember& thread, const iType& arg_begin, const iType& arg_end) { + ThreadVectorRange(const Impl::ROCmTeamMember& thread, iType arg_begin, iType arg_end) { return Impl::ThreadVectorRangeBoundariesStruct(thread,arg_begin,arg_end); } diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp index 559d6f2fcb..347778f289 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp @@ -804,6 +804,10 @@ int Threads::concurrency() { return impl_thread_pool_size(0); #endif } +#ifndef KOKKOS_ENABLE_DEPRECATED_CODE +void Threads::fence() const +{ Impl::ThreadsExec::fence() ; } +#endif #ifdef KOKKOS_ENABLE_DEPRECATED_CODE Threads & Threads::instance(int) diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp index 61d7667d58..7af9d9e065 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.hpp @@ -649,8 +649,12 @@ inline bool Threads::wake() { return Impl::ThreadsExec::wake() ; } #endif +inline void Threads::impl_static_fence() +{ Impl::ThreadsExec::fence() ; } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE inline void Threads::fence() { Impl::ThreadsExec::fence() ; } +#endif } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp index e88abdba50..9d6c0fa8cf 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp @@ -72,9 +72,12 @@ private: enum { TEAM_REDUCE_SIZE = 512 }; +public: typedef Kokkos::Threads execution_space ; - typedef execution_space::scratch_memory_space space ; + typedef execution_space::scratch_memory_space scratch_memory_space ; +private: + typedef execution_space::scratch_memory_space space ; ThreadsExec * const m_exec ; ThreadsExec * const * m_team_base ; ///< Base for team fan-in space m_team_shared ; @@ -228,14 +231,20 @@ public: } #endif + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer ) const noexcept + { team_reduce(reducer,reducer.reference()); } + template< typename ReducerType > KOKKOS_INLINE_FUNCTION typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type #if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - team_reduce( const ReducerType & ) const + team_reduce( const ReducerType &, const typename ReducerType::value_type ) const {} #else - team_reduce( const ReducerType & reducer ) const + team_reduce( const ReducerType & reducer, const typename ReducerType::value_type contribution ) const { typedef typename ReducerType::value_type value_type; // Make sure there is enough scratch space: @@ -247,7 +256,7 @@ public: type * const local_value = ((type*) m_exec->scratch_memory()); // Set this thread's contribution - *local_value = reducer.reference() ; + *local_value = contribution ; // Fence to make sure the base team member has access: memory_fence(); @@ -277,58 +286,7 @@ public: } #endif - template< class ValueType, class JoinOp > - KOKKOS_INLINE_FUNCTION ValueType - team_reduce( const ValueType & value - , const JoinOp & op_in ) const - #if ! defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - { return ValueType(); } - #else - { - typedef ValueType value_type; - const JoinLambdaAdapter op(op_in); - #endif -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - // Make sure there is enough scratch space: - typedef typename if_c< sizeof(value_type) < TEAM_REDUCE_SIZE - , value_type , void >::type type ; - - if ( 0 == m_exec ) return value ; - - type * const local_value = ((type*) m_exec->scratch_memory()); - - // Set this thread's contribution - *local_value = value ; - - // Fence to make sure the base team member has access: - memory_fence(); - - if ( team_fan_in() ) { - // The last thread to synchronize returns true, all other threads wait for team_fan_out() - type * const team_value = ((type*) m_team_base[0]->scratch_memory()); - - // Join to the team value: - for ( int i = 1 ; i < m_team_size ; ++i ) { - op.join( *team_value , *((type*) m_team_base[i]->scratch_memory()) ); - } - - // Team base thread may "lap" member threads so copy out to their local value. - for ( int i = 1 ; i < m_team_size ; ++i ) { - *((type*) m_team_base[i]->scratch_memory()) = *team_value ; - } - - // Fence to make sure all team members have access - memory_fence(); - } - - team_fan_out(); - - // Value was changed by the team base - return *((type volatile const *) local_value); - } -#endif - - /** \brief Intra-team exclusive prefix sum with team_rank() ordering + /** \brief Intra-team exclusive prefix sum with team_rank() ordering * with intra-team non-deterministic ordering accumulation. * * The global inter-team accumulation value will, at the end of the @@ -645,6 +603,22 @@ public: return *this; } + template + friend class TeamPolicyInternal; + + template< class ... OtherProperties > + TeamPolicyInternal(const TeamPolicyInternal& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_team_alloc = p.m_team_alloc; + m_team_iter = p.m_team_iter; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + } + //---------------------------------------- #ifdef KOKKOS_ENABLE_DEPRECATED_CODE @@ -734,7 +708,7 @@ public: inline int team_iter() const { return m_team_iter ; } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , int team_size_request , int vector_length_request = 1 ) @@ -747,7 +721,7 @@ public: { init(league_size_request,team_size_request); (void) vector_length_request; } /** \brief Specify league size, request team size */ - TeamPolicyInternal( typename traits::execution_space & + TeamPolicyInternal( const typename traits::execution_space & , int league_size_request , const Kokkos::AUTO_t & /* team_size_request */ , int /* vector_length_request */ = 1 ) @@ -757,7 +731,11 @@ public: , m_team_scratch_size { 0 , 0 } , m_thread_scratch_size { 0 , 0 } , m_chunk_size(0) +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE { init(league_size_request,traits::execution_space::thread_pool_size(2)); } +#else + { init(league_size_request,traits::execution_space::impl_thread_pool_size(2)); } +#endif TeamPolicyInternal( int league_size_request , int team_size_request @@ -924,6 +902,23 @@ TeamThreadRange( const Impl::ThreadsExecTeamMember& thread, const iType1 & begin return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, iType(begin), iType(end) ); } +template< typename iType > +KOKKOS_INLINE_FUNCTION +Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember > +TeamVectorRange( const Impl::ThreadsExecTeamMember& thread, const iType& count ) +{ + return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, count ); +} + +template< typename iType1, typename iType2 > +KOKKOS_INLINE_FUNCTION +Impl::TeamThreadRangeBoundariesStruct< typename std::common_type< iType1, iType2 >::type, + Impl::ThreadsExecTeamMember> +TeamVectorRange( const Impl::ThreadsExecTeamMember& thread, const iType1 & begin, const iType2 & end ) +{ + typedef typename std::common_type< iType1, iType2 >::type iType; + return Impl::TeamThreadRangeBoundariesStruct< iType, Impl::ThreadsExecTeamMember >( thread, iType(begin), iType(end) ); +} template KOKKOS_INLINE_FUNCTION @@ -974,15 +969,18 @@ typename std::enable_if< !Kokkos::is_reducer< ValueType >::value >::type parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { - result = ValueType(); + ValueType intermediate; + Sum sum(intermediate); + sum.init(intermediate); for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { ValueType tmp = ValueType(); lambda(i,tmp); - result+=tmp; + intermediate+=tmp; } - result = loop_boundaries.thread.team_reduce(result,Impl::JoinAdd()); + loop_boundaries.thread.team_reduce(sum,intermediate); + result = sum.reference(); } template< typename iType, class Lambda, typename ReducerType > @@ -991,36 +989,14 @@ typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { - reducer.init(reducer.reference()); + typename ReducerType::value_type value; + reducer.init(value); for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - lambda(i,reducer.reference()); + lambda(i,value); } - loop_boundaries.thread.team_reduce(reducer); -} - -/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread and a reduction of - * val is performed using JoinType(ValueType& val, const ValueType& update) and put into init_result. - * The input value of init_result is used as initializer for temporary variables of ValueType. Therefore - * the input value should be the neutral element with respect to the join operation (e.g. '0 for +-' or - * '1 for *'). This functionality requires C++11 support.*/ -template< typename iType, class Lambda, typename ValueType, class JoinType > -KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, - const Lambda & lambda, const JoinType& join, ValueType& init_result) { - - ValueType result = init_result; - - for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i,tmp); - join(result,tmp); - } - - init_result = loop_boundaries.thread.team_reduce(result,Impl::JoinLambdaAdapter(join)); + loop_boundaries.thread.team_reduce(reducer,value); } } //namespace Kokkos @@ -1068,25 +1044,6 @@ parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct -KOKKOS_INLINE_FUNCTION -void parallel_reduce(const Impl::ThreadVectorRangeBoundariesStruct& - loop_boundaries, const Lambda & lambda, const JoinType& join, ValueType& result ) { - -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for( iType i = loop_boundaries.start; i < loop_boundaries.end; i+=loop_boundaries.increment) { - lambda(i,result); - } -} /** \brief Intra-thread vector parallel exclusive prefix sum. Executes lambda(iType i, ValueType & val, bool final) * for each i=0..N-1. diff --git a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp index 42269176ed..022a5fc188 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp @@ -52,7 +52,6 @@ #include -#include #include #include diff --git a/lib/kokkos/core/src/eti/CMakeLists.txt b/lib/kokkos/core/src/eti/CMakeLists.txt index a4db7a7eb6..a7e7717a6e 100644 --- a/lib/kokkos/core/src/eti/CMakeLists.txt +++ b/lib/kokkos/core/src/eti/CMakeLists.txt @@ -4,6 +4,9 @@ endif() if (KOKKOS_ENABLE_OPENMP) add_subdirectory(OpenMP) endif() +if (KOKKOS_ENABLE_HPX) + add_subdirectory(HPX) +endif() if (KOKKOS_ENABLE_ROCM) add_subdirectory(ROCm) endif() diff --git a/lib/kokkos/core/src/eti/HPX/CMakeLists.txt b/lib/kokkos/core/src/eti/HPX/CMakeLists.txt new file mode 100644 index 0000000000..131a2d2e6e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/CMakeLists.txt @@ -0,0 +1,148 @@ +set(D "${CMAKE_CURRENT_SOURCE_DIR}") +set(ETI_SOURCES +${ETI_SOURCES} +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp +${D}/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp +PARENT_SCOPE) diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..905c97c54e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..a7632852ce --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..cff22240cf --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..2b667c674f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..cd1a445d81 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..3d805d5134 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..3883d581b6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..55f3e200a5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..ed6d57260b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..ed1954e683 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..fb8dadb8d0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..16a0ed3e9c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..f846f94a96 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..f4b51a1d78 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..622b3119bd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..de871103dd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..720e075aea --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..4c57c457c2 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..5a37da22c4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..93a96ee554 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..dcfcc8a0e3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..7082701282 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..cbbd7c9ef3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..22d6fc5387 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..d44e95e67e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..ae79919c42 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0c671ad593 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..24dd1c8354 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..6e2de8a02e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..38840ac9e6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..bcb105628b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..8730f92f20 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..785996558b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..3ae193ca65 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..81f91019d6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..d34a4870b9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..0da5ed1770 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..444dad079b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..3f36a1d714 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..51c964b92d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..1a26522ff5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..9bd9af3fe3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..dd5a325535 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..30a44c0a80 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0b73280c6e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..3997d8ca58 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..6cbaa59223 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..351001c8d1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d37e34af30 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..7609d9478f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..30f0c1d882 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..4c4109e298 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..189245d352 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..921a8e88c7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..7e492aa25f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..13b1a78d7c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..03fa72c21c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..10a46bcd9d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..4c23c7e796 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..1bc7ab41f7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutLeft,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..0206838af6 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..78b67a4a2a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..564f530d9b --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..b5ae4ae52a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..b2c91a1aa1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..18e3f2b9b9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutRight,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..e3d08c6e38 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..5001fc2781 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..fd45308d15 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..d2fca73151 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..c7fafd4aec --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..046aafa6ad --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutRight, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutLeft, Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutStride,Experimental::HPX,int64_t) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutStride,Experimental::HPX,int64_t) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..60f78b7a57 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..304a5afc0d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..8aeaf8a1f8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..26ff7aefed --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..518d000eea --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..36b3b4fab8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..df5c890a49 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..b120215692 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..9b5e4c2e5f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..74ad489303 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..bc9dbc65c1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..fbd98c8011 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d52c5306d0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..5cc29daaca --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..7e63d80236 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..11447c11b5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..bafe266044 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..e4ef20c370 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(double********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(double********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..fb00c3bfd3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..12718353e8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..c9ab75062d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..71380c21a2 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..9787086a80 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..81072d77cb --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..363b05bace --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..ce1bc89e01 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..4af590818c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..ad399eff76 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..661edef668 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..48cb4a34b1 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..d2f88bb243 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..58ce6f1911 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..bc4efab1e4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..6225cf9720 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..e50472d850 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..5ad427acc5 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(float********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(float********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..4ae2437fc8 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..02a2b8e1d9 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..ff693c9b4f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..d96960d4a7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..05c3ef68eb --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..d96f47ece0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..208933899e --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..aa7d9b8f15 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..e43a1783fd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..6706074819 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..cd7082dcb3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..8735d58605 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..ec371dcba7 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..354da99794 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..bbc32aba03 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..addbbb291a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..dbebda1594 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..f8a89b4226 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int64_t********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int64_t********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp new file mode 100644 index 0000000000..7f0b9fc346 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp new file mode 100644 index 0000000000..4a31e60a3a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp new file mode 100644 index 0000000000..e876da3a6c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp new file mode 100644 index 0000000000..a7ee2c554d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp new file mode 100644 index 0000000000..4769c235bc --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp new file mode 100644 index 0000000000..3ac618b5dd --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutLeft,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutLeft,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp new file mode 100644 index 0000000000..825bee722f --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp new file mode 100644 index 0000000000..44e24e57f3 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp new file mode 100644 index 0000000000..0b18c7e5c0 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp new file mode 100644 index 0000000000..951d770305 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp new file mode 100644 index 0000000000..a0e80d764d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp new file mode 100644 index 0000000000..d8cd0155af --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutRight,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutRight,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp new file mode 100644 index 0000000000..c4bd8a043a --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp new file mode 100644 index 0000000000..566eb71e4d --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int**,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int**,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp new file mode 100644 index 0000000000..4b99a8fd0c --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int***,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int***,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp new file mode 100644 index 0000000000..6cf55bb5b4 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp new file mode 100644 index 0000000000..932a322bac --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int*****,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int*****,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp new file mode 100644 index 0000000000..f46a156a93 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp @@ -0,0 +1,54 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Kokkos is licensed under 3-clause BSD terms of use: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#define KOKKOS_IMPL_COMPILING_LIBRARY true +#include +namespace Kokkos { +namespace Impl { +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutRight, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutLeft, Experimental::HPX,int) +KOKKOS_IMPL_VIEWCOPY_ETI_INST(int********,LayoutStride,LayoutStride,Experimental::HPX,int) +KOKKOS_IMPL_VIEWFILL_ETI_INST(int********,LayoutStride,Experimental::HPX,int) + +} +} diff --git a/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX b/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX new file mode 100644 index 0000000000..904f32fb82 --- /dev/null +++ b/lib/kokkos/core/src/eti/HPX/Makefile.eti_HPX @@ -0,0 +1,288 @@ +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_int64_t_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_int64_t_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_float_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_float_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int_double_LayoutStride_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutLeft_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutRight_Rank8.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank1.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank2.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank3.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank4.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank5.cpp +Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_ETI_PATH)/HPX/Kokkos_HPX_ViewCopyETIInst_int64_t_double_LayoutStride_Rank8.cpp diff --git a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp index d27c2e1306..50af5ec82e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp @@ -56,11 +56,12 @@ template < typename ExecutionSpace = void , typename IndexType = void , typename IterationPattern = void , typename LaunchBounds = void + , typename MyWorkItemProperty = Kokkos::Experimental::WorkItemProperty::None_t > struct PolicyTraitsBase { using type = PolicyTraitsBase< ExecutionSpace, Schedule, WorkTag, IndexType, - IterationPattern, LaunchBounds>; + IterationPattern, LaunchBounds, MyWorkItemProperty>; using execution_space = ExecutionSpace; using schedule_type = Schedule; @@ -68,8 +69,23 @@ struct PolicyTraitsBase using index_type = IndexType; using iteration_pattern = IterationPattern; using launch_bounds = LaunchBounds; + using work_item_property = MyWorkItemProperty; }; +template +struct SetWorkItemProperty +{ + static_assert( std::is_same::value + , "Kokkos Error: More than one work item property given" ); + using type = PolicyTraitsBase< typename PolicyBase::execution_space + , typename PolicyBase::schedule_type + , typename PolicyBase::work_tag + , typename PolicyBase::index_type + , typename PolicyBase::iteration_pattern + , typename PolicyBase::launch_bounds + , Property + >; +}; template struct SetExecutionSpace @@ -82,6 +98,7 @@ struct SetExecutionSpace , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -96,6 +113,7 @@ struct SetSchedule , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -110,6 +128,7 @@ struct SetWorkTag , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -124,6 +143,7 @@ struct SetIndexType , IndexType , typename PolicyBase::iteration_pattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -139,6 +159,7 @@ struct SetIterationPattern , typename PolicyBase::index_type , IterationPattern , typename PolicyBase::launch_bounds + , typename PolicyBase::work_item_property >; }; @@ -154,6 +175,7 @@ struct SetLaunchBounds , typename PolicyBase::index_type , typename PolicyBase::iteration_pattern , LaunchBounds + , typename PolicyBase::work_item_property >; }; @@ -170,8 +192,9 @@ struct AnalyzePolicy : public , typename std::conditional< std::is_integral::value , SetIndexType > , typename std::conditional< is_iteration_pattern::value, SetIterationPattern , typename std::conditional< is_launch_bounds::value , SetLaunchBounds + , typename std::conditional< Experimental::is_work_item_property::value, SetWorkItemProperty , SetWorkTag - >::type >::type >::type >::type >::type>::type::type + >::type >::type >::type >::type >::type>::type>::type::type , Traits... > {}; @@ -208,13 +231,15 @@ struct AnalyzePolicy , typename Base::launch_bounds >::type; + using work_item_property = typename Base::work_item_property; + using type = PolicyTraitsBase< execution_space , schedule_type , work_tag , index_type , iteration_pattern , launch_bounds - >; + , work_item_property>; }; template diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp index 3d99b07568..63067c137a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp @@ -53,6 +53,13 @@ #include #endif +#include +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + namespace Kokkos { //---------------------------------------------------------------------------- @@ -326,7 +333,165 @@ bool atomic_compare_exchange_strong(volatile T* const dest, const T compare, con } //---------------------------------------------------------------------------- -} // namespace Kokkos +namespace Impl { +// memory-ordered versions are in the Impl namespace + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_seq_cst_t, MemoryOrderFailure +) +{ + Kokkos::memory_fence(); + auto rv = Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); + Kokkos::memory_fence(); + return rv; +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_acquire_t, MemoryOrderFailure +) +{ + auto rv = Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); + Kokkos::memory_fence(); + return rv; +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_release_t, MemoryOrderFailure +) +{ + Kokkos::memory_fence(); + return Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); +} + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong_fallback( + T* dest, T compare, T val, memory_order_relaxed_t, MemoryOrderFailure +) +{ + return Kokkos::atomic_compare_exchange_strong( + dest, compare, val + ); +} + +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess, + MemoryOrderFailure, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrderSuccess::memory_order, + typename std::remove_cv::type + >::value + && std::is_same< + typename MemoryOrderFailure::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return __atomic_compare_exchange_n( + dest, &compare, val, /* weak = */ false, + MemoryOrderSuccess::gnu_constant, + MemoryOrderFailure::gnu_constant + ); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrderSuccess::memory_order, + typename std::remove_cv::type + >::value + && std::is_same< + typename MemoryOrderFailure::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return _atomic_compare_exchange_fallback( + dest, compare, val, + order_success, order_failure + ); +} + +#else + +template +KOKKOS_INLINE_FUNCTION +bool _atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure +) { + return _atomic_compare_exchange_strong_fallback( + dest, compare, val, order_success, order_failure + ); +} + +#endif + +// TODO static asserts in overloads that don't make sense (as listed in https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/_005f_005fatomic-Builtins.html) +template +KOKKOS_FORCEINLINE_FUNCTION +bool atomic_compare_exchange_strong( + T* dest, T compare, T val, + MemoryOrderSuccess order_success, + MemoryOrderFailure order_failure +) { + return _atomic_compare_exchange_strong(dest, compare, val, order_success, order_failure); +} + + +} // end namespace Impl + +} // namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp new file mode 100644 index 0000000000..3abc8ed4b7 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp @@ -0,0 +1,418 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) +#include +#endif + +#include +#include +#ifndef KOKKOS_ATOMIC_COMPARE_EXCHANGE_WEAK_HPP +#define KOKKOS_ATOMIC_COMPARE_EXCHANGE_WEAK_HPP + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +// Cuda sm_70 or greater supports C++-like semantics directly + +#if defined( KOKKOS_ENABLE_CUDA ) + +#if defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) + + +#if __CUDA_ARCH__ >= 700 +// See: https://github.com/ogiroux/freestanding +# define kokkos_cuda_internal_cas_release_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.release.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_acquire_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.acquire.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_acq_rel_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.acq_rel.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_cas_relaxed_32(ptr, old, expected, desired) \ + asm volatile("atom.cas.relaxed.sys.b32 %0, [%1], %2, %3;" : "=r"(old) : "l"(ptr), "r"(expected), "r"(desired) : "memory") +# define kokkos_cuda_internal_fence_seq_cst() asm volatile("fence.sc.sys;" : : : "memory") +# define kokkos_cuda_internal_fence_acq_rel() asm volatile("fence.acq_rel.sys;" : : : "memory") +#else +# define kokkos_cuda_internal_fence_acq_rel() asm volatile("membar.sys;" : : : "memory") +# define kokkos_cuda_internal_fence_seq_cst() asm volatile("membar.sys;" : : : "memory") +#endif + + +// 32-bit version +template ::type = 0 +> +__inline__ __device__ +bool +atomic_compare_exchange_weak( + T volatile* const dest, + T* const expected, + T const desired, + std::memory_order success_order = std::memory_order_seq_cst, + std::memory_order failure_order = std::memory_order_seq_cst +) { + // TODO assert that success_order >= failure_order + // See: https://github.com/ogiroux/freestanding + int32_t tmp = 0; + int32_t old = 0; + memcpy(&tmp, &desired, sizeof(T)); + memcpy(&old, expected, sizeof(T)); + int32_t old_tmp = old; +#if __CUDA_ARCH__ >= 700 + switch(success_order) { + case std::memory_order_seq_cst: + // sequentially consistent is just an acquire with a seq_cst fence + kokkos_cuda_internal_fence_seq_cst(); + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acquire: + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_consume: + // same as acquire on PTX compatible platforms + kokkos_cuda_internal_cas_acquire_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acq_rel: + kokkos_cuda_internal_cas_acq_rel_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_release: + kokkos_cuda_internal_cas_release_32((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_relaxed: + kokkos_cuda_internal_cas_relaxed_32((T*)dest, old, old_tmp, tmp); + break; + }; +#else + // All of the orders that require a fence before the relaxed atomic operation: + if( + success_order == std::memory_order_release + || success_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(success_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + // This is relaxed: + // Cuda API requires casting away volatile + atomicCAS((T*)dest, old_tmp, tmp); +#endif + bool const rv = (old == old_tmp); +#if __CUDA_ARCH__ < 700 + if(rv) { + if( + success_order == std::memory_order_acquire + || success_order == std::memory_order_consume + || success_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(success_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + } + else { + if( + failure_order == std::memory_order_acquire + || failure_order == std::memory_order_consume + || failure_order == std::memory_order_acq_rel + ) { + kokkos_cuda_internal_fence_acq_rel(); + } + else if(failure_order == std::memory_order_seq_cst) { + kokkos_cuda_internal_fence_seq_cst(); + } + } +#endif + memcpy(expected, &old, sizeof(T)); + return rv; +} + +// 64-bit version +template ::type = 0 +> +bool +atomic_compare_exchange_weak( + T volatile* const dest, + T* const expected, + T const desired, + std::memory_order success_order = std::memory_order_seq_cst, + std::memory_order failure_order = std::memory_order_seq_cst +) { + // TODO assert that success_order >= failure_order + // See: https://github.com/ogiroux/freestanding + int64_t tmp = 0; + int64_t old = 0; + memcpy(&tmp, &desired, sizeof(T)); + memcpy(&old, expected, sizeof(T)); + int64_t old_tmp = old; +#if __CUDA_ARCH__ >= 700 + switch(success_order) { + case std::memory_order_seq_cst: + // sequentially consistent is just an acquire with a seq_cst fence + kokkos_cuda_internal_fence_seq_cst(); + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acquire: + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_consume: + // same as acquire on PTX compatible platforms + kokkos_cuda_internal_cas_acquire_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_acq_rel: + kokkos_cuda_internal_cas_acq_rel_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_release: + kokkos_cuda_internal_cas_release_64((T*)dest, old, old_tmp, tmp); + break; + case std::memory_order_relaxed: + kokkos_cuda_internal_cas_relaxed_64((T*)dest, old, old_tmp, tmp); + break; + }; +#else + // Cuda API requires casting away volatile + atomicCAS((T*)dest, old_tmp, tmp); +#endif + bool const rv = (old == old_tmp); + memcpy(expected, &old, sizeof(T)); + return rv; +} + +#endif // defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) + +#endif // defined( KOKKOS_ENABLE_CUDA ) + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +// GCC native CAS supports int, long, unsigned int, unsigned long. +// Intel native CAS support int and long with the same interface as GCC. +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) + +inline +int atomic_compare_exchange( volatile int * const dest, const int compare, const int val) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + return __sync_val_compare_and_swap(dest,compare,val); +} + +inline +long atomic_compare_exchange( volatile long * const dest, const long compare, const long val ) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + return __sync_val_compare_and_swap(dest,compare,val); +} + +#if defined( KOKKOS_ENABLE_GNU_ATOMICS ) + +// GCC supports unsigned + +inline +unsigned int atomic_compare_exchange( volatile unsigned int * const dest, const unsigned int compare, const unsigned int val ) +{ return __sync_val_compare_and_swap(dest,compare,val); } + +inline +unsigned long atomic_compare_exchange( volatile unsigned long * const dest , + const unsigned long compare , + const unsigned long val ) +{ return __sync_val_compare_and_swap(dest,compare,val); } + +#endif + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T & >::type val ) +{ + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = __sync_val_compare_and_swap( (int*) dest , *((int*)&compare) , *((int*)&val) ); + return tmp.t ; +} + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && + sizeof(T) == sizeof(long) , const T & >::type val ) +{ + union U { + long i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = __sync_val_compare_and_swap( (long*) dest , *((long*)&compare) , *((long*)&val) ); + return tmp.t ; +} + +#if defined( KOKKOS_ENABLE_ASM) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest, const T & compare, + typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && + sizeof(T) != sizeof(long) && + sizeof(T) == sizeof(Impl::cas128_t), const T & >::type val ) +{ + union U { + Impl::cas128_t i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {}; + } tmp ; + +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + tmp.i = Impl::cas128( (Impl::cas128_t*) dest , *((Impl::cas128_t*)&compare) , *((Impl::cas128_t*)&val) ); + return tmp.t ; +} +#endif + +template < typename T > +inline +T atomic_compare_exchange( volatile T * const dest , const T compare , + typename Kokkos::Impl::enable_if< + ( sizeof(T) != 4 ) + && ( sizeof(T) != 8 ) + #if defined(KOKKOS_ENABLE_ASM) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) + && ( sizeof(T) != 16 ) + #endif + , const T >::type& val ) +{ +#if defined( KOKKOS_ENABLE_RFO_PREFETCH ) + _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); +#endif + + while( !Impl::lock_address_host_space( (void*) dest ) ); + T return_val = *dest; + if( return_val == compare ) { + // Don't use the following line of code here: + // + //const T tmp = *dest = val; + // + // Instead, put each assignment in its own statement. This is + // because the overload of T::operator= for volatile *this should + // return void, not volatile T&. See Kokkos #177: + // + // https://github.com/kokkos/kokkos/issues/177 + *dest = val; + const T tmp = *dest; + #ifndef KOKKOS_COMPILER_CLANG + (void) tmp; + #endif + } + Impl::unlock_address_host_space( (void*) dest ); + return return_val; +} +//---------------------------------------------------------------------------- + +#elif defined( KOKKOS_ENABLE_OPENMP_ATOMICS ) + +template< typename T > +KOKKOS_INLINE_FUNCTION +T atomic_compare_exchange( volatile T * const dest, const T compare, const T val ) +{ + T retval; +#pragma omp critical + { + retval = dest[0]; + if ( retval == compare ) + dest[0] = val; + } + return retval; +} + +#elif defined( KOKKOS_ENABLE_SERIAL_ATOMICS ) + +template< typename T > +KOKKOS_INLINE_FUNCTION +T atomic_compare_exchange( volatile T * const dest_v, const T compare, const T val ) +{ + T* dest = const_cast(dest_v); + T retval = *dest; + if (retval == compare) *dest = val; + return retval; +} + +#endif +#endif +#endif // !defined ROCM_ATOMICS + +template +KOKKOS_INLINE_FUNCTION +bool atomic_compare_exchange_strong(volatile T* const dest, const T compare, const T val) +{ + return compare == atomic_compare_exchange(dest, compare, val); +} +//---------------------------------------------------------------------------- + +} // namespace Kokkos + +#endif + diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp index d6fab81133..495fd48477 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp @@ -90,10 +90,12 @@ __inline__ __device__ T atomic_fetch_add( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union U { + // to work around a bug in the clang cuda compiler, the name here needs to be + // different from the one internal to the other overloads + union U1 { int i ; T t ; - KOKKOS_INLINE_FUNCTION U() {}; + KOKKOS_INLINE_FUNCTION U1() {}; } assume , oldval , newval ; oldval.t = *dest ; @@ -113,10 +115,12 @@ T atomic_fetch_add( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union U { + // to work around a bug in the clang cuda compiler, the name here needs to be + // different from the one internal to the other overloads + union U2 { unsigned long long int i ; T t ; - KOKKOS_INLINE_FUNCTION U() {}; + KOKKOS_INLINE_FUNCTION U2() {}; } assume , oldval , newval ; oldval.t = *dest ; @@ -176,7 +180,7 @@ T atomic_fetch_add( volatile T * const dest , #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) -#if defined( KOKKOS_ENABLE_ASM ) && defined ( KOKKOS_ENABLE_ISA_X86_64 ) +#if defined( KOKKOS_ENABLE_ASM ) && (defined(KOKKOS_ENABLE_ISA_X86_64) || defined(KOKKOS_KNL_USE_ASM_WORKAROUND)) inline int atomic_fetch_add( volatile int * dest , const int val ) { diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp index 48dc8731ef..7a4f95cd99 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp @@ -89,7 +89,11 @@ __inline__ __device__ T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -108,7 +112,11 @@ T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -211,7 +219,11 @@ inline T atomic_fetch_sub( volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } assume , oldval , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; #if defined( KOKKOS_ENABLE_RFO_PREFETCH ) _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); @@ -238,7 +250,11 @@ T atomic_fetch_sub( volatile T * const dest , _mm_prefetch( (const char*) dest, _MM_HINT_ET0 ); #endif - union { long i ; T t ; } assume , oldval , newval ; + union U { + long i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp index a3a18166af..c1a7d80364 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp @@ -156,13 +156,17 @@ T atomic_fetch_oper( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; do { assume.i = oldval.i ; - newval.t = Oper::apply(assume.t, val) ; + newval.t = op.apply(assume.t, val) ; oldval.i = Kokkos::atomic_compare_exchange( (unsigned long long int*)dest , assume.i , newval.i ); } while ( assume.i != oldval.i ); @@ -175,7 +179,11 @@ T atomic_oper_fetch( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int) , const T >::type val ) { - union { unsigned long long int i ; T t ; } oldval , assume , newval ; + union U { + unsigned long long int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; @@ -193,13 +201,17 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int) , const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; do { assume.i = oldval.i ; - newval.t = Oper::apply(assume.t, val) ; + newval.t = op.apply(assume.t, val) ; oldval.i = Kokkos::atomic_compare_exchange( (int*)dest , assume.i , newval.i ); } while ( assume.i != oldval.i ); @@ -211,7 +223,11 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( const Oper& op, volatile T * const dest , typename Kokkos::Impl::enable_if< sizeof(T) == sizeof(int), const T >::type val ) { - union { int i ; T t ; } oldval , assume , newval ; + union U { + int i ; + T t ; + KOKKOS_INLINE_FUNCTION U() {} + } oldval , assume , newval ; oldval.t = *dest ; diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp new file mode 100644 index 0000000000..2db74b9f1e --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp @@ -0,0 +1,266 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP +#define KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP + +#include +#if defined(KOKKOS_ATOMIC_HPP) + +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { +namespace Impl { + +// Olivier's implementation helpfully binds to the same builtins as GNU, so +// we make this code common across multiple options +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +T _atomic_load( + T* ptr, MemoryOrder, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + return __atomic_load_n(ptr, MemoryOrder::gnu_constant); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +T _atomic_load( + T* ptr, MemoryOrder, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_default_constructible::value + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + T rv{}; + __atomic_load(ptr, &rv, MemoryOrder::gnu_constant); + return rv; +} + +#undef KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH + +#elif defined(__CUDA_ARCH__) + +// Not compiling for Volta or later, or Cuda ASM atomics were manually disabled + +template +__device__ __inline__ +T _relaxed_atomic_load_impl( + T* ptr, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + return *ptr; +} + +template +struct NoOpOper { + __device__ __inline__ + static constexpr T apply(T const&, T const&) noexcept { } +}; + +template +__device__ __inline__ +T _relaxed_atomic_load_impl( + T* ptr, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + T rv{}; + // TODO remove a copy operation here? + Kokkos::atomic_oper_fetch(NoOpOper{}, &rv, rv); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_seq_cst_t) { + Kokkos::memory_fence(); + T rv = Impl::_relaxed_atomic_load_impl(ptr); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_acquire_t) { + T rv = Impl::_relaxed_atomic_load_impl(ptr); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +T _atomic_load(T* ptr, memory_order_relaxed_t) { + return _relaxed_atomic_load_impl(ptr); +} + +#elif defined(KOKKOS_ENABLE_OPENMP_ATOMICS) + +template +inline +T _atomic_load(T* ptr, MemoryOrder) +{ + // AFAICT, all OpenMP atomics are sequentially consistent, so memory order doesn't matter + T retval{ }; +#pragma omp atomic read + { + retval = *ptr; + } + return retval; +} + +#elif defined(KOKKOS_ENABLE_SERIAL_ATOMICS) + +template +inline +T _atomic_load(T* ptr, MemoryOrder) +{ + return *ptr; +} + +#endif // end of all atomic implementations + + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_seq_cst_t) { + return _atomic_load(ptr, Impl::memory_order_seq_cst); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_acquire_t) { + return _atomic_load(ptr, Impl::memory_order_acquire); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_relaxed_t) { + return _atomic_load(ptr, Impl::memory_order_relaxed); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_release_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_load with memory order release doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr, Impl::memory_order_acq_rel_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_load with memory order acq_rel doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +T atomic_load(T* ptr) { + // relaxed by default! + return _atomic_load(ptr, Impl::memory_order_relaxed); +} + +} // end namespace Impl +} // end namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +#endif // defined(KOKKOS_ATOMIC_HPP) +#endif //KOKKOS_IMPL_KOKKOS_ATOMIC_LOAD_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp new file mode 100644 index 0000000000..7b9c08551c --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Memory_Order.hpp @@ -0,0 +1,122 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP +#define KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP + +#include + +#include + +namespace Kokkos { +namespace Impl { + +/** @file + * Provides strongly-typed analogs of the standard memory order enumerators. + * In addition to (very slightly) reducing the constant propagation burden on + * the compiler, this allows us to give compile-time errors for things that + * don't make sense, like atomic_load with memory order release. + */ + +struct memory_order_seq_cst_t { + using memory_order = memory_order_seq_cst_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_SEQ_CST; +#endif + static constexpr auto std_constant = std::memory_order_seq_cst; +}; +constexpr memory_order_seq_cst_t memory_order_seq_cst = { }; + +struct memory_order_relaxed_t { + using memory_order = memory_order_relaxed_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_RELAXED; +#endif + static constexpr auto std_constant = std::memory_order_relaxed; +}; +constexpr memory_order_relaxed_t memory_order_relaxed = { }; + +struct memory_order_acquire_t { + using memory_order = memory_order_acquire_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_ACQUIRE; +#endif + static constexpr auto std_constant = std::memory_order_acquire; +}; +constexpr memory_order_acquire_t memory_order_acquire = { }; + +struct memory_order_release_t { + using memory_order = memory_order_release_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_RELEASE; +#endif + static constexpr auto std_constant = std::memory_order_release; +}; +constexpr memory_order_release_t memory_order_release = { }; + +struct memory_order_acq_rel_t { + using memory_order = memory_order_acq_rel_t; +#if defined(KOKKOS_ENABLE_GNU_ATOMICS) \ + || defined(KOKKOS_ENABLE_INTEL_ATOMICS) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + static constexpr auto gnu_constant = __ATOMIC_ACQ_REL; +#endif + static constexpr auto std_constant = std::memory_order_acq_rel; +}; +constexpr memory_order_acq_rel_t memory_order_acq_rel = { }; + + +// Intentionally omit consume (for now) + +} // end namespace Impl +} // end namespace Kokkos + +#endif //KOKKOS_KOKKOS_ATOMIC_MEMORY_ORDER_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp new file mode 100644 index 0000000000..066f90480d --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp @@ -0,0 +1,258 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP +#define KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP + +#include +#if defined(KOKKOS_ATOMIC_HPP) + +#include + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +namespace Kokkos { +namespace Impl { + +// Olivier's implementation helpfully binds to the same builtins as GNU, so +// we make this code common across multiple options +#if (defined(KOKKOS_ENABLE_GNU_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || (defined(KOKKOS_ENABLE_INTEL_ATOMICS) && !defined(__CUDA_ARCH__)) \ + || defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + +#if defined(__CUDA_ARCH__) && defined(KOKKOS_ENABLE_CUDA_ASM_ATOMICS) + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH __inline__ __device__ +#else + #define KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH inline +#endif + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +void _atomic_store( + T* ptr, T val, MemoryOrder, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + __atomic_store_n(ptr, val, MemoryOrder::gnu_constant); +} + +template +KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH +void _atomic_store( + T* ptr, T val, MemoryOrder, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ) + && std::is_default_constructible::value + && std::is_same< + typename MemoryOrder::memory_order, + typename std::remove_cv::type + >::value, + void const** + >::type = nullptr +) { + __atomic_store(ptr, &val, MemoryOrder::gnu_constant); +} + +#undef KOKKOS_INTERNAL_INLINE_DEVICE_IF_CUDA_ARCH + +#elif defined(__CUDA_ARCH__) + +// Not compiling for Volta or later, or Cuda ASM atomics were manually disabled + +template +__device__ __inline__ +void _relaxed_atomic_store_impl( + T* ptr, T val, + typename std::enable_if< + ( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + *ptr = val; +} + +template +struct StoreOper { + __device__ __inline__ + static constexpr T apply(T const&, T const& val) noexcept { return val; } +}; + +template +__device__ __inline__ +void _relaxed_atomic_store_impl( + T* ptr, T val, + typename std::enable_if< + !( + sizeof(T) == 1 + || sizeof(T) == 2 + || sizeof(T) == 4 + || sizeof(T) == 8 + ), + void const** + >::type = nullptr +) { + Kokkos::atomic_oper_fetch(StoreOper{}, &rv, (T&&)val); +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_seq_cst_t) { + Kokkos::memory_fence(); + Impl::_relaxed_atomic_store_impl(ptr, val); + Kokkos::memory_fence(); + return rv; +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_release_t) { + Kokkos::memory_fence(); + _relaxed_atomic_store_impl(ptr, val); +} + +template +__device__ __inline__ +void _atomic_store(T* ptr, T val, memory_order_relaxed_t) { + _relaxed_atomic_store_impl(ptr, val); +} + +#elif defined(KOKKOS_ENABLE_OPENMP_ATOMICS) + +template +inline +void _atomic_store(T* ptr, T val, MemoryOrder) +{ + // AFAICT, all OpenMP atomics are sequentially consistent, so memory order doesn't matter +#pragma omp atomic write + { + *ptr = val; + } +} + +#elif defined(KOKKOS_ENABLE_SERIAL_ATOMICS) + +template +inline +void _atomic_store(T* ptr, T val, MemoryOrder) +{ + *ptr = val; +} + +#endif // end of all atomic implementations + + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_seq_cst_t) { + _atomic_store(ptr, val, Impl::memory_order_seq_cst); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_release_t) { + _atomic_store(ptr, val, Impl::memory_order_release); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_relaxed_t) { + _atomic_store(ptr, val, Impl::memory_order_relaxed); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_acquire_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_store with memory order acquire doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val, Impl::memory_order_acq_rel_t) { + static_assert( + sizeof(T) == 0, // just something that will always be false, but only on instantiation + "atomic_store with memory order acq_rel doesn't make any sense!" + ); +} + +template +KOKKOS_FORCEINLINE_FUNCTION +void atomic_store(T* ptr, T val) { + // relaxed by default! + _atomic_store(ptr, Impl::memory_order_relaxed); +} + +} // end namespace Impl +} // end namespace Kokkos + +#if defined(KOKKOS_ENABLE_CUDA) +#include +#endif + +#endif // defined(KOKKOS_ATOMIC_HPP) +#endif //KOKKOS_IMPL_KOKKOS_ATOMIC_STORE_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp new file mode 100644 index 0000000000..f86e68cb1d --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp @@ -0,0 +1,314 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LOCKFREEDEQUE_HPP +#define KOKKOS_IMPL_LOCKFREEDEQUE_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS +#include // KOKKOS_EXPECTS + +#include // atomic_compare_exchange, atomic_fence +#include "Kokkos_LIFO.hpp" + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct fixed_size_circular_buffer { +public: + + using node_type = NodeType; + using size_type = SizeType; + +private: + + node_type* m_buffer[CircularBufferSize] = { nullptr }; + +public: + + fixed_size_circular_buffer() = default; + fixed_size_circular_buffer(fixed_size_circular_buffer const&) = delete; + fixed_size_circular_buffer(fixed_size_circular_buffer&&) = default; + fixed_size_circular_buffer& operator=(fixed_size_circular_buffer const&) = delete; + fixed_size_circular_buffer& operator=(fixed_size_circular_buffer&&) = default; + ~fixed_size_circular_buffer() = default; + + KOKKOS_FORCEINLINE_FUNCTION + static constexpr size_type size() noexcept { + return size_type(CircularBufferSize); + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type* operator[](size_type idx) const noexcept { + return m_buffer[idx % size()]; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type*& operator[](size_type idx) noexcept { + return m_buffer[idx % size()]; + } +}; + +template +struct non_owning_variable_size_circular_buffer { +public: + + using node_type = NodeType; + using size_type = SizeType; + +private: + + ObservingRawPtr m_buffer = nullptr; + size_type m_size = 0; + +public: + + KOKKOS_INLINE_FUNCTION + non_owning_variable_size_circular_buffer( + ObservingRawPtr buffer, + size_type arg_size + ) noexcept + : m_buffer(buffer), + m_size(arg_size) + { } + + non_owning_variable_size_circular_buffer() = default; + non_owning_variable_size_circular_buffer(non_owning_variable_size_circular_buffer const&) = delete; + non_owning_variable_size_circular_buffer(non_owning_variable_size_circular_buffer&&) = default; + non_owning_variable_size_circular_buffer& operator=(non_owning_variable_size_circular_buffer const&) = delete; + non_owning_variable_size_circular_buffer& operator=(non_owning_variable_size_circular_buffer&&) = default; + ~non_owning_variable_size_circular_buffer() = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr size_type size() const noexcept { + return m_size; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type* operator[](size_type idx) const noexcept { + return m_buffer[idx % size()]; + } + + KOKKOS_FORCEINLINE_FUNCTION + node_type*& operator[](size_type idx) noexcept { + return m_buffer[idx % size()]; + } +}; + +/** Based on "Correct and Efficient Work-Stealing for Weak Memory Models," + * PPoPP '13, https://www.di.ens.fr/~zappa/readings/ppopp13.pdf + * + */ +template < + class T, + class CircularBufferT, + class SizeType = int32_t +> +struct ChaseLevDeque { +public: + + using size_type = SizeType; + using value_type = T; + // Still using intrusive linked list for waiting queue + using node_type = SimpleSinglyLinkedListNode<>; + +private: + + // TODO @tasking @new_feature DSH variable size circular buffer? + + CircularBufferT m_array; + size_type m_top = 0; + size_type m_bottom = 0; + + +public: + + template < + class _ignore=void, + class=typename std::enable_if< + std::is_default_constructible::value + >::type + > + ChaseLevDeque() : m_array() { } + + explicit + ChaseLevDeque(CircularBufferT buffer) + : m_array(std::move(buffer)) + { } + + KOKKOS_INLINE_FUNCTION + bool empty() const { + // TODO @tasking @memory_order DSH memory order + return m_top > m_bottom - 1; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + pop() { + auto b = m_bottom - 1; // atomic load relaxed + auto& a = m_array; // atomic load relaxed + m_bottom = b; // atomic store relaxed + Kokkos::memory_fence(); // memory order seq_cst + auto t = m_top; // atomic load relaxed + OptionalRef return_value; + if(t <= b) { + /* non-empty queue */ + return_value = *static_cast(a[b]); // relaxed load + if(t == b) { + /* single last element in the queue. */ + if(not Impl::atomic_compare_exchange_strong(&m_top, t, t+1, memory_order_seq_cst, memory_order_relaxed)) { + /* failed race, someone else stole it */ + return_value = nullptr; + } + m_bottom = b + 1; // memory order relaxed + } + } else { + /* empty queue */ + m_bottom = b + 1; // memory order relaxed + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type&& node) + { + // Just forward to the lvalue version + return push(node); + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type& node) + { + auto b = m_bottom; // memory order relaxed + auto t = Impl::atomic_load(&m_top, memory_order_acquire); + auto& a = m_array; + if(b - t > a.size() - 1) { + /* queue is full, resize */ + //m_array = a->grow(); + //a = m_array; + return false; + } + a[b] = &node; // relaxed + Impl::atomic_store(&m_bottom, b + 1, memory_order_release); + return true; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + steal() { + auto t = m_top; // TODO @tasking @memory_order DSH: atomic load acquire + Kokkos::memory_fence(); // seq_cst fence, so why does the above need to be acquire? + auto b = Impl::atomic_load(&m_bottom, memory_order_acquire); + OptionalRef return_value; + if(t < b) { + /* Non-empty queue */ + auto& a = m_array; // TODO @tasking @memory_order DSH: technically consume ordered, but acquire should be fine + Kokkos::load_fence(); // TODO @tasking @memory_order DSH memory order instead of fence + return_value = *static_cast(a[t]); // relaxed + if(not Impl::atomic_compare_exchange_strong(&m_top, t, t+1, memory_order_seq_cst, memory_order_relaxed)) { + return_value = nullptr; + } + } + return return_value; + } + +}; + +/* + // The atomicity of this load was more important in the paper's version + // because that version had a circular buffer that could grow. We're + // essentially using the memory order in this version as a fence, which + // may be unnecessary + auto buffer_ptr = (node_type***)&m_array.buffer; + auto a = Impl::atomic_load(buffer_ptr, memory_order_acquire); // technically consume ordered, but acquire should be fine + return_value = *static_cast(a[t % m_array->size]); // relaxed; we'd have to replace the m_array->size if we ever allow growth +*/ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct TaskQueueTraitsChaseLev { + + template + using ready_queue_type = ChaseLevDeque< + Task, + fixed_size_circular_buffer, CircularBufferSize, int32_t>, + int32_t + >; + + template + using waiting_queue_type = SingleConsumeOperationLIFO; + + template + using intrusive_task_base_type = + typename ready_queue_type::node_type; + + static constexpr auto ready_queue_insertion_may_fail = true; + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LOCKFREEDEQUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Core.cpp b/lib/kokkos/core/src/impl/Kokkos_Core.cpp index 82fdee4399..0d472e98bb 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Core.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Core.cpp @@ -85,7 +85,8 @@ setenv("MEMKIND_HBW_NODES", "1", 0); } // Protect declarations, to prevent "unused variable" warnings. -#if defined( KOKKOS_ENABLE_OPENMP ) || defined( KOKKOS_ENABLE_THREADS ) || defined( KOKKOS_ENABLE_OPENMPTARGET ) +#if defined( KOKKOS_ENABLE_OPENMP ) || defined( KOKKOS_ENABLE_THREADS ) ||\ + defined( KOKKOS_ENABLE_OPENMPTARGET ) || defined ( KOKKOS_ENABLE_HPX ) const int num_threads = args.num_threads; #endif #if defined( KOKKOS_ENABLE_THREADS ) || defined( KOKKOS_ENABLE_OPENMPTARGET ) @@ -160,6 +161,21 @@ setenv("MEMKIND_HBW_NODES", "1", 0); } #endif +#if defined( KOKKOS_ENABLE_HPX ) + if( std::is_same< Kokkos::Experimental::HPX , Kokkos::DefaultExecutionSpace >::value || + std::is_same< Kokkos::Experimental::HPX , Kokkos::HostSpace::execution_space >::value ) { + if(num_threads>0) { + Kokkos::Experimental::HPX::impl_initialize(num_threads); + } else { + Kokkos::Experimental::HPX::impl_initialize(); + } + //std::cout << "Kokkos::initialize() fyi: HPX enabled and initialized" << std::endl ; + } + else { + //std::cout << "Kokkos::initialize() fyi: HPX enabled but not initialized" << std::endl ; + } +#endif + #if defined( KOKKOS_ENABLE_SERIAL ) // Prevent "unused variable" warning for 'args' input struct. If // Serial::initialize() ever needs to take arguments from the input @@ -268,6 +284,8 @@ void finalize_internal( const bool all_spaces = false ) Kokkos::Cuda::impl_finalize(); #endif } +#else + (void)all_spaces; #endif #if defined( KOKKOS_ENABLE_ROCM ) @@ -298,6 +316,15 @@ void finalize_internal( const bool all_spaces = false ) } #endif +#if defined( KOKKOS_ENABLE_HPX ) + if( std::is_same< Kokkos::Experimental::HPX , Kokkos::DefaultExecutionSpace >::value || + std::is_same< Kokkos::Experimental::HPX , Kokkos::HostSpace::execution_space >::value || + all_spaces ) { + if(Kokkos::Experimental::HPX::impl_is_initialized()) + Kokkos::Experimental::HPX::impl_finalize(); + } +#endif + #if defined( KOKKOS_ENABLE_THREADS ) if( std::is_same< Kokkos::Threads , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Threads , Kokkos::HostSpace::execution_space >::value || @@ -331,34 +358,38 @@ void fence_internal() #if defined( KOKKOS_ENABLE_CUDA ) if( std::is_same< Kokkos::Cuda , Kokkos::DefaultExecutionSpace >::value ) { - Kokkos::Cuda::fence(); + Kokkos::Cuda::impl_static_fence(); } #endif #if defined( KOKKOS_ENABLE_ROCM ) if( std::is_same< Kokkos::Experimental::ROCm , Kokkos::DefaultExecutionSpace >::value ) { - Kokkos::Experimental::ROCm::fence(); + Kokkos::Experimental::ROCm().fence(); } #endif #if defined( KOKKOS_ENABLE_OPENMP ) if( std::is_same< Kokkos::OpenMP , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::OpenMP , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::OpenMP::fence(); + Kokkos::OpenMP::impl_static_fence(); } #endif +#if defined( KOKKOS_ENABLE_HPX ) + Kokkos::Experimental::HPX::impl_static_fence(); +#endif + #if defined( KOKKOS_ENABLE_THREADS ) if( std::is_same< Kokkos::Threads , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Threads , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::Threads::fence(); + Kokkos::Threads::impl_static_fence(); } #endif #if defined( KOKKOS_ENABLE_SERIAL ) if( std::is_same< Kokkos::Serial , Kokkos::DefaultExecutionSpace >::value || std::is_same< Kokkos::Serial , Kokkos::HostSpace::execution_space >::value ) { - Kokkos::Serial::fence(); + Kokkos::Serial::impl_static_fence(); } #endif @@ -708,6 +739,12 @@ void print_configuration( std::ostream & out , const bool detail ) msg << "yes" << std::endl; #else msg << "no" << std::endl; +#endif + msg << " KOKKOS_ENABLE_HPX: "; +#ifdef KOKKOS_ENABLE_HPX + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; #endif msg << " KOKKOS_ENABLE_THREADS: "; #ifdef KOKKOS_ENABLE_THREADS @@ -957,6 +994,9 @@ void print_configuration( std::ostream & out , const bool detail ) #ifdef KOKKOS_ENABLE_OPENMP OpenMP::print_configuration(msg, detail); #endif +#ifdef KOKKOS_ENABLE_HPX + Experimental::HPX::print_configuration(msg, detail); +#endif #if defined( KOKKOS_ENABLE_THREADS ) Threads::print_configuration(msg, detail); #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_EBO.hpp b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp new file mode 100644 index 0000000000..69bb74e2c5 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp @@ -0,0 +1,343 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_EBO_HPP +#define KOKKOS_EBO_HPP + +//---------------------------------------------------------------------------- + +#include + +#include +//---------------------------------------------------------------------------- + + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +struct NotOnDeviceCtorDisambiguator { }; + +template +struct NoCtorsNotOnDevice : std::false_type { }; + +template +struct DefaultCtorNotOnDevice : std::false_type { }; + +template <> +struct DefaultCtorNotOnDevice<> : std::true_type { }; + +template class CtorNotOnDevice = NoCtorsNotOnDevice> +struct EBOBaseImpl; + +template class CtorNotOnDevice> +struct EBOBaseImpl { + + /* + * Workaround for constexpr in C++11: we need to still call T(args...), but we + * can't do so in the body of a constexpr function (in C++11), and there's no + * data member to construct into. But we can construct into an argument + * of a delegating constructor... + */ + // TODO @minor DSH the destructor gets called too early with this workaround + struct _constexpr_14_workaround_tag { }; + struct _constexpr_14_workaround_no_device_tag { }; + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(_constexpr_14_workaround_tag, T&&) noexcept { } + inline constexpr EBOBaseImpl(_constexpr_14_workaround_no_device_tag, T&&) noexcept { } + + template < + class... Args, + class _ignored = void, + typename std::enable_if< + std::is_void<_ignored>::value + && std::is_constructible::value + && !CtorNotOnDevice::value, + int + >::type = 0 + > + KOKKOS_FORCEINLINE_FUNCTION + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + // still call the constructor + : EBOBaseImpl(_constexpr_14_workaround_tag{}, T(std::forward(args)...)) + { } + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && std::is_constructible::value + && CtorNotOnDevice::value, + long + >::type = 0 + > + inline constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + // still call the constructor + : EBOBaseImpl(_constexpr_14_workaround_no_device_tag{}, T(std::forward(args)...)) + { } + + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr EBOBaseImpl(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + ~EBOBaseImpl() = default; + + KOKKOS_INLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T& _ebo_data_member() & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + constexpr + T const& _ebo_data_member() const & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + T volatile& _ebo_data_member() volatile & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + T const volatile& _ebo_data_member() const volatile & { + return *reinterpret_cast(this); + } + + KOKKOS_INLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T&& _ebo_data_member() && { + return std::move(*reinterpret_cast(this)); + } + +}; + +template class CTorsNotOnDevice> +struct EBOBaseImpl { + + T m_ebo_object; + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && !CTorsNotOnDevice::value + && std::is_constructible::value, + int + >::type = 0 + > + KOKKOS_FORCEINLINE_FUNCTION + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + : m_ebo_object(std::forward(args)...) + { } + + template < + class... Args, + class _ignored=void, + typename std::enable_if< + std::is_void<_ignored>::value + && CTorsNotOnDevice::value + && std::is_constructible::value, + long + >::type = 0 + > + inline + constexpr explicit + EBOBaseImpl( + Args&&... args + ) noexcept(noexcept(T(std::forward(args)...))) + : m_ebo_object(std::forward(args)...) + { } + + + // TODO @tasking @minor DSH noexcept in the right places? + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + EBOBaseImpl(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + EBOBaseImpl(EBOBaseImpl&&) noexcept = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl const&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + EBOBaseImpl& operator=(EBOBaseImpl&&) = default; + + KOKKOS_FORCEINLINE_FUNCTION + ~EBOBaseImpl() = default; + + KOKKOS_INLINE_FUNCTION + T& _ebo_data_member() & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T const& _ebo_data_member() const & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T volatile& _ebo_data_member() volatile & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T const volatile& _ebo_data_member() const volatile & { + return m_ebo_object; + } + + KOKKOS_INLINE_FUNCTION + T&& _ebo_data_member() && { + return m_ebo_object; + } + +}; + +/** + * + * @tparam T + */ +template class CtorsNotOnDevice=NoCtorsNotOnDevice> +struct StandardLayoutNoUniqueAddressMemberEmulation + : EBOBaseImpl::value, CtorsNotOnDevice> +{ +private: + + using ebo_base_t = EBOBaseImpl::value, CtorsNotOnDevice>; + +public: + + using ebo_base_t::ebo_base_t; + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T& no_unique_address_data_member() & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + constexpr + T const& no_unique_address_data_member() const & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + T volatile& no_unique_address_data_member() volatile & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + T const volatile& no_unique_address_data_member() const volatile & { + return this->ebo_base_t::_ebo_data_member(); + } + + KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_CONSTEXPR_14 + T&& no_unique_address_data_member() && { + return this->ebo_base_t::_ebo_data_member(); + } +}; + +/** + * + * @tparam T + */ +template class CtorsNotOnDevice=NoCtorsNotOnDevice> +class NoUniqueAddressMemberEmulation + : private StandardLayoutNoUniqueAddressMemberEmulation +{ +private: + + using base_t = StandardLayoutNoUniqueAddressMemberEmulation; + +public: + + using base_t::base_t; + using base_t::no_unique_address_data_member; + +}; + + +} // end namespace Impl +} // end namespace Kokkos + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +#endif /* #ifndef KOKKOS_EBO_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Error.hpp b/lib/kokkos/core/src/impl/Kokkos_Error.hpp index e7d5f9344c..3d634fe5d1 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Error.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Error.hpp @@ -51,6 +51,10 @@ #include #endif +#ifndef KOKKOS_ABORT_MESSAGE_BUFFER_SIZE +# define KOKKOS_ABORT_MESSAGE_BUFFER_SIZE 2048 +#endif // ifndef KOKKOS_ABORT_MESSAGE_BUFFER_SIZE + namespace Kokkos { namespace Impl { @@ -83,6 +87,50 @@ void abort( const char * const message ) { } + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + +#if !defined(NDEBUG) || defined(KOKKOS_ENFORCE_CONTRACTS) || defined(KOKKOS_DEBUG) +# define KOKKOS_EXPECTS(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Expected precondition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +# define KOKKOS_ENSURES(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Ensured postcondition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +// some projects already define this for themselves, so don't mess them up +# ifndef KOKKOS_ASSERT +# define KOKKOS_ASSERT(...) \ + { \ + if(!bool(__VA_ARGS__)) { \ + ::Kokkos::abort( \ + "Kokkos contract violation:\n " \ + " Asserted condition `" #__VA_ARGS__ "` evaluated false." \ + ); \ + } \ + } +# endif // ifndef KOKKOS_ASSERT +#else // not debug mode +# define KOKKOS_EXPECTS(...) +# define KOKKOS_ENSURES(...) +# ifndef KOKKOS_ASSERT +# define KOKKOS_ASSERT(...) +# endif // ifndef KOKKOS_ASSERT +#endif // end debug mode ifdefs + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp new file mode 100644 index 0000000000..3053d8d9d0 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp @@ -0,0 +1,307 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2019) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP +#define KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP + +#include +#include + +#include +#include + +namespace Kokkos { +namespace Impl { + +template < + class DeviceType, + size_t Size, + size_t Align=1, + class SizeType = typename DeviceType::execution_space::size_type +> +class FixedBlockSizeMemoryPool + : private MemorySpaceInstanceStorage +{ +public: + + using memory_space = typename DeviceType::memory_space; + using size_type = SizeType; + +private: + + using memory_space_storage_base = MemorySpaceInstanceStorage; + using tracker_type = Kokkos::Impl::SharedAllocationTracker; + using record_type = Kokkos::Impl::SharedAllocationRecord; + + struct alignas(Align) Block { union { char ignore; char data[Size]; }; }; + + static constexpr auto actual_size = sizeof(Block); + + // TODO shared allocation tracker + // TODO @optimization put the index values on different cache lines (CPU) or pages (GPU)? + + tracker_type m_tracker = { }; + size_type m_num_blocks = 0; + size_type m_first_free_idx = 0; + size_type m_last_free_idx = 0; + Kokkos::OwningRawPtr m_first_block = nullptr; + Kokkos::OwningRawPtr m_free_indices = nullptr; + + enum : size_type { IndexInUse = ~size_type(0) }; + +public: + + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_type num_blocks + ) : memory_space_storage_base(mem_space), + m_tracker(), + m_num_blocks(num_blocks), + m_first_free_idx(0), + m_last_free_idx(num_blocks) + { + // TODO alignment? + auto block_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(Block) + ); + KOKKOS_ASSERT(intptr_t(block_record->data()) % Align == 0); + m_tracker.assign_allocated_record_to_uninitialized(block_record); + m_first_block = (Block*)block_record->data(); + + auto idx_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(size_type) + ); + KOKKOS_ASSERT(intptr_t(idx_record->data()) % alignof(size_type) == 0); + m_tracker.assign_allocated_record_to_uninitialized(idx_record); + m_free_indices = (size_type*)idx_record->data(); + + for(size_type i = 0; i < num_blocks; ++i) { + m_free_indices[i] = i; + } + + Kokkos::memory_fence(); + } + + // For compatibility with MemoryPool<> + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_t mempool_capacity, + unsigned, unsigned, unsigned + ) : FixedBlockSizeMemoryPool(mem_space, mempool_capacity / actual_size) + { /* forwarding ctor, must be empty */ } + + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; + + + KOKKOS_INLINE_FUNCTION + void* allocate(size_type alloc_size) const noexcept + { + KOKKOS_EXPECTS(alloc_size <= Size); + auto free_idx_counter = Kokkos::atomic_fetch_add((volatile size_type*)&m_first_free_idx, size_type(1)); + auto free_idx_idx = free_idx_counter % m_num_blocks; + + // We don't have exclusive access to m_free_indices[free_idx_idx] because + // the allocate counter might have lapped us since we incremented it + auto current_free_idx = m_free_indices[free_idx_idx]; + size_type free_idx = IndexInUse; + free_idx = + Kokkos::atomic_compare_exchange(&m_free_indices[free_idx_idx], current_free_idx, free_idx); + Kokkos::memory_fence(); + + // TODO figure out how to decrement here? + + if(free_idx == IndexInUse) { + return nullptr; + } + else { + return (void*)&m_first_block[free_idx]; + } + } + + KOKKOS_INLINE_FUNCTION + void deallocate(void* ptr, size_type alloc_size) const noexcept + { + // figure out which block we are + auto offset = intptr_t(ptr) - intptr_t(m_first_block); + + KOKKOS_EXPECTS(offset % actual_size == 0 && offset/actual_size < m_num_blocks); + + Kokkos::memory_fence(); + auto last_idx_idx = Kokkos::atomic_fetch_add((volatile size_type*)&m_last_free_idx, size_type(1)); + last_idx_idx %= m_num_blocks; + m_free_indices[last_idx_idx] = offset / actual_size; + } + +}; + +#if 0 +template < + class DeviceType, + size_t Size, + size_t Align=1, + class SizeType = typename DeviceType::execution_space::size_type +> +class FixedBlockSizeChaseLevMemoryPool + : private MemorySpaceInstanceStorage +{ +public: + + using memory_space = typename DeviceType::memory_space; + using size_type = SizeType; + +private: + + using memory_space_storage_base = MemorySpaceInstanceStorage; + using tracker_type = Kokkos::Impl::SharedAllocationTracker; + using record_type = Kokkos::Impl::SharedAllocationRecord; + + struct alignas(Align) Block { union { char ignore; char data[Size]; }; }; + + static constexpr auto actual_size = sizeof(Block); + + tracker_type m_tracker = { }; + size_type m_num_blocks = 0; + size_type m_first_free_idx = 0; + size_type m_last_free_idx = 0; + + + enum : size_type { IndexInUse = ~size_type(0) }; + +public: + + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_type num_blocks + ) : memory_space_storage_base(mem_space), + m_tracker(), + m_num_blocks(num_blocks), + m_first_free_idx(0), + m_last_free_idx(num_blocks) + { + // TODO alignment? + auto block_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(Block) + ); + KOKKOS_ASSERT(intptr_t(block_record->data()) % Align == 0); + m_tracker.assign_allocated_record_to_uninitialized(block_record); + m_first_block = (Block*)block_record->data(); + + auto idx_record = record_type::allocate( + mem_space, "FixedBlockSizeMemPool_blocks", num_blocks * sizeof(size_type) + ); + KOKKOS_ASSERT(intptr_t(idx_record->data()) % alignof(size_type) == 0); + m_tracker.assign_allocated_record_to_uninitialized(idx_record); + m_free_indices = (size_type*)idx_record->data(); + + for(size_type i = 0; i < num_blocks; ++i) { + m_free_indices[i] = i; + } + + Kokkos::memory_fence(); + } + + // For compatibility with MemoryPool<> + FixedBlockSizeMemoryPool( + memory_space const& mem_space, + size_t mempool_capacity, + unsigned, unsigned, unsigned + ) : FixedBlockSizeMemoryPool(mem_space, mempool_capacity / actual_size) + { /* forwarding ctor, must be empty */ } + + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; + + + KOKKOS_INLINE_FUNCTION + void* allocate(size_type alloc_size) const noexcept + { + KOKKOS_EXPECTS(alloc_size <= Size); + auto free_idx_counter = Kokkos::atomic_fetch_add((volatile size_type*)&m_first_free_idx, size_type(1)); + auto free_idx_idx = free_idx_counter % m_num_blocks; + + // We don't have exclusive access to m_free_indices[free_idx_idx] because + // the allocate counter might have lapped us since we incremented it + auto current_free_idx = m_free_indices[free_idx_idx]; + size_type free_idx = IndexInUse; + free_idx = + Kokkos::atomic_compare_exchange(&m_free_indices[free_idx_idx], current_free_idx, free_idx); + Kokkos::memory_fence(); + + // TODO figure out how to decrement here? + + if(free_idx == IndexInUse) { + return nullptr; + } + else { + return (void*)&m_first_block[free_idx]; + } + } + + KOKKOS_INLINE_FUNCTION + void deallocate(void* ptr, size_type alloc_size) const noexcept + { + // figure out which block we are + auto offset = intptr_t(ptr) - intptr_t(m_first_block); + + KOKKOS_EXPECTS(offset % actual_size == 0 && offset/actual_size < m_num_blocks); + + Kokkos::memory_fence(); + auto last_idx_idx = Kokkos::atomic_fetch_add((volatile size_type*)&m_last_free_idx, size_type(1)); + last_idx_idx %= m_num_blocks; + m_free_indices[last_idx_idx] = offset / actual_size; + } + +}; +#endif + +} // end namespace Impl +} // end namespace Kokkos + +#endif //KOKKOS_IMPL_KOKKOS_FIXEDBUFFERMEMORYPOOL_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp index 7d4ffb85c1..ea3480b48b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp @@ -1432,7 +1432,10 @@ namespace Impl { template struct JoinLambdaAdapter::enable_if( & JoinOp::join ) )> { typedef ValueType value_type; - typedef StaticAssertSame assert_value_types_match; + static_assert( + std::is_same::value, + "JoinLambdaAdapter static_assert Fail: ValueType != JoinOp::value_type"); + const JoinOp& lambda; KOKKOS_INLINE_FUNCTION JoinLambdaAdapter(const JoinOp& lambda_):lambda(lambda_) {} diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp index d8cb7593bf..848746d265 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp @@ -420,15 +420,19 @@ SharedAllocationRecord< Kokkos::HostSpace , void >::get_record( void * alloc_ptr } // Iterate records to print orphaned memory ... +#ifdef KOKKOS_DEBUG void SharedAllocationRecord< Kokkos::HostSpace , void >:: print_records( std::ostream & s , const Kokkos::HostSpace & , bool detail ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord< void , void >::print_host_accessible_records( s , "HostSpace" , & s_root_record , detail ); -#else - throw_runtime_exception("SharedAllocationRecord::print_records only works with KOKKOS_DEBUG enabled"); -#endif } +#else +void SharedAllocationRecord< Kokkos::HostSpace , void >:: +print_records( std::ostream & , const Kokkos::HostSpace & , bool ) +{ + throw_runtime_exception("SharedAllocationRecord::print_records only works with KOKKOS_DEBUG enabled"); +} +#endif } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp new file mode 100644 index 0000000000..21b95f6985 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.cpp @@ -0,0 +1,134 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include "Kokkos_Core.hpp" +#include "Kokkos_HostSpace_deepcopy.hpp" + +namespace Kokkos { + +namespace Impl { + +#ifndef KOKKOS_IMPL_HOST_DEEP_COPY_SERIAL_LIMIT +#define KOKKOS_IMPL_HOST_DEEP_COPY_SERIAL_LIMIT 10*8192 +#endif + +void hostspace_parallel_deepcopy(void * dst, const void * src, ptrdiff_t n) { + if((n policy_t; + + // Both src and dst are aligned the same way with respect to 8 byte words + if(reinterpret_cast(src)%8 == reinterpret_cast(dst)%8) { + char* dst_c = reinterpret_cast(dst); + const char* src_c = reinterpret_cast(src); + int count = 0; + // get initial bytes copied + while(reinterpret_cast(dst_c)%8!=0) { + *dst_c=*src_c; + dst_c++; src_c++; count++; + } + + // copy the bulk of the data + double* dst_p = reinterpret_cast(dst_c); + const double* src_p = reinterpret_cast(src_c); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_double",policy_t(0,(n-count)/8),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + + // get final data copied + dst_c += ((n-count)/8) * 8; + src_c += ((n-count)/8) * 8; + char* dst_end = reinterpret_cast(dst)+n; + while(dst_c != dst_end) { + *dst_c = *src_c; + dst_c++; src_c++; + } + return; + } + + // Both src and dst are aligned the same way with respect to 4 byte words + if(reinterpret_cast(src)%4 == reinterpret_cast(dst)%4) { + char* dst_c = reinterpret_cast(dst); + const char* src_c = reinterpret_cast(src); + int count = 0; + // get initial bytes copied + while(reinterpret_cast(dst_c)%4!=0) { + *dst_c=*src_c; + dst_c++; src_c++; count++; + } + + // copy the bulk of the data + int32_t* dst_p = reinterpret_cast(dst_c); + const int32_t* src_p = reinterpret_cast(src_c); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_int",policy_t(0,(n-count)/4),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + + // get final data copied + dst_c += ((n-count)/4) * 4; + src_c += ((n-count)/4) * 4; + char* dst_end = reinterpret_cast(dst)+n; + while(dst_c != dst_end) { + *dst_c = *src_c; + dst_c++; src_c++; + } + return; + } + + // Src and dst are not aligned the same way, we can only to byte wise copy. + { + char* dst_p = reinterpret_cast(dst); + const char* src_p = reinterpret_cast(src); + Kokkos::parallel_for("Kokkos::Impl::host_space_deepcopy_char",policy_t(0,n),[=](const ptrdiff_t i) { + dst_p[i] = src_p[i]; + }); + } +} + +} // namespace Impl + +} // namespace Kokkos + diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp new file mode 100644 index 0000000000..b8aea95363 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace_deepcopy.hpp @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ +#include + +namespace Kokkos { + +namespace Impl { + +void hostspace_parallel_deepcopy(void * dst, const void * src, ptrdiff_t n); + +} // namespace Impl + +} // namespace Kokkos + diff --git a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp index fff48e87f6..f44a13c574 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp @@ -52,6 +52,8 @@ #include #include +#include // std::numeric_limits + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -477,6 +479,9 @@ class HostThreadTeamMember { public: using scratch_memory_space = typename HostExecSpace::scratch_memory_space ; + using execution_space = HostExecSpace; + using thread_team_member = HostThreadTeamMember; + using host_thread_team_member = HostThreadTeamMember; private: @@ -490,8 +495,8 @@ public: constexpr HostThreadTeamMember( HostThreadTeamData & arg_data ) noexcept : m_scratch( arg_data.team_shared() , arg_data.team_shared_bytes() ) , m_data( arg_data ) - , m_league_rank(0) - , m_league_size(1) + , m_league_rank(arg_data.m_league_rank) + , m_league_size(arg_data.m_league_size) {} constexpr HostThreadTeamMember( HostThreadTeamData & arg_data @@ -630,6 +635,12 @@ public: KOKKOS_INLINE_FUNCTION typename std::enable_if< is_reducer< ReducerType >::value >::type team_reduce( ReducerType const & reducer ) const noexcept + { team_reduce(reducer,reducer.reference()); } + + template< typename ReducerType > + KOKKOS_INLINE_FUNCTION + typename std::enable_if< is_reducer< ReducerType >::value >::type + team_reduce( ReducerType const & reducer, typename ReducerType::value_type contribution ) const noexcept #if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) { if ( 1 < m_data.m_team_size ) { @@ -640,7 +651,7 @@ public: // Non-root copies to their local buffer: /*reducer.copy( (value_type*) m_data.team_reduce_local() , reducer.data() );*/ - *((value_type*) m_data.team_reduce_local()) = reducer.reference(); + *((value_type*) m_data.team_reduce_local()) = contribution; } // Root does not overwrite shared memory until all threads arrive @@ -656,12 +667,13 @@ public: value_type * const src = (value_type*) m_data.team_member(i)->team_reduce_local(); - reducer.join( reducer.reference(), *src); + reducer.join( contribution, *src); } // Copy result to root member's buffer: // reducer.copy( (value_type*) m_data.team_reduce() , reducer.data() ); - *((value_type*) m_data.team_reduce()) = reducer.reference(); + *((value_type*) m_data.team_reduce()) = contribution; + reducer.reference() = contribution; m_data.team_rendezvous_release(); // This thread released all other threads from 'team_rendezvous' // with a return value of 'false' @@ -670,6 +682,8 @@ public: // Copy from root member's buffer: reducer.reference() = *((value_type*) m_data.team_reduce()); } + } else { + reducer.reference() = contribution; } } #else @@ -795,50 +809,105 @@ public: namespace Kokkos { -template +template KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct > -TeamThreadRange( Impl::HostThreadTeamMember const & member - , iType const & count ) +Impl::TeamThreadRangeBoundariesStruct +TeamThreadRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { return Impl::TeamThreadRangeBoundariesStruct - >(member,0,count); + (member,0,count); } -template +template KOKKOS_INLINE_FUNCTION -Impl::TeamThreadRangeBoundariesStruct - < typename std::common_type< iType1, iType2 >::type - , Impl::HostThreadTeamMember > -TeamThreadRange( Impl::HostThreadTeamMember const & member - , iType1 const & begin , iType2 const & end ) +Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type< iType1, iType2 >::type, Member +> +TeamThreadRange( + Member const & member, + iType1 begin, + iType2 end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { return Impl::TeamThreadRangeBoundariesStruct < typename std::common_type< iType1, iType2 >::type - , Impl::HostThreadTeamMember >( member , begin , end ); + , Member >( member , begin , end ); } -template +template KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange - ( Impl::HostThreadTeamMember const & member - , const iType & count ) +Impl::TeamThreadRangeBoundariesStruct +TeamVectorRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { - return Impl::ThreadVectorRangeBoundariesStruct >(member,count); + return + Impl::TeamThreadRangeBoundariesStruct + (member,0,count); } -template +template KOKKOS_INLINE_FUNCTION -Impl::ThreadVectorRangeBoundariesStruct > -ThreadVectorRange - ( Impl::HostThreadTeamMember const & member - , const iType & arg_begin - , const iType & arg_end ) +Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type< iType1, iType2 >::type, Member +> +TeamVectorRange( + Member const & member, + iType1 begin, + iType2 end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) { - return Impl::ThreadVectorRangeBoundariesStruct >(member,arg_begin,arg_end); + return + Impl::TeamThreadRangeBoundariesStruct + < typename std::common_type< iType1, iType2 >::type + , Member >( member , begin , end ); +} + +template +KOKKOS_INLINE_FUNCTION +Impl::ThreadVectorRangeBoundariesStruct +ThreadVectorRange( + Member const & member, + iType count, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) +{ + return Impl::ThreadVectorRangeBoundariesStruct(member,count); +} + +template +KOKKOS_INLINE_FUNCTION +Impl::ThreadVectorRangeBoundariesStruct +ThreadVectorRange( + Member const & member, + iType arg_begin, + iType arg_end, + typename std::enable_if< + Impl::is_thread_team_member::value + >::type const** = nullptr +) +{ + return Impl::ThreadVectorRangeBoundariesStruct(member,arg_begin,arg_end); } //---------------------------------------------------------------------------- @@ -848,11 +917,14 @@ ThreadVectorRange * * The range [0..N) is mapped to all threads of the the calling thread team. */ -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( Impl::TeamThreadRangeBoundariesStruct > const & loop_boundaries + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure + , typename std::enable_if< + Impl::is_host_thread_team_member::value + >::type const** = nullptr ) { for( iType i = loop_boundaries.start @@ -862,11 +934,14 @@ void parallel_for } } -template +template KOKKOS_INLINE_FUNCTION void parallel_for - ( Impl::ThreadVectorRangeBoundariesStruct > const & loop_boundaries + ( Impl::ThreadVectorRangeBoundariesStruct const & loop_boundaries , Closure const & closure + , typename std::enable_if< + Impl::is_host_thread_team_member::value + >::type const** = nullptr ) { #ifdef KOKKOS_ENABLE_PRAGMA_IVDEP @@ -881,40 +956,47 @@ void parallel_for //---------------------------------------------------------------------------- -template< typename iType, class Space, class Closure, class Reducer > +template< typename iType, class Closure, class Reducer, class Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< Kokkos::is_reducer< Reducer >::value >::type +typename std::enable_if< + Kokkos::is_reducer< Reducer >::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - ( Impl::TeamThreadRangeBoundariesStruct > + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure , Reducer const & reducer ) { - reducer.init( reducer.reference() ); + typename Reducer::value_type value; + reducer.init( value ); for( iType i = loop_boundaries.start ; i < loop_boundaries.end ; i += loop_boundaries.increment ) { - closure( i , reducer.reference() ); + closure( i , value ); } - - loop_boundaries.thread.team_reduce( reducer ); + + loop_boundaries.thread.team_reduce( reducer, value ); } -template< typename iType, class Space, typename Closure, typename ValueType > +template< typename iType, typename Closure, typename ValueType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< ! Kokkos::is_reducer::value >::type +typename std::enable_if< + ! Kokkos::is_reducer::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - ( Impl::TeamThreadRangeBoundariesStruct > + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure , ValueType & result ) { - Sum reducer( result ); - - reducer.init( result ); + ValueType val; + Sum reducer( val ); + reducer.init( val ); for( iType i = loop_boundaries.start ; i < loop_boundaries.end @@ -923,6 +1005,7 @@ parallel_reduce } loop_boundaries.thread.team_reduce( reducer ); + result = reducer.reference(); } /*template< typename iType, class Space @@ -958,11 +1041,14 @@ void parallel_reduce * calling thread team and a summation of val is * performed and put into result. */ -template< typename iType, class Space , class Lambda, typename ValueType > +template< typename iType, class Lambda, typename ValueType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< ! Kokkos::is_reducer::value >::type +typename std::enable_if< + ! Kokkos::is_reducer::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, ValueType& result) { @@ -974,11 +1060,14 @@ parallel_reduce } } -template< typename iType, class Space , class Lambda, typename ReducerType > +template< typename iType, class Lambda, typename ReducerType, typename Member > KOKKOS_INLINE_FUNCTION -typename std::enable_if< Kokkos::is_reducer< ReducerType >::value >::type +typename std::enable_if< + Kokkos::is_reducer< ReducerType >::value + && Impl::is_host_thread_team_member::value +>::type parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, + (const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Lambda & lambda, const ReducerType& reducer) { @@ -990,41 +1079,15 @@ parallel_reduce } } -/** \brief Intra-thread vector parallel_reduce. - * - * Executes lambda(iType i, ValueType & val) for each i=[0..N) - * - * The range [0..N) is mapped to all vector lanes of the the - * calling thread and a reduction of val is performed using - * JoinType(ValueType& val, const ValueType& update) - * and put into init_result. - * The input value of init_result is used as initializer for - * temporary variables of ValueType. Therefore * the input - * value should be the neutral element with respect to the - * join operation (e.g. '0 for +-' or * '1 for *'). - */ -template< typename iType, class Space - , class Lambda, class JoinType , typename ValueType > -KOKKOS_INLINE_FUNCTION -void parallel_reduce - (const Impl::ThreadVectorRangeBoundariesStruct >& loop_boundaries, - const Lambda & lambda, - const JoinType & join, - ValueType& result) -{ - for( iType i = loop_boundaries.start ; - i < loop_boundaries.end ; - i += loop_boundaries.increment ) { - lambda(i,result); - } -} - //---------------------------------------------------------------------------- -template< typename iType, class Space, class Closure > +template< typename iType, class Closure, class Member > KOKKOS_INLINE_FUNCTION -void parallel_scan - ( Impl::TeamThreadRangeBoundariesStruct > const & loop_boundaries +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +parallel_scan + ( Impl::TeamThreadRangeBoundariesStruct const & loop_boundaries , Closure const & closure ) { @@ -1056,10 +1119,13 @@ void parallel_scan } -template< typename iType, class Space, class ClosureType > +template< typename iType, class ClosureType, class Member > KOKKOS_INLINE_FUNCTION -void parallel_scan - ( Impl::ThreadVectorRangeBoundariesStruct > const & loop_boundaries +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +parallel_scan + ( Impl::ThreadVectorRangeBoundariesStruct const & loop_boundaries , ClosureType const & closure ) { @@ -1083,47 +1149,65 @@ void parallel_scan //---------------------------------------------------------------------------- -template< class Space > +template< class Member > KOKKOS_INLINE_FUNCTION -Impl::ThreadSingleStruct > -PerTeam(const Impl::HostThreadTeamMember & member ) +Impl::ThreadSingleStruct +PerTeam( + Member const& member, + typename std::enable_if::value>::type const** = nullptr +) { - return Impl::ThreadSingleStruct >(member); + return Impl::ThreadSingleStruct(member); } -template< class Space > +template< class Member > KOKKOS_INLINE_FUNCTION -Impl::VectorSingleStruct > -PerThread(const Impl::HostThreadTeamMember & member) +Impl::VectorSingleStruct +PerThread( + Member const& member, + typename std::enable_if::value>::type const** = nullptr +) { - return Impl::VectorSingleStruct >(member); + return Impl::VectorSingleStruct(member); } -template< class Space , class FunctorType > +template< class Member , class FunctorType > KOKKOS_INLINE_FUNCTION -void single( const Impl::ThreadSingleStruct< Impl::HostThreadTeamMember > & single , const FunctorType & functor ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::ThreadSingleStruct & single , const FunctorType & functor ) { // 'single' does not perform a barrier. if ( single.team_member.team_rank() == 0 ) functor(); } -template< class Space , class FunctorType , typename ValueType > +template< class Member, class FunctorType , typename ValueType > KOKKOS_INLINE_FUNCTION -void single( const Impl::ThreadSingleStruct< Impl::HostThreadTeamMember > & single , const FunctorType & functor , ValueType & val ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::ThreadSingleStruct & single , const FunctorType & functor , ValueType & val ) { single.team_member.team_broadcast( functor , val , 0 ); } -template< class Space , class FunctorType > +template< class Member, class FunctorType > KOKKOS_INLINE_FUNCTION -void single( const Impl::VectorSingleStruct< Impl::HostThreadTeamMember > & , const FunctorType & functor ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::VectorSingleStruct & , const FunctorType & functor ) { functor(); } -template< class Space , class FunctorType , typename ValueType > +template< class Member, class FunctorType , typename ValueType > KOKKOS_INLINE_FUNCTION -void single( const Impl::VectorSingleStruct< Impl::HostThreadTeamMember > & , const FunctorType & functor , ValueType & val ) +typename std::enable_if< + Impl::is_host_thread_team_member::value +>::type +single( const Impl::VectorSingleStruct & , const FunctorType & functor , ValueType & val ) { functor(val); } diff --git a/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp new file mode 100644 index 0000000000..43e9783beb --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp @@ -0,0 +1,431 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LIFO_HPP +#define KOKKOS_IMPL_LIFO_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS +#include + +#include // atomic_compare_exchange, atomic_fence + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +struct LockBasedLIFOCommon +{ + + using value_type = T; + + using node_type = SimpleSinglyLinkedListNode<>; + + static constexpr uintptr_t LockTag = ~uintptr_t(0); + static constexpr uintptr_t EndTag = ~uintptr_t(1); + + OwningRawPtr m_head = (node_type*)EndTag; + + KOKKOS_INLINE_FUNCTION + bool _try_push_node(node_type& node) { + + KOKKOS_EXPECTS(!node.is_enqueued()); + + auto* volatile & next = LinkedListNodeAccess::next_ptr(node); + + // store the head of the queue in a local variable + auto* old_head = m_head; + + // retry until someone locks the queue or we successfully compare exchange + while (old_head != (node_type*)LockTag) { + + // TODO @tasking @memory_order DSH this should have a memory order and not a memory fence + + // set task->next to the head of the queue + next = old_head; + + // fence to emulate acquire semantics on next and release semantics on + // the store of m_head + // Do not proceed until 'next' has been stored. + Kokkos::memory_fence(); + + // store the old head + auto* const old_head_tmp = old_head; + + // attempt to swap task with the old head of the queue + // as if this were done atomically: + // if(m_head == old_head) { + // m_head = &node; + // } + // old_head = m_head; + old_head = ::Kokkos::atomic_compare_exchange(&m_head, old_head, &node); + + if(old_head_tmp == old_head) return true; + } + + // Failed, replace 'task->m_next' value since 'task' remains + // not a member of a queue. + + // TODO @tasking @memory_order DSH this should have a memory order and not a memory fence + LinkedListNodeAccess::mark_as_not_enqueued(node); + + // fence to emulate acquire semantics on next + // Do not proceed until 'next' has been stored. + ::Kokkos::memory_fence(); + + return false; + } + + bool _is_empty() const noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return (volatile node_type*)this->m_head == (node_type*)EndTag; + } + +}; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +template +class LockBasedLIFO + : private LockBasedLIFOCommon +{ + +private: + + using base_t = LockBasedLIFOCommon; + using node_type = typename base_t::node_type; + +public: + + using value_type = typename base_t::value_type; // = T + using intrusive_node_base_type = SimpleSinglyLinkedListNode<>; + +public: + + + LockBasedLIFO() = default; + LockBasedLIFO(LockBasedLIFO const&) = delete; + LockBasedLIFO(LockBasedLIFO&&) = delete; + LockBasedLIFO& operator=(LockBasedLIFO const&) = delete; + LockBasedLIFO& operator=(LockBasedLIFO&&) = delete; + + ~LockBasedLIFO() = default; + + + bool empty() const noexcept { + // TODO @tasking @memory_order DSH memory order + return this->_is_empty(); + } + + KOKKOS_INLINE_FUNCTION + OptionalRef pop(bool abort_on_locked = false) + { + // Put this in here to avoid requiring value_type to be complete until now. + static_assert( + std::is_base_of::value, + "Intrusive linked-list value_type must be derived from intrusive_node_base_type" + ); + + // We can't use the static constexpr LockTag directly because + // atomic_compare_exchange needs to bind a reference to that, and you + // can't do that with static constexpr variables. + auto* const lock_tag = (node_type*)base_t::LockTag; + + // TODO @tasking @memory_order DSH shouldn't this be a relaxed atomic load? + // start with the return value equal to the head + auto* rv = this->m_head; + + // Retry until the lock is acquired or the queue is empty. + while(rv != (node_type*)base_t::EndTag) { + + // The only possible values for the queue are + // (1) lock, (2) end, or (3) a valid task. + // Thus zero will never appear in the queue. + // + // If queue is locked then just read by guaranteeing the CAS will fail. + KOKKOS_ASSERT(rv != nullptr); + + if(rv == lock_tag) { + // TODO @tasking @memory_order DSH this should just be an atomic load followed by a continue + // just set rv to nullptr for now, effectively turning the + // atomic_compare_exchange below into a load + rv = nullptr; + if(abort_on_locked) { + break; + } + } + + auto* const old_rv = rv; + + // TODO @tasking @memory_order DSH this should be a weak compare exchange in a loop + rv = Kokkos::atomic_compare_exchange(&(this->m_head), old_rv, lock_tag); + + if(rv == old_rv) { + // CAS succeeded and queue is locked + // + // This thread has locked the queue and removed 'rv' from the queue. + // Extract the next entry of the queue from 'rv->m_next' + // and mark 'rv' as popped from a queue by setting + // 'rv->m_next = nullptr'. + // + // Place the next entry in the head of the queue, + // which also unlocks the queue. + // + // This thread has exclusive access to + // the queue and the popped task's m_next. + + // TODO @tasking @memory_order DSH check whether the volatile is needed here + auto* volatile& next = LinkedListNodeAccess::next_ptr(*rv); //->m_next; + + // This algorithm is not lockfree because a adversarial scheduler could + // context switch this thread at this point and the rest of the threads + // calling this method would never make forward progress + + // TODO @tasking @memory_order DSH I think this needs to be a atomic store release (and the memory fence needs to be removed) + // TODO @tasking DSH prove that this doesn't need to be a volatile store + // Lock is released here + this->m_head = next; + + // Mark rv as popped by assigning nullptr to the next + LinkedListNodeAccess::mark_as_not_enqueued(*rv); + + Kokkos::memory_fence(); + + return OptionalRef{ *static_cast(rv) }; + } + + // Otherwise, the CAS got a value that didn't match (either because + // another thread locked the queue and we observed the lock tag or because + // another thread replaced the head and now we want to try to lock the + // queue with that as the popped item. Either way, try again. + } + + // Return an empty OptionalRef by calling the default constructor + return { }; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + steal() + { + // TODO @tasking @optimization DSH do this with fewer retries + return pop(/* abort_on_locked = */ true); + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type& node) + { + while(!this->_try_push_node(node)) { /* retry until success */ } + // for consistency with push interface on other queue types: + return true; + } + + KOKKOS_INLINE_FUNCTION + bool push(node_type&& node) + { + // Just forward to the lvalue version + return push(node); + } + +}; + + +/** @brief A Multiple Producer, Single Consumer Queue with some special semantics + * + * This multi-producer, single consumer queue has the following semantics: + * + * - Any number of threads may call `try_emplace`/`try_push` + * + These operations are lock-free. + * - Exactly one thread calls `consume()`, and the call occurs exactly once + * in the lifetime of the queue. + * + This operation is lock-free (and wait-free w.r.t. producers) + * - Any calls to `try_push` that happen-before the call to + * `consume()` will succeed and return an true, such that the `consume()` + * call will visit that node. + * - Any calls to `try_push` for which the single call to `consume()` + * happens-before those calls will return false and the node given as + * an argument to `try_push` will not be visited by consume() + * + * + * @tparam T The type of items in the queue + * + */ +template +class SingleConsumeOperationLIFO + : private LockBasedLIFOCommon +{ +private: + + using base_t = LockBasedLIFOCommon; + using node_type = typename base_t::node_type; + + // Allows us to reuse the existing infrastructure for + static constexpr auto ConsumedTag = base_t::LockTag; + +public: + + using value_type = typename base_t::value_type; // = T + + KOKKOS_INLINE_FUNCTION + SingleConsumeOperationLIFO() noexcept = default; + + SingleConsumeOperationLIFO(SingleConsumeOperationLIFO const&) = delete; + SingleConsumeOperationLIFO(SingleConsumeOperationLIFO&&) = delete; + SingleConsumeOperationLIFO& operator=(SingleConsumeOperationLIFO const&) = delete; + SingleConsumeOperationLIFO& operator=(SingleConsumeOperationLIFO&&) = delete; + + KOKKOS_INLINE_FUNCTION + ~SingleConsumeOperationLIFO() = default; + + KOKKOS_INLINE_FUNCTION + bool empty() const noexcept { + // TODO @tasking @memory_order DSH memory order + return this->_is_empty(); + } + + KOKKOS_INLINE_FUNCTION + bool is_consumed() const noexcept { + // TODO @tasking @memory_order DSH memory order? + return this->m_head == (node_type*)ConsumedTag; + } + + KOKKOS_INLINE_FUNCTION + bool try_push(node_type& node) + { + return this->_try_push_node(node); + // Ensures: (return value is true) || (node.is_enqueued() == false); + } + + template + KOKKOS_INLINE_FUNCTION + void consume(Function&& f) { + auto* const consumed_tag = (node_type*)ConsumedTag; + + // Swap the Consumed tag into the head of the queue: + + // (local variable used for assertion only) + // TODO @tasking @memory_order DSH this should have memory order release, I think + Kokkos::memory_fence(); + auto old_head = Kokkos::atomic_exchange(&(this->m_head), consumed_tag); + + // Assert that the queue wasn't consumed before this + // This can't be an expects clause because the acquire fence on the read + // would be a side-effect + KOKKOS_ASSERT(old_head != consumed_tag); + + // We now have exclusive access to the queue; loop over it and call + // the user function + while(old_head != (node_type*)base_t::EndTag) { + + // get the Node to make the call with + auto* call_arg = old_head; + + // advance the head + old_head = LinkedListNodeAccess::next_ptr(*old_head); + + // Mark as popped before proceeding + LinkedListNodeAccess::mark_as_not_enqueued(*call_arg); + + // Call the user function + auto& arg = *static_cast(call_arg); + f(std::move(arg)); + + } + + } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct TaskQueueTraitsLockBased +{ + + // TODO @tasking @documentation DSH document what concepts these match + + template + using ready_queue_type = LockBasedLIFO; + + template + using waiting_queue_type = SingleConsumeOperationLIFO; + + template + using intrusive_task_base_type = + typename ready_queue_type::intrusive_node_base_type; + + static constexpr auto ready_queue_insertion_may_fail = false; + +}; + + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LIFO_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp new file mode 100644 index 0000000000..78a6faca90 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp @@ -0,0 +1,206 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_LINKEDLISTNODE_HPP +#define KOKKOS_IMPL_LINKEDLISTNODE_HPP + +#include +#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using CUDA + +#include + +#include +#include +#include // KOKKOS_EXPECTS + +#include // atomic_compare_exchange, atomic_fence + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +struct LinkedListNodeAccess; + +template < + uintptr_t NotEnqueuedValue = 0, + template class PointerTemplate = std::add_pointer +> +struct SimpleSinglyLinkedListNode +{ + +private: + + using pointer_type = typename PointerTemplate::type; + + pointer_type m_next = reinterpret_cast(NotEnqueuedValue); + + // These are private because they are an implementation detail of the queue + // and should not get added to the value type's interface via the intrusive + // wrapper. + + KOKKOS_INLINE_FUNCTION + void mark_as_not_enqueued() noexcept { + // TODO @tasking @memory_order DSH make this an atomic store with memory order + m_next = (pointer_type)NotEnqueuedValue; + } + + KOKKOS_INLINE_FUNCTION + void mark_as_not_enqueued() volatile noexcept { + // TODO @tasking @memory_order DSH make this an atomic store with memory order + m_next = (pointer_type)NotEnqueuedValue; + } + + KOKKOS_INLINE_FUNCTION + pointer_type& _next_ptr() noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type volatile& _next_ptr() volatile noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type const& _next_ptr() const noexcept { + return m_next; + } + + KOKKOS_INLINE_FUNCTION + pointer_type const volatile& _next_ptr() const volatile noexcept { + return m_next; + } + + friend struct LinkedListNodeAccess; + +public: + + // KOKKOS_CONSTEXPR_14 + KOKKOS_INLINE_FUNCTION + bool is_enqueued() const noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return m_next != reinterpret_cast(NotEnqueuedValue); + } + + // KOKKOS_CONSTEXPR_14 + KOKKOS_INLINE_FUNCTION + bool is_enqueued() const volatile noexcept { + // TODO @tasking @memory_order DSH make this an atomic load with memory order + return m_next != reinterpret_cast(NotEnqueuedValue); + } + +}; + +/// Attorney for LinkedListNode, since user types inherit from it +struct LinkedListNodeAccess +{ + + template + KOKKOS_INLINE_FUNCTION + static void mark_as_not_enqueued(Node& node) noexcept { + node.mark_as_not_enqueued(); + } + + template + KOKKOS_INLINE_FUNCTION + static void mark_as_not_enqueued(Node volatile& node) noexcept { + node.mark_as_not_enqueued(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node volatile& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + next_ptr(Node const& node) noexcept { + return node._next_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + prev_ptr(Node& node) noexcept { + return node._prev_ptr(); + } + + template + KOKKOS_INLINE_FUNCTION + static + typename Node::pointer_type& + prev_ptr(Node const& node) noexcept { + return node._prev_ptr(); + } + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* defined KOKKOS_ENABLE_TASKDAG */ +#endif /* #ifndef KOKKOS_IMPL_LINKEDLISTNODE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp new file mode 100644 index 0000000000..b4629df5b0 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp @@ -0,0 +1,140 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP +#define KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP + +#include + +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +template +class MemoryPoolAllocator { +public: + + using memory_pool = MemoryPool; + +private: + + memory_pool m_pool; + +public: + + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator() = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator(MemoryPoolAllocator const&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator(MemoryPoolAllocator&&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator& operator=(MemoryPoolAllocator const&) = default; + KOKKOS_INLINE_FUNCTION + MemoryPoolAllocator& operator=(MemoryPoolAllocator&&) = default; + KOKKOS_INLINE_FUNCTION + ~MemoryPoolAllocator() = default; + + KOKKOS_INLINE_FUNCTION + explicit MemoryPoolAllocator(memory_pool const& arg_pool) : m_pool(arg_pool) { } + KOKKOS_INLINE_FUNCTION + explicit MemoryPoolAllocator(memory_pool&& arg_pool) : m_pool(std::move(arg_pool)) { } + +public: + + using value_type = T; + using pointer = T*; + using size_type = typename MemoryPool::memory_space::size_type; + using difference_type = typename std::make_signed::type; + + template + struct rebind { + using other = MemoryPoolAllocator; + }; + + KOKKOS_INLINE_FUNCTION + pointer allocate(size_t n) { + void* rv = m_pool.allocate(n * sizeof(T)); + if(rv == nullptr) { + Kokkos::abort("Kokkos MemoryPool allocator failed to allocate memory"); + } + return reinterpret_cast(rv); + } + + KOKKOS_INLINE_FUNCTION + void deallocate(T* ptr, size_t n) { + m_pool.deallocate(ptr, n * sizeof(T)); + } + + KOKKOS_INLINE_FUNCTION + size_type max_size() const { + return m_pool.max_block_size(); + } + + KOKKOS_INLINE_FUNCTION + bool operator==(MemoryPoolAllocator const& other) const { + return m_pool == other.m_pool; + } + + KOKKOS_INLINE_FUNCTION + bool operator!=(MemoryPoolAllocator const& other) const { + return !(*this == other); + } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_MEMORYPOOLALLOCATOR_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp new file mode 100644 index 0000000000..ed8d2be5ae --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp @@ -0,0 +1,616 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP +#define KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +// A *non*-concurrent linked list of tasks that failed to be enqueued +// (We can't reuse the wait queue for this because of the semantics of that +// queue that require it to be popped exactly once, and if a task has failed +// to be enqueued, it has already been marked ready) +template +struct FailedQueueInsertionLinkedListSchedulingInfo { + using task_base_type = TaskNode; + task_base_type* next = nullptr; +}; + +struct EmptyTaskSchedulingInfo { }; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class MultipleTaskQueue; + +template +struct MultipleTaskQueueTeamEntry { +public: + + using task_base_type = TaskNode; + using runnable_task_base_type = RunnableTaskBase; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + using task_queue_traits = TaskQueueTraits; + using task_scheduling_info_type = typename std::conditional< + TaskQueueTraits::ready_queue_insertion_may_fail, + FailedQueueInsertionLinkedListSchedulingInfo, + EmptyTaskSchedulingInfo + >::type; + +private: + + // Number of allowed priorities + static constexpr int NumPriorities = 3; + + ready_queue_type m_ready_queues[NumPriorities][2]; + + task_base_type* m_failed_heads[NumPriorities][2]; + + KOKKOS_INLINE_FUNCTION + task_base_type*& + failed_head_for(runnable_task_base_type const& task) + { + return m_failed_heads[int(task.get_priority())][int(task.get_task_type())]; + } + + template + KOKKOS_INLINE_FUNCTION + OptionalRef + _pop_failed_insertion( + int priority, TaskType type, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) { + auto* rv_ptr = m_failed_heads[priority][(int)type]; + if(rv_ptr) { + m_failed_heads[priority][(int)type] = + rv_ptr->as_runnable_task() + .template scheduling_info_as() + .next; + return OptionalRef{ *rv_ptr }; + } + else { + return OptionalRef{ nullptr }; + } + } + + template + KOKKOS_INLINE_FUNCTION + OptionalRef + _pop_failed_insertion( + int priority, TaskType type, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) { + return OptionalRef{ nullptr }; + } + +public: + + KOKKOS_INLINE_FUNCTION + MultipleTaskQueueTeamEntry() { + for(int iPriority = 0; iPriority < NumPriorities; ++iPriority) { + for(int iType = 0; iType < 2; ++iType) { + m_failed_heads[iPriority][iType] = nullptr; + } + } + } + + + KOKKOS_INLINE_FUNCTION + OptionalRef + try_to_steal_ready_task() + { + auto return_value = OptionalRef{}; + // prefer lower priority tasks when stealing + for(int i_priority = NumPriorities-1; i_priority >= 0; --i_priority) { + // Check for a single task with this priority + return_value = m_ready_queues[i_priority][TaskSingle].steal(); + if(return_value) return return_value; + + // Check for a team task with this priority + return_value = m_ready_queues[i_priority][TaskTeam].steal(); + if(return_value) return return_value; + + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef + pop_ready_task() + { + auto return_value = OptionalRef{}; + for(int i_priority = 0; i_priority < NumPriorities; ++i_priority) { + return_value = _pop_failed_insertion(i_priority, TaskTeam); + if(not return_value) return_value = m_ready_queues[i_priority][TaskTeam].pop(); + if(return_value) return return_value; + + // Check for a single task with this priority + return_value = _pop_failed_insertion(i_priority, TaskSingle); + if(not return_value) return_value = m_ready_queues[i_priority][TaskSingle].pop(); + if(return_value) return return_value; + } + return return_value; + } + + KOKKOS_INLINE_FUNCTION + ready_queue_type& + team_queue_for(runnable_task_base_type const& task) + { + return m_ready_queues[int(task.get_priority())][int(task.get_task_type())]; + } + + + template + KOKKOS_INLINE_FUNCTION + void do_handle_failed_insertion( + runnable_task_base_type&& task, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) + { + // failed insertions, if they happen, must be from the only thread that + // is allowed to push to m_ready_queues, so this linked-list insertion is not + // concurrent + auto& node = task.template scheduling_info_as(); + auto*& head = failed_head_for(task); + node.next = head; + head = &task; + } + + template + KOKKOS_INLINE_FUNCTION + void do_handle_failed_insertion( + runnable_task_base_type&& task, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, + void* + >::type = nullptr + ) + { + Kokkos::abort("should be unreachable!"); + } + + + template + KOKKOS_INLINE_FUNCTION + void + flush_failed_insertions( + int priority, + int task_type, + typename std::enable_if< + task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, // just to make this dependent on template parameter + int + >::type = 0 + ) { + // TODO @tasking @minor DSH this somethimes gets some things out of LIFO order, which may be undesirable (but not a bug) + + + auto*& failed_head = m_failed_heads[priority][task_type]; + auto& team_queue = m_ready_queues[priority][task_type]; + + while(failed_head != nullptr) { + bool success = team_queue.push(*failed_head); + if(success) { + // Step to the next linked list element + failed_head = failed_head->as_runnable_task() + .template scheduling_info_as().next; + } + else { + // no more room, stop traversing and leave the head where it is + break; + } + } + } + + + template + KOKKOS_INLINE_FUNCTION + void + flush_failed_insertions( + int, int, + typename std::enable_if< + not task_queue_traits::ready_queue_insertion_may_fail + and std::is_void<_always_void>::value, // just to make this dependent on template parameter + int + >::type = 0 + ) { } + + + KOKKOS_INLINE_FUNCTION + void + flush_all_failed_insertions() { + for(int iPriority = 0; iPriority < NumPriorities; ++iPriority) { + flush_failed_insertions(iPriority, (int)TaskType::TaskTeam); + flush_failed_insertions(iPriority, (int)TaskType::TaskSingle); + } + } + + + template + KOKKOS_INLINE_FUNCTION + void + do_schedule_runnable( + MultipleTaskQueue& queue, + RunnableTaskBase&& task, + TeamSchedulerInfo const& info + + ) { + // Push on any nodes that failed to enqueue + auto& team_queue = team_queue_for(task); + auto priority = task.get_priority(); + auto task_type = task.get_task_type(); + + // First schedule the task + queue.schedule_runnable_to_queue( + std::move(task), + team_queue, + info + ); + + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + flush_failed_insertions((int)priority, (int)task_type); + } + + + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class MultipleTaskQueue final + : public TaskQueueMemoryManager, + public TaskQueueCommonMixin>, + private ObjectWithVLAEmulation< + MultipleTaskQueue, + MultipleTaskQueueTeamEntry + > +{ +public: + + using task_queue_type = MultipleTaskQueue; // mark as task_queue concept + using task_queue_traits = TaskQueueTraits; + using task_base_type = TaskNode; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + +private: + + using base_t = TaskQueueMemoryManager; + using common_mixin_t = TaskQueueCommonMixin; + using vla_emulation_base_t = ObjectWithVLAEmulation< + MultipleTaskQueue, + MultipleTaskQueueTeamEntry + >; + + // Allow private inheritance from ObjectWithVLAEmulation + friend struct VLAEmulationAccess; + +public: + + struct SchedulerInfo { + using team_queue_id_t = int32_t; + static constexpr team_queue_id_t NoAssociatedTeam = -1; + team_queue_id_t team_association = NoAssociatedTeam; + + using scheduler_info_type = SchedulerInfo; + + KOKKOS_INLINE_FUNCTION + constexpr explicit SchedulerInfo(team_queue_id_t association) noexcept + : team_association(association) + { } + + KOKKOS_INLINE_FUNCTION + SchedulerInfo() = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo(SchedulerInfo const&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo(SchedulerInfo&&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo& operator=(SchedulerInfo const&) = default; + + KOKKOS_INLINE_FUNCTION + SchedulerInfo& operator=(SchedulerInfo&&) = default; + + KOKKOS_INLINE_FUNCTION + ~SchedulerInfo() = default; + + }; + + using task_scheduling_info_type = typename std::conditional< + TaskQueueTraits::ready_queue_insertion_may_fail, + FailedQueueInsertionLinkedListSchedulingInfo, + EmptyTaskSchedulingInfo + >::type; + using team_scheduler_info_type = SchedulerInfo; + + using runnable_task_base_type = RunnableTaskBase; + + template + // requires TaskScheduler && TaskFunctor + using runnable_task_type = RunnableTask< + task_queue_traits, Scheduler, typename Functor::value_type, Functor + >; + + using aggregate_task_type = AggregateTask; + + // Number of allowed priorities + static constexpr int NumPriorities = 3; + + KOKKOS_INLINE_FUNCTION + constexpr typename vla_emulation_base_t::vla_entry_count_type + n_queues() const noexcept { return this->n_vla_entries(); } + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + MultipleTaskQueue() = delete; + MultipleTaskQueue(MultipleTaskQueue const&) = delete; + MultipleTaskQueue(MultipleTaskQueue&&) = delete; + MultipleTaskQueue& operator=(MultipleTaskQueue const&) = delete; + MultipleTaskQueue& operator=(MultipleTaskQueue&&) = delete; + + MultipleTaskQueue( + typename base_t::execution_space const& arg_execution_space, + typename base_t::memory_space const&, + typename base_t::memory_pool const& arg_memory_pool + ) : base_t(arg_memory_pool), + vla_emulation_base_t( + Impl::TaskQueueSpecialization< + // TODO @tasking @generalization DSH avoid referencing SimpleTaskScheduler directly? + SimpleTaskScheduler + >::get_max_team_count(arg_execution_space) + ) + { } + + // end Constructors, destructors, and assignment }}}2 + //---------------------------------------------------------------------------- + + KOKKOS_FUNCTION + void + schedule_runnable( + runnable_task_base_type&& task, + team_scheduler_info_type const& info + ) { + auto team_association = info.team_association; + // Should only not be assigned if this is a host spawn... + if(team_association == team_scheduler_info_type::NoAssociatedTeam) { + team_association = 0; + } + this->vla_value_at(team_association).do_schedule_runnable(*this, std::move(task), info); + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + KOKKOS_FUNCTION + OptionalRef + pop_ready_task( + team_scheduler_info_type const& info + ) + { + KOKKOS_EXPECTS(info.team_association != team_scheduler_info_type::NoAssociatedTeam); + + auto return_value = OptionalRef{}; + auto team_association = info.team_association; + + // always loop in order of priority first, then prefer team tasks over single tasks + auto& team_queue_info = this->vla_value_at(team_association); + + if(task_queue_traits::ready_queue_insertion_may_fail) { + team_queue_info.flush_all_failed_insertions(); + } + + return_value = team_queue_info.pop_ready_task(); + + if(not return_value) { + + // loop through the rest of the teams and try to steal + for( + auto isteal = (team_association + 1) % this->n_queues(); + isteal != team_association; + isteal = (isteal + 1) % this->n_queues() + ) { + return_value = this->vla_value_at(isteal).try_to_steal_ready_task(); + if(return_value) { break; } + } + + // Note that this is where we'd update the task's scheduling info + } + // if nothing was found, return a default-constructed (empty) OptionalRef + return return_value; + } + + + // TODO @tasking @generalization DSH make this a property-based customization point + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type + initial_team_scheduler_info(int rank_in_league) const noexcept { + return team_scheduler_info_type{ + typename team_scheduler_info_type::team_queue_id_t(rank_in_league % n_queues()) + }; + } + + // TODO @tasking @generalization DSH make this a property-based customization point + static /* KOKKOS_CONSTEXPR_14 */ size_t + task_queue_allocation_size( + typename base_t::execution_space const& exec_space, + typename base_t::memory_space const&, + typename base_t::memory_pool const& + ) + { + using specialization = + Impl::TaskQueueSpecialization< + // TODO @tasking @generalization DSH avoid referencing SimpleTaskScheduler directly? + SimpleTaskScheduler + >; + + return vla_emulation_base_t::required_allocation_size( + /* num_vla_entries = */ specialization::get_max_team_count(exec_space) + ); + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + runnable_task_base_type& ready_task, + runnable_task_base_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + aggregate_task_type& aggregate, + runnable_task_base_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + aggregate_task_type& aggregate, + aggregate_task_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + // Provide a sensible default that can be overridden + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + runnable_task_base_type& ready_task, + aggregate_task_type const& predecessor + ) const + { + // Do nothing; we're using the extra storage for the failure linked list + } + + KOKKOS_INLINE_FUNCTION + void + handle_failed_ready_queue_insertion( + runnable_task_base_type&& task, + ready_queue_type&, + team_scheduler_info_type const& info + ) { + KOKKOS_EXPECTS(info.team_association != team_scheduler_info_type::NoAssociatedTeam); + + this->vla_value_at(info.team_association).do_handle_failed_insertion( + std::move(task) + ); + } +}; + + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_MULTIPLETASKQUEUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp new file mode 100644 index 0000000000..bf83d1831c --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp @@ -0,0 +1,242 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_OPTIONALREF_HPP +#define KOKKOS_IMPL_OPTIONALREF_HPP + +#include + +#include + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +namespace Kokkos { +namespace Impl { + +struct InPlaceTag { }; + +template +struct OptionalRef { +private: + + ObservingRawPtr m_value = nullptr; + +public: + + using value_type = T; + + KOKKOS_INLINE_FUNCTION + OptionalRef() = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef(OptionalRef const&) = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef(OptionalRef&&) = default; + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(OptionalRef const&) = default; + + KOKKOS_INLINE_FUNCTION + // Can't return a reference to volatile OptionalRef, since GCC issues a warning about + // reference to volatile not accessing the underlying value + void + operator=(OptionalRef const volatile& other) volatile noexcept + { + m_value = other.m_value; + } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(OptionalRef&&) = default; + + KOKKOS_INLINE_FUNCTION + ~OptionalRef() = default; + + KOKKOS_INLINE_FUNCTION + explicit OptionalRef(T& arg_value) : m_value(&arg_value) { } + + KOKKOS_INLINE_FUNCTION + explicit OptionalRef(std::nullptr_t) : m_value(nullptr) { } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(T& arg_value) { m_value = &arg_value; return *this; } + + KOKKOS_INLINE_FUNCTION + OptionalRef& operator=(std::nullptr_t) { m_value = nullptr; return *this; } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + OptionalRef::type> + as_volatile() volatile noexcept { + return + OptionalRef::type>(*(*this)); + } + + KOKKOS_INLINE_FUNCTION + OptionalRef::type>::type> + as_volatile() const volatile noexcept { + return + OptionalRef::type>::type>(*(*this)); + } + + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + T& operator*() & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T const& operator*() const & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile& operator*() volatile & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile& operator*() const volatile & { + KOKKOS_EXPECTS(this->has_value()); + return *m_value; + } + + KOKKOS_INLINE_FUNCTION + T&& operator*() && { + KOKKOS_EXPECTS(this->has_value()); + return std::move(*m_value); + } + + KOKKOS_INLINE_FUNCTION + T* operator->() { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const* operator->() const { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile* operator->() volatile { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile* operator->() const volatile { + KOKKOS_EXPECTS(this->has_value()); + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T* get() { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const* get() const { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T volatile* get() volatile { + return m_value; + } + + KOKKOS_INLINE_FUNCTION + T const volatile* get() const volatile { + return m_value; + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + operator bool() { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() const { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + operator bool() const volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() const { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() volatile { return m_value != nullptr; } + + KOKKOS_INLINE_FUNCTION + bool has_value() const volatile { return m_value != nullptr; } + +}; + +} // end namespace Impl +} // end namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + + + +#endif /* #ifndef KOKKOS_IMPL_OPTIONALREF_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp index d84a854622..687a0e9c37 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.cpp @@ -55,104 +55,7 @@ namespace Kokkos { namespace Impl { -template class TaskQueue< Kokkos::Serial > ; - -void TaskQueueSpecialization< Kokkos::Serial >::execute - ( TaskQueue< Kokkos::Serial > * const queue ) -{ - using exec_space = Kokkos::Serial ; - using tqs_queue_type = TaskQueue< exec_space > ; - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< exec_space > ; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - // Set default buffers - serial_resize_thread_team_data( 0 /* global reduce buffer */ - , 512 /* team reduce buffer */ - , 0 /* team shared buffer */ - , 0 /* thread local buffer */ - ); - - Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); - - Member exec( *data ); - - // Loop until all queues are empty - while ( 0 < queue->m_ready_count ) { - - task_root_type * task = end ; - - for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end != task ) { - - // pop_ready_task resulted in lock == task->m_next - // In the executing state - - (*task->m_apply)( task , & exec ); - -#if 0 - printf( "TaskQueue::executed: 0x%lx { 0x%lx 0x%lx %d %d %d }\n" - , uintptr_t(task) - , uintptr_t(task->m_wait) - , uintptr_t(task->m_next) - , task->m_task_type - , task->m_priority - , task->m_ref_count ); -#endif - - // If a respawn then re-enqueue otherwise the task is complete - // and all tasks waiting on this task are updated. - queue->complete( task ); - } - else if ( 0 != queue->m_ready_count ) { - Kokkos::abort("TaskQueue::execute ERROR: ready_count"); - } - } -} - -void TaskQueueSpecialization< Kokkos::Serial > :: - iff_single_thread_recursive_execute( - TaskQueue< Kokkos::Serial > * const queue ) -{ - using exec_space = Kokkos::Serial ; - using tqs_queue_type = TaskQueue< exec_space > ; - using task_root_type = TaskBase< void , void , void > ; - using Member = Impl::HostThreadTeamMember< exec_space > ; - - task_root_type * const end = (task_root_type *) task_root_type::EndTag ; - - Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); - - Member exec( *data ); - - // Loop until no runnable task - - task_root_type * task = end ; - - do { - - task = end ; - - for ( int i = 0 ; i < tqs_queue_type::NumQueue && end == task ; ++i ) { - for ( int j = 0 ; j < 2 && end == task ; ++j ) { - task = tqs_queue_type::pop_ready_task( & queue->m_ready[i][j] ); - } - } - - if ( end == task ) break ; - - (*task->m_apply)( task , & exec ); - - queue->complete( task ); - - } while(1); -} +template class TaskQueue; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp index 2fec5dfb89..c379a12fb1 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp @@ -47,7 +47,11 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) +#include + #include +#include +#include //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -55,32 +59,217 @@ namespace Kokkos { namespace Impl { -//---------------------------------------------------------------------------- - -template<> -class TaskQueueSpecialization< Kokkos::Serial > +template +class TaskQueueSpecialization< + SimpleTaskScheduler +> { public: - using execution_space = Kokkos::Serial ; - using memory_space = Kokkos::HostSpace ; - using queue_type = Kokkos::Impl::TaskQueue< execution_space > ; - using task_base_type = Kokkos::Impl::TaskBase< void , void , void > ; - using member_type = Kokkos::Impl::HostThreadTeamMember< execution_space > ; + // Note: Scheduler may be an incomplete type at class scope (but not inside + // of the methods, obviously) + + using execution_space = Kokkos::Serial; + using memory_space = Kokkos::HostSpace; + using scheduler_type = SimpleTaskScheduler; + using member_type = TaskTeamMemberAdapter< + HostThreadTeamMember, scheduler_type + >; static - void iff_single_thread_recursive_execute( queue_type * const ); + void execute(scheduler_type const& scheduler) + { + using task_base_type = typename scheduler_type::task_base_type; - static - void execute( queue_type * const ); + // Set default buffers + serial_resize_thread_team_data( + 0, /* global reduce buffer */ + 512, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); - template< typename TaskType > - static - typename TaskType::function_type - get_function_pointer() { return TaskType::apply ; } + Impl::HostThreadTeamData& self = *Impl::serial_get_thread_team_data(); + + auto& queue = scheduler.queue(); + auto team_scheduler = scheduler.get_team_scheduler(0); + + member_type member(scheduler, self); + + auto current_task = OptionalRef(nullptr); + + while(not queue.is_done()) { + + // Each team lead attempts to acquire either a thread team task + // or a single thread task for the team. + + // pop a task off + current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); + + // run the task + if(current_task) { + current_task->as_runnable_task().run(member); + // Respawns are handled in the complete function + queue.complete( + (*std::move(current_task)).as_runnable_task(), + team_scheduler.team_scheduler_info() + ); + } + + } + + } + + static constexpr uint32_t + get_max_team_count(execution_space const&) noexcept + { + return 1; + } + + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } }; -extern template class TaskQueue< Kokkos::Serial > ; +//---------------------------------------------------------------------------- + +template +class TaskQueueSpecializationConstrained< + Scheduler, + typename std::enable_if< + std::is_same::value + >::type +> +{ +public: + + // Note: Scheduler may be an incomplete type at class scope (but not inside + // of the methods, obviously) + + using execution_space = Kokkos::Serial; + using memory_space = Kokkos::HostSpace; + using scheduler_type = Scheduler; + using member_type = TaskTeamMemberAdapter< + HostThreadTeamMember, scheduler_type + >; + + static + void iff_single_thread_recursive_execute(scheduler_type const& scheduler) { + using task_base_type = TaskBase; + using queue_type = typename scheduler_type::queue_type; + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); + + member_type exec( scheduler, *data ); + + // Loop until no runnable task + + task_base_type * task = end ; + + auto* const queue = scheduler.m_queue; + + do { + + task = end ; + + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + } + } + + if ( end == task ) break ; + + (*task->m_apply)( task , & exec ); + + queue->complete( task ); + + } while(1); + + } + + static + void execute(scheduler_type const& scheduler) + { + using task_base_type = TaskBase; + using queue_type = typename scheduler_type::queue_type; + + task_base_type * const end = (task_base_type *) task_base_type::EndTag ; + + // Set default buffers + serial_resize_thread_team_data( + 0, /* global reduce buffer */ + 512, /* team reduce buffer */ + 0, /* team shared buffer */ + 0 /* thread local buffer */ + ); + + auto* const queue = scheduler.m_queue; + + Impl::HostThreadTeamData * const data = Impl::serial_get_thread_team_data(); + + member_type exec( scheduler, *data ); + + // Loop until all queues are empty + while ( 0 < queue->m_ready_count ) { + + task_base_type * task = end ; + + for ( int i = 0 ; i < queue_type::NumQueue && end == task ; ++i ) { + for ( int j = 0 ; j < 2 && end == task ; ++j ) { + task = queue_type::pop_ready_task( & queue->m_ready[i][j] ); + } + } + + if ( end != task ) { + + // pop_ready_task resulted in lock == task->m_next + // In the executing state + + (*task->m_apply)( task , & exec ); + +#if 0 + printf( "TaskQueue::executed: 0x%lx { 0x%lx 0x%lx %d %d %d }\n" + , uintptr_t(task) + , uintptr_t(task->m_wait) + , uintptr_t(task->m_next) + , task->m_task_type + , task->m_priority + , task->m_ref_count ); +#endif + + // If a respawn then re-enqueue otherwise the task is complete + // and all tasks waiting on this task are updated. + queue->complete( task ); + } + else if ( 0 != queue->m_ready_count ) { + Kokkos::abort("TaskQueue::execute ERROR: ready_count"); + } + } + } + + template + static void + get_function_pointer( + typename TaskType::function_type& ptr, + typename TaskType::destroy_type& dtor + ) + { + ptr = TaskType::apply; + dtor = TaskType::destroy; + } +}; + +extern template class TaskQueue< Kokkos::Serial, typename Kokkos::Serial::memory_space > ; }} /* namespace Kokkos::Impl */ diff --git a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp index 658f1db06b..77eb69d081 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp @@ -48,11 +48,11 @@ namespace Impl { __thread int SharedAllocationRecord::t_tracking_enabled = 1; +#ifdef KOKKOS_DEBUG bool SharedAllocationRecord< void , void >:: is_sane( SharedAllocationRecord< void , void > * arg_record ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord * const root = arg_record ? arg_record->m_root : 0 ; bool ok = root != 0 && root->use_count() == 0 ; @@ -102,16 +102,23 @@ is_sane( SharedAllocationRecord< void , void > * arg_record ) } } return ok ; -#else - Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::is_sane only works with KOKKOS_DEBUG enabled"); - return false ; -#endif } +#else + +bool +SharedAllocationRecord< void , void >:: +is_sane( SharedAllocationRecord< void , void > * ) +{ + Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::is_sane only works with KOKKOS_DEBUG enabled"); + return false ; +} +#endif //#ifdef KOKKOS_DEBUG + +#ifdef KOKKOS_DEBUG SharedAllocationRecord * SharedAllocationRecord::find( SharedAllocationRecord * const arg_root , void * const arg_data_ptr ) { -#ifdef KOKKOS_DEBUG SharedAllocationRecord * root_next = 0 ; static constexpr SharedAllocationRecord * zero = nullptr; @@ -130,11 +137,15 @@ SharedAllocationRecord::find( SharedAllocationRecord * con Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord failed locking/unlocking"); } return r ; +} #else +SharedAllocationRecord * +SharedAllocationRecord::find( SharedAllocationRecord * const , void * const ) +{ Kokkos::Impl::throw_runtime_exception("Kokkos::Impl::SharedAllocationRecord::find only works with KOKKOS_DEBUG enabled"); return nullptr; -#endif } +#endif /**\brief Construct and insert into 'arg_root' tracking set. @@ -271,6 +282,7 @@ decrement( SharedAllocationRecord< void , void > * arg_record ) return arg_record ; } +#ifdef KOKKOS_DEBUG void SharedAllocationRecord< void , void >:: print_host_accessible_records( std::ostream & s @@ -278,7 +290,6 @@ print_host_accessible_records( std::ostream & s , const SharedAllocationRecord * const root , const bool detail ) { -#ifdef KOKKOS_DEBUG const SharedAllocationRecord< void , void > * r = root ; char buffer[256] ; @@ -339,12 +350,20 @@ print_host_accessible_records( std::ostream & s r = r->m_next ; } while ( r != root ); } +} #else +void +SharedAllocationRecord< void , void >:: +print_host_accessible_records( std::ostream & + , const char * const + , const SharedAllocationRecord * const + , const bool ) +{ Kokkos::Impl::throw_runtime_exception( "Kokkos::Impl::SharedAllocationRecord::print_host_accessible_records" " only works with KOKKOS_DEBUG enabled"); -#endif } +#endif } /* namespace Impl */ } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp new file mode 100644 index 0000000000..c2dbc96814 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp @@ -0,0 +1,646 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_SIMPLETASKSCHEDULER_HPP +#define KOKKOS_SIMPLETASKSCHEDULER_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +namespace Impl { + +// TODO @tasking @cleanup move this +template +struct DefaultDestroy { + T* managed_object; + KOKKOS_FUNCTION + void destroy_shared_allocation() { + managed_object->~T(); + } +}; + + +template +class ExecutionSpaceInstanceStorage + : private NoUniqueAddressMemberEmulation +{ +private: + + using base_t = NoUniqueAddressMemberEmulation; + +protected: + + constexpr explicit + ExecutionSpaceInstanceStorage() + : base_t() + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ExecutionSpaceInstanceStorage(ExecutionSpace const& arg_execution_space) + : base_t(arg_execution_space) + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ExecutionSpaceInstanceStorage(ExecutionSpace&& arg_execution_space) + : base_t(std::move(arg_execution_space)) + { } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace& execution_space_instance() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace const& execution_space_instance() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + ExecutionSpace&& execution_space_instance() && + { + return std::move(*this).no_unique_address_data_member(); + } +}; + + +template +class MemorySpaceInstanceStorage + : private NoUniqueAddressMemberEmulation +{ +private: + + using base_t = NoUniqueAddressMemberEmulation; + +protected: + + MemorySpaceInstanceStorage() + : base_t() + { } + + KOKKOS_INLINE_FUNCTION + MemorySpaceInstanceStorage(MemorySpace const& arg_memory_space) + : base_t(arg_memory_space) + { } + + KOKKOS_INLINE_FUNCTION + constexpr explicit + MemorySpaceInstanceStorage(MemorySpace&& arg_memory_space) + : base_t(arg_memory_space) + { } + + KOKKOS_INLINE_FUNCTION + MemorySpace& memory_space_instance() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + MemorySpace const& memory_space_instance() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + MemorySpace&& memory_space_instance() && + { + return std::move(*this).no_unique_address_data_member(); + } +}; + +} // end namespace Impl + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template + // requires ExecutionSpace && TaskQueue +class SimpleTaskScheduler + : public Impl::TaskSchedulerBase, + private Impl::ExecutionSpaceInstanceStorage, + private Impl::MemorySpaceInstanceStorage, + private Impl::NoUniqueAddressMemberEmulation +{ +public: + // TODO @tasking @generalization (maybe?) don't force QueueType to be complete here + + using scheduler_type = SimpleTaskScheduler; // tag as scheduler concept + using execution_space = ExecSpace; + using task_queue_type = QueueType; + using memory_space = typename task_queue_type::memory_space; + using memory_pool = typename task_queue_type::memory_pool; + + using team_scheduler_info_type = typename task_queue_type::team_scheduler_info_type; + using task_scheduling_info_type = typename task_queue_type::task_scheduling_info_type; + using specialization = Impl::TaskQueueSpecialization; + using member_type = typename specialization::member_type; + + template + using runnable_task_type = typename QueueType::template runnable_task_type; + + using task_base_type = typename task_queue_type::task_base_type; + using runnable_task_base_type = typename task_queue_type::runnable_task_base_type; + + using task_queue_traits = typename QueueType::task_queue_traits; + + template + using future_type = Kokkos::BasicFuture; + template + using future_type_for_functor = future_type; + +private: + + template + friend class BasicFuture; + + using track_type = Kokkos::Impl::SharedAllocationTracker; + using execution_space_storage = Impl::ExecutionSpaceInstanceStorage; + using memory_space_storage = Impl::MemorySpaceInstanceStorage; + using team_scheduler_info_storage = Impl::NoUniqueAddressMemberEmulation; + + track_type m_track; + task_queue_type* m_queue = nullptr; + + KOKKOS_INLINE_FUNCTION + static constexpr task_base_type* _get_task_ptr(std::nullptr_t) { return nullptr; } + + template + KOKKOS_INLINE_FUNCTION + static constexpr task_base_type* _get_task_ptr(future_type&& f) + { + return f.m_task; + } + + template < + int TaskEnum, + class DepTaskType, + class FunctorType + > + KOKKOS_FUNCTION + future_type_for_functor::type> + _spawn_impl( + DepTaskType arg_predecessor_task, + TaskPriority arg_priority, + typename runnable_task_base_type::function_type apply_function_ptr, + typename runnable_task_base_type::destroy_type destroy_function_ptr, + FunctorType&& functor + ) + { + KOKKOS_EXPECTS(m_queue != nullptr); + + using functor_future_type = future_type_for_functor::type>; + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + // Reference count starts at two: + // +1 for the matching decrement when task is complete + // +1 for the future + auto& runnable_task = *m_queue->template allocate_and_construct( + /* functor = */ std::forward(functor), + /* apply_function_ptr = */ apply_function_ptr, + /* task_type = */ static_cast(TaskEnum), + /* priority = */ arg_priority, + /* queue_base = */ m_queue, + /* initial_reference_count = */ 2 + ); + + if(arg_predecessor_task != nullptr) { + m_queue->initialize_scheduling_info_from_predecessor( + runnable_task, *arg_predecessor_task + ); + runnable_task.set_predecessor(*arg_predecessor_task); + arg_predecessor_task->decrement_and_check_reference_count(); + } + else { + m_queue->initialize_scheduling_info_from_team_scheduler_info( + runnable_task, team_scheduler_info() + ); + } + + auto rv = functor_future_type(&runnable_task); + + Kokkos::memory_fence(); // fence to ensure dependent stores are visible + + m_queue->schedule_runnable( + std::move(runnable_task), + team_scheduler_info() + ); + // note that task may be already completed even here, so don't touch it again + + return rv; + } + + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + SimpleTaskScheduler() = default; + + explicit + SimpleTaskScheduler( + execution_space const& arg_execution_space, + memory_space const& arg_memory_space, + memory_pool const& arg_memory_pool + ) : execution_space_storage(arg_execution_space), + memory_space_storage(arg_memory_space) + { + // Ask the task queue how much space it needs (usually will just be + // sizeof(task_queue_type), but some queues may need additional storage + // dependent on runtime conditions or properties of the execution space) + auto const allocation_size = task_queue_type::task_queue_allocation_size( + arg_execution_space, + arg_memory_space, + arg_memory_pool + ); + + // TODO @tasking @generalization DSH better encapsulation of the SharedAllocationRecord pattern + using record_type = Impl::SharedAllocationRecord< + memory_space, Impl::DefaultDestroy + >; + + // Allocate space for the task queue + auto* record = record_type::allocate( + memory_space(), "TaskQueue", allocation_size + ); + m_queue = new (record->data()) task_queue_type( + arg_execution_space, + arg_memory_space, + arg_memory_pool + ); + record->m_destroy.managed_object = m_queue; + m_track.assign_allocated_record_to_uninitialized(record); + } + + explicit + SimpleTaskScheduler( + execution_space const& arg_execution_space, + memory_pool const& pool + ) : SimpleTaskScheduler(arg_execution_space, memory_space{}, pool) + { /* forwarding ctor, must be empty */ } + + explicit + SimpleTaskScheduler(memory_pool const& pool) + : SimpleTaskScheduler(execution_space{}, memory_space{}, pool) + { /* forwarding ctor, must be empty */ } + + SimpleTaskScheduler( + memory_space const & arg_memory_space, + size_t const mempool_capacity, + unsigned const mempool_min_block_size, // = 1u << 6 + unsigned const mempool_max_block_size, // = 1u << 10 + unsigned const mempool_superblock_size // = 1u << 12 + ) : SimpleTaskScheduler( + execution_space{}, + arg_memory_space, + memory_pool( + arg_memory_space, mempool_capacity, mempool_min_block_size, + mempool_max_block_size, mempool_superblock_size + ) + ) + { /* forwarding ctor, must be empty */ } + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + // Note that this is an expression of shallow constness + KOKKOS_INLINE_FUNCTION + task_queue_type& queue() const + { + KOKKOS_EXPECTS(m_queue != nullptr); + return *m_queue; + } + + KOKKOS_INLINE_FUNCTION + SimpleTaskScheduler + get_team_scheduler(int rank_in_league) const noexcept + { + KOKKOS_EXPECTS(m_queue != nullptr); + auto rv = SimpleTaskScheduler{ *this }; + rv.team_scheduler_info() = m_queue->initial_team_scheduler_info(rank_in_league); + return rv; + } + + KOKKOS_INLINE_FUNCTION + execution_space const& get_execution_space() const { return this->execution_space_instance(); } + + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type& team_scheduler_info() & + { + return this->team_scheduler_info_storage::no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + team_scheduler_info_type const& team_scheduler_info() const & + { + return this->team_scheduler_info_storage::no_unique_address_data_member(); + } + + //---------------------------------------------------------------------------- + + #ifdef KOKKOS_ENABLE_DEPRECATED_CODE + // For backwards compatibility purposes only + KOKKOS_DEPRECATED + KOKKOS_INLINE_FUNCTION + memory_pool* + memory() const noexcept KOKKOS_DEPRECATED_TRAILING_ATTRIBUTE + { + if(m_queue != nullptr) return &(m_queue->get_memory_pool()); + else return nullptr; + } + #endif + + //---------------------------------------------------------------------------- + + template + KOKKOS_FUNCTION + static + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithScheduler&& arg_policy, + typename runnable_task_base_type::function_type arg_function, + typename runnable_task_base_type::destroy_type arg_destroy, + FunctorType&& arg_functor + ) + { + return std::move(arg_policy.scheduler()).template _spawn_impl( + _get_task_ptr(std::move(arg_policy.predecessor())), + arg_policy.priority(), + arg_function, + arg_destroy, + std::forward(arg_functor) + ); + } + + template + KOKKOS_FUNCTION + Kokkos::BasicFuture + spawn( + Impl::TaskPolicyWithPredecessor&& arg_policy, + FunctorType&& arg_functor + ) + { + static_assert( + std::is_same::value, + "Can't create a task policy from a scheduler and a future from a different scheduler" + ); + + using task_type = runnable_task_type; + typename task_type::function_type const ptr = task_type::apply; + typename task_type::destroy_type const dtor = task_type::destroy; + + return _spawn_impl( + std::move(arg_policy).predecessor().m_task, + arg_policy.priority(), + ptr, dtor, + std::forward(arg_functor) + ); + } + + template + KOKKOS_FUNCTION + static void + respawn( + FunctorType* functor, + BasicFuture const& predecessor, + TaskPriority priority = TaskPriority::Regular + ) { + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + auto& task = *static_cast(functor); + + KOKKOS_EXPECTS(!task.get_respawn_flag()); + + task.set_priority(priority); + task.set_predecessor(*predecessor.m_task); + task.set_respawn_flag(true); + } + + template + KOKKOS_FUNCTION + static void + respawn( + FunctorType* functor, + scheduler_type const&, + TaskPriority priority = TaskPriority::Regular + ) { + using task_type = typename task_queue_type::template runnable_task_type< + FunctorType, scheduler_type + >; + + auto& task = *static_cast(functor); + + KOKKOS_EXPECTS(!task.get_respawn_flag()); + + task.set_priority(priority); + KOKKOS_ASSERT(not task.has_predecessor()); + task.set_respawn_flag(true); + } + + + template + KOKKOS_FUNCTION + future_type + when_all(BasicFuture const predecessors[], int n_predecessors) { + + // TODO @tasking @generalization DSH propagate scheduling info + + using task_type = typename task_queue_type::aggregate_task_type; + + future_type rv; + + if(n_predecessors > 0) { + task_queue_type* queue_ptr = nullptr; + + // Loop over the predecessors to find the queue and increment the reference + // counts + for(int i_pred = 0; i_pred < n_predecessors; ++i_pred) { + + auto* predecessor_task_ptr = predecessors[i_pred].m_task; + + if(predecessor_task_ptr != nullptr) { + // TODO @tasking @cleanup DSH figure out when this is allowed to be nullptr (if at all anymore) + + // Increment reference count to track subsequent assignment. + // TODO @tasking @optimization DSH figure out if this reference count increment is necessary + predecessor_task_ptr->increment_reference_count(); + + // TODO @tasking @cleanup DSH we should just set a boolean here instead to make this more readable + queue_ptr = m_queue; + } + + } // end loop over predecessors + + // This only represents a non-ready future if at least one of the predecessors + // has a task (and thus, a queue) + if(queue_ptr != nullptr) { + auto& q = *queue_ptr; + + auto* aggregate_task_ptr = q.template allocate_and_construct_with_vla_emulation< + task_type, task_base_type* + >( + /* n_vla_entries = */ n_predecessors, + /* aggregate_predecessor_count = */ n_predecessors, + /* queue_base = */ &q, + /* initial_reference_count = */ 2 + ); + + rv = future_type(aggregate_task_ptr); + + for(int i_pred = 0; i_pred < n_predecessors; ++i_pred) { + aggregate_task_ptr->vla_value_at(i_pred) = predecessors[i_pred].m_task; + } + + Kokkos::memory_fence(); // we're touching very questionable memory, so be sure to fence + + q.schedule_aggregate(std::move(*aggregate_task_ptr), team_scheduler_info()); + // the aggregate may be processed at any time, so don't touch it after this + } + } + + return rv; + } + + template + KOKKOS_FUNCTION + future_type + when_all(int n_calls, F&& func) + { + // TODO @tasking @generalization DSH propagate scheduling info? + + // later this should be std::invoke_result_t + using generated_type = decltype(func(0)); + using task_type = typename task_queue_type::aggregate_task_type; + + static_assert( + is_future::value, + "when_all function must return a Kokkos future (an instance of Kokkos::BasicFuture)" + ); + static_assert( + std::is_base_of::value, + "when_all function must return a Kokkos::BasicFuture of a compatible scheduler type" + ); + + auto* aggregate_task = m_queue->template allocate_and_construct_with_vla_emulation< + task_type, task_base_type* + >( + /* n_vla_entries = */ n_calls, + /* aggregate_predecessor_count = */ n_calls, + /* queue_base = */ m_queue, + /* initial_reference_count = */ 2 + ); + + auto rv = future_type(aggregate_task); + + for(int i_call = 0; i_call < n_calls; ++i_call) { + + auto generated_future = func(i_call); + + if(generated_future.m_task != nullptr) { + generated_future.m_task->increment_reference_count(); + aggregate_task->vla_value_at(i_call) = generated_future.m_task; + + KOKKOS_ASSERT(m_queue == generated_future.m_task->ready_queue_base_ptr() + && "Queue mismatch in when_all" + ); + } + + } + + Kokkos::memory_fence(); + + m_queue->schedule_aggregate(std::move(*aggregate_task), team_scheduler_info()); + // This could complete at any moment, so don't touch anything after this + + return rv; + } + +}; + + +template +inline +void wait(SimpleTaskScheduler const& scheduler) +{ + using scheduler_type = SimpleTaskScheduler; + scheduler_type::specialization::execute(scheduler); +} + +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_SIMPLETASKSCHEDULER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp new file mode 100644 index 0000000000..d73028eb5b --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp @@ -0,0 +1,207 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_SINGLETASKQUEUE_HPP +#define KOKKOS_IMPL_SINGLETASKQUEUE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template < + class ExecSpace, + class MemorySpace, + class TaskQueueTraits, + class MemoryPool +> +class SingleTaskQueue + : public TaskQueueMemoryManager, + public TaskQueueCommonMixin> +{ +private: + + using base_t = TaskQueueMemoryManager; + using common_mixin_t = TaskQueueCommonMixin; + + struct EmptyTeamSchedulerInfo { }; + struct EmptyTaskSchedulingInfo { }; + +public: + + using task_queue_type = SingleTaskQueue; // mark as task_queue concept + using task_queue_traits = TaskQueueTraits; + using task_base_type = TaskNode; + using ready_queue_type = typename TaskQueueTraits::template ready_queue_type; + + using team_scheduler_info_type = EmptyTeamSchedulerInfo; + using task_scheduling_info_type = EmptyTaskSchedulingInfo; + + using runnable_task_base_type = RunnableTaskBase; + + template + // requires TaskScheduler && TaskFunctor + using runnable_task_type = RunnableTask< + task_queue_traits, Scheduler, typename Functor::value_type, Functor + >; + + using aggregate_task_type = AggregateTask; + + // Number of allowed priorities + static constexpr int NumQueue = 3; + +private: + + ready_queue_type m_ready_queues[NumQueue][2]; + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + SingleTaskQueue() = delete; + SingleTaskQueue(SingleTaskQueue const&) = delete; + SingleTaskQueue(SingleTaskQueue&&) = delete; + SingleTaskQueue& operator=(SingleTaskQueue const&) = delete; + SingleTaskQueue& operator=(SingleTaskQueue&&) = delete; + + explicit + SingleTaskQueue( + typename base_t::execution_space const&, + typename base_t::memory_space const&, + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool) + { } + + ~SingleTaskQueue() { + for(int i_priority = 0; i_priority < NumQueue; ++i_priority) { + KOKKOS_EXPECTS(m_ready_queues[i_priority][TaskTeam].empty()); + KOKKOS_EXPECTS(m_ready_queues[i_priority][TaskSingle].empty()); + } + } + + // end Constructors, destructors, and assignment }}}2 + //---------------------------------------------------------------------------- + + KOKKOS_FUNCTION + void + schedule_runnable( + runnable_task_base_type&& task, + team_scheduler_info_type const& info + ) { + this->schedule_runnable_to_queue( + std::move(task), + m_ready_queues[int(task.get_priority())][int(task.get_task_type())], + info + ); + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + KOKKOS_FUNCTION + OptionalRef + pop_ready_task( + team_scheduler_info_type const& info + ) + { + OptionalRef return_value; + // always loop in order of priority first, then prefer team tasks over single tasks + for(int i_priority = 0; i_priority < NumQueue; ++i_priority) { + + // Check for a team task with this priority + return_value = m_ready_queues[i_priority][TaskTeam].pop(); + if(return_value) return return_value; + + // Check for a single task with this priority + return_value = m_ready_queues[i_priority][TaskSingle].pop(); + if(return_value) return return_value; + + } + // if nothing was found, return a default-constructed (empty) OptionalRef + return return_value; + } + + KOKKOS_INLINE_FUNCTION + constexpr team_scheduler_info_type + initial_team_scheduler_info(int) const noexcept { return { }; } + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_SINGLETASKQUEUE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp new file mode 100644 index 0000000000..b0c06fb26e --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp @@ -0,0 +1,329 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKBASE_HPP +#define KOKKOS_IMPL_TASKBASE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +/** \brief Base class for task management, access, and execution. + * + * Inheritance structure to allow static_cast from the task root type + * and a task's FunctorType. + * + * // Enable a functor to access the base class + * // and provide memory for result value. + * TaskBase< Space , ResultType , FunctorType > + * : TaskBase< void , void , void > + * , FunctorType + * { ... }; + * Followed by memory allocated for result value. + * + * + * States of a task: + * + * Constructing State, NOT IN a linked list + * m_wait == 0 + * m_next == 0 + * + * Scheduling transition : Constructing -> Waiting + * before: + * m_wait == 0 + * m_next == this task's initial dependence, 0 if none + * after: + * m_wait == EndTag + * m_next == EndTag + * + * Waiting State, IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == next of linked list of tasks + * + * transition : Waiting -> Executing + * before: + * m_next == EndTag + * after:: + * m_next == LockTag + * + * Executing State, NOT IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == LockTag + * + * Respawn transition : Executing -> Executing-Respawn + * before: + * m_next == LockTag + * after: + * m_next == this task's updated dependence, 0 if none + * + * Executing-Respawn State, NOT IN a linked list + * m_apply != 0 + * m_queue != 0 + * m_ref_count > 0 + * m_wait == head of linked list of tasks waiting on this task + * m_next == this task's updated dependence, 0 if none + * + * transition : Executing -> Complete + * before: + * m_wait == head of linked list + * after: + * m_wait == LockTag + * + * Complete State, NOT IN a linked list + * m_wait == LockTag: cannot add dependence (<=> complete) + * m_next == LockTag: not a member of a wait queue + * + */ +class TaskBase +{ +public: + + enum : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2 }; + enum : uintptr_t { LockTag = ~uintptr_t(0) , EndTag = ~uintptr_t(1) }; + + template friend class Kokkos::BasicTaskScheduler ; + + using queue_type = TaskQueueBase; + + using function_type = void(*)( TaskBase * , void * ); + typedef void (* destroy_type) ( TaskBase * ); + + // sizeof(TaskBase) == 48 + + function_type m_apply = nullptr; ///< Apply function pointer + queue_type* m_queue = nullptr; ///< Pointer to the scheduler + TaskBase* m_next = nullptr; ///< next in linked list of ready tasks + TaskBase* m_wait = nullptr; ///< Queue of tasks waiting on this + int32_t m_ref_count = 0; + int32_t m_alloc_size = 0; + int32_t m_dep_count ; ///< Aggregate's number of dependences + int16_t m_task_type ; ///< Type of task + int16_t m_priority ; ///< Priority of runnable task + + TaskBase( TaskBase && ) = delete ; + TaskBase( const TaskBase & ) = delete ; + TaskBase & operator = ( TaskBase && ) = delete ; + TaskBase & operator = ( const TaskBase & ) = delete ; + +#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND + KOKKOS_INLINE_FUNCTION ~TaskBase() {}; +#else + KOKKOS_INLINE_FUNCTION ~TaskBase() = default; +#endif + + KOKKOS_INLINE_FUNCTION constexpr + TaskBase() + : m_apply( nullptr ) + , m_queue( nullptr ) + , m_next( nullptr ) + , m_wait( nullptr ) + , m_ref_count( 0 ) + , m_alloc_size( 0 ) + , m_dep_count( 0 ) + , m_task_type( 0 ) + , m_priority( 0 ) + {} + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + TaskBase * volatile * aggregate_dependences() volatile + { return reinterpret_cast( this + 1 ); } + + KOKKOS_INLINE_FUNCTION + bool requested_respawn() + { + // This should only be called when a task has finished executing and is + // in the transition to either the complete or executing-respawn state. + TaskBase * const lock = reinterpret_cast< TaskBase * >( LockTag ); + return lock != m_next; + } + + KOKKOS_INLINE_FUNCTION + void add_dependence( TaskBase* dep ) + { + // Precondition: lock == m_next + + TaskBase * const lock = (TaskBase *) LockTag ; + + // Assign dependence to m_next. It will be processed in the subsequent + // call to schedule. Error if the dependence is reset. + if ( lock != Kokkos::atomic_exchange( & m_next, dep ) ) { + Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); + } + + if ( 0 != dep ) { + // The future may be destroyed upon returning from this call + // so increment reference count to track this assignment. + Kokkos::atomic_increment( &(dep->m_ref_count) ); + } + } + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + int32_t reference_count() const + { return *((int32_t volatile *)( & m_ref_count )); } + +}; + +static_assert( sizeof(TaskBase) == 48 + , "Verifying expected sizeof(TaskBase)" ); + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< class Scheduler, typename ResultType , class FunctorType > +class Task + : public TaskBase, + public FunctorType +{ +public: + + Task() = delete ; + Task( Task && ) = delete ; + Task( const Task & ) = delete ; + Task & operator = ( Task && ) = delete ; + Task & operator = ( const Task & ) = delete ; + + + using root_type = TaskBase; + using functor_type = FunctorType ; + using result_type = ResultType ; + + using specialization = TaskQueueSpecialization ; + using member_type = typename specialization::member_type ; + + KOKKOS_INLINE_FUNCTION + void apply_functor( member_type * const member , void * ) + { this->functor_type::operator()( *member ); } + + template< typename T > + KOKKOS_INLINE_FUNCTION + void apply_functor( member_type * const member + , T * const result ) + { this->functor_type::operator()( *member , *result ); } + + KOKKOS_FUNCTION static + void destroy( root_type * root ) + { + TaskResult::destroy(root); + } + + KOKKOS_FUNCTION static + void apply( root_type * root , void * exec ) + { + Task* const task = static_cast< Task * >( root ); + member_type * const member = reinterpret_cast< member_type * >( exec ); + result_type * const result = TaskResult< result_type >::ptr( task ); + + // Task may be serial or team. + // If team then must synchronize before querying if respawn was requested. + // If team then only one thread calls destructor. + + const bool only_one_thread = +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) + 0 == threadIdx.x && 0 == threadIdx.y ; +#else + 0 == member->team_rank(); +#endif + + task->apply_functor( member , result ); + + member->team_barrier(); + + if ( only_one_thread && !(task->requested_respawn()) ) { + // Did not respawn, destroy the functor to free memory. + task->functor_type::~functor_type(); + // Cannot destroy and deallocate the task until its dependences + // have been processed. + } + } + + // Constructor for runnable task + KOKKOS_INLINE_FUNCTION constexpr + Task( FunctorType && arg_functor ) + : root_type() , functor_type( std::move(arg_functor) ) + { } + + KOKKOS_INLINE_FUNCTION + ~Task() = delete; +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKBASE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp new file mode 100644 index 0000000000..35f8853f1f --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp @@ -0,0 +1,758 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKNODE_HPP +#define KOKKOS_IMPL_TASKNODE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +enum TaskType : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2, TaskSpecial = -1 }; + +//============================================================================== + +/** Intrusive base class for things allocated with a Kokkos::MemoryPool + * + * @warning Memory pools assume that the address of this class is the same + * as the address of the most derived type that was allocated to + * have the given size. As a consequence, when interacting with + * multiple inheritance, this must always be the first base class + * of any derived class that uses it! + * @todo Consider inverting inheritance structure to avoid this problem? + * + * @tparam CountType type of integer used to store the allocation size + */ +template +class alignas(void*) PoolAllocatedObjectBase { +public: + + using pool_allocation_size_type = CountType; + +private: + + pool_allocation_size_type m_alloc_size; + +public: + + + KOKKOS_INLINE_FUNCTION + constexpr explicit PoolAllocatedObjectBase(pool_allocation_size_type allocation_size) + : m_alloc_size(allocation_size) + { } + + KOKKOS_INLINE_FUNCTION + CountType get_allocation_size() const noexcept { return m_alloc_size; } + +}; + +//============================================================================== + + +// TODO @tasking @cleanup DSH move this? +template +class ReferenceCountedBase { +public: + + using reference_count_size_type = CountType; + +private: + + reference_count_size_type m_ref_count = 0; + +public: + + KOKKOS_INLINE_FUNCTION + constexpr explicit + ReferenceCountedBase(reference_count_size_type initial_reference_count) + : m_ref_count(initial_reference_count) + { + // This can't be here because it breaks constexpr + // KOKKOS_EXPECTS(initial_reference_count > 0); + } + + /** Decrement the reference count, + * and return true iff this decrement caused + * the reference count to become zero + */ + KOKKOS_INLINE_FUNCTION + bool decrement_and_check_reference_count() + { + // TODO @tasking @memory_order DSH memory order + auto old_count = Kokkos::atomic_fetch_add(&m_ref_count, -1); + + KOKKOS_ASSERT(old_count > 0 && "reference count greater less than zero!"); + + return (old_count == 1); + } + + KOKKOS_INLINE_FUNCTION + void increment_reference_count() + { + Kokkos::atomic_increment(&m_ref_count); + } + +}; + +template +class AggregateTask; + +template +class RunnableTaskBase; + +//============================================================================== + +template +class TaskNode + : public PoolAllocatedObjectBase, // size 4, must be first! + public ReferenceCountedBase, // size 4 + public TaskQueueTraits::template intrusive_task_base_type> // size 8+ +{ +public: + + using priority_type = int16_t; + +private: + + using task_base_type = TaskNode; + using pool_allocated_base_type = PoolAllocatedObjectBase; + using reference_counted_base_type = ReferenceCountedBase; + using task_queue_traits = TaskQueueTraits; + using waiting_queue_type = + typename task_queue_traits::template waiting_queue_type; + + waiting_queue_type m_wait_queue; // size 8+ + + // TODO @tasking @cleanup DSH eliminate this, or make its purpose a bit more clear. It's only used in BasicFuture, and only for deallocation purposes + TaskQueueBase* m_ready_queue_base; + + TaskType m_task_type; // size 2 + priority_type m_priority; // size 2 + bool m_is_respawning = false; + +public: + + KOKKOS_INLINE_FUNCTION + constexpr + TaskNode( + TaskType task_type, + TaskPriority priority, + TaskQueueBase* queue_base, + reference_count_size_type initial_reference_count, + pool_allocation_size_type allocation_size + ) : pool_allocated_base_type( + /* allocation_size = */ allocation_size + ), + reference_counted_base_type( + /* initial_reference_count = */ initial_reference_count + ), + m_wait_queue(), + m_ready_queue_base(queue_base), + m_task_type(task_type), + m_priority(static_cast(priority)), + m_is_respawning(false) + { } + + TaskNode() = delete; + TaskNode(TaskNode const&) = delete; + TaskNode(TaskNode&&) = delete; + TaskNode& operator=(TaskNode const&) = delete; + TaskNode& operator=(TaskNode&&) = delete; + + KOKKOS_INLINE_FUNCTION + bool is_aggregate() const noexcept { return m_task_type == TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_runnable() const noexcept { return m_task_type != TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_runnable() const volatile noexcept { return m_task_type != TaskType::Aggregate; } + + KOKKOS_INLINE_FUNCTION + bool is_single_runnable() const noexcept { return m_task_type == TaskType::TaskSingle; } + + KOKKOS_INLINE_FUNCTION + bool is_team_runnable() const noexcept { return m_task_type == TaskType::TaskTeam; } + + KOKKOS_INLINE_FUNCTION + TaskType get_task_type() const noexcept { return m_task_type; } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase& + as_runnable_task() & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase const& + as_runnable_task() const & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast const&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase volatile& + as_runnable_task() volatile & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast volatile&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase const volatile& + as_runnable_task() const volatile & { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast const volatile&>(*this); + } + + KOKKOS_INLINE_FUNCTION + RunnableTaskBase&& + as_runnable_task() && { + KOKKOS_EXPECTS(this->is_runnable()); + return static_cast&&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask& + as_aggregate() & { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask const& + as_aggregate() const & { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast const&>(*this); + } + + template + KOKKOS_INLINE_FUNCTION + AggregateTask&& + as_aggregate() && { + KOKKOS_EXPECTS(this->is_aggregate()); + return static_cast&&>(*this); + } + + KOKKOS_INLINE_FUNCTION + bool try_add_waiting(task_base_type& depends_on_this) { + return m_wait_queue.try_push(depends_on_this); + } + + template + KOKKOS_INLINE_FUNCTION + void consume_wait_queue(Function&& f) { + KOKKOS_EXPECTS(not m_wait_queue.is_consumed()); + m_wait_queue.consume(std::forward(f)); + } + + KOKKOS_INLINE_FUNCTION + bool wait_queue_is_consumed() const noexcept { + // TODO @tasking @memory_order DSH memory order + return m_wait_queue.is_consumed(); + } + + KOKKOS_INLINE_FUNCTION + TaskQueueBase* + ready_queue_base_ptr() const noexcept { + return m_ready_queue_base; + } + + KOKKOS_INLINE_FUNCTION + void set_priority(TaskPriority priority) noexcept { + KOKKOS_EXPECTS(!this->is_enqueued()); + m_priority = (priority_type)priority; + } + + KOKKOS_INLINE_FUNCTION + void set_priority(TaskPriority priority) volatile noexcept { + KOKKOS_EXPECTS(!this->is_enqueued()); + m_priority = (priority_type)priority; + } + + KOKKOS_INLINE_FUNCTION + TaskPriority get_priority() const noexcept { + return (TaskPriority)m_priority; + } + + KOKKOS_INLINE_FUNCTION + bool get_respawn_flag() const { return m_is_respawning; } + + KOKKOS_INLINE_FUNCTION + void set_respawn_flag(bool value = true) { + m_is_respawning = value; + } + + KOKKOS_INLINE_FUNCTION + void set_respawn_flag(bool value = true) volatile { + m_is_respawning = value; + } + +}; + +//============================================================================== + +template +class SchedulingInfoStorage; + +//============================================================================== + +template +class SchedulingInfoStorage + : public BaseType, // must be first base class for allocation reasons!!! + private NoUniqueAddressMemberEmulation +{ + +private: + + using base_t = BaseType; + using task_scheduling_info_type = SchedulingInfo; + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type& scheduling_info() & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type const& scheduling_info() const & + { + return this->no_unique_address_data_member(); + } + + KOKKOS_INLINE_FUNCTION + task_scheduling_info_type&& scheduling_info() && + { + return std::move(*this).no_unique_address_data_member(); + } + +}; + + +//============================================================================== + +template +class alignas(16) AggregateTask final + : public SchedulingInfoStorage< + TaskNode, + SchedulingInfo + >, // must be first base class for allocation reasons!!! + public ObjectWithVLAEmulation< + AggregateTask, + OwningRawPtr> + > +{ +private: + + using base_t = SchedulingInfoStorage< + TaskNode, + SchedulingInfo + >; + using vla_base_t = ObjectWithVLAEmulation< + AggregateTask, + OwningRawPtr> + >; + + using task_base_type = TaskNode; + +public: + + using aggregate_task_type = AggregateTask; // concept marker + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + AggregateTask( + int32_t aggregate_predecessor_count, + Args&&... args + ) : base_t( + TaskType::Aggregate, + TaskPriority::Regular, // all aggregates are regular priority + std::forward(args)... + ), + vla_base_t(aggregate_predecessor_count) + { } + + KOKKOS_INLINE_FUNCTION + int32_t dependence_count() const { return this->n_vla_entries(); } + +}; + +//KOKKOS_IMPL_IS_CONCEPT(aggregate_task); + +//============================================================================== + + +template +class RunnableTaskBase + : public TaskNode // must be first base class for allocation reasons!!! +{ +private: + + using base_t = TaskNode; + +public: + + using task_base_type = TaskNode; + using function_type = void(*)( task_base_type * , void * ); + using destroy_type = void(*)( task_base_type * ); + using runnable_task_type = RunnableTaskBase; + +private: + + function_type m_apply; + task_base_type* m_predecessor = nullptr; + +public: + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + RunnableTaskBase( + function_type apply_function_ptr, + Args&&... args + ) : base_t(std::forward(args)...), + m_apply(apply_function_ptr) + { } + + KOKKOS_INLINE_FUNCTION + bool has_predecessor() const { return m_predecessor != nullptr; } + + KOKKOS_INLINE_FUNCTION + void clear_predecessor() { m_predecessor = nullptr; } + + KOKKOS_INLINE_FUNCTION + void clear_predecessor() volatile { m_predecessor = nullptr; } + + template + KOKKOS_INLINE_FUNCTION + SchedulingInfo& + scheduling_info_as() + { + using info_storage_type = SchedulingInfoStorage; + + return static_cast(this)->scheduling_info(); + } + + template + KOKKOS_INLINE_FUNCTION + SchedulingInfo const& + scheduling_info_as() const + { + using info_storage_type = SchedulingInfoStorage; + + return static_cast(this)->scheduling_info(); + } + + + KOKKOS_INLINE_FUNCTION + task_base_type& get_predecessor() const { + KOKKOS_EXPECTS(m_predecessor != nullptr); + return *m_predecessor; + } + + KOKKOS_INLINE_FUNCTION + void set_predecessor(task_base_type& predecessor) + { + KOKKOS_EXPECTS(m_predecessor == nullptr); + // Increment the reference count so that predecessor doesn't go away + // before this task is enqueued. + // (should be memory order acquire) + predecessor.increment_reference_count(); + m_predecessor = &predecessor; + } + + KOKKOS_INLINE_FUNCTION + void acquire_predecessor_from(runnable_task_type& other) + { + KOKKOS_EXPECTS(m_predecessor == nullptr || other.m_predecessor == m_predecessor); + // since we're transfering, no need to modify the reference count + m_predecessor = other.m_predecessor; + other.m_predecessor = nullptr; + } + + KOKKOS_INLINE_FUNCTION + void acquire_predecessor_from(runnable_task_type& other) volatile + { + KOKKOS_EXPECTS(m_predecessor == nullptr || other.m_predecessor == m_predecessor); + // since we're transfering, no need to modify the reference count + m_predecessor = other.m_predecessor; + other.m_predecessor = nullptr; + } + + template + KOKKOS_INLINE_FUNCTION + void run(TeamMember& member) { + (*m_apply)(this, &member); + } +}; + +//KOKKOS_IMPL_IS_CONCEPT(runnable_task); + +//============================================================================== + +template +class TaskResultStorage : public Base +{ +private: + + using base_t = Base; + + alignas(Base) ResultType m_value = ResultType{}; + + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + ResultType* value_pointer() { + // Over-alignment makes this a non-standard-layout class, + // so alignas() doesn't work + //static_assert( + // offsetof(TaskResultStorage, m_value) == sizeof(Base), + // "TaskResultStorage must be POD for layout purposes" + //); + return &m_value; + } + + KOKKOS_INLINE_FUNCTION + ResultType& value_reference() { return m_value; } + +}; + + +// TODO @tasking @optimization DSH optimization for empty types (in addition to void) +template +class TaskResultStorage : public Base +{ +private: + + using base_t = Base; + +public: + + using base_t::base_t; + + KOKKOS_INLINE_FUNCTION + void* value_pointer() noexcept { return nullptr; } + + KOKKOS_INLINE_FUNCTION + void value_reference() noexcept { } + +}; + +//============================================================================== + +template < + class TaskQueueTraits, + class Scheduler, + class ResultType, + class FunctorType +> +class alignas(16) RunnableTask + : // using nesting of base classes to control layout; multiple empty base classes + // may not be ABI compatible with CUDA on Windows + public TaskResultStorage< + ResultType, + SchedulingInfoStorage< + RunnableTaskBase, + typename Scheduler::task_queue_type::task_scheduling_info_type + > + >, // must be first base class + public FunctorType +{ +private: + using base_t = TaskResultStorage< + ResultType, + SchedulingInfoStorage< + RunnableTaskBase, + typename Scheduler::task_queue_type::task_scheduling_info_type + > + >; + + using runnable_task_base_type = RunnableTaskBase; + using scheduler_type = Scheduler; + using scheduling_info_type = + typename scheduler_type::task_scheduling_info_type; + using scheduling_info_storage_base = base_t; + + using task_base_type = TaskNode; + using specialization = TaskQueueSpecialization; + using member_type = typename specialization::member_type; + using result_type = ResultType; + using functor_type = FunctorType; + +public: + + template + // requires std::is_constructible_v + KOKKOS_INLINE_FUNCTION + constexpr explicit + RunnableTask( + FunctorType&& functor, + Args&&... args + ) : base_t( + std::forward(args)... + ), + functor_type(std::move(functor)) + { } + + KOKKOS_INLINE_FUNCTION + ~RunnableTask() = delete; + + KOKKOS_INLINE_FUNCTION + void update_scheduling_info( + member_type& member + ) { + // TODO @tasking @generalization DSH call a queue-specific hook here; for now, this info is already updated elsewhere + // this->scheduling_info() = member.scheduler().scheduling_info(); + } + + KOKKOS_INLINE_FUNCTION + void apply_functor(member_type* member, void*) + { + update_scheduling_info(*member); + this->functor_type::operator()(*member); + } + + template + KOKKOS_INLINE_FUNCTION + void apply_functor(member_type* member, T* val) + { + update_scheduling_info(*member); + //this->functor_type::operator()(*member, *val); + this->functor_type::operator()(*member, *val); + } + + KOKKOS_FUNCTION static + void destroy( task_base_type * root ) + { + //TaskResult::destroy(root); + } + + KOKKOS_FUNCTION static + void apply(task_base_type* self, void* member_as_void) + { + using task_type = Impl::RunnableTask*; + auto* const task = static_cast(self); + auto* const member = reinterpret_cast(member_as_void); + + // Now that we're over-aligning the result storage, this isn't a problem any more + //static_assert(std::is_standard_layout::value, + // "Tasks must be standard layout" + //); + //static_assert(std::is_pod::value, + // "Tasks must be PODs" + //); + + // Task may be serial or team. + // If team then must synchronize before querying if respawn was requested. + // If team then only one thread calls destructor. + + const bool only_one_thread = +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) + 0 == threadIdx.x && 0 == threadIdx.y ; +#else + 0 == member->team_rank(); +#endif + + // Ensure that the respawn flag is set to zero + self->set_respawn_flag(false); + + //task->apply_functor(member, TaskResult::ptr(task)); + task->apply_functor(member, task->value_pointer()); + + member->team_barrier(); + + if ( only_one_thread && !(task->get_respawn_flag()) ) { + // Did not respawn, destroy the functor to free memory. + task->functor_type::~functor_type(); + // Cannot destroy and deallocate the task until its dependences + // have been processed. + } + } + +}; + +} /* namespace Impl */ + + +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKNODE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp new file mode 100644 index 0000000000..85e665fffc --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp @@ -0,0 +1,195 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKPOLICYDATA_HPP +#define KOKKOS_IMPL_TASKPOLICYDATA_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +//---------------------------------------------------------------------------- + +template +struct TaskPolicyWithPredecessor +{ +private: + + DepFutureType m_predecessor; + Kokkos::TaskPriority m_priority; + +public: + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor( + DepFutureType arg_predecessor, + Kokkos::TaskPriority arg_priority + ) : m_predecessor(std::move(arg_predecessor)), + m_priority(arg_priority) + { } + + TaskPolicyWithPredecessor() = delete; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor(TaskPolicyWithPredecessor const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor(TaskPolicyWithPredecessor&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor&&) = default; + + KOKKOS_INLINE_FUNCTION + ~TaskPolicyWithPredecessor() = default; + + KOKKOS_INLINE_FUNCTION + DepFutureType&& predecessor() && { + return std::move(m_predecessor); + } + + KOKKOS_INLINE_FUNCTION + constexpr TaskPriority priority() const { return m_priority; } + + KOKKOS_INLINE_FUNCTION + static constexpr int task_type() noexcept { return TaskEnum; } + +}; + +// TODO @tasking @cleanup DSH clean this up. Using nullptr_t here is too clever +template +struct TaskPolicyWithScheduler +{ +public: + + using predecessor_future_type = PredecessorFuture; + +private: + + Scheduler m_scheduler; + Kokkos::TaskPriority m_priority; + predecessor_future_type m_predecessor; + +public: + + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler( + Scheduler arg_scheduler, + Kokkos::TaskPriority arg_priority + ) : m_scheduler(std::move(arg_scheduler)), + m_priority(arg_priority) + { } + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler( + Scheduler arg_scheduler, + predecessor_future_type arg_predecessor, + Kokkos::TaskPriority arg_priority + ) : m_scheduler(std::move(arg_scheduler)), + m_priority(arg_priority), + m_predecessor(std::move(arg_predecessor)) + { } + + TaskPolicyWithScheduler() = delete; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler(TaskPolicyWithScheduler const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler(TaskPolicyWithScheduler&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler&&) = default; + + KOKKOS_INLINE_FUNCTION + ~TaskPolicyWithScheduler() = default; + + KOKKOS_INLINE_FUNCTION + Scheduler& scheduler() & { + return m_scheduler; + } + + KOKKOS_INLINE_FUNCTION + constexpr TaskPriority priority() const { return m_priority; } + + KOKKOS_INLINE_FUNCTION + predecessor_future_type& predecessor() & { + return m_predecessor; + } + + KOKKOS_INLINE_FUNCTION + static constexpr bool has_predecessor() noexcept + { + return not std::is_same::value; + } + + KOKKOS_INLINE_FUNCTION + static constexpr int task_type() noexcept { return TaskEnum; } + +}; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKPOLICYDATA_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp index eacf0837fa..1adcfe4cc4 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp @@ -49,27 +49,24 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include + #include #include #include -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template< class Space , typename ResultType , class FunctorType > -class TaskBase ; - -template< typename Space > -class TaskQueue ; - -template< typename Space > -class TaskQueueSpecialization ; - -} /* namespace Impl */ -} /* namespace Kokkos */ //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -77,240 +74,29 @@ class TaskQueueSpecialization ; namespace Kokkos { namespace Impl { -/** \brief Base class for task management, access, and execution. - * - * Inheritance structure to allow static_cast from the task root type - * and a task's FunctorType. - * - * // Enable a functor to access the base class - * // and provide memory for result value. - * TaskBase< Space , ResultType , FunctorType > - * : TaskBase< void , void , void > - * , FunctorType - * { ... }; - * Followed by memory allocated for result value. - * - * - * States of a task: - * - * Constructing State, NOT IN a linked list - * m_wait == 0 - * m_next == 0 - * - * Scheduling transition : Constructing -> Waiting - * before: - * m_wait == 0 - * m_next == this task's initial dependence, 0 if none - * after: - * m_wait == EndTag - * m_next == EndTag - * - * Waiting State, IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == next of linked list of tasks - * - * transition : Waiting -> Executing - * before: - * m_next == EndTag - * after:: - * m_next == LockTag - * - * Executing State, NOT IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == LockTag - * - * Respawn transition : Executing -> Executing-Respawn - * before: - * m_next == LockTag - * after: - * m_next == this task's updated dependence, 0 if none - * - * Executing-Respawn State, NOT IN a linked list - * m_apply != 0 - * m_queue != 0 - * m_ref_count > 0 - * m_wait == head of linked list of tasks waiting on this task - * m_next == this task's updated dependence, 0 if none - * - * transition : Executing -> Complete - * before: - * m_wait == head of linked list - * after: - * m_wait == LockTag - * - * Complete State, NOT IN a linked list - * m_wait == LockTag: cannot add dependence (<=> complete) - * m_next == LockTag: not a member of a wait queue - * - */ -template<> -class TaskBase< void , void , void > -{ -public: - - enum : int16_t { TaskTeam = 0 , TaskSingle = 1 , Aggregate = 2 }; - enum : uintptr_t { LockTag = ~uintptr_t(0) , EndTag = ~uintptr_t(1) }; - - template< typename > friend class Kokkos::TaskScheduler ; - - typedef TaskQueue< void > queue_type ; - - typedef void (* function_type) ( TaskBase * , void * ); - - // sizeof(TaskBase) == 48 - - function_type m_apply ; ///< Apply function pointer - queue_type * m_queue ; ///< Pointer to queue - TaskBase * m_wait ; ///< Linked list of tasks waiting on this - TaskBase * m_next ; ///< Waiting linked-list next - int32_t m_ref_count ; ///< Reference count - int32_t m_alloc_size ; ///< Allocation size - int32_t m_dep_count ; ///< Aggregate's number of dependences - int16_t m_task_type ; ///< Type of task - int16_t m_priority ; ///< Priority of runnable task - - TaskBase( TaskBase && ) = delete ; - TaskBase( const TaskBase & ) = delete ; - TaskBase & operator = ( TaskBase && ) = delete ; - TaskBase & operator = ( const TaskBase & ) = delete ; - -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~TaskBase() {}; -#else - KOKKOS_INLINE_FUNCTION ~TaskBase() = default; -#endif - - KOKKOS_INLINE_FUNCTION constexpr - TaskBase() - : m_apply( 0 ) - , m_queue( 0 ) - , m_wait( 0 ) - , m_next( 0 ) - , m_ref_count( 0 ) - , m_alloc_size( 0 ) - , m_dep_count( 0 ) - , m_task_type( 0 ) - , m_priority( 0 ) - {} - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - TaskBase * volatile * aggregate_dependences() volatile - { return reinterpret_cast( this + 1 ); } - - KOKKOS_INLINE_FUNCTION - bool requested_respawn() - { - // This should only be called when a task has finished executing and is - // in the transition to either the complete or executing-respawn state. - TaskBase * const lock = reinterpret_cast< TaskBase * >( LockTag ); - return lock != m_next; - } - - KOKKOS_INLINE_FUNCTION - void add_dependence( TaskBase* dep ) - { - // Precondition: lock == m_next - - TaskBase * const lock = (TaskBase *) LockTag ; - - // Assign dependence to m_next. It will be processed in the subsequent - // call to schedule. Error if the dependence is reset. - if ( lock != Kokkos::atomic_exchange( & m_next, dep ) ) { - Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); - } - - if ( 0 != dep ) { - // The future may be destroyed upon returning from this call - // so increment reference count to track this assignment. - Kokkos::atomic_increment( &(dep->m_ref_count) ); - } - } - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - int32_t reference_count() const - { return *((int32_t volatile *)( & m_ref_count )); } - -}; - -static_assert( sizeof(TaskBase) == 48 - , "Verifying expected sizeof(TaskBase)" ); - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -template< typename ResultType > -struct TaskResult { - - enum : int32_t { size = sizeof(ResultType) }; - - using reference_type = ResultType & ; - - KOKKOS_INLINE_FUNCTION static - ResultType * ptr( TaskBase * task ) - { - return reinterpret_cast< ResultType * > - ( reinterpret_cast< char * >(task) + task->m_alloc_size - sizeof(ResultType) ); - } - - KOKKOS_INLINE_FUNCTION static - reference_type get( TaskBase * task ) - { return *ptr( task ); } -}; - -template<> -struct TaskResult< void > { - - enum : int32_t { size = 0 }; - - using reference_type = void ; - - KOKKOS_INLINE_FUNCTION static - void * ptr( TaskBase * ) { return (void*) 0 ; } - - KOKKOS_INLINE_FUNCTION static - reference_type get( TaskBase * ) {} -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template<> -class TaskQueue< void > {}; /** \brief Manage task allocation, deallocation, and scheduling. * * Task execution is deferred to the TaskQueueSpecialization. * All other aspects of task management have shared implementation. */ -template< typename ExecSpace > -class TaskQueue : public TaskQueue { -private: +template< typename ExecSpace, typename MemorySpace > +class TaskQueue : public TaskQueueBase { +protected: - friend class TaskQueueSpecialization< ExecSpace > ; - friend class Kokkos::TaskScheduler< ExecSpace > ; + template + friend struct TaskQueueSpecialization; + template + friend class TaskQueueSpecializationConstrained; + template + friend class Kokkos::BasicTaskScheduler; - using execution_space = ExecSpace ; - using specialization = TaskQueueSpecialization< execution_space > ; - using memory_space = typename specialization::memory_space ; - using device_type = Kokkos::Device< execution_space , memory_space > ; - using memory_pool = Kokkos::MemoryPool< device_type > ; - using task_root_type = Kokkos::Impl::TaskBase ; + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device< execution_space , memory_space > ; + using memory_pool = Kokkos::MemoryPool< device_type > ; + using task_root_type = Kokkos::Impl::TaskBase; + using team_queue_type = TaskQueue; struct Destroy { TaskQueue * m_queue ; @@ -325,8 +111,8 @@ private: memory_pool m_memory ; task_root_type * volatile m_ready[ NumQueue ][ 2 ]; - long m_accum_alloc ; // Accumulated number of allocations - int m_count_alloc ; // Current number of allocations + //long m_accum_alloc ; // Accumulated number of allocations + int m_count_alloc = 0 ; // Current number of allocations int m_max_alloc ; // Maximum number of allocations int m_ready_count ; // Number of ready or executing @@ -347,8 +133,8 @@ private: // task->m_next is the dependence or zero // Postcondition: // task->m_next is linked list membership - KOKKOS_FUNCTION void schedule_runnable( task_root_type * const ); - KOKKOS_FUNCTION void schedule_aggregate( task_root_type * const ); + KOKKOS_FUNCTION void schedule_runnable(task_root_type*); + KOKKOS_FUNCTION void schedule_aggregate(task_root_type*); // Reschedule a task // Precondition: @@ -381,23 +167,29 @@ private: KOKKOS_FUNCTION static void decrement( task_root_type * task ); + public: - // If and only if the execution space is a single thread - // then execute ready tasks. KOKKOS_INLINE_FUNCTION - void iff_single_thread_recursive_execute() - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - specialization::iff_single_thread_recursive_execute( this ); -#endif - } + int allocation_count() const noexcept { return m_count_alloc; } - void execute() { specialization::execute( this ); } + + KOKKOS_INLINE_FUNCTION + void initialize_team_queues(int pool_size) const noexcept { } + + KOKKOS_INLINE_FUNCTION + task_root_type* attempt_to_steal_task() const noexcept { return nullptr; } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int team_rank) { return *this; } + + //void execute() { specialization::execute( this ); } template< typename FunctorType > void proc_set_apply( typename task_root_type::function_type * ptr ) { + using specialization = + TaskQueueSpecialization>; specialization::template proc_set_apply< FunctorType >( ptr ); } @@ -451,9 +243,7 @@ public: { using value_type = typename FunctorType::value_type ; - using task_type = Impl::TaskBase< execution_space - , value_type - , FunctorType > ; + using task_type = Impl::Task ; enum : size_t { align = ( 1 << 4 ) , align_mask = align - 1 }; enum : size_t { task_size = sizeof(task_type) }; @@ -480,86 +270,6 @@ public: //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- -namespace Kokkos { -namespace Impl { - -template< class ExecSpace , typename ResultType , class FunctorType > -class TaskBase - : public TaskBase< void , void , void > - , public FunctorType -{ -private: - - TaskBase() = delete ; - TaskBase( TaskBase && ) = delete ; - TaskBase( const TaskBase & ) = delete ; - TaskBase & operator = ( TaskBase && ) = delete ; - TaskBase & operator = ( const TaskBase & ) = delete ; - -public: - - using root_type = TaskBase< void , void , void > ; - using functor_type = FunctorType ; - using result_type = ResultType ; - - using specialization = TaskQueueSpecialization< ExecSpace > ; - using member_type = typename specialization::member_type ; - - KOKKOS_INLINE_FUNCTION - void apply_functor( member_type * const member , void * ) - { functor_type::operator()( *member ); } - - template< typename T > - KOKKOS_INLINE_FUNCTION - void apply_functor( member_type * const member - , T * const result ) - { functor_type::operator()( *member , *result ); } - - KOKKOS_FUNCTION static - void apply( root_type * root , void * exec ) - { - TaskBase * const task = static_cast< TaskBase * >( root ); - member_type * const member = reinterpret_cast< member_type * >( exec ); - result_type * const result = TaskResult< result_type >::ptr( task ); - - // Task may be serial or team. - // If team then must synchronize before querying if respawn was requested. - // If team then only one thread calls destructor. - - const bool only_one_thread = -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) - 0 == threadIdx.x && 0 == threadIdx.y ; -#else - 0 == member->team_rank(); -#endif - - task->apply_functor( member , result ); - - member->team_barrier(); - - if ( only_one_thread && !(task->requested_respawn()) ) { - // Did not respawn, destroy the functor to free memory. - static_cast(task)->~functor_type(); - // Cannot destroy and deallocate the task until its dependences - // have been processed. - } - } - - // Constructor for runnable task - KOKKOS_INLINE_FUNCTION constexpr - TaskBase( FunctorType && arg_functor ) - : root_type() , functor_type( arg_functor ) {} - - KOKKOS_INLINE_FUNCTION - ~TaskBase() {} -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ #endif /* #ifndef KOKKOS_IMPL_TASKQUEUE_HPP */ diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp new file mode 100644 index 0000000000..b0685506d4 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp @@ -0,0 +1,569 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUECOMMON_HPP +#define KOKKOS_IMPL_TASKQUEUECOMMON_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +/// @brief CRTP Base class implementing the ready count parts common to most task queues +template +class TaskQueueCommonMixin +{ +private: + + int32_t m_ready_count = 0; + + // CRTP boilerplate + KOKKOS_INLINE_FUNCTION + Derived& _self() { return *static_cast(this); } + +public: + + //---------------------------------------------------------------------------- + // {{{2 + + TaskQueueCommonMixin() + : m_ready_count(0) + { + // TODO @tasking @memory_order DSH figure out if I need this store to be atomic + } + + ~TaskQueueCommonMixin() { + KOKKOS_EXPECTS((Kokkos::memory_fence(), m_ready_count < 1)); + KOKKOS_EXPECTS(m_ready_count == 0); + } + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + +private: + + // This would be more readable with a lambda, but that comes with + // all the baggage associated with a lambda (compilation times, bugs with + // nvcc, etc.), so we'll use a simple little helper functor here. + template + struct _schedule_waiting_tasks_operation { + TaskNode const& m_predecessor; + Derived& m_queue; + TeamSchedulerInfo const& m_info; + KOKKOS_INLINE_FUNCTION + void operator()(TaskNode&& task) const noexcept + // requires Same + { + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + if(task.is_runnable()) // KOKKOS_LIKELY + { + // TODO @tasking @optimiazation DSH check this outside of the loop ? + if(m_predecessor.is_runnable()) { + m_queue.update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task.as_runnable_task(), + /* predecessor = */ m_predecessor.as_runnable_task() + ); + } + else { + KOKKOS_ASSERT(m_predecessor.is_aggregate()); + m_queue.update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task.as_runnable_task(), + /* predecessor = */ m_predecessor.template as_aggregate() + ); + } + m_queue.schedule_runnable( + std::move(task).as_runnable_task(), + m_info + ); + } + else { + // The scheduling info update happens inside of schedule_aggregate + m_queue.schedule_aggregate( + std::move(task).template as_aggregate(), + m_info + ); + } + } + }; + +protected: + + template + KOKKOS_FUNCTION + void _complete_finished_task( + TaskNode&& task, + TeamSchedulerInfo const& info + ) { + task.consume_wait_queue( + _schedule_waiting_tasks_operation{ + task, + _self(), + info + } + ); + bool should_delete = task.decrement_and_check_reference_count(); + if(should_delete) { + _self().deallocate(std::move(task)); + } + } + + KOKKOS_INLINE_FUNCTION + void _increment_ready_count() { + // TODO @tasking @memory_order DSH memory order + Kokkos::atomic_increment(&this->m_ready_count); + } + + KOKKOS_INLINE_FUNCTION + void _decrement_ready_count() { + // TODO @tasking @memory_order DSH memory order + Kokkos::atomic_decrement(&this->m_ready_count); + Kokkos::memory_fence(); + } + +public: + + KOKKOS_INLINE_FUNCTION + bool is_done() const noexcept { + // TODO @tasking @memory_order DSH Memory order, instead of volatile + return (*(volatile int*)(&m_ready_count)) == 0; + } + + KOKKOS_INLINE_FUNCTION + int32_t ready_count() const noexcept { + // TODO @tasking @memory_order DSH Memory order, instead of volatile + return (*(volatile int*)(&m_ready_count)); + } + + template + KOKKOS_FUNCTION + void + complete( + RunnableTaskBase&& task, + TeamSchedulerInfo const& info + ) + { + if(task.get_respawn_flag()) { + _self().schedule_runnable(std::move(task), info); + } + else { + _complete_finished_task(std::move(task), info); + } + // A runnable task was popped from a ready queue finished executing. + // If respawned into a ready queue then the ready count was incremented + // so decrement whether respawned or not. If finished, all of the + // tasks waiting on this have been enqueued (either in the ready queue + // or the next waiting queue, in the case of an aggregate), and the + // ready count has been incremented for each of those, preventing + // quiescence. Thus, it's safe to decrement the ready count here. + // TODO @tasking @memory_order DSH memory order? (probably release) + _decrement_ready_count(); + } + + template + KOKKOS_FUNCTION + void + complete( + AggregateTask&& task, + TeamSchedulerInfo const& info + ) { + // TODO @tasking DSH old code has a ifndef __HCC_ACCELERATOR__ here; figure out why + _complete_finished_task(std::move(task), info); + } + + // end Task and queue completion }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + +public: + + // This isn't actually generic; the template parameters are just to keep + // Derived from having to be complete + template + KOKKOS_INLINE_FUNCTION + void + schedule_runnable_to_queue( + RunnableTaskBase&& task, + ReadyQueueType& ready_queue, + TeamSchedulerInfo const& info + ) + { + bool task_is_ready = true; + bool scheduling_info_updated = false; + + // do this before enqueueing and potentially losing exclusive access to task + bool task_is_respawning = task.get_respawn_flag(); + + // clear the respawn flag, since we're handling the respawn (if any) here. + // We must make sure this is written through the cache, since the next + // thread to access it might be a Cuda thread from a different thread block. + ((RunnableTaskBase volatile&)task).set_respawn_flag(false); + + if(task.has_predecessor()) { + // save the predecessor into a local variable, then clear it from the + // task before adding it to the wait queue of the predecessor + // (We have exclusive access to the task's predecessor, so we don't need + // to do this atomically) + // TODO @tasking @internal_documentation DSH document that we expect exclusive access to `task` in this function + auto& predecessor = task.get_predecessor(); + // This needs a load/store fence here, technically + // making this a release store would also do this + ((RunnableTaskBase volatile&)task).clear_predecessor(); + + // TODO @tasking @memory_order DSH remove this fence in favor of memory orders + Kokkos::memory_fence(); // for now + + // Try to add the task to the predecessor's waiting queue. If it fails, + // the predecessor is already done + bool predecessor_not_ready = predecessor.try_add_waiting(task); + + // NOTE: if the predecessor was not ready and the task was enqueued, + // we've lost exclusive access and should nt touch task again + + // If the predecessor is not done, then task is not ready + task_is_ready = not predecessor_not_ready; + + if(task_is_ready and predecessor.is_runnable()) { + // this is our last chance to update the scheduling info before + // predecessor is potentially deleted + _self().update_scheduling_info_from_completed_predecessor( + /* ready_task = */ task, + /* predecessor = */ predecessor.as_runnable_task() + ); + scheduling_info_updated = true; + } + + if(task_is_respawning) { + // Reference count for predecessor was incremented when + // respawn called set_dependency() + // so that if predecessor completed prior to the + // above try_add_waiting(), predecessor would not be destroyed. + // predecessor reference count can now be decremented, + // which may deallocate it. + bool should_delete = predecessor.decrement_and_check_reference_count(); + if(should_delete) { + // TODO @tasking @cleanup DSH better encapsulation of this! + _self().deallocate(std::move(predecessor)); + } + } + // Note! predecessor may be destroyed at this point, so don't add anything + // here + } + + if(scheduling_info_updated) { + // We need to go back to the queue itself and see if it wants to schedule + // somewhere else + _self().schedule_runnable(std::move(task), info); + } + // Put it in the appropriate ready queue if it's ready + else if(task_is_ready) { + // Increment the ready count + _self()._increment_ready_count(); + // and enqueue the task + // (can't move because the task isn't expired unless the push succeeds + bool push_success = ready_queue.push(task); + if(not push_success) { + _self().handle_failed_ready_queue_insertion( + std::move(task), ready_queue, info + ); + } + } + + // Task may be enqueued and may be run at any point; don't touch it (hence + // the use of move semantics) + } + + template + KOKKOS_INLINE_FUNCTION + void + handle_failed_ready_queue_insertion( + RunnableTaskBase&& task, + ReadyQueueType& ready_queue, + TeamSchedulerInfo const& info + ) { + Kokkos::abort("Unhandled failure of ready task queue insertion!\n"); + } + + // This isn't actually generic; the template parameters are just to keep + // Derived from having to be complete + template + KOKKOS_FUNCTION + void + schedule_aggregate( + AggregateTask&& aggregate, + TeamSchedulerInfo const& info + ) + { + // Because the aggregate is being scheduled, should not be in any queue + KOKKOS_EXPECTS(not aggregate.is_enqueued()); + + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + using team_scheduler_info_type = typename Derived::team_scheduler_info_type; + static_assert( + std::is_same::value, + "SchedulingInfo type mismatch!" + ); + + bool incomplete_dependence_found = false; + + for(auto*& predecessor_ptr_ref : aggregate) { + + // if a previous scheduling operation hasn't already set the predecessor + // to nullptr, try to enqueue the aggregate into the predecessorendence's waiting + // queue + if(predecessor_ptr_ref != nullptr) { + + // Swap the pointer onto the stack and set the one in the aggregate VLA + // to nullptr before we try to add it to the waiting queue so that some + // other thread doesn't also get to here and find the pointer to be + // not null (since as soon as we try and schedule the aggregate, we + // potentially lose exclusive access to it if that enqueueing operation + // succeeds. The swap doesn't need to happen atomically since we have + // exclusive access to aggregate until an insertion succeeds + auto* predecessor_ptr = std::move(predecessor_ptr_ref); + + // TODO @tasking @memory_order DSH I think this needs to be a store release so that it doesn't get reordered after the queue insertion + predecessor_ptr_ref = nullptr; + + // TODO @tasking @memory_order DSH remove this fence in favor of memory orders + Kokkos::memory_fence(); + + // If adding the aggregate to the waiting queue succeeds, the predecessor is not + // complete + bool pred_not_ready = predecessor_ptr->try_add_waiting(aggregate); + + // NOTE! At this point it is unsafe to access aggregate (unless the + // enqueueing failed, so we can't use move semantics to expire it) + + // we found an incomplete dependence, so we can't make task's successors + // ready yet + incomplete_dependence_found = pred_not_ready; + + if(not pred_not_ready) { + // A predecessor was done, and we didn't enqueue the aggregate + // Update the aggregate's scheduling info (we still have exclusive + // access to it here) + if(predecessor_ptr->is_runnable()) { + _self().update_scheduling_info_from_completed_predecessor( + aggregate, predecessor_ptr->as_runnable_task() + ); + } + else { + KOKKOS_ASSERT(predecessor_ptr->is_aggregate()); + _self().update_scheduling_info_from_completed_predecessor( + aggregate, (*predecessor_ptr).template as_aggregate() + ); + } + } + + // the reference count for the predecessor was incremented when we put + // it into the predecessor list, so decrement it here + bool should_delete = predecessor_ptr->decrement_and_check_reference_count(); + if(should_delete) { + // TODO @tasking @cleanup DSH better encapsulation of this! + _self().deallocate(std::move(*predecessor_ptr)); + } + + // Stop the loop if we found an incomplete dependence + if(incomplete_dependence_found) break; + } + } + + // NOTE: it's not safe to access aggregate any more if an incomplete dependence + // was found, because some other thread could have already popped it off + // of another waiting queue + + if(not incomplete_dependence_found) { + // all of the predecessors were completed, so we can complete `task` + _self().complete(std::move(aggregate), info); + } + // Note!! task may have been deleted at this point, so don't add anything here! + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + RunnableTaskBase& ready_task, + RunnableTaskBase const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + ready_task.template scheduling_info_as() = + predecessor.template scheduling_info_as(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + AggregateTask& aggregate, + RunnableTaskBase const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + aggregate.scheduling_info() = + predecessor.template scheduling_info_as(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + AggregateTask& aggregate, + AggregateTask const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + aggregate.scheduling_info() = predecessor.scheduling_info(); + } + + // Provide a sensible default that can be overridden + template + KOKKOS_INLINE_FUNCTION + void update_scheduling_info_from_completed_predecessor( + RunnableTaskBase& ready_task, + AggregateTask const& predecessor + ) const + { + // by default, tell a ready task to use the scheduling info of its most + // recent predecessor + using task_scheduling_info_type = typename Derived::task_scheduling_info_type; + ready_task.template scheduling_info_as() = + predecessor.scheduling_info(); + } + + template + KOKKOS_INLINE_FUNCTION + void initialize_scheduling_info_from_predecessor( + TaskNode& task, + TaskNode& predecessor + ) const + { + /* do nothing by default */ + } + + template + KOKKOS_INLINE_FUNCTION + void initialize_scheduling_info_from_team_scheduler_info( + TaskNode& task, + TeamSchedulerInfo const& info + ) const + { + /* do nothing by default */ + } + + template < + class ExecutionSpace, + class MemorySpace, + class MemoryPool + > + static /* KOKKOS_CONSTEXPR_14 */ size_t + task_queue_allocation_size( + ExecutionSpace const&, + MemorySpace const&, + MemoryPool const& + ) + // requires Same + // && Same + // && Same + { + static_assert( + std::is_same::value + && std::is_same::value + && std::is_same::value, + "Type mismatch in task_queue_allocation_size customization point" + ); + + return sizeof(Derived); + } + + // end Scheduling }}}2 + //---------------------------------------------------------------------------- + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUECOMMON_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp new file mode 100644 index 0000000000..c3ed1d6c71 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMemoryManager.hpp @@ -0,0 +1,251 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP +#define KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template < + class ExecSpace, + class MemorySpace, + class MemoryPool = Kokkos::MemoryPool> +> +class TaskQueueMemoryManager + : public TaskQueueBase +{ +public: + + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device; + using memory_pool = MemoryPool; + using allocation_size_type = size_t; + +private: + + memory_pool m_pool; + // TODO @tasking @generalization DSH re-enable this with a flag in the type + //long m_accum_alloc = 0; + int m_count_alloc = 0; + int m_max_alloc = 0; + + struct _allocation_result { + bool success; + void* pointer; + }; + + KOKKOS_INLINE_FUNCTION + _allocation_result + _do_pool_allocate(allocation_size_type requested_size) { + // KOKKOS_EXPECTS(requested_size >= 0); generates a warning when allocation_size_type is unsigned + if(requested_size == 0 ) { + return { true, nullptr }; + } + else { + void* data = m_pool.allocate(static_cast(requested_size)); + + //Kokkos::atomic_increment(&m_accum_alloc); // memory_order_relaxed + Kokkos::atomic_increment(&m_count_alloc); // memory_order_relaxed + // TODO @tasking @minor DSH make this thread safe? (otherwise, it's just an approximation, which is probably fine...) + if(m_max_alloc < m_count_alloc) m_max_alloc = m_count_alloc; + + return { data != nullptr, data }; + } + } + + template + KOKKOS_INLINE_FUNCTION + T* + _do_contruct(void* allocated, allocation_size_type allocated_size, Args&&... args) { + + static_assert( + std::is_base_of, T>::value, + "TaskQueueMemoryManager can only allocate objects with PoolAllocatedObjectBase base class" + ); + + // TODO @tasking DSH figure out why this isn't working + //static_assert( + // std::is_constructible::value, + // "TaskQueueMemoryManager can't construct object of the requested type from the " + // " allocation size and the given arguments" + //); + + + auto rv = new (allocated) T( + std::forward(args)..., + allocated_size + ); + + // It feels like there should be a way to check this at compile-time + KOKKOS_ASSERT( + (intptr_t)(rv) == (intptr_t)(static_cast*>(rv)) + && "PoolAllocatedObjectBase must be the first base class of the allocated type" + ); + + return rv; + + } + + +public: + + explicit + TaskQueueMemoryManager(memory_pool const& pool) + : m_pool(pool) + { } + + + template + KOKKOS_FUNCTION + T* + allocate_and_construct(Args&&... args) + // requires + // std::is_base_of_v, T> + // && std::is_constructible_v + { + constexpr auto allocation_size = sizeof(T); + + + auto result = _do_pool_allocate(allocation_size); + + KOKKOS_ASSERT(result.success && "Memory allocation failure"); + + auto rv = _do_contruct(result.pointer, allocation_size, std::forward(args)...); + + KOKKOS_ENSURES(intptr_t(rv) % alignof(T) == 0 && "alignment not preserved!"); + + return rv; + } + + template + KOKKOS_INLINE_FUNCTION + T* + allocate_and_construct_with_vla_emulation( + allocation_size_type n_vla_entries, + Args&&... args + ) + // requires + // std::is_base_of_v, T> + // && std::is_base_of, T>::value + // && std::is_constructible_v + { + + + static_assert( + std::is_base_of, T>::value, + "Can't append emulated variable length array of type with greater alignment than" + " the type to which the VLA is being appended" + ); + + using vla_emulation_base = ObjectWithVLAEmulation; + + auto const allocation_size = vla_emulation_base::required_allocation_size(n_vla_entries); + auto result = _do_pool_allocate(allocation_size); + + KOKKOS_ASSERT(result.success && "Memory allocation failure"); + + auto rv = _do_contruct(result.pointer, allocation_size, std::forward(args)...); + + KOKKOS_ENSURES(intptr_t(rv) % alignof(T) == 0); + + return rv; + } + + template + KOKKOS_INLINE_FUNCTION + void deallocate(PoolAllocatedObjectBase&& obj) + { + m_pool.deallocate((void*)&obj, 1); + Kokkos::atomic_decrement(&m_count_alloc); // memory_order_relaxed + } + + KOKKOS_INLINE_FUNCTION + memory_pool& get_memory_pool() { return m_pool; } + KOKKOS_INLINE_FUNCTION + memory_pool const& get_memory_pool() const { return m_pool; } + + KOKKOS_INLINE_FUNCTION + int allocation_count() const noexcept { return m_count_alloc; } +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//////////////////////////////////////////////////////////////////////////////// +// END OLD CODE +//////////////////////////////////////////////////////////////////////////////// + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMEMORYMANAGER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp new file mode 100644 index 0000000000..17c357ff31 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple.hpp @@ -0,0 +1,286 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP +#define KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< typename ExecSpace, typename MemorySpace = typename ExecSpace::memory_space > +class LeagueQueueCollection; + +template +class TaskQueueMultiple : public TaskQueue { +private: + + using base_t = TaskQueue; + using queue_collection_t = LeagueQueueCollection; + + int m_league_rank = static_cast(KOKKOS_INVALID_INDEX); + + // This pointer is owning only if m_league_rank == 0 + queue_collection_t* m_other_queues = nullptr; + + +public: + + struct Destroy { + TaskQueueMultiple* m_queue ; + void destroy_shared_allocation(); + }; + + + using team_queue_type = TaskQueueMultiple; + + TaskQueueMultiple( + int arg_league_rank, + queue_collection_t* arg_other_queues, + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool), + m_league_rank(arg_league_rank), + m_other_queues(arg_other_queues) + { } + + explicit TaskQueueMultiple( + typename base_t::memory_pool const& arg_memory_pool + ) + : base_t(arg_memory_pool), + m_league_rank(0) + { + void* other_queues_buffer = typename base_t::memory_space{}.allocate(sizeof(queue_collection_t)); + m_other_queues = new(other_queues_buffer) queue_collection_t(this); + } + + ~TaskQueueMultiple() { + if(m_league_rank == 0 && m_other_queues != nullptr) { + m_other_queues->~queue_collection_t(); + typename base_t::memory_space{}.deallocate(m_other_queues, sizeof(queue_collection_t)); + } + // rest of destruction is handled in the base class + } + + //---------------------------------------- + + void initialize_team_queues(int arg_league_size) const noexcept { + m_other_queues->initialize_team_queues(arg_league_size, this->m_memory); + } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int arg_league_rank) noexcept { + if(arg_league_rank == m_league_rank) return *this; + else return m_other_queues->get_team_queue(arg_league_rank); + } + + KOKKOS_INLINE_FUNCTION + typename base_t::task_root_type* + attempt_to_steal_task() noexcept { + TaskBase* rv = nullptr; + auto* const end_tag = reinterpret_cast(TaskBase::EndTag); + + if (m_other_queues == nullptr) { + Kokkos::abort("attempted to steal task before queues were initialized!"); + } + + // Loop by priority and then type, and then team + for ( int i = 0 ; i < base_t::NumQueue; ++i ) { + for ( int j = 0 ; j < 2; ++j ) { + // for now, always start by trying to steal from team zero + for(int iteam = 0; iteam < m_other_queues->size(); ++iteam) { + if(iteam == m_league_rank) continue; + auto& steal_from = get_team_queue(iteam); + if( *((volatile int *) & steal_from.m_ready_count) > 0 ) { + // we've found at least one queue that's not done, so even if we can't + // pop something off of it we shouldn't return a nullptr indicating + // completion. rv will be end_tag when the pop fails + rv = base_t::pop_ready_task(&steal_from.m_ready[i][j]); + if(rv != end_tag) { + // task stolen. + // first increment our ready count, then decrement the ready count + // on the other queue: + Kokkos::atomic_increment(&this->m_ready_count); + Kokkos::atomic_decrement(&steal_from.m_ready_count); + return rv; + } + } + } + } + } + + // at this point, rv will only be nullptr if *all* of the queues had an + // m_ready_count of 0. This indicates quiescence. If at least some of them + // had non-zero, there would have been at least one pop_ready_task that + // was called and returned end_tag if it couldn't pop a task + return rv; + } + + +}; + +template +class LeagueQueueCollection { +private: + + using execution_space = ExecSpace; + using memory_space = MemorySpace; + using device_type = Kokkos::Device; + using memory_pool = Kokkos::MemoryPool; + using team_queue_type = TaskQueueMultiple; + using team_scheduler_type = BasicTaskScheduler; + using specialization = TaskQueueSpecialization; + + enum : long { max_num_queues = 6 }; //specialization::max_league_size }; + + // this is a non-owning pointer + team_queue_type* m_rank_zero_queue = nullptr; + // This really needs to be an optional> + union optional_queue { + KOKKOS_INLINE_FUNCTION + optional_queue() : uninitialized(0) { } + KOKKOS_INLINE_FUNCTION + ~optional_queue() { uninitialized = 0; } + char uninitialized; + team_queue_type initialized; + } m_queues[max_num_queues]; + int m_size = static_cast(KOKKOS_INVALID_INDEX); + +public: + + LeagueQueueCollection() = delete; + LeagueQueueCollection(LeagueQueueCollection const&) = delete; + LeagueQueueCollection(LeagueQueueCollection&&) = delete; + LeagueQueueCollection& operator=(LeagueQueueCollection const&) = delete; + LeagueQueueCollection& operator=(LeagueQueueCollection&&) = delete; + + ~LeagueQueueCollection() { + // destroy only the initialized queues that we own + for(int iteam = 0; iteam < m_size - 1; ++iteam) { + m_queues[iteam].initialized.~team_queue_type(); + m_queues[iteam].uninitialized = 0; + } + } + + KOKKOS_INLINE_FUNCTION + explicit LeagueQueueCollection( + team_queue_type* arg_rank_zero_queue + ) : m_rank_zero_queue(arg_rank_zero_queue), + m_size(1) + { } + + void initialize_team_queues( + int arg_count, memory_pool const& arg_memory_pool + ) noexcept + { + arg_count = std::min((int)max_num_queues, arg_count); + //assert(arg_count <= max_num_queues); + if(arg_count > m_size) { + for(int i = m_size; i < arg_count; ++i) { + new(&m_queues[i-1].initialized) team_queue_type(i, this, arg_memory_pool); + } + m_size = arg_count; + } + } + + KOKKOS_INLINE_FUNCTION + constexpr int size() const noexcept { return m_size; } + + KOKKOS_INLINE_FUNCTION + constexpr bool initialized() const noexcept { return m_size != int(KOKKOS_INVALID_INDEX); } + + KOKKOS_INLINE_FUNCTION + team_queue_type& get_team_queue(int iteam) { + iteam %= max_num_queues; + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) + assert(initialized()); + assert(iteam < m_size); + assert(iteam >= 0); + #endif + if(iteam == 0) return *m_rank_zero_queue; + else return m_queues[iteam-1].initialized; + } + +}; + + +} /* namespace Impl */ +} /* namespace Kokkos */ + + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#include + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp new file mode 100644 index 0000000000..81bcc96831 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueMultiple_impl.hpp @@ -0,0 +1,72 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP +#define KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include + +#define KOKKOS_IMPL_DEBUG_TASKDAG_SCHEDULING_MULTIPLE 0 + +namespace Kokkos { +namespace Impl { + +template +void TaskQueueMultiple::Destroy::destroy_shared_allocation() { +// KOKKOS WORKAROUND for CUDA 10.1 with GCC 7.3.0 +#if(KOKKOS_COMPILER_CUDA_VERSION==101) && defined(KOKKOS_COMPILER_NVCC) && (KOKKOS_COMPILER_GNU>=730) + (*m_queue).get_team_queue(0).~TaskQueueMultiple(); +#else + m_queue->get_team_queue(0).~TaskQueueMultiple(); +#endif +} + +} /* namespace Impl */ +} /* namespace Kokkos */ + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUEMULTIPLE_IMPL_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp index 5bcf672ff6..b5f8db0085 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp @@ -41,6 +41,8 @@ //@HEADER */ +#ifndef KOKKOS_IMPL_TASKQUEUE_IMPL_HPP +#define KOKKOS_IMPL_TASKQUEUE_IMPL_HPP #include #if defined( KOKKOS_ENABLE_TASKDAG ) @@ -51,22 +53,22 @@ namespace Impl { //---------------------------------------------------------------------------- -template< typename ExecSpace > -void TaskQueue< ExecSpace >::Destroy::destroy_shared_allocation() +template< typename ExecSpace, typename MemorySpace > +void TaskQueue< ExecSpace, MemorySpace >::Destroy::destroy_shared_allocation() { m_queue->~TaskQueue(); } //---------------------------------------------------------------------------- -template< typename ExecSpace > -TaskQueue< ExecSpace >::TaskQueue - ( typename TaskQueue< ExecSpace >::memory_pool const & arg_memory_pool ) +template< typename ExecSpace, typename MemorySpace> +TaskQueue< ExecSpace, MemorySpace>::TaskQueue + ( typename TaskQueue< ExecSpace, MemorySpace>::memory_pool const & arg_memory_pool ) : m_memory( arg_memory_pool ) , m_ready() - , m_accum_alloc(0) - , m_count_alloc(0) - , m_max_alloc(0) + //, m_accum_alloc(0) + //, m_count_alloc(0) + //, m_max_alloc(0) , m_ready_count(0) { for ( int i = 0 ; i < NumQueue ; ++i ) { @@ -77,8 +79,8 @@ TaskQueue< ExecSpace >::TaskQueue //---------------------------------------------------------------------------- -template< typename ExecSpace > -TaskQueue< ExecSpace >::~TaskQueue() +template< typename ExecSpace, typename MemorySpace> +TaskQueue< ExecSpace, MemorySpace>::~TaskQueue() { // Verify that queues are empty and ready count is zero @@ -97,10 +99,10 @@ TaskQueue< ExecSpace >::~TaskQueue() //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::decrement - ( TaskQueue< ExecSpace >::task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::decrement + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * task ) { task_root_type volatile & t = *task ; @@ -121,8 +123,13 @@ void TaskQueue< ExecSpace >::decrement ( t.m_next == (task_root_type *) task_root_type::LockTag ) ) { // Reference count is zero and task is complete, deallocate. - TaskQueue< ExecSpace > * const queue = - static_cast< TaskQueue< ExecSpace > * >( t.m_queue ); + //TaskQueue< ExecSpace, MemorySpace> * const queue = + // static_cast( t.m_scheduler )->m_queue; + auto* const volatile queue = static_cast(t.m_queue); + + // TODO @tasking @minor DSH this should call the destructor for a non-trivially destructible type (possibly just ignore this in the old version, though?) + // (Can't just do this; it needs to be queued since it's device code + // if(task->m_destroy) task->m_destroy(task); queue->deallocate( task , t.m_alloc_size ); } @@ -133,32 +140,32 @@ void TaskQueue< ExecSpace >::decrement //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -size_t TaskQueue< ExecSpace >::allocate_block_size( size_t n ) +size_t TaskQueue< ExecSpace, MemorySpace>::allocate_block_size( size_t n ) { return m_memory.allocate_block_size( n ); } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void * TaskQueue< ExecSpace >::allocate( size_t n ) +void * TaskQueue< ExecSpace, MemorySpace>::allocate( size_t n ) { void * const p = m_memory.allocate(n); if ( p ) { - Kokkos::atomic_increment( & m_accum_alloc ); + //Kokkos::atomic_increment( & m_accum_alloc ); Kokkos::atomic_increment( & m_count_alloc ); - if ( m_max_alloc < m_count_alloc ) m_max_alloc = m_count_alloc ; + //if ( m_max_alloc < m_count_alloc ) m_max_alloc = m_count_alloc ; } return p ; } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::deallocate( void * p , size_t n ) +void TaskQueue< ExecSpace, MemorySpace>::deallocate( void * p , size_t n ) { m_memory.deallocate( p , n ); Kokkos::atomic_decrement( & m_count_alloc ); @@ -166,11 +173,11 @@ void TaskQueue< ExecSpace >::deallocate( void * p , size_t n ) //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -bool TaskQueue< ExecSpace >::push_task - ( TaskQueue< ExecSpace >::task_root_type * volatile * const queue - , TaskQueue< ExecSpace >::task_root_type * const task +bool TaskQueue< ExecSpace, MemorySpace>::push_task + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * volatile * const queue + , TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Push task into a concurrently pushed and popped queue. @@ -200,20 +207,29 @@ bool TaskQueue< ExecSpace >::push_task Kokkos::abort("TaskQueue::push_task ERROR: already a member of another queue" ); } - task_root_type * y = *queue ; + // store the head of the queue + task_root_type * old_head = *queue ; - while ( lock != y ) { + while ( old_head != lock ) { - next = y ; + // set task->next to the head of the queue + next = old_head; // Do not proceed until 'next' has been stored. Kokkos::memory_fence(); - task_root_type * const x = y ; + // store the old head + task_root_type * const old_head_tmp = old_head; - y = Kokkos::atomic_compare_exchange(queue,y,task); + // attempt to swap task with the old head of the queue + // as if this were done atomically: + // if(*queue == old_head) { + // *queue = task; + // } + // old_head = *queue; + old_head = Kokkos::atomic_compare_exchange(queue, old_head, task); - if ( x == y ) return true ; + if(old_head_tmp == old_head) return true; } // Failed, replace 'task->m_next' value since 'task' remains @@ -229,11 +245,11 @@ bool TaskQueue< ExecSpace >::push_task //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -typename TaskQueue< ExecSpace >::task_root_type * -TaskQueue< ExecSpace >::pop_ready_task - ( TaskQueue< ExecSpace >::task_root_type * volatile * const queue ) +typename TaskQueue< ExecSpace, MemorySpace>::task_root_type * +TaskQueue< ExecSpace, MemorySpace>::pop_ready_task + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * volatile * const queue ) { // Pop task from a concurrently pushed and popped ready task queue. // The queue is a linked list where 'task->m_next' form the links. @@ -280,6 +296,10 @@ TaskQueue< ExecSpace >::pop_ready_task task_root_type * volatile & next = task->m_next ; + // This algorithm is not lockfree because a adversarial scheduler could + // context switch this thread at this point and the rest of the threads + // calling this method would never make forward progress + *queue = next ; next = lock ; Kokkos::memory_fence(); @@ -304,10 +324,10 @@ TaskQueue< ExecSpace >::pop_ready_task //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::schedule_runnable - ( TaskQueue< ExecSpace >::task_root_type * const task ) +void TaskQueue< ExecSpace, MemorySpace>::schedule_runnable + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Schedule a runnable task upon construction / spawn // and upon completion of other tasks that 'task' is waiting on. @@ -389,6 +409,8 @@ void TaskQueue< ExecSpace >::schedule_runnable Kokkos::memory_fence(); + // If we don't have a dependency, or if pushing onto the wait queue of that dependency + // failed (since the only time that queue should be locked is when the task is transitioning to complete??!?) const bool is_ready = ( 0 == dep ) || ( ! push_task( & dep->m_wait , task ) ); @@ -431,10 +453,10 @@ void TaskQueue< ExecSpace >::schedule_runnable // from a queue and processed it as appropriate. } -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::schedule_aggregate - ( TaskQueue< ExecSpace >::task_root_type * const task ) +void TaskQueue< ExecSpace, MemorySpace>::schedule_aggregate + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * const task ) { // Schedule an aggregate task upon construction // and upon completion of other tasks that 'task' is waiting on. @@ -556,9 +578,9 @@ void TaskQueue< ExecSpace >::schedule_aggregate //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::reschedule( task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::reschedule( task_root_type * task ) { // Precondition: // task is in Executing state @@ -578,10 +600,10 @@ void TaskQueue< ExecSpace >::reschedule( task_root_type * task ) //---------------------------------------------------------------------------- -template< typename ExecSpace > +template< typename ExecSpace, typename MemorySpace> KOKKOS_FUNCTION -void TaskQueue< ExecSpace >::complete - ( TaskQueue< ExecSpace >::task_root_type * task ) +void TaskQueue< ExecSpace, MemorySpace>::complete + ( TaskQueue< ExecSpace, MemorySpace>::task_root_type * task ) { // Complete a runnable task that has finished executing // or a when_all task when all of its dependeneces are complete. @@ -679,4 +701,5 @@ void TaskQueue< ExecSpace >::complete } /* namespace Kokkos */ #endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKQUEUE_IMPL_HPP */ diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp new file mode 100644 index 0000000000..d45ebff00b --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp @@ -0,0 +1,151 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// Experimental unified task-data parallel manycore LDRD + +#ifndef KOKKOS_IMPL_TASKRESULT_HPP +#define KOKKOS_IMPL_TASKRESULT_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include + +#include +#include + +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template< typename ResultType > +struct TaskResult { + + enum : int32_t { size = sizeof(ResultType) }; + + using reference_type = ResultType & ; + + template + KOKKOS_INLINE_FUNCTION static + ResultType * ptr( PoolAllocatedObjectBase* task ) + { + return reinterpret_cast< ResultType * > + ( reinterpret_cast< char * >(task) + task->get_allocation_size() - sizeof(ResultType) ); + } + + KOKKOS_INLINE_FUNCTION static + ResultType * ptr( TaskBase* task ) + { + return reinterpret_cast< ResultType * > + ( reinterpret_cast< char * >(task) + task->m_alloc_size - sizeof(ResultType) ); + } + + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskBase* task ) + { return *ptr( task ); } + + template + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskNode* task ) + { return *ptr( task ); } + + KOKKOS_INLINE_FUNCTION static + void destroy( TaskBase* task ) + { get(task).~ResultType(); } + + + //template + //KOKKOS_INLINE_FUNCTION static + //void destroy( TaskNode* task ) + //{ get(task).~ResultType(); } +}; + +template<> +struct TaskResult< void > { + + enum : int32_t { size = 0 }; + + using reference_type = void ; + + template + KOKKOS_INLINE_FUNCTION static + void* ptr( TaskNode* task ) + { return nullptr; } + + KOKKOS_INLINE_FUNCTION static + void * ptr( TaskBase* ) { return (void*) nullptr ; } + + template + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskNode* task ) + { /* Should never be called */ } + + KOKKOS_INLINE_FUNCTION static + reference_type get( TaskBase* ) {} + + KOKKOS_INLINE_FUNCTION static + void destroy( TaskBase* task ) + { } + + //template + //KOKKOS_INLINE_FUNCTION static + //void destroy( TaskNode* task ) + //{ } +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_TASKRESULT_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp new file mode 100644 index 0000000000..4bf3f4fa94 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp @@ -0,0 +1,135 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TASKTEAMMEMBER_HPP +#define KOKKOS_TASKTEAMMEMBER_HPP + +//---------------------------------------------------------------------------- + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + +#include +#include +//---------------------------------------------------------------------------- + +#include +#include + +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +class TaskTeamMemberAdapter : public TeamMember { +private: + + Scheduler m_scheduler; + +public: + + //---------------------------------------- + + // Forward everything but the Scheduler to the constructor of the TeamMember + // type that we're adapting + template + KOKKOS_INLINE_FUNCTION + explicit TaskTeamMemberAdapter( + typename std::enable_if< + std::is_constructible::value, + Scheduler + >::type arg_scheduler, + Args&&... args + ) // TODO @tasking @minor DSH noexcept specification + : TeamMember(std::forward(args)...), + m_scheduler(std::move(arg_scheduler).get_team_scheduler(this->league_rank())) + { } + + // (rule of 6 constructors) + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter() = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter(TaskTeamMemberAdapter const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter(TaskTeamMemberAdapter&&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter const&) = default; + + KOKKOS_INLINE_FUNCTION + TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter&&) = default; + + KOKKOS_INLINE_FUNCTION ~TaskTeamMemberAdapter() = default; + + //---------------------------------------- + + KOKKOS_INLINE_FUNCTION + Scheduler const& scheduler() const noexcept { return m_scheduler; } + + KOKKOS_INLINE_FUNCTION + Scheduler& scheduler() noexcept { return m_scheduler; } + + //---------------------------------------- + +}; + +} // end namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_TASKTEAMMEMBER_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp index 475a696719..a5af82838f 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp @@ -483,6 +483,54 @@ struct is_integral_constant< integral_constant > : public true_ enum { integral_value = v }; }; +//---------------------------------------------------------------------------- + +template +class TypeList; + +//---------------------------------------------------------------------------- + +template +struct ReverseTypeList; + +template +struct ReverseTypeList> { + template + struct impl { + using type = typename ReverseTypeList>::template impl::type; + }; + using type = typename impl<>::type; +}; + +template <> +struct ReverseTypeList> { + template + struct impl { + using type = TypeList; + }; + using type = TypeList<>; +}; + +//---------------------------------------------------------------------------- + +template +struct make_all_extents_into_pointers +{ + using type = T; +}; + +template +struct make_all_extents_into_pointers +{ + using type = typename make_all_extents_into_pointers::type*; +}; + +template +struct make_all_extents_into_pointers +{ + using type = typename make_all_extents_into_pointers::type*; +}; + } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp new file mode 100644 index 0000000000..48e1851e60 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp @@ -0,0 +1,295 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_IMPL_VLAEMULATION_HPP +#define KOKKOS_IMPL_VLAEMULATION_HPP + +#include +#if defined( KOKKOS_ENABLE_TASKDAG ) + + +#include + +#include // KOKKOS_EXPECTS + +#include // std::is_abstract<>, ... + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template < + class Derived, + class VLAValueType, + class EntryCountType = int32_t +> +struct ObjectWithVLAEmulation; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +/** @brief Attorney to enable private CRTP inheritance from ObjectWithVLAEmulation + */ +struct VLAEmulationAccess { +private: + + template + friend struct ObjectWithVLAEmulation; + + template + KOKKOS_FORCEINLINE_FUNCTION + static constexpr Derived* + _cast_to_derived(ObjectWithVLAEmulation* base) noexcept + { + return static_cast(base); + } + + template + KOKKOS_FORCEINLINE_FUNCTION + static constexpr Derived const* + _cast_to_derived(ObjectWithVLAEmulation const* base) noexcept + { + return static_cast(base); + } + +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +/** \brief A CRTP base class for a type that includes a variable-length array by allocation + * + * The storage for the derived type must be allocated manually and the objects + * (both derived type and VLA objects) must be constructed with placement new. + * Obviously, this can't be done for objects on the stack. + * + * Note: Though most uses of this currently delete the copy and move constructor + * in the `Derived` type, this type is intended to have value semantics. + * + * \todo @documentation elaborate on implications of value semantics for this class template + * + */ +template < + class Derived, + class VLAValueType, + class EntryCountType /* = int32_t */ +> +struct ObjectWithVLAEmulation { +public: + + using object_type = Derived; + using vla_value_type = VLAValueType; + using vla_entry_count_type = EntryCountType; + + using iterator = VLAValueType*; + using const_iterator = typename std::add_const::type*; + + + // TODO @tasking @minor DSH require that Derived be marked final? (note that std::is_final is C++14) + // TODO @tasking @minor DSH delete non-placement operator new for Derived type? + +private: + + vla_entry_count_type m_num_entries; + + // CRTP boilerplate + + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + Derived* _this() noexcept { return VLAEmulationAccess::_cast_to_derived(this); } + + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + Derived const* _this() const noexcept { return VLAEmulationAccess::_cast_to_derived(this); } + + // Note: can't be constexpr because of reinterpret_cast + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + vla_value_type* _vla_pointer() noexcept { + // The data starts right after the aligned storage of Derived + return reinterpret_cast(_this() + 1); + } + + // Note: can't be constexpr because of reinterpret_cast + KOKKOS_FORCEINLINE_FUNCTION + /* KOKKOS_CONSTEXPR_14 */ + vla_value_type const* _vla_pointer() const noexcept { + // The data starts right after the aligned storage of Derived + return reinterpret_cast(_this() + 1); + } + +public: + + KOKKOS_INLINE_FUNCTION + static /* KOKKOS_CONSTEXPR_14 */ size_t + required_allocation_size(vla_entry_count_type num_vla_entries) { + KOKKOS_EXPECTS(num_vla_entries >= 0); + return sizeof(Derived) + num_vla_entries * sizeof(VLAValueType); + } + + //---------------------------------------------------------------------------- + // {{{2 + + // TODO @tasking @optimization DSH specialization for trivially constructible VLAValueType? + // TODO @tasking @minor DSH SFINAE-out this constructor for non-default contructible vla_value_types + KOKKOS_INLINE_FUNCTION + explicit + ObjectWithVLAEmulation(vla_entry_count_type num_entries) + noexcept(noexcept(vla_value_type())) + : m_num_entries(num_entries) + { + // Note: We can't do this at class scope because it unnecessarily requires + // object_type to be a complete type + static_assert( + alignof(object_type) >= alignof(vla_value_type), + "Can't append emulated variable length array of type with greater alignment than" + " the type to which the VLA is being appended" + ); + + // Note: We can't do this at class scope because it unnecessarily requires + // vla_value_type to be a complete type + static_assert( + not std::is_abstract::value, + "Can't use abstract type with VLA emulation" + ); + + KOKKOS_EXPECTS(num_entries >= 0); + for(vla_entry_count_type i = 0; i < m_num_entries; ++i) { + new (_vla_pointer() + i) vla_value_type(); + } + } + + KOKKOS_INLINE_FUNCTION + ~ObjectWithVLAEmulation() + noexcept(noexcept(std::declval().~vla_value_type())) + { + for(auto&& value : *this) { value.~vla_value_type(); } + } + + // TODO @tasking @new_feature DSH constrained analogs for move and copy ctors and assignment ops + // TODO @tasking @new_feature DSH forwarding in_place constructor + // TODO @tasking @new_feature DSH initializer_list constructor? + + // end Constructors, destructor, and assignment }}}2 + //---------------------------------------------------------------------------- + + + KOKKOS_INLINE_FUNCTION + constexpr EntryCountType n_vla_entries() const noexcept { return m_num_entries; } + + + //---------------------------------------------------------------------------- + // {{{2 + + KOKKOS_INLINE_FUNCTION + object_type& object() & { return static_cast(*this); } + + KOKKOS_INLINE_FUNCTION + object_type const& object() const & { return static_cast(*this); } + + KOKKOS_INLINE_FUNCTION + object_type&& object() && { return static_cast(*this); } + + + KOKKOS_INLINE_FUNCTION + vla_value_type& vla_value_at(vla_entry_count_type n) & + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + KOKKOS_INLINE_FUNCTION + vla_value_type const& vla_value_at(vla_entry_count_type n) const & + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + KOKKOS_INLINE_FUNCTION + vla_value_type& vla_value_at(vla_entry_count_type n) && + { + KOKKOS_EXPECTS(n < n_vla_entries()); + return _vla_pointer()[n]; + } + + // end Accessing the object and the VLA values }}}2 + //---------------------------------------------------------------------------- + + + //---------------------------------------------------------------------------- + // {{{2 + + KOKKOS_INLINE_FUNCTION + iterator begin() noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + const_iterator begin() const noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + const_iterator cbegin() noexcept { return _vla_pointer(); } + + KOKKOS_INLINE_FUNCTION + iterator end() noexcept { return _vla_pointer() + m_num_entries; } + + KOKKOS_INLINE_FUNCTION + const_iterator end() const noexcept { return _vla_pointer() + m_num_entries; } + + KOKKOS_INLINE_FUNCTION + const_iterator cend() noexcept { return _vla_pointer() + m_num_entries; } + + // end Iterators }}}2 + //---------------------------------------------------------------------------- + +}; + +} /* namespace Impl */ +} /* namespace Kokkos */ + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ +#endif /* #ifndef KOKKOS_IMPL_VLAEMULATION_HPP */ + diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp index e1539d10b0..07774da279 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp @@ -367,6 +367,8 @@ public: // Can only convert to View::array_type + enum { is_assignable_data_type = std::is_same< typename DstTraits::data_type , typename SrcTraits::scalar_array_type >::value && + (DstTraits::rank==SrcTraits::rank+1)}; enum { is_assignable = std::is_same< typename DstTraits::data_type , typename SrcTraits::scalar_array_type >::value && std::is_same< typename DstTraits::array_layout , typename SrcTraits::array_layout >::value }; diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp index 773f336281..b2d8dea20a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -275,7 +276,7 @@ struct ALL_t { constexpr const ALL_t & operator()() const { return *this ; } KOKKOS_INLINE_FUNCTION - constexpr bool operator == ( const ALL_t & right) const { return true;} + constexpr bool operator == ( const ALL_t & ) const { return true;} }; }} // namespace Kokkos::Impl @@ -1548,7 +1549,7 @@ struct ViewOffset< Dimension , Kokkos::LayoutRight template< class DimRHS > KOKKOS_INLINE_FUNCTION constexpr ViewOffset - ( const ViewOffset< DimRHS , Kokkos::LayoutRight , void > & rhs + ( const ViewOffset< DimRHS , Kokkos::LayoutRight , void > & , const SubviewExtents< DimRHS::rank , dimension_type::rank > & sub ) : m_dim( sub.range_extent(0) , 0, 0, 0, 0, 0, 0, 0 ) @@ -2319,7 +2320,7 @@ struct ViewDataHandle< Traits , && std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Atomic + Traits::memory_traits::is_atomic )>::type > { typedef typename Traits::value_type value_type ; @@ -2348,16 +2349,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - (!Traits::memory_traits::Aligned) + (!Traits::memory_traits::is_aligned) && - Traits::memory_traits::Restrict + Traits::memory_traits::is_restrict #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2366,17 +2367,17 @@ struct ViewDataHandle< Traits , typedef Kokkos::Impl::SharedAllocationTracker track_type ; KOKKOS_INLINE_FUNCTION - static handle_type assign( value_type * arg_data_ptr + static value_type* assign( value_type * arg_data_ptr , track_type const & /*arg_tracker*/ ) { - return handle_type( arg_data_ptr ); + return (value_type*)( arg_data_ptr ); } KOKKOS_INLINE_FUNCTION - static handle_type assign( handle_type const arg_data_ptr + static value_type* assign( handle_type const arg_data_ptr , size_t offset ) { - return handle_type( arg_data_ptr + offset ); + return (value_type*)( arg_data_ptr + offset ); } }; @@ -2385,16 +2386,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Aligned + Traits::memory_traits::is_aligned && - (!Traits::memory_traits::Restrict) + (!Traits::memory_traits::is_restrict) #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2428,16 +2429,16 @@ struct ViewDataHandle< Traits , typename std::enable_if<( std::is_same< typename Traits::specialize , void >::value && - Traits::memory_traits::Aligned + Traits::memory_traits::is_aligned && - Traits::memory_traits::Restrict + Traits::memory_traits::is_restrict #ifdef KOKKOS_ENABLE_CUDA && (!( std::is_same< typename Traits::memory_space,Kokkos::CudaSpace>::value || std::is_same< typename Traits::memory_space,Kokkos::CudaUVMSpace>::value )) #endif && - (!Traits::memory_traits::Atomic) + (!Traits::memory_traits::is_atomic) )>::type > { typedef typename Traits::value_type value_type ; @@ -2446,23 +2447,23 @@ struct ViewDataHandle< Traits , typedef Kokkos::Impl::SharedAllocationTracker track_type ; KOKKOS_INLINE_FUNCTION - static handle_type assign( value_type * arg_data_ptr + static value_type* assign( value_type * arg_data_ptr , track_type const & /*arg_tracker*/ ) { if ( reinterpret_cast(arg_data_ptr) % Impl::MEMORY_ALIGNMENT ) { Kokkos::abort("Assigning NonAligned View or Pointer to Kokkos::View with Aligned attribute"); } - return handle_type( arg_data_ptr ); + return (value_type*)( arg_data_ptr ); } KOKKOS_INLINE_FUNCTION - static handle_type assign( handle_type const arg_data_ptr + static value_type* assign( handle_type const arg_data_ptr , size_t offset ) { if ( reinterpret_cast(arg_data_ptr+offset) % Impl::MEMORY_ALIGNMENT ) { Kokkos::abort("Assigning NonAligned View or Pointer to Kokkos::View with Aligned attribute"); } - return handle_type( arg_data_ptr + offset ); + return (value_type*)( arg_data_ptr + offset ); } }; }} // namespace Kokkos::Impl @@ -2955,7 +2956,8 @@ private: }; public: - + enum { is_assignable_data_type = is_assignable_value_type && + is_assignable_dimension }; enum { is_assignable = is_assignable_space && is_assignable_value_type && is_assignable_dimension && @@ -3052,7 +3054,8 @@ private: , typename SrcTraits::dimension >::value }; public: - + enum { is_assignable_data_type = is_assignable_value_type && + is_assignable_dimension }; enum { is_assignable = is_assignable_space && is_assignable_value_type && is_assignable_dimension }; @@ -3062,7 +3065,7 @@ public: typedef ViewMapping< SrcTraits , void > SrcType ; KOKKOS_INLINE_FUNCTION - static bool assignable_layout_check(DstType & dst, const SrcType & src) //Runtime check + static bool assignable_layout_check(DstType &, const SrcType & src) //Runtime check { size_t strides[9]; bool assignable = true; @@ -3134,6 +3137,73 @@ public: // Subview mapping. // Deduce destination view type from source view traits and subview arguments +template +struct SubViewDataTypeImpl; + +/* base case */ +template +struct SubViewDataTypeImpl< + void, + ValueType, + Experimental::Extents<> +> +{ using type = ValueType; }; + +/* for integral args, subview doesn't have that dimension */ +template +struct SubViewDataTypeImpl< + typename std::enable_if::type>::value>::type, + ValueType, + Experimental::Extents, + Integral, Args... +> : SubViewDataTypeImpl< + void, ValueType, + Experimental::Extents, + Args... + > +{ }; + + +/* for ALL slice, subview has the same dimension */ +template +struct SubViewDataTypeImpl< + void, + ValueType, + Experimental::Extents, + ALL_t, Args... +> : SubViewDataTypeImpl< + void, typename ApplyExtent::type, + Experimental::Extents, + Args... + > +{ }; + + +/* for pair-style slice, subview has dynamic dimension, since pair doesn't give static sizes */ +/* Since we don't allow interleaving of dynamic and static extents, make all of the dimensions to the left dynamic */ +template +struct SubViewDataTypeImpl< + typename std::enable_if::value>::type, + ValueType, + Experimental::Extents, + PairLike, Args... +> : SubViewDataTypeImpl< + void, typename make_all_extents_into_pointers::type*, + Experimental::Extents, + Args... + > +{ }; + + +template +struct SubViewDataType + : SubViewDataTypeImpl< + void, ValueType, Exts, Args... + > +{ }; + +//---------------------------------------------------------------------------- + template< class SrcTraits , class ... Args > struct ViewMapping < typename std::enable_if<( @@ -3201,17 +3271,25 @@ private: typedef typename SrcTraits::value_type value_type ; - typedef typename std::conditional< rank == 0 , value_type , - typename std::conditional< rank == 1 , value_type * , - typename std::conditional< rank == 2 , value_type ** , - typename std::conditional< rank == 3 , value_type *** , - typename std::conditional< rank == 4 , value_type **** , - typename std::conditional< rank == 5 , value_type ***** , - typename std::conditional< rank == 6 , value_type ****** , - typename std::conditional< rank == 7 , value_type ******* , - value_type ******** - >::type >::type >::type >::type >::type >::type >::type >::type - data_type ; + using data_type = + typename SubViewDataType< + value_type, + typename Kokkos::Impl::ParseViewExtents< + typename SrcTraits::data_type + >::type, + Args... + >::type; + //typedef typename std::conditional< rank == 0 , value_type , + // typename std::conditional< rank == 1 , value_type * , + // typename std::conditional< rank == 2 , value_type ** , + // typename std::conditional< rank == 3 , value_type *** , + // typename std::conditional< rank == 4 , value_type **** , + // typename std::conditional< rank == 5 , value_type ***** , + // typename std::conditional< rank == 6 , value_type ****** , + // typename std::conditional< rank == 7 , value_type ******* , + // value_type ******** + // >::type >::type >::type >::type >::type >::type >::type >::type + // data_type ; public: diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp index 716b9ceca5..a8645db451 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp @@ -50,6 +50,9 @@ namespace Kokkos { namespace Impl { +// =========================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + // View mapping for rank two tiled array template< class L > @@ -208,11 +211,17 @@ struct ViewMapping } }; +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =============================================================================== + } /* namespace Impl */ } /* namespace Kokkos */ namespace Kokkos { +// ============================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + template< typename T , unsigned N0 , unsigned N1 , class ... P > KOKKOS_INLINE_FUNCTION Kokkos::View< T[N0][N1] , LayoutLeft , P... > @@ -229,6 +238,9 @@ tile_subview( const Kokkos::View,P...> & ( src , SrcLayout() , i_tile0 , i_tile1 ); } +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +// =============================================================================== + } /* namespace Kokkos */ //---------------------------------------------------------------------------- diff --git a/lib/kokkos/core/unit_test/CMakeLists.txt b/lib/kokkos/core/unit_test/CMakeLists.txt index fad4e1d45e..6a480daa8d 100644 --- a/lib/kokkos/core/unit_test/CMakeLists.txt +++ b/lib/kokkos/core/unit_test/CMakeLists.txt @@ -11,6 +11,7 @@ IF(NOT KOKKOS_HAS_TRILINOS) ENDIF() SET(GTEST_SOURCE_DIR ${${PARENT_PACKAGE_NAME}_SOURCE_DIR}/tpls/gtest) +# TODO get the C++ standard flag from KOKKOS_CXX_STANDARD SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_PTHREAD=0") INCLUDE_DIRECTORIES(${GTEST_SOURCE_DIR}) @@ -21,6 +22,17 @@ TRIBITS_ADD_LIBRARY( TESTONLY ) +IF(NOT KOKKOS_HAS_TRILINOS) +target_compile_options( + kokkos_gtest + PUBLIC $<$:${KOKKOS_CXX_FLAGS}> +) +target_link_libraries( + kokkos_gtest + PUBLIC ${KOKKOS_LD_FLAGS} +) +ENDIF() + # # Define the tests # @@ -29,69 +41,212 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) IF(Kokkos_ENABLE_Serial) - TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_Serial - SOURCES - UnitTestMainInit.cpp - serial/TestSerial_AtomicOperations_int.cpp - serial/TestSerial_AtomicOperations_unsignedint.cpp - serial/TestSerial_AtomicOperations_longint.cpp - serial/TestSerial_AtomicOperations_unsignedlongint.cpp - serial/TestSerial_AtomicOperations_longlongint.cpp - serial/TestSerial_AtomicOperations_double.cpp - serial/TestSerial_AtomicOperations_float.cpp - serial/TestSerial_AtomicViews.cpp - serial/TestSerial_Atomics.cpp - serial/TestSerial_Complex.cpp - serial/TestSerial_Init.cpp - serial/TestSerial_MDRange_a.cpp - serial/TestSerial_MDRange_b.cpp - serial/TestSerial_MDRange_c.cpp - serial/TestSerial_MDRange_d.cpp - serial/TestSerial_MDRange_e.cpp - serial/TestSerial_Other.cpp - serial/TestSerial_RangePolicy.cpp - serial/TestSerial_Reductions.cpp - serial/TestSerial_Reducers_a.cpp - serial/TestSerial_Reducers_b.cpp - serial/TestSerial_Reducers_c.cpp - serial/TestSerial_Reducers_d.cpp - serial/TestSerial_Scan.cpp - serial/TestSerial_SharedAlloc.cpp - serial/TestSerial_SubView_a.cpp - serial/TestSerial_SubView_b.cpp - serial/TestSerial_SubView_c01.cpp - serial/TestSerial_SubView_c02.cpp - serial/TestSerial_SubView_c03.cpp - serial/TestSerial_SubView_c04.cpp - serial/TestSerial_SubView_c05.cpp - serial/TestSerial_SubView_c06.cpp - serial/TestSerial_SubView_c07.cpp - serial/TestSerial_SubView_c08.cpp - serial/TestSerial_SubView_c09.cpp - serial/TestSerial_SubView_c10.cpp - serial/TestSerial_SubView_c11.cpp - serial/TestSerial_SubView_c12.cpp - serial/TestSerial_SubView_c13.cpp - serial/TestSerial_Team.cpp - serial/TestSerial_TeamReductionScan.cpp - serial/TestSerial_TeamScratch.cpp - serial/TestSerial_ViewAPI_a.cpp - serial/TestSerial_ViewAPI_b.cpp - serial/TestSerial_ViewAPI_c.cpp - serial/TestSerial_ViewAPI_d.cpp - serial/TestSerial_ViewAPI_e.cpp - serial/TestSerial_ViewMapping_a.cpp - serial/TestSerial_ViewMapping_b.cpp - serial/TestSerial_ViewMapping_subview.cpp - serial/TestSerial_ViewOfClass.cpp - serial/TestSerial_Crs.cpp - serial/TestSerial_WorkGraph.cpp - COMM serial mpi - NUM_MPI_PROCS 1 - FAIL_REGULAR_EXPRESSION " FAILED " - TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} - ) + IF(KOKKOS_SEPARATE_TESTS) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Atomics + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_AtomicOperations_int.cpp + serial/TestSerial_AtomicOperations_unsignedint.cpp + serial/TestSerial_AtomicOperations_longint.cpp + serial/TestSerial_AtomicOperations_unsignedlongint.cpp + serial/TestSerial_AtomicOperations_longlongint.cpp + serial/TestSerial_AtomicOperations_double.cpp + serial/TestSerial_AtomicOperations_float.cpp + serial/TestSerial_AtomicOperations_complexdouble.cpp + serial/TestSerial_AtomicOperations_complexfloat.cpp + serial/TestSerial_AtomicViews.cpp + serial/TestSerial_Atomics.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_SubView + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_SubView_a.cpp + serial/TestSerial_SubView_b.cpp + serial/TestSerial_SubView_c01.cpp + serial/TestSerial_SubView_c02.cpp + serial/TestSerial_SubView_c03.cpp + serial/TestSerial_SubView_c04.cpp + serial/TestSerial_SubView_c05.cpp + serial/TestSerial_SubView_c06.cpp + serial/TestSerial_SubView_c07.cpp + serial/TestSerial_SubView_c08.cpp + serial/TestSerial_SubView_c09.cpp + serial/TestSerial_SubView_c10.cpp + serial/TestSerial_SubView_c11.cpp + serial/TestSerial_SubView_c12.cpp + serial/TestSerial_SubView_c13.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_ViewAPI + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_ViewAPI_a.cpp + serial/TestSerial_ViewAPI_b.cpp + serial/TestSerial_ViewAPI_c.cpp + serial/TestSerial_ViewAPI_d.cpp + serial/TestSerial_ViewAPI_e.cpp + serial/TestSerial_ViewOfClass.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_ViewMapping + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_ViewMapping_a.cpp + serial/TestSerial_ViewMapping_b.cpp + serial/TestSerial_ViewMapping_subview.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Reducers + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Reductions.cpp + serial/TestSerial_Reducers_a.cpp + serial/TestSerial_Reducers_b.cpp + serial/TestSerial_Reducers_c.cpp + serial/TestSerial_Reducers_d.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_MDRange + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_MDRange_a.cpp + serial/TestSerial_MDRange_b.cpp + serial/TestSerial_MDRange_c.cpp + serial/TestSerial_MDRange_d.cpp + serial/TestSerial_MDRange_e.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Team + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Team.cpp + serial/TestSerial_TeamReductionScan.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Tasking + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Task.cpp + serial/TestSerial_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial_Misc + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_Complex.cpp + serial/TestSerial_Init.cpp + serial/TestSerial_Other.cpp + serial/TestSerial_RangePolicy.cpp + serial/TestSerial_Scan.cpp + serial/TestSerial_SharedAlloc.cpp + serial/TestSerial_Crs.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ELSE() + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_Serial + SOURCES + UnitTestMainInit.cpp + serial/TestSerial_AtomicOperations_int.cpp + serial/TestSerial_AtomicOperations_unsignedint.cpp + serial/TestSerial_AtomicOperations_longint.cpp + serial/TestSerial_AtomicOperations_unsignedlongint.cpp + serial/TestSerial_AtomicOperations_longlongint.cpp + serial/TestSerial_AtomicOperations_double.cpp + serial/TestSerial_AtomicOperations_float.cpp + serial/TestSerial_AtomicOperations_complexdouble.cpp + serial/TestSerial_AtomicOperations_complexfloat.cpp + serial/TestSerial_AtomicViews.cpp + serial/TestSerial_Atomics.cpp + serial/TestSerial_Complex.cpp + serial/TestSerial_Init.cpp + serial/TestSerial_MDRange_a.cpp + serial/TestSerial_MDRange_b.cpp + serial/TestSerial_MDRange_c.cpp + serial/TestSerial_MDRange_d.cpp + serial/TestSerial_MDRange_e.cpp + serial/TestSerial_Other.cpp + serial/TestSerial_RangePolicy.cpp + serial/TestSerial_Reductions.cpp + serial/TestSerial_Reducers_a.cpp + serial/TestSerial_Reducers_b.cpp + serial/TestSerial_Reducers_c.cpp + serial/TestSerial_Reducers_d.cpp + serial/TestSerial_Scan.cpp + serial/TestSerial_SharedAlloc.cpp + serial/TestSerial_SubView_a.cpp + serial/TestSerial_SubView_b.cpp + serial/TestSerial_SubView_c01.cpp + serial/TestSerial_SubView_c02.cpp + serial/TestSerial_SubView_c03.cpp + serial/TestSerial_SubView_c04.cpp + serial/TestSerial_SubView_c05.cpp + serial/TestSerial_SubView_c06.cpp + serial/TestSerial_SubView_c07.cpp + serial/TestSerial_SubView_c08.cpp + serial/TestSerial_SubView_c09.cpp + serial/TestSerial_SubView_c10.cpp + serial/TestSerial_SubView_c11.cpp + serial/TestSerial_SubView_c12.cpp + serial/TestSerial_SubView_c13.cpp + serial/TestSerial_Task.cpp + serial/TestSerial_Team.cpp + serial/TestSerial_TeamReductionScan.cpp + serial/TestSerial_TeamScratch.cpp + serial/TestSerial_ViewAPI_a.cpp + serial/TestSerial_ViewAPI_b.cpp + serial/TestSerial_ViewAPI_c.cpp + serial/TestSerial_ViewAPI_d.cpp + serial/TestSerial_ViewAPI_e.cpp + serial/TestSerial_ViewMapping_a.cpp + serial/TestSerial_ViewMapping_b.cpp + serial/TestSerial_ViewMapping_subview.cpp + serial/TestSerial_ViewOfClass.cpp + serial/TestSerial_Crs.cpp + serial/TestSerial_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ENDIF() ENDIF() IF(Kokkos_ENABLE_Pthread) @@ -106,6 +261,8 @@ IF(Kokkos_ENABLE_Pthread) threads/TestThreads_AtomicOperations_longlongint.cpp threads/TestThreads_AtomicOperations_double.cpp threads/TestThreads_AtomicOperations_float.cpp + threads/TestThreads_AtomicOperations_complexdouble.cpp + threads/TestThreads_AtomicOperations_complexfloat.cpp threads/TestThreads_AtomicViews.cpp threads/TestThreads_Atomics.cpp threads/TestThreads_Complex.cpp @@ -161,75 +318,305 @@ IF(Kokkos_ENABLE_Pthread) ENDIF() IF(Kokkos_ENABLE_OpenMP) + IF(KOKKOS_SEPARATE_TESTS) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Atomics + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_AtomicOperations_int.cpp + openmp/TestOpenMP_AtomicOperations_unsignedint.cpp + openmp/TestOpenMP_AtomicOperations_longint.cpp + openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp + openmp/TestOpenMP_AtomicOperations_longlongint.cpp + openmp/TestOpenMP_AtomicOperations_double.cpp + openmp/TestOpenMP_AtomicOperations_float.cpp + openmp/TestOpenMP_AtomicOperations_complexdouble.cpp + openmp/TestOpenMP_AtomicOperations_complexfloat.cpp + openmp/TestOpenMP_AtomicViews.cpp + openmp/TestOpenMP_Atomics.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_SubView + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_SubView_a.cpp + openmp/TestOpenMP_SubView_b.cpp + openmp/TestOpenMP_SubView_c01.cpp + openmp/TestOpenMP_SubView_c02.cpp + openmp/TestOpenMP_SubView_c03.cpp + openmp/TestOpenMP_SubView_c04.cpp + openmp/TestOpenMP_SubView_c05.cpp + openmp/TestOpenMP_SubView_c06.cpp + openmp/TestOpenMP_SubView_c07.cpp + openmp/TestOpenMP_SubView_c08.cpp + openmp/TestOpenMP_SubView_c09.cpp + openmp/TestOpenMP_SubView_c10.cpp + openmp/TestOpenMP_SubView_c11.cpp + openmp/TestOpenMP_SubView_c12.cpp + openmp/TestOpenMP_SubView_c13.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_ViewAPI + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_ViewAPI_a.cpp + openmp/TestOpenMP_ViewAPI_b.cpp + openmp/TestOpenMP_ViewAPI_c.cpp + openmp/TestOpenMP_ViewAPI_d.cpp + openmp/TestOpenMP_ViewAPI_e.cpp + openmp/TestOpenMP_ViewOfClass.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_ViewMapping + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_ViewMapping_a.cpp + openmp/TestOpenMP_ViewMapping_b.cpp + openmp/TestOpenMP_ViewMapping_subview.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Reducers + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Reductions.cpp + openmp/TestOpenMP_Reducers_a.cpp + openmp/TestOpenMP_Reducers_b.cpp + openmp/TestOpenMP_Reducers_c.cpp + openmp/TestOpenMP_Reducers_d.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_MDRange + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_MDRange_a.cpp + openmp/TestOpenMP_MDRange_b.cpp + openmp/TestOpenMP_MDRange_c.cpp + openmp/TestOpenMP_MDRange_d.cpp + openmp/TestOpenMP_MDRange_e.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Team + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Team.cpp + openmp/TestOpenMP_TeamReductionScan.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Tasking + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Task.cpp + openmp/TestOpenMP_WorkGraph.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP_Misc + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_Complex.cpp + openmp/TestOpenMP_Init.cpp + openmp/TestOpenMP_Other.cpp + openmp/TestOpenMP_RangePolicy.cpp + openmp/TestOpenMP_Scan.cpp + openmp/TestOpenMP_SharedAlloc.cpp + openmp/TestOpenMP_Crs.cpp + openmp/TestOpenMP_UniqueToken.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMPInterOp + SOURCES + UnitTestMain.cpp + openmp/TestOpenMP_InterOp.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ELSE() + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMP + SOURCES + UnitTestMainInit.cpp + openmp/TestOpenMP_AtomicOperations_int.cpp + openmp/TestOpenMP_AtomicOperations_unsignedint.cpp + openmp/TestOpenMP_AtomicOperations_longint.cpp + openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp + openmp/TestOpenMP_AtomicOperations_longlongint.cpp + openmp/TestOpenMP_AtomicOperations_double.cpp + openmp/TestOpenMP_AtomicOperations_float.cpp + openmp/TestOpenMP_AtomicOperations_complexdouble.cpp + openmp/TestOpenMP_AtomicOperations_complexfloat.cpp + openmp/TestOpenMP_AtomicViews.cpp + openmp/TestOpenMP_Atomics.cpp + openmp/TestOpenMP_Complex.cpp + openmp/TestOpenMP_Init.cpp + openmp/TestOpenMP_MDRange_a.cpp + openmp/TestOpenMP_MDRange_b.cpp + openmp/TestOpenMP_MDRange_c.cpp + openmp/TestOpenMP_MDRange_d.cpp + openmp/TestOpenMP_MDRange_e.cpp + openmp/TestOpenMP_Other.cpp + openmp/TestOpenMP_RangePolicy.cpp + openmp/TestOpenMP_Reductions.cpp + openmp/TestOpenMP_Reducers_a.cpp + openmp/TestOpenMP_Reducers_b.cpp + openmp/TestOpenMP_Reducers_c.cpp + openmp/TestOpenMP_Reducers_d.cpp + openmp/TestOpenMP_Scan.cpp + openmp/TestOpenMP_SharedAlloc.cpp + openmp/TestOpenMP_SubView_a.cpp + openmp/TestOpenMP_SubView_b.cpp + openmp/TestOpenMP_SubView_c01.cpp + openmp/TestOpenMP_SubView_c02.cpp + openmp/TestOpenMP_SubView_c03.cpp + openmp/TestOpenMP_SubView_c04.cpp + openmp/TestOpenMP_SubView_c05.cpp + openmp/TestOpenMP_SubView_c06.cpp + openmp/TestOpenMP_SubView_c07.cpp + openmp/TestOpenMP_SubView_c08.cpp + openmp/TestOpenMP_SubView_c09.cpp + openmp/TestOpenMP_SubView_c10.cpp + openmp/TestOpenMP_SubView_c11.cpp + openmp/TestOpenMP_SubView_c12.cpp + openmp/TestOpenMP_SubView_c13.cpp + openmp/TestOpenMP_Task.cpp + openmp/TestOpenMP_Team.cpp + openmp/TestOpenMP_TeamReductionScan.cpp + openmp/TestOpenMP_ViewAPI_a.cpp + openmp/TestOpenMP_ViewAPI_b.cpp + openmp/TestOpenMP_ViewAPI_c.cpp + openmp/TestOpenMP_ViewAPI_d.cpp + openmp/TestOpenMP_ViewAPI_e.cpp + openmp/TestOpenMP_ViewMapping_a.cpp + openmp/TestOpenMP_ViewMapping_b.cpp + openmp/TestOpenMP_ViewMapping_subview.cpp + openmp/TestOpenMP_ViewOfClass.cpp + openmp/TestOpenMP_Crs.cpp + openmp/TestOpenMP_WorkGraph.cpp + openmp/TestOpenMP_UniqueToken.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_OpenMPInterOp + SOURCES + UnitTestMain.cpp + openmp/TestOpenMP_InterOp.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + ENDIF() +ENDIF() + +IF(Kokkos_ENABLE_HPX) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_OpenMP + UnitTest_HPX SOURCES UnitTestMainInit.cpp - openmp/TestOpenMP_AtomicOperations_int.cpp - openmp/TestOpenMP_AtomicOperations_unsignedint.cpp - openmp/TestOpenMP_AtomicOperations_longint.cpp - openmp/TestOpenMP_AtomicOperations_unsignedlongint.cpp - openmp/TestOpenMP_AtomicOperations_longlongint.cpp - openmp/TestOpenMP_AtomicOperations_double.cpp - openmp/TestOpenMP_AtomicOperations_float.cpp - openmp/TestOpenMP_AtomicViews.cpp - openmp/TestOpenMP_Atomics.cpp - openmp/TestOpenMP_Complex.cpp - openmp/TestOpenMP_Init.cpp - openmp/TestOpenMP_MDRange_a.cpp - openmp/TestOpenMP_MDRange_b.cpp - openmp/TestOpenMP_MDRange_c.cpp - openmp/TestOpenMP_MDRange_d.cpp - openmp/TestOpenMP_MDRange_e.cpp - openmp/TestOpenMP_Other.cpp - openmp/TestOpenMP_RangePolicy.cpp - openmp/TestOpenMP_Reductions.cpp - openmp/TestOpenMP_Reducers_a.cpp - openmp/TestOpenMP_Reducers_b.cpp - openmp/TestOpenMP_Reducers_c.cpp - openmp/TestOpenMP_Reducers_d.cpp - openmp/TestOpenMP_Scan.cpp - openmp/TestOpenMP_SharedAlloc.cpp - openmp/TestOpenMP_SubView_a.cpp - openmp/TestOpenMP_SubView_b.cpp - openmp/TestOpenMP_SubView_c01.cpp - openmp/TestOpenMP_SubView_c02.cpp - openmp/TestOpenMP_SubView_c03.cpp - openmp/TestOpenMP_SubView_c04.cpp - openmp/TestOpenMP_SubView_c05.cpp - openmp/TestOpenMP_SubView_c06.cpp - openmp/TestOpenMP_SubView_c07.cpp - openmp/TestOpenMP_SubView_c08.cpp - openmp/TestOpenMP_SubView_c09.cpp - openmp/TestOpenMP_SubView_c10.cpp - openmp/TestOpenMP_SubView_c11.cpp - openmp/TestOpenMP_SubView_c12.cpp - openmp/TestOpenMP_SubView_c13.cpp - openmp/TestOpenMP_Task.cpp - openmp/TestOpenMP_Team.cpp - openmp/TestOpenMP_TeamReductionScan.cpp - openmp/TestOpenMP_ViewAPI_a.cpp - openmp/TestOpenMP_ViewAPI_b.cpp - openmp/TestOpenMP_ViewAPI_c.cpp - openmp/TestOpenMP_ViewAPI_d.cpp - openmp/TestOpenMP_ViewAPI_e.cpp - openmp/TestOpenMP_ViewMapping_a.cpp - openmp/TestOpenMP_ViewMapping_b.cpp - openmp/TestOpenMP_ViewMapping_subview.cpp - openmp/TestOpenMP_ViewOfClass.cpp - openmp/TestOpenMP_Crs.cpp - openmp/TestOpenMP_WorkGraph.cpp - openmp/TestOpenMP_UniqueToken.cpp + hpx/TestHPX_AtomicOperations_int.cpp + hpx/TestHPX_AtomicOperations_unsignedint.cpp + hpx/TestHPX_AtomicOperations_longint.cpp + hpx/TestHPX_AtomicOperations_unsignedlongint.cpp + hpx/TestHPX_AtomicOperations_longlongint.cpp + hpx/TestHPX_AtomicOperations_double.cpp + hpx/TestHPX_AtomicOperations_float.cpp + hpx/TestHPX_AtomicViews.cpp + hpx/TestHPX_Atomics.cpp + hpx/TestHPX_Complex.cpp + hpx/TestHPX_Init.cpp + hpx/TestHPX_MDRange_a.cpp + hpx/TestHPX_MDRange_b.cpp + hpx/TestHPX_MDRange_c.cpp + hpx/TestHPX_MDRange_d.cpp + hpx/TestHPX_MDRange_e.cpp + hpx/TestHPX_Other.cpp + hpx/TestHPX_RangePolicy.cpp + hpx/TestHPX_Reductions.cpp + hpx/TestHPX_Reducers_a.cpp + hpx/TestHPX_Reducers_b.cpp + hpx/TestHPX_Reducers_c.cpp + hpx/TestHPX_Reducers_d.cpp + hpx/TestHPX_Scan.cpp + hpx/TestHPX_SharedAlloc.cpp + hpx/TestHPX_SubView_a.cpp + hpx/TestHPX_SubView_b.cpp + hpx/TestHPX_SubView_c01.cpp + hpx/TestHPX_SubView_c02.cpp + hpx/TestHPX_SubView_c03.cpp + hpx/TestHPX_SubView_c04.cpp + hpx/TestHPX_SubView_c05.cpp + hpx/TestHPX_SubView_c06.cpp + hpx/TestHPX_SubView_c07.cpp + hpx/TestHPX_SubView_c08.cpp + hpx/TestHPX_SubView_c09.cpp + hpx/TestHPX_SubView_c10.cpp + hpx/TestHPX_SubView_c11.cpp + hpx/TestHPX_SubView_c12.cpp + hpx/TestHPX_SubView_c13.cpp + hpx/TestHPX_Task.cpp + hpx/TestHPX_Team.cpp + hpx/TestHPX_TeamReductionScan.cpp + hpx/TestHPX_ViewAPI_a.cpp + hpx/TestHPX_ViewAPI_b.cpp + hpx/TestHPX_ViewAPI_c.cpp + hpx/TestHPX_ViewAPI_d.cpp + hpx/TestHPX_ViewAPI_e.cpp + hpx/TestHPX_ViewMapping_a.cpp + hpx/TestHPX_ViewMapping_b.cpp + hpx/TestHPX_ViewMapping_subview.cpp + hpx/TestHPX_ViewOfClass.cpp + hpx/TestHPX_Crs.cpp + hpx/TestHPX_WorkGraph.cpp + hpx/TestHPX_UniqueToken.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_OpenMPInterOp + UnitTest_HPXInterOp SOURCES UnitTestMain.cpp - openmp/TestOpenMP_InterOp.cpp + hpx/TestHPX_InterOp.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " @@ -310,6 +697,8 @@ IF(Kokkos_ENABLE_Cuda) cuda/TestCuda_AtomicOperations_longlongint.cpp cuda/TestCuda_AtomicOperations_double.cpp cuda/TestCuda_AtomicOperations_float.cpp + cuda/TestCuda_AtomicOperations_complexdouble.cpp + cuda/TestCuda_AtomicOperations_complexfloat.cpp cuda/TestCuda_AtomicViews.cpp cuda/TestCuda_Atomics.cpp cuda/TestCuda_Complex.cpp @@ -366,10 +755,20 @@ IF(Kokkos_ENABLE_Cuda) TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) TRIBITS_ADD_EXECUTABLE_AND_TEST( - UnitTest_CudaInterOp + UnitTest_CudaInterOpInit SOURCES UnitTestMain.cpp - cuda/TestCuda_InterOp.cpp + cuda/TestCuda_InterOp_Init.cpp + COMM serial mpi + NUM_MPI_PROCS 1 + FAIL_REGULAR_EXPRESSION " FAILED " + TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} + ) + TRIBITS_ADD_EXECUTABLE_AND_TEST( + UnitTest_CudaInterOpStreams + SOURCES + UnitTestMain.cpp + cuda/TestCuda_InterOp_Streams.cpp COMM serial mpi NUM_MPI_PROCS 1 FAIL_REGULAR_EXPRESSION " FAILED " @@ -456,3 +855,40 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST( FAIL_REGULAR_EXPRESSION " FAILED " TESTONLYLIBS kokkos_gtest ${TEST_LINK_TARGETS} ) + +# +# Compile-only tests +# +FUNCTION(KOKKOS_ADD_COMPILE_TEST TEST_NAME) + + SET(options LINK_KOKKOS) + SET(oneValueArgs) + SET(multiValueArgs) + + CMAKE_PARSE_ARGUMENTS(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + IF(PARSE_LINK_KOKKOS) + SET(libs ${TEST_LINK_TARGETS}) + ELSE() + SET(libs) + ENDIF() + + TRIBITS_ADD_EXECUTABLE( + ${TEST_NAME} + TESTONLY + COMM serial + TESTONLYLIBS ${libs} + ${PARSE_UNPARSED_ARGUMENTS} + ) + + target_compile_options( + ${PACKAGE_NAME}_${TEST_NAME} + PUBLIC $<$:${KOKKOS_CXX_FLAGS}> + ) + target_link_libraries( + ${PACKAGE_NAME}_${TEST_NAME} + PUBLIC ${KOKKOS_LD_FLAGS} + ) + +ENDFUNCTION() + diff --git a/lib/kokkos/core/unit_test/Makefile b/lib/kokkos/core/unit_test/Makefile index 72832271c8..5a69213108 100644 --- a/lib/kokkos/core/unit_test/Makefile +++ b/lib/kokkos/core/unit_test/Makefile @@ -9,6 +9,7 @@ vpath %.cpp ${KOKKOS_PATH}/core/unit_test/threads vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmp vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmptarget vpath %.cpp ${KOKKOS_PATH}/core/unit_test/qthreads +vpath %.cpp ${KOKKOS_PATH}/core/unit_test/hpx vpath %.cpp ${KOKKOS_PATH}/core/unit_test/cuda vpath %.cpp ${KOKKOS_PATH}/core/unit_test/rocm @@ -38,253 +39,310 @@ TEST_TARGETS = TARGETS = ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) - OBJ_CUDA = UnitTestMainInit.o gtest-all.o - OBJ_CUDA += TestCuda_Init.o - OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o - OBJ_CUDA += TestCuda_RangePolicy.o - OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o - OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewLayoutStrideAssignment.o - OBJ_CUDA += TestCudaUVM_ViewCopy.o TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o - OBJ_CUDA += TestCudaUVM_ViewMapping_a.o TestCudaUVM_ViewMapping_b.o TestCudaUVM_ViewMapping_subview.o - OBJ_CUDA += TestCudaHostPinned_ViewCopy.o TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o - OBJ_CUDA += TestCudaHostPinned_ViewMapping_a.o TestCudaHostPinned_ViewMapping_b.o TestCudaHostPinned_ViewMapping_subview.o - OBJ_CUDA += TestCuda_View_64bit.o - OBJ_CUDA += TestCuda_ViewOfClass.o - OBJ_CUDA += TestCuda_SubView_a.o TestCuda_SubView_b.o - OBJ_CUDA += TestCuda_SubView_c01.o TestCuda_SubView_c02.o TestCuda_SubView_c03.o - OBJ_CUDA += TestCuda_SubView_c04.o TestCuda_SubView_c05.o TestCuda_SubView_c06.o - OBJ_CUDA += TestCuda_SubView_c07.o TestCuda_SubView_c08.o TestCuda_SubView_c09.o - OBJ_CUDA += TestCuda_SubView_c10.o TestCuda_SubView_c11.o TestCuda_SubView_c12.o - OBJ_CUDA += TestCuda_SubView_c13.o - OBJ_CUDA += TestCuda_Reductions.o TestCuda_Scan.o - OBJ_CUDA += TestCuda_Reductions_DeviceView.o - OBJ_CUDA += TestCuda_Reducers_a.o TestCuda_Reducers_b.o TestCuda_Reducers_c.o TestCuda_Reducers_d.o - OBJ_CUDA += TestCuda_Complex.o - OBJ_CUDA += TestCuda_AtomicOperations_int.o TestCuda_AtomicOperations_unsignedint.o TestCuda_AtomicOperations_longint.o - OBJ_CUDA += TestCuda_AtomicOperations_unsignedlongint.o TestCuda_AtomicOperations_longlongint.o TestCuda_AtomicOperations_double.o TestCuda_AtomicOperations_float.o - OBJ_CUDA += TestCuda_AtomicViews.o TestCuda_Atomics.o - OBJ_CUDA += TestCuda_Team.o TestCuda_TeamScratch.o - OBJ_CUDA += TestCuda_TeamReductionScan.o TestCuda_TeamTeamSize.o - OBJ_CUDA += TestCuda_Other.o - OBJ_CUDA += TestCuda_MDRange_a.o TestCuda_MDRange_b.o TestCuda_MDRange_c.o TestCuda_MDRange_d.o TestCuda_MDRange_e.o - OBJ_CUDA += TestCuda_Crs.o - OBJ_CUDA += TestCuda_Task.o TestCuda_WorkGraph.o - OBJ_CUDA += TestCuda_Spaces.o - OBJ_CUDA += TestCuda_UniqueToken.o - - TARGETS += KokkosCore_UnitTest_Cuda - TARGETS += KokkosCore_UnitTest_CudaInterOp - TEST_TARGETS += test-cuda + OBJ_CUDA = UnitTestMainInit.o gtest-all.o + OBJ_CUDA += TestCuda_Init.o + OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o + OBJ_CUDA += TestCuda_RangePolicy.o + OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o + OBJ_CUDA += TestCuda_DeepCopyAlignment.o + OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewLayoutStrideAssignment.o + OBJ_CUDA += TestCudaUVM_ViewCopy.o TestCudaUVM_ViewAPI_a.o TestCudaUVM_ViewAPI_b.o TestCudaUVM_ViewAPI_c.o TestCudaUVM_ViewAPI_d.o TestCudaUVM_ViewAPI_e.o + OBJ_CUDA += TestCudaUVM_ViewMapping_a.o TestCudaUVM_ViewMapping_b.o TestCudaUVM_ViewMapping_subview.o + OBJ_CUDA += TestCudaHostPinned_ViewCopy.o TestCudaHostPinned_ViewAPI_a.o TestCudaHostPinned_ViewAPI_b.o TestCudaHostPinned_ViewAPI_c.o TestCudaHostPinned_ViewAPI_d.o TestCudaHostPinned_ViewAPI_e.o + OBJ_CUDA += TestCudaHostPinned_ViewMapping_a.o TestCudaHostPinned_ViewMapping_b.o TestCudaHostPinned_ViewMapping_subview.o + OBJ_CUDA += TestCuda_View_64bit.o + OBJ_CUDA += TestCuda_ViewOfClass.o + OBJ_CUDA += TestCuda_SubView_a.o TestCuda_SubView_b.o + OBJ_CUDA += TestCuda_SubView_c01.o TestCuda_SubView_c02.o TestCuda_SubView_c03.o + OBJ_CUDA += TestCuda_SubView_c04.o TestCuda_SubView_c05.o TestCuda_SubView_c06.o + OBJ_CUDA += TestCuda_SubView_c07.o TestCuda_SubView_c08.o TestCuda_SubView_c09.o + OBJ_CUDA += TestCuda_SubView_c10.o TestCuda_SubView_c11.o TestCuda_SubView_c12.o + OBJ_CUDA += TestCuda_SubView_c13.o + OBJ_CUDA += TestCuda_Reductions.o TestCuda_Scan.o + OBJ_CUDA += TestCuda_Reductions_DeviceView.o + OBJ_CUDA += TestCuda_Reducers_a.o TestCuda_Reducers_b.o TestCuda_Reducers_c.o TestCuda_Reducers_d.o + OBJ_CUDA += TestCuda_Complex.o + OBJ_CUDA += TestCuda_AtomicOperations_int.o TestCuda_AtomicOperations_unsignedint.o TestCuda_AtomicOperations_longint.o + OBJ_CUDA += TestCuda_AtomicOperations_unsignedlongint.o TestCuda_AtomicOperations_longlongint.o TestCuda_AtomicOperations_double.o TestCuda_AtomicOperations_float.o + OBJ_CUDA += TestCuda_AtomicOperations_complexfloat.o TestCuda_AtomicOperations_complexdouble.o + OBJ_CUDA += TestCuda_AtomicViews.o TestCuda_Atomics.o + OBJ_CUDA += TestCuda_Team.o TestCuda_TeamScratch.o + OBJ_CUDA += TestCuda_TeamReductionScan.o TestCuda_TeamTeamSize.o + OBJ_CUDA += TestCuda_TeamVectorRange.o + OBJ_CUDA += TestCuda_Other.o + OBJ_CUDA += TestCuda_MDRange_a.o TestCuda_MDRange_b.o TestCuda_MDRange_c.o TestCuda_MDRange_d.o TestCuda_MDRange_e.o + OBJ_CUDA += TestCuda_Crs.o + OBJ_CUDA += TestCuda_Task.o TestCuda_WorkGraph.o + OBJ_CUDA += TestCuda_Spaces.o + OBJ_CUDA += TestCuda_UniqueToken.o + OBJ_CUDA += TestCuda_LocalDeepCopy.o + + TARGETS += KokkosCore_UnitTest_Cuda + TARGETS += KokkosCore_UnitTest_CudaInterOpInit + TARGETS += KokkosCore_UnitTest_CudaInterOpStreams + TEST_TARGETS += test-cuda endif ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) - OBJ_ROCM = UnitTestMainInit.o gtest-all.o - OBJ_ROCM += TestROCm_Init.o - OBJ_ROCM += TestROCm_Complex.o - OBJ_ROCM += TestROCm_RangePolicy.o - OBJ_ROCM += TestROCm_AtomicOperations_int.o TestROCm_AtomicOperations_unsignedint.o TestROCm_AtomicOperations_longint.o - OBJ_ROCM += TestROCm_AtomicOperations_unsignedlongint.o TestROCm_AtomicOperations_longlongint.o TestROCm_AtomicOperations_double.o TestROCm_AtomicOperations_float.o - OBJ_ROCM += TestROCm_Atomics.o - OBJ_ROCM += TestROCm_AtomicViews.o - OBJ_ROCM += TestROCm_Other.o - OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o - OBJ_ROCM += TestROCm_MDRangeReduce_a.o TestROCm_MDRangeReduce_b.o TestROCm_MDRangeReduce_c.o TestROCm_MDRangeReduce_d.o TestROCm_MDRangeReduce_e.o - OBJ_ROCM += TestROCm_Reductions.o - OBJ_ROCM += TestROCm_Reducers_a.o TestROCm_Reducers_b.o TestROCm_Reducers_c.o TestROCm_Reducers_d.o - OBJ_ROCM += TestROCm_Scan.o - OBJ_ROCM += TestROCm_SharedAlloc.o - OBJ_ROCM += TestROCm_SubView_a.o - OBJ_ROCM += TestROCm_SubView_b.o - OBJ_ROCM += TestROCm_SubView_c01.o - OBJ_ROCM += TestROCm_SubView_c02.o - OBJ_ROCM += TestROCm_SubView_c03.o - OBJ_ROCM += TestROCm_SubView_c04.o - OBJ_ROCM += TestROCm_SubView_c05.o - OBJ_ROCM += TestROCm_SubView_c06.o - OBJ_ROCM += TestROCm_SubView_c07.o - OBJ_ROCM += TestROCm_SubView_c08.o - OBJ_ROCM += TestROCm_SubView_c09.o - OBJ_ROCM += TestROCm_SubView_c10.o - OBJ_ROCM += TestROCm_SubView_c11.o - OBJ_ROCM += TestROCm_SubView_c12.o - OBJ_ROCM += TestROCm_SubView_c13.o - OBJ_ROCM += TestROCm_Team.o - OBJ_ROCM += TestROCm_TeamReductionScan.o - OBJ_ROCM += TestROCm_TeamScratch.o TestROCm_TeamTeamSize.o - OBJ_ROCM += TestROCm_ViewAPI_a.o TestROCm_ViewAPI_b.o TestROCm_ViewAPI_c.o TestROCm_ViewAPI_d.o TestROCm_ViewAPI_e.o - OBJ_ROCM += TestROCm_ViewMapping_a.o - OBJ_ROCM += TestROCm_ViewMapping_b.o - OBJ_ROCM += TestROCm_ViewMapping_subview.o - OBJ_ROCM += TestROCmHostPinned_ViewCopy.o TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o - OBJ_ROCM += TestROCmHostPinned_View_64bit.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o - OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o - OBJ_ROCM += TestROCm_ViewOfClass.o - OBJ_ROCM += TestROCm_Spaces.o - OBJ_ROCM += TestROCm_Crs.o - - TARGETS += KokkosCore_UnitTest_ROCm - TEST_TARGETS += test-rocm + OBJ_ROCM = UnitTestMainInit.o gtest-all.o + OBJ_ROCM += TestROCm_Init.o + OBJ_ROCM += TestROCm_Complex.o + OBJ_ROCM += TestROCm_RangePolicy.o + OBJ_ROCM += TestROCm_AtomicOperations_int.o TestROCm_AtomicOperations_unsignedint.o TestROCm_AtomicOperations_longint.o + OBJ_ROCM += TestROCm_AtomicOperations_unsignedlongint.o TestROCm_AtomicOperations_longlongint.o TestROCm_AtomicOperations_double.o TestROCm_AtomicOperations_float.o + OBJ_ROCM += TestROCm_Atomics.o + OBJ_ROCM += TestROCm_AtomicViews.o + OBJ_ROCM += TestROCm_Other.o + OBJ_ROCM += TestROCm_MDRange_a.o TestROCm_MDRange_b.o TestROCm_MDRange_c.o TestROCm_MDRange_d.o TestROCm_MDRange_e.o + OBJ_ROCM += TestROCm_MDRangeReduce_a.o TestROCm_MDRangeReduce_b.o TestROCm_MDRangeReduce_c.o TestROCm_MDRangeReduce_d.o TestROCm_MDRangeReduce_e.o + OBJ_ROCM += TestROCm_Reductions.o + OBJ_ROCM += TestROCm_Reducers_a.o TestROCm_Reducers_b.o TestROCm_Reducers_c.o TestROCm_Reducers_d.o + OBJ_ROCM += TestROCm_Scan.o + OBJ_ROCM += TestROCm_SharedAlloc.o + OBJ_ROCM += TestROCm_SubView_a.o + OBJ_ROCM += TestROCm_SubView_b.o + OBJ_ROCM += TestROCm_SubView_c01.o + OBJ_ROCM += TestROCm_SubView_c02.o + OBJ_ROCM += TestROCm_SubView_c03.o + OBJ_ROCM += TestROCm_SubView_c04.o + OBJ_ROCM += TestROCm_SubView_c05.o + OBJ_ROCM += TestROCm_SubView_c06.o + OBJ_ROCM += TestROCm_SubView_c07.o + OBJ_ROCM += TestROCm_SubView_c08.o + OBJ_ROCM += TestROCm_SubView_c09.o + OBJ_ROCM += TestROCm_SubView_c10.o + OBJ_ROCM += TestROCm_SubView_c11.o + OBJ_ROCM += TestROCm_SubView_c12.o + OBJ_ROCM += TestROCm_SubView_c13.o + OBJ_ROCM += TestROCm_Team.o + OBJ_ROCM += TestROCm_TeamReductionScan.o + OBJ_ROCM += TestROCm_TeamScratch.o TestROCm_TeamTeamSize.o + OBJ_ROCM += TestROCm_ViewAPI_a.o TestROCm_ViewAPI_b.o TestROCm_ViewAPI_c.o TestROCm_ViewAPI_d.o TestROCm_ViewAPI_e.o + OBJ_ROCM += TestROCm_DeepCopyAlignment.o + OBJ_ROCM += TestROCm_ViewMapping_a.o + OBJ_ROCM += TestROCm_ViewMapping_b.o + OBJ_ROCM += TestROCm_ViewMapping_subview.o + OBJ_ROCM += TestROCmHostPinned_ViewCopy.o TestROCmHostPinned_ViewAPI_a.o TestROCmHostPinned_ViewAPI_b.o TestROCmHostPinned_ViewAPI_c.o TestROCmHostPinned_ViewAPI_d.o TestROCmHostPinned_ViewAPI_e.o + OBJ_ROCM += TestROCmHostPinned_View_64bit.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_a.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_b.o + OBJ_ROCM += TestROCmHostPinned_ViewMapping_subview.o + OBJ_ROCM += TestROCm_ViewOfClass.o + OBJ_ROCM += TestROCm_Spaces.o + OBJ_ROCM += TestROCm_Crs.o + + TARGETS += KokkosCore_UnitTest_ROCm + TEST_TARGETS += test-rocm endif ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) - - OBJ_THREADS = UnitTestMainInit.o gtest-all.o - OBJ_THREADS += TestThreads_Init.o - OBJ_THREADS += TestThreads_SharedAlloc.o - OBJ_THREADS += TestThreads_RangePolicy.o + OBJ_THREADS = UnitTestMainInit.o gtest-all.o + OBJ_THREADS += TestThreads_Init.o + OBJ_THREADS += TestThreads_SharedAlloc.o + OBJ_THREADS += TestThreads_RangePolicy.o OBJ_THREADS += TestThreads_View_64bit.o - OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o - OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o TestThreads_ViewLayoutStrideAssignment.o - OBJ_THREADS += TestThreads_ViewOfClass.o - OBJ_THREADS += TestThreads_SubView_a.o TestThreads_SubView_b.o - OBJ_THREADS += TestThreads_SubView_c01.o TestThreads_SubView_c02.o TestThreads_SubView_c03.o - OBJ_THREADS += TestThreads_SubView_c04.o TestThreads_SubView_c05.o TestThreads_SubView_c06.o - OBJ_THREADS += TestThreads_SubView_c07.o TestThreads_SubView_c08.o TestThreads_SubView_c09.o - OBJ_THREADS += TestThreads_SubView_c10.o TestThreads_SubView_c11.o TestThreads_SubView_c12.o - OBJ_THREADS += TestThreads_Reductions.o TestThreads_Scan.o - OBJ_THREADS += TestThreads_Reductions_DeviceView.o - OBJ_THREADS += TestThreads_Reducers_a.o TestThreads_Reducers_b.o TestThreads_Reducers_c.o TestThreads_Reducers_d.o - OBJ_THREADS += TestThreads_Complex.o - OBJ_THREADS += TestThreads_AtomicOperations_int.o TestThreads_AtomicOperations_unsignedint.o TestThreads_AtomicOperations_longint.o - OBJ_THREADS += TestThreads_AtomicOperations_unsignedlongint.o TestThreads_AtomicOperations_longlongint.o TestThreads_AtomicOperations_double.o TestThreads_AtomicOperations_float.o - OBJ_THREADS += TestThreads_AtomicViews.o TestThreads_Atomics.o - OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o TestThreads_TeamTeamSize.o - OBJ_THREADS += TestThreads_TeamReductionScan.o - OBJ_THREADS += TestThreads_Other.o - OBJ_THREADS += TestThreads_MDRange_a.o TestThreads_MDRange_b.o TestThreads_MDRange_c.o TestThreads_MDRange_d.o TestThreads_MDRange_e.o + OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o + OBJ_THREADS += TestThreads_DeepCopyAlignment.o + OBJ_THREADS += TestThreads_ViewMapping_a.o TestThreads_ViewMapping_b.o TestThreads_ViewMapping_subview.o TestThreads_ViewLayoutStrideAssignment.o + OBJ_THREADS += TestThreads_ViewOfClass.o + OBJ_THREADS += TestThreads_SubView_a.o TestThreads_SubView_b.o + OBJ_THREADS += TestThreads_SubView_c01.o TestThreads_SubView_c02.o TestThreads_SubView_c03.o + OBJ_THREADS += TestThreads_SubView_c04.o TestThreads_SubView_c05.o TestThreads_SubView_c06.o + OBJ_THREADS += TestThreads_SubView_c07.o TestThreads_SubView_c08.o TestThreads_SubView_c09.o + OBJ_THREADS += TestThreads_SubView_c10.o TestThreads_SubView_c11.o TestThreads_SubView_c12.o + OBJ_THREADS += TestThreads_Reductions.o TestThreads_Scan.o + OBJ_THREADS += TestThreads_Reductions_DeviceView.o + OBJ_THREADS += TestThreads_Reducers_a.o TestThreads_Reducers_b.o TestThreads_Reducers_c.o TestThreads_Reducers_d.o + OBJ_THREADS += TestThreads_Complex.o + OBJ_THREADS += TestThreads_AtomicOperations_int.o TestThreads_AtomicOperations_unsignedint.o TestThreads_AtomicOperations_longint.o + OBJ_THREADS += TestThreads_AtomicOperations_unsignedlongint.o TestThreads_AtomicOperations_longlongint.o TestThreads_AtomicOperations_double.o TestThreads_AtomicOperations_float.o + OBJ_THREADS += TestThreads_AtomicOperations_complexfloat.o TestThreads_AtomicOperations_complexdouble.o + OBJ_THREADS += TestThreads_AtomicViews.o TestThreads_Atomics.o + OBJ_THREADS += TestThreads_Team.o TestThreads_TeamScratch.o TestThreads_TeamTeamSize.o + OBJ_THREADS += TestThreads_TeamReductionScan.o + OBJ_THREADS += TestThreads_TeamVectorRange.o + OBJ_THREADS += TestThreads_Other.o + OBJ_THREADS += TestThreads_MDRange_a.o TestThreads_MDRange_b.o TestThreads_MDRange_c.o TestThreads_MDRange_d.o TestThreads_MDRange_e.o + OBJ_THREADS += TestThreads_LocalDeepCopy.o - TARGETS += KokkosCore_UnitTest_Threads + TARGETS += KokkosCore_UnitTest_Threads - TEST_TARGETS += test-threads + TEST_TARGETS += test-threads endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) - OBJ_OPENMP = UnitTestMainInit.o gtest-all.o - OBJ_OPENMP += TestOpenMP_Init.o - OBJ_OPENMP += TestOpenMP_SharedAlloc.o - OBJ_OPENMP += TestOpenMP_RangePolicy.o + OBJ_OPENMP = UnitTestMainInit.o gtest-all.o + OBJ_OPENMP += TestOpenMP_Init.o + OBJ_OPENMP += TestOpenMP_SharedAlloc.o + OBJ_OPENMP += TestOpenMP_RangePolicy.o OBJ_OPENMP += TestOpenMP_View_64bit.o - OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o - OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o TestOpenMP_ViewLayoutStrideAssignment.o - OBJ_OPENMP += TestOpenMP_ViewOfClass.o - OBJ_OPENMP += TestOpenMP_SubView_a.o TestOpenMP_SubView_b.o - OBJ_OPENMP += TestOpenMP_SubView_c01.o TestOpenMP_SubView_c02.o TestOpenMP_SubView_c03.o - OBJ_OPENMP += TestOpenMP_SubView_c04.o TestOpenMP_SubView_c05.o TestOpenMP_SubView_c06.o - OBJ_OPENMP += TestOpenMP_SubView_c07.o TestOpenMP_SubView_c08.o TestOpenMP_SubView_c09.o - OBJ_OPENMP += TestOpenMP_SubView_c10.o TestOpenMP_SubView_c11.o TestOpenMP_SubView_c12.o - OBJ_OPENMP += TestOpenMP_SubView_c13.o - OBJ_OPENMP += TestOpenMP_Reductions.o TestOpenMP_Scan.o - OBJ_OPENMP += TestOpenMP_Reductions_DeviceView.o - OBJ_OPENMP += TestOpenMP_Reducers_a.o TestOpenMP_Reducers_b.o TestOpenMP_Reducers_c.o TestOpenMP_Reducers_d.o - OBJ_OPENMP += TestOpenMP_Complex.o - OBJ_OPENMP += TestOpenMP_AtomicOperations_int.o TestOpenMP_AtomicOperations_unsignedint.o TestOpenMP_AtomicOperations_longint.o - OBJ_OPENMP += TestOpenMP_AtomicOperations_unsignedlongint.o TestOpenMP_AtomicOperations_longlongint.o TestOpenMP_AtomicOperations_double.o TestOpenMP_AtomicOperations_float.o - OBJ_OPENMP += TestOpenMP_AtomicViews.o TestOpenMP_Atomics.o - OBJ_OPENMP += TestOpenMP_Team.o TestOpenMP_TeamScratch.o - OBJ_OPENMP += TestOpenMP_TeamReductionScan.o TestOpenMP_TeamTeamSize.o - OBJ_OPENMP += TestOpenMP_Other.o - OBJ_OPENMP += TestOpenMP_MDRange_a.o TestOpenMP_MDRange_b.o TestOpenMP_MDRange_c.o TestOpenMP_MDRange_d.o TestOpenMP_MDRange_e.o - OBJ_OPENMP += TestOpenMP_Crs.o - OBJ_OPENMP += TestOpenMP_Task.o TestOpenMP_WorkGraph.o - OBJ_OPENMP += TestOpenMP_UniqueToken.o - - TARGETS += KokkosCore_UnitTest_OpenMP + OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o + OBJ_OPENMP += TestOpenMP_DeepCopyAlignment.o + OBJ_OPENMP += TestOpenMP_ViewMapping_a.o TestOpenMP_ViewMapping_b.o TestOpenMP_ViewMapping_subview.o TestOpenMP_ViewLayoutStrideAssignment.o + OBJ_OPENMP += TestOpenMP_ViewOfClass.o + OBJ_OPENMP += TestOpenMP_SubView_a.o TestOpenMP_SubView_b.o + OBJ_OPENMP += TestOpenMP_SubView_c01.o TestOpenMP_SubView_c02.o TestOpenMP_SubView_c03.o + OBJ_OPENMP += TestOpenMP_SubView_c04.o TestOpenMP_SubView_c05.o TestOpenMP_SubView_c06.o + OBJ_OPENMP += TestOpenMP_SubView_c07.o TestOpenMP_SubView_c08.o TestOpenMP_SubView_c09.o + OBJ_OPENMP += TestOpenMP_SubView_c10.o TestOpenMP_SubView_c11.o TestOpenMP_SubView_c12.o + OBJ_OPENMP += TestOpenMP_SubView_c13.o + OBJ_OPENMP += TestOpenMP_Reductions.o TestOpenMP_Scan.o + OBJ_OPENMP += TestOpenMP_Reductions_DeviceView.o + OBJ_OPENMP += TestOpenMP_Reducers_a.o TestOpenMP_Reducers_b.o TestOpenMP_Reducers_c.o TestOpenMP_Reducers_d.o + OBJ_OPENMP += TestOpenMP_Complex.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_int.o TestOpenMP_AtomicOperations_unsignedint.o TestOpenMP_AtomicOperations_longint.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_unsignedlongint.o TestOpenMP_AtomicOperations_longlongint.o TestOpenMP_AtomicOperations_double.o TestOpenMP_AtomicOperations_float.o + OBJ_OPENMP += TestOpenMP_AtomicOperations_complexfloat.o TestOpenMP_AtomicOperations_complexdouble.o + OBJ_OPENMP += TestOpenMP_AtomicViews.o TestOpenMP_Atomics.o + OBJ_OPENMP += TestOpenMP_Team.o TestOpenMP_TeamScratch.o + OBJ_OPENMP += TestOpenMP_TeamReductionScan.o TestOpenMP_TeamTeamSize.o + OBJ_OPENMP += TestOpenMP_TeamVectorRange.o + OBJ_OPENMP += TestOpenMP_Other.o + OBJ_OPENMP += TestOpenMP_MDRange_a.o TestOpenMP_MDRange_b.o TestOpenMP_MDRange_c.o TestOpenMP_MDRange_d.o TestOpenMP_MDRange_e.o + OBJ_OPENMP += TestOpenMP_Crs.o + OBJ_OPENMP += TestOpenMP_Task.o TestOpenMP_WorkGraph.o + OBJ_OPENMP += TestOpenMP_UniqueToken.o + OBJ_OPENMP += TestOpenMP_LocalDeepCopy.o + + TARGETS += KokkosCore_UnitTest_OpenMP TARGETS += KokkosCore_UnitTest_OpenMPInterOp - TEST_TARGETS += test-openmp + TEST_TARGETS += test-openmp endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - OBJ_OPENMPTARGET = UnitTestMainInit.o gtest-all.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Init.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SharedAlloc.o - OBJ_OPENMPTARGET += TestOpenMPTarget_RangePolicy.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o TestOpenMPTarget_ViewAPI_e.o #Some commented out code - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_a.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_b.o + OBJ_OPENMPTARGET = UnitTestMainInit.o gtest-all.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Init.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SharedAlloc.o + OBJ_OPENMPTARGET += TestOpenMPTarget_RangePolicy.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o TestOpenMPTarget_ViewAPI_e.o #Some commented out code + OBJ_OPENMPTARGET += TestOpenMPTarget_DeepCopyAlignment.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_a.o + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_b.o OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_subview.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewOfClass.o - OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_a.o TestOpenMPTarget_SubView_b.o - #The following subview tests need something like UVM: - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c01.o TestOpenMPTarget_SubView_c02.o TestOpenMPTarget_SubView_c03.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c04.o TestOpenMPTarget_SubView_c05.o TestOpenMPTarget_SubView_c06.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c07.o TestOpenMPTarget_SubView_c08.o TestOpenMPTarget_SubView_c09.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c10.o TestOpenMPTarget_SubView_c11.o TestOpenMPTarget_SubView_c12.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Reductions.o # Need custom reductions - #OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Scan.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Complex.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_int.o TestOpenMPTarget_AtomicOperations_unsignedint.o TestOpenMPTarget_AtomicOperations_longint.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_unsignedlongint.o TestOpenMPTarget_AtomicOperations_longlongint.o TestOpenMPTarget_AtomicOperations_double.o TestOpenMPTarget_AtomicOperations_float.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicViews.o - OBJ_OPENMPTARGET += TestOpenMPTarget_Atomics.o # Commented Out Arbitrary Type Atomics - #OBJ_OPENMPTARGET += TestOpenMPTarget_Team.o # There is still a static function in this - #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamScratch.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamReductionScan.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_Other.o - #OBJ_OPENMPTARGET += TestOpenMPTarget_MDRange_a.o TestOpenMPTarget_MDRange_b.o TestOpenMPTarget_MDRange_c.o TestOpenMPTarget_MDRange_d.o TestOpenMPTarget_MDRange_d.e - #OBJ_OPENMPTARGET += TestOpenMPTarget_Task.o - - TARGETS += KokkosCore_UnitTest_OpenMPTarget + #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewOfClass.o + OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_a.o TestOpenMPTarget_SubView_b.o + #The following subview tests need something like UVM: + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c01.o TestOpenMPTarget_SubView_c02.o TestOpenMPTarget_SubView_c03.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c04.o TestOpenMPTarget_SubView_c05.o TestOpenMPTarget_SubView_c06.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c07.o TestOpenMPTarget_SubView_c08.o TestOpenMPTarget_SubView_c09.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c10.o TestOpenMPTarget_SubView_c11.o TestOpenMPTarget_SubView_c12.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Reductions.o # Need custom reductions + #OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Scan.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Complex.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_int.o TestOpenMPTarget_AtomicOperations_unsignedint.o TestOpenMPTarget_AtomicOperations_longint.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_unsignedlongint.o TestOpenMPTarget_AtomicOperations_longlongint.o TestOpenMPTarget_AtomicOperations_double.o TestOpenMPTarget_AtomicOperations_float.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_complexfloat.o TestOpenMPTarget_AtomicOperations_complexdouble.o + OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicViews.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Atomics.o # Commented Out Arbitrary Type Atomics + #OBJ_OPENMPTARGET += TestOpenMPTarget_Team.o # There is still a static function in this + #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamScratch.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_TeamReductionScan.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_Other.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_MDRange_a.o TestOpenMPTarget_MDRange_b.o TestOpenMPTarget_MDRange_c.o TestOpenMPTarget_MDRange_d.o TestOpenMPTarget_MDRange_d.e + #OBJ_OPENMPTARGET += TestOpenMPTarget_Task.o - TEST_TARGETS += test-openmptarget + TARGETS += KokkosCore_UnitTest_OpenMPTarget + TEST_TARGETS += test-openmptarget endif ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) - OBJ_QTHREADS = TestQthreads_Other.o TestQthreads_Reductions.o TestQthreads_Atomics.o TestQthreads_Team.o - OBJ_QTHREADS += TestQthreads_SubView_a.o TestQthreads_SubView_b.o - OBJ_QTHREADS += TestQthreads_SubView_c01.o TestQthreads_SubView_c02.o TestQthreads_SubView_c03.o - OBJ_QTHREADS += TestQthreads_SubView_c04.o TestQthreads_SubView_c05.o TestQthreads_SubView_c06.o - OBJ_QTHREADS += TestQthreads_SubView_c07.o TestQthreads_SubView_c08.o TestQthreads_SubView_c09.o - OBJ_QTHREADS += TestQthreads_SubView_c10.o TestQthreads_SubView_c11.o TestQthreads_SubView_c12.o - OBJ_QTHREADS += TestQthreads_ViewAPI_a.o TestQthreads_ViewAPI_b.o TestQthreads_ViewAPI_c.o TestQthreads_ViewAPI_d.o TestQthreads_ViewAPI_e.o UnitTestMain.o gtest-all.o - TARGETS += KokkosCore_UnitTest_Qthreads + OBJ_QTHREADS = TestQthreads_Other.o TestQthreads_Reductions.o TestQthreads_Atomics.o TestQthreads_Team.o + OBJ_QTHREADS += TestQthreads_SubView_a.o TestQthreads_SubView_b.o + OBJ_QTHREADS += TestQthreads_SubView_c01.o TestQthreads_SubView_c02.o TestQthreads_SubView_c03.o + OBJ_QTHREADS += TestQthreads_SubView_c04.o TestQthreads_SubView_c05.o TestQthreads_SubView_c06.o + OBJ_QTHREADS += TestQthreads_SubView_c07.o TestQthreads_SubView_c08.o TestQthreads_SubView_c09.o + OBJ_QTHREADS += TestQthreads_SubView_c10.o TestQthreads_SubView_c11.o TestQthreads_SubView_c12.o + OBJ_QTHREADS += TestQthreads_ViewAPI_a.o TestQthreads_ViewAPI_b.o TestQthreads_ViewAPI_c.o TestQthreads_ViewAPI_d.o TestQthreads_ViewAPI_e.o UnitTestMain.o gtest-all.o + TARGETS += KokkosCore_UnitTest_Qthreads - OBJ_QTHREADS2 = UnitTestMainInit.o gtest-all.o - OBJ_QTHREADS2 += TestQthreads_Complex.o - TARGETS += KokkosCore_UnitTest_Qthreads2 + OBJ_QTHREADS2 = UnitTestMainInit.o gtest-all.o + OBJ_QTHREADS2 += TestQthreads_Complex.o + TARGETS += KokkosCore_UnitTest_Qthreads2 - TEST_TARGETS += test-qthreads + TEST_TARGETS += test-qthreads +endif + +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + OBJ_HPX = UnitTestMainInit.o gtest-all.o + OBJ_HPX += TestHPX_Init.o + OBJ_HPX += TestHPX_SharedAlloc.o + OBJ_HPX += TestHPX_RangePolicy.o + OBJ_HPX += TestHPX_View_64bit.o + OBJ_HPX += TestHPX_ViewAPI_a.o TestHPX_ViewAPI_b.o TestHPX_ViewAPI_c.o TestHPX_ViewAPI_d.o TestHPX_ViewAPI_e.o + OBJ_HPX += TestHPX_ViewMapping_a.o TestHPX_ViewMapping_b.o TestHPX_ViewMapping_subview.o + OBJ_HPX += TestHPX_ViewOfClass.o + OBJ_HPX += TestHPX_SubView_a.o TestHPX_SubView_b.o + OBJ_HPX += TestHPX_SubView_c01.o TestHPX_SubView_c02.o TestHPX_SubView_c03.o + OBJ_HPX += TestHPX_SubView_c04.o TestHPX_SubView_c05.o TestHPX_SubView_c06.o + OBJ_HPX += TestHPX_SubView_c07.o TestHPX_SubView_c08.o TestHPX_SubView_c09.o + OBJ_HPX += TestHPX_SubView_c10.o TestHPX_SubView_c11.o TestHPX_SubView_c12.o + OBJ_HPX += TestHPX_SubView_c13.o + OBJ_HPX += TestHPX_Reductions.o + OBJ_HPX += TestHPX_Scan.o + OBJ_HPX += TestHPX_Reducers_a.o TestHPX_Reducers_b.o TestHPX_Reducers_c.o TestHPX_Reducers_d.o + OBJ_HPX += TestHPX_Complex.o + OBJ_HPX += TestHPX_AtomicOperations_int.o TestHPX_AtomicOperations_unsignedint.o TestHPX_AtomicOperations_longint.o + OBJ_HPX += TestHPX_AtomicOperations_unsignedlongint.o TestHPX_AtomicOperations_longlongint.o TestHPX_AtomicOperations_double.o TestHPX_AtomicOperations_float.o + OBJ_HPX += TestHPX_AtomicViews.o TestHPX_Atomics.o + OBJ_HPX += TestHPX_Team.o + OBJ_HPX += TestHPX_TeamVectorRange.o + OBJ_HPX += TestHPX_TeamScratch.o + OBJ_HPX += TestHPX_TeamReductionScan.o + OBJ_HPX += TestHPX_Other.o + OBJ_HPX += TestHPX_MDRange_a.o TestHPX_MDRange_b.o TestHPX_MDRange_c.o TestHPX_MDRange_d.o TestHPX_MDRange_e.o + OBJ_HPX += TestHPX_Crs.o + OBJ_HPX += TestHPX_Task.o + OBJ_HPX += TestHPX_WorkGraph.o + OBJ_HPX += TestHPX_UniqueToken.o + + TARGETS += KokkosCore_UnitTest_HPX + TARGETS += KokkosCore_UnitTest_HPXInterOp + + TEST_TARGETS += test-hpx endif ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) - OBJ_SERIAL = UnitTestMainInit.o gtest-all.o - OBJ_SERIAL += TestSerial_Init.o - OBJ_SERIAL += TestSerial_SharedAlloc.o - OBJ_SERIAL += TestSerial_RangePolicy.o - OBJ_SERIAL += TestSerial_View_64bit.o - OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o - OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o TestSerial_ViewLayoutStrideAssignment.o - OBJ_SERIAL += TestSerial_ViewOfClass.o - OBJ_SERIAL += TestSerial_SubView_a.o TestSerial_SubView_b.o - OBJ_SERIAL += TestSerial_SubView_c01.o TestSerial_SubView_c02.o TestSerial_SubView_c03.o - OBJ_SERIAL += TestSerial_SubView_c04.o TestSerial_SubView_c05.o TestSerial_SubView_c06.o - OBJ_SERIAL += TestSerial_SubView_c07.o TestSerial_SubView_c08.o TestSerial_SubView_c09.o - OBJ_SERIAL += TestSerial_SubView_c10.o TestSerial_SubView_c11.o TestSerial_SubView_c12.o - OBJ_SERIAL += TestSerial_SubView_c13.o - OBJ_SERIAL += TestSerial_Reductions.o TestSerial_Scan.o - OBJ_SERIAL += TestSerial_Reductions_DeviceView.o - OBJ_SERIAL += TestSerial_Reducers_a.o TestSerial_Reducers_b.o TestSerial_Reducers_c.o TestSerial_Reducers_d.o - OBJ_SERIAL += TestSerial_Complex.o - OBJ_SERIAL += TestSerial_AtomicOperations_int.o TestSerial_AtomicOperations_unsignedint.o TestSerial_AtomicOperations_longint.o - OBJ_SERIAL += TestSerial_AtomicOperations_unsignedlongint.o TestSerial_AtomicOperations_longlongint.o TestSerial_AtomicOperations_double.o TestSerial_AtomicOperations_float.o - OBJ_SERIAL += TestSerial_AtomicViews.o TestSerial_Atomics.o - OBJ_SERIAL += TestSerial_Team.o TestSerial_TeamScratch.o - OBJ_SERIAL += TestSerial_TeamReductionScan.o TestSerial_TeamTeamSize.o - OBJ_SERIAL += TestSerial_Other.o - #HCC_WORKAROUND - ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) + OBJ_SERIAL = UnitTestMainInit.o gtest-all.o + OBJ_SERIAL += TestSerial_Init.o + OBJ_SERIAL += TestSerial_SharedAlloc.o + OBJ_SERIAL += TestSerial_RangePolicy.o + OBJ_SERIAL += TestSerial_View_64bit.o + OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o + OBJ_SERIAL += TestSerial_DeepCopyAlignment.o + OBJ_SERIAL += TestSerial_ViewMapping_a.o TestSerial_ViewMapping_b.o TestSerial_ViewMapping_subview.o TestSerial_ViewLayoutStrideAssignment.o + OBJ_SERIAL += TestSerial_ViewOfClass.o + OBJ_SERIAL += TestSerial_SubView_a.o TestSerial_SubView_b.o + OBJ_SERIAL += TestSerial_SubView_c01.o TestSerial_SubView_c02.o TestSerial_SubView_c03.o + OBJ_SERIAL += TestSerial_SubView_c04.o TestSerial_SubView_c05.o TestSerial_SubView_c06.o + OBJ_SERIAL += TestSerial_SubView_c07.o TestSerial_SubView_c08.o TestSerial_SubView_c09.o + OBJ_SERIAL += TestSerial_SubView_c10.o TestSerial_SubView_c11.o TestSerial_SubView_c12.o + OBJ_SERIAL += TestSerial_SubView_c13.o + OBJ_SERIAL += TestSerial_Reductions.o TestSerial_Scan.o + OBJ_SERIAL += TestSerial_Reductions_DeviceView.o + OBJ_SERIAL += TestSerial_Reducers_a.o TestSerial_Reducers_b.o TestSerial_Reducers_c.o TestSerial_Reducers_d.o + OBJ_SERIAL += TestSerial_Complex.o + OBJ_SERIAL += TestSerial_AtomicOperations_int.o TestSerial_AtomicOperations_unsignedint.o TestSerial_AtomicOperations_longint.o + OBJ_SERIAL += TestSerial_AtomicOperations_unsignedlongint.o TestSerial_AtomicOperations_longlongint.o TestSerial_AtomicOperations_double.o TestSerial_AtomicOperations_float.o + OBJ_SERIAL += TestSerial_AtomicOperations_complexfloat.o TestSerial_AtomicOperations_complexdouble.o + OBJ_SERIAL += TestSerial_AtomicViews.o TestSerial_Atomics.o + OBJ_SERIAL += TestSerial_Team.o TestSerial_TeamScratch.o + OBJ_SERIAL += TestSerial_TeamVectorRange.o + OBJ_SERIAL += TestSerial_TeamReductionScan.o TestSerial_TeamTeamSize.o + OBJ_SERIAL += TestSerial_Other.o + #HCC_WORKAROUND + ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) OBJ_SERIAL += TestSerial_MDRange_a.o TestSerial_MDRange_b.o TestSerial_MDRange_c.o TestSerial_MDRange_d.o TestSerial_MDRange_e.o - endif - OBJ_SERIAL += TestSerial_Crs.o - OBJ_SERIAL += TestSerial_Task.o TestSerial_WorkGraph.o - - TARGETS += KokkosCore_UnitTest_Serial + endif + OBJ_SERIAL += TestSerial_Crs.o + OBJ_SERIAL += TestSerial_Task.o TestSerial_WorkGraph.o + OBJ_SERIAL += TestSerial_LocalDeepCopy.o - TEST_TARGETS += test-serial + TARGETS += KokkosCore_UnitTest_Serial + + TEST_TARGETS += test-serial endif OBJ_HWLOC = TestHWLOC.o UnitTestMain.o gtest-all.o @@ -298,10 +356,10 @@ TEST_TARGETS += test-host-barrier OBJ_DEFAULT = UnitTestMainInit.o gtest-all.o ifneq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) ifneq ($(KOKKOS_INTERNAL_COMPILER_HCC), 1) - OBJ_DEFAULT += TestDefaultDeviceType.o - OBJ_DEFAULT += TestDefaultDeviceType_a1.o TestDefaultDeviceType_b1.o TestDefaultDeviceType_c1.o - OBJ_DEFAULT += TestDefaultDeviceType_a2.o TestDefaultDeviceType_b2.o TestDefaultDeviceType_c2.o - OBJ_DEFAULT += TestDefaultDeviceType_a3.o TestDefaultDeviceType_b3.o TestDefaultDeviceType_c3.o + OBJ_DEFAULT += TestDefaultDeviceType.o + OBJ_DEFAULT += TestDefaultDeviceType_a1.o TestDefaultDeviceType_b1.o TestDefaultDeviceType_c1.o + OBJ_DEFAULT += TestDefaultDeviceType_a2.o TestDefaultDeviceType_b2.o TestDefaultDeviceType_c2.o + OBJ_DEFAULT += TestDefaultDeviceType_a3.o TestDefaultDeviceType_b3.o TestDefaultDeviceType_c3.o OBJ_DEFAULT += TestDefaultDeviceType_d.o endif endif @@ -325,9 +383,11 @@ TEST_TARGETS += ${INITTESTS_TEST_TARGETS} KokkosCore_UnitTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Cuda -KokkosCore_UnitTest_CudaInterOp: UnitTestMain.o gtest-all.o TestCuda_InterOp.o - $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOp - +KokkosCore_UnitTest_CudaInterOpInit: UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOpInit +KokkosCore_UnitTest_CudaInterOpStreams: UnitTestMain.o gtest-all.o TestCuda_InterOp_Streams.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp_Streams.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOpStreams + KokkosCore_UnitTest_ROCm: $(OBJ_ROCM) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_ROCM) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_ROCm @@ -337,7 +397,7 @@ KokkosCore_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) KokkosCore_UnitTest_OpenMP: $(OBJ_OPENMP) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_OPENMP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_OpenMP -KokkosCore_UnitTest_OpenMPInterOp: UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o +KokkosCore_UnitTest_OpenMPInterOp: UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestOpenMP_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_OpenMPInterOp KokkosCore_UnitTest_OpenMPTarget: $(OBJ_OPENMPTARGET) $(KOKKOS_LINK_DEPENDS) @@ -352,6 +412,12 @@ KokkosCore_UnitTest_Qthreads: $(OBJ_QTHREADS) $(KOKKOS_LINK_DEPENDS) KokkosCore_UnitTest_Qthreads2: $(OBJ_QTHREADS2) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_QTHREADS2) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Qthreads2 +KokkosCore_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HPX + +KokkosCore_UnitTest_HPXInterOp: UnitTestMain.o gtest-all.o TestHPX_InterOp.o $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestHPX_InterOp.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HPXInterOp + KokkosCore_UnitTest_HWLOC: $(OBJ_HWLOC) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_HWLOC) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HWLOC @@ -376,7 +442,8 @@ ${INITTESTS_TARGETS}: KokkosCore_UnitTest_DefaultDeviceTypeInit_%: TestDefaultDe test-cuda: KokkosCore_UnitTest_Cuda ./KokkosCore_UnitTest_Cuda - ./KokkosCore_UnitTest_CudaInterOp + ./KokkosCore_UnitTest_CudaInterOpInit + ./KokkosCore_UnitTest_CudaInterOpStreams test-rocm: KokkosCore_UnitTest_ROCm ./KokkosCore_UnitTest_ROCm @@ -398,6 +465,10 @@ test-qthreads: KokkosCore_UnitTest_Qthreads KokkosCore_UnitTest_Qthreads2 ./KokkosCore_UnitTest_Qthreads ./KokkosCore_UnitTest_Qthreads2 +test-hpx: KokkosCore_UnitTest_HPX + ./KokkosCore_UnitTest_HPX + ./KokkosCore_UnitTest_HPXInterOp + test-hwloc: KokkosCore_UnitTest_HWLOC ./KokkosCore_UnitTest_HWLOC diff --git a/lib/kokkos/core/unit_test/TestAtomic.hpp b/lib/kokkos/core/unit_test/TestAtomic.hpp index 58b6325115..ee93d53470 100644 --- a/lib/kokkos/core/unit_test/TestAtomic.hpp +++ b/lib/kokkos/core/unit_test/TestAtomic.hpp @@ -211,13 +211,13 @@ T AddLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct AddFunctor< T, execution_space > f_add; f_add.data = data; Kokkos::parallel_for( loop, f_add ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -226,7 +226,7 @@ T AddLoop( int loop ) { f_add_red.data = data; int dummy_result; Kokkos::parallel_reduce( loop, f_add_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } @@ -298,12 +298,12 @@ T CASLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct CASFunctor< T, execution_space > f_cas; f_cas.data = data; Kokkos::parallel_for( loop, f_cas ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -312,7 +312,7 @@ T CASLoop( int loop ) { f_cas_red.data = data; int dummy_result; Kokkos::parallel_reduce( loop, f_cas_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } @@ -381,20 +381,20 @@ T ExchLoop( int loop ) { f_zero.data = data; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); typename ZeroFunctor< T, execution_space >::type data2( "Data" ); typename ZeroFunctor< T, execution_space >::h_type h_data2( "HData" ); f_zero.data = data2; Kokkos::parallel_for( 1, f_zero ); - execution_space::fence(); + execution_space().fence(); struct ExchFunctor< T, execution_space > f_exch; f_exch.data = data; f_exch.data2 = data2; Kokkos::parallel_for( loop, f_exch ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); Kokkos::deep_copy( h_data2, data2 ); @@ -405,7 +405,7 @@ T ExchLoop( int loop ) { f_exch_red.data2 = data2; int dummy_result; Kokkos::parallel_reduce( loop, f_exch_red , dummy_result ); - execution_space::fence(); + execution_space().fence(); return val; } diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations.hpp index d068c18d87..e043737e42 100644 --- a/lib/kokkos/core/unit_test/TestAtomicOperations.hpp +++ b/lib/kokkos/core/unit_test/TestAtomicOperations.hpp @@ -113,13 +113,13 @@ T MaxAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MaxFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -191,13 +191,13 @@ T MinAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MinFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -268,13 +268,13 @@ T IncAtomic( T i0 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct IncFunctor< T, execution_space > f( i0 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -345,13 +345,13 @@ T DecAtomic( T i0 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct DecFunctor< T, execution_space > f( i0 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -423,13 +423,13 @@ T MulAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct MulFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -501,13 +501,13 @@ T DivAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct DivFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -536,7 +536,9 @@ bool DivAtomicTest( T i0, T i1 ) bool passed = true; - if ( (resSerial-res)*(resSerial-res) > 1e-10 ) { + using std::abs; + using Kokkos::abs; + if ( abs( (resSerial-res) * 1.) > 1e-5 ) { passed = false; std::cout << "Loop<" @@ -579,13 +581,13 @@ T ModAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct ModFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -657,13 +659,13 @@ T AndAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct AndFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -735,13 +737,13 @@ T OrAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct OrFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -813,13 +815,13 @@ T XorAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct XorFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -891,13 +893,13 @@ T LShiftAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct LShiftFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); @@ -969,13 +971,13 @@ T RShiftAtomic( T i0, T i1 ) { f_init.data = data; Kokkos::parallel_for( 1, f_init ); - execution_space::fence(); + execution_space().fence(); struct RShiftFunctor< T, execution_space > f( i0, i1 ); f.data = data; Kokkos::parallel_for( 1, f ); - execution_space::fence(); + execution_space().fence(); Kokkos::deep_copy( h_data, data ); T val = h_data(); diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp new file mode 100644 index 0000000000..a8474d8952 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestAtomicOperations_complexdouble.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +namespace Test { +TEST_F( TEST_CATEGORY , atomic_operations_complexdouble ) +{ + const int start = 1; // Avoid zero for division. + const int end = 11; + for ( int i = start; i < end; ++i ) + { + ASSERT_TRUE( ( TestAtomicOperations::MulAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + ASSERT_TRUE( ( TestAtomicOperations::DivAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + } +} +} diff --git a/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp b/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp new file mode 100644 index 0000000000..961418e675 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestAtomicOperations_complexfloat.hpp @@ -0,0 +1,57 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +namespace Test { +TEST_F( TEST_CATEGORY , atomic_operations_complexfloat ) +{ + const int start = 1; // Avoid zero for division. + const int end = 11; + for ( int i = start; i < end; ++i ) + { + ASSERT_TRUE( ( TestAtomicOperations::MulAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + ASSERT_TRUE( ( TestAtomicOperations::DivAtomicTest< Kokkos::complex, TEST_EXECSPACE >( start , end - i) ) ); + } +} +} diff --git a/lib/kokkos/core/unit_test/TestCXX11.hpp b/lib/kokkos/core/unit_test/TestCXX11.hpp index 8a158e2667..542b4a1912 100644 --- a/lib/kokkos/core/unit_test/TestCXX11.hpp +++ b/lib/kokkos/core/unit_test/TestCXX11.hpp @@ -235,6 +235,7 @@ double ReduceTestFunctor() { else { Kokkos::parallel_reduce( policy_type( 25, Kokkos::AUTO ), FunctorReduceTest< DeviceType >( a ), unmanaged_result( & result ) ); } + Kokkos::fence(); return result; } @@ -281,6 +282,7 @@ double ReduceTestLambda() { } }, unmanaged_result( & result ) ); } + Kokkos::fence(); return result; } diff --git a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp index e6b5c48d3d..07c332a9ae 100644 --- a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp +++ b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp @@ -102,7 +102,7 @@ bool Test() { AddFunctor< DeviceType > f( a, b ); Kokkos::parallel_for( 1024, f ); - DeviceType::fence(); + DeviceType().fence(); return true; } diff --git a/lib/kokkos/core/unit_test/TestDeepCopy.hpp b/lib/kokkos/core/unit_test/TestDeepCopy.hpp new file mode 100644 index 0000000000..aebf263290 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestDeepCopy.hpp @@ -0,0 +1,167 @@ +#include + +namespace Test { + +namespace Impl { +template +struct TestDeepCopy { + + typedef Kokkos::View a_base_t; + typedef Kokkos::View b_base_t; + typedef Kokkos::View a_char_t; + typedef Kokkos::View b_char_t; + + typedef Kokkos::RangePolicy policyA_t; + typedef Kokkos::RangePolicy policyB_t; + + static void reset_a_copy_and_b(Kokkos::View a_char_copy, Kokkos::View b_char) { + const int N = b_char.extent(0); + Kokkos::parallel_for("TestDeepCopy: FillA_copy",policyA_t(0,N), KOKKOS_LAMBDA (const int& i) { + a_char_copy(i) = char(0); + }); + Kokkos::parallel_for("TestDeepCopy: FillB",policyB_t(0,N), KOKKOS_LAMBDA (const int& i) { + b_char(i) = char(0); + }); + } + + static int compare_equal(Kokkos::View a_char_copy, Kokkos::View a_char) { + const int N = a_char.extent(0); + int errors; + Kokkos::parallel_reduce("TestDeepCopy: FillA_copy",policyA_t(0,N), KOKKOS_LAMBDA (const int& i, int& lsum) { + if(a_char_copy(i) != a_char(i)) lsum++; + },errors); + return errors; + } + + static void run_test(int num_bytes) { + a_base_t a_base("test_space_to_space",(num_bytes+128)/8); + a_base_t a_base_copy("test_space_to_space",(num_bytes+128)/8); + Kokkos::View b_base("test_space_to_space",(num_bytes+128)/8); + + Kokkos::View a_char((char*) a_base.data(),a_base.extent(0)*8); + Kokkos::View a_char_copy((char*) a_base_copy.data(),a_base.extent(0)*8); + Kokkos::View b_char((char*) b_base.data(),b_base.extent(0)*8); + + Kokkos::parallel_for("TestDeepCopy: FillA",policyA_t(0,a_char.extent(0)), KOKKOS_LAMBDA (const int& i) { + a_char(i) = static_cast(i%97)+1; + }); + + reset_a_copy_and_b(a_char_copy, b_char); + + { + int check = compare_equal(a_char_copy,a_char); + ASSERT_EQ( check, a_char.extent(0) ); + } + + // (a.data()%8, (a.data()+a.extent(0))%8, b.data()%8, (b.data()+b.extent(0))%8 + // (0,0,0,0) + { + int a_begin = 0; + int a_end = 0; + int b_begin = 0; + int b_end = 0; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 0; + int a_end = 5; + int b_begin = 0; + int b_end = 5; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 3; + int a_end = 0; + int b_begin = 3; + int b_end = 0; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 3; + int a_end = 6; + int b_begin = 3; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 5; + int a_end = 4; + int b_begin = 3; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 0; + int a_end = 8; + int b_begin = 2; + int b_end = 6; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + { + int a_begin = 2; + int a_end = 6; + int b_begin = 0; + int b_end = 8; + auto a = Kokkos::subview(a_char,std::pair(a_begin,a_char.extent(0)-a_end)); + auto b = Kokkos::subview(b_char,std::pair(b_begin,b_char.extent(0)-b_end)); + auto a_copy = Kokkos::subview(a_char_copy,std::pair(a_begin,a_char_copy.extent(0)-a_end)); + Kokkos::deep_copy(b,a); + Kokkos::deep_copy(a_copy,b); + int check = compare_equal(a_copy,a); + ASSERT_EQ( check, 0 ); + } + + } +}; +} + +TEST_F( TEST_CATEGORY, deep_copy_alignment ) +{ + { Impl::TestDeepCopy< TEST_EXECSPACE::memory_space , TEST_EXECSPACE::memory_space >::run_test( 100000 ); } + { Impl::TestDeepCopy< Kokkos::HostSpace , TEST_EXECSPACE::memory_space >::run_test( 100000 ); } + { Impl::TestDeepCopy< TEST_EXECSPACE::memory_space , Kokkos::HostSpace >::run_test( 100000 ); } +} + +} diff --git a/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp b/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp index 1e1418fcbf..1261948f87 100644 --- a/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp +++ b/lib/kokkos/core/unit_test/TestDefaultDeviceTypeInit.hpp @@ -222,6 +222,14 @@ void check_correct_initialization( const Kokkos::InitArguments & argstruct ) { expected_nthreads = 1; } #endif + +#ifdef KOKKOS_ENABLE_HPX + // HPX uses all cores on machine by default. Skip this test. + if ( std::is_same< Kokkos::DefaultExecutionSpace, Kokkos::Experimental::HPX >::value || + std::is_same< Kokkos::DefaultHostExecutionSpace, Kokkos::Experimental::HPX >::value ) { + return; + } +#endif } int expected_numa = argstruct.num_numa; diff --git a/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp new file mode 100644 index 0000000000..31bda530a5 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp @@ -0,0 +1,904 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include +#include + +#include + +namespace Test { + + template + void impl_test_local_deepcopy_teampolicy_rank_1 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, lid, Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, lid, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_2 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_3 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_4 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_5 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_6 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_teampolicy_rank_7 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + Kokkos::deep_copy( A, 10.0 ); + + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + //Deep Copy + Kokkos::parallel_for( team_policy( N, Kokkos::AUTO ), KOKKOS_LAMBDA ( const member_type &teamMember ) { + int lid = teamMember.league_rank();// returns a number between 0 and N + auto subSrc = Kokkos::subview(A, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, lid, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(teamMember,subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_1 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, 1, i, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_2 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_3 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_4 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_5 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_6 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + auto subA = Kokkos::subview(A, 1, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::deep_copy( subA, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, 1, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i + void impl_test_local_deepcopy_rangepolicy_rank_7 (const int N) { + + // Allocate matrices on device. + ViewType A( "A", N, N, N, N, N, N, N, N ); + ViewType B( "B", N, N, N, N, N, N, N, N ); + + // Create host mirrors of device views. + typename ViewType::HostMirror h_A = Kokkos::create_mirror_view( A ); + typename ViewType::HostMirror h_B = Kokkos::create_mirror_view( B ); + + // Initialize A matrix. + Kokkos::deep_copy( A, 10.0 ); + + //Deep Copy + Kokkos::parallel_for( Kokkos::RangePolicy(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subSrc = Kokkos::subview(A, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + auto subDst = Kokkos::subview(B, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,subSrc); + }); + + Kokkos::deep_copy( h_A, A ); + Kokkos::deep_copy( h_B, B ); + + bool test = true; + for(size_t i=0; i(0,N), KOKKOS_LAMBDA ( const int& i ) { + auto subDst = Kokkos::subview(B, i, Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL(), Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(subDst,20.0); + }); + + Kokkos::deep_copy( h_B, B ); + + double sum_all = 0.0; + for(size_t i=0; i ViewType; + + { //Rank-1 + impl_test_local_deepcopy_teampolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_teampolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_teampolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_teampolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_teampolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_teampolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_teampolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_rangepolicy_layoutleft ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_rangepolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_rangepolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_rangepolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_rangepolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_rangepolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_rangepolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_rangepolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_teampolicy_layoutright ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_teampolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_teampolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_teampolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_teampolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_teampolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_teampolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_teampolicy_rank_7(8); + } +} +//------------------------------------------------------------------------------------------------------------- +TEST_F( TEST_CATEGORY , local_deepcopy_rangepolicy_layoutright ) +{ + typedef TEST_EXECSPACE ExecSpace; + typedef Kokkos::View ViewType; + + { //Rank-1 + impl_test_local_deepcopy_rangepolicy_rank_1(8); + } + { //Rank-2 + impl_test_local_deepcopy_rangepolicy_rank_2(8); + } + { //Rank-3 + impl_test_local_deepcopy_rangepolicy_rank_3(8); + } + { //Rank-4 + impl_test_local_deepcopy_rangepolicy_rank_4(8); + } + { //Rank-5 + impl_test_local_deepcopy_rangepolicy_rank_5(8); + } + { //Rank-6 + impl_test_local_deepcopy_rangepolicy_rank_6(8); + } + { //Rank-7 + impl_test_local_deepcopy_rangepolicy_rank_7(8); + } +} +#endif +#endif +} diff --git a/lib/kokkos/core/unit_test/TestMDRange.hpp b/lib/kokkos/core/unit_test/TestMDRange.hpp index a382a20700..cea89a4872 100644 --- a/lib/kokkos/core/unit_test/TestMDRange.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange.hpp @@ -351,6 +351,7 @@ struct TestMDRange_2D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 ); @@ -931,6 +932,7 @@ struct TestMDRange_3D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 ); @@ -1502,6 +1504,7 @@ struct TestMDRange_4D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 ); @@ -2089,6 +2092,7 @@ struct TestMDRange_5D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 ); @@ -2607,6 +2611,7 @@ struct TestMDRange_6D { Kokkos::Sum< value_type > reducer_view( sum_view ); parallel_reduce( range, functor, reducer_view); + Kokkos::fence(); sum = sum_view(); ASSERT_EQ( sum, 2 * N0 * N1 * N2 * N3 * N4 * N5 ); diff --git a/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp b/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp index efbb32e387..be744a7712 100644 --- a/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp +++ b/lib/kokkos/core/unit_test/TestPolicyConstruction.hpp @@ -476,6 +476,9 @@ private: void test_run_time_parameters_type() { int league_size = 131; int team_size = 4 < policy_t::execution_space::concurrency() ? 4 : policy_t::execution_space::concurrency(); +#ifdef KOKKOS_ENABLE_HPX + team_size = 1; +#endif int chunk_size = 4; int per_team_scratch = 1024; int per_thread_scratch = 16; diff --git a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp index fe947fe14e..293cc0ca59 100644 --- a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp +++ b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp @@ -453,15 +453,18 @@ struct TestReduceCombinatoricalInstantiation { result_view() = 0; CallParallelReduce( args..., result_view ); + Kokkos::fence(); ASSERT_EQ( expected_result, result_view() ); value = 0; CallParallelReduce( args..., Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryTraits >( &value ) ); + Kokkos::fence(); ASSERT_EQ( expected_result, value ); result_view() = 0; const Kokkos::View< double, Kokkos::HostSpace, Kokkos::MemoryTraits > result_view_const_um = result_view; CallParallelReduce( args..., result_view_const_um ); + Kokkos::fence(); ASSERT_EQ( expected_result, result_view_const_um() ); value = 0; @@ -526,18 +529,21 @@ struct TestReduceCombinatoricalInstantiation { h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarFinal< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarJoinFinal< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); h_r() = 0; Kokkos::deep_copy( result_view, h_r ); CallParallelReduce( args..., Test::ReduceCombinatorical::FunctorScalarJoinFinalInit< ISTEAM >( result_view ) ); + Kokkos::fence(); Kokkos::deep_copy( h_r, result_view ); ASSERT_EQ( expected_result, h_r() ); } diff --git a/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp index 4f65166e37..d55c5449bc 100644 --- a/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp +++ b/lib/kokkos/core/unit_test/TestReduceDeviceView.hpp @@ -30,7 +30,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor TestIsAsynchFunctor(atomic_test)); double time0 = timer.seconds(); timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence0 = timer.seconds(); Kokkos::deep_copy(result,0); timer.reset(); @@ -42,7 +42,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor double time1 = timer.seconds(); // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence1 = timer.seconds(); Kokkos::deep_copy(reducer_result,result); Kokkos::deep_copy(result,0); @@ -55,7 +55,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor double time2 = timer.seconds(); // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence2 = timer.seconds(); Kokkos::deep_copy(view_result,result); Kokkos::deep_copy(result,0); @@ -69,7 +69,7 @@ void test_reduce_device_view(int64_t N, PolicyType policy, ReduceFunctor functor // Check whether it was asyncronous timer.reset(); - ExecSpace::execution_space::fence(); + typename ExecSpace::execution_space().fence(); double time_fence3 = timer.seconds(); ASSERT_EQ(N,scalar_result); diff --git a/lib/kokkos/core/unit_test/TestReducers.hpp b/lib/kokkos/core/unit_test/TestReducers.hpp index 7270ea3375..1d77574412 100644 --- a/lib/kokkos/core/unit_test/TestReducers.hpp +++ b/lib/kokkos/core/unit_test/TestReducers.hpp @@ -319,6 +319,7 @@ struct TestReducers { sum_view() = init; Kokkos::Sum< Scalar > reducer_view( sum_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar sum_view_scalar = sum_view(); ASSERT_EQ( sum_view_scalar, reference_sum ); @@ -365,6 +366,7 @@ struct TestReducers { prod_view() = init; Kokkos::Prod< Scalar > reducer_view( prod_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar prod_view_scalar = prod_view(); ASSERT_EQ( prod_view_scalar, reference_prod ); @@ -412,6 +414,7 @@ struct TestReducers { min_view() = init; Kokkos::Min< Scalar > reducer_view( min_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar min_view_scalar = min_view(); ASSERT_EQ( min_view_scalar, reference_min ); @@ -459,6 +462,7 @@ struct TestReducers { max_view() = init; Kokkos::Max< Scalar > reducer_view( max_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar max_view_scalar = max_view(); ASSERT_EQ( max_view_scalar, reference_max ); @@ -517,6 +521,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > min_view( "View" ); Kokkos::MinLoc< Scalar, int > reducer_view( min_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type min_view_scalar = min_view(); ASSERT_EQ( min_view_scalar.val, reference_min ); @@ -577,6 +582,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > max_view( "View" ); Kokkos::MaxLoc< Scalar, int > reducer_view( max_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type max_view_scalar = max_view(); ASSERT_EQ( max_view_scalar.val, reference_max ); @@ -687,6 +693,7 @@ struct TestReducers { Kokkos::View< value_type, Kokkos::HostSpace > minmax_view( "View" ); Kokkos::MinMaxLoc< Scalar, int > reducer_view( minmax_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); value_type minmax_view_scalar = minmax_view(); ASSERT_EQ( minmax_view_scalar.min_val, reference_min ); @@ -740,6 +747,7 @@ struct TestReducers { band_view() = init; Kokkos::BAnd< Scalar > reducer_view( band_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar band_view_scalar = band_view(); ASSERT_EQ( band_view_scalar, reference_band ); @@ -786,6 +794,7 @@ struct TestReducers { bor_view() = init; Kokkos::BOr< Scalar > reducer_view( bor_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar bor_view_scalar = bor_view(); ASSERT_EQ( bor_view_scalar, reference_bor ); @@ -832,6 +841,7 @@ struct TestReducers { land_view() = init; Kokkos::LAnd< Scalar > reducer_view( land_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar land_view_scalar = land_view(); ASSERT_EQ( land_view_scalar, reference_land ); @@ -878,6 +888,7 @@ struct TestReducers { lor_view() = init; Kokkos::LOr< Scalar > reducer_view( lor_view ); Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, N ), f, reducer_view ); + Kokkos::fence(); Scalar lor_view_scalar = lor_view(); ASSERT_EQ( lor_view_scalar, reference_lor ); diff --git a/lib/kokkos/core/unit_test/TestScan.hpp b/lib/kokkos/core/unit_test/TestScan.hpp index e021ed09f5..eaebb254a7 100644 --- a/lib/kokkos/core/unit_test/TestScan.hpp +++ b/lib/kokkos/core/unit_test/TestScan.hpp @@ -96,6 +96,7 @@ struct TestScan { long long int total = 0; Kokkos::parallel_scan( N, *this, total ); + run_check( size_t( ( N+1 )*N/2 ), size_t( total ) ); check_error(); } @@ -109,6 +110,8 @@ struct TestScan { errors = errors_a; Kokkos::parallel_scan( exec_policy( Start , N ) , *this ); + Kokkos::fence(); + check_error(); } @@ -138,7 +141,7 @@ TEST_F( TEST_CATEGORY, scan ) TestScan< TEST_EXECSPACE >( 0 ); TestScan< TEST_EXECSPACE >( 100000 ); TestScan< TEST_EXECSPACE >( 10000000 ); - TEST_EXECSPACE::fence(); + TEST_EXECSPACE().fence(); } @@ -153,7 +156,7 @@ TEST_F( TEST_CATEGORY, scan ) TestScanFunctor( 1000000 ); TestScanFunctor( 10000000 ); - TEST_EXECSPACE::fence(); + TEST_EXECSPACE().fence(); }*/ diff --git a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp index 1a942b89c8..c475fe55dc 100644 --- a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp +++ b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp @@ -107,6 +107,8 @@ void test_shared_alloc() ASSERT_EQ( r[i], RecordMemS::get_record( r[i]->data() ) ); }); + Kokkos::fence(); + #ifdef KOKKOS_DEBUG // Sanity check for the whole set of allocation records to which this record belongs. RecordBase::is_sane( r[0] ); @@ -120,6 +122,8 @@ void test_shared_alloc() #endif } }); + + Kokkos::fence(); } { @@ -145,6 +149,8 @@ void test_shared_alloc() ASSERT_EQ( r[i], RecordMemS::get_record( r[i]->data() ) ); }); + Kokkos::fence(); + #ifdef KOKKOS_DEBUG RecordBase::is_sane( r[0] ); #endif @@ -157,6 +163,8 @@ void test_shared_alloc() } }); + Kokkos::fence(); + ASSERT_EQ( destroy_count, int( N ) ); } @@ -196,12 +204,14 @@ void test_shared_alloc() ASSERT_EQ( track.use_count(), 1 ); } - Kokkos::parallel_for( range, [=] ( size_t i ) { + Kokkos::parallel_for( range, [=] ( size_t ) { Tracker local_tracker; local_tracker.assign_allocated_record_to_uninitialized( rec ); ASSERT_GT( rec->use_count(), 1 ); }); + Kokkos::fence(); + ASSERT_EQ( rec->use_count(), 1 ); ASSERT_EQ( track.use_count(), 1 ); diff --git a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp index ac32a01fb8..361e8da9e1 100644 --- a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp +++ b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp @@ -47,11 +47,15 @@ #include #if defined( KOKKOS_ENABLE_TASKDAG ) #include +#include #include #include #include +//============================================================================== +// {{{1 + namespace TestTaskScheduler { namespace { @@ -72,29 +76,30 @@ long eval_fib( long n ) } -template< typename Space > +template< typename Scheduler > struct TestFib { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< long, Space > future_type; - typedef long value_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture< long, Scheduler >; + using value_type = long; - sched_type sched; future_type fib_m1; future_type fib_m2; const value_type n; KOKKOS_INLINE_FUNCTION - TestFib( const sched_type & arg_sched, const value_type arg_n ) - : sched( arg_sched ), fib_m1(), fib_m2(), n( arg_n ) {} + TestFib( const value_type arg_n ) + : fib_m1(), fib_m2(), n( arg_n ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type &, value_type & result ) + void operator()( typename sched_type::member_type & member, value_type & result ) { #if 0 printf( "\nTestFib(%ld) %d %d\n", n, int( !fib_m1.is_null() ), int( !fib_m2.is_null() ) ); #endif + auto& sched = member.scheduler(); + if ( n < 2 ) { result = n; } @@ -107,13 +112,13 @@ struct TestFib // path to completion. fib_m2 = Kokkos::task_spawn( Kokkos::TaskSingle( sched, Kokkos::TaskPriority::High ) - , TestFib( sched, n - 2 ) ); + , TestFib( n - 2 ) ); fib_m1 = Kokkos::task_spawn( Kokkos::TaskSingle( sched ) - , TestFib( sched, n - 1 ) ); + , TestFib( n - 1 ) ); - Kokkos::Future< Space > dep[] = { fib_m1, fib_m2 }; - Kokkos::Future< Space > fib_all = Kokkos::when_all( dep, 2 ); + Kokkos::BasicFuture dep[] = { fib_m1, fib_m2 }; + Kokkos::BasicFuture fib_all = sched.when_all( dep, 2 ); if ( !fib_m2.is_null() && !fib_m1.is_null() && !fib_all.is_null() ) { // High priority to retire this branch. @@ -123,9 +128,9 @@ struct TestFib #if 1 printf( "TestFib(%ld) insufficient memory alloc_capacity(%d) task_max(%d) task_accum(%ld)\n" , n - , sched.allocation_capacity() - , sched.allocated_task_count_max() - , sched.allocated_task_count_accum() + , 0 //sched.allocation_capacity() + , 0 //sched.allocated_task_count_max() + , 0l //sched.allocated_task_count_accum() ); #endif @@ -149,12 +154,18 @@ struct TestFib , std::min(size_t(MaxBlockSize),MemoryCapacity) , std::min(size_t(SuperBlockSize),MemoryCapacity) ); - future_type f = Kokkos::host_spawn( Kokkos::TaskSingle( root_sched ) - , TestFib( root_sched, i ) ); + { + future_type f = Kokkos::host_spawn( Kokkos::TaskSingle( root_sched ) + , TestFib( i ) ); + + Kokkos::wait( root_sched ); + + ASSERT_EQ( eval_fib( i ), f.get() ); + } + + ASSERT_EQ(root_sched.queue().allocation_count(), 0); - Kokkos::wait( root_sched ); - ASSERT_EQ( eval_fib( i ), f.get() ); #if 0 fprintf( stdout, "\nTestFib::run(%d) spawn_size(%d) when_all_size(%d) alloc_capacity(%d) task_max(%d) task_accum(%ld)\n" @@ -172,32 +183,36 @@ struct TestFib } // namespace TestTaskScheduler +// end TestFib }}}1 +//============================================================================== + //---------------------------------------------------------------------------- +//============================================================================== +// {{{1 + namespace TestTaskScheduler { -template< class Space > +template< class Scheduler > struct TestTaskDependence { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< Space > future_type; - typedef Kokkos::View< long, Space > accum_type; + typedef Scheduler sched_type; + typedef Kokkos::BasicFuture< void, Scheduler > future_type; + typedef Kokkos::View< long, typename sched_type::execution_space > accum_type; typedef void value_type; - sched_type m_sched; accum_type m_accum; long m_count; KOKKOS_INLINE_FUNCTION TestTaskDependence( long n - , const sched_type & arg_sched , const accum_type & arg_accum ) - : m_sched( arg_sched ) - , m_accum( arg_accum ) + : m_accum( arg_accum ) , m_count( n ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type & ) + void operator()( typename sched_type::member_type & member ) { + auto& sched = member.scheduler(); enum { CHUNK = 8 }; const int n = CHUNK < m_count ? CHUNK : m_count; @@ -206,14 +221,14 @@ struct TestTaskDependence { const int increment = ( m_count + n - 1 ) / n; future_type f = - m_sched.when_all( n , [this,increment]( int i ) { + sched.when_all( n , [this,&member,increment]( int i ) { const long inc = increment ; const long begin = i * inc ; const long count = begin + inc < m_count ? inc : m_count - begin ; return Kokkos::task_spawn - ( Kokkos::TaskSingle( m_sched ) - , TestTaskDependence( count, m_sched, m_accum ) ); + ( Kokkos::TaskSingle( member.scheduler() ) + , TestTaskDependence( count, m_accum ) ); }); m_count = 0; @@ -244,7 +259,7 @@ struct TestTaskDependence { typename accum_type::HostMirror host_accum = Kokkos::create_mirror_view( accum ); - Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskDependence( n, sched, accum ) ); + Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskDependence( n, accum ) ); Kokkos::wait( sched ); @@ -256,22 +271,25 @@ struct TestTaskDependence { } // namespace TestTaskScheduler +// end TestTaskDependence }}}1 +//============================================================================== + //---------------------------------------------------------------------------- namespace TestTaskScheduler { -template< class ExecSpace > +template< class Scheduler > struct TestTaskTeam { //enum { SPAN = 8 }; enum { SPAN = 33 }; //enum { SPAN = 1 }; typedef void value_type; - typedef Kokkos::TaskScheduler< ExecSpace > sched_type; - typedef Kokkos::Future< ExecSpace > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; + using ExecSpace = typename sched_type::execution_space; typedef Kokkos::View< long*, ExecSpace > view_type; - sched_type sched; future_type future; view_type parfor_result; @@ -281,14 +299,12 @@ struct TestTaskTeam { const long nvalue; KOKKOS_INLINE_FUNCTION - TestTaskTeam( const sched_type & arg_sched - , const view_type & arg_parfor_result + TestTaskTeam( const view_type & arg_parfor_result , const view_type & arg_parreduce_check , const view_type & arg_parscan_result , const view_type & arg_parscan_check , const long arg_nvalue ) - : sched( arg_sched ) - , future() + : future() , parfor_result( arg_parfor_result ) , parreduce_check( arg_parreduce_check ) , parscan_result( arg_parscan_result ) @@ -298,21 +314,22 @@ struct TestTaskTeam { KOKKOS_INLINE_FUNCTION void operator()( typename sched_type::member_type & member ) { + auto& sched = member.scheduler(); const long end = nvalue + 1; + // begin = max(end - SPAN, 0); const long begin = 0 < end - SPAN ? end - SPAN : 0; if ( 0 < begin && future.is_null() ) { if ( member.team_rank() == 0 ) { future = Kokkos::task_spawn( Kokkos::TaskTeam( sched ) - , TestTaskTeam( sched - , parfor_result + , TestTaskTeam( parfor_result , parreduce_check , parscan_result , parscan_check , begin - 1 ) ); - #ifndef __HCC_ACCELERATOR__ + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) assert( !future.is_null() ); #endif @@ -449,8 +466,7 @@ struct TestTaskTeam { host_parscan_check = Kokkos::create_mirror_view( root_parscan_check ); future_type f = Kokkos::host_spawn( Kokkos::TaskTeam( root_sched ) - , TestTaskTeam( root_sched - , root_parfor_result + , TestTaskTeam( root_parfor_result , root_parreduce_check , root_parscan_result , root_parscan_check @@ -492,27 +508,25 @@ struct TestTaskTeam { } }; -template< class ExecSpace > +template< class Scheduler > struct TestTaskTeamValue { enum { SPAN = 8 }; typedef long value_type; - typedef Kokkos::TaskScheduler< ExecSpace > sched_type; - typedef Kokkos::Future< value_type, ExecSpace > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture< value_type, sched_type >; + using ExecSpace = typename sched_type::execution_space; typedef Kokkos::View< long*, ExecSpace > view_type; - sched_type sched; future_type future; view_type result; const long nvalue; KOKKOS_INLINE_FUNCTION - TestTaskTeamValue( const sched_type & arg_sched - , const view_type & arg_result + TestTaskTeamValue( const view_type & arg_result , const long arg_nvalue ) - : sched( arg_sched ) - , future() + : future() , result( arg_result ) , nvalue( arg_nvalue ) {} @@ -523,12 +537,16 @@ struct TestTaskTeamValue { const long end = nvalue + 1; const long begin = 0 < end - SPAN ? end - SPAN : 0; + auto& sched = member.scheduler(); + if ( 0 < begin && future.is_null() ) { if ( member.team_rank() == 0 ) { - future = sched.task_spawn( TestTaskTeamValue( sched, result, begin - 1 ) + future = sched.task_spawn( TestTaskTeamValue( result, begin - 1 ) , Kokkos::TaskTeam ); + #if !defined(__HCC_ACCELERATOR__) && !defined(__CUDA_ARCH__) assert( !future.is_null() ); + #endif sched.respawn( this , future ); } @@ -565,7 +583,7 @@ struct TestTaskTeamValue { typename view_type::HostMirror host_result = Kokkos::create_mirror_view( root_result ); - future_type fv = root_sched.host_spawn( TestTaskTeamValue( root_sched, root_result, n ) + future_type fv = root_sched.host_spawn( TestTaskTeamValue( root_result, n ) , Kokkos::TaskTeam ); Kokkos::wait( root_sched ); @@ -594,31 +612,30 @@ struct TestTaskTeamValue { namespace TestTaskScheduler { -template< class Space > +template< class Scheduler > struct TestTaskSpawnWithPool { - typedef Kokkos::TaskScheduler< Space > sched_type; - typedef Kokkos::Future< Space > future_type; + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; typedef void value_type; + using Space = typename sched_type::execution_space; - sched_type m_sched ; int m_count ; Kokkos::MemoryPool m_pool ; KOKKOS_INLINE_FUNCTION - TestTaskSpawnWithPool( const sched_type & arg_sched - , const int & arg_count - , const Kokkos::MemoryPool & arg_pool - ) - : m_sched( arg_sched ) - , m_count( arg_count ) + TestTaskSpawnWithPool( + const int & arg_count, + const Kokkos::MemoryPool & arg_pool + ) + : m_count( arg_count ) , m_pool( arg_pool ) {} KOKKOS_INLINE_FUNCTION - void operator()( typename sched_type::member_type & ) + void operator()( typename sched_type::member_type & member ) { if ( m_count ) { - Kokkos::task_spawn( Kokkos::TaskSingle( m_sched ) , TestTaskSpawnWithPool( m_sched , m_count - 1, m_pool ) ); + Kokkos::task_spawn( Kokkos::TaskSingle( member.scheduler() ) , TestTaskSpawnWithPool( m_count - 1, m_pool ) ); } } @@ -639,7 +656,7 @@ struct TestTaskSpawnWithPool { using other_memory_space = typename Space::memory_space; Kokkos::MemoryPool pool(other_memory_space(), 10000, 100, 200, 1000); - auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskSpawnWithPool( sched, 3, pool ) ); + auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestTaskSpawnWithPool( 3, pool ) ); Kokkos::wait( sched ); } @@ -647,36 +664,307 @@ struct TestTaskSpawnWithPool { } -namespace Test { +//---------------------------------------------------------------------------- -TEST_F( TEST_CATEGORY, task_fib ) -{ - const int N = 27 ; - for ( int i = 0; i < N; ++i ) { - TestTaskScheduler::TestFib< TEST_EXECSPACE >::run( i , ( i + 1 ) * ( i + 1 ) * 2000 ); +namespace TestTaskScheduler { + +template< class Scheduler > +struct TestTaskCtorsDevice { + using sched_type = Scheduler; + using future_type = Kokkos::BasicFuture; + using value_type = void; + using Space = typename sched_type::execution_space; + + int m_count; + + KOKKOS_INLINE_FUNCTION + TestTaskCtorsDevice(const int & arg_count) : m_count(arg_count) { } + + KOKKOS_INLINE_FUNCTION + void operator()(typename sched_type::member_type& member ) + { + // Note: Default construction on the device is not allowed + if(m_count == 4) { + Kokkos::task_spawn( + Kokkos::TaskSingle(member.scheduler()), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 3) { + sched_type s = member.scheduler(); // move construct + s = member.scheduler(); // move assignment + Kokkos::task_spawn( + Kokkos::TaskSingle(s), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 2) { + sched_type s3 = member.scheduler(); // move construct from member.scheduler(); + Kokkos::task_spawn( + Kokkos::TaskSingle(s3), + TestTaskCtorsDevice(m_count - 1) + ); + } + else if(m_count == 1) { + sched_type s = member.scheduler(); // move construct from member.scheduler(); + sched_type s2 = s; // copy construct from s + Kokkos::task_spawn( + Kokkos::TaskSingle(s2), + TestTaskCtorsDevice(m_count - 1) + ); + } } -} -TEST_F( TEST_CATEGORY, task_depend ) -{ - for ( int i = 0; i < 25; ++i ) { - TestTaskScheduler::TestTaskDependence< TEST_EXECSPACE >::run( i ); + static void run() + { + using memory_space = typename sched_type::memory_space; + + enum { MemoryCapacity = 16000 }; + enum { MinBlockSize = 64 }; + enum { MaxBlockSize = 1024 }; + enum { SuperBlockSize = 4096 }; + + sched_type sched( + memory_space(), MemoryCapacity, MinBlockSize, MaxBlockSize, SuperBlockSize + ); + + auto f = Kokkos::host_spawn( + Kokkos::TaskSingle(sched), + TestTaskCtorsDevice(4) + ); + + Kokkos::wait(sched); + + // TODO assertions and sanity checks + } -} - -TEST_F( TEST_CATEGORY, task_team ) -{ - TestTaskScheduler::TestTaskTeam< TEST_EXECSPACE >::run( 1000 ); - //TestTaskScheduler::TestTaskTeamValue< TEST_EXECSPACE >::run( 1000 ); // Put back after testing. -} - -TEST_F( TEST_CATEGORY, task_with_mempool ) -{ - TestTaskScheduler::TestTaskSpawnWithPool< TEST_EXECSPACE >::run(); -} +}; } +//---------------------------------------------------------------------------- + + +namespace TestTaskScheduler { + +template +struct TestMultipleDependence { + + using sched_type = Scheduler; + using future_bool = Kokkos::BasicFuture; + using future_int = Kokkos::BasicFuture; + using value_type = bool; + using execution_space = typename sched_type::execution_space; + + enum : int { NPerDepth = 6 }; + enum : int { NFanout = 3 }; + + // xlC doesn't like incomplete aggregate constructors, so we have do do this manually: + KOKKOS_INLINE_FUNCTION + TestMultipleDependence(int depth, int max_depth) + : m_depth(depth), + m_max_depth(max_depth), + m_dep() + { + // gcc 4.8 has an internal compile error when I give the initializer in the class, so I have do do it here + for(int i = 0; i < NPerDepth; ++i) { + m_result_futures[i] = future_bool(); + } + } + + // xlC doesn't like incomplete aggregate constructors, so we have do do this manually: + KOKKOS_INLINE_FUNCTION + TestMultipleDependence(int depth, int max_depth, future_int dep) + : m_depth(depth), + m_max_depth(max_depth), + m_dep(dep) + { + // gcc 4.8 has an internal compile error when I give the initializer in the class, so I have do do it here + for(int i = 0; i < NPerDepth; ++i) { + m_result_futures[i] = future_bool(); + } + } + + int m_depth; + int m_max_depth; + future_int m_dep; + future_bool m_result_futures[NPerDepth]; + + + struct TestCheckReady { + future_int m_dep; + using value_type = bool; + KOKKOS_INLINE_FUNCTION + void operator()(typename Scheduler::member_type&, bool& value) { + // if it was "transiently" ready, this could be false even if we made it a dependence of this task + value = m_dep.is_ready(); + return; + } + }; + + + struct TestComputeValue { + using value_type = int; + KOKKOS_INLINE_FUNCTION + void operator()(typename Scheduler::member_type&, int& result) { + double value = 0; + // keep this one busy for a while + for(int i = 0; i < 10000; ++i) { + value += i * i / 7.138 / value; + } + // Do something irrelevant + result = int(value) << 2; + return; + } + }; + + + KOKKOS_INLINE_FUNCTION + void operator()(typename sched_type::member_type & member, bool& value) + { + if(m_result_futures[0].is_null()) { + if (m_depth == 0) { + // Spawn one expensive task at the root + m_dep = Kokkos::task_spawn(Kokkos::TaskSingle(member.scheduler()), TestComputeValue{}); + } + + // Then check for it to be ready in a whole bunch of other tasks that race + int n_checkers = NPerDepth; + if(m_depth < m_max_depth) { + n_checkers -= NFanout; + for(int i = n_checkers; i < NPerDepth; ++i) { + m_result_futures[i] = Kokkos::task_spawn(Kokkos::TaskSingle(member.scheduler()), + TestMultipleDependence(m_depth + 1, m_max_depth, m_dep) + ); + } + } + + for(int i = 0; i < n_checkers; ++i) { + m_result_futures[i] = member.scheduler().spawn(Kokkos::TaskSingle(m_dep), TestCheckReady{m_dep}); + } + auto done = member.scheduler().when_all(m_result_futures, NPerDepth); + Kokkos::respawn(this, done); + + return; + } + else { + value = true; + for(int i = 0; i < NPerDepth; ++i) { + value = value && !m_result_futures[i].is_null(); + if(value) { + value = value && m_result_futures[i].get(); + } + } + return; + } + } + + static void run(int depth) + { + typedef typename sched_type::memory_space memory_space; + + enum { MemoryCapacity = 1 << 30 }; + enum { MinBlockSize = 64 }; + enum { MaxBlockSize = 1024 }; + enum { SuperBlockSize = 4096 }; + + sched_type sched( memory_space() + , MemoryCapacity + , MinBlockSize + , MaxBlockSize + , SuperBlockSize ); + + auto f = Kokkos::host_spawn( Kokkos::TaskSingle( sched ), TestMultipleDependence( 0, depth ) ); + + Kokkos::wait( sched ); + + ASSERT_TRUE( f.get() ); + + } +}; + +} + +//---------------------------------------------------------------------------- + +#define KOKKOS_PP_CAT_IMPL(x, y) x ## y +#define KOKKOS_TEST_WITH_SUFFIX(x, y) KOKKOS_PP_CAT_IMPL(x, y) + +#define TEST_SCHEDULER_SUFFIX _deprecated +#define TEST_SCHEDULER Kokkos::DeprecatedTaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _deprecated_multiple +#define TEST_SCHEDULER Kokkos::DeprecatedTaskSchedulerMultiple +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + + +#define TEST_SCHEDULER_SUFFIX _single +#define TEST_SCHEDULER Kokkos::TaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _multiple +#define TEST_SCHEDULER Kokkos::TaskSchedulerMultiple +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + + +#define TEST_SCHEDULER_SUFFIX _chase_lev +#define TEST_SCHEDULER Kokkos::ChaseLevTaskScheduler +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#if 0 +#define TEST_SCHEDULER_SUFFIX _fixed_mempool +#define TEST_SCHEDULER \ + Kokkos::SimpleTaskScheduler< \ + TEST_EXECSPACE, \ + Kokkos::Impl::SingleTaskQueue< \ + TEST_EXECSPACE, \ + Kokkos::Impl::default_tasking_memory_space_for_execution_space_t, \ + Kokkos::Impl::TaskQueueTraitsLockBased, \ + Kokkos::Impl::FixedBlockSizeMemoryPool< \ + Kokkos::Device>, \ + 128, \ + 16 \ + > \ + > \ + > +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX + +#define TEST_SCHEDULER_SUFFIX _fixed_mempool_multiple +#define TEST_SCHEDULER \ + Kokkos::SimpleTaskScheduler< \ + TEST_EXECSPACE, \ + Kokkos::Impl::MultipleTaskQueue< \ + TEST_EXECSPACE, \ + Kokkos::Impl::default_tasking_memory_space_for_execution_space_t, \ + Kokkos::Impl::TaskQueueTraitsLockBased, \ + Kokkos::Impl::FixedBlockSizeMemoryPool< \ + Kokkos::Device>, \ + 128, \ + 16 \ + > \ + > \ + > +#include "TestTaskScheduler_single.hpp" +#undef TEST_SCHEDULER +#undef TEST_SCHEDULER_SUFFIX +#endif + +#undef KOKKOS_TEST_WITH_SUFFIX +#undef KOKKOS_PP_CAT_IMPL + #endif // #if defined( KOKKOS_ENABLE_TASKDAG ) #endif // #ifndef KOKKOS_UNITTEST_TASKSCHEDULER_HPP diff --git a/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp b/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp new file mode 100644 index 0000000000..6ac9a6d740 --- /dev/null +++ b/lib/kokkos/core/unit_test/TestTaskScheduler_single.hpp @@ -0,0 +1,92 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +namespace Test { + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_fib, TEST_SCHEDULER_SUFFIX) ) +{ + const int N = 27 ; + for ( int i = 0; i < N; ++i ) { + TestTaskScheduler::TestFib< TEST_SCHEDULER >::run( i , ( i + 1 ) * ( i + 1 ) * 64000 ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_depend, TEST_SCHEDULER_SUFFIX) ) +{ + for ( int i = 0; i < 25; ++i ) { + TestTaskScheduler::TestTaskDependence< TEST_SCHEDULER >::run( i ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_team, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskTeam< TEST_SCHEDULER >::run( 1000 ); + //TestTaskScheduler::TestTaskTeamValue< TEST_EXECSPACE >::run( 1000 ); // Put back after testing. +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_with_mempool, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskSpawnWithPool::run(); +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_multiple_depend, TEST_SCHEDULER_SUFFIX) ) +{ + for ( int i = 2; i < 6; ++i ) { + TestTaskScheduler::TestMultipleDependence::run( i ); + } +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_scheduler_ctors, TEST_SCHEDULER_SUFFIX) ) +{ + TEST_SCHEDULER sched; + TEST_SCHEDULER sched2 = sched; + sched = sched2; +} + +TEST_F( TEST_CATEGORY, KOKKOS_TEST_WITH_SUFFIX(task_scheduer_ctors_device, TEST_SCHEDULER_SUFFIX) ) +{ + TestTaskScheduler::TestTaskCtorsDevice::run(); +} + + +} // end namespace Test \ No newline at end of file diff --git a/lib/kokkos/core/unit_test/TestTeam.hpp b/lib/kokkos/core/unit_test/TestTeam.hpp index 487a4d581c..5f325eb905 100644 --- a/lib/kokkos/core/unit_test/TestTeam.hpp +++ b/lib/kokkos/core/unit_test/TestTeam.hpp @@ -72,6 +72,7 @@ struct TestTeamPolicy { const int tid = member.team_rank() + member.team_size() * member.league_rank(); m_flags( member.team_rank(), member.league_rank() ) = tid; + static_assert((std::is_same::value),"TeamMember::execution_space is not the same as TeamPolicy<>::execution_space"); } KOKKOS_INLINE_FUNCTION @@ -265,7 +266,7 @@ public: Kokkos::parallel_reduce( team_exec, functor_type( nwork ), tmp ); } - execution_space::fence(); + execution_space().fence(); for ( unsigned i = 0; i < Repeat; ++i ) { for ( unsigned j = 0; j < Count; ++j ) { @@ -391,7 +392,7 @@ public: Kokkos::deep_copy( functor.accum, total ); Kokkos::parallel_reduce( team_exec, functor, result_type( & error ) ); - DeviceType::fence(); + DeviceType().fence(); Kokkos::deep_copy( accum, functor.accum ); Kokkos::deep_copy( total, functor.total ); @@ -400,7 +401,7 @@ public: ASSERT_EQ( total, accum ); } - execution_space::fence(); + execution_space().fence(); } }; @@ -495,6 +496,7 @@ struct TestSharedTeam { typename Functor::value_type error_count = 0; Kokkos::parallel_reduce( team_exec, Functor(), result_type( & error_count ) ); + Kokkos::fence(); ASSERT_EQ( error_count, 0 ); } @@ -569,6 +571,8 @@ struct TestLambdaSharedTeam { } }, result_type( & error_count ) ); + Kokkos::fence(); + ASSERT_EQ( error_count, 0 ); } }; @@ -679,6 +683,7 @@ struct TestScratchTeam { Kokkos::parallel_reduce( team_exec.set_scratch_size( 1, Kokkos::PerTeam( team_scratch_size ), Kokkos::PerThread( thread_scratch_size ) ), Functor(), result_type( & error_count ) ); + Kokkos::fence(); ASSERT_EQ( error_count, 0 ); } }; @@ -822,7 +827,6 @@ struct ClassNoShmemSizeFunction { Kokkos::TeamPolicy< TagReduce, ExecSpace, ScheduleType > policy( 10, team_size, 16 ); Kokkos::parallel_reduce( policy.set_scratch_size( 0, Kokkos::PerTeam( per_team0 ), Kokkos::PerThread( per_thread0 ) ).set_scratch_size( 1, Kokkos::PerTeam( per_team1 ), Kokkos::PerThread( per_thread1 ) ), *this, error ); - Kokkos::fence(); ASSERT_EQ( error, 0 ); } @@ -877,7 +881,6 @@ struct ClassWithShmemSizeFunction { Kokkos::parallel_reduce( policy.set_scratch_size( 1, Kokkos::PerTeam( per_team1 ), Kokkos::PerThread( per_thread1 ) ), *this, error ); - Kokkos::fence(); ASSERT_EQ( error, 0 ); } @@ -929,7 +932,6 @@ void test_team_mulit_level_scratch_test_lambda() { count += test_team_mulit_level_scratch_loop_body< ExecSpace >( team ); }, error ); ASSERT_EQ( error, 0 ); - Kokkos::fence(); #endif #endif } diff --git a/lib/kokkos/core/unit_test/TestTeamVector.hpp b/lib/kokkos/core/unit_test/TestTeamVector.hpp index 498d156db3..45433012f9 100644 --- a/lib/kokkos/core/unit_test/TestTeamVector.hpp +++ b/lib/kokkos/core/unit_test/TestTeamVector.hpp @@ -290,17 +290,23 @@ struct functor_team_reduce { functor_team_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; - unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { Scalar value = Scalar(); + shared_scalar_t shared_value(team.team_scratch(0),1); Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) { val += i - team.league_rank() + team.league_size() + team.team_size(); }, value ); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, shared_value(0) ); team.team_barrier(); @@ -314,11 +320,20 @@ struct functor_team_reduce { if ( test != value ) { if ( team.league_rank() == 0 ) { - printf( "FAILED team_parallel_reduce %i %i %f %f %lu\n", + printf( "FAILED team_parallel_reduce %i %i %lf %lf %lu\n", team.league_rank(), team.team_rank(), static_cast( test ), static_cast( value ), sizeof( Scalar ) ); } + flag() = 1; + } + if ( test != shared_value(0) ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED team_parallel_reduce with shared result %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ), sizeof( Scalar ) ); + } + flag() = 1; } }); @@ -335,12 +350,13 @@ struct functor_team_reduce_reducer { functor_team_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} typedef typename ExecutionSpace::scratch_memory_space shmem_space; - typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; - unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(team_size*13); } + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } KOKKOS_INLINE_FUNCTION void operator()( typename policy_type::member_type team ) const { Scalar value = 0; + shared_scalar_t shared_value(team.team_scratch(0),1); Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) { @@ -348,6 +364,13 @@ struct functor_team_reduce_reducer { }, Kokkos::Sum(value) ); + + Kokkos::parallel_reduce( Kokkos::TeamThreadRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(shared_value(0)) + ); team.team_barrier(); @@ -360,12 +383,19 @@ struct functor_team_reduce_reducer { } if ( test != value ) { - printf( "FAILED team_vector_parallel_reduce_reducer %i %i %f %f\n", + printf( "FAILED team_vector_parallel_reduce_reducer %i %i %lf %lf\n", team.league_rank(), team.team_rank(), static_cast( test ), static_cast( value ) ); flag() = 1; } + if ( test != shared_value(0) ) { + printf( "FAILED team_vector_parallel_reduce_reducer shared value %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ) ); + + flag() = 1; + } }); } }; @@ -823,7 +853,6 @@ namespace Test { // ( modified from kokkos-tutorials/GTC2016/Exercises/ThreeLevelPar ) #if ( ! defined( KOKKOS_ENABLE_CUDA ) ) || (defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && (8000 <= CUDA_VERSION)) - template< typename ScalarType, class DeviceType > class TestTripleNestedReduce { @@ -843,6 +872,14 @@ public: if( team_size > size_type(DeviceType::execution_space::concurrency())) team_size = size_type(DeviceType::execution_space::concurrency()); +#ifdef KOKKOS_ENABLE_HPX + team_size = 1; + if (!std::is_same::value) + { + team_size = 1; + } +#endif + //typedef Kokkos::LayoutLeft Layout; typedef Kokkos::LayoutRight Layout; @@ -962,6 +999,8 @@ TEST_F( TEST_CATEGORY, triple_nested_parallelism ) } #endif TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 16 ); + TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 33 ); + TestTripleNestedReduce< double, TEST_EXECSPACE >( 8192, 2048, 16, 19 ); #ifdef KOKKOS_ENABLE_ROCM // ROCm doesn't support team sizes not powers of two if (!std::is_same::value) #endif diff --git a/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp new file mode 100644 index 0000000000..86c8dab3ff --- /dev/null +++ b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp @@ -0,0 +1,464 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 2.0 +// Copyright (2014) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include +#include +#include + +namespace TestTeamVectorRange { + +struct my_complex { + double re, im; + int dummy; + + KOKKOS_INLINE_FUNCTION + my_complex() { + re = 0.0; + im = 0.0; + dummy = 0; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const volatile my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + volatile my_complex & operator=( const my_complex & src ) volatile { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + volatile my_complex & operator=( const volatile my_complex & src ) volatile { + re = src.re; + im = src.im; + dummy = src.dummy; + return *this ; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const volatile my_complex & src ) { + re = src.re; + im = src.im; + dummy = src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex( const double & val ) { + re = val; + im = 0.0; + dummy = 0; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator+=( const my_complex & src ) { + re += src.re; + im += src.im; + dummy += src.dummy; + return *this; + } + + KOKKOS_INLINE_FUNCTION + void operator+=( const volatile my_complex & src ) volatile { + re += src.re; + im += src.im; + dummy += src.dummy; + } + + KOKKOS_INLINE_FUNCTION + my_complex operator +( const my_complex & src ) { + my_complex tmp = *this; + tmp.re += src.re; + tmp.im += src.im; + tmp.dummy += src.dummy; + return tmp; + } + + KOKKOS_INLINE_FUNCTION + my_complex operator+( const volatile my_complex & src ) volatile { + my_complex tmp = *this; + tmp.re += src.re; + tmp.im += src.im; + tmp.dummy += src.dummy; + return tmp; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator*=( const my_complex & src ) { + double re_tmp = re * src.re - im * src.im; + double im_tmp = re * src.im + im * src.re; + re = re_tmp; + im = im_tmp; + dummy *= src.dummy; + return *this; + } + + KOKKOS_INLINE_FUNCTION + void operator*=( const volatile my_complex & src ) volatile { + double re_tmp = re * src.re - im * src.im; + double im_tmp = re * src.im + im * src.re; + re = re_tmp; + im = im_tmp; + dummy *= src.dummy; + } + + KOKKOS_INLINE_FUNCTION + bool operator==( const my_complex & src ) { + return ( re == src.re ) && ( im == src.im ) && ( dummy == src.dummy ); + } + + KOKKOS_INLINE_FUNCTION + bool operator!=( const my_complex & src ) { + return ( re != src.re ) || ( im != src.im ) || ( dummy != src.dummy ); + } + + KOKKOS_INLINE_FUNCTION + bool operator!=( const double & val ) { + return ( re != val ) || ( im != 0 ) || ( dummy != 0 ); + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const int & val ) { + re = val; + im = 0.0; + dummy = 0; + return *this; + } + + KOKKOS_INLINE_FUNCTION + my_complex & operator=( const double & val ) { + re = val; + im = 0.0; + dummy = 0; + return *this; + } + + KOKKOS_INLINE_FUNCTION + operator double() { + return re; + } +}; +} + +namespace Kokkos { +template<> +struct reduction_identity { + typedef reduction_identity t_red_ident; + KOKKOS_FORCEINLINE_FUNCTION static TestTeamVectorRange::my_complex sum() + {return TestTeamVectorRange::my_complex(t_red_ident::sum());} + KOKKOS_FORCEINLINE_FUNCTION static TestTeamVectorRange::my_complex prod() + {return TestTeamVectorRange::my_complex(t_red_ident::prod());} +}; +} + +namespace TestTeamVectorRange { + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_for { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_for( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_int; + unsigned team_shmem_size( int team_size ) const { return shared_int::shmem_size(131); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + typedef typename shmem_space::size_type size_type; + const size_type shmemSize = 131; + shared_int values = shared_int( team.team_shmem(), shmemSize ); + + if ( values.data() == nullptr || values.extent(0) < shmemSize ) { + printf( "FAILED to allocate shared memory of size %u\n", + static_cast( shmemSize ) ); + } + else { + // Initialize shared memory. + Kokkos::parallel_for( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i ) { + values( i ) = 0; + }); + // Wait for all memory to be written. + team.team_barrier(); + + // Accumulate value into per thread shared memory. + // This is non blocking. + Kokkos::parallel_for( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i ) + { + values( i ) += i - team.league_rank() + team.league_size() + team.team_size(); + }); + + // Wait for all memory to be written. + team.team_barrier(); + + // One thread per team executes the comparison. + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + Scalar value = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + for ( int i = 0; i < 131; ++i ) { + value += values( i ); + } + + if ( test != value ) { + printf ( "FAILED teamvector_parallel_for %i %i %f %f\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ) ); + flag() = 1; + } + }); + } + } +}; + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_reduce { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_reduce( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + Scalar value = Scalar(); + shared_scalar_t shared_value(team.team_scratch(0),1); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, shared_value(0) ); + + team.team_barrier(); + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, value ); + +// Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) +// { +// val += i - team.league_rank() + team.league_size() + team.team_size(); +// }, shared_value(0) ); + + team.team_barrier(); + + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + if ( test != value ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED teamvector_parallel_reduce %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ), sizeof( Scalar ) ); + } + + flag() = 1; + } + if ( test != shared_value(0) ) { + if ( team.league_rank() == 0 ) { + printf( "FAILED teamvector_parallel_reduce with shared result %i %i %lf %lf %lu\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ), sizeof( Scalar ) ); + } + + flag() = 1; + } + }); + } +}; + +template< typename Scalar, class ExecutionSpace > +struct functor_teamvector_reduce_reducer { + typedef Kokkos::TeamPolicy< ExecutionSpace > policy_type; + typedef ExecutionSpace execution_space; + + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag; + + functor_teamvector_reduce_reducer( Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > flag_ ) : flag( flag_ ) {} + + typedef typename ExecutionSpace::scratch_memory_space shmem_space; + typedef Kokkos::View< Scalar*, shmem_space, Kokkos::MemoryUnmanaged > shared_scalar_t; + unsigned team_shmem_size( int team_size ) const { return shared_scalar_t::shmem_size(team_size*13); } + + KOKKOS_INLINE_FUNCTION + void operator()( typename policy_type::member_type team ) const { + Scalar value = 0; + shared_scalar_t shared_value(team.team_scratch(0),1); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(value) + ); + + Kokkos::parallel_reduce( Kokkos::TeamVectorRange( team, 131 ), [&] ( int i, Scalar & val ) + { + val += i - team.league_rank() + team.league_size() + team.team_size(); + }, + Kokkos::Sum(shared_value(0)) + ); + + team.team_barrier(); + + Kokkos::single( Kokkos::PerTeam( team ), [&] () + { + Scalar test = 0; + + for ( int i = 0; i < 131; ++i ) { + test += i - team.league_rank() + team.league_size() + team.team_size(); + } + + if ( test != value ) { + printf( "FAILED teamvector_parallel_reduce_reducer %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( value ) ); + + flag() = 1; + } + if ( test != shared_value(0) ) { + printf( "FAILED teamvector_parallel_reduce_reducer shared value %i %i %lf %lf\n", + team.league_rank(), team.team_rank(), + static_cast( test ), static_cast( shared_value(0) ) ); + + flag() = 1; + } + }); + } +}; + +template< typename Scalar, class ExecutionSpace > +bool test_scalar( int nteams, int team_size, int test ) { + Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace > d_flag( "flag" ); + typename Kokkos::View< int, Kokkos::LayoutLeft, ExecutionSpace >::HostMirror h_flag( "h_flag" ); + h_flag() = 0; + Kokkos::deep_copy( d_flag, h_flag ); + + if ( test == 0 ) { + Kokkos::parallel_for( "Test::TeamVectorFor", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_for< Scalar, ExecutionSpace >( d_flag ) ); + } + else if ( test == 1 ) { + Kokkos::parallel_for( "Test::TeamVectorReduce", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_reduce< Scalar, ExecutionSpace >( d_flag ) ); + } + else if ( test == 2 ) { + Kokkos::parallel_for( "Test::TeamVectorReduceReducer", Kokkos::TeamPolicy< ExecutionSpace >( nteams, team_size, 8 ), + functor_teamvector_reduce_reducer< Scalar, ExecutionSpace >( d_flag ) ); + } + + Kokkos::deep_copy( h_flag, d_flag ); + + return ( h_flag() == 0 ); +} + +template< class ExecutionSpace > +bool Test( int test ) { + bool passed = true; + + int team_size = 33; + if( team_size > int(ExecutionSpace::concurrency())) + team_size = int(ExecutionSpace::concurrency()); + passed = passed && test_scalar< int, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< long long int, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< float, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< double, ExecutionSpace >( 317, team_size, test ); + passed = passed && test_scalar< my_complex, ExecutionSpace >( 317, team_size, test ); + + return passed; +} + +} // namespace TestTeamVectorRange + +namespace Test { + +TEST_F( TEST_CATEGORY, team_teamvector_range ) +{ + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 0 ) ) ); + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 1 ) ) ); + ASSERT_TRUE( ( TestTeamVectorRange::Test< TEST_EXECSPACE >( 2 ) ) ); +} +} diff --git a/lib/kokkos/core/unit_test/TestTile.hpp b/lib/kokkos/core/unit_test/TestTile.hpp index 704c7f9940..a58755dc9b 100644 --- a/lib/kokkos/core/unit_test/TestTile.hpp +++ b/lib/kokkos/core/unit_test/TestTile.hpp @@ -42,6 +42,9 @@ #ifndef TEST_TILE_HPP #define TEST_TILE_HPP +//======================================================================== +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + #include #include @@ -166,4 +169,8 @@ TEST_F( TEST_CATEGORY, tile_layout ) } } + +#endif // KOKKOS_ENABLE_DEPRECATED_CODE +//===================================================================== + #endif //TEST_TILE_HPP diff --git a/lib/kokkos/core/unit_test/TestViewAPI.hpp b/lib/kokkos/core/unit_test/TestViewAPI.hpp index 2ebd48cd61..e332bebff0 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI.hpp @@ -827,6 +827,48 @@ struct TestViewMirror ASSERT_EQ( a_org(5), a_h3(5) ); } + template< class MemoryTraits, class Space > + struct CopyUnInit { + typedef typename Kokkos::Impl::MirrorViewType::view_type mirror_view_type; + + mirror_view_type a_d; + + KOKKOS_INLINE_FUNCTION + CopyUnInit( mirror_view_type & a_d_ ) : a_d(a_d_) { + } + + KOKKOS_INLINE_FUNCTION + void operator() (const typename Space::size_type i) const { + a_d(i) = (double)(10-i); + } + + }; + + template< class MemoryTraits > + void static test_mirror_no_initialize() { + Kokkos::View< double*, Layout, Kokkos::HostSpace > a_org( "A", 10 ); + Kokkos::View< double*, Layout, Kokkos::HostSpace, MemoryTraits > a_h = a_org; + + for (int i = 0; i < 10; i++) + { + a_h(i) = (double)i; + } + auto a_d = Kokkos::create_mirror_view( DeviceType(), a_h, Kokkos::WithoutInitializing ); + + int equal_ptr_h_d = (a_h.data() == a_d.data()) ? 1 : 0; + constexpr int is_same_memspace = std::is_same< Kokkos::HostSpace, typename DeviceType::memory_space >::value ? 1 : 0; + + ASSERT_EQ( equal_ptr_h_d, is_same_memspace); + + Kokkos::parallel_for( Kokkos::RangePolicy< typename DeviceType::execution_space >( 0, int(10)), CopyUnInit< MemoryTraits, DeviceType >(a_d)); + + Kokkos::deep_copy( a_h, a_d ); + + for (int i = 0; i < 10; i++) + { + ASSERT_EQ(a_h(i), (double)(10-i)); + } + } void static testit() { test_mirror< Kokkos::MemoryTraits<0> >(); @@ -835,6 +877,8 @@ struct TestViewMirror test_mirror_view< Kokkos::MemoryTraits >(); test_mirror_copy< Kokkos::MemoryTraits<0> >(); test_mirror_copy< Kokkos::MemoryTraits >(); + test_mirror_no_initialize< Kokkos::MemoryTraits<0> >(); + test_mirror_no_initialize< Kokkos::MemoryTraits >(); } }; @@ -865,7 +909,7 @@ public: } static void run_test_view_operator_a() { - {TestViewOperator< T, device > f; Kokkos::parallel_for(int(N0),f);} + {TestViewOperator< T, device > f; Kokkos::parallel_for(int(N0),f); Kokkos::fence();} #ifndef KOKKOS_ENABLE_OPENMPTARGET TestViewOperator_LeftAndRight< int[2][3][4][2][3][4], device >f6; f6.testit(); TestViewOperator_LeftAndRight< int[2][3][4][2][3], device >f5; f5.testit(); diff --git a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp index efb34a64cc..76815dc112 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp @@ -194,6 +194,7 @@ inline void test_anonymous_space() { d_anon_dyn_view(j) += 42; } }); + Kokkos::fence(); #endif } @@ -201,4 +202,45 @@ TEST_F( TEST_CATEGORY, anonymous_space ) { test_anonymous_space(); } + +template +struct TestViewOverloadResolution { + // Overload based on value_type and rank + static int foo(Kokkos::View a) { + return 1; + } + static int foo(Kokkos::View a) { + return 2; + } + static int foo(Kokkos::View a) { + return 3; + } + + // Overload based on compile time dimensions + static int bar(Kokkos::View a) { + return 4; + } + static int bar(Kokkos::View a) { + return 5; + } + + static void test_function_overload() { + Kokkos::View a("A",10,3); + int data_type_1 = foo(a); + int data_type_3 = foo(Kokkos::View(a)); + Kokkos::View b("B",10,3,4); + int data_type_2 = foo(b); + Kokkos::View c(a); + int static_extent = bar(c); + ASSERT_EQ(1,data_type_1); + ASSERT_EQ(3,data_type_2); + ASSERT_EQ(1,data_type_3); + ASSERT_EQ(4,static_extent); + } +}; + +TEST_F( TEST_CATEGORY, view_overload_resolution ) +{ + TestViewOverloadResolution::test_function_overload(); +} } diff --git a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp index 03d5e501b9..69247902cd 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp @@ -1012,12 +1012,14 @@ void test_view_mapping() ASSERT_EQ( a.use_count(), 1 ); ASSERT_EQ( b.use_count(), 0 ); -#if !defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && !defined( KOKKOS_ENABLE_ROCM ) +// TODO: a.use_count() and x.use_count() are 0 with the asynchronous HPX backend. Why? +#if !defined( KOKKOS_ENABLE_CUDA_LAMBDA ) && !defined( KOKKOS_ENABLE_ROCM ) && \ + !(defined( KOKKOS_ENABLE_HPX ) && defined( KOKKOS_ENABLE_HPX_ASYNC_DISPATCH )) // Cannot launch host lambda when CUDA lambda is enabled. typedef typename Kokkos::Impl::HostMirror< Space >::Space::execution_space host_exec_space; - Kokkos::parallel_for( Kokkos::RangePolicy< host_exec_space >( 0, 10 ), KOKKOS_LAMBDA ( int i ) { + Kokkos::parallel_for( Kokkos::RangePolicy< host_exec_space >( 0, 10 ), KOKKOS_LAMBDA ( int ) { // 'a' is captured by copy, and the capture mechanism converts 'a' to an // unmanaged copy. When the parallel dispatch accepts a move for the // lambda, this count should become 1. diff --git a/lib/kokkos/core/unit_test/TestViewMapping_b.hpp b/lib/kokkos/core/unit_test/TestViewMapping_b.hpp index 7c7807f60d..36fc0461a4 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_b.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_b.hpp @@ -173,12 +173,12 @@ void test_view_mapping_class_value() { typedef typename Space::execution_space ExecSpace; - ExecSpace::fence(); + ExecSpace().fence(); { Kokkos::View< MappingClassValueType, ExecSpace > a( "a" ); - ExecSpace::fence(); + ExecSpace().fence(); } - ExecSpace::fence(); + ExecSpace().fence(); } TEST_F( TEST_CATEGORY , view_mapping_class_value ) diff --git a/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp b/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp index 0c2d22e013..62bd582871 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_subview.hpp @@ -201,6 +201,7 @@ struct TestViewMappingSubview long error_count = -1; Kokkos::parallel_reduce( Kokkos::RangePolicy< ExecSpace >( 0, 1 ), *this, error_count ); + ASSERT_EQ( error_count, 0 ); } }; diff --git a/lib/kokkos/core/unit_test/TestViewSubview.hpp b/lib/kokkos/core/unit_test/TestViewSubview.hpp index 207fbb148d..bffc77181f 100644 --- a/lib/kokkos/core/unit_test/TestViewSubview.hpp +++ b/lib/kokkos/core/unit_test/TestViewSubview.hpp @@ -48,6 +48,86 @@ #include #include #include +#include + +// TODO @refactoring move this to somewhere common + +//------------------------------------------------------------------------------ + +template +struct _kokkos____________________static_test_failure_____; + +template +struct static_predicate_message {}; + +//------------------------------------------------------------------------------ + +template class, class...> +struct static_assert_predicate_true_impl; + +template