From 062c1a04fcc129f2ba61edaac2f7b35e07e11e81 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 Aug 2018 14:42:01 -0600 Subject: [PATCH 01/33] 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 02/33] 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 03/33] 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 04/33] 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 05/33] 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 06/33] 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 07/33] 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 08/33] 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 09/33] 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 10/33] 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 11/33] 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 12/33] 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 13/33] 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 14/33] 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 15/33] 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 16/33] Commit JT 100518 - correction torque ewald_dipole - idem ewald_dipole_spin to check --- src/KSPACE/ewald_dipole.cpp | 8 ++++---- src/KSPACE/ewald_dipole_spin.cpp | 5 +---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 5579ba3840..f2124deb4f 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -458,7 +458,7 @@ void EwaldDipole::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] - expim*sfacim_all[k]; + partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -493,9 +493,9 @@ void EwaldDipole::compute(int eflag, int vflag) f[i][0] += muscale * ek[i][0]; f[i][1] += muscale * ek[i][1]; if (slabflag != 2) f[i][2] += muscale * ek[i][2]; - t[i][0] += -mu[i][1]*tk[i][2] + mu[i][2]*tk[i][1]; - t[i][1] += -mu[i][2]*tk[i][0] + mu[i][0]*tk[i][2]; - if (slabflag != 2) t[i][2] += -mu[i][0]*tk[i][1] + mu[i][1]*tk[i][0]; + t[i][0] -= muscale * (mu[i][1]*tk[i][2] - mu[i][2]*tk[i][1]); + t[i][1] -= muscale * (mu[i][2]*tk[i][0] - mu[i][0]*tk[i][2]); + if (slabflag != 2) t[i][2] -= muscale * (mu[i][0]*tk[i][1] - mu[i][1]*tk[i][0]); } // sum global energy across Kspace vevs and add in volume-dependent term diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index df1acb337d..3554f66f36 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -434,7 +434,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] - expim*sfacim_all[k]; + partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -478,9 +478,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) fm_long[i][1] += spscale2 * tk[i][1]; if (slabflag != 2) fm_long[i][2] += spscale2 * tk[i][3]; } - - //printf("test f_l: %g %g %g \n",f[0][0],f[0][1],f[0][2]); - //printf("test fm_l: %g %g %g \n",fm_long[0][0],fm_long[0][1],fm_long[0][2]); // sum global energy across Kspace vevs and add in volume-dependent term // taking the re-part of struct_fact_i x struct_fact_j From 9727fdc47305b9ce29ec099a6a1d138892e38898 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 8 Nov 2018 16:17:43 -0700 Subject: [PATCH 17/33] Commit JT 110818 - correct bug (match ewald/disp results for vir) - started correct mag. part --- examples/SPIN/pppm_spin/data.2 | 13 ++++ examples/SPIN/pppm_spin/in.spin.2 | 75 +++++++++++++++++++++ examples/SPIN/pppm_spin/in.spin.cut_comp | 72 +++++++++++++++++++++ examples/SPIN/pppm_spin/in.spin.pppm_spin | 10 +-- src/KSPACE/ewald_dipole.cpp | 28 ++++---- src/KSPACE/ewald_dipole_spin.cpp | 30 +++++---- src/SPIN/pair_spin_dipolar_cut.cpp | 79 +++++++++++------------ 7 files changed, 233 insertions(+), 74 deletions(-) create mode 100644 examples/SPIN/pppm_spin/data.2 create mode 100644 examples/SPIN/pppm_spin/in.spin.2 create mode 100644 examples/SPIN/pppm_spin/in.spin.cut_comp diff --git a/examples/SPIN/pppm_spin/data.2 b/examples/SPIN/pppm_spin/data.2 new file mode 100644 index 0000000000..426e3a9cb4 --- /dev/null +++ b/examples/SPIN/pppm_spin/data.2 @@ -0,0 +1,13 @@ +RANDOM INITIALIZATION FOR STOCKMAYER FLUID +2 atoms +1 atom types + + -3.0 3.0 xlo xhi + -3.0 3.0 ylo yhi + -3.0 3.0 zlo zhi + #30.0 30.0 0.0 xy xz yz + +Atoms + +1 1 1.73 0.0 0.0 0.0 0.0 0.0 1.0 +2 1 1.73 0.0 2.5 0.0 0.0 0.0 1.0 diff --git a/examples/SPIN/pppm_spin/in.spin.2 b/examples/SPIN/pppm_spin/in.spin.2 new file mode 100644 index 0000000000..29f3203694 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.2 @@ -0,0 +1,75 @@ +# two magnetic atoms in a 3d box + +clear +units metal +atom_style spin + +dimension 3 +#boundary p p p +atom_modify map array + +read_data ../examples/SPIN/pppm_spin/data.2 + + +mass 1 58.93 +#set group all spin/random 31 1.72 + +#velocity all create 100 4928459 rot yes dist gaussian + +pair_style spin/dipolar/cut 4.0 +pair_coeff * * long 2.6 +#pair_style hybrid/overlay spin/exchange 4.0 spin/dipolar/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 +#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +#pair_coeff * * spin/exchange exchange 4.0 0.1 1.135028015e-05 1.064568567 +#pair_coeff * * spin/dipolar/long long 8.0 + +#neighbor 0.1 bin +#neigh_modify every 10 check yes delay 20 +neighbor 0.3 bin +neigh_modify delay 0 +#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 + +#kspace_style pppm/dipole/spin 1.0e-4 +#kspace_style ewald/dipole/spin 1.0e-4 +#kspace_modify compute yes +#kspace_modify compute yes gewald 0.1 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no + +timestep 0.0001 + +thermo_style custom step temp pe ke etotal press +thermo_modify format float %20.16g +thermo 1 + +#compute peratom all pe/atom +#compute pe all reduce sum c_peratom +#thermo_style custom step temp pe c_pe + +#compute peratom2 all stress/atom +#compute peratom2 all stress/atom NULL +#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] +#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) +#variable pxx equal -c_p[1]/vol +#variable pyy equal -c_p[2]/vol +#variable pzz equal -c_p[3]/vol +#variable pxy equal -c_p[4]/vol +#variable pxz equal -c_p[5]/vol +#variable pyz equal -c_p[6]/vol +#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz +#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz +#thermo_style custom step temp etotal press v_press + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] +#c_outsp[5] c_outsp[6] c_outsp[7] +#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes + +#pair_modify compute no + +run 1 diff --git a/examples/SPIN/pppm_spin/in.spin.cut_comp b/examples/SPIN/pppm_spin/in.spin.cut_comp new file mode 100644 index 0000000000..3d01c56878 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.cut_comp @@ -0,0 +1,72 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +mass 1 58.93 +#set group all spin 2.2 0.0 0.0 1.0 +set group all spin/random 31 2.2 + +#pair_style spin/dipolar/cut 5.0 +#pair_coeff * * long 5.0 +pair_style spin/dipolar/long 4.0 +pair_coeff * * long 4.0 + +#neighbor 0.1 bin +#neigh_modify every 10 check yes delay 20 +neighbor 0.3 bin +neigh_modify delay 0 +#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 + +#kspace_style pppm/dipole/spin 1.0e-4 +kspace_style ewald/dipole/spin 1.0e-4 +kspace_modify compute yes +#kspace_modify compute yes gewald 0.1 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.1 21 +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no + +timestep 0.0001 + +thermo_style custom step temp pe ke etotal press +thermo_modify format float %20.16g +thermo 50 + +#compute peratom all pe/atom +#compute pe all reduce sum c_peratom +#thermo_style custom step temp pe c_pe + +#compute peratom2 all stress/atom +#compute peratom2 all stress/atom NULL +#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] +#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) +#variable pxx equal -c_p[1]/vol +#variable pyy equal -c_p[2]/vol +#variable pzz equal -c_p[3]/vol +#variable pxy equal -c_p[4]/vol +#variable pxz equal -c_p[5]/vol +#variable pyz equal -c_p[6]/vol +#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz +#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz +#thermo_style custom step temp etotal press v_press + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] +#c_outsp[5] c_outsp[6] c_outsp[7] +#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes + +#pair_modify compute no + +run 10000 diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin index 6762fe6fab..78dfbb56a0 100644 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -19,14 +19,15 @@ create_atoms 1 box mass 1 58.93 -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 +set group all spin/random 31 1.72 +#set group all spin 1.72 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * spin/exchange exchange 4.0 0.0 1.135028015e-05 1.064568567 #pair_coeff * * spin/dipolar/long/qsymp long 8.0 pair_coeff * * spin/dipolar/long long 8.0 @@ -34,7 +35,7 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 kspace_style pppm/dipole/spin 1.0e-4 -#kspace_modify mesh 32 32 32 +kspace_modify compute yes #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 @@ -55,6 +56,7 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo_style custom step time v_magnorm v_emag temp etotal +thermo_modify format float %20.16g thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index f2124deb4f..92470eb4a8 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -439,8 +439,7 @@ void EwaldDipole::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) { - vcik[0] = vcik[1] = vcik[2] = 0.0; - vcik[3] = vcik[4] = vcik[5] = 0.0; + for (j = 0; j<6; j++) vcik[j] = 0.0; // calculating re and im of exp(i*k*ri) @@ -458,29 +457,28 @@ void EwaldDipole::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; - tk[i][0] += partial2*eg[k][0]; - tk[i][1] += partial2*eg[k][1]; - tk[i][2] += partial2*eg[k][2]; + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + tk[i][0] += partial_peratom * eg[k][0]; + tk[i][1] += partial_peratom * eg[k][1]; + tk[i][2] += partial_peratom * eg[k][2]; // total and per-atom virial correction (dipole only) - vc[k][0] += vcik[0] = partial2 * mu[i][0] * kx; - vc[k][1] += vcik[1] = partial2 * mu[i][1] * ky; - vc[k][2] += vcik[2] = partial2 * mu[i][2] * kz; - vc[k][3] += vcik[3] = partial2 * mu[i][0] * ky; - vc[k][4] += vcik[4] = partial2 * mu[i][0] * kz; - vc[k][5] += vcik[5] = partial2 * mu[i][1] * kz; + vc[k][0] += vcik[0] = -(partial_peratom * mu[i][0] * eg[k][0]); + vc[k][1] += vcik[1] = -(partial_peratom * mu[i][1] * eg[k][1]); + vc[k][2] += vcik[2] = -(partial_peratom * mu[i][2] * eg[k][2]); + vc[k][3] += vcik[3] = -(partial_peratom * mu[i][0] * eg[k][1]); + vc[k][4] += vcik[4] = -(partial_peratom * mu[i][0] * eg[k][2]); + vc[k][5] += vcik[5] = -(partial_peratom * mu[i][1] * eg[k][2]); // taking re-part of struct_fact x exp(i*k*ri) // (for per-atom energy and virial calc.) if (evflag_atom) { - partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); } } } @@ -517,7 +515,7 @@ void EwaldDipole::compute(int eflag, int vflag) double uk, vk; for (k = 0; k < kcount; k++) { uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); - for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] + ug[k]*vc[k][j]; + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] - vc[k][j]; } for (j = 0; j < 6; j++) virial[j] *= muscale; } diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 3554f66f36..4313f7b57b 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -428,13 +428,14 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // taking im of struct_fact x exp(i*k*ri) (for force calc.) partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); - ek[i][0] += partial*eg[k][0]; - ek[i][1] += partial*eg[k][1]; - ek[i][2] += partial*eg[k][2]; + ek[i][0] += partial * eg[k][0]; + ek[i][1] += partial * eg[k][1]; + ek[i][2] += partial * eg[k][2]; // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + //partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -445,22 +446,23 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) spy = sp[i][1]*sp[i][3]; spz = sp[i][2]*sp[i][3]; - vc[k][0] += vcik[0] = partial2 * spx * kx; - vc[k][1] += vcik[1] = partial2 * spy * ky; - vc[k][2] += vcik[2] = partial2 * spz * kz; - vc[k][3] += vcik[3] = partial2 * spx * ky; - vc[k][4] += vcik[4] = partial2 * spx * kz; - vc[k][5] += vcik[5] = partial2 * spy * kz; + vc[k][0] += vcik[0] = -(partial_peratom * spx * eg[k][0]); + vc[k][1] += vcik[1] = -(partial_peratom * spy * eg[k][1]); + vc[k][2] += vcik[2] = -(partial_peratom * spz * eg[k][2]); + vc[k][3] += vcik[3] = -(partial_peratom * spx * eg[k][1]); + vc[k][4] += vcik[4] = -(partial_peratom * spx * eg[k][2]); + vc[k][5] += vcik[5] = -(partial_peratom * spy * eg[k][2]); // taking re-part of struct_fact x exp(i*k*ri) // (for per-atom energy and virial calc.) if (evflag_atom) { - partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + //partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); + //vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); } } } @@ -498,7 +500,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) double uk, vk; for (k = 0; k < kcount; k++) { uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); - for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] + ug[k]*vc[k][j]; + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] - vc[k][j]; } for (j = 0; j < 6; j++) virial[j] *= spscale; } @@ -529,7 +531,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) } /* ---------------------------------------------------------------------- - compute the + compute the struc. factors and mu dot k products ------------------------------------------------------------------------- */ void EwaldDipoleSpin::eik_dot_r() diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp index 2c44b25fbf..b8927d62e9 100644 --- a/src/SPIN/pair_spin_dipolar_cut.cpp +++ b/src/SPIN/pair_spin_dipolar_cut.cpp @@ -65,17 +65,12 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - //printf("hbar: %g, mub2mu0hbinv: %g \n",hbar,mub2mu0hbinv); - } /* ---------------------------------------------------------------------- @@ -103,6 +98,9 @@ void PairSpinDipolarCut::settings(int narg, char **arg) if (strcmp(update->unit_style,"metal") != 0) error->all(FLERR,"Spin simulations require metal unit style"); + if (!atom->sp) + error->all(FLERR,"Pair/spin style requires atom attribute sp"); + cut_spin_long_global = force->numeric(FLERR,arg[0]); // reset cutoffs that have been explicitly set @@ -234,7 +232,7 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) int i,j,ii,jj,inum,jnum,itype,jtype; double rinv,r2inv,r3inv,rsq; double evdwl,ecoul; - double xi[3],rij[3]; + double xi[3],rij[3],eij[3]; double spi[4],spj[4],fi[3],fmi[3]; double local_cut2; int *ilist,*jlist,*numneigh,**firstneigh; @@ -282,6 +280,7 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) spj[2] = sp[j][2]; spj[3] = sp[j][3]; + evdwl = 0.0; fi[0] = fi[1] = fi[2] = 0.0; fmi[0] = fmi[1] = fmi[2] = 0.0; @@ -289,16 +288,19 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); r3inv = r2inv*rinv; - compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); - if (lattice_flag) compute_dipolar_mech(i,j,rij,fmi,spi,spj,r2inv); + compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); + if (lattice_flag) compute_dipolar_mech(i,j,eij,fi,spi,spj,r2inv); } // force accumulation @@ -318,13 +320,11 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) if (eflag) { if (rsq <= local_cut2) { - evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + - spi[2]*fmi[2]; + evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= hbar; } } else evdwl = 0.0; - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); @@ -342,7 +342,7 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double rsq,rinv,r2inv,r3inv; - double xi[3],rij[3]; + double xi[3],rij[3],eij[3]; double spi[4],spj[4]; double local_cut2; int *ilist,*jlist,*numneigh,**firstneigh; @@ -384,44 +384,41 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); r3inv = r2inv*rinv; // compute dipolar interaction - compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); + compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); } } - - //printf("test fm: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); - - //fmi[0] *= mub2mu0hbinv; - //fmi[1] *= mub2mu0hbinv; - //fmi[2] *= mub2mu0hbinv; } /* ---------------------------------------------------------------------- compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], +void PairSpinDipolarCut::compute_dipolar(int i, int j, double eij[3], double fmi[3], double spi[4], double spj[4], double r3inv) { double sjdotr; - double gigjri3,pre; + double gigjiri3,pre; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - gigjri3 = (spi[3] * spj[3])*r3inv; - pre = mub2mu0hbinv * gigjri3 / 4.0 / MY_PI; + sjdotr = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; + gigjiri3 = (spi[3] * spj[3])*r3inv; + pre = mub2mu0hbinv * gigjiri3; - fmi[0] += pre * gigjri3 * (3.0 * sjdotr *rij[0] - spj[0]); - fmi[1] += pre * gigjri3 * (3.0 * sjdotr *rij[1] - spj[1]); - fmi[2] += pre * gigjri3 * (3.0 * sjdotr *rij[2] - spj[2]); + fmi[0] += pre * (3.0 * sjdotr *eij[0] - spj[0]); + fmi[1] += pre * (3.0 * sjdotr *eij[1] - spj[1]); + fmi[2] += pre * (3.0 * sjdotr *eij[2] - spj[2]); } /* ---------------------------------------------------------------------- @@ -429,25 +426,25 @@ void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double rij[3], +void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double eij[3], double fi[3], double spi[3], double spj[3], double r2inv) { - double sdots,sidotr,sjdotr,b2,b3; + double sisj,sieij,sjeij; double gigjri4,bij,pre; - gigjri4 = (spi[3] * spj[3])/r2inv/r2inv; - sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + gigjri4 = (spi[3] * spj[3])*r2inv*r2inv; + sisj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sieij = spi[0]*eij[0] + spi[1]*eij[1] + spi[2]*eij[2]; + sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; + + bij = sisj - 5.0*sieij*sjeij; + pre = mub2mu0*gigjri4; - bij = sdots - 5.0 * sidotr*sjdotr; - pre = mub2mu0 * bij / 4.0 / MY_PI; - fi[0] += pre * (rij[0] * bij + (sjdotr*spi[0] + sidotr*spj[0])); - fi[1] += pre * (rij[1] * bij + (sjdotr*spi[1] + sidotr*spj[1])); - fi[2] += pre * (rij[2] * bij + (sjdotr*spi[2] + sidotr*spj[2])); + fi[0] += pre * (eij[0] * bij + (sjeij*spi[0] + sieij*spj[0])); + fi[1] += pre * (eij[1] * bij + (sjeij*spi[1] + sieij*spj[1])); + fi[2] += pre * (eij[2] * bij + (sjeij*spi[2] + sieij*spj[2])); } - /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ From d66a1ac054222c06cb95285f364127e6bb9ee815 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 13 Nov 2018 17:03:32 -0700 Subject: [PATCH 18/33] 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 19/33] 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 20/33] 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 cb6b4981277f4199e2d63402305329cef0425516 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 22 Apr 2019 14:43:01 -0600 Subject: [PATCH 21/33] 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 31789ad03bd7e31a009bbd1a9df26a98068574b3 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 May 2019 17:44:35 -0600 Subject: [PATCH 22/33] 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 23/33] 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 0c0b106924b56f2293c00fb2f6513648e62b5311 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 15 May 2019 20:49:05 -0600 Subject: [PATCH 24/33] 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 fbb78e7b78a38a1734bc0abd37e0e3000fe07588 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 17 May 2019 15:04:14 -0600 Subject: [PATCH 25/33] 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 e90eed91209d4daf8e929b03d36aa6b3670810d8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 20 May 2019 21:48:05 -0600 Subject: [PATCH 26/33] 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 27/33] 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 95ab0565762f1eee1a3327065fad19aa4df48d18 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 10:07:41 -0600 Subject: [PATCH 28/33] 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 29/33] 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 30/33] 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 31/33] 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 35be1724e39ffe2877fae7ddee67bbabe17e4214 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 28 May 2019 15:31:03 -0600 Subject: [PATCH 32/33] 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 7a33d1e328d71e339a709f7eb89da09348db2d73 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 12 Jun 2019 11:36:42 -0600 Subject: [PATCH 33/33] 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