From 92e6c6ea9ded1462a355028d6d97720a3074f32c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Dec 2022 13:22:59 -0500 Subject: [PATCH 01/46] avoid 32-bit integer overflow for memory allocation --- src/ML-POD/mlpod.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ML-POD/mlpod.cpp b/src/ML-POD/mlpod.cpp index 859b269375..ef729e3ce6 100644 --- a/src/ML-POD/mlpod.cpp +++ b/src/ML-POD/mlpod.cpp @@ -218,7 +218,7 @@ void MLPOD::podeigenvaluedecomposition(double *Phi, double *Lambda, double *bess int lwork = ns * ns; // the length of the array work, lwork >= max(1,3*N-1) int info = 1; // = 0: successful exit - std::vector work(ns*ns); + std::vector work(lwork); DSYEV(&chv, &chu, &ns, A, &ns, b, work.data(), &lwork, &info); // order eigenvalues and eigenvectors from largest to smallest From 739537930d475a3bede39e780b634c61f28b4f24 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Dec 2022 13:34:09 -0500 Subject: [PATCH 02/46] use utils::numeric() instead of atof and improve error messages in QEQ package --- src/QEQ/fix_qeq.cpp | 2 +- src/QEQ/fix_qeq_dynamic.cpp | 82 ++++++++++++++---------------- src/QEQ/fix_qeq_fire.cpp | 98 ++++++++++++++++++------------------ src/QEQ/fix_qeq_point.cpp | 19 ++++--- src/QEQ/fix_qeq_shielded.cpp | 32 ++++++------ src/QEQ/fix_qeq_slater.cpp | 44 ++++++++-------- 6 files changed, 134 insertions(+), 143 deletions(-) diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index fd02f8f240..c8112ca24d 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -60,7 +60,7 @@ FixQEq::FixQEq(LAMMPS *lmp, int narg, char **arg) : b_t(nullptr), p(nullptr), q(nullptr), r(nullptr), d(nullptr), qf(nullptr), q1(nullptr), q2(nullptr), qv(nullptr) { - if (narg < 8) error->all(FLERR,"Illegal fix qeq command"); + if (narg < 8) utils::missing_cmd_args(FLERR, "fix " + std::string(style), error); scalar_flag = 1; extscalar = 0; diff --git a/src/QEQ/fix_qeq_dynamic.cpp b/src/QEQ/fix_qeq_dynamic.cpp index 8e66d7e25f..3bc0650ef1 100644 --- a/src/QEQ/fix_qeq_dynamic.cpp +++ b/src/QEQ/fix_qeq_dynamic.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -34,8 +33,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) +FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) { qdamp = 0.10; qstep = 0.02; @@ -43,19 +41,20 @@ FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"qdamp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - qdamp = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "qdamp") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic qdamp", error); + qdamp = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"qstep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - qstep = atof(arg[iarg+1]); + } else if (strcmp(arg[iarg], "qstep") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic qstep", error); + qstep = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/dynamic command"); + } else + error->all(FLERR, "Unknown fix qeq/dynamic keyword: {}", arg[iarg]); } } @@ -69,16 +68,17 @@ void FixQEqDynamic::init() if (tolerance < 1e-4) if (comm->me == 0) - error->warning(FLERR,"Fix qeq/dynamic tolerance may be too small for damped dynamics"); + error->warning(FLERR, "Fix qeq/dynamic tolerance {} may be too small for damped dynamics", + tolerance); } /* ---------------------------------------------------------------------- */ void FixQEqDynamic::pre_force(int /*vflag*/) { - int i,ii,iloop,inum,*ilist; - double qmass,dtq2; - double enegchkall,enegmaxall; + int i, ii, iloop, inum, *ilist; + double qmass, dtq2; + double enegchkall, enegmaxall; double *q = atom->q; int *mask = atom->mask; @@ -94,20 +94,20 @@ void FixQEqDynamic::pre_force(int /*vflag*/) inum = list->inum; ilist = list->ilist; - qmass = 0.016; - dtq2 = 0.5*qstep*qstep/qmass; + qmass = 0.016; + dtq2 = 0.5 * qstep * qstep / qmass; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; q1[i] = q2[i] = qf[i] = 0.0; } - for (iloop = 0; iloop < maxiter; iloop ++) { + for (iloop = 0; iloop < maxiter; iloop++) { for (ii = 0; ii < inum; ii++) { i = ilist[ii]; if (mask[i] & groupbit) { - q1[i] += qf[i]*dtq2 - qdamp*q1[i]; - q[i] += q1[i]; + q1[i] += qf[i] * dtq2 - qdamp * q1[i]; + q[i] += q1[i]; } } @@ -119,34 +119,32 @@ void FixQEqDynamic::pre_force(int /*vflag*/) enegchk = enegmax = 0.0; - for (ii = 0; ii < inum ; ii++) { + for (ii = 0; ii < inum; ii++) { i = ilist[ii]; if (mask[i] & groupbit) { - q2[i] = enegtot-qf[i]; - enegmax = MAX(enegmax,fabs(q2[i])); + q2[i] = enegtot - qf[i]; + enegmax = MAX(enegmax, fabs(q2[i])); enegchk += fabs(q2[i]); qf[i] = q2[i]; } } - MPI_Allreduce(&enegchk,&enegchkall,1,MPI_DOUBLE,MPI_SUM,world); - enegchk = enegchkall/ngroup; - MPI_Allreduce(&enegmax,&enegmaxall,1,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(&enegchk, &enegchkall, 1, MPI_DOUBLE, MPI_SUM, world); + enegchk = enegchkall / ngroup; + MPI_Allreduce(&enegmax, &enegmaxall, 1, MPI_DOUBLE, MPI_MAX, world); enegmax = enegmaxall; - if ((enegchk <= tolerance) && (enegmax <= 100.0*tolerance)) break; + if ((enegchk <= tolerance) && (enegmax <= 100.0 * tolerance)) break; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - q1[i] += qf[i]*dtq2 - qdamp*q1[i]; + if (mask[i] & groupbit) q1[i] += qf[i] * dtq2 - qdamp * q1[i]; } } matvecs = iloop; if ((comm->me == 0) && maxwarn && (iloop >= maxiter)) - error->warning(FLERR,"Charges did not converge at step {}: {}", - update->ntimestep,enegchk); + error->warning(FLERR, "Charges did not converge at step {}: {}", update->ntimestep, enegchk); if (force->kspace) force->kspace->qsum_qsq(); } @@ -172,8 +170,7 @@ double FixQEqDynamic::compute_eneg() for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - qf[i] = 0.0; + if (mask[i] & groupbit) qf[i] = 0.0; } // communicating charge force to all nodes, first forward then reverse @@ -198,12 +195,12 @@ double FixQEqDynamic::compute_eneg() delr[0] = x[i][0] - x[j][0]; delr[1] = x[i][1] - x[j][1]; delr[2] = x[i][2] - x[j][2]; - rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + rsq = delr[0] * delr[0] + delr[1] * delr[1] + delr[2] * delr[2]; if (rsq > cutoff_sq) continue; r = sqrt(rsq); - rinv = 1.0/r; + rinv = 1.0 / r; qf[i] += q[j] * rinv; qf[j] += q[i] * rinv; } @@ -218,20 +215,17 @@ double FixQEqDynamic::compute_eneg() eneg = enegtot = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - eneg += qf[i]; + if (mask[i] & groupbit) eneg += qf[i]; } - MPI_Allreduce(&eneg,&enegtot,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eneg, &enegtot, 1, MPI_DOUBLE, MPI_SUM, world); return enegtot; - } /* ---------------------------------------------------------------------- */ -int FixQEqDynamic::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) +int FixQEqDynamic::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { - int m=0; + int m = 0; if (pack_flag == 1) for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; diff --git a/src/QEQ/fix_qeq_fire.cpp b/src/QEQ/fix_qeq_fire.cpp index b84cb3ca83..34ef51d947 100644 --- a/src/QEQ/fix_qeq_fire.cpp +++ b/src/QEQ/fix_qeq_fire.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -45,7 +44,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg), comb(nullptr), comb3(nullptr) + FixQEq(lmp, narg, arg), comb(nullptr), comb3(nullptr) { qdamp = 0.20; qstep = 0.20; @@ -53,19 +52,20 @@ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"qdamp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - qdamp = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "qdamp") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire qdamp", error); + qdamp = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"qstep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - qstep = atof(arg[iarg+1]); + } else if (strcmp(arg[iarg], "qstep") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire qstep", error); + qstep = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/fire command"); + } else + error->all(FLERR, "Unknown fix qeq/fire keyword: {}", arg[iarg]); } } @@ -79,10 +79,11 @@ void FixQEqFire::init() if (tolerance < 1e-4) if (comm->me == 0) - error->warning(FLERR,"Fix qeq/fire tolerance may be too small for damped fires"); + error->warning(FLERR, "Fix qeq/fire tolerance {} may be too small for damped fires", + tolerance); - comb3 = dynamic_cast(force->pair_match("^comb3",0)); - if (!comb3) comb = dynamic_cast(force->pair_match("^comb",0)); + comb3 = dynamic_cast(force->pair_match("^comb3", 0)); + if (!comb3) comb = dynamic_cast(force->pair_match("^comb", 0)); } /* ---------------------------------------------------------------------- */ @@ -90,13 +91,13 @@ void FixQEqFire::init() void FixQEqFire::pre_force(int /*vflag*/) { int inum, *ilist; - int i,ii,iloop; + int i, ii, iloop; double *q = atom->q; - double vmax,vdotf,vdotfall,vdotv,vdotvall,fdotf,fdotfall; - double scale1,scale2; - double dtvone,dtv; - double enegtot,enegchk; + double vmax, vdotf, vdotfall, vdotv, vdotvall, fdotf, fdotfall; + double scale1, scale2; + double dtvone, dtv; + double enegtot, enegchk; double alpha = qdamp; double dt, dtmax; double enegchkall; @@ -118,15 +119,15 @@ void FixQEqFire::pre_force(int /*vflag*/) dt = qstep; dtmax = TMAX * dt; - for (iloop = 0; iloop < maxiter; iloop ++) { + for (iloop = 0; iloop < maxiter; iloop++) { pack_flag = 1; comm->forward_comm(this); if (comb) { - comb->yasu_char(qf,igroup); + comb->yasu_char(qf, igroup); enegtot = comb->enegtot / ngroup; } else if (comb3) { - comb3->combqeq(qf,igroup); + comb3->combqeq(qf, igroup); enegtot = comb3->enegtot / ngroup; } else { enegtot = compute_eneg(); @@ -135,7 +136,7 @@ void FixQEqFire::pre_force(int /*vflag*/) for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - qf[i] -= enegtot; // Enforce adiabatic + qf[i] -= enegtot; // Enforce adiabatic } // FIRE minimization algorithm @@ -143,30 +144,32 @@ void FixQEqFire::pre_force(int /*vflag*/) vdotf = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vdotf += (qv[i]*qf[i]); + vdotf += (qv[i] * qf[i]); } - MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&vdotf, &vdotfall, 1, MPI_DOUBLE, MPI_SUM, world); if (vdotfall > 0.0) { vdotv = fdotf = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vdotv += qv[i]*qv[i]; - fdotf += qf[i]*qf[i]; + vdotv += qv[i] * qv[i]; + fdotf += qf[i] * qf[i]; } - MPI_Allreduce(&vdotv,&vdotvall,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&vdotv, &vdotvall, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&fdotf, &fdotfall, 1, MPI_DOUBLE, MPI_SUM, world); scale1 = 1.0 - alpha; - if (fdotfall == 0.0) scale2 = 0.0; - else scale2 = alpha * sqrt(vdotvall/fdotfall); + if (fdotfall == 0.0) + scale2 = 0.0; + else + scale2 = alpha * sqrt(vdotvall / fdotfall); for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - qv[i] = scale1*qv[i] + scale2*qf[i]; + qv[i] = scale1 * qv[i] + scale2 * qf[i]; } if (ntimestep - last_negative > DELAYSTEP) { - dt = MIN(dt*DT_GROW,dtmax); + dt = MIN(dt * DT_GROW, dtmax); alpha *= ALPHA_SHRINK; } } else { @@ -184,10 +187,10 @@ void FixQEqFire::pre_force(int /*vflag*/) double dmax = 0.1; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vmax = MAX(fabs(qv[i]),0); - if (dtvone*vmax > dmax) dtvone = dmax/vmax; + vmax = MAX(fabs(qv[i]), 0); + if (dtvone * vmax > dmax) dtvone = dmax / vmax; } - MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,world); + MPI_Allreduce(&dtvone, &dtv, 1, MPI_DOUBLE, MPI_MIN, world); //dtv = dt; // Euler integration step @@ -198,7 +201,7 @@ void FixQEqFire::pre_force(int /*vflag*/) qv[i] += dtv * qf[i]; enegchk += fabs(qf[i]); } - MPI_Allreduce(&enegchk,&enegchkall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&enegchk, &enegchkall, 1, MPI_DOUBLE, MPI_SUM, world); enegchk = enegchkall / ngroup; if (enegchk < tolerance) break; @@ -206,8 +209,7 @@ void FixQEqFire::pre_force(int /*vflag*/) matvecs = iloop; if ((comm->me == 0) && maxwarn && (iloop >= maxiter)) - error->warning(FLERR,"Charges did not converge at step {}: {}", - update->ntimestep,enegchk); + error->warning(FLERR, "Charges did not converge at step {}: {}", update->ntimestep, enegchk); if (force->kspace) force->kspace->qsum_qsq(); } @@ -233,8 +235,7 @@ double FixQEqFire::compute_eneg() for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - qf[i] = 0.0; + if (mask[i] & groupbit) qf[i] = 0.0; } // communicating charge force to all nodes, first forward then reverse @@ -259,12 +260,12 @@ double FixQEqFire::compute_eneg() delr[0] = x[i][0] - x[j][0]; delr[1] = x[i][1] - x[j][1]; delr[2] = x[i][2] - x[j][2]; - rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + rsq = delr[0] * delr[0] + delr[1] * delr[1] + delr[2] * delr[2]; if (rsq > cutoff_sq) continue; r = sqrt(rsq); - rinv = 1.0/r; + rinv = 1.0 / r; qf[i] += q[j] * rinv; qf[j] += q[i] * rinv; } @@ -279,18 +280,15 @@ double FixQEqFire::compute_eneg() eneg = enegtot = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - eneg += qf[i]; + if (mask[i] & groupbit) eneg += qf[i]; } - MPI_Allreduce(&eneg,&enegtot,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eneg, &enegtot, 1, MPI_DOUBLE, MPI_SUM, world); return enegtot; - } /* ---------------------------------------------------------------------- */ -int FixQEqFire::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) +int FixQEqFire::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int m = 0; diff --git a/src/QEQ/fix_qeq_point.cpp b/src/QEQ/fix_qeq_point.cpp index 4f82bea4b5..3eb150559c 100644 --- a/src/QEQ/fix_qeq_point.cpp +++ b/src/QEQ/fix_qeq_point.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -35,13 +34,15 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqPoint::FixQEqPoint(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) { +FixQEqPoint::FixQEqPoint(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) +{ if (narg == 10) { - if (strcmp(arg[8],"warn") == 0) { - maxwarn = utils::logical(FLERR,arg[9],false,lmp); - } else error->all(FLERR,"Illegal fix qeq/point command"); - } else if (narg > 8) error->all(FLERR,"Illegal fix qeq/point command"); + if (strcmp(arg[8], "warn") == 0) { + maxwarn = utils::logical(FLERR, arg[9], false, lmp); + } else + error->all(FLERR, "Illegal fix qeq/point command"); + } else if (narg > 8) + error->all(FLERR, "Illegal fix qeq/point command"); } /* ---------------------------------------------------------------------- */ @@ -53,9 +54,11 @@ void FixQEqPoint::init() neighbor->add_request(this, NeighConst::REQ_FULL); int ntypes = atom->ntypes; - memory->create(shld,ntypes+1,ntypes+1,"qeq:shielding"); + memory->create(shld, ntypes + 1, ntypes + 1, "qeq:shielding"); } +// clang-format off + /* ---------------------------------------------------------------------- */ void FixQEqPoint::pre_force(int /*vflag*/) diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index 1a575e2c8c..6987732048 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -36,13 +35,15 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqShielded::FixQEqShielded(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) { +FixQEqShielded::FixQEqShielded(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) +{ if (narg == 10) { - if (strcmp(arg[8],"warn") == 0) { - maxwarn = utils::logical(FLERR,arg[9],false,lmp); - } else error->all(FLERR,"Illegal fix qeq/shielded command"); - } else if (narg > 8) error->all(FLERR,"Illegal fix qeq/shielded command"); + if (strcmp(arg[8], "warn") == 0) { + maxwarn = utils::logical(FLERR, arg[9], false, lmp); + } else + error->all(FLERR, "Illegal fix qeq/shielded command"); + } else if (narg > 8) + error->all(FLERR, "Illegal fix qeq/shielded command"); if (reax_flag) extract_reax(); } @@ -55,14 +56,13 @@ void FixQEqShielded::init() neighbor->add_request(this, NeighConst::REQ_FULL); int ntypes = atom->ntypes; - memory->create(shld,ntypes+1,ntypes+1,"qeq:shielding"); + memory->create(shld, ntypes + 1, ntypes + 1, "qeq:shielding"); init_shielding(); int i; for (i = 1; i <= ntypes; i++) { - if (gamma[i] == 0.0) - error->all(FLERR,"Invalid param file for fix qeq/shielded"); + if (gamma[i] == 0.0) error->all(FLERR, "Invalid param file for fix qeq/shielded"); } } @@ -70,17 +70,17 @@ void FixQEqShielded::init() void FixQEqShielded::extract_reax() { - Pair *pair = force->pair_match("^reax..",0); - if (pair == nullptr) error->all(FLERR,"No pair reaxff for fix qeq/shielded"); + Pair *pair = force->pair_match("^reax..", 0); + if (pair == nullptr) error->all(FLERR, "No pair reaxff for fix qeq/shielded"); int tmp; - chi = (double *) pair->extract("chi",tmp); - eta = (double *) pair->extract("eta",tmp); - gamma = (double *) pair->extract("gamma",tmp); + chi = (double *) pair->extract("chi", tmp); + eta = (double *) pair->extract("eta", tmp); + gamma = (double *) pair->extract("gamma", tmp); if (chi == nullptr || eta == nullptr || gamma == nullptr) error->all(FLERR, "Fix qeq/shielded could not extract params from pair reaxff"); } - +// clang-format off /* ---------------------------------------------------------------------- */ void FixQEqShielded::init_shielding() diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp index 645164b45b..e80bad04b9 100644 --- a/src/QEQ/fix_qeq_slater.cpp +++ b/src/QEQ/fix_qeq_slater.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -38,23 +37,23 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) +FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) { alpha = 0.20; // optional arg int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"alpha") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/slater command"); - alpha = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "alpha") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/slater alpha", error); + alpha = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/slater command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/slater warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/slater command"); + } else + error->all(FLERR, "Unknown fix qeq/slater keyword: {}", arg[iarg]); } if (streitz_flag) extract_streitz(); @@ -70,8 +69,7 @@ void FixQEqSlater::init() int ntypes = atom->ntypes; for (int i = 1; i <= ntypes; i++) { - if (zeta[i] == 0.0) - error->all(FLERR,"Invalid param file for fix qeq/slater"); + if (zeta[i] == 0.0) error->all(FLERR, "Invalid parameter file values for fix qeq/slater"); } } @@ -79,21 +77,19 @@ void FixQEqSlater::init() void FixQEqSlater::extract_streitz() { - Pair *pair = force->pair_match("coul/streitz",1); - if (pair == nullptr) error->all(FLERR,"No pair coul/streitz for fix qeq/slater"); + Pair *pair = force->pair_match("coul/streitz", 1); + if (pair == nullptr) error->all(FLERR, "No pair style coul/streitz for fix qeq/slater"); int tmp; - chi = (double *) pair->extract("chi",tmp); - eta = (double *) pair->extract("eta",tmp); - gamma = (double *) pair->extract("gamma",tmp); - zeta = (double *) pair->extract("zeta",tmp); - zcore = (double *) pair->extract("zcore",tmp); - if (chi == nullptr || eta == nullptr || gamma == nullptr - || zeta == nullptr || zcore == nullptr) - error->all(FLERR, - "Fix qeq/slater could not extract params from pair coul/streitz"); - + chi = (double *) pair->extract("chi", tmp); + eta = (double *) pair->extract("eta", tmp); + gamma = (double *) pair->extract("gamma", tmp); + zeta = (double *) pair->extract("zeta", tmp); + zcore = (double *) pair->extract("zcore", tmp); + if (chi == nullptr || eta == nullptr || gamma == nullptr || zeta == nullptr || zcore == nullptr) + error->all(FLERR, "Fix qeq/slater could not extract parameters from pair coul/streitz"); } +// clang-format off /* ---------------------------------------------------------------------- */ void FixQEqSlater::pre_force(int /*vflag*/) From 4a92316cf2c8b48e59342c45c6883740f5023f79 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Dec 2022 15:02:59 -0500 Subject: [PATCH 03/46] improve error message --- src/variable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/variable.cpp b/src/variable.cpp index bb45649208..c07e62648b 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -4529,7 +4529,7 @@ void Variable::peratom2global(int flag, char *word, double *vector, int nstride, error->one(FLERR,"Variable uses atom property that isn't allocated"); mine = atom->q[index]; } - else error->one(FLERR,"Invalid atom vector in variable formula"); + else error->one(FLERR,"Invalid atom vector {} in variable formula", word); } else mine = vector[index*nstride]; From 34449fc47ce6c082ef1d9f0cd9357e689c4983a2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Dec 2022 20:41:33 -0500 Subject: [PATCH 04/46] fix typo and reformat --- doc/src/pair_coul.rst | 44 +++++++++++---------- doc/utils/sphinx-config/false_positives.txt | 1 - 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/doc/src/pair_coul.rst b/doc/src/pair_coul.rst index 4e0793467b..f22bc974b0 100644 --- a/doc/src/pair_coul.rst +++ b/doc/src/pair_coul.rst @@ -174,11 +174,11 @@ shifted force model described in :ref:`Fennell `, given by: E = q_iq_j \left[ \frac{\mbox{erfc} (\alpha r)}{r} - \frac{\mbox{erfc} (\alpha r_c)}{r_c} + \left( \frac{\mbox{erfc} (\alpha r_c)}{r_c^2} + \frac{2\alpha}{\sqrt{\pi}}\frac{\exp (-\alpha^2 r^2_c)}{r_c} \right)(r-r_c) \right] \qquad r < r_c -where :math:`\alpha` is the damping parameter and erfc() is the -complementary error-function. The potential corrects issues in the -Wolf model (described below) to provide consistent forces and energies -(the Wolf potential is not differentiable at the cutoff) and smooth -decay to zero. +where :math:`\alpha` is the damping parameter and *erfc()* is the +complementary error-function. The potential corrects issues in the Wolf +model (described below) to provide consistent forces and energies (the +Wolf potential is not differentiable at the cutoff) and smooth decay to +zero. ---------- @@ -192,30 +192,32 @@ summation method, described in :ref:`Wolf `, given by: \frac{1}{2} \sum_{j \neq i} \frac{q_i q_j {\rm erf}(\alpha r_{ij})}{r_{ij}} \qquad r < r_c -where :math:`\alpha` is the damping parameter, and erc() and erfc() are -error-function and complementary error-function terms. This potential -is essentially a short-range, spherically-truncated, +where :math:`\alpha` is the damping parameter, and *erf()* and *erfc()* +are error-function and complementary error-function terms. This +potential is essentially a short-range, spherically-truncated, charge-neutralized, shifted, pairwise *1/r* summation. With a manipulation of adding and subtracting a self term (for i = j) to the -first and second term on the right-hand-side, respectively, and a -small enough :math:`\alpha` damping parameter, the second term shrinks and -the potential becomes a rapidly-converging real-space summation. With -a long enough cutoff and small enough :math:`\alpha` parameter, the energy and -forces calculated by the Wolf summation method approach those of the +first and second term on the right-hand-side, respectively, and a small +enough :math:`\alpha` damping parameter, the second term shrinks and the +potential becomes a rapidly-converging real-space summation. With a +long enough cutoff and small enough :math:`\alpha` parameter, the energy +and forces calculated by the Wolf summation method approach those of the Ewald sum. So it is a means of getting effective long-range interactions with a short-range potential. ---------- -Style *coul/streitz* is the Coulomb pair interaction defined as part -of the Streitz-Mintmire potential, as described in :ref:`this paper `, in which charge distribution about an atom is modeled -as a Slater 1\ *s* orbital. More details can be found in the referenced +Style *coul/streitz* is the Coulomb pair interaction defined as part of +the Streitz-Mintmire potential, as described in :ref:`this paper +`, in which charge distribution about an atom is modeled as a +Slater 1\ *s* orbital. More details can be found in the referenced paper. To fully reproduce the published Streitz-Mintmire potential, -which is a variable charge potential, style *coul/streitz* must be -used with :doc:`pair_style eam/alloy ` (or some other -short-range potential that has been parameterized appropriately) via -the :doc:`pair_style hybrid/overlay ` command. Likewise, -charge equilibration must be performed via the :doc:`fix qeq/slater ` command. For example: +which is a variable charge potential, style *coul/streitz* must be used +with :doc:`pair_style eam/alloy ` (or some other short-range +potential that has been parameterized appropriately) via the +:doc:`pair_style hybrid/overlay ` command. Likewise, +charge equilibration must be performed via the :doc:`fix qeq/slater +` command. For example: .. code-block:: LAMMPS diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6193d52046..ca233e0b96 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -977,7 +977,6 @@ equilization equipartitioning eradius erate -erc Ercolessi Erdmann erf From f0244255ffba006f6aaecf2de5b0c84b4da08ae4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Dec 2022 13:35:41 -0500 Subject: [PATCH 05/46] improve warning message --- src/lammps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 5e9fed61b7..cc32578f22 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -527,7 +527,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : // warn against using I/O redirection in parallel runs if ((inflag == 0) && (universe->nprocs > 1)) error->warning(FLERR, "Using I/O redirection is unreliable with parallel runs. " - "Better use -in switch to read input file."); + "Better to use the -in switch to read input files."); utils::flush_buffers(this); } From 4aaf003fb1787656de2857c4d6b1e7f142346ef8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Dec 2022 23:59:42 -0500 Subject: [PATCH 06/46] fix minor issues reported by coverity scan, re-apply clang-format --- src/ML-POD/fitpod_command.cpp | 4 +-- src/ML-POD/fitpod_command.h | 46 ++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/ML-POD/fitpod_command.cpp b/src/ML-POD/fitpod_command.cpp index c78f5eec76..810ceb8a7f 100644 --- a/src/ML-POD/fitpod_command.cpp +++ b/src/ML-POD/fitpod_command.cpp @@ -465,7 +465,7 @@ void FitPOD::get_data(datastruct &data, std::vector species) data.num_atom_sum = get_number_atoms(data.num_atom, data.num_atom_each_file, data.num_config, data.data_files); data.num_config_sum = data.num_atom.size(); size_t maxname = 9; - for (auto fname : data.data_files) maxname = MAX(maxname,fname.size()); + for (const auto &fname : data.data_files) maxname = MAX(maxname,fname.size()); maxname -= data.data_path.size()+1; const std::string sepline(maxname+46, '-'); if (comm->me == 0) @@ -608,7 +608,7 @@ std::vector FitPOD::select(int n, double fraction, int randomize) return selected; } -void FitPOD::select_data(datastruct &newdata, datastruct data) +void FitPOD::select_data(datastruct &newdata, const datastruct &data) { double fraction = data.fraction; int randomize = data.randomize; diff --git a/src/ML-POD/fitpod_command.h b/src/ML-POD/fitpod_command.h index 201461e951..d632a8e074 100644 --- a/src/ML-POD/fitpod_command.h +++ b/src/ML-POD/fitpod_command.h @@ -11,7 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ - #ifdef COMMAND_CLASS // clang-format off CommandStyle(fitpod,FitPOD); @@ -26,11 +25,11 @@ CommandStyle(fitpod,FitPOD); namespace LAMMPS_NS { class FitPOD : public Command { -public: + public: FitPOD(LAMMPS *); void command(int, char **) override; -private: + private: struct datastruct { std::string file_format = "extxyz"; std::string file_extension = "xyz"; @@ -68,7 +67,8 @@ private: double fitting_weights[12] = {100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10}; - void copydatainfo(datastruct &data) { + void copydatainfo(datastruct &data) + { data.data_path = data_path; data.file_format = file_format; data.file_extension = file_extension; @@ -84,8 +84,7 @@ private: data.precision = precision; data.training = training; data.normalizeenergy = normalizeenergy; - for (int i = 0; i < 12; i++) - data.fitting_weights[i] = fitting_weights[i]; + for (int i = 0; i < 12; i++) data.fitting_weights[i] = fitting_weights[i]; } }; @@ -106,11 +105,11 @@ private: }; struct descriptorstruct { - double *gd; // global descriptors - double *gdd; // derivatives of global descriptors and peratom descriptors - double *A; // least-square matrix for all descriptors - double *b; // least-square vector for all descriptors - double *c; // coefficents of descriptors + double *gd; // global descriptors + double *gdd; // derivatives of global descriptors and peratom descriptors + double *A; // least-square matrix for all descriptors + double *b; // least-square vector for all descriptors + double *c; // coefficents of descriptors int *tmpint; int szd; int szi; @@ -147,24 +146,28 @@ private: // functions for reading input files and fitting - int read_data_file(double *fitting_weights, std::string &file_format, std::string &file_extension, - std::string &test_path, std::string &training_path, std::string &filenametag, const std::string &data_file); + std::string &test_path, std::string &training_path, std::string &filenametag, + const std::string &data_file); void get_exyz_files(std::vector &, const std::string &, const std::string &); - int get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, std::string file); - int get_number_atoms(std::vector& num_atom, std::vector &num_atom_sum, std::vector& num_config, std::vector training_files); + int get_number_atom_exyz(std::vector &num_atom, int &num_atom_sum, std::string file); + int get_number_atoms(std::vector &num_atom, std::vector &num_atom_sum, + std::vector &num_config, std::vector training_files); void read_exyz_file(double *lattice, double *stress, double *energy, double *pos, double *forces, - int *atomtype, std::string file, std::vector species); + int *atomtype, std::string file, std::vector species); void get_data(datastruct &data, std::vector species); std::vector linspace(int start_in, int end_in, int num_in); std::vector shuffle(int start_in, int end_in, int num_in); std::vector select(int n, double fraction, int randomize); - void select_data(datastruct &newdata, datastruct data); + void select_data(datastruct &newdata, const datastruct &data); void read_data_files(std::string data_file, std::vector species); - int latticecoords(double *y, int *alist, double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx); - int podneighborlist(int *neighlist, int *numneigh, double *r, double rcutsq, int nx, int N, int dim); + int latticecoords(double *y, int *alist, double *x, double *a1, double *a2, double *a3, + double rcut, int *pbc, int nx); + int podneighborlist(int *neighlist, int *numneigh, double *r, double rcutsq, int nx, int N, + int dim); int podfullneighborlist(double *y, int *alist, int *neighlist, int *numneigh, int *numneighsum, - double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx); + double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, + int nx); void allocate_memory(const datastruct &data); void linear_descriptors(const datastruct &data, int ci); void quadratic_descriptors(const datastruct &data, int ci); @@ -177,8 +180,7 @@ private: void energyforce_calculation(const datastruct &data, double *coeff); }; -} // namespace LAMMPS_NS +} // namespace LAMMPS_NS #endif #endif - From 3ab265185158a196901a7312e93c19d1f40212dc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 00:41:23 -0500 Subject: [PATCH 07/46] must add const attribute to method --- src/ML-POD/fitpod_command.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ML-POD/fitpod_command.h b/src/ML-POD/fitpod_command.h index d632a8e074..e0928c8df3 100644 --- a/src/ML-POD/fitpod_command.h +++ b/src/ML-POD/fitpod_command.h @@ -67,7 +67,7 @@ class FitPOD : public Command { double fitting_weights[12] = {100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10}; - void copydatainfo(datastruct &data) + void copydatainfo(datastruct &data) const { data.data_path = data_path; data.file_format = file_format; From f6d6e1ef01d5792bc236a1b2017d90d0da711a17 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 16:23:10 -0500 Subject: [PATCH 08/46] remove workaround that is no longer needed --- src/lattice.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/lattice.cpp b/src/lattice.cpp index 53f4996581..edb482cfac 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -53,14 +53,7 @@ Lattice::Lattice(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (style == NONE) { if (narg != 2) error->all(FLERR,"Illegal lattice command: expected 2 arguments but found {}", narg); - // Domain creates a default lattice of style "none" - // before Force class is instantiated, just use atof() in that case - - if (force) - xlattice = ylattice = zlattice = utils::numeric(FLERR,arg[1],false,lmp); - else - xlattice = ylattice = zlattice = atof(arg[1]); - + xlattice = ylattice = zlattice = utils::numeric(FLERR,arg[1],false,lmp); if (xlattice <= 0.0) error->all(FLERR, "Invalid lattice none argument: {}", arg[1]); return; } From f24cb96517ed0d9c641db6e8a2c37f4a39b79a44 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 16:29:32 -0500 Subject: [PATCH 09/46] use utils::numeric() instead of atof(), improve error messages --- src/MACHDYN/fix_smd_adjust_dt.cpp | 5 ++--- src/MACHDYN/pair_smd_hertz.cpp | 2 +- src/MACHDYN/pair_smd_triangulated_surface.cpp | 2 +- src/QTB/fix_qbmsst.cpp | 9 ++++----- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/MACHDYN/fix_smd_adjust_dt.cpp b/src/MACHDYN/fix_smd_adjust_dt.cpp index 6f7539b476..d2728f1042 100644 --- a/src/MACHDYN/fix_smd_adjust_dt.cpp +++ b/src/MACHDYN/fix_smd_adjust_dt.cpp @@ -43,8 +43,7 @@ using namespace FixConst; FixSMDTlsphDtReset::FixSMDTlsphDtReset(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg != 4) - error->all(FLERR, "Illegal fix smd/adjust_dt command"); + if (narg != 4) error->all(FLERR, "Illegal fix smd/adjust_dt command"); // set time_depend, else elapsed time accumulation can be messed up @@ -57,7 +56,7 @@ FixSMDTlsphDtReset::FixSMDTlsphDtReset(LAMMPS *lmp, int narg, char **arg) : extvector = 0; restart_global = 1; // this fix stores global (i.e., not per-atom) info: elaspsed time - safety_factor = atof(arg[3]); + safety_factor = utils::numeric(FLERR,arg[3],false,lmp); // initializations t_elapsed = 0.0; diff --git a/src/MACHDYN/pair_smd_hertz.cpp b/src/MACHDYN/pair_smd_hertz.cpp index 7c9eac217f..bf526f5e4e 100644 --- a/src/MACHDYN/pair_smd_hertz.cpp +++ b/src/MACHDYN/pair_smd_hertz.cpp @@ -263,7 +263,7 @@ void PairHertz::coeff(int narg, char **arg) { utils::bounds(FLERR,arg[0], 1, atom->ntypes, ilo, ihi, error); utils::bounds(FLERR,arg[1], 1, atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = atof(arg[2]); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); // set short-range force constant double kn_one = 0.0; diff --git a/src/MACHDYN/pair_smd_triangulated_surface.cpp b/src/MACHDYN/pair_smd_triangulated_surface.cpp index fbd2c14aa6..e1ebc2562d 100644 --- a/src/MACHDYN/pair_smd_triangulated_surface.cpp +++ b/src/MACHDYN/pair_smd_triangulated_surface.cpp @@ -345,7 +345,7 @@ void PairTriSurf::coeff(int narg, char **arg) { utils::bounds(FLERR,arg[0], 1,atom->ntypes, ilo, ihi, error); utils::bounds(FLERR,arg[1], 1,atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = atof(arg[2]); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); // set short-range force constant double kn_one = 0.0; diff --git a/src/QTB/fix_qbmsst.cpp b/src/QTB/fix_qbmsst.cpp index 839e08662c..b5fb5ca77c 100644 --- a/src/QTB/fix_qbmsst.cpp +++ b/src/QTB/fix_qbmsst.cpp @@ -45,7 +45,7 @@ using namespace MathConst; FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg < 5) error->all(FLERR,"Illegal fix qbmsst command"); + if (narg < 5) utils::missing_cmd_args(FLERR,"fix qbmsst",error); if (strcmp(arg[3],"x") == 0) { direction = 0; @@ -57,11 +57,10 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) direction = 2; box_change |= BOX_CHANGE_Z; } else { - error->all(FLERR,"Illegal fix qbmsst command"); + error->all(FLERR,"Unknown fix qbmsst direction keyword: {}", arg[3]); } - velocity = atof(arg[4]); - if (velocity < 0) - error->all(FLERR,"Illegal fix qbmsst command"); + velocity = utils::numeric(FLERR,arg[4],false,lmp); + if (velocity < 0) error->all(FLERR,"Illegal fix qbmsst velocity value {}", velocity); // default parameters From b0accb4ebff7ce087921c022f7ff397a615e4a3d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 16:56:17 -0500 Subject: [PATCH 10/46] replace atoi() with suitable utility functions --- src/GPU/fix_gpu.cpp | 4 ++-- src/ML-IAP/compute_mliap.cpp | 4 +--- src/REACTION/fix_bond_react.cpp | 10 ++++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index b3d387d845..97f22da0a7 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -120,8 +120,8 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : // If ngpu is 0, autoset ngpu to the number of devices per node matching // best device - int ngpu = atoi(arg[3]); - if (ngpu < 0) error->all(FLERR,"Illegal package gpu command"); + int ngpu = utils::inumeric(FLERR, arg[3], false, lmp); + if (ngpu < 0) error->all(FLERR,"Illegal number of GPUs ({}) in package gpu command", ngpu); // Negative value indicate GPU package should find the best device ID int first_gpu_id = -1; diff --git a/src/ML-IAP/compute_mliap.cpp b/src/ML-IAP/compute_mliap.cpp index 2c025f025a..161613fae6 100644 --- a/src/ML-IAP/compute_mliap.cpp +++ b/src/ML-IAP/compute_mliap.cpp @@ -98,9 +98,7 @@ ComputeMLIAP::ComputeMLIAP(LAMMPS *lmp, int narg, char **arg) : descriptorflag = 1; } else if (strcmp(arg[iarg],"gradgradflag") == 0) { if (iarg+1 > narg) error->all(FLERR,"Illegal compute mliap command"); - gradgradflag = atoi(arg[iarg+1]); - if (gradgradflag != 0 && gradgradflag != 1) - error->all(FLERR,"Illegal compute mliap command"); + gradgradflag = utils::logical(FLERR, arg[iarg+1], false, lmp); iarg += 2; } else error->all(FLERR,"Illegal compute mliap command"); diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index b983172860..ae5f9d91eb 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -4274,12 +4274,14 @@ void FixBondReact::readID(char *strarg, int iconstr, int myrxn, int i) if (isalpha(strarg[0])) { constraints[iconstr][myrxn].idtype[i] = FRAG; // fragment vs. atom ID flag int ifragment = onemol->findfragment(strarg); - if (ifragment < 0) error->one(FLERR,"Fix bond/react: Molecule fragment does not exist"); + if (ifragment < 0) + error->one(FLERR,"Fix bond/react: Molecule fragment {} does not exist", strarg); constraints[iconstr][myrxn].id[i] = ifragment; } else { constraints[iconstr][myrxn].idtype[i] = ATOM; // fragment vs. atom ID flag - int iatom = atoi(strarg); - if (iatom > onemol->natoms) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); + int iatom = utils::inumeric(FLERR, strarg, true, lmp); + if (iatom > onemol->natoms) + error->one(FLERR,"Fix bond/react: Invalid template atom ID {} in map file", strarg); constraints[iconstr][myrxn].id[i] = iatom; } } @@ -4287,7 +4289,7 @@ void FixBondReact::readID(char *strarg, int iconstr, int myrxn, int i) void FixBondReact::open(char *file) { fp = fopen(file,"r"); - if (fp == nullptr) error->one(FLERR, "Fix bond/react: Cannot open map file {}",file); + if (fp == nullptr) error->one(FLERR, "Fix bond/react: Cannot open map file {}", file); } void FixBondReact::readline(char *line) From 34f44daef514580f8c6976c81ab46552638e8a3b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 16:56:50 -0500 Subject: [PATCH 11/46] some small programming style updates --- src/KIM/kim_param.cpp | 106 +++++++++++++++--------------------------- src/KIM/pair_kim.cpp | 22 ++++----- 2 files changed, 45 insertions(+), 83 deletions(-) diff --git a/src/KIM/kim_param.cpp b/src/KIM/kim_param.cpp index 6dfcfc10a9..99c30c4770 100644 --- a/src/KIM/kim_param.cpp +++ b/src/KIM/kim_param.cpp @@ -155,11 +155,9 @@ void KimParam::command(int narg, char **arg) std::string kim_param_get_set(arg[0]); - if ((kim_param_get_set != "get") && (kim_param_get_set != "set")) { - std::string msg("Incorrect arguments in 'kim param' command.\n"); - msg += "'kim param get/set' is mandatory"; - error->all(FLERR, msg); - } + if ((kim_param_get_set != "get") && (kim_param_get_set != "set")) + error->all(FLERR, "Incorrect arguments in 'kim param' command.\n" + "'kim param get/set' is mandatory"); int const ifix = modify->find_fix("KIM_MODEL_STORE"); if (ifix >= 0) { @@ -170,8 +168,7 @@ void KimParam::command(int narg, char **arg) fix_store->getptr("simulator_model")); if (simulatorModel) - error->all(FLERR, - "'kim param' can only be used with a KIM Portable Model"); + error->all(FLERR, "'kim param' can only be used with a KIM Portable Model"); } input->write_echo(fmt::format("#=== BEGIN kim param {} ===================" @@ -196,13 +193,10 @@ void KimParam::command(int narg, char **arg) } else error->all(FLERR, "Pair style is defined, but there is " "no match for kim style in lammps"); - } else { - auto msg = fmt::format("Illegal 'kim param {0}' command.\nTo {0} the new " - "parameter values, pair style must be assigned.\n" - "Must use 'kim interactions' or 'pair_style kim' " - "before 'kim param {0}'", kim_param_get_set); - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Illegal 'kim param {0}' command.\nTo {0} the new parameter values, " + "pair style must be assigned.\nMust use 'kim interactions' or 'pair_style kim' " + "before 'kim param {0}'", kim_param_get_set); // Get the number of mutable parameters in the kim model int numberOfParameters(0); @@ -243,12 +237,9 @@ void KimParam::command(int narg, char **arg) if (paramname == str_name_str) break; } - if (param_index >= numberOfParameters) { - auto msg = fmt::format("Wrong argument in 'kim param get' command.\n" - "This Model does not have the requested '{}' " - "parameter", paramname); - error->all(FLERR, msg); - } + if (param_index >= numberOfParameters) + error->all(FLERR, "Wrong argument in 'kim param get' command.\n" + "This Model does not have the requested '{}' parameter", paramname); // Get the index_range for the requested parameter int nlbound(0); @@ -259,12 +250,9 @@ void KimParam::command(int narg, char **arg) // Check to see if the indices range contains // only integer numbers and/or range : - if (argtostr.find_first_not_of("0123456789:") != std::string::npos) { - auto msg = fmt::format("Illegal index_range.\nExpected integer " - "parameter(s) instead of '{}' in " - "index_range", argtostr); - error->all(FLERR, msg); - } + if (argtostr.find_first_not_of("0123456789:") != std::string::npos) + error->all(FLERR, "Illegal index_range.\nExpected integer parameter(s) instead " + "of '{}' in index_range", argtostr); std::string::size_type npos = argtostr.find(':'); if (npos != std::string::npos) { @@ -273,30 +261,20 @@ void KimParam::command(int narg, char **arg) nlbound = atoi(words[0].c_str()); nubound = atoi(words[1].c_str()); - if (nubound < 1 || nubound > extent || - nlbound < 1 || nlbound > nubound) { - auto msg = fmt::format("Illegal index_range '{}-{}' for '{}' " - "parameter with the extent of '{}'", - nlbound, nubound, paramname, extent); - error->all(FLERR, msg); - } + if ((nubound < 1) || (nubound > extent) || (nlbound < 1) || (nlbound > nubound)) + error->all(FLERR, "Illegal index_range '{}-{}' for '{}' parameter with the " + "extent of '{}'",nlbound, nubound, paramname, extent); } else { nlbound = atoi(argtostr.c_str()); - if (nlbound < 1 || nlbound > extent) { - auto msg = fmt::format("Illegal index '{}' for '{}' parameter " - "with the extent of '{}'", nlbound, - paramname, extent); - error->all(FLERR, msg); - } - + if (nlbound < 1 || nlbound > extent) + error->all(FLERR, "Illegal index '{}' for '{}' parameter with the extent of '{}'", + nlbound, paramname, extent); nubound = nlbound; } - } else { - std::string msg("Wrong number of arguments in 'kim param get' "); - msg += "command.\nIndex range after parameter name is mandatory"; - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "Index range after parameter name is mandatory"); int const nvars = nubound - nlbound + 1; std::vector varsname; @@ -304,15 +282,11 @@ void KimParam::command(int narg, char **arg) if (i < narg) { // Get the variable/variable_base name varname = std::string(arg[i++]); - if ((varname == "split") || - (varname == "list") || - (varname == "explicit")) - error->all(FLERR, "Illegal variable name in 'kim param get'"); - } else { - std::string msg("Wrong number of arguments in 'kim param get' "); - msg += "command.\nThe LAMMPS variable name is mandatory"; - error->all(FLERR, msg); - } + if ((varname == "split") || (varname == "list") || (varname == "explicit")) + error->all(FLERR, "Illegal variable name {} in 'kim param get'", varname); + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS variable name is mandatory"); // indicator flag for list request bool list_requested(false); @@ -337,28 +311,22 @@ void KimParam::command(int narg, char **arg) --i; for (int j = 0; j < nvars; ++j, ++i) { varsname[j] = std::string(arg[i]); - if (varsname[j] == "split" || varsname[j] == "list" || - varsname[j] == "explicit") - error->all(FLERR, "Illegal variable name in 'kim param get'"); + if (varsname[j] == "split" || varsname[j] == "list" || varsname[j] == "explicit") + error->all(FLERR, "Illegal variable name {} in 'kim param get'", varsname[j]); } if (i < narg) { formatarg = std::string(arg[i]); if (formatarg == "explicit") ++i; } } else { - auto msg = - fmt::format("Wrong number of arguments in 'kim param get' " - "command.\nThe LAMMPS '{}' variable names or " - "'{} split' is mandatory", nvars, varname); - error->all(FLERR, msg); + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS '{}' variable names or '{} split' is mandatory", + nvars, varname); } - } else { - auto msg = - fmt::format("Wrong number of arguments in 'kim param get' " - "command.\nThe LAMMPS '{}' variable names or " - "'{} split/list' is mandatory", nvars, varname); - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS '{}' variable names or '{} split/list' is mandatory", + nvars, varname); } else { varsname.resize(1); if (i < narg) { diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 92fc9b68a7..6a5a792797 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -483,15 +483,13 @@ void PairKIM::coeff(int narg, char **arg) nlbound = atoi(words[0].c_str()); nubound = atoi(words[1].c_str()); - if (nubound < 1 || nubound > extent || - nlbound < 1 || nlbound > nubound) - error->all(FLERR,"Illegal index_range '{}-{}' for '{}' " - "parameter with the extent of '{}'", + if ((nubound < 1) || (nubound > extent) || (nlbound < 1) || (nlbound > nubound)) + error->all(FLERR,"Illegal index_range '{}-{}' for '{}' parameter with the extent of '{}'", nlbound, nubound, paramname, extent); } else { nlbound = atoi(argtostr.c_str()); - if (nlbound < 1 || nlbound > extent) + if ((nlbound < 1) || (nlbound > extent)) error->all(FLERR,"Illegal index '{}' for '{}' parameter with the extent of '{}'", nlbound, paramname, extent); @@ -1081,8 +1079,7 @@ void PairKIM::set_kim_model_has_flags() KIM_ComputeArguments_GetArgumentSupportStatus( pargs, computeArgumentName, &supportStatus); - if (KIM_ComputeArgumentName_Equal(computeArgumentName, - KIM_COMPUTE_ARGUMENT_NAME_partialEnergy)) + if (KIM_ComputeArgumentName_Equal(computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialEnergy)) kim_model_support_for_energy = supportStatus; else if (KIM_ComputeArgumentName_Equal( computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialForces)) @@ -1095,17 +1092,14 @@ void PairKIM::set_kim_model_has_flags() computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial)) kim_model_support_for_particleVirial = supportStatus; - else if (KIM_SupportStatus_Equal(supportStatus, - KIM_SUPPORT_STATUS_required)) { - std::string msg("KIM Model requires unsupported compute argument: "); - msg += KIM_ComputeArgumentName_ToString(computeArgumentName); - error->all(FLERR,msg); + else if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required)) { + error->all(FLERR, "KIM Model requires unsupported compute argument: {}", + KIM_ComputeArgumentName_ToString(computeArgumentName)); } } if (comm->me == 0) { - if (KIM_SupportStatus_Equal(kim_model_support_for_energy, - KIM_SUPPORT_STATUS_notSupported)) + if (KIM_SupportStatus_Equal(kim_model_support_for_energy, KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide 'partialEnergy'; Potential energy will be zero"); if (KIM_SupportStatus_Equal(kim_model_support_for_forces, From 07bb7b3195f126d786192df7ca8edc7506bf3588 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Dec 2022 19:56:45 -0500 Subject: [PATCH 12/46] fix up kim unit tests broken by recent changes --- src/KIM/kim_param.cpp | 4 ++-- unittest/commands/test_kim_commands.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/KIM/kim_param.cpp b/src/KIM/kim_param.cpp index 99c30c4770..6473cb2ad0 100644 --- a/src/KIM/kim_param.cpp +++ b/src/KIM/kim_param.cpp @@ -283,7 +283,7 @@ void KimParam::command(int narg, char **arg) // Get the variable/variable_base name varname = std::string(arg[i++]); if ((varname == "split") || (varname == "list") || (varname == "explicit")) - error->all(FLERR, "Illegal variable name {} in 'kim param get'", varname); + error->all(FLERR, "Illegal variable name '{}' in 'kim param get'", varname); } else error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" "The LAMMPS variable name is mandatory"); @@ -312,7 +312,7 @@ void KimParam::command(int narg, char **arg) for (int j = 0; j < nvars; ++j, ++i) { varsname[j] = std::string(arg[i]); if (varsname[j] == "split" || varsname[j] == "list" || varsname[j] == "explicit") - error->all(FLERR, "Illegal variable name {} in 'kim param get'", varsname[j]); + error->all(FLERR, "Illegal variable name '{}' in 'kim param get'", varsname[j]); } if (i < narg) { formatarg = std::string(arg[i]); diff --git a/unittest/commands/test_kim_commands.cpp b/unittest/commands/test_kim_commands.cpp index 0868d20a8d..988b0db69a 100644 --- a/unittest/commands/test_kim_commands.cpp +++ b/unittest/commands/test_kim_commands.cpp @@ -307,17 +307,17 @@ TEST_F(KimCommandsTest, kim_param) ASSERT_THAT(variable->retrieve("shift"), StrEq("2")); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'list' in 'kim param get'.*", command("kim param get cutoffs 1:3 list");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'list' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 list");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'split' in 'kim param get'.*", command("kim param get cutoffs 1:3 split");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'split' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 split");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'explicit' in 'kim param get'.*", command("kim param get cutoffs 1:3 explicit");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'explicit' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 explicit");); TEST_FAILURE(".*ERROR: Wrong number of arguments in 'kim param get' " "command.\nThe LAMMPS '3' variable names or 'cutoffs " From aed6eb0947fef4f4bf7785334f29c92f266c6091 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 10 Dec 2022 09:59:49 -0500 Subject: [PATCH 13/46] fix typo --- doc/src/pair_tracker.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index 04967e952d..e34bedca2c 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -174,8 +174,8 @@ the specified attribute. Restrictions """""""""""" -This fix is part of the MISC package. It is only enabled if LAMMPS -was built with that package. See the :doc:`Build package +This pair style is part of the MISC package. It is only enabled if +LAMMPS was built with that package. See the :doc:`Build package ` page for more info. This pair style is currently incompatible with granular pair styles From 2f84eac5c5c15e5e2ca0750950dcbcd5276b7fe1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 17:50:03 -0500 Subject: [PATCH 14/46] add c wrapper to allow testing fortran interface w/o fortran MPI libs --- unittest/fortran/CMakeLists.txt | 52 ++++++++---------------- unittest/fortran/mpi_stubs.f90 | 20 --------- unittest/fortran/test_fortran_create.f90 | 29 ++++++++++--- unittest/fortran/wrap_create.cpp | 8 ++++ 4 files changed, 48 insertions(+), 61 deletions(-) delete mode 100644 unittest/fortran/mpi_stubs.f90 diff --git a/unittest/fortran/CMakeLists.txt b/unittest/fortran/CMakeLists.txt index f66b333db1..b534835a5e 100644 --- a/unittest/fortran/CMakeLists.txt +++ b/unittest/fortran/CMakeLists.txt @@ -21,20 +21,6 @@ if(CMAKE_Fortran_COMPILER) endif() get_filename_component(LAMMPS_FORTRAN_MODULE ${LAMMPS_SOURCE_DIR}/../fortran/lammps.f90 ABSOLUTE) - if(BUILD_MPI) - find_package(MPI REQUIRED) - if((NOT MPI_Fortran_FOUND) OR (NOT MPI_Fortran_HAVE_F77_HEADER)) - message(STATUS "Skipping Tests for the LAMMPS Fortran Module: no MPI support for Fortran") - return() - endif() - else() - add_library(fmpi_stubs STATIC mpi_stubs.f90) - get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) - if (_tmp_fc STREQUAL "flang") - target_link_libraries(fmpi_stubs PUBLIC gfortran) - endif() - add_library(MPI::MPI_Fortran ALIAS fmpi_stubs) - endif() add_library(flammps STATIC ${LAMMPS_FORTRAN_MODULE} keepstuff.f90) get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) @@ -42,66 +28,62 @@ if(CMAKE_Fortran_COMPILER) target_link_libraries(flammps PUBLIC gfortran) endif() - if(MPI_Fortran_HAVE_F90_MODULE) - add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) - target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) - target_include_directories(test_fortran_create PRIVATE "${LAMMPS_SOURCE_DIR}/../fortran") - add_test(NAME FortranOpen COMMAND test_fortran_create) - else() - message(STATUS "Skipping FortranOpen test since no working F90 MPI module was found") - endif() + add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) + target_link_libraries(test_fortran_create PRIVATE flammps lammps GTest::GTestMain) + target_include_directories(test_fortran_create PRIVATE "${LAMMPS_SOURCE_DIR}/../fortran") + add_test(NAME FortranOpen COMMAND test_fortran_create) add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90) - target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_commands PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranCommands COMMAND test_fortran_commands) add_executable(test_fortran_get_thermo wrap_get_thermo.cpp test_fortran_get_thermo.f90) - target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranGetThermo COMMAND test_fortran_get_thermo) add_executable(test_fortran_box wrap_box.cpp test_fortran_box.f90) - target_link_libraries(test_fortran_box PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_box PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranBox COMMAND test_fortran_box) add_executable(test_fortran_properties wrap_properties.cpp test_fortran_properties.f90 test_fortran_commands.f90) - target_link_libraries(test_fortran_properties PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_properties PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranProperties COMMAND test_fortran_properties) add_executable(test_fortran_extract_global wrap_extract_global.cpp test_fortran_extract_global.f90) - target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractGlobal COMMAND test_fortran_extract_global) add_executable(test_fortran_extract_atom wrap_extract_atom.cpp test_fortran_extract_atom.f90) - target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractAtom COMMAND test_fortran_extract_atom) add_executable(test_fortran_extract_compute wrap_extract_compute.cpp test_fortran_extract_compute.f90) - target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractCompute COMMAND test_fortran_extract_compute) add_executable(test_fortran_extract_fix wrap_extract_fix.cpp test_fortran_extract_fix.f90) - target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractFix COMMAND test_fortran_extract_fix) add_executable(test_fortran_extract_variable wrap_extract_variable.cpp test_fortran_extract_variable.f90) target_compile_definitions(test_fortran_extract_variable PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) - target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractVariable COMMAND test_fortran_extract_variable) add_executable(test_fortran_gather_scatter wrap_gather_scatter.cpp test_fortran_gather_scatter.f90) - target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranGatherScatter COMMAND test_fortran_gather_scatter) add_executable(test_fortran_create_atoms wrap_create_atoms.cpp test_fortran_create_atoms.f90) - target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranCreateAtoms COMMAND test_fortran_create_atoms) add_executable(test_fortran_configuration wrap_configuration.cpp test_fortran_configuration.f90 test_fortran_commands.f90) - target_link_libraries(test_fortran_configuration PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_configuration PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranConfiguration COMMAND test_fortran_configuration) add_executable(test_fortran_neighlist wrap_neighlist.cpp test_fortran_neighlist.f90) - target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranNeighlist COMMAND test_fortran_neighlist) else() diff --git a/unittest/fortran/mpi_stubs.f90 b/unittest/fortran/mpi_stubs.f90 deleted file mode 100644 index 8601f436d2..0000000000 --- a/unittest/fortran/mpi_stubs.f90 +++ /dev/null @@ -1,20 +0,0 @@ -MODULE MPI - IMPLICIT NONE - PRIVATE - - INTEGER, PARAMETER :: MPI_COMM_WORLD=0 - INTEGER, PARAMETER :: MPI_SUCCESS=0 - - PUBLIC :: MPI_COMM_WORLD, MPI_SUCCESS, & - mpi_comm_split - -CONTAINS - - SUBROUTINE mpi_comm_split(comm,color,key,newcomm,ierr) - INTEGER, INTENT(in) :: comm,color,key - INTEGER, INTENT(out) :: newcomm,ierr - - newcomm = comm + 1 - ierr = 0 - END SUBROUTINE mpi_comm_split -END MODULE MPI diff --git a/unittest/fortran/test_fortran_create.f90 b/unittest/fortran/test_fortran_create.f90 index 4ea2a33cfe..fed67064f0 100644 --- a/unittest/fortran/test_fortran_create.f90 +++ b/unittest/fortran/test_fortran_create.f90 @@ -1,3 +1,20 @@ +MODULE MYMPI + USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_int + + IMPLICIT NONE + PRIVATE + PUBLIC :: lmp_comm_split + + INTERFACE + FUNCTION lmp_comm_split(color, key) BIND(C,name='create_mpi_comm_split') + IMPORT :: c_int + IMPLICIT NONE + INTEGER(c_int), VALUE, INTENT(IN) :: color, key + INTEGER(c_int) :: lmp_comm_split + END FUNCTION lmp_comm_split + END INTERFACE +END MODULE MYMPI + FUNCTION f_lammps_no_mpi_no_args() BIND(C, name="f_lammps_no_mpi_no_args") USE ISO_C_BINDING, ONLY: c_ptr USE liblammps @@ -25,35 +42,35 @@ END FUNCTION f_lammps_no_mpi_with_args FUNCTION f_lammps_open_no_args() BIND(C, name="f_lammps_open_no_args") USE ISO_C_BINDING, ONLY: c_ptr - USE MPI, ONLY: MPI_COMM_WORLD, mpi_comm_split + USE MYMPI, ONLY: lmp_comm_split USE liblammps USE keepstuff, ONLY: lmp,mycomm IMPLICIT NONE TYPE(c_ptr) :: f_lammps_open_no_args - INTEGER :: color, key, ierr + INTEGER :: color, key color = 1 key = 1 - CALL mpi_comm_split(MPI_COMM_WORLD, color, key, mycomm, ierr) + mycomm = lmp_comm_split(color, key) lmp = lammps(comm=mycomm) f_lammps_open_no_args = lmp%handle END FUNCTION f_lammps_open_no_args FUNCTION f_lammps_open_with_args() BIND(C, name="f_lammps_open_with_args") USE ISO_C_BINDING, ONLY: c_ptr - USE MPI, ONLY: MPI_COMM_WORLD, mpi_comm_split + USE MYMPI, ONLY: lmp_comm_split USE liblammps USE keepstuff, ONLY: lmp,mycomm IMPLICIT NONE TYPE(c_ptr) :: f_lammps_open_with_args - INTEGER :: color, key, ierr + INTEGER :: color, key CHARACTER(len=12), DIMENSION(4), PARAMETER :: args = & [ CHARACTER(len=12) :: 'liblammps', '-log', 'none', '-nocite' ] color = 2 key = 1 - CALL mpi_comm_split(MPI_COMM_WORLD, color, key, mycomm, ierr) + mycomm = lmp_comm_split(color, key) lmp = lammps(args,mycomm) f_lammps_open_with_args = lmp%handle END FUNCTION f_lammps_open_with_args diff --git a/unittest/fortran/wrap_create.cpp b/unittest/fortran/wrap_create.cpp index 04a62e4040..789e9fca6a 100644 --- a/unittest/fortran/wrap_create.cpp +++ b/unittest/fortran/wrap_create.cpp @@ -17,6 +17,14 @@ void f_lammps_close(); int f_lammps_get_comm(); } +// C wrapper to split MPI communicator w/o requiring a Fortran MPI lib +extern "C" int create_mpi_comm_split(int color, int key) +{ + MPI_Comm c_newcomm = MPI_COMM_NULL; + MPI_Comm_split(MPI_COMM_WORLD, color, key, &c_newcomm); + return MPI_Comm_c2f(c_newcomm); +} + TEST(open_no_mpi, no_args) { ::testing::internal::CaptureStdout(); From 9beb64236ecf7c9e5c7e5eba727e9f673d00ba1c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 17:50:47 -0500 Subject: [PATCH 15/46] skip gather_bonds test when atom style full is no available --- unittest/fortran/wrap_gather_scatter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/unittest/fortran/wrap_gather_scatter.cpp b/unittest/fortran/wrap_gather_scatter.cpp index 9eb6082202..f200e91b48 100644 --- a/unittest/fortran/wrap_gather_scatter.cpp +++ b/unittest/fortran/wrap_gather_scatter.cpp @@ -208,11 +208,11 @@ TEST_F(LAMMPS_gather_scatter, scatter_atoms_subset_mask) TEST_F(LAMMPS_gather_scatter, gather_bonds) { - f_lammps_setup_gather_bonds(); + if (!lammps_has_style(lmp, "atom", "full")) GTEST_SKIP(); + f_lammps_setup_gather_bonds(); #ifdef LAMMPS_BIGBIG - EXPECT_EQ(f_lammps_test_gather_bonds_big(), 1); + EXPECT_EQ(f_lammps_test_gather_bonds_big(), 1); #else - EXPECT_EQ(f_lammps_test_gather_bonds_small(), 1); + EXPECT_EQ(f_lammps_test_gather_bonds_small(), 1); #endif - }; From e0792d3a629b2015698081307b47c0cbe12fb025 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 18:44:50 -0500 Subject: [PATCH 16/46] apply code changes suggested by clang-tidy --- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- src/ELECTRODE/fix_electrode_conp.h | 2 +- src/ML-POD/fitpod_command.cpp | 11 ++++++----- src/ML-POD/fitpod_command.h | 4 ++-- src/REACTION/fix_bond_react.cpp | 2 +- src/STUBS/mpi.cpp | 12 ++++++------ src/info.cpp | 7 +++---- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 73c029a61f..da6d16819e 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -867,7 +867,7 @@ void FixElectrodeConp::update_charges() accel_interface->intel_pack_buffers(); } -std::vector FixElectrodeConp::ele_ele_interaction(std::vector q_local) +std::vector FixElectrodeConp::ele_ele_interaction(const std::vector& q_local) { assert(q_local.size() == nlocalele); assert(algo == Algo::CG || algo == Algo::MATRIX_CG); diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 42b0e5f52b..02e4e35c42 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -75,7 +75,7 @@ class FixElectrodeConp : public Fix { virtual std::vector constraint_projection(std::vector); virtual std::vector constraint_correction(std::vector); virtual void compute_macro_matrices(); - std::vector ele_ele_interaction(std::vector); + std::vector ele_ele_interaction(const std::vector&); std::vector group_psi; std::vector group_bits; std::vector groups; diff --git a/src/ML-POD/fitpod_command.cpp b/src/ML-POD/fitpod_command.cpp index 810ceb8a7f..272c5fe4df 100644 --- a/src/ML-POD/fitpod_command.cpp +++ b/src/ML-POD/fitpod_command.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include using namespace LAMMPS_NS; @@ -253,7 +254,7 @@ void FitPOD::get_exyz_files(std::vector& files, const std::string & int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, std::string file) { - std::string filename = file; + std::string filename = std::move(file); FILE *fp; if (comm->me == 0) { fp = utils::open_potential(filename,lmp,nullptr); @@ -325,7 +326,7 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou int *atomtype, std::string file, std::vector species) { - std::string filename = file; + std::string filename = std::move(file); FILE *fp; if (comm->me == 0) { fp = utils::open_potential(filename,lmp,nullptr); @@ -459,7 +460,7 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou } } -void FitPOD::get_data(datastruct &data, std::vector species) +void FitPOD::get_data(datastruct &data, const std::vector& species) { get_exyz_files(data.data_files, data.data_path, data.file_extension); data.num_atom_sum = get_number_atoms(data.num_atom, data.num_atom_each_file, data.num_config, data.data_files); @@ -707,7 +708,7 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) "", maxname+90, "data_file", maxname, "", maxname+90); for (int i=0; i< (int) newdata.data_files.size(); i++) { std::string filename = newdata.data_files[i].substr(newdata.data_path.size()+1,newdata.data_files[i].size()); - newdata.filenames.push_back(filename.c_str()); + newdata.filenames.emplace_back(filename.c_str()); if (comm->me == 0) utils::logmesg(lmp, " {:<{}} | {:>8} | {:>8} | {:>8} | {:>8}\n", newdata.filenames[i], maxname, newdata.num_config[i], newdata.num_atom_each_file[i], @@ -720,7 +721,7 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) } } -void FitPOD::read_data_files(std::string data_file, std::vector species) +void FitPOD::read_data_files(const std::string& data_file, const std::vector& species) { datastruct data; diff --git a/src/ML-POD/fitpod_command.h b/src/ML-POD/fitpod_command.h index e0928c8df3..b359130240 100644 --- a/src/ML-POD/fitpod_command.h +++ b/src/ML-POD/fitpod_command.h @@ -155,12 +155,12 @@ class FitPOD : public Command { std::vector &num_config, std::vector training_files); void read_exyz_file(double *lattice, double *stress, double *energy, double *pos, double *forces, int *atomtype, std::string file, std::vector species); - void get_data(datastruct &data, std::vector species); + void get_data(datastruct &data, const std::vector& species); std::vector linspace(int start_in, int end_in, int num_in); std::vector shuffle(int start_in, int end_in, int num_in); std::vector select(int n, double fraction, int randomize); void select_data(datastruct &newdata, const datastruct &data); - void read_data_files(std::string data_file, std::vector species); + void read_data_files(const std::string& data_file, const std::vector& species); int latticecoords(double *y, int *alist, double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx); int podneighborlist(int *neighlist, int *numneigh, double *r, double rcutsq, int nx, int N, diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index ae5f9d91eb..0f684a68c0 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -2308,7 +2308,7 @@ double FixBondReact::custom_constraint(const std::string& varstr) evlstr.push_back(varstr.substr(prev3+1)); for (auto & evl : evlstr) evlcat += evl; - return input->variable->compute_equal(evlcat.c_str()); + return input->variable->compute_equal(evlcat); } /* ---------------------------------------------------------------------- diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index b68270bbe8..f3d0e15c9c 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -17,10 +17,10 @@ #include "../version.h" -#include -#include -#include -#include +#include +#include +#include +#include #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN @@ -183,7 +183,7 @@ double MPI_Wtime() double time; struct timeval tv; - gettimeofday(&tv, NULL); + gettimeofday(&tv, nullptr); time = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; return time; #endif @@ -223,7 +223,7 @@ static int stubtypesize(MPI_Datatype datatype) int MPI_Type_size(MPI_Datatype datatype, int *size) { - if (size == NULL) return MPI_ERR_ARG; + if (size == nullptr) return MPI_ERR_ARG; *size = stubtypesize(datatype); return 0; diff --git a/src/info.cpp b/src/info.cpp index 1e1e8122aa..92ae524239 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1185,11 +1185,10 @@ bool Info::has_accelerator_feature(const std::string &package, } if (category == "api") { #if defined(_OPENMP) - if (setting == "openmp") return true; + return setting == "openmp"; #else - if (setting == "serial") return true; + return setting == "serial"; #endif - return false; } } #endif @@ -1198,7 +1197,7 @@ bool Info::has_accelerator_feature(const std::string &package, if (category == "precision") { if (setting == "double") return true; else if (setting == "mixed") return true; - else if (setting == "single")return true; + else if (setting == "single") return true; else return false; } if (category == "api") { From a3c0be875e45efd484eee0639c3be15ce241a04f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 22:44:47 -0500 Subject: [PATCH 17/46] include-what-you-use updates --- src/angle_hybrid.cpp | 1 - src/atom.h | 7 ++++--- src/atom_vec.cpp | 4 ---- src/atom_vec_body.cpp | 2 ++ src/atom_vec_ellipsoid.cpp | 2 ++ src/atom_vec_hybrid.cpp | 1 - src/atom_vec_line.cpp | 1 + src/atom_vec_sphere.cpp | 2 ++ src/atom_vec_tri.cpp | 1 + src/bond_hybrid.cpp | 1 - src/compute_angmom_chunk.h | 5 +++-- src/compute_cluster_atom.cpp | 1 - src/compute_reduce.cpp | 1 + src/compute_reduce_region.cpp | 2 -- src/create_atoms.cpp | 2 ++ src/dihedral_hybrid.cpp | 1 - src/domain.h | 1 - src/dump.cpp | 1 + src/finish.cpp | 2 -- src/fix_ave_time.cpp | 1 + src/fix_bond_history.h | 2 -- src/fix_nve_noforce.cpp | 1 - src/fix_pair.cpp | 7 ------- src/fix_store_global.cpp | 1 - src/fix_store_local.cpp | 1 - src/fix_store_peratom.cpp | 1 - src/fix_update_special_bonds.h | 1 - src/imbalance_neigh.cpp | 2 -- src/improper_hybrid.cpp | 1 - src/label_map.cpp | 1 - src/modify.h | 1 - src/pointers.h | 1 + 32 files changed, 21 insertions(+), 38 deletions(-) diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index f0e9002ace..7419139942 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/atom.h b/src/atom.h index 944e0e1484..e8b1330651 100644 --- a/src/atom.h +++ b/src/atom.h @@ -21,9 +21,10 @@ namespace LAMMPS_NS { -// forward declaration +// forward declarations class AtomVec; +class Molecule; class Atom : protected Pointers { public: @@ -252,7 +253,7 @@ class Atom : protected Pointers { // 1st molecule in template stores nset = # in set int nmolecule; - class Molecule **molecules; + Molecule **molecules; // type label maps @@ -354,7 +355,7 @@ class Atom : protected Pointers { void add_molecule(int, char **); int find_molecule(const char *); std::vector get_molecule_by_id(const std::string &); - void add_molecule_atom(class Molecule *, int, int, tagint); + void add_molecule_atom(Molecule *, int, int, tagint); void add_label_map(); diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index e431488a39..bfda951823 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -20,12 +20,8 @@ #include "fix.h" #include "force.h" #include "label_map.h" -#include "math_const.h" #include "memory.h" #include "modify.h" -#include "tokenizer.h" - -#include using namespace LAMMPS_NS; diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 6da3ee6671..538e9783df 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -22,6 +22,8 @@ #include "modify.h" #include "my_pool_chunk.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/atom_vec_ellipsoid.cpp b/src/atom_vec_ellipsoid.cpp index c87179183c..59b8310d3f 100644 --- a/src/atom_vec_ellipsoid.cpp +++ b/src/atom_vec_ellipsoid.cpp @@ -25,6 +25,8 @@ #include "memory.h" #include "modify.h" +#include + using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp index 5e70890414..c81ea56202 100644 --- a/src/atom_vec_hybrid.cpp +++ b/src/atom_vec_hybrid.cpp @@ -16,7 +16,6 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "tokenizer.h" #include #include diff --git a/src/atom_vec_line.cpp b/src/atom_vec_line.cpp index 92cb994f96..ff09bed6d0 100644 --- a/src/atom_vec_line.cpp +++ b/src/atom_vec_line.cpp @@ -22,6 +22,7 @@ #include "modify.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp index c18e68855c..d2f9c51880 100644 --- a/src/atom_vec_sphere.cpp +++ b/src/atom_vec_sphere.cpp @@ -20,6 +20,8 @@ #include "math_const.h" #include "modify.h" +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/atom_vec_tri.cpp b/src/atom_vec_tri.cpp index 6c66907518..a46609b02c 100644 --- a/src/atom_vec_tri.cpp +++ b/src/atom_vec_tri.cpp @@ -24,6 +24,7 @@ #include "modify.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 1528c25fe8..4e477ab3a6 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/compute_angmom_chunk.h b/src/compute_angmom_chunk.h index f86c69fc67..04023dbe44 100644 --- a/src/compute_angmom_chunk.h +++ b/src/compute_angmom_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(angmom/chunk,ComputeAngmomChunk); #include "compute.h" namespace LAMMPS_NS { + class Fix; class ComputeAngmomChunk : public Compute { public: @@ -34,8 +35,8 @@ class ComputeAngmomChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index 59139f4c68..0a0a36debd 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -17,7 +17,6 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 14c381c84d..f2afeab3e6 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -26,6 +26,7 @@ #include "update.h" #include "variable.h" +#include #include using namespace LAMMPS_NS; diff --git a/src/compute_reduce_region.cpp b/src/compute_reduce_region.cpp index f79e160684..efce00ff66 100644 --- a/src/compute_reduce_region.cpp +++ b/src/compute_reduce_region.cpp @@ -15,13 +15,11 @@ #include "arg_info.h" #include "atom.h" -#include "domain.h" #include "error.h" #include "fix.h" #include "group.h" #include "input.h" #include "memory.h" -#include "modify.h" #include "region.h" #include "update.h" #include "variable.h" diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 7fda4a4cdb..9c66d1d19b 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -38,7 +38,9 @@ #include "text_file_reader.h" #include "variable.h" +#include #include +#include using namespace LAMMPS_NS; using MathConst::MY_2PI; diff --git a/src/dihedral_hybrid.cpp b/src/dihedral_hybrid.cpp index 734009b901..d38ccf5d52 100644 --- a/src/dihedral_hybrid.cpp +++ b/src/dihedral_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/domain.h b/src/domain.h index 7d3194ccc9..1999baac2b 100644 --- a/src/domain.h +++ b/src/domain.h @@ -19,7 +19,6 @@ #include #include #include -#include namespace LAMMPS_NS { class Region; diff --git a/src/dump.cpp b/src/dump.cpp index 93d9ee30bf..82a25c31f2 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -29,6 +29,7 @@ #include "variable.h" #include +#include using namespace LAMMPS_NS; diff --git a/src/finish.cpp b/src/finish.cpp index 3217d025f9..554f250fe1 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -24,8 +24,6 @@ #include "memory.h" // IWYU pragma: keep #include "min.h" #include "molecule.h" -#include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" // IWYU pragma: keep #include "output.h" #include "pair.h" diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index 0d1797fc6d..6c0397c74b 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -29,6 +29,7 @@ #include "variable.h" #include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 23d6a62d52..c9658acbd7 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -23,8 +23,6 @@ FixStyle(BOND_HISTORY,FixBondHistory); #include "fix.h" #include -#include -#include namespace LAMMPS_NS { diff --git a/src/fix_nve_noforce.cpp b/src/fix_nve_noforce.cpp index aaac45adb0..27fcc49f13 100644 --- a/src/fix_nve_noforce.cpp +++ b/src/fix_nve_noforce.cpp @@ -14,7 +14,6 @@ #include "fix_nve_noforce.h" #include "atom.h" -#include "error.h" #include "respa.h" #include "update.h" diff --git a/src/fix_pair.cpp b/src/fix_pair.cpp index 360cee2d5a..5e5ccbf810 100644 --- a/src/fix_pair.cpp +++ b/src/fix_pair.cpp @@ -15,19 +15,12 @@ #include "fix_pair.h" #include "atom.h" -#include "dump.h" #include "error.h" #include "force.h" #include "fix.h" -#include "input.h" #include "memory.h" #include "pair.h" -#include "output.h" -#include "variable.h" #include "update.h" -#include "variable.h" - -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_store_global.cpp b/src/fix_store_global.cpp index 0d71deb1fa..cebf4f7690 100644 --- a/src/fix_store_global.cpp +++ b/src/fix_store_global.cpp @@ -13,7 +13,6 @@ #include "fix_store_global.h" -#include "atom.h" #include "comm.h" #include "error.h" #include "memory.h" diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp index 74083257d0..d32f0e8178 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -14,7 +14,6 @@ #include "fix_store_local.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "memory.h" #include "update.h" diff --git a/src/fix_store_peratom.cpp b/src/fix_store_peratom.cpp index d11cb7d8c1..6f5637e3f6 100644 --- a/src/fix_store_peratom.cpp +++ b/src/fix_store_peratom.cpp @@ -14,7 +14,6 @@ #include "fix_store_peratom.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "memory.h" diff --git a/src/fix_update_special_bonds.h b/src/fix_update_special_bonds.h index 722d8f5369..b211cbec64 100644 --- a/src/fix_update_special_bonds.h +++ b/src/fix_update_special_bonds.h @@ -23,7 +23,6 @@ FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds); #include "fix.h" #include -#include namespace LAMMPS_NS { diff --git a/src/imbalance_neigh.cpp b/src/imbalance_neigh.cpp index ade49dd8e4..40b7f6b249 100644 --- a/src/imbalance_neigh.cpp +++ b/src/imbalance_neigh.cpp @@ -17,8 +17,6 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" using namespace LAMMPS_NS; diff --git a/src/improper_hybrid.cpp b/src/improper_hybrid.cpp index b78e1ab5ca..9aa20d236e 100644 --- a/src/improper_hybrid.cpp +++ b/src/improper_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/label_map.cpp b/src/label_map.cpp index e1cde7cae4..67b1ae480d 100644 --- a/src/label_map.cpp +++ b/src/label_map.cpp @@ -17,7 +17,6 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "memory.h" #include diff --git a/src/modify.h b/src/modify.h index 994f8ad724..b508022461 100644 --- a/src/modify.h +++ b/src/modify.h @@ -17,7 +17,6 @@ #include "pointers.h" #include -#include namespace LAMMPS_NS { diff --git a/src/pointers.h b/src/pointers.h index 494daa8ffb..09efa49cbc 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -28,6 +28,7 @@ #include // IWYU pragme: export #include // IWYU pragma: export #include // IWYU pragma: export +#include // IWYU pragma: export #include "fmt/format.h" // IWYU pragma: export #include "lammps.h" // IWYU pragma: export From 302bec9de4815cbc4f2a2fcf9728b254a0c75a32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 22:58:54 -0500 Subject: [PATCH 18/46] stay compatible with older C++ compilers --- src/STUBS/mpi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index f3d0e15c9c..26c918158e 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -183,7 +183,7 @@ double MPI_Wtime() double time; struct timeval tv; - gettimeofday(&tv, nullptr); + gettimeofday(&tv, NULL); time = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; return time; #endif @@ -223,7 +223,7 @@ static int stubtypesize(MPI_Datatype datatype) int MPI_Type_size(MPI_Datatype datatype, int *size) { - if (size == nullptr) return MPI_ERR_ARG; + if (size == NULL) return MPI_ERR_ARG; *size = stubtypesize(datatype); return 0; From 01a54723d7fc21d0c9d04c226e6521bddee13930 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Dec 2022 23:40:31 -0500 Subject: [PATCH 19/46] more iwyu updates --- src/AMOEBA/amoeba_charge_transfer.cpp | 1 - src/AMOEBA/amoeba_convolution.cpp | 4 +++- src/AMOEBA/amoeba_file.cpp | 3 --- src/AMOEBA/amoeba_induce.cpp | 3 --- src/AMOEBA/amoeba_multipole.cpp | 3 --- src/AMOEBA/amoeba_polar.cpp | 2 -- src/AMOEBA/amoeba_repulsion.cpp | 1 - src/AMOEBA/amoeba_utils.cpp | 1 - src/AMOEBA/improper_amoeba.cpp | 1 - src/AMOEBA/pair_amoeba.cpp | 7 +------ src/BPM/atom_vec_bpm_sphere.cpp | 1 - src/BPM/bond_bpm.cpp | 2 -- src/BPM/bond_bpm.h | 2 -- src/BPM/compute_nbond_atom.cpp | 6 +----- src/BPM/fix_nve_bpm_sphere.cpp | 3 --- src/ELECTRODE/fix_electrode_conp.cpp | 8 +++++--- src/ELECTRODE/fix_electrode_conp.h | 1 - src/ELECTRODE/fix_electrode_thermo.cpp | 1 - src/ELECTRODE/slab_2d.cpp | 2 -- src/ELECTRODE/slab_dipole.cpp | 1 - src/ELECTRODE/wire_dipole.cpp | 1 - src/EXTRA-COMPUTE/compute_basal_atom.cpp | 1 - src/EXTRA-COMPUTE/compute_born_matrix.cpp | 2 -- src/EXTRA-COMPUTE/compute_stress_cartesian.cpp | 1 - src/EXTRA-COMPUTE/compute_stress_cylinder.cpp | 2 -- src/EXTRA-COMPUTE/compute_stress_spherical.cpp | 4 ---- src/EXTRA-FIX/fix_ave_correlate_long.cpp | 1 - src/EXTRA-FIX/fix_viscous_sphere.cpp | 2 -- src/EXTRA-MOLECULE/dihedral_nharmonic.cpp | 1 - src/FEP/compute_fep_ta.cpp | 1 - src/STUBS/mpi.cpp | 7 +++---- src/create_bonds.cpp | 1 - src/fix_bond_history.h | 1 + src/fix_nve.cpp | 1 - src/fix_update_special_bonds.cpp | 1 - src/info.cpp | 2 ++ src/pair_zero.cpp | 1 - src/platform.cpp | 2 ++ src/read_data.cpp | 1 + src/region_ellipsoid.cpp | 1 - src/reset_atoms_image.cpp | 1 - src/timer.cpp | 1 + 42 files changed, 20 insertions(+), 69 deletions(-) diff --git a/src/AMOEBA/amoeba_charge_transfer.cpp b/src/AMOEBA/amoeba_charge_transfer.cpp index 3072d90970..718d5c5b22 100644 --- a/src/AMOEBA/amoeba_charge_transfer.cpp +++ b/src/AMOEBA/amoeba_charge_transfer.cpp @@ -15,7 +15,6 @@ #include "pair_amoeba.h" #include "atom.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_convolution.cpp b/src/AMOEBA/amoeba_convolution.cpp index e3d5800ce5..ce466a6ed1 100644 --- a/src/AMOEBA/amoeba_convolution.cpp +++ b/src/AMOEBA/amoeba_convolution.cpp @@ -21,7 +21,9 @@ #include "memory.h" #include "neighbor.h" #include "remap_wrap.h" -#include "update.h" + +#include +#include using namespace LAMMPS_NS; diff --git a/src/AMOEBA/amoeba_file.cpp b/src/AMOEBA/amoeba_file.cpp index af47f04fb5..6bf961cdab 100644 --- a/src/AMOEBA/amoeba_file.cpp +++ b/src/AMOEBA/amoeba_file.cpp @@ -17,14 +17,11 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "utils.h" #include "tokenizer.h" #include #include -#include using namespace LAMMPS_NS; diff --git a/src/AMOEBA/amoeba_induce.cpp b/src/AMOEBA/amoeba_induce.cpp index 3fb3e7c705..a6724e2bb7 100644 --- a/src/AMOEBA/amoeba_induce.cpp +++ b/src/AMOEBA/amoeba_induce.cpp @@ -19,16 +19,13 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "fft3d_wrap.h" #include "fix_store_peratom.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "my_page.h" #include "neigh_list.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/AMOEBA/amoeba_multipole.cpp b/src/AMOEBA/amoeba_multipole.cpp index e40d368f0c..f58395aa1c 100644 --- a/src/AMOEBA/amoeba_multipole.cpp +++ b/src/AMOEBA/amoeba_multipole.cpp @@ -18,14 +18,11 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/AMOEBA/amoeba_polar.cpp b/src/AMOEBA/amoeba_polar.cpp index 9342b6213d..4d143c7a22 100644 --- a/src/AMOEBA/amoeba_polar.cpp +++ b/src/AMOEBA/amoeba_polar.cpp @@ -18,10 +18,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_repulsion.cpp b/src/AMOEBA/amoeba_repulsion.cpp index 30e9a8635e..789674bb8d 100644 --- a/src/AMOEBA/amoeba_repulsion.cpp +++ b/src/AMOEBA/amoeba_repulsion.cpp @@ -16,7 +16,6 @@ #include "atom.h" #include "comm.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_utils.cpp b/src/AMOEBA/amoeba_utils.cpp index 6f15150040..5a4057930c 100644 --- a/src/AMOEBA/amoeba_utils.cpp +++ b/src/AMOEBA/amoeba_utils.cpp @@ -15,7 +15,6 @@ #include "pair_amoeba.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "error.h" #include "fix_store_peratom.h" diff --git a/src/AMOEBA/improper_amoeba.cpp b/src/AMOEBA/improper_amoeba.cpp index 44f42d9964..b1e403da78 100644 --- a/src/AMOEBA/improper_amoeba.cpp +++ b/src/AMOEBA/improper_amoeba.cpp @@ -22,7 +22,6 @@ #include "memory.h" #include "neighbor.h" #include "pair.h" -#include "update.h" #include diff --git a/src/AMOEBA/pair_amoeba.cpp b/src/AMOEBA/pair_amoeba.cpp index 652d570019..91febc611e 100644 --- a/src/AMOEBA/pair_amoeba.cpp +++ b/src/AMOEBA/pair_amoeba.cpp @@ -19,25 +19,20 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "fft3d_wrap.h" #include "fix.h" #include "fix_store_peratom.h" #include "force.h" -#include "gridcomm.h" #include "group.h" #include "math_special.h" #include "memory.h" #include "modify.h" #include "my_page.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" -#include "utils.h" -#include +#include #include -#include using namespace LAMMPS_NS; diff --git a/src/BPM/atom_vec_bpm_sphere.cpp b/src/BPM/atom_vec_bpm_sphere.cpp index f0cac301f4..3d2ced5429 100644 --- a/src/BPM/atom_vec_bpm_sphere.cpp +++ b/src/BPM/atom_vec_bpm_sphere.cpp @@ -20,7 +20,6 @@ #include "fix_adapt.h" #include "math_const.h" #include "modify.h" -#include "utils.h" #include diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 7772e13fe5..e745349859 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -25,8 +25,6 @@ #include "modify.h" #include "update.h" -#include - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index feebbdb2b2..cc2e46d5d3 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -16,8 +16,6 @@ #include "bond.h" -#include - namespace LAMMPS_NS { class BondBPM : public Bond { diff --git a/src/BPM/compute_nbond_atom.cpp b/src/BPM/compute_nbond_atom.cpp index f63bbf69e5..4f0fc4c3f0 100644 --- a/src/BPM/compute_nbond_atom.cpp +++ b/src/BPM/compute_nbond_atom.cpp @@ -15,12 +15,8 @@ #include "atom.h" #include "comm.h" -#include "error.h" #include "force.h" #include "memory.h" -#include "update.h" - -#include using namespace LAMMPS_NS; @@ -29,7 +25,7 @@ using namespace LAMMPS_NS; ComputeNBondAtom::ComputeNBondAtom(LAMMPS *_lmp, int narg, char **arg) : Compute(_lmp, narg, arg), nbond(nullptr) { - if (narg < 3) error->all(FLERR, "Illegal compute nbond/atom command"); + if (narg < 3) utils::missing_cmd_args(FLERR, "compute nbond/atom", error); peratom_flag = 1; size_peratom_cols = 0; diff --git a/src/BPM/fix_nve_bpm_sphere.cpp b/src/BPM/fix_nve_bpm_sphere.cpp index cf57092ca5..ceab07822e 100644 --- a/src/BPM/fix_nve_bpm_sphere.cpp +++ b/src/BPM/fix_nve_bpm_sphere.cpp @@ -14,13 +14,10 @@ #include "fix_nve_bpm_sphere.h" #include "atom.h" -#include "atom_vec.h" #include "domain.h" #include "error.h" -#include "force.h" #include "math_extra.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index da6d16819e..a52fb2ee26 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -20,7 +20,6 @@ #include "atom.h" #include "citeme.h" #include "comm.h" -#include "compute.h" #include "domain.h" #include "electrode_accel_interface.h" #include "electrode_math.h" @@ -37,12 +36,15 @@ #include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "pointers.h" #include "text_file_reader.h" #include "variable.h" +#include #include -#include +#include +#include +#include +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 02e4e35c42..e7490dbc70 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -29,7 +29,6 @@ FixStyle(electrode/conp, FixElectrodeConp); #include "electrode_accel_interface.h" #include "fix.h" -#include #include #include #include diff --git a/src/ELECTRODE/fix_electrode_thermo.cpp b/src/ELECTRODE/fix_electrode_thermo.cpp index 3bdf446f53..23ecba9eef 100644 --- a/src/ELECTRODE/fix_electrode_thermo.cpp +++ b/src/ELECTRODE/fix_electrode_thermo.cpp @@ -20,7 +20,6 @@ #include "atom.h" #include "error.h" #include "fix_electrode_conp.h" -#include "force.h" #include "input.h" #include "random_mars.h" #include "update.h" diff --git a/src/ELECTRODE/slab_2d.cpp b/src/ELECTRODE/slab_2d.cpp index dac6001f9b..dbf7549b26 100644 --- a/src/ELECTRODE/slab_2d.cpp +++ b/src/ELECTRODE/slab_2d.cpp @@ -18,12 +18,10 @@ #include "slab_2d.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "force.h" #include "kspace.h" #include "math_const.h" -#include "memory.h" using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/slab_dipole.cpp b/src/ELECTRODE/slab_dipole.cpp index 773d2a6bd6..4d73e18662 100644 --- a/src/ELECTRODE/slab_dipole.cpp +++ b/src/ELECTRODE/slab_dipole.cpp @@ -18,7 +18,6 @@ #include "slab_dipole.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "force.h" #include "kspace.h" diff --git a/src/ELECTRODE/wire_dipole.cpp b/src/ELECTRODE/wire_dipole.cpp index fc9cbc7014..5a3e3d976a 100644 --- a/src/ELECTRODE/wire_dipole.cpp +++ b/src/ELECTRODE/wire_dipole.cpp @@ -19,7 +19,6 @@ #include "atom.h" #include "comm.h" -#include "domain.h" #include "force.h" #include "math_const.h" diff --git a/src/EXTRA-COMPUTE/compute_basal_atom.cpp b/src/EXTRA-COMPUTE/compute_basal_atom.cpp index 90f5c8a33e..b149746fb4 100644 --- a/src/EXTRA-COMPUTE/compute_basal_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_basal_atom.cpp @@ -31,7 +31,6 @@ #include "update.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/EXTRA-COMPUTE/compute_born_matrix.cpp b/src/EXTRA-COMPUTE/compute_born_matrix.cpp index 8ad808c2f3..4eecbbfa14 100644 --- a/src/EXTRA-COMPUTE/compute_born_matrix.cpp +++ b/src/EXTRA-COMPUTE/compute_born_matrix.cpp @@ -33,10 +33,8 @@ #include "modify.h" #include "molecule.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "universe.h" #include "update.h" #include diff --git a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp index b33f58798f..eb93a31655 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp @@ -20,7 +20,6 @@ #include "error.h" #include "force.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" #include "neighbor.h" #include "pair.h" diff --git a/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp b/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp index c5fc68f258..f445b258b1 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp @@ -21,7 +21,6 @@ #include "math_const.h" #include "math_special.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" #include "neighbor.h" #include "pair.h" @@ -29,7 +28,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-COMPUTE/compute_stress_spherical.cpp b/src/EXTRA-COMPUTE/compute_stress_spherical.cpp index c8608e265a..6a6ec4745f 100644 --- a/src/EXTRA-COMPUTE/compute_stress_spherical.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_spherical.cpp @@ -19,19 +19,15 @@ #include "domain.h" #include "error.h" #include "force.h" -#include "lattice.h" #include "math_const.h" #include "math_special.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "update.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 3667cd3a20..a44d6414f7 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -36,7 +36,6 @@ #include "update.h" #include "variable.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/EXTRA-FIX/fix_viscous_sphere.cpp b/src/EXTRA-FIX/fix_viscous_sphere.cpp index 14bb03d1aa..5b4dd72231 100644 --- a/src/EXTRA-FIX/fix_viscous_sphere.cpp +++ b/src/EXTRA-FIX/fix_viscous_sphere.cpp @@ -14,11 +14,9 @@ #include "fix_viscous_sphere.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "input.h" #include "memory.h" -#include "modify.h" #include "respa.h" #include "update.h" #include "variable.h" diff --git a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp index 8e4d1033fe..206ad4f3ad 100644 --- a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp +++ b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp @@ -25,7 +25,6 @@ #include "force.h" #include "memory.h" #include "neighbor.h" -#include "domain.h" #include diff --git a/src/FEP/compute_fep_ta.cpp b/src/FEP/compute_fep_ta.cpp index 9782835945..786bf53bfa 100644 --- a/src/FEP/compute_fep_ta.cpp +++ b/src/FEP/compute_fep_ta.cpp @@ -30,7 +30,6 @@ #include "kspace.h" #include "memory.h" #include "modify.h" -#include "neighbor.h" #include "pair.h" #include "timer.h" #include "update.h" diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index 26c918158e..53b83236ba 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -17,10 +17,9 @@ #include "../version.h" -#include -#include -#include -#include +#include +#include +#include #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 3b36f45500..c6d3f1838e 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -26,7 +26,6 @@ #include "force.h" #include "group.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "special.h" diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index c9658acbd7..fafcf52bd9 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -23,6 +23,7 @@ FixStyle(BOND_HISTORY,FixBondHistory); #include "fix.h" #include +#include namespace LAMMPS_NS { diff --git a/src/fix_nve.cpp b/src/fix_nve.cpp index af87eb42d8..30c1f24867 100644 --- a/src/fix_nve.cpp +++ b/src/fix_nve.cpp @@ -15,7 +15,6 @@ #include "fix_nve.h" #include "atom.h" -#include "error.h" #include "force.h" #include "respa.h" #include "update.h" diff --git a/src/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp index b96b079846..46e7eac699 100644 --- a/src/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -19,7 +19,6 @@ #include "force.h" #include "modify.h" #include "neigh_list.h" -#include "neighbor.h" #include "pair.h" #include diff --git a/src/info.cpp b/src/info.cpp index 92ae524239..cd1b2eddf6 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -63,7 +63,9 @@ #endif #if defined(__linux__) +#include #include +#include #endif namespace LAMMPS_NS { diff --git a/src/pair_zero.cpp b/src/pair_zero.cpp index 3e4785b2fb..c62479d1c4 100644 --- a/src/pair_zero.cpp +++ b/src/pair_zero.cpp @@ -21,7 +21,6 @@ #include "comm.h" #include "error.h" #include "memory.h" -#include "neigh_list.h" #include "neighbor.h" #include diff --git a/src/platform.cpp b/src/platform.cpp index 2d9c3aa6a8..861e3d7722 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -16,6 +16,8 @@ * the "utils" namespace with convenience and utility functions. */ #include "platform.h" + +#include "fmt/format.h" #include "text_file_reader.h" #include "utils.h" diff --git a/src/read_data.cpp b/src/read_data.cpp index 5317a4217a..9d9d7139a5 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -41,6 +41,7 @@ #include #include +#include #include using namespace LAMMPS_NS; diff --git a/src/region_ellipsoid.cpp b/src/region_ellipsoid.cpp index a84bb61242..9a3b77bd8f 100644 --- a/src/region_ellipsoid.cpp +++ b/src/region_ellipsoid.cpp @@ -16,7 +16,6 @@ #include "domain.h" #include "error.h" #include "input.h" -#include "update.h" #include "variable.h" #include diff --git a/src/reset_atoms_image.cpp b/src/reset_atoms_image.cpp index 5f02ced963..56a1bf9f99 100644 --- a/src/reset_atoms_image.cpp +++ b/src/reset_atoms_image.cpp @@ -25,7 +25,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/timer.cpp b/src/timer.cpp index 23f060491e..5bc397714a 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -18,6 +18,7 @@ #include "fmt/chrono.h" #include +#include using namespace LAMMPS_NS; From b30ce3ff32de9b24de588fac055e56576e337e08 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 01:07:46 -0500 Subject: [PATCH 20/46] next round of IWYU updates --- src/BPM/bond_bpm.cpp | 3 +++ src/BPM/bond_bpm_rotational.cpp | 2 +- src/BPM/bond_bpm_spring.cpp | 3 +++ src/BPM/pair_bpm_spring.cpp | 3 ++- src/BROWNIAN/fix_brownian_asphere.cpp | 2 ++ src/CORESHELL/compute_temp_cs.cpp | 3 --- src/DIELECTRIC/msm_dielectric.cpp | 1 - src/DIELECTRIC/pppm_dielectric.cpp | 2 -- src/DIELECTRIC/pppm_disp_dielectric.cpp | 1 - src/EFF/atom_vec_electron.cpp | 2 ++ src/ELECTRODE/electrode_matrix.cpp | 3 +++ src/ELECTRODE/electrode_vector.cpp | 3 +++ src/ELECTRODE/ewald_electrode.cpp | 2 +- src/ELECTRODE/fix_electrode_conp.h | 15 ++++++++++----- src/ELECTRODE/fix_electrode_thermo.cpp | 2 ++ src/ELECTRODE/slab_2d.cpp | 2 ++ src/ELECTRODE/slab_dipole.cpp | 2 ++ src/EXTRA-DUMP/dump_yaml.cpp | 2 ++ src/GRANULAR/compute_contact_atom.cpp | 2 -- src/GRANULAR/pair_gran_hooke_history.cpp | 1 - src/GRANULAR/pair_granular.cpp | 1 - src/INTERLAYER/pair_drip.cpp | 1 - src/INTERLAYER/pair_ilp_tmd.cpp | 3 --- src/INTERLAYER/pair_saip_metal.cpp | 2 -- src/KSPACE/pppm.h | 2 +- src/MACHDYN/atom_vec_smd.cpp | 2 ++ src/MANYBODY/pair_bop.cpp | 1 - src/MANYBODY/pair_extep.cpp | 1 - src/MC/fix_mol_swap.cpp | 1 + src/MISC/pair_srp_react.cpp | 3 --- src/MISC/pair_tracker.cpp | 2 +- src/ML-IAP/pair_mliap.cpp | 2 -- src/ML-POD/fitpod_command.cpp | 10 ---------- src/ML-POD/pair_pod.cpp | 5 ----- src/ML-SNAP/compute_grid.cpp | 4 ---- src/ML-SNAP/compute_grid_local.cpp | 4 ---- src/ML-SNAP/compute_sna_grid.cpp | 2 -- src/ML-SNAP/compute_sna_grid_local.cpp | 2 -- src/MOLECULE/angle_cosine.cpp | 1 + src/MOLECULE/angle_harmonic.cpp | 1 + src/OPT/pair_ilp_graphene_hbn_opt.cpp | 4 +--- src/OPT/pair_ilp_tmd_opt.cpp | 7 ------- src/OPT/pair_saip_metal_opt.cpp | 7 ------- src/PERI/fix_peri_neigh.cpp | 1 - src/PHONON/third_order.cpp | 1 - src/PLUGIN/plugin.cpp | 1 - src/REACTION/fix_bond_react.cpp | 2 +- src/REPLICA/hyper.cpp | 1 - src/SPH/atom_vec_sph.cpp | 2 ++ src/SPIN/atom_vec_spin.cpp | 1 + src/SPIN/fix_setforce_spin.cpp | 1 - src/SPIN/pair_spin.cpp | 1 - src/reader_native.cpp | 1 + src/text_file_reader.h | 1 + src/thermo.cpp | 1 + 55 files changed, 53 insertions(+), 85 deletions(-) diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index e745349859..4d65fe7684 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -25,6 +25,9 @@ #include "modify.h" #include "update.h" +#include +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 93ea2aafaf..3085488ef9 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -19,13 +19,13 @@ #include "error.h" #include "fix_bond_history.h" #include "force.h" -#include "math_const.h" #include "math_extra.h" #include "memory.h" #include "modify.h" #include "neighbor.h" #include +#include #define EPSILON 1e-10 diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 9832aab0e2..ed4e71daf1 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -23,6 +23,9 @@ #include "modify.h" #include "neighbor.h" +#include +#include + #define EPSILON 1e-10 using namespace LAMMPS_NS; diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index d58f087a02..1177156359 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -19,7 +19,8 @@ #include "force.h" #include "memory.h" #include "neigh_list.h" -#include "neighbor.h" + +#include using namespace LAMMPS_NS; diff --git a/src/BROWNIAN/fix_brownian_asphere.cpp b/src/BROWNIAN/fix_brownian_asphere.cpp index 4ff678866c..5ce57df7ce 100644 --- a/src/BROWNIAN/fix_brownian_asphere.cpp +++ b/src/BROWNIAN/fix_brownian_asphere.cpp @@ -27,6 +27,8 @@ #include "math_extra.h" #include "random_mars.h" +#include + using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/CORESHELL/compute_temp_cs.cpp b/src/CORESHELL/compute_temp_cs.cpp index 2adb6c16ae..49e8a4dd47 100644 --- a/src/CORESHELL/compute_temp_cs.cpp +++ b/src/CORESHELL/compute_temp_cs.cpp @@ -31,9 +31,6 @@ #include "modify.h" #include "update.h" -#include - - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/DIELECTRIC/msm_dielectric.cpp b/src/DIELECTRIC/msm_dielectric.cpp index 4e157e9f2a..0e89ab8946 100644 --- a/src/DIELECTRIC/msm_dielectric.cpp +++ b/src/DIELECTRIC/msm_dielectric.cpp @@ -20,7 +20,6 @@ #include "atom.h" #include "atom_vec_dielectric.h" -#include "comm.h" #include "domain.h" #include "error.h" #include "gridcomm.h" diff --git a/src/DIELECTRIC/pppm_dielectric.cpp b/src/DIELECTRIC/pppm_dielectric.cpp index 1f01cda143..c2211828c8 100644 --- a/src/DIELECTRIC/pppm_dielectric.cpp +++ b/src/DIELECTRIC/pppm_dielectric.cpp @@ -20,10 +20,8 @@ #include "atom.h" #include "atom_vec_dielectric.h" -#include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "gridcomm.h" #include "math_const.h" #include "math_special.h" diff --git a/src/DIELECTRIC/pppm_disp_dielectric.cpp b/src/DIELECTRIC/pppm_disp_dielectric.cpp index 5ef35381d0..201e18145b 100644 --- a/src/DIELECTRIC/pppm_disp_dielectric.cpp +++ b/src/DIELECTRIC/pppm_disp_dielectric.cpp @@ -18,7 +18,6 @@ #include "pppm_disp_dielectric.h" -#include "angle.h" #include "atom.h" #include "atom_vec_dielectric.h" #include "domain.h" diff --git a/src/EFF/atom_vec_electron.cpp b/src/EFF/atom_vec_electron.cpp index c1bb93931d..d763ff0671 100644 --- a/src/EFF/atom_vec_electron.cpp +++ b/src/EFF/atom_vec_electron.cpp @@ -20,6 +20,8 @@ #include "atom.h" #include "citeme.h" +#include + using namespace LAMMPS_NS; static const char cite_user_eff_package[] = diff --git a/src/ELECTRODE/electrode_matrix.cpp b/src/ELECTRODE/electrode_matrix.cpp index 1362026eb3..5faac5a252 100644 --- a/src/ELECTRODE/electrode_matrix.cpp +++ b/src/ELECTRODE/electrode_matrix.cpp @@ -29,6 +29,9 @@ #include "neigh_list.h" #include "pair.h" +#include +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/electrode_vector.cpp b/src/ELECTRODE/electrode_vector.cpp index 1a1b877406..245ba57727 100644 --- a/src/ELECTRODE/electrode_vector.cpp +++ b/src/ELECTRODE/electrode_vector.cpp @@ -29,6 +29,9 @@ #include "neigh_list.h" #include "pair.h" +#include +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/ewald_electrode.cpp b/src/ELECTRODE/ewald_electrode.cpp index a0a081deb0..99266ed450 100644 --- a/src/ELECTRODE/ewald_electrode.cpp +++ b/src/ELECTRODE/ewald_electrode.cpp @@ -18,6 +18,7 @@ #include "ewald_electrode.h" #include "atom.h" +#include "boundary_correction.h" #include "comm.h" #include "domain.h" #include "error.h" @@ -32,7 +33,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index e7490dbc70..5d3131bcce 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -26,7 +26,6 @@ FixStyle(electrode/conp, FixElectrodeConp); #ifndef LMP_FIX_ELECTRODE_CONP_H #define LMP_FIX_ELECTRODE_CONP_H -#include "electrode_accel_interface.h" #include "fix.h" #include @@ -34,6 +33,12 @@ FixStyle(electrode/conp, FixElectrodeConp); #include namespace LAMMPS_NS { +// forward decls + +class ElectrodeAccelInterface; +class ElectrodeVector; +class NeighList; +class Pair; class FixElectrodeConp : public Fix { @@ -74,7 +79,7 @@ class FixElectrodeConp : public Fix { virtual std::vector constraint_projection(std::vector); virtual std::vector constraint_correction(std::vector); virtual void compute_macro_matrices(); - std::vector ele_ele_interaction(const std::vector&); + std::vector ele_ele_interaction(const std::vector &); std::vector group_psi; std::vector group_bits; std::vector groups; @@ -101,7 +106,7 @@ class FixElectrodeConp : public Fix { private: std::string output_file_inv, output_file_mat, output_file_vec; std::string input_file_inv, input_file_mat; - class ElectrodeVector *elyt_vector, *elec_vector; + ElectrodeVector *elyt_vector, *elec_vector; double **capacitance, **elastance; bool read_inv, read_mat, write_inv, write_mat, write_vec; bool matrix_algo, need_array_compute, need_elec_vector; @@ -120,8 +125,8 @@ class FixElectrodeConp : public Fix { void compute_sd_vectors(); void compute_sd_vectors_ffield(); int groupnum_from_name(char *); - class Pair *pair; - class NeighList *mat_neighlist, *vec_neighlist; + Pair *pair; + NeighList *mat_neighlist, *vec_neighlist; std::vector etypes; int mat_request, vec_request; void request_etypes_neighlists(); diff --git a/src/ELECTRODE/fix_electrode_thermo.cpp b/src/ELECTRODE/fix_electrode_thermo.cpp index 23ecba9eef..52c0a3ce4c 100644 --- a/src/ELECTRODE/fix_electrode_thermo.cpp +++ b/src/ELECTRODE/fix_electrode_thermo.cpp @@ -25,6 +25,8 @@ #include "update.h" #include "variable.h" +#include + using namespace LAMMPS_NS; #define NUM_GROUPS 2 diff --git a/src/ELECTRODE/slab_2d.cpp b/src/ELECTRODE/slab_2d.cpp index dbf7549b26..f38f22617d 100644 --- a/src/ELECTRODE/slab_2d.cpp +++ b/src/ELECTRODE/slab_2d.cpp @@ -23,6 +23,8 @@ #include "kspace.h" #include "math_const.h" +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/ELECTRODE/slab_dipole.cpp b/src/ELECTRODE/slab_dipole.cpp index 4d73e18662..d5f3eae7aa 100644 --- a/src/ELECTRODE/slab_dipole.cpp +++ b/src/ELECTRODE/slab_dipole.cpp @@ -23,6 +23,8 @@ #include "kspace.h" #include "math_const.h" +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-DUMP/dump_yaml.cpp b/src/EXTRA-DUMP/dump_yaml.cpp index 117fe84a4c..3c35ec43ba 100644 --- a/src/EXTRA-DUMP/dump_yaml.cpp +++ b/src/EXTRA-DUMP/dump_yaml.cpp @@ -20,6 +20,8 @@ #include "thermo.h" #include "update.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/GRANULAR/compute_contact_atom.cpp b/src/GRANULAR/compute_contact_atom.cpp index 1331901884..310fdb5a41 100644 --- a/src/GRANULAR/compute_contact_atom.cpp +++ b/src/GRANULAR/compute_contact_atom.cpp @@ -25,8 +25,6 @@ #include "neighbor.h" #include "update.h" -#include - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index 3d200d1ebc..e9506e8a03 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -27,7 +27,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 51963ae1ff..946e902dc5 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -32,7 +32,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" diff --git a/src/INTERLAYER/pair_drip.cpp b/src/INTERLAYER/pair_drip.cpp index 48bc2d9016..90773b4034 100644 --- a/src/INTERLAYER/pair_drip.cpp +++ b/src/INTERLAYER/pair_drip.cpp @@ -28,7 +28,6 @@ #include "force.h" #include "memory.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "potential_file_reader.h" diff --git a/src/INTERLAYER/pair_ilp_tmd.cpp b/src/INTERLAYER/pair_ilp_tmd.cpp index 8c9bd3b8a5..c024e23079 100644 --- a/src/INTERLAYER/pair_ilp_tmd.cpp +++ b/src/INTERLAYER/pair_ilp_tmd.cpp @@ -22,15 +22,12 @@ #include "atom.h" #include "citeme.h" -#include "comm.h" #include "error.h" #include "force.h" #include "interlayer_taper.h" #include "memory.h" #include "my_page.h" #include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" #include #include diff --git a/src/INTERLAYER/pair_saip_metal.cpp b/src/INTERLAYER/pair_saip_metal.cpp index 5a4225b0fc..05fbfbf7f4 100644 --- a/src/INTERLAYER/pair_saip_metal.cpp +++ b/src/INTERLAYER/pair_saip_metal.cpp @@ -26,8 +26,6 @@ #include "force.h" #include "interlayer_taper.h" #include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" #include #include diff --git a/src/KSPACE/pppm.h b/src/KSPACE/pppm.h index f974f4eb3f..bd17b38629 100644 --- a/src/KSPACE/pppm.h +++ b/src/KSPACE/pppm.h @@ -21,7 +21,7 @@ KSpaceStyle(pppm,PPPM); #define LMP_PPPM_H #include "kspace.h" -#include "lmpfftsettings.h" +#include "lmpfftsettings.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/MACHDYN/atom_vec_smd.cpp b/src/MACHDYN/atom_vec_smd.cpp index 0a7126ee93..d1bae9ecb7 100644 --- a/src/MACHDYN/atom_vec_smd.cpp +++ b/src/MACHDYN/atom_vec_smd.cpp @@ -26,6 +26,8 @@ #include "atom.h" +#include + using namespace LAMMPS_NS; #define NMAT_FULL 9 diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 69557a425e..f8c119c436 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -40,7 +40,6 @@ #include "atom.h" #include "comm.h" -#include "domain.h" #include "error.h" #include "force.h" #include "math_special.h" diff --git a/src/MANYBODY/pair_extep.cpp b/src/MANYBODY/pair_extep.cpp index 30d8dc44f9..6a3b302fc1 100644 --- a/src/MANYBODY/pair_extep.cpp +++ b/src/MANYBODY/pair_extep.cpp @@ -32,7 +32,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index f6e421fa66..9fa22542b9 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -33,6 +33,7 @@ #include "update.h" #include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/MISC/pair_srp_react.cpp b/src/MISC/pair_srp_react.cpp index 38a09a7d1b..f8cbafaca9 100644 --- a/src/MISC/pair_srp_react.cpp +++ b/src/MISC/pair_srp_react.cpp @@ -34,14 +34,11 @@ There is an example script for this package in examples/PACKAGES/srp_react/. #include "error.h" #include "fix_srp_react.h" #include "force.h" -#include "memory.h" #include "modify.h" -#include "neigh_list.h" #include "neighbor.h" #include "output.h" #include "thermo.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index c994b02df5..1a9fb1f7c7 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -27,8 +27,8 @@ #include "neighbor.h" #include "tokenizer.h" #include "update.h" -#include "utils.h" +#include #include using namespace LAMMPS_NS; diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index 38d98510ce..a79a8c0627 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -30,12 +30,10 @@ #endif #include "atom.h" -#include "comm.h" #include "error.h" #include "force.h" #include "memory.h" #include "neighbor.h" -#include "neigh_request.h" #include #include diff --git a/src/ML-POD/fitpod_command.cpp b/src/ML-POD/fitpod_command.cpp index 272c5fe4df..97ef93ab91 100644 --- a/src/ML-POD/fitpod_command.cpp +++ b/src/ML-POD/fitpod_command.cpp @@ -19,26 +19,16 @@ #include "mlpod.h" -#include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" -#include "math_const.h" #include "math_special.h" #include "memory.h" -#include "modify.h" -#include "neigh_list.h" -#include "neighbor.h" -#include "pair.h" #include "tokenizer.h" -#include "update.h" #include #include #include -#include #include -#include using namespace LAMMPS_NS; using MathSpecial::powint; diff --git a/src/ML-POD/pair_pod.cpp b/src/ML-POD/pair_pod.cpp index aaf8f730a4..d106b11a18 100644 --- a/src/ML-POD/pair_pod.cpp +++ b/src/ML-POD/pair_pod.cpp @@ -23,14 +23,9 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "math_const.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" -#include "tokenizer.h" - -#include -#include using namespace LAMMPS_NS; diff --git a/src/ML-SNAP/compute_grid.cpp b/src/ML-SNAP/compute_grid.cpp index 797020013c..d70344e1fb 100644 --- a/src/ML-SNAP/compute_grid.cpp +++ b/src/ML-SNAP/compute_grid.cpp @@ -13,14 +13,10 @@ #include "compute_grid.h" -#include "atom.h" #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "modify.h" -#include "update.h" #include diff --git a/src/ML-SNAP/compute_grid_local.cpp b/src/ML-SNAP/compute_grid_local.cpp index 6f15186625..36c4d25305 100644 --- a/src/ML-SNAP/compute_grid_local.cpp +++ b/src/ML-SNAP/compute_grid_local.cpp @@ -13,14 +13,10 @@ #include "compute_grid_local.h" -#include "atom.h" #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "modify.h" -#include "update.h" #include diff --git a/src/ML-SNAP/compute_sna_grid.cpp b/src/ML-SNAP/compute_sna_grid.cpp index f209cf9fe8..2e2f0cbb66 100644 --- a/src/ML-SNAP/compute_sna_grid.cpp +++ b/src/ML-SNAP/compute_sna_grid.cpp @@ -16,13 +16,11 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" #include "memory.h" #include "modify.h" #include "sna.h" #include "update.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/ML-SNAP/compute_sna_grid_local.cpp b/src/ML-SNAP/compute_sna_grid_local.cpp index b74fbe59e5..09c989bffb 100644 --- a/src/ML-SNAP/compute_sna_grid_local.cpp +++ b/src/ML-SNAP/compute_sna_grid_local.cpp @@ -16,13 +16,11 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" #include "memory.h" #include "modify.h" #include "sna.h" #include "update.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/MOLECULE/angle_cosine.cpp b/src/MOLECULE/angle_cosine.cpp index b547345b1f..86d67f94aa 100644 --- a/src/MOLECULE/angle_cosine.cpp +++ b/src/MOLECULE/angle_cosine.cpp @@ -23,6 +23,7 @@ #include "neighbor.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/MOLECULE/angle_harmonic.cpp b/src/MOLECULE/angle_harmonic.cpp index ddcf44ff45..4d0683b9bc 100644 --- a/src/MOLECULE/angle_harmonic.cpp +++ b/src/MOLECULE/angle_harmonic.cpp @@ -23,6 +23,7 @@ #include "neighbor.h" #include +#include using namespace LAMMPS_NS; using MathConst::DEG2RAD; diff --git a/src/OPT/pair_ilp_graphene_hbn_opt.cpp b/src/OPT/pair_ilp_graphene_hbn_opt.cpp index b93979b3f7..586c44be08 100644 --- a/src/OPT/pair_ilp_graphene_hbn_opt.cpp +++ b/src/OPT/pair_ilp_graphene_hbn_opt.cpp @@ -23,17 +23,15 @@ #include "atom.h" #include "citeme.h" -#include "comm.h" #include "error.h" #include "force.h" #include "interlayer_taper.h" #include "memory.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include -#include +#include using namespace LAMMPS_NS; using namespace InterLayer; diff --git a/src/OPT/pair_ilp_tmd_opt.cpp b/src/OPT/pair_ilp_tmd_opt.cpp index 4a394ea5b8..834f2a0c9f 100644 --- a/src/OPT/pair_ilp_tmd_opt.cpp +++ b/src/OPT/pair_ilp_tmd_opt.cpp @@ -33,17 +33,10 @@ #include "pair_ilp_tmd_opt.h" #include "atom.h" -#include "citeme.h" #include "comm.h" -#include "error.h" -#include "force.h" #include "interlayer_taper.h" #include "memory.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/OPT/pair_saip_metal_opt.cpp b/src/OPT/pair_saip_metal_opt.cpp index d63294a5c4..e64b3a189e 100644 --- a/src/OPT/pair_saip_metal_opt.cpp +++ b/src/OPT/pair_saip_metal_opt.cpp @@ -34,17 +34,10 @@ #include "pair_saip_metal_opt.h" #include "atom.h" -#include "citeme.h" #include "comm.h" -#include "error.h" -#include "force.h" #include "interlayer_taper.h" #include "memory.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/PERI/fix_peri_neigh.cpp b/src/PERI/fix_peri_neigh.cpp index 71542b78c5..3d965b7280 100644 --- a/src/PERI/fix_peri_neigh.cpp +++ b/src/PERI/fix_peri_neigh.cpp @@ -27,7 +27,6 @@ #include "comm.h" #include "neighbor.h" #include "neigh_list.h" -#include "neigh_request.h" #include "pair.h" #include "lattice.h" #include "memory.h" diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index b7bba13c9f..4a8948de77 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -34,7 +34,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "timer.h" diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 6cb8c14b8a..f4a0903be4 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -21,7 +21,6 @@ #include "force.h" #include "input.h" #include "modify.h" -#include "region.h" #include #include diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 0f684a68c0..87d83da1ae 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -35,7 +35,6 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include "modify.h" #include "molecule.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "random_mars.h" @@ -52,6 +51,7 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include #include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index f045ae7a43..2c7d13766f 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -22,7 +22,6 @@ #include "fix_event_hyper.h" #include "fix_hyper.h" #include "integrate.h" -#include "memory.h" #include "min.h" #include "modify.h" #include "neighbor.h" diff --git a/src/SPH/atom_vec_sph.cpp b/src/SPH/atom_vec_sph.cpp index c27a53069e..8d92558655 100644 --- a/src/SPH/atom_vec_sph.cpp +++ b/src/SPH/atom_vec_sph.cpp @@ -15,6 +15,8 @@ #include "atom.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 5534f148d3..9a7e4c6aac 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -28,6 +28,7 @@ #include "atom.h" #include +#include using namespace LAMMPS_NS; diff --git a/src/SPIN/fix_setforce_spin.cpp b/src/SPIN/fix_setforce_spin.cpp index b54dbf1b7e..156fe6afbe 100644 --- a/src/SPIN/fix_setforce_spin.cpp +++ b/src/SPIN/fix_setforce_spin.cpp @@ -24,7 +24,6 @@ #include "fix_setforce_spin.h" #include "atom.h" -#include "domain.h" #include "input.h" #include "memory.h" #include "modify.h" diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index 15446a2b83..909d9a977a 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -32,7 +32,6 @@ #include "math_const.h" #include "memory.h" #include "modify.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "update.h" diff --git a/src/reader_native.cpp b/src/reader_native.cpp index e2bc74d64a..3e7d01550d 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -19,6 +19,7 @@ #include "tokenizer.h" #include +#include #include using namespace LAMMPS_NS; diff --git a/src/text_file_reader.h b/src/text_file_reader.h index a725a6f81b..78d8802c1d 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -21,6 +21,7 @@ #include "tokenizer.h" // IWYU pragma: export #include +#include namespace LAMMPS_NS { class TextFileReader { diff --git a/src/thermo.cpp b/src/thermo.cpp index 8dccceae8d..122463a25f 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -47,6 +47,7 @@ #include #include +#include using namespace LAMMPS_NS; using namespace MathConst; From ebcb702e954b8069ed51bbed5524a8fa3f7db1d6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 07:07:06 -0500 Subject: [PATCH 21/46] remove dead code detected by clang 15 --- src/COLLOID/pair_brownian.cpp | 8 -------- src/COLLOID/pair_brownian_poly.cpp | 5 ----- src/DIFFRACTION/fix_saed_vtk.cpp | 6 ------ src/DPD-REACT/fix_rx.cpp | 2 -- src/EFF/compute_temp_region_eff.cpp | 6 ------ src/ELECTRODE/fix_electrode_conp.cpp | 3 +-- src/KSPACE/ewald_disp.cpp | 3 +-- src/OPENMP/pair_brownian_omp.cpp | 5 ----- src/OPENMP/pair_brownian_poly_omp.cpp | 5 ----- src/OPENMP/pair_lubricate_omp.cpp | 6 ------ src/OPENMP/pair_lubricate_poly_omp.cpp | 6 ------ src/OPENMP/reaxff_hydrogen_bonds_omp.cpp | 2 -- src/REAXFF/pair_reaxff.cpp | 10 ++-------- src/REAXFF/reaxff_hydrogen_bonds.cpp | 2 -- src/REAXFF/reaxff_torsion_angles.cpp | 2 -- src/RIGID/fix_shake.cpp | 2 -- 16 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/COLLOID/pair_brownian.cpp b/src/COLLOID/pair_brownian.cpp index 4d17fddc5d..4d78145207 100644 --- a/src/COLLOID/pair_brownian.cpp +++ b/src/COLLOID/pair_brownian.cpp @@ -92,7 +92,6 @@ void PairBrownian::compute(int eflag, int vflag) double prethermostat; double xl[3], a_sq, a_sh, a_pu, Fbmag; double p1[3], p2[3], p3[3]; - int overlaps = 0; // This section of code adjusts R0/RT0/RS0 if necessary due to changes // in the volume fraction as a result of fix deform or moving walls @@ -187,10 +186,6 @@ void PairBrownian::compute(int eflag, int vflag) h_sep = r - 2.0 * radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) h_sep = cut_inner[itype][jtype] - 2.0 * radi; @@ -336,9 +331,6 @@ void PairBrownian::compute(int eflag, int vflag) } } - int print_overlaps = 0; - if (print_overlaps && overlaps) printf("Number of overlaps=%d\n", overlaps); - if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/COLLOID/pair_brownian_poly.cpp b/src/COLLOID/pair_brownian_poly.cpp index c356669f3f..2654410c03 100644 --- a/src/COLLOID/pair_brownian_poly.cpp +++ b/src/COLLOID/pair_brownian_poly.cpp @@ -72,7 +72,6 @@ void PairBrownianPoly::compute(int eflag, int vflag) int nlocal = atom->nlocal; double vxmu2f = force->vxmu2f; - int overlaps = 0; double randr; double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; @@ -176,10 +175,6 @@ void PairBrownianPoly::compute(int eflag, int vflag) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/DIFFRACTION/fix_saed_vtk.cpp b/src/DIFFRACTION/fix_saed_vtk.cpp index 6bbfe5ae0d..b3f6693e9e 100644 --- a/src/DIFFRACTION/fix_saed_vtk.cpp +++ b/src/DIFFRACTION/fix_saed_vtk.cpp @@ -407,7 +407,6 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) // Finding the intersection of the reciprical space and Ewald sphere int NROW1 = 0; - int NROW2 = 0; double dinv2 = 0.0; double r = 0.0; double K[3]; @@ -425,11 +424,9 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) fprintf(fp,"%g\n",vector_total[NROW1]/norm); fflush(fp); NROW1++; - NROW2++; } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } } @@ -449,17 +446,14 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) if ( (r > (R_Ewald - dR_Ewald) ) && (r < (R_Ewald + dR_Ewald) )) { fprintf(fp,"%g\n",vector_total[NROW1]/norm); fflush(fp); - NROW2++; NROW1++; } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } } diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index 9939a19bb3..96eb9d4572 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -390,7 +390,6 @@ void FixRX::initSparse() int mxprod = 0; int mxreac = 0; int mxspec = 0; - int nIntegral = 0; for (int i = 0; i < nreactions; ++i) { int nreac_i = 0, nprod_i = 0; std::string pstr, rstr; @@ -430,7 +429,6 @@ void FixRX::initSparse() mxreac = std::max( mxreac, nreac_i ); mxprod = std::max( mxprod, nprod_i ); mxspec = std::max( mxspec, nreac_i + nprod_i ); - if (allAreIntegral) nIntegral++; } if (comm->me == 0 && Verbosity > 1) { diff --git a/src/EFF/compute_temp_region_eff.cpp b/src/EFF/compute_temp_region_eff.cpp index e41adeb5c2..ff20d48124 100644 --- a/src/EFF/compute_temp_region_eff.cpp +++ b/src/EFF/compute_temp_region_eff.cpp @@ -141,12 +141,6 @@ double ComputeTempRegionEff::compute_scalar() if (dof < 0.0 && tarray_all[0] > 0.0) error->all(FLERR, "Temperature compute degrees of freedom < 0"); - int one = 0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0], x[i][1], x[i][2])) { - if (abs(spin[i]) == 1) one++; - } - if (dof > 0.0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz); else diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index a52fb2ee26..2c39a57532 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -1417,14 +1417,13 @@ void FixElectrodeConp::gather_list_iele() } taglist_local.clear(); iele_to_group_local.clear(); - for (int i = 0, iele = 0; i < nlocal; i++) { + for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { tagint const t = tag[i]; if (matrix_algo) list_iele.push_back(tag_to_iele[t]); taglist_local.push_back(t); for (int g = 0; g < num_of_groups; g++) if (mask[i] & group_bits[g]) iele_to_group_local.push_back(g); - iele++; } } nlocalele = static_cast(taglist_local.size()); // just for safety diff --git a/src/KSPACE/ewald_disp.cpp b/src/KSPACE/ewald_disp.cpp index 7943ffd194..43b5c8840b 100644 --- a/src/KSPACE/ewald_disp.cpp +++ b/src/KSPACE/ewald_disp.cpp @@ -1209,7 +1209,7 @@ void EwaldDisp::compute_virial_dipole() double *ke, c[EWALD_NFUNCS] = { 8.0*MY_PI*qscale/volume, 2.0*MY_PI*MY_PIS/(12.0*volume), 2.0*MY_PI*MY_PIS/(192.0*volume), 8.0*MY_PI*mumurd2e/volume}; - int i, kx, ky, lbytes = (2*nbox+1)*sizeof(cvector), *type = atom->type; + int i, kx, ky, lbytes = (2*nbox+1)*sizeof(cvector); int func[EWALD_NFUNCS]; memcpy(func, function, EWALD_NFUNCS*sizeof(int)); @@ -1273,7 +1273,6 @@ void EwaldDisp::compute_virial_dipole() vatomj[n] -= mysum[n]; z = (cvector *) ((char *) z+lbytes); - ++type; if (vflag_atom) vatomj += 6; } diff --git a/src/OPENMP/pair_brownian_omp.cpp b/src/OPENMP/pair_brownian_omp.cpp index de095bb063..45288f13dd 100644 --- a/src/OPENMP/pair_brownian_omp.cpp +++ b/src/OPENMP/pair_brownian_omp.cpp @@ -197,7 +197,6 @@ void PairBrownianOMP::eval(int iifrom, int iito, ThrData * const thr) double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; double p1[3],p2[3],p3[3]; - int overlaps = 0; // scale factor for Brownian moments @@ -252,10 +251,6 @@ void PairBrownianOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - 2.0*radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_brownian_poly_omp.cpp b/src/OPENMP/pair_brownian_poly_omp.cpp index 2d28c47a1d..91a496979d 100644 --- a/src/OPENMP/pair_brownian_poly_omp.cpp +++ b/src/OPENMP/pair_brownian_poly_omp.cpp @@ -187,7 +187,6 @@ void PairBrownianPolyOMP::eval(int iifrom, int iito, ThrData * const thr) RanMars &rng = *random_thr[thr->get_tid()]; double vxmu2f = force->vxmu2f; - int overlaps = 0; double randr; double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; @@ -248,10 +247,6 @@ void PairBrownianPolyOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_lubricate_omp.cpp b/src/OPENMP/pair_lubricate_omp.cpp index 260fcdfdc7..2145744a5b 100644 --- a/src/OPENMP/pair_lubricate_omp.cpp +++ b/src/OPENMP/pair_lubricate_omp.cpp @@ -162,8 +162,6 @@ void PairLubricateOMP::eval(int iifrom, int iito, ThrData * const thr) const int * const type = atom->type; const int nlocal = atom->nlocal; - int overlaps = 0; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -317,10 +315,6 @@ void PairLubricateOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - 2.0*radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than the minimum gap use the minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_lubricate_poly_omp.cpp b/src/OPENMP/pair_lubricate_poly_omp.cpp index b4c2380532..5b98ec7b14 100644 --- a/src/OPENMP/pair_lubricate_poly_omp.cpp +++ b/src/OPENMP/pair_lubricate_poly_omp.cpp @@ -163,8 +163,6 @@ void PairLubricatePolyOMP::eval(int iifrom, int iito, ThrData * const thr) const int * const type = atom->type; const int nlocal = atom->nlocal; - int overlaps = 0; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -322,10 +320,6 @@ void PairLubricatePolyOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than the minimum gap use the minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp b/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp index e8db77389f..6e1db5ffe7 100644 --- a/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp +++ b/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp @@ -56,7 +56,6 @@ namespace ReaxFF { int start_j, end_j, hb_start_j, hb_end_j; int hblist[MAX_BONDS]; int itr, top; - int num_hb_intrs = 0; double r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2; double e_hb, e_hb_thr = 0.0, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3; rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk; @@ -140,7 +139,6 @@ namespace ReaxFF { type_i = system->my_atoms[i].type; if (type_i < 0) continue; hbp = &(system->reax_param.hbp[type_i][type_j][type_k]); - ++num_hb_intrs; Calculate_Theta(pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk, &theta, &cos_theta); diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index 63c5e0d730..ef859a0cda 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -587,8 +587,8 @@ void PairReaxFF::set_far_nbr(far_neighbor_data *fdest, int PairReaxFF::estimate_reax_lists() { int itr_i, itr_j, i, j; - int num_nbrs, num_marked; - int *ilist, *jlist, *numneigh, **firstneigh, *marked; + int num_nbrs; + int *ilist, *jlist, *numneigh, **firstneigh; double d_sqr; rvec dvec; double **x; @@ -602,15 +602,11 @@ int PairReaxFF::estimate_reax_lists() firstneigh = list->firstneigh; num_nbrs = 0; - num_marked = 0; - marked = (int*) calloc(api->system->N, sizeof(int)); int numall = list->inum + list->gnum; for (itr_i = 0; itr_i < numall; ++itr_i) { i = ilist[itr_i]; - marked[i] = 1; - ++num_marked; jlist = firstneigh[i]; for (itr_j = 0; itr_j < numneigh[i]; ++itr_j) { @@ -623,8 +619,6 @@ int PairReaxFF::estimate_reax_lists() } } - free(marked); - return static_cast (MAX(num_nbrs*safezone, mincap*REAX_MIN_NBRS)); } diff --git a/src/REAXFF/reaxff_hydrogen_bonds.cpp b/src/REAXFF/reaxff_hydrogen_bonds.cpp index 5c7629ffb7..6f5c663da0 100644 --- a/src/REAXFF/reaxff_hydrogen_bonds.cpp +++ b/src/REAXFF/reaxff_hydrogen_bonds.cpp @@ -39,7 +39,6 @@ namespace ReaxFF { int start_j, end_j, hb_start_j, hb_end_j; int hblist[MAX_BONDS]; int itr, top; - int num_hb_intrs = 0; double r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2; double e_hb, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3; rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk; @@ -102,7 +101,6 @@ namespace ReaxFF { if (type_i < 0) continue; hbp = &(system->reax_param.hbp[type_i][type_j][type_k]); if (hbp->r0_hb <= 0.0) continue; - ++num_hb_intrs; Calculate_Theta(pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk, &theta, &cos_theta); diff --git a/src/REAXFF/reaxff_torsion_angles.cpp b/src/REAXFF/reaxff_torsion_angles.cpp index 2b94bf50ae..e9b6bc618d 100644 --- a/src/REAXFF/reaxff_torsion_angles.cpp +++ b/src/REAXFF/reaxff_torsion_angles.cpp @@ -119,7 +119,6 @@ namespace ReaxFF { int type_i, type_j, type_k, type_l; int start_j, end_j; int start_pj, end_pj, start_pk, end_pk; - int num_frb_intrs = 0; double Delta_j, Delta_k; double r_ij, r_jk, r_kl, r_li; @@ -242,7 +241,6 @@ namespace ReaxFF { if (i != l && fbh->cnt && bo_kl->BO > control->thb_cut/*0*/ && bo_ij->BO * bo_jk->BO * bo_kl->BO > control->thb_cut/*0*/) { - ++num_frb_intrs; r_kl = pbond_kl->d; BOA_kl = bo_kl->BO - control->thb_cut; diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 7c08ca7b4b..1678a36e02 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -869,13 +869,11 @@ void FixShake::find_clusters() // else it's an error flag = 0; - int flag2 = 0; for (i = 0; i < nlocal; i++) for (j = 0; j < npartner[i]; j++) { if (partner_type[i][j] == 0) flag++; if (!(mask[i] & groupbit)) continue; if (!(partner_mask[i][j] & groupbit)) continue; - if (partner_bondtype[i][j] == 0) flag2++; } MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); From 79ab63a33cf13c42bcfc2cfb44c1c92d7add018d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 09:45:29 -0500 Subject: [PATCH 22/46] a few more IWYU updates --- src/AMOEBA/fix_amoeba_bitorsion.h | 2 +- src/ML-IAP/mliap_model.h | 2 +- src/ML-IAP/mliap_model_python.cpp | 1 - src/OPENMP/fix_omp.cpp | 1 - src/compute_com_chunk.h | 5 +++-- src/compute_dipole_chunk.h | 5 +++-- src/text_file_reader.h | 1 + 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/AMOEBA/fix_amoeba_bitorsion.h b/src/AMOEBA/fix_amoeba_bitorsion.h index eac5eca260..c936fe987d 100644 --- a/src/AMOEBA/fix_amoeba_bitorsion.h +++ b/src/AMOEBA/fix_amoeba_bitorsion.h @@ -119,7 +119,7 @@ class FixAmoebaBiTorsion : public Fix { void chkttor(int, int, int, double &, double &, double &); void bcuint1(double *, double *, double *, double *, double, double, double, double, double, double, double &, double &, double &); - void bcucof(double *, double *, double *, double *, double, double, double[][4]); + void bcucof(double *, double *, double *, double *, double, double, double[4][4]); }; } // namespace LAMMPS_NS #endif diff --git a/src/ML-IAP/mliap_model.h b/src/ML-IAP/mliap_model.h index f2a6f4a998..0f7a8e8e4f 100644 --- a/src/ML-IAP/mliap_model.h +++ b/src/ML-IAP/mliap_model.h @@ -14,7 +14,7 @@ #ifndef LMP_MLIAP_MODEL_H #define LMP_MLIAP_MODEL_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/ML-IAP/mliap_model_python.cpp b/src/ML-IAP/mliap_model_python.cpp index e1859d8e1d..5bd6b45c92 100644 --- a/src/ML-IAP/mliap_model_python.cpp +++ b/src/ML-IAP/mliap_model_python.cpp @@ -26,7 +26,6 @@ #include "mliap_model_python_couple.h" #include "pair_mliap.h" #include "python_compat.h" -#include "utils.h" #include diff --git a/src/OPENMP/fix_omp.cpp b/src/OPENMP/fix_omp.cpp index 411b16441b..3a249bad82 100644 --- a/src/OPENMP/fix_omp.cpp +++ b/src/OPENMP/fix_omp.cpp @@ -25,7 +25,6 @@ #include "error.h" #include "force.h" #include "neighbor.h" -#include "neigh_request.h" #include "universe.h" #include "update.h" diff --git a/src/compute_com_chunk.h b/src/compute_com_chunk.h index bd7c8f6fe0..c617e181fe 100644 --- a/src/compute_com_chunk.h +++ b/src/compute_com_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(com/chunk,ComputeCOMChunk); #include "compute.h" namespace LAMMPS_NS { +class Fix; class ComputeCOMChunk : public Compute { public: @@ -38,8 +39,8 @@ class ComputeCOMChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/compute_dipole_chunk.h b/src/compute_dipole_chunk.h index df2a75712e..42198fe478 100644 --- a/src/compute_dipole_chunk.h +++ b/src/compute_dipole_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(dipole/chunk,ComputeDipoleChunk); #include "compute.h" namespace LAMMPS_NS { +class Fix; class ComputeDipoleChunk : public Compute { public: @@ -34,8 +35,8 @@ class ComputeDipoleChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/text_file_reader.h b/src/text_file_reader.h index 78d8802c1d..cc62471f66 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -22,6 +22,7 @@ #include #include +#include namespace LAMMPS_NS { class TextFileReader { From 4458c366767c5b076c63ff7294d8fcb2024fe1e7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 09:45:55 -0500 Subject: [PATCH 23/46] some more dead code removed that was detected by clang 15 --- src/AMOEBA/amoeba_dispersion.cpp | 2 -- src/compute_fragment_atom.cpp | 4 ---- src/image.cpp | 2 -- src/random_mars.cpp | 11 +---------- 4 files changed, 1 insertion(+), 18 deletions(-) diff --git a/src/AMOEBA/amoeba_dispersion.cpp b/src/AMOEBA/amoeba_dispersion.cpp index b8d2c48022..f3af921d85 100644 --- a/src/AMOEBA/amoeba_dispersion.cpp +++ b/src/AMOEBA/amoeba_dispersion.cpp @@ -18,10 +18,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index 177b62b5ac..a1fd19d7af 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -148,11 +148,7 @@ void ComputeFragmentAtom::compute_peratom() commflag = 1; - int iteration = 0; - while (true) { - iteration++; - comm->forward_comm(this); done = 1; diff --git a/src/image.cpp b/src/image.cpp index 8c503adf92..9587d4ca81 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -981,7 +981,6 @@ void Image::compute_SSAO() double minPeak = -1; double peakLen = 0.0; - int stepsTaken = 1; while ((small > 0 && ind <= end) || (small < 0 && ind >= end)) { if (ind < 0 || ind >= (width*height)) { break; @@ -1001,7 +1000,6 @@ void Image::compute_SSAO() ind += large; err -= 1.0; } - stepsTaken ++; } if (peakLen > 0) { diff --git a/src/random_mars.cpp b/src/random_mars.cpp index fc5418146a..8f1105e0d9 100644 --- a/src/random_mars.cpp +++ b/src/random_mars.cpp @@ -187,7 +187,7 @@ double RanMars::besselexp(double theta, double alpha, double cp) void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) { - int mode,index,oldindex,newvalue,nflip,which,niter; + int mode,index,oldindex,newvalue,nflip,which; int active[2],first[2]; int newactive[2],newfirst[2],newlast[2]; bigint nmark,nflipall; @@ -209,8 +209,6 @@ void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) if (nmine > 0) next[nmine-1] = -1; nmark = 0; - niter = 0; - while (nmark != ntarget) { // choose to ADD or SUBTRACT from current nmark @@ -285,13 +283,6 @@ void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) if (mode == ADD) nmark += nflipall; else if (mode == SUBTRACT) nmark -= nflipall; - - niter++; - - // DEBUG output of stats - - //if (comm->me == 0) printf("%d %ld %ld %g %ld\n", - // niter,nmark,nactiveall,thresh,nflipall); } } From 6d8e7e1ece25a9d53951e79d96bc7efa997ab59b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 12 Dec 2022 17:34:18 -0700 Subject: [PATCH 24/46] Refactor Kokkos AtomVec --- src/DPD-REACT/atom_vec_dpd.h | 2 +- src/KOKKOS/Install.sh | 4 +- src/KOKKOS/atom_kokkos.cpp | 13 +- src/KOKKOS/atom_kokkos.h | 2 + src/KOKKOS/atom_vec_angle_kokkos.cpp | 849 +--------------- src/KOKKOS/atom_vec_angle_kokkos.h | 33 +- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 477 +-------- src/KOKKOS/atom_vec_atomic_kokkos.h | 26 +- src/KOKKOS/atom_vec_bond_kokkos.cpp | 625 +----------- src/KOKKOS/atom_vec_bond_kokkos.h | 27 +- src/KOKKOS/atom_vec_charge_kokkos.cpp | 563 +---------- src/KOKKOS/atom_vec_charge_kokkos.h | 26 +- src/KOKKOS/atom_vec_dpd_kokkos.cpp | 944 +---------------- src/KOKKOS/atom_vec_dpd_kokkos.h | 34 +- src/KOKKOS/atom_vec_full_kokkos.cpp | 822 +-------------- src/KOKKOS/atom_vec_full_kokkos.h | 27 +- src/KOKKOS/atom_vec_hybrid_kokkos.cpp | 1125 +-------------------- src/KOKKOS/atom_vec_hybrid_kokkos.h | 36 +- src/KOKKOS/atom_vec_kokkos.cpp | 231 +---- src/KOKKOS/atom_vec_kokkos.h | 17 +- src/KOKKOS/atom_vec_molecular_kokkos.cpp | 963 +----------------- src/KOKKOS/atom_vec_molecular_kokkos.h | 33 +- src/KOKKOS/atom_vec_sphere_kokkos.cpp | 1181 +--------------------- src/KOKKOS/atom_vec_sphere_kokkos.h | 42 +- src/KOKKOS/atom_vec_spin_kokkos.cpp | 643 +----------- src/KOKKOS/atom_vec_spin_kokkos.h | 30 +- src/KOKKOS/comm_kokkos.cpp | 72 +- src/KOKKOS/comm_kokkos.h | 2 + src/MOLECULE/atom_vec_angle.h | 2 +- src/MOLECULE/atom_vec_bond.h | 2 +- src/MOLECULE/atom_vec_full.h | 2 +- src/MOLECULE/atom_vec_molecular.h | 2 +- src/SPIN/atom_vec_spin.h | 2 +- src/atom_vec.h | 15 - src/atom_vec_atomic.h | 2 +- src/atom_vec_charge.h | 2 +- src/atom_vec_hybrid.h | 2 +- src/atom_vec_sphere.h | 2 +- 38 files changed, 121 insertions(+), 8761 deletions(-) diff --git a/src/DPD-REACT/atom_vec_dpd.h b/src/DPD-REACT/atom_vec_dpd.h index 32bf9a25a8..2a45ad6997 100644 --- a/src/DPD-REACT/atom_vec_dpd.h +++ b/src/DPD-REACT/atom_vec_dpd.h @@ -24,7 +24,7 @@ AtomStyle(dpd,AtomVecDPD); namespace LAMMPS_NS { -class AtomVecDPD : public AtomVec { +class AtomVecDPD : virtual public AtomVec { public: AtomVecDPD(class LAMMPS *); diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index 5c46a89e26..b30461d5c6 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -64,8 +64,8 @@ action atom_vec_bond_kokkos.cpp atom_vec_bond.cpp action atom_vec_bond_kokkos.h atom_vec_bond.h action atom_vec_charge_kokkos.cpp action atom_vec_charge_kokkos.h -action atom_vec_spin_kokkos.cpp -action atom_vec_spin_kokkos.h +action atom_vec_spin_kokkos.cpp atom_vec_spin.cpp +action atom_vec_spin_kokkos.h atom_vec_spin.h action atom_vec_dpd_kokkos.cpp atom_vec_dpd.cpp action atom_vec_dpd_kokkos.h atom_vec_dpd.h action atom_vec_full_kokkos.cpp atom_vec_full.cpp diff --git a/src/KOKKOS/atom_kokkos.cpp b/src/KOKKOS/atom_kokkos.cpp index 1984d631c3..2de65e24fb 100644 --- a/src/KOKKOS/atom_kokkos.cpp +++ b/src/KOKKOS/atom_kokkos.cpp @@ -104,23 +104,23 @@ AtomKokkos::~AtomKokkos() void AtomKokkos::sync(const ExecutionSpace space, unsigned int mask) { - if (space == Device && lmp->kokkos->auto_sync) ((AtomVecKokkos *) avec)->modified(Host, mask); + if (space == Device && lmp->kokkos->auto_sync) avecKK->modified(Host, mask); - ((AtomVecKokkos *) avec)->sync(space, mask); + avecKK->sync(space, mask); } /* ---------------------------------------------------------------------- */ void AtomKokkos::modified(const ExecutionSpace space, unsigned int mask) { - ((AtomVecKokkos *) avec)->modified(space, mask); + avecKK->modified(space, mask); - if (space == Device && lmp->kokkos->auto_sync) ((AtomVecKokkos *) avec)->sync(Host, mask); + if (space == Device && lmp->kokkos->auto_sync) avecKK->sync(Host, mask); } void AtomKokkos::sync_overlapping_device(const ExecutionSpace space, unsigned int mask) { - ((AtomVecKokkos *) avec)->sync_overlapping_device(space, mask); + avecKK->sync_overlapping_device(space, mask); } /* ---------------------------------------------------------------------- */ @@ -380,5 +380,8 @@ AtomVec *AtomKokkos::new_avec(const std::string &style, int trysuffix, int &sfla { AtomVec *avec = Atom::new_avec(style, trysuffix, sflag); if (!avec->kokkosable) error->all(FLERR, "KOKKOS package requires a kokkos enabled atom_style"); + + avecKK = dynamic_cast(avec); + return avec; } diff --git a/src/KOKKOS/atom_kokkos.h b/src/KOKKOS/atom_kokkos.h index 8754c9bb51..08bfaf20cd 100644 --- a/src/KOKKOS/atom_kokkos.h +++ b/src/KOKKOS/atom_kokkos.h @@ -78,6 +78,8 @@ class AtomKokkos : public Atom { DAT::tdual_int_scalar k_error_flag; dual_hash_type k_map_hash; + class AtomVecKokkos* avecKK; + // map lookup function inlined for efficiency // return -1 if no map defined diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index ef020f8f75..23406415d0 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -27,27 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecAngle(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = angles_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->molecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - buffer = nullptr; } /* ---------------------------------------------------------------------- @@ -172,52 +155,6 @@ void AtomVecAngleKokkos::grow_pointers() h_angle_atom3 = atomKK->k_angle_atom3.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -508,171 +445,6 @@ void AtomVecAngleKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) - atomKK->modified(Host,F_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_PackBorder { typedef DeviceType device_type; @@ -774,149 +546,6 @@ int AtomVecAngleKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_UnpackBorder { typedef DeviceType device_type; @@ -977,78 +606,6 @@ void AtomVecAngleKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecAngleKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1245,50 +802,6 @@ int AtomVecAngleKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_ /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1416,361 +929,6 @@ int AtomVecAngleKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int n /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 14 + 2*h_num_bond(i) + 4*h_num_angle(i); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecAngleKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1826,6 +984,8 @@ void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) } } +/* ---------------------------------------------------------------------- */ + void AtomVecAngleKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1973,4 +1133,3 @@ void AtomVecAngleKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index 82b2c3f967..eba1d7ead2 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -24,41 +24,15 @@ AtomStyle(angle/kk/host,AtomVecAngleKokkos); #define LMP_ATOM_VEC_ANGLE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_angle.h" namespace LAMMPS_NS { -class AtomVecAngleKokkos : public AtomVecKokkos { +class AtomVecAngleKokkos : public AtomVecKokkos, public AtomVecAngle { public: AtomVecAngleKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -142,9 +116,6 @@ class AtomVecAngleKokkos : public AtomVecKokkos { HAT::t_int_1d h_num_angle; HAT::t_int_2d h_angle_type; HAT::t_tagint_2d h_angle_atom1,h_angle_atom2,h_angle_atom3; - - DAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index ace5878eb6..632383154a 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -27,23 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecAtomic(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_velocity = 3; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -113,28 +100,6 @@ void AtomVecAtomicKokkos::grow_pointers() h_f = atomKK->k_f.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -232,130 +197,6 @@ int AtomVecAtomicKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_UnpackBorder { typedef DeviceType device_type; @@ -408,63 +249,6 @@ void AtomVecAtomicKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecAtomicKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -568,30 +352,6 @@ int AtomVecAtomicKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -671,238 +431,6 @@ int AtomVecAtomicKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 11 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK ); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK ); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - //if(nlocal>2) printf("typeA: %i %i\n",type[0],type[1]); - atomKK->modified(Host,ALL_MASK); - grow(0); - //if(nlocal>2) printf("typeB: %i %i\n",type[0],type[1]); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((tagint) IMGMAX << IMG2BITS) | - ((tagint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_x(i,0); - buf[i][3] = h_x(i,1); - buf[i][4] = h_x(i,2); - buf[i][5] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][6] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4], - (int) buf[i][5],(int) buf[i][6],(int) buf[i][7]); -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecAtomicKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -983,4 +511,3 @@ void AtomVecAtomicKokkos::modified(ExecutionSpace space, unsigned int mask) if (mask & IMAGE_MASK) atomKK->k_image.modify(); } } - diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.h b/src/KOKKOS/atom_vec_atomic_kokkos.h index e152e68248..83c311483e 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.h +++ b/src/KOKKOS/atom_vec_atomic_kokkos.h @@ -24,31 +24,16 @@ AtomStyle(atomic/kk/host,AtomVecAtomicKokkos); #define LMP_ATOM_VEC_ATOMIC_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_atomic.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecAtomicKokkos : public AtomVecKokkos { +class AtomVecAtomicKokkos : public AtomVecKokkos, public AtomVecAtomic { public: AtomVecAtomicKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - void pack_data(double **) override; - void write_data(FILE *, int, double **) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -70,11 +55,6 @@ class AtomVecAtomicKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - imageint *image; - int *type,*mask; - double **x,**v,**f; - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; DAT::t_imageint_1d d_image; @@ -85,8 +65,6 @@ class AtomVecAtomicKokkos : public AtomVecKokkos { DAT::t_x_array d_x; DAT::t_v_array d_v; DAT::t_f_array d_f; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index 104800231e..17419c7338 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -27,26 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecBond(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->molecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -142,43 +126,6 @@ void AtomVecBondKokkos::grow_pointers() h_bond_atom = atomKK->k_bond_atom.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) h_special(j,k) = h_special(i,k); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -282,149 +229,6 @@ int AtomVecBondKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_UnpackBorder { typedef DeviceType device_type; @@ -485,78 +289,6 @@ void AtomVecBondKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecBondKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBondKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -721,43 +453,6 @@ int AtomVecBondKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -870,321 +565,6 @@ int AtomVecBondKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 13 + 2*h_num_bond[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atomKK->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - - atomKK->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecBondKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecBondKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1337,4 +717,3 @@ void AtomVecBondKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index 7826148d88..a8befcf521 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -24,35 +24,15 @@ AtomStyle(bond/kk/host,AtomVecBondKokkos); #define LMP_ATOM_VEC_BOND_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_bond.h" namespace LAMMPS_NS { -class AtomVecBondKokkos : public AtomVecKokkos { +class AtomVecBondKokkos : public AtomVecKokkos, public AtomVecBond { public: AtomVecBondKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -112,9 +92,6 @@ class AtomVecBondKokkos : public AtomVecKokkos { HAT::t_int_1d h_num_bond; HAT::t_int_2d h_bond_type; HAT::t_tagint_2d h_bond_atom; - - DAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index e7087b0219..66520652be 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -27,25 +27,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecCharge(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->q_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } @@ -123,30 +107,6 @@ void AtomVecChargeKokkos::grow_pointers() } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_q[j] = h_q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -297,150 +257,6 @@ int AtomVecChargeKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, return n*size_border; } -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_q[j]; - } - return m; -} - - /* ---------------------------------------------------------------------- */ template @@ -500,78 +316,6 @@ void AtomVecChargeKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecChargeKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_q[i] = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecChargeKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -688,31 +432,6 @@ int AtomVecChargeKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat /* ---------------------------------------------------------------------- */ -int AtomVecChargeKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecChargeKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -797,281 +516,6 @@ int AtomVecChargeKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecChargeKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_q[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 12 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_q[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_q[nlocal] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_q[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_q[nlocal] = utils::numeric(FLERR,values[offset],true,lmp); - - return 1; -} -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_q[i]; - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_q[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecChargeKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecChargeKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1120,6 +564,8 @@ void AtomVecChargeKokkos::modified(ExecutionSpace space, unsigned int mask) } } +/* ---------------------------------------------------------------------- */ + void AtomVecChargeKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1158,4 +604,3 @@ void AtomVecChargeKokkos::sync_overlapping_device(ExecutionSpace space, unsigned perform_async_copy(atomKK->k_q,space); } } - diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index 91e2be522c..a09d1d3cf0 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -24,36 +24,16 @@ AtomStyle(charge/kk/host,AtomVecChargeKokkos); #define LMP_ATOM_VEC_CHARGE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_charge.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecChargeKokkos : public AtomVecKokkos { +class AtomVecChargeKokkos : public AtomVecKokkos, public AtomVecCharge { public: AtomVecChargeKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int , const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -98,8 +78,6 @@ class AtomVecChargeKokkos : public AtomVecKokkos { DAT::t_float_1d d_q; HAT::t_float_1d h_q; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index defa7410f4..7bf54445e0 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -27,27 +27,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecDPD(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 3; - size_border = 12; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->rho_flag = 1; - atom->dpd_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - no_comm_vel_flag = 1; } @@ -153,44 +135,6 @@ void AtomVecDPDKokkos::grow_pointers() h_duChem = atomKK->k_duChem.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::copy(int i, int j, int delflag) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - h_dpdTheta[j] = h_dpdTheta[i]; - h_uCond[j] = h_uCond[i]; - h_uMech[j] = h_uMech[i]; - h_uChem[j] = h_uChem[i]; - h_uCG[j] = h_uCG[i]; - h_uCGnew[j] = h_uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); -} - /* ---------------------------------------------------------------------- */ template @@ -547,209 +491,6 @@ void AtomVecDPDKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_dpdTheta[i] = buf[m++]; - h_uCond[i] = buf[m++]; - h_uMech[i] = buf[m++]; - h_uChem[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_dpdTheta[i] = buf[m++]; - h_uCond[i] = buf[m++]; - h_uMech[i] = buf[m++]; - h_uChem[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->sync(Host,F_MASK); - atomKK->modified(Host,F_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_PackBorder { typedef DeviceType device_type; @@ -871,206 +612,6 @@ int AtomVecDPDKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DA /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK); - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - buf[m++] = h_uCG[j]; - buf[m++] = h_uCGnew[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1152,123 +693,6 @@ void AtomVecDPDKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecDPDKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| - DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| - UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - - atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| - DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| - UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - } - - atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK ); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1401,41 +825,6 @@ int AtomVecDPDKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_exchange(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | - DVECTOR_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_dpdTheta[i]; - buf[m++] = h_uCond[i]; - buf[m++] = h_uMech[i]; - buf[m++] = h_uChem[i]; - buf[m++] = h_uCG[i]; - buf[m++] = h_uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1531,334 +920,6 @@ int AtomVecDPDKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nre /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_dpdTheta[nlocal] = buf[m++]; - h_uCond[nlocal] = buf[m++]; - h_uMech[nlocal] = buf[m++]; - h_uChem[nlocal] = buf[m++]; - h_uCG[nlocal] = buf[m++]; - h_uCGnew[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | - DVECTOR_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; // 11 + dpdTheta + uCond + uMech + uChem - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = h_dpdTheta[i]; - buf[m++] = h_uCond[i]; - buf[m++] = h_uMech[i]; - buf[m++] = h_uChem[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_dpdTheta[nlocal] = buf[m++]; - h_uCond[nlocal] = buf[m++]; - h_uMech[nlocal] = buf[m++]; - h_uChem[nlocal] = buf[m++]; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - //if(nlocal>2) printf("typeA: %i %i\n",type[0],type[1]); - atomKK->modified(Host,ALL_MASK); - grow(0); - //if(nlocal>2) printf("typeB: %i %i\n",type[0],type[1]); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((tagint) IMGMAX << IMG2BITS) | - ((tagint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_rho[nlocal] = 0.0; - h_dpdTheta[nlocal] = 0.0; - h_uCond[nlocal] = 0.0; - h_uMech[nlocal] = 0.0; - h_uChem[nlocal] = 0.0; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - h_duChem[nlocal] = 0.0; - - //atomKK->modified(Host,TAG_MASK|TYPE_MASK|DPDTHETA_MASK|X_MASK|IMAGE_MASK| - // MASK_MASK|V_MASK|DPDRHO_MASK|UCOND_MASK|UMECH_MASK| - // UCHEM_MASK|UCG_MASK|UCGNEW_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_dpdTheta[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (h_dpdTheta[nlocal] <= 0) - error->one(FLERR,"Internal temperature in Atoms section of date file must be > zero"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_rho[nlocal] = 0.0; - h_uCond[nlocal] = 0.0; - h_uMech[nlocal] = 0.0; - h_uChem[nlocal] = 0.0; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_dpdTheta(nlocal) = utils::numeric(FLERR,values[offset],true,lmp); - - atomKK->modified(Host,DPDTHETA_MASK); - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|DPDTHETA_MASK|X_MASK|IMAGE_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag(i)).d; - buf[i][1] = ubuf(h_type(i)).d; - buf[i][2] = h_dpdTheta(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_data_hybrid(int i, double *buf) -{ - atomKK->sync(Host,DPDTHETA_MASK); - - buf[0] = h_dpdTheta(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecDPDKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - if (atom->memcheck("rho")) bytes += memory->usage(rho,nmax); - if (atom->memcheck("dpdTheta")) bytes += memory->usage(dpdTheta,nmax); - if (atom->memcheck("uCond")) bytes += memory->usage(uCond,nmax); - if (atom->memcheck("uMech")) bytes += memory->usage(uMech,nmax); - if (atom->memcheck("uChem")) bytes += memory->usage(uChem,nmax); - if (atom->memcheck("uCG")) bytes += memory->usage(uCG,nmax); - if (atom->memcheck("uCGnew")) bytes += memory->usage(uCGnew,nmax); - if (atom->memcheck("duChem")) bytes += memory->usage(duChem,nmax); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecDPDKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -2011,4 +1072,3 @@ void AtomVecDPDKokkos::modified(ExecutionSpace space, unsigned int mask) if (mask & DVECTOR_MASK) atomKK->k_dvector.modify(); } } - diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.h b/src/KOKKOS/atom_vec_dpd_kokkos.h index d0f0087a08..ddc590b2c7 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.h +++ b/src/KOKKOS/atom_vec_dpd_kokkos.h @@ -24,44 +24,16 @@ AtomStyle(dpd/kk/host,AtomVecDPDKokkos); #define LMP_ATOM_VEC_DPD_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_dpd.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecDPDKokkos : public AtomVecKokkos { +class AtomVecDPDKokkos : public AtomVecKokkos, public AtomVecDPD { public: AtomVecDPDKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - int pack_comm_hybrid(int, int *, double *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int unpack_comm_hybrid(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -112,8 +84,6 @@ class AtomVecDPDKokkos : public AtomVecKokkos { DAT::t_x_array d_x; DAT::t_v_array d_v; DAT::t_f_array d_f; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index 96c7e5312a..bce165240b 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -27,26 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecFull(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 8; - size_velocity = 3; - size_data_atom = 7; - size_data_vel = 4; - xcol_data = 5; - - atom->molecule_flag = atom->q_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -241,71 +225,6 @@ void AtomVecFullKokkos::grow_pointers() h_improper_atom4 = atomKK->k_improper_atom4.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_q[j] = h_q[i]; - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - h_num_dihedral(j) = h_num_dihedral(i); - for (k = 0; k < h_num_dihedral(j); k++) { - h_dihedral_type(j,k) = h_dihedral_type(i,k); - h_dihedral_atom1(j,k) = h_dihedral_atom1(i,k); - h_dihedral_atom2(j,k) = h_dihedral_atom2(i,k); - h_dihedral_atom3(j,k) = h_dihedral_atom3(i,k); - h_dihedral_atom4(j,k) = h_dihedral_atom4(i,k); - } - - h_num_improper(j) = h_num_improper(i); - for (k = 0; k < h_num_improper(j); k++) { - h_improper_type(j,k) = h_improper_type(i,k); - h_improper_atom1(j,k) = h_improper_atom1(i,k); - h_improper_atom2(j,k) = h_improper_atom2(i,k); - h_improper_atom3(j,k) = h_improper_atom3(i,k); - h_improper_atom4(j,k) = h_improper_atom4(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -413,155 +332,6 @@ int AtomVecFullKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_UnpackBorder { typedef DeviceType device_type; @@ -628,82 +398,6 @@ void AtomVecFullKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecFullKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFullKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -983,66 +677,6 @@ int AtomVecFullKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_q(i); - buf[m++] = ubuf(h_molecule(i)).d; - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(h_dihedral_type(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - buf[m++] = ubuf(h_num_improper(i)).d; - for (k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(h_improper_type(i,k)).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1211,457 +845,6 @@ int AtomVecFullKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_q(nlocal) = buf[m++]; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 17 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_q(i); - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (int k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(MAX(h_dihedral_type(i,k),-h_dihedral_type(i,k))).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - - buf[m++] = ubuf(h_num_improper(i)).d; - for (int k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(MAX(h_improper_type(i,k),-h_improper_type(i,k))).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_q(nlocal) = buf[m++]; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_q(nlocal) = 0.0; - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_q(nlocal) = utils::numeric(FLERR,values[3],true,lmp); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_q(nlocal) = utils::numeric(FLERR,values[offset+1],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - return 2; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_q(i); - buf[i][4] = h_x(i,0); - buf[i][5] = h_x(i,1); - buf[i][6] = h_x(i,2); - buf[i][7] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][9] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - buf[1] = h_q(i); - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], buf[i][3], - buf[i][4],buf[i][5],buf[i][6], - (int) buf[i][7],(int) buf[i][8],(int) buf[i][9]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT " %-1.16e",(tagint) ubuf(buf[0]).i,buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecFullKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecFullKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1992,4 +1175,3 @@ void AtomVecFullKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 72e48ed513..5de3246f4e 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -24,35 +24,15 @@ AtomStyle(full/kk/host,AtomVecFullKokkos); #define LMP_ATOM_VEC_FULL_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_full.h" namespace LAMMPS_NS { -class AtomVecFullKokkos : public AtomVecKokkos { +class AtomVecFullKokkos : public AtomVecKokkos, public AtomVecFull { public: AtomVecFullKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -154,9 +134,6 @@ class AtomVecFullKokkos : public AtomVecKokkos { HAT::t_int_2d h_improper_type; HAT::t_tagint_2d h_improper_atom1,h_improper_atom2, h_improper_atom3,h_improper_atom4; - - HAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp index 9a7709a699..c8bccc00c8 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp @@ -28,7 +28,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) { +AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecHybrid(lmp) +{ no_comm_vel_flag = 1; no_border_vel_flag = 1; } @@ -37,218 +39,7 @@ AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) { AtomVecHybridKokkos::~AtomVecHybridKokkos() { - for (int k = 0; k < nstyles; k++) delete styles[k]; - delete [] styles; - for (int k = 0; k < nstyles; k++) delete [] keywords[k]; - delete [] keywords; -} -/* ---------------------------------------------------------------------- - process sub-style args -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::process_args(int narg, char **arg) -{ - // build list of all known atom styles - - build_styles(); - - // allocate list of sub-styles as big as possibly needed if no extra args - - styles = new AtomVec*[narg]; - keywords = new char*[narg]; - - // allocate each sub-style - // call process_args() with set of args that are not atom style names - // use known_style() to determine which args these are - - int i,jarg,dummy; - - int iarg = 0; - nstyles = 0; - while (iarg < narg) { - if (strcmp(arg[iarg],"hybrid") == 0) - error->all(FLERR,"Atom style hybrid cannot have hybrid as an argument"); - for (i = 0; i < nstyles; i++) - if (strcmp(arg[iarg],keywords[i]) == 0) - error->all(FLERR,"Atom style hybrid cannot use same atom style twice"); - styles[nstyles] = atom->new_avec(arg[iarg],1,dummy); - keywords[nstyles] = utils::strdup(arg[iarg]); - jarg = iarg + 1; - while (jarg < narg && !known_style(arg[jarg])) jarg++; - styles[nstyles]->process_args(jarg-iarg-1,&arg[iarg+1]); - iarg = jarg; - nstyles++; - } - - // free allstyles created by build_styles() - - for (int i = 0; i < nallstyles; i++) delete [] allstyles[i]; - delete [] allstyles; - - // hybrid settings are MAX or MIN of sub-style settings - // hybrid sizes are minimal values plus extra values for each sub-style - - molecular = Atom::ATOMIC; - comm_x_only = comm_f_only = 1; - - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; - - for (int k = 0; k < nstyles; k++) { - if ((styles[k]->molecular == Atom::MOLECULAR && molecular == Atom::TEMPLATE) || - (styles[k]->molecular == Atom::TEMPLATE && molecular == Atom::MOLECULAR)) - error->all(FLERR,"Cannot mix molecular and molecule template " - "atom styles"); - molecular = MAX(molecular,styles[k]->molecular); - - bonds_allow = MAX(bonds_allow,styles[k]->bonds_allow); - angles_allow = MAX(angles_allow,styles[k]->angles_allow); - dihedrals_allow = MAX(dihedrals_allow,styles[k]->dihedrals_allow); - impropers_allow = MAX(impropers_allow,styles[k]->impropers_allow); - mass_type = MAX(mass_type,styles[k]->mass_type); - dipole_type = MAX(dipole_type,styles[k]->dipole_type); - forceclearflag = MAX(forceclearflag,styles[k]->forceclearflag); - - if (styles[k]->molecular == Atom::TEMPLATE) onemols = styles[k]->onemols; - - comm_x_only = MIN(comm_x_only,styles[k]->comm_x_only); - comm_f_only = MIN(comm_f_only,styles[k]->comm_f_only); - size_forward += styles[k]->size_forward - 3; - size_reverse += styles[k]->size_reverse - 3; - size_border += styles[k]->size_border - 6; - size_data_atom += styles[k]->size_data_atom - 5; - size_data_vel += styles[k]->size_data_vel - 4; - } - - size_velocity = 3; - if (atom->omega_flag) size_velocity += 3; - if (atom->angmom_flag) size_velocity += 3; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::init() -{ - AtomVec::init(); - for (int k = 0; k < nstyles; k++) styles[k]->init(); -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - // sub-styles perform all reallocation - // turn off nextra_grow so hybrid can do that once below - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->grow(nmax); - atom->nextra_grow = tmp; - - // insure hybrid local ptrs and sub-style ptrs are up to date - // for sub-styles, do this in case - // multiple sub-style reallocs of same array occurred - - grow_pointers(); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::grow_pointers() -{ - tag = atomKK->tag; - d_tag = atomKK->k_tag.d_view; - h_tag = atomKK->k_tag.h_view; - - type = atomKK->type; - d_type = atomKK->k_type.d_view; - h_type = atomKK->k_type.h_view; - - mask = atomKK->mask; - d_mask = atomKK->k_mask.d_view; - h_mask = atomKK->k_mask.h_view; - - image = atomKK->image; - d_image = atomKK->k_image.d_view; - h_image = atomKK->k_image.h_view; - - x = atomKK->x; - d_x = atomKK->k_x.d_view; - h_x = atomKK->k_x.h_view; - - v = atomKK->v; - d_v = atomKK->k_v.d_view; - h_v = atomKK->k_v.h_view; - - f = atomKK->f; - d_f = atomKK->k_f.d_view; - h_f = atomKK->k_f.h_view; - - v = atomKK->v; - d_v = atomKK->k_v.d_view; - h_v = atomKK->k_v.h_view; - - omega = atomKK->omega; - d_omega = atomKK->k_omega.d_view; - h_omega = atomKK->k_omega.h_view; - - angmom = atomKK->angmom; - d_angmom = atomKK->k_angmom.d_view; - h_angmom = atomKK->k_angmom.h_view; - - for (int k = 0; k < nstyles; k++) styles[k]->grow_pointers(); -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J for all sub-styles -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::copy(int i, int j, int delflag) -{ - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->copy(i,j,delflag); - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::clear_bonus() -{ - for (int k = 0; k < nstyles; k++) styles[k]->clear_bonus(); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::force_clear(int n, size_t nbytes) -{ - for (int k = 0; k < nstyles; k++) - if (styles[k]->forceclearflag) styles[k]->force_clear(n,nbytes); } /* ---------------------------------------------------------------------- */ @@ -261,11 +52,13 @@ int AtomVecHybridKokkos::pack_comm_kokkos(const int &/*n*/, const DAT::tdual_int error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + void AtomVecHybridKokkos::unpack_comm_kokkos(const int &/*n*/, const int &/*nfirst*/, const DAT::tdual_xfloat_2d &/*buf*/) { error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); } + int AtomVecHybridKokkos::pack_comm_self(const int &/*n*/, const DAT::tdual_int_2d &/*list*/, const int & /*iswap*/, const int /*nfirst*/, const int &/*pbc_flag*/, const int pbc[]) @@ -273,6 +66,7 @@ int AtomVecHybridKokkos::pack_comm_self(const int &/*n*/, const DAT::tdual_int_2 error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + int AtomVecHybridKokkos::pack_border_kokkos(int /*n*/, DAT::tdual_int_2d /*k_sendlist*/, DAT::tdual_xfloat_2d /*buf*/,int /*iswap*/, int /*pbc_flag*/, int * /*pbc*/, ExecutionSpace /*space*/) @@ -280,12 +74,14 @@ int AtomVecHybridKokkos::pack_border_kokkos(int /*n*/, DAT::tdual_int_2d /*k_sen error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + void AtomVecHybridKokkos::unpack_border_kokkos(const int &/*n*/, const int &/*nfirst*/, const DAT::tdual_xfloat_2d &/*buf*/, ExecutionSpace /*space*/) { error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); } + int AtomVecHybridKokkos::pack_exchange_kokkos(const int &/*nsend*/,DAT::tdual_xfloat_2d &/*buf*/, DAT::tdual_int_1d /*k_sendlist*/, DAT::tdual_int_1d /*k_copylist*/, @@ -295,6 +91,7 @@ int AtomVecHybridKokkos::pack_exchange_kokkos(const int &/*nsend*/,DAT::tdual_xf error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + int AtomVecHybridKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d & /*k_buf*/, int /*nrecv*/, int /*nlocal*/, int /*dim*/, X_FLOAT /*lo*/, X_FLOAT /*hi*/, ExecutionSpace /*space*/) @@ -303,921 +100,25 @@ int AtomVecHybridKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d & /*k_buf*/ return 0; } -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK); - - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (h_mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - if (omega_flag) { - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - if (angmom_flag) { - h_angmom(i,0) = buf[m++]; - h_angmom(i,1) = buf[m++]; - h_angmom(i,2) = buf[m++]; - } - } - - atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_reverse(int n, int first, double *buf) -{ - atomKK->sync(Host,F_MASK); - - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_reverse_hybrid(n,first,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,k,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } - - atomKK->modified(Host,F_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_reverse_hybrid(n,list,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - if (h_mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_border(int n, int first, double *buf) -{ - int i,k,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - if (omega_flag) { - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - if (angmom_flag) { - h_angmom(i,0) = buf[m++]; - h_angmom(i,1) = buf[m++]; - h_angmom(i,2) = buf[m++]; - } - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - pack each sub-style one after the other -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_exchange(int i, double *buf) -{ - int k,m; - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_exchange(i,&buf[m]); - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for single atom received from another proc - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::unpack_exchange(double *buf) -{ - int k,m; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) { - m += styles[k]->unpack_exchange(&buf[m]); - atom->nlocal--; - } - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::size_restart() -{ - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - - int n = 0; - for (int k = 0; k < nstyles; k++) - n += styles[k]->size_restart(); - - atom->nextra_restart = tmp; - - int nlocal = atom->nlocal; - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (int i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - pack each sub-style one after the other -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_restart(int i, double *buf) -{ - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - - int m = 0; - for (int k = 0; k < nstyles; k++) - m += styles[k]->pack_restart(i,&buf[m]); - - atom->nextra_restart = tmp; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int tmp = atom->nextra_store; - atom->nextra_store = 0; - - int m = 0; - for (int k = 0; k < nstyles; k++) { - m += styles[k]->unpack_restart(&buf[m]); - atom->nlocal--; - } - atom->nextra_store = tmp; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - create each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - for (int k = 0; k < nstyles; k++) { - styles[k]->create_atom(itype,coord); - atom->nlocal--; - } - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (h_type[nlocal] <= 0 || h_type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom h_type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - h_mask[nlocal] = 1; - - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - if (atom->omega_flag) { - h_omega(nlocal,0) = 0.0; - h_omega(nlocal,1) = 0.0; - h_omega(nlocal,2) = 0.0; - } - if (atom->angmom_flag) { - h_angmom(nlocal,0) = 0.0; - h_angmom(nlocal,1) = 0.0; - h_angmom(nlocal,2) = 0.0; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // each sub-style parses sub-style specific values - - int m = 5; - for (int k = 0; k < nstyles; k++) - m += styles[k]->data_atom_hybrid(nlocal,values,m); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::data_vel(int m, const std::vector &values) -{ - atomKK->sync(Host,V_MASK); - - int ivalue = 1; - h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - - atomKK->modified(Host,V_MASK); - - // each sub-style parses sub-style specific values - - for (int k = 0; k < nstyles; k++) - ivalue += styles[k]->data_vel_hybrid(m,values,ivalue); -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|X_MASK); - - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = ubuf(h_type[i]).d; - buf[i][2] = h_x(i,0); - buf[i][3] = h_x(i,1); - buf[i][4] = h_x(i,2); - - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_data_hybrid(i,&buf[i][m]); - - buf[i][m] = ubuf((h_image[i] & IMGMASK) - IMGMAX).d; - buf[i][m+1] = ubuf((h_image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][m+2] = ubuf((h_image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 h_image flags -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::write_data(FILE *fp, int n, double **buf) -{ - int k,m; - - for (int i = 0; i < n; i++) { - fmt::print(fp,"{} {} {:.16e} {:.16e} {:.16e}", ubuf(buf[i][0]).i, ubuf(buf[i][1]).i, - buf[i][2], buf[i][3], buf[i][4]); - - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_data_hybrid(fp,&buf[i][m]); - - fmt::print(fp," {} {} {}\n", ubuf(buf[i][m]).i, ubuf(buf[i][m+1]).i, ubuf(buf[i][m+2]).i); - } -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_vel(double **buf) -{ - atomKK->sync(Host,V_MASK); - - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = h_v(i,0); - buf[i][2] = h_v(i,1); - buf[i][3] = h_v(i,2); - - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_vel_hybrid(i,&buf[i][m]); - } -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::write_vel(FILE *fp, int n, double **buf) -{ - int k,m; - - for (int i = 0; i < n; i++) { - fmt::print(fp,"{} {} {} {}", (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); - - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_vel_hybrid(fp,&buf[i][m]); - - fprintf(fp,"\n"); - } -} - -/* ---------------------------------------------------------------------- - assign an index to named atom property and return index - returned value encodes which sub-style and index returned by sub-style - return -1 if name is unknown to any sub-styles -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::property_atom(const std::string &name) -{ - for (int k = 0; k < nstyles; k++) { - int index = styles[k]->property_atom(name); - if (index >= 0) return index*nstyles + k; - } - return -1; -} - -/* ---------------------------------------------------------------------- - pack per-atom data into buf for ComputePropertyAtom - index maps to data specific to this atom style -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_property_atom(int multiindex, double *buf, int nvalues, int groupbit) -{ - int k = multiindex % nstyles; - int index = multiindex/nstyles; - styles[k]->pack_property_atom(index,buf,nvalues,groupbit); -} - -/* ---------------------------------------------------------------------- - allstyles = list of all atom styles in this LAMMPS executable -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::build_styles() -{ - nallstyles = 0; -#define ATOM_CLASS -#define AtomStyle(key,Class) nallstyles++; -#include "style_atom.h" -#undef AtomStyle -#undef ATOM_CLASS - - allstyles = new char*[nallstyles]; - - nallstyles = 0; -#define ATOM_CLASS -#define AtomStyle(key,Class) \ - allstyles[nallstyles] = utils::strdup(#key); \ - nallstyles++; -#include "style_atom.h" // IWYU pragma: keep -#undef AtomStyle -#undef ATOM_CLASS -} - -/* ---------------------------------------------------------------------- - allstyles = list of all known atom styles -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::known_style(char *str) -{ - for (int i = 0; i < nallstyles; i++) - if (strcmp(str,allstyles[i]) == 0) return 1; - return 0; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecHybridKokkos::memory_usage() -{ - double bytes = 0; - for (int k = 0; k < nstyles; k++) bytes += styles[k]->memory_usage(); - return bytes; -} +// TODO: move dynamic_cast into init /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::sync(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->sync(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->sync(space,h_mask); } /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->sync_overlapping_device(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->sync_overlapping_device(space,h_mask); } /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::modified(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->modified(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->modified(space,h_mask); } diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index a815779336..5249f3ef93 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -22,11 +22,12 @@ AtomStyle(hybrid/kk,AtomVecHybridKokkos); #define LMP_ATOM_VEC_HYBRID_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_hybrid.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecHybridKokkos : public AtomVecKokkos { +class AtomVecHybridKokkos : public AtomVecKokkos, public AtomVecHybrid { public: int nstyles; class AtomVec **styles; @@ -34,39 +35,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos { AtomVecHybridKokkos(class LAMMPS *); ~AtomVecHybridKokkos() override; - void process_args(int, char **) override; - void init() override; - void grow(int) override; - void grow_pointers() override; - void copy(int, int, int) override; - void clear_bonus() override; - void force_clear(int, size_t) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override {return 0;} - void data_vel(int, const std::vector &) override; - void pack_data(double **) override; - void write_data(FILE *, int, double **) override; - void pack_vel(double **) override; - void write_vel(FILE *, int, double **) override; - int property_atom(const std::string &) override; - void pack_property_atom(int, double *, int, int) override; - double memory_usage() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 12b6a5e1af..6286dae0f9 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -32,22 +32,10 @@ AtomVecKokkos::AtomVecKokkos(LAMMPS *lmp) : AtomVec(lmp) no_comm_vel_flag = 0; no_border_vel_flag = 1; -} -/* ---------------------------------------------------------------------- - roundup N so it is a multiple of DELTA - error if N exceeds 32-bit int, since will be used as arg to grow() - overload needed because Kokkos uses a smaller DELTA than in atom_vec.cpp - and an exponential instead of a linear growth -------------------------------------------------------------------------- */ - -bigint AtomVecKokkos::roundup(bigint n) -{ - auto DELTA = LMP_KOKKOS_AV_DELTA; - if (n % DELTA) n = n/DELTA * DELTA + DELTA; - if (n > MAXSMALLINT) - error->one(FLERR,"Too many atoms created on one or more procs"); - return n; + k_count = DAT::tdual_int_1d("atom::k_count",1); + atomKK = (AtomKokkos *) atom; + commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- */ @@ -708,138 +696,6 @@ void AtomVecKokkos::unpack_comm_vel_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (atom->mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecKokkos_PackReverse { typedef DeviceType device_type; @@ -977,84 +833,3 @@ void AtomVecKokkos::unpack_reverse_kokkos(const int &n, atomKK->modified(Device,F_MASK); } } - -/* ---------------------------------------------------------------------- */ - -int AtomVecKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_reverse(int n, int *list, double *buf) -{ - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } - - if (n > 0) - atomKK->modified(Host,F_MASK); -} - -/* ---------------------------------------------------------------------- - * unpack one line from Velocities section of data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::data_vel(int m, const std::vector &values) -{ - double **v = atom->v; - int ivalue = 1; - v[m][0] = utils::numeric(FLERR,values[ivalue++],true,lmp); - v[m][1] = utils::numeric(FLERR,values[ivalue++],true,lmp); - v[m][2] = utils::numeric(FLERR,values[ivalue++],true,lmp); - - atomKK->modified(Host,V_MASK); -} - -/* ---------------------------------------------------------------------- - * pack velocity info for data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::pack_vel(double **buf) -{ - double **v = atom->v; - tagint *tag = atom->tag; - int nlocal = atom->nlocal; - - atomKK->sync(Host,V_MASK|TAG_MASK); - - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - } -} - -/* ---------------------------------------------------------------------- - * write velocity info to data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); -} - diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index 0c8174ed9c..a332024a7d 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -33,21 +33,10 @@ union d_ubuf { d_ubuf(int arg) : i(arg) {} }; -class AtomVecKokkos : public AtomVec { +class AtomVecKokkos : virtual public AtomVec { public: AtomVecKokkos(class LAMMPS *); - bigint roundup(bigint) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - void data_vel(int, const std::vector &) override; - void pack_vel(double **) override; - void write_vel(FILE *, int, double **) override; - virtual void sync(ExecutionSpace space, unsigned int mask) = 0; virtual void modified(ExecutionSpace space, unsigned int mask) = 0; virtual void sync_overlapping_device(ExecutionSpace space, unsigned int mask) = 0; @@ -130,7 +119,6 @@ class AtomVecKokkos : public AtomVec { int no_comm_vel_flag,no_border_vel_flag; protected: - HAT::t_x_array h_x; HAT::t_v_array h_v; HAT::t_f_array h_f; @@ -139,6 +127,8 @@ class AtomVecKokkos : public AtomVec { size_t buffer_size; void* buffer; + DAT::tdual_int_1d k_count; + #ifdef LMP_KOKKOS_GPU template Kokkos::Viewmolecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -233,70 +217,6 @@ void AtomVecMolecularKokkos::grow_pointers() h_improper_atom4 = atomKK->k_improper_atom4.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - h_num_dihedral(j) = h_num_dihedral(i); - for (k = 0; k < h_num_dihedral(j); k++) { - h_dihedral_type(j,k) = h_dihedral_type(i,k); - h_dihedral_atom1(j,k) = h_dihedral_atom1(i,k); - h_dihedral_atom2(j,k) = h_dihedral_atom2(i,k); - h_dihedral_atom3(j,k) = h_dihedral_atom3(i,k); - h_dihedral_atom4(j,k) = h_dihedral_atom4(i,k); - } - - h_num_improper(j) = h_num_improper(i); - for (k = 0; k < h_num_improper(j); k++) { - h_improper_type(j,k) = h_improper_type(i,k); - h_improper_atom1(j,k) = h_improper_atom1(i,k); - h_improper_atom2(j,k) = h_improper_atom2(i,k); - h_improper_atom3(j,k) = h_improper_atom3(i,k); - h_improper_atom4(j,k) = h_improper_atom4(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -580,171 +500,6 @@ void AtomVecMolecularKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) - atomKK->modified(Host,F_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_PackBorder { typedef DeviceType device_type; @@ -846,149 +601,6 @@ int AtomVecMolecularKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendli /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1049,78 +661,6 @@ void AtomVecMolecularKokkos::unpack_border_kokkos(const int &n, const int &first /* ---------------------------------------------------------------------- */ -void AtomVecMolecularKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1393,66 +933,6 @@ int AtomVecMolecularKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfl /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(h_dihedral_type(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - buf[m++] = ubuf(h_num_improper(i)).d; - for (k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(h_improper_type(i,k)).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1619,444 +1099,6 @@ int AtomVecMolecularKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,i /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 16 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (int k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(MAX(h_dihedral_type(i,k),-h_dihedral_type(i,k))).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - - buf[m++] = ubuf(h_num_improper(i)).d; - for (int k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(MAX(h_improper_type(i,k),-h_improper_type(i,k))).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecMolecularKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecMolecularKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -2377,4 +1419,3 @@ void AtomVecMolecularKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index 7f7cb82028..0e0eb3af95 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -24,41 +24,15 @@ AtomStyle(molecular/kk/host,AtomVecMolecularKokkos); #define LMP_ATOM_VEC_MOLECULAR_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_molecular.h" namespace LAMMPS_NS { -class AtomVecMolecularKokkos : public AtomVecKokkos { +class AtomVecMolecularKokkos : public AtomVecKokkos, public AtomVecMolecular { public: AtomVecMolecularKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -167,9 +141,6 @@ class AtomVecMolecularKokkos : public AtomVecKokkos { HAT::t_int_2d h_improper_type; HAT::t_tagint_2d h_improper_atom1,h_improper_atom2, h_improper_atom3,h_improper_atom4; - - HAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index 023b4ab6a7..b197e7c831 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -33,55 +33,12 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -AtomVecSphereKokkos::AtomVecSphereKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecSphereKokkos::AtomVecSphereKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecSphere(lmp) { - molecular = Atom::ATOMIC; - - comm_x_only = 1; - comm_f_only = 0; - size_forward = 3; - size_reverse = 6; - size_border = 8; - size_velocity = 6; - size_data_atom = 7; - size_data_vel = 7; - xcol_data = 5; - - atom->sphere_flag = 1; - atom->radius_flag = atom->rmass_flag = atom->omega_flag = - atom->torque_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - no_border_vel_flag = 0; } -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::init() -{ - AtomVec::init(); - - // set radvary if particle diameters are time-varying due to fix adapt - - radvary = 0; - comm_x_only = 1; - size_forward = 3; - - for (int i = 0; i < modify->nfix; i++) { - if (strcmp(modify->fix[i]->style,"adapt") == 0) { - FixAdapt *fix = (FixAdapt *) modify->fix[i]; - if (fix->diamflag) { - radvary = 1; - comm_x_only = 0; - size_forward = 5; - } - } - } -} - /* ---------------------------------------------------------------------- grow atom arrays n = 0 grows arrays by a chunk @@ -165,42 +122,6 @@ void AtomVecSphereKokkos::grow_pointers() h_torque = atomKK->k_torque.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::copy(int i, int j, int delflag) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | - RMASS_MASK | OMEGA_MASK); - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - h_mask[j] = h_mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_radius[j] = h_radius[i]; - h_rmass[j] = h_rmass[i]; - h_omega(j,0) = h_omega(i,0); - h_omega(j,1) = h_omega(i,1); - h_omega(j,2) = h_omega(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | - RMASS_MASK | OMEGA_MASK); -} - /* ---------------------------------------------------------------------- */ template @@ -1035,397 +956,6 @@ void AtomVecSphereKokkos::unpack_comm_vel_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - if (radvary == 0) { - // Not sure if we need to call sync for X here - atomKK->sync(Host,X_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - } else { - atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - if (radvary == 0) { - atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - } else { - atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_comm_hybrid(int n, int *list, double *buf) -{ - if (radvary == 0) return 0; - - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_comm(int n, int first, double *buf) -{ - if (radvary == 0) { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK); - } else { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - if (radvary == 0) { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK); - } else { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_comm_hybrid(int n, int first, double *buf) -{ - if (radvary == 0) return 0; - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK|TORQUE_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - buf[m++] = h_torque(i,0); - buf[m++] = h_torque(i,1); - buf[m++] = h_torque(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_reverse_hybrid(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,TORQUE_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_torque(i,0); - buf[m++] = h_torque(i,1); - buf[m++] = h_torque(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->modified(Host,F_MASK|TORQUE_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - h_torque(j,0) += buf[m++]; - h_torque(j,1) += buf[m++]; - h_torque(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->modified(Host,TORQUE_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_torque(j,0) += buf[m++]; - h_torque(j,1) += buf[m++]; - h_torque(j,2) += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackBorder { typedef DeviceType device_type; @@ -1541,60 +1071,6 @@ int AtomVecSphereKokkos::pack_border_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_border( - int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackBorderVel { typedef DeviceType device_type; @@ -1769,115 +1245,6 @@ int AtomVecSphereKokkos::pack_border_vel_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1945,34 +1312,6 @@ void AtomVecSphereKokkos::unpack_border_kokkos(const int &n, const int &first, RADIUS_MASK|RMASS_MASK); } -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_border(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - while (last > nmax) grow(0); - - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - - /* ---------------------------------------------------------------------- */ template @@ -2058,53 +1397,6 @@ void AtomVecSphereKokkos::unpack_border_vel_kokkos( /* ---------------------------------------------------------------------- */ -void AtomVecSphereKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - while (last > nmax) grow(0); - - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -2233,44 +1525,6 @@ int AtomVecSphereKokkos::pack_exchange_kokkos( return nsend*16; } -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_exchange(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| RADIUS_MASK | RMASS_MASK | - OMEGA_MASK); - - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag[i]).d; - buf[m++] = ubuf(h_type[i]).d; - buf[m++] = ubuf(h_mask[i]).d; - buf[m++] = ubuf(h_image[i]).d; - - buf[m++] = h_radius[i]; - buf[m++] = h_rmass[i]; - buf[m++] = h_omega(i,0); - buf[m++] = h_omega(i,1); - buf[m++] = h_omega(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - /* ---------------------------------------------------------------------- */ template @@ -2366,437 +1620,6 @@ int AtomVecSphereKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag[nlocal] = (tagint) ubuf(buf[m++]).i; - h_type[nlocal] = (int) ubuf(buf[m++]).i; - h_mask[nlocal] = (int) ubuf(buf[m++]).i; - h_image[nlocal] = (imageint) ubuf(buf[m++]).i; - - h_radius[nlocal] = buf[m++]; - h_rmass[nlocal] = buf[m++]; - h_omega(nlocal,0) = buf[m++]; - h_omega(nlocal,1) = buf[m++]; - h_omega(nlocal,2) = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | RMASS_MASK | - OMEGA_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 16 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | V_MASK | - RADIUS_MASK | RMASS_MASK | OMEGA_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag[i]).d; - buf[m++] = ubuf(h_type[i]).d; - buf[m++] = ubuf(h_mask[i]).d; - buf[m++] = ubuf(h_image[i]).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_radius[i]; - buf[m++] = h_rmass[i]; - buf[m++] = h_omega(i,0); - buf[m++] = h_omega(i,1); - buf[m++] = h_omega(i,2); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag[nlocal] = (tagint) ubuf(buf[m++]).i; - h_type[nlocal] = (int) ubuf(buf[m++]).i; - h_mask[nlocal] = (int) ubuf(buf[m++]).i; - h_image[nlocal] = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_radius[nlocal] = buf[m++]; - h_rmass[nlocal] = buf[m++]; - h_omega(nlocal,0) = buf[m++]; - h_omega(nlocal,1) = buf[m++]; - h_omega(nlocal,2) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | V_MASK | - RADIUS_MASK | RMASS_MASK | OMEGA_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - } - - h_tag[nlocal] = 0; - h_type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_radius[nlocal] = 0.5; - h_rmass[nlocal] = 4.0*MY_PI/3.0 * h_radius[nlocal]*h_radius[nlocal]*h_radius[nlocal]; - h_omega(nlocal,0) = 0.0; - h_omega(nlocal,1) = 0.0; - h_omega(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[2],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); - - double density = utils::numeric(FLERR,values[3],true,lmp); - if (density <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[offset],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); - - double density = utils::numeric(FLERR,values[offset+1],true,lmp); - if (density <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - - return 2; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::data_vel(int m, const std::vector &values) -{ - int ivalue = 1; - atomKK->sync(Host,V_MASK|OMEGA_MASK); - h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - atomKK->modified(Host,V_MASK|OMEGA_MASK); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::data_vel_hybrid(int m, const std::vector &values, - int offset) -{ - atomKK->sync(Host,OMEGA_MASK); - omega[m][0] = utils::numeric(FLERR,values[offset],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[offset+1],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[offset+2],true,lmp); - atomKK->modified(Host,OMEGA_MASK); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|RADIUS_MASK|RMASS_MASK|X_MASK|IMAGE_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = ubuf(h_type[i]).d; - buf[i][2] = 2.0*h_radius[i]; - if (h_radius[i] == 0.0) buf[i][3] = h_rmass[i]; - else - buf[i][3] = h_rmass[i] / (4.0*MY_PI/3.0 * h_radius[i]*h_radius[i]*h_radius[i]); - buf[i][4] = h_x(i,0); - buf[i][5] = h_x(i,1); - buf[i][6] = h_x(i,2); - buf[i][7] = ubuf((h_image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((h_image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((h_image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_data_hybrid(int i, double *buf) -{ - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - buf[0] = 2.0*h_radius[i]; - if (h_radius[i] == 0.0) buf[1] = h_rmass[i]; - else buf[1] = h_rmass[i] / (4.0*MY_PI/3.0 * h_radius[i]*h_radius[i]*h_radius[i]); - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e",buf[0],buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::pack_vel(double **buf) -{ - atomKK->sync(Host,TAG_MASK|V_MASK|OMEGA_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = h_v(i,0); - buf[i][2] = h_v(i,1); - buf[i][3] = h_v(i,2); - buf[i][4] = h_omega(i,0); - buf[i][5] = h_omega(i,1); - buf[i][6] = h_omega(i,2); - } -} - -/* ---------------------------------------------------------------------- - pack hybrid velocity info for data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_vel_hybrid(int i, double *buf) -{ - atomKK->sync(Host,OMEGA_MASK); - - buf[0] = h_omega(i,0); - buf[1] = h_omega(i,1); - buf[2] = h_omega(i,2); - return 3; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecSphereKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("omega")) bytes += memory->usage(omega,nmax,3); - if (atom->memcheck("torque")) - bytes += memory->usage(torque,nmax*comm->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecSphereKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.h b/src/KOKKOS/atom_vec_sphere_kokkos.h index de3cd17065..c566f9ee50 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.h +++ b/src/KOKKOS/atom_vec_sphere_kokkos.h @@ -24,53 +24,17 @@ AtomStyle(sphere/kk/host,AtomVecSphereKokkos); #define LMP_ATOM_VEC_SPHERE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_sphere.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecSphereKokkos : public AtomVecKokkos { +class AtomVecSphereKokkos : public AtomVecKokkos, public AtomVecSphere { public: AtomVecSphereKokkos(class LAMMPS *); - void init() override; void grow(int) override; void grow_pointers() override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - int pack_comm_hybrid(int, int *, double *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int unpack_comm_hybrid(int, int, double *) override; - int pack_reverse(int, int, double *) override; - int pack_reverse_hybrid(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int unpack_reverse_hybrid(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void data_vel(int, const std::vector &) override; - int data_vel_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - void pack_vel(double **) override; - int pack_vel_hybrid(int, double *) override; - void write_vel(FILE *, int, double **) override; - int write_vel_hybrid(FILE *, double *) override; - double memory_usage() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -139,8 +103,6 @@ class AtomVecSphereKokkos : public AtomVecKokkos { HAT::t_v_array h_omega; DAT::t_f_array d_torque; HAT::t_f_array h_torque; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index cc54fefa80..655f2ec8c1 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -41,26 +41,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecSpin(lmp) { - molecular = 0; - mass_type = 1; - forceclearflag = 1; - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 9; - size_border = 10; - size_velocity = 3; - size_data_atom = 9; - size_data_vel = 4; - xcol_data = 4; - - atom->sp_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -147,33 +131,6 @@ void AtomVecSpinKokkos::grow_pointers() h_fm_long = atomKK->k_fm_long.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_sp(j,0) = h_sp(i,0); - h_sp(j,1) = h_sp(i,1); - h_sp(j,2) = h_sp(i,2); - h_sp(j,3) = h_sp(i,3); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -347,167 +304,6 @@ int AtomVecSpinKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, D /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_UnpackBorder { typedef DeviceType device_type; @@ -568,87 +364,6 @@ void AtomVecSpinKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecSpinKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - - for (i = first; i < last; i++) { - if (i == nmax) { - grow(0); - } - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -771,34 +486,6 @@ int AtomVecSpinKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_sp(i,0); - buf[m++] = h_sp(i,1); - buf[m++] = h_sp(i,2); - buf[m++] = h_sp(i,3); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -886,321 +573,6 @@ int AtomVecSpinKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_sp(nlocal,0) = buf[m++]; - h_sp(nlocal,1) = buf[m++]; - h_sp(nlocal,2) = buf[m++]; - h_sp(nlocal,3) = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_sp(i,0); - buf[m++] = h_sp(i,1); - buf[m++] = h_sp(i,2); - buf[m++] = h_sp(i,3); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_sp(nlocal,0) = buf[m++]; - h_sp(nlocal,1) = buf[m++]; - h_sp(nlocal,2) = buf[m++]; - h_sp(nlocal,3) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - h_tag[nlocal] = 0; - h_type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_sp(nlocal,0) = 0.0; - h_sp(nlocal,1) = 0.0; - h_sp(nlocal,2) = 0.0; - h_sp(nlocal,3) = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_sp(nlocal,3) = utils::numeric(FLERR,values[2],true,lmp); - h_sp(nlocal,0) = utils::numeric(FLERR,values[6],true,lmp); - h_sp(nlocal,1) = utils::numeric(FLERR,values[7],true,lmp); - h_sp(nlocal,2) = utils::numeric(FLERR,values[8],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - h_sp(nlocal,0) *= inorm; - h_sp(nlocal,1) *= inorm; - h_sp(nlocal,2) *= inorm; - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_sp(nlocal,3) = utils::numeric(FLERR,values[offset],true,lmp); - h_sp(nlocal,0) = utils::numeric(FLERR,values[offset+1],true,lmp); - h_sp(nlocal,1) = utils::numeric(FLERR,values[offset+2],true,lmp); - h_sp(nlocal,2) = utils::numeric(FLERR,values[offset+3],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - sp[nlocal][0] *= inorm; - sp[nlocal][1] *= inorm; - sp[nlocal][2] *= inorm; - - return 4; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_sp(i,0); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][2] = h_sp(i,1); - buf[i][2] = h_sp(i,2); - buf[i][2] = h_sp(i,3); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_sp(i,3); - buf[1] = h_sp(i,0); - buf[2] = h_sp(i,1); - buf[3] = h_sp(i,2); - return 4; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4], - buf[i][5],(int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2],buf[3]); - return 4; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecSpinKokkos::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - 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; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecSpinKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1303,14 +675,3 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_fm_long,space); } } - -/* ---------------------------------------------------------------------- - clear all forces (mech and mag) -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::force_clear(int n, size_t nbytes) -{ - memset(&f[n][0],0,3*nbytes); - memset(&fm[n][0],0,3*nbytes); - memset(&fm_long[n][0],0,3*nbytes); -} diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index 36895ef632..1d969fc510 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -24,39 +24,15 @@ AtomStyle(spin/kk/host,AtomVecSpinKokkos); #define LMP_ATOM_VEC_SPIN_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_spin.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecSpinKokkos : public AtomVecKokkos { +class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { public: AtomVecSpinKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - - // clear magnetic and mechanic forces - - void force_clear(int, size_t) override; - void grow_pointers() override; // input lists to be checked int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, @@ -110,8 +86,6 @@ class AtomVecSpinKokkos : public AtomVecKokkos { HAT::t_sp_array h_sp; HAT::t_fm_array h_fm; HAT::t_fm_long_array h_fm_long; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 2b603da635..a21d5482e7 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -146,8 +146,12 @@ void CommKokkos::init() if (!comm_f_only) // not all Kokkos atom_vec styles have reverse pack/unpack routines yet reverse_comm_classic = true; - if (ghost_velocity && ((AtomVecKokkos*)atom->avec)->no_comm_vel_flag) // not all Kokkos atom_vec styles have comm vel pack/unpack routines yet + atomKK->avecKK = dynamic_cast(atom->avec); + + if (ghost_velocity && atomKK->avecKK->no_comm_vel_flag) // not all Kokkos atom_vec styles have comm vel pack/unpack routines yet forward_comm_classic = true; + + } /* ---------------------------------------------------------------------- @@ -186,7 +190,6 @@ void CommKokkos::forward_comm_device(int) { int n; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; double *buf; // exchange data with another proc @@ -200,7 +203,7 @@ void CommKokkos::forward_comm_device(int) k_swap.sync(); k_swap2.sync(); k_pbc.sync(); - n = avec->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, + n = atomKK->avecKK->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, k_firstrecv,k_pbc_flag,k_pbc,k_g2l); } else { @@ -213,7 +216,7 @@ void CommKokkos::forward_comm_device(int) MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); } - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist, + n = atomKK->avecKK->pack_comm_kokkos(sendnum[iswap],k_sendlist, iswap,k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) { @@ -232,7 +235,7 @@ void CommKokkos::forward_comm_device(int) size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); } - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) { @@ -240,34 +243,34 @@ void CommKokkos::forward_comm_device(int) MPI_DOUBLE,sendproc[iswap],0,world); } if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + atomKK->avecKK->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); DeviceType().fence(); } else { if (size_forward_recv[iswap]) MPI_Irecv(k_buf_recv.view().data(), size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) MPI_Send(k_buf_send.view().data(),n, MPI_DOUBLE,sendproc[iswap],0,world); if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + atomKK->avecKK->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); DeviceType().fence(); } } else { if (!ghost_velocity) { if (sendnum[iswap]) - n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_self(sendnum[iswap],k_sendlist,iswap, firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); } else { - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); + atomKK->avecKK->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); DeviceType().fence(); } } @@ -310,7 +313,6 @@ void CommKokkos::reverse_comm_device() { int n; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; double *buf; // exchange data with another proc @@ -343,19 +345,19 @@ void CommKokkos::reverse_comm_device() MPI_Irecv(k_buf_recv.view().data(), size_reverse_recv[iswap],MPI_DOUBLE, sendproc[iswap],0,world,&request); - n = avec->pack_reverse_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); + n = atomKK->avecKK->pack_reverse_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); DeviceType().fence(); if (n) MPI_Send(k_buf_send.view().data(),n, MPI_DOUBLE,recvproc[iswap],0,world); if (size_reverse_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); } - avec->unpack_reverse_kokkos(sendnum[iswap],k_sendlist,iswap, + atomKK->avecKK->unpack_reverse_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_recv); DeviceType().fence(); } else { if (sendnum[iswap]) - n = avec->unpack_reverse_self(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->unpack_reverse_self(sendnum[iswap],k_sendlist,iswap, firstrecv[iswap]); } } @@ -717,7 +719,6 @@ void CommKokkos::exchange_device() double **x; double *sublo,*subhi; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; // clear global->local map for owned and ghost atoms // b/c atoms migrate to new procs in exchange() and @@ -800,7 +801,7 @@ void CommKokkos::exchange_device() nsend = k_count.h_view(); if (nsend > maxsend) grow_send_kokkos(nsend,1); nsend = - avec->pack_exchange_kokkos(k_count.h_view(),k_buf_send, + atomKK->avecKK->pack_exchange_kokkos(k_count.h_view(),k_buf_send, k_exchange_sendlist,k_exchange_copylist, ExecutionSpaceFromDevice::space, dim,lo,hi); @@ -809,8 +810,8 @@ void CommKokkos::exchange_device() while (i < nlocal) { if (x[i][dim] < lo || x[i][dim] >= hi) { if (nsend > maxsend) grow_send_kokkos(nsend,1); - nsend += avec->pack_exchange(i,&buf_send[nsend]); - avec->copy(nlocal-1,i,1); + nsend += atomKK->avecKK->pack_exchange(i,&buf_send[nsend]); + atomKK->avecKK->copy(nlocal-1,i,1); nlocal--; } else i++; } @@ -825,7 +826,7 @@ void CommKokkos::exchange_device() if (procgrid[dim] == 1) { nrecv = nsend; if (nrecv) { - atom->nlocal=avec-> + atom->nlocal=atomKK->avecKK-> unpack_exchange_kokkos(k_buf_send,nrecv,atom->nlocal,dim,lo,hi, ExecutionSpaceFromDevice::space); DeviceType().fence(); @@ -858,7 +859,7 @@ void CommKokkos::exchange_device() } if (nrecv) { - atom->nlocal = avec-> + atom->nlocal = atomKK->avecKK-> unpack_exchange_kokkos(k_buf_recv,nrecv,atom->nlocal,dim,lo,hi, ExecutionSpaceFromDevice::space); DeviceType().fence(); @@ -896,7 +897,7 @@ void CommKokkos::borders() static int print = 1; if (mode != Comm::SINGLE || bordergroup || - (ghost_velocity && ((AtomVecKokkos*)atom->avec)->no_border_vel_flag)) { + (ghost_velocity && atomKK->avecKK->no_border_vel_flag)) { if (print && comm->me==0) { error->warning(FLERR,"Required border comm not yet implemented in Kokkos communication, " "switching to classic exchange/border communication"); @@ -982,7 +983,6 @@ void CommKokkos::borders_device() { double **x; double *mlo,*mhi; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; ExecutionSpace exec_space = ExecutionSpaceFromDevice::space; atomKK->sync(exec_space,ALL_MASK); @@ -1122,13 +1122,13 @@ void CommKokkos::borders_device() { if (nsend*size_border > maxsend) grow_send_kokkos(nsend*size_border,0); if (ghost_velocity) { - n = avec-> + n = atomKK->avecKK-> pack_border_vel_kokkos(nsend,k_sendlist,k_buf_send,iswap, pbc_flag[iswap],pbc[iswap],exec_space); DeviceType().fence(); } else { - n = avec-> + n = atomKK->avecKK-> pack_border_kokkos(nsend,k_sendlist,k_buf_send,iswap, pbc_flag[iswap],pbc[iswap],exec_space); DeviceType().fence(); @@ -1157,21 +1157,21 @@ void CommKokkos::borders_device() { if (ghost_velocity) { if (sendproc[iswap] != me) { - avec->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_recv,exec_space); DeviceType().fence(); } else { - avec->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_send,exec_space); DeviceType().fence(); } } else { if (sendproc[iswap] != me) { - avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_recv,exec_space); DeviceType().fence(); } else { - avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_send,exec_space); DeviceType().fence(); } @@ -1299,7 +1299,7 @@ void CommKokkos::grow_recv(int n) void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) { maxsend = static_cast (BUFFACTOR * n); - int maxsend_border = (maxsend+BUFEXTRA+5)/atom->avec->size_border + 2; + int maxsend_border = (maxsend+BUFEXTRA+5)/atomKK->avecKK->size_border + 2; if (flag) { if (space == Device) k_buf_send.modify(); @@ -1308,9 +1308,9 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) if (ghost_velocity) k_buf_send.resize(maxsend_border, - atom->avec->size_border + atom->avec->size_velocity); + atomKK->avecKK->size_border + atomKK->avecKK->size_velocity); else - k_buf_send.resize(maxsend_border,atom->avec->size_border); + k_buf_send.resize(maxsend_border,atomKK->avecKK->size_border); buf_send = k_buf_send.view().data(); } else { @@ -1318,10 +1318,10 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) k_buf_send = DAT:: tdual_xfloat_2d("comm:k_buf_send", maxsend_border, - atom->avec->size_border + atom->avec->size_velocity); + atomKK->avecKK->size_border + atomKK->avecKK->size_velocity); else k_buf_send = DAT:: - tdual_xfloat_2d("comm:k_buf_send",maxsend_border,atom->avec->size_border); + tdual_xfloat_2d("comm:k_buf_send",maxsend_border,atomKK->avecKK->size_border); buf_send = k_buf_send.view().data(); } } @@ -1333,9 +1333,9 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) void CommKokkos::grow_recv_kokkos(int n, ExecutionSpace /*space*/) { maxrecv = static_cast (BUFFACTOR * n); - int maxrecv_border = (maxrecv+BUFEXTRA+5)/atom->avec->size_border + 2; + int maxrecv_border = (maxrecv+BUFEXTRA+5)/atomKK->avecKK->size_border + 2; k_buf_recv = DAT:: - tdual_xfloat_2d("comm:k_buf_recv",maxrecv_border,atom->avec->size_border); + tdual_xfloat_2d("comm:k_buf_recv",maxrecv_border,atomKK->avecKK->size_border); buf_recv = k_buf_recv.view().data(); } diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index f7cf06d191..178c104b28 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -96,6 +96,8 @@ class CommKokkos : public CommBrick { void grow_list(int, int) override; void grow_swap(int) override; void copy_swap_info(); + + class AtomVecKokkos* avec_kk; }; } diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h index 59bca56d82..f3fead3c02 100644 --- a/src/MOLECULE/atom_vec_angle.h +++ b/src/MOLECULE/atom_vec_angle.h @@ -24,7 +24,7 @@ AtomStyle(angle,AtomVecAngle); namespace LAMMPS_NS { -class AtomVecAngle : public AtomVec { +class AtomVecAngle : virtual public AtomVec { public: AtomVecAngle(class LAMMPS *); ~AtomVecAngle() override; diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h index ab61089227..0b018e5ac1 100644 --- a/src/MOLECULE/atom_vec_bond.h +++ b/src/MOLECULE/atom_vec_bond.h @@ -24,7 +24,7 @@ AtomStyle(bond,AtomVecBond); namespace LAMMPS_NS { -class AtomVecBond : public AtomVec { +class AtomVecBond : virtual public AtomVec { public: AtomVecBond(class LAMMPS *); ~AtomVecBond() override; diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h index 91e8085f0d..0f55131d5d 100644 --- a/src/MOLECULE/atom_vec_full.h +++ b/src/MOLECULE/atom_vec_full.h @@ -24,7 +24,7 @@ AtomStyle(full,AtomVecFull); namespace LAMMPS_NS { -class AtomVecFull : public AtomVec { +class AtomVecFull : virtual public AtomVec { public: AtomVecFull(class LAMMPS *); ~AtomVecFull() override; diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h index 8f2bb1dfba..6e33a6c1c6 100644 --- a/src/MOLECULE/atom_vec_molecular.h +++ b/src/MOLECULE/atom_vec_molecular.h @@ -24,7 +24,7 @@ AtomStyle(molecular,AtomVecMolecular); namespace LAMMPS_NS { -class AtomVecMolecular : public AtomVec { +class AtomVecMolecular : virtual public AtomVec { public: AtomVecMolecular(class LAMMPS *); ~AtomVecMolecular() override; diff --git a/src/SPIN/atom_vec_spin.h b/src/SPIN/atom_vec_spin.h index f2eb24afc9..9ee6329acd 100644 --- a/src/SPIN/atom_vec_spin.h +++ b/src/SPIN/atom_vec_spin.h @@ -24,7 +24,7 @@ AtomStyle(spin,AtomVecSpin); namespace LAMMPS_NS { -class AtomVecSpin : public AtomVec { +class AtomVecSpin : virtual public AtomVec { public: AtomVecSpin(class LAMMPS *); diff --git a/src/atom_vec.h b/src/atom_vec.h index d5294d2f86..a4db054752 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -157,21 +157,6 @@ class AtomVec : protected Pointers { virtual double memory_usage(); virtual double memory_usage_bonus() { return 0; } - // old hybrid functions, needed by Kokkos package - - virtual int pack_comm_hybrid(int, int *, double *) { return 0; } - virtual int unpack_comm_hybrid(int, int, double *) { return 0; } - virtual int pack_reverse_hybrid(int, int, double *) { return 0; } - virtual int unpack_reverse_hybrid(int, int *, double *) { return 0; } - virtual int pack_border_hybrid(int, int *, double *) { return 0; } - virtual int unpack_border_hybrid(int, int, double *) { return 0; } - virtual int data_atom_hybrid(int, const std::vector &, int) { return 0; } - virtual int data_vel_hybrid(int, const std::vector &, int) { return 0; } - virtual int pack_data_hybrid(int, double *) { return 0; } - virtual int write_data_hybrid(FILE *, double *) { return 0; } - virtual int pack_vel_hybrid(int, double *) { return 0; } - virtual int write_vel_hybrid(FILE *, double *) { return 0; } - protected: int nmax; // local copy of atom->nmax int deform_vremap; // local copy of domain properties diff --git a/src/atom_vec_atomic.h b/src/atom_vec_atomic.h index 5afd63bd7c..6fdd570c2e 100644 --- a/src/atom_vec_atomic.h +++ b/src/atom_vec_atomic.h @@ -24,7 +24,7 @@ AtomStyle(atomic,AtomVecAtomic); namespace LAMMPS_NS { -class AtomVecAtomic : public AtomVec { +class AtomVecAtomic : virtual public AtomVec { public: AtomVecAtomic(class LAMMPS *); }; diff --git a/src/atom_vec_charge.h b/src/atom_vec_charge.h index 5f3bc333e7..2953b7cfcb 100644 --- a/src/atom_vec_charge.h +++ b/src/atom_vec_charge.h @@ -24,7 +24,7 @@ AtomStyle(charge,AtomVecCharge); namespace LAMMPS_NS { -class AtomVecCharge : public AtomVec { +class AtomVecCharge : virtual public AtomVec { public: AtomVecCharge(class LAMMPS *); }; diff --git a/src/atom_vec_hybrid.h b/src/atom_vec_hybrid.h index 8a81282f5b..afe44bae6e 100644 --- a/src/atom_vec_hybrid.h +++ b/src/atom_vec_hybrid.h @@ -24,7 +24,7 @@ AtomStyle(hybrid,AtomVecHybrid); namespace LAMMPS_NS { -class AtomVecHybrid : public AtomVec { +class AtomVecHybrid : virtual public AtomVec { public: int nstyles; class AtomVec **styles; diff --git a/src/atom_vec_sphere.h b/src/atom_vec_sphere.h index 2e42e95fc1..e6c903da4b 100644 --- a/src/atom_vec_sphere.h +++ b/src/atom_vec_sphere.h @@ -24,7 +24,7 @@ AtomStyle(sphere,AtomVecSphere); namespace LAMMPS_NS { -class AtomVecSphere : public AtomVec { +class AtomVecSphere : virtual public AtomVec { public: AtomVecSphere(class LAMMPS *); void process_args(int, char **) override; From 3b2376d0bb6163b77fb9208018cb2aaf74ddb669 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 20:37:30 -0500 Subject: [PATCH 25/46] use virtual inheritance consistently for all atom styles --- src/AMOEBA/atom_vec_amoeba.h | 2 +- src/AWPMD/atom_vec_wavepacket.h | 2 +- src/BPM/atom_vec_bpm_sphere.h | 2 +- src/CG-DNA/atom_vec_oxdna.h | 2 +- src/DIELECTRIC/atom_vec_dielectric.h | 2 +- src/DIPOLE/atom_vec_dipole.h | 2 +- src/DPD-MESO/atom_vec_edpd.h | 2 +- src/DPD-MESO/atom_vec_mdpd.h | 2 +- src/DPD-MESO/atom_vec_tdpd.h | 2 +- src/EFF/atom_vec_electron.h | 2 +- src/MACHDYN/atom_vec_smd.h | 2 +- src/MESONT/atom_vec_mesont.h | 2 +- src/MOLECULE/atom_vec_template.h | 2 +- src/PERI/atom_vec_peri.h | 2 +- src/SPH/atom_vec_sph.h | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/AMOEBA/atom_vec_amoeba.h b/src/AMOEBA/atom_vec_amoeba.h index b0e145f781..04e4650b4a 100644 --- a/src/AMOEBA/atom_vec_amoeba.h +++ b/src/AMOEBA/atom_vec_amoeba.h @@ -24,7 +24,7 @@ AtomStyle(amoeba,AtomVecAmoeba); namespace LAMMPS_NS { -class AtomVecAmoeba : public AtomVec { +class AtomVecAmoeba : virtual public AtomVec { public: AtomVecAmoeba(class LAMMPS *); ~AtomVecAmoeba() override; diff --git a/src/AWPMD/atom_vec_wavepacket.h b/src/AWPMD/atom_vec_wavepacket.h index 80f002ea1d..cc7c34191c 100644 --- a/src/AWPMD/atom_vec_wavepacket.h +++ b/src/AWPMD/atom_vec_wavepacket.h @@ -24,7 +24,7 @@ AtomStyle(wavepacket,AtomVecWavepacket); namespace LAMMPS_NS { -class AtomVecWavepacket : public AtomVec { +class AtomVecWavepacket : virtual public AtomVec { public: AtomVecWavepacket(class LAMMPS *); diff --git a/src/BPM/atom_vec_bpm_sphere.h b/src/BPM/atom_vec_bpm_sphere.h index 5789c5763c..38ce3d9bca 100644 --- a/src/BPM/atom_vec_bpm_sphere.h +++ b/src/BPM/atom_vec_bpm_sphere.h @@ -24,7 +24,7 @@ AtomStyle(bpm/sphere,AtomVecBPMSphere); namespace LAMMPS_NS { -class AtomVecBPMSphere : public AtomVec { +class AtomVecBPMSphere : virtual public AtomVec { public: AtomVecBPMSphere(class LAMMPS *); void process_args(int, char **) override; diff --git a/src/CG-DNA/atom_vec_oxdna.h b/src/CG-DNA/atom_vec_oxdna.h index 667a6243fc..91318574eb 100644 --- a/src/CG-DNA/atom_vec_oxdna.h +++ b/src/CG-DNA/atom_vec_oxdna.h @@ -24,7 +24,7 @@ AtomStyle(oxdna,AtomVecOxdna); namespace LAMMPS_NS { -class AtomVecOxdna : public AtomVec { +class AtomVecOxdna : virtual public AtomVec { public: AtomVecOxdna(class LAMMPS *); diff --git a/src/DIELECTRIC/atom_vec_dielectric.h b/src/DIELECTRIC/atom_vec_dielectric.h index b8bcf62fa3..34fe11b249 100644 --- a/src/DIELECTRIC/atom_vec_dielectric.h +++ b/src/DIELECTRIC/atom_vec_dielectric.h @@ -24,7 +24,7 @@ AtomStyle(dielectric,AtomVecDielectric); namespace LAMMPS_NS { -class AtomVecDielectric : public AtomVec { +class AtomVecDielectric : virtual public AtomVec { friend class PairLJCutCoulDebyeDielectric; friend class PairLJLongCoulLongDielectric; diff --git a/src/DIPOLE/atom_vec_dipole.h b/src/DIPOLE/atom_vec_dipole.h index 9970e6ccb0..923454a39f 100644 --- a/src/DIPOLE/atom_vec_dipole.h +++ b/src/DIPOLE/atom_vec_dipole.h @@ -24,7 +24,7 @@ AtomStyle(dipole,AtomVecDipole); namespace LAMMPS_NS { -class AtomVecDipole : public AtomVec { +class AtomVecDipole : virtual public AtomVec { public: AtomVecDipole(class LAMMPS *); diff --git a/src/DPD-MESO/atom_vec_edpd.h b/src/DPD-MESO/atom_vec_edpd.h index a9dca7ed26..43da20be70 100644 --- a/src/DPD-MESO/atom_vec_edpd.h +++ b/src/DPD-MESO/atom_vec_edpd.h @@ -24,7 +24,7 @@ AtomStyle(edpd,AtomVecEDPD); namespace LAMMPS_NS { -class AtomVecEDPD : public AtomVec { +class AtomVecEDPD : virtual public AtomVec { public: AtomVecEDPD(class LAMMPS *); void init() override; diff --git a/src/DPD-MESO/atom_vec_mdpd.h b/src/DPD-MESO/atom_vec_mdpd.h index 9516bcfa9c..9c2f293ba7 100644 --- a/src/DPD-MESO/atom_vec_mdpd.h +++ b/src/DPD-MESO/atom_vec_mdpd.h @@ -24,7 +24,7 @@ AtomStyle(mdpd,AtomVecMDPD); namespace LAMMPS_NS { -class AtomVecMDPD : public AtomVec { +class AtomVecMDPD : virtual public AtomVec { public: AtomVecMDPD(class LAMMPS *); void init() override; diff --git a/src/DPD-MESO/atom_vec_tdpd.h b/src/DPD-MESO/atom_vec_tdpd.h index c5fc2991a4..8bed9eb3a7 100644 --- a/src/DPD-MESO/atom_vec_tdpd.h +++ b/src/DPD-MESO/atom_vec_tdpd.h @@ -24,7 +24,7 @@ AtomStyle(tdpd,AtomVecTDPD); namespace LAMMPS_NS { -class AtomVecTDPD : public AtomVec { +class AtomVecTDPD : virtual public AtomVec { public: AtomVecTDPD(class LAMMPS *); void process_args(int, char **) override; diff --git a/src/EFF/atom_vec_electron.h b/src/EFF/atom_vec_electron.h index 6e4c123419..3c268182bc 100644 --- a/src/EFF/atom_vec_electron.h +++ b/src/EFF/atom_vec_electron.h @@ -24,7 +24,7 @@ AtomStyle(electron,AtomVecElectron); namespace LAMMPS_NS { -class AtomVecElectron : public AtomVec { +class AtomVecElectron : virtual public AtomVec { public: AtomVecElectron(class LAMMPS *); diff --git a/src/MACHDYN/atom_vec_smd.h b/src/MACHDYN/atom_vec_smd.h index 6d0ba383d4..6ca7f08b4d 100644 --- a/src/MACHDYN/atom_vec_smd.h +++ b/src/MACHDYN/atom_vec_smd.h @@ -35,7 +35,7 @@ AtomStyle(smd,AtomVecSMD); namespace LAMMPS_NS { -class AtomVecSMD : public AtomVec { +class AtomVecSMD : virtual public AtomVec { public: AtomVecSMD(class LAMMPS *); diff --git a/src/MESONT/atom_vec_mesont.h b/src/MESONT/atom_vec_mesont.h index 3df40dc376..44f3f97084 100644 --- a/src/MESONT/atom_vec_mesont.h +++ b/src/MESONT/atom_vec_mesont.h @@ -26,7 +26,7 @@ AtomStyle(mesont,AtomVecMesoNT); namespace LAMMPS_NS { -class AtomVecMesoNT : public AtomVec { +class AtomVecMesoNT : virtual public AtomVec { public: AtomVecMesoNT(class LAMMPS *); }; diff --git a/src/MOLECULE/atom_vec_template.h b/src/MOLECULE/atom_vec_template.h index f812273f0c..9a13ee2029 100644 --- a/src/MOLECULE/atom_vec_template.h +++ b/src/MOLECULE/atom_vec_template.h @@ -24,7 +24,7 @@ AtomStyle(template,AtomVecTemplate); namespace LAMMPS_NS { -class AtomVecTemplate : public AtomVec { +class AtomVecTemplate : virtual public AtomVec { public: AtomVecTemplate(class LAMMPS *); diff --git a/src/PERI/atom_vec_peri.h b/src/PERI/atom_vec_peri.h index e3072d127d..4e05a1728b 100644 --- a/src/PERI/atom_vec_peri.h +++ b/src/PERI/atom_vec_peri.h @@ -24,7 +24,7 @@ AtomStyle(peri,AtomVecPeri); namespace LAMMPS_NS { -class AtomVecPeri : public AtomVec { +class AtomVecPeri : virtual public AtomVec { public: AtomVecPeri(class LAMMPS *); diff --git a/src/SPH/atom_vec_sph.h b/src/SPH/atom_vec_sph.h index 8e607f3b45..e2b15709c5 100644 --- a/src/SPH/atom_vec_sph.h +++ b/src/SPH/atom_vec_sph.h @@ -24,7 +24,7 @@ AtomStyle(sph,AtomVecSPH); namespace LAMMPS_NS { -class AtomVecSPH : public AtomVec { +class AtomVecSPH : virtual public AtomVec { public: AtomVecSPH(class LAMMPS *); From d7742412b3a9885906d7913ba2015bc0b8f1209f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Dec 2022 20:37:53 -0500 Subject: [PATCH 26/46] must use dynamic cast due to virtual inheritance --- src/ASPHERE/pair_ylz.cpp | 2 +- unittest/formats/test_atom_styles.cpp | 50 +++++++++++++-------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/ASPHERE/pair_ylz.cpp b/src/ASPHERE/pair_ylz.cpp index afedf635d5..31cbf3f929 100644 --- a/src/ASPHERE/pair_ylz.cpp +++ b/src/ASPHERE/pair_ylz.cpp @@ -256,7 +256,7 @@ void PairYLZ::coeff(int narg, char **arg) void PairYLZ::init_style() { - avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); + avec = dynamic_cast(atom->style_match("ellipsoid")); if (!avec) error->all(FLERR, "Pair style ylz requires atom style ellipsoid"); neighbor->request(this, instance_me); diff --git a/unittest/formats/test_atom_styles.cpp b/unittest/formats/test_atom_styles.cpp index 4de794a1ca..6d1c0f479e 100644 --- a/unittest/formats/test_atom_styles.cpp +++ b/unittest/formats/test_atom_styles.cpp @@ -1147,7 +1147,7 @@ TEST_F(AtomStyleTest, ellipsoid) auto type = lmp->atom->type; auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1258,7 +1258,7 @@ TEST_F(AtomStyleTest, ellipsoid) type = lmp->atom->type; ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -1323,7 +1323,7 @@ TEST_F(AtomStyleTest, ellipsoid) ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -1476,7 +1476,7 @@ TEST_F(AtomStyleTest, line) auto type = lmp->atom->type; auto line = lmp->atom->line; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecLine *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1569,7 +1569,7 @@ TEST_F(AtomStyleTest, line) type = lmp->atom->type; line = lmp->atom->line; rmass = lmp->atom->rmass; - avec = (AtomVecLine *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -1614,7 +1614,7 @@ TEST_F(AtomStyleTest, line) line = lmp->atom->line; rmass = lmp->atom->rmass; - avec = (AtomVecLine *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -1760,7 +1760,7 @@ TEST_F(AtomStyleTest, tri) auto tri = lmp->atom->tri; auto rmass = lmp->atom->rmass; auto radius = lmp->atom->radius; - auto avec = (AtomVecTri *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1914,7 +1914,7 @@ TEST_F(AtomStyleTest, tri) tri = lmp->atom->tri; rmass = lmp->atom->rmass; radius = lmp->atom->radius; - avec = (AtomVecTri *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -2023,7 +2023,7 @@ TEST_F(AtomStyleTest, tri) tri = lmp->atom->tri; rmass = lmp->atom->rmass; - avec = (AtomVecTri *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -2081,7 +2081,7 @@ TEST_F(AtomStyleTest, body_nparticle) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto avec = (AtomVecBody *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); ASSERT_NE(lmp->atom->avec, nullptr); ASSERT_NE(avec->bptr, nullptr); ASSERT_THAT(std::string(avec->bptr->style), Eq("nparticle")); @@ -2344,7 +2344,7 @@ TEST_F(AtomStyleTest, body_nparticle) rmass = lmp->atom->rmass; radius = lmp->atom->radius; angmom = lmp->atom->angmom; - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -2484,7 +2484,7 @@ TEST_F(AtomStyleTest, body_nparticle) command("replicate 1 1 2"); END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("body")); - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(avec->bptr->style), Eq("nparticle")); ASSERT_NE(lmp->atom->avec, nullptr); ASSERT_EQ(lmp->atom->natoms, 8); @@ -2599,7 +2599,7 @@ TEST_F(AtomStyleTest, body_nparticle) body = lmp->atom->body; rmass = lmp->atom->rmass; radius = lmp->atom->radius; - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -3048,7 +3048,7 @@ TEST_F(AtomStyleTest, template_charge) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("template")); @@ -3079,7 +3079,7 @@ TEST_F(AtomStyleTest, template_charge) command("pair_coeff * *"); END_HIDE_OUTPUT(); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("template")); @@ -4189,7 +4189,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); @@ -4276,7 +4276,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); ASSERT_THAT(std::string(hybrid->keywords[1]), Eq("ellipsoid")); @@ -4306,7 +4306,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)hybrid->styles[1]; + auto avec = dynamic_cast(hybrid->styles[1]); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -4408,7 +4408,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) command("replicate 1 1 2 bbox"); END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); ASSERT_THAT(std::string(hybrid->keywords[1]), Eq("ellipsoid")); @@ -4429,7 +4429,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) type = lmp->atom->type; ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)hybrid->styles[1]; + avec = dynamic_cast(hybrid->styles[1]); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -4494,8 +4494,8 @@ TEST_F(AtomStyleTest, full_ellipsoid) ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - hybrid = (AtomVecHybrid *)lmp->atom->avec; - avec = (AtomVecEllipsoid *)hybrid->styles[1]; + hybrid = dynamic_cast(lmp->atom->avec); + avec = dynamic_cast(hybrid->styles[1]); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -4839,7 +4839,7 @@ TEST_F(AtomStyleTest, oxdna) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 3); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("bond")); @@ -5014,7 +5014,7 @@ TEST_F(AtomStyleTest, oxdna) ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 3); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("bond")); @@ -5058,7 +5058,7 @@ TEST_F(AtomStyleTest, oxdna) auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)hybrid->styles[1]; + auto avec = dynamic_cast(hybrid->styles[1]); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -0.33741452300167507, EPSILON); From 62a1cf5a8420a3b7a4a942401ea91594c20cd94e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 05:28:28 -0500 Subject: [PATCH 27/46] provide backward compatible URLs to reduce 404 errors on www.lammps.org --- doc/src/Commands_removed.rst | 2 ++ doc/src/fix_ave_spatial.rst | 9 +++++++++ doc/src/fix_ave_spatial_sphere.rst | 9 +++++++++ 3 files changed, 20 insertions(+) create mode 100644 doc/src/fix_ave_spatial.rst create mode 100644 doc/src/fix_ave_spatial_sphere.rst diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index 8f5219fe8f..6d7e7619bd 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -11,6 +11,8 @@ with the direct alternative (if available) and print a warning. Fix ave/spatial and fix ave/spatial/sphere ------------------------------------------ +.. deprecated:: 11Dec2015 + The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS since they were superseded by the more general and extensible "chunk infrastructure". Here the system is partitioned in one of many possible diff --git a/doc/src/fix_ave_spatial.rst b/doc/src/fix_ave_spatial.rst new file mode 100644 index 0000000000..96d87bd8db --- /dev/null +++ b/doc/src/fix_ave_spatial.rst @@ -0,0 +1,9 @@ +Fix ave/spatial command +======================= + +.. meta:: + :http-equiv=Refresh: 5; url='https://docs.lammps.org/Commands_removed.html#fix-ave-spatial-and-fix-ave-spatial-sphere' + +.. deprecated:: 11Dec2015 + +The `fix ave/spatial` command has been superseded by :doc:`fix ave/chunk `. diff --git a/doc/src/fix_ave_spatial_sphere.rst b/doc/src/fix_ave_spatial_sphere.rst new file mode 100644 index 0000000000..a3cacc4115 --- /dev/null +++ b/doc/src/fix_ave_spatial_sphere.rst @@ -0,0 +1,9 @@ +Fix ave/spatial command +======================= + +.. meta:: + :http-equiv=Refresh: 5; url='https://docs.lammps.org/Commands_removed.html#fix-ave-spatial-and-fix-ave-spatial-sphere' + +.. deprecated:: 11Dec2015 + +The `fix ave/spatial/sphere` command has been superseded by :doc:`fix ave/chunk `. From dd7a39b702cd3872b54d118647662483f4d2080c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 09:22:02 -0500 Subject: [PATCH 28/46] add missing entry to table --- doc/src/Build_extras.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index a3ceb1df4f..910dccbb8a 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -36,6 +36,7 @@ This is the list of packages that may require additional steps. * :ref:`AWPMD ` * :ref:`COLVARS ` * :ref:`COMPRESS ` + * :ref:`ELECTRODE ` * :ref:`GPU ` * :ref:`H5MD ` * :ref:`INTEL ` From a94ec5fdf7e83115c5468a43030ceca88d9f600a Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 13 Dec 2022 10:19:54 -0700 Subject: [PATCH 29/46] Remove redundant variables --- src/KOKKOS/atom_vec_angle_kokkos.h | 6 ------ src/KOKKOS/atom_vec_bond_kokkos.h | 6 ------ src/KOKKOS/atom_vec_charge_kokkos.h | 5 ----- src/KOKKOS/atom_vec_dpd_kokkos.h | 5 ----- src/KOKKOS/atom_vec_full_kokkos.h | 6 ------ src/KOKKOS/atom_vec_hybrid_kokkos.h | 6 ------ src/KOKKOS/atom_vec_molecular_kokkos.h | 6 ------ src/KOKKOS/atom_vec_sphere_kokkos.h | 4 ---- src/KOKKOS/atom_vec_spin_kokkos.h | 5 ----- 9 files changed, 49 deletions(-) diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index eba1d7ead2..229be08f46 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -63,12 +63,6 @@ class AtomVecAngleKokkos : public AtomVecKokkos, public AtomVecAngle { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; int **nspecial; tagint **special; diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index a8befcf521..42328ba3c7 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -54,12 +54,6 @@ class AtomVecBondKokkos : public AtomVecKokkos, public AtomVecBond { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; int **nspecial; tagint **special; diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index a09d1d3cf0..4b1dc067da 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -55,11 +55,6 @@ class AtomVecChargeKokkos : public AtomVecKokkos, public AtomVecCharge { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; DAT::t_tagint_1d d_tag; diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.h b/src/KOKKOS/atom_vec_dpd_kokkos.h index ddc590b2c7..484d923506 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.h +++ b/src/KOKKOS/atom_vec_dpd_kokkos.h @@ -69,11 +69,6 @@ class AtomVecDPDKokkos : public AtomVecKokkos, public AtomVecDPD { DAT::t_efloat_1d d_uCond, d_uMech, d_uChem, d_uCG, d_uCGnew,d_rho,d_dpdTheta,d_duChem; HAT::t_efloat_1d h_uCond, h_uMech, h_uChem, h_uCG, h_uCGnew,h_rho,h_dpdTheta,h_duChem; - tagint *tag; - imageint *image; - int *type,*mask; - double **x,**v,**f; - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; DAT::t_imageint_1d d_image; diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 5de3246f4e..806f1c1814 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -54,12 +54,6 @@ class AtomVecFullKokkos : public AtomVecKokkos, public AtomVecFull { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; tagint *molecule; diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index 5249f3ef93..feacd4576c 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -65,10 +65,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos, public AtomVecHybrid { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; double **omega,**angmom; DAT::t_tagint_1d d_tag; @@ -89,8 +85,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos, public AtomVecHybrid { DAT::t_v_array d_omega, d_angmom; HAT::t_v_array h_omega, h_angmom; - DAT::tdual_int_1d k_count; - int nallstyles; char **allstyles; diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index 0e0eb3af95..a420b17e21 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -63,12 +63,6 @@ class AtomVecMolecularKokkos : public AtomVecKokkos, public AtomVecMolecular { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; int **nspecial; tagint **special; diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.h b/src/KOKKOS/atom_vec_sphere_kokkos.h index c566f9ee50..e2c5250648 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.h +++ b/src/KOKKOS/atom_vec_sphere_kokkos.h @@ -77,10 +77,6 @@ class AtomVecSphereKokkos : public AtomVecKokkos, public AtomVecSphere { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; double *radius,*rmass; double **omega,**torque; int radvary; diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index 1d969fc510..9fb36706a7 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -55,11 +55,6 @@ class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; // lattice quantities - // spin quantities double **sp; // sp[i][0-2] direction of the spin i // sp[i][3] atomic magnetic moment of the spin i From bd2001578b98584ddc45891914bc2e02bcae7e3b Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 13 Dec 2022 10:56:56 -0700 Subject: [PATCH 30/46] Remove more redundant variables --- src/DPD-REACT/atom_vec_dpd.h | 2 +- src/KOKKOS/atom_vec_angle_kokkos.h | 9 +-------- src/KOKKOS/atom_vec_bond_kokkos.h | 5 +---- src/KOKKOS/atom_vec_charge_kokkos.h | 3 +-- src/KOKKOS/atom_vec_dpd_kokkos.h | 5 ++--- src/KOKKOS/atom_vec_full_kokkos.h | 12 ------------ src/KOKKOS/atom_vec_hybrid_kokkos.h | 3 +-- src/KOKKOS/atom_vec_molecular_kokkos.h | 14 +------------- src/KOKKOS/atom_vec_sphere_kokkos.h | 7 ++----- src/KOKKOS/atom_vec_spin_kokkos.h | 9 +-------- src/MOLECULE/atom_vec_angle.h | 2 +- src/MOLECULE/atom_vec_bond.h | 2 +- src/MOLECULE/atom_vec_full.h | 2 +- src/MOLECULE/atom_vec_molecular.h | 2 +- src/SPIN/atom_vec_spin.h | 2 +- src/atom_vec_sphere.h | 2 +- 16 files changed, 17 insertions(+), 64 deletions(-) diff --git a/src/DPD-REACT/atom_vec_dpd.h b/src/DPD-REACT/atom_vec_dpd.h index 2a45ad6997..7b50e26236 100644 --- a/src/DPD-REACT/atom_vec_dpd.h +++ b/src/DPD-REACT/atom_vec_dpd.h @@ -32,7 +32,7 @@ class AtomVecDPD : virtual public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: double *rho, *dpdTheta; double *uCond, *uMech, *uChem; double *uCG, *uCGnew; diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index 229be08f46..cb1331aa04 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -64,14 +64,8 @@ class AtomVecAngleKokkos : public AtomVecKokkos, public AtomVecAngle { protected: tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; DAT::t_tagint_1d d_tag; @@ -112,8 +106,7 @@ class AtomVecAngleKokkos : public AtomVecKokkos, public AtomVecAngle { HAT::t_tagint_2d h_angle_atom1,h_angle_atom2,h_angle_atom3; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index 42328ba3c7..82c50f7d0d 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -53,12 +53,9 @@ class AtomVecBondKokkos : public AtomVecKokkos, public AtomVecBond { void modified(ExecutionSpace space, unsigned int mask) override; void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; - protected: + private: tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; DAT::t_tagint_1d d_tag; diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index 4b1dc067da..556d03fedd 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -75,8 +75,7 @@ class AtomVecChargeKokkos : public AtomVecKokkos, public AtomVecCharge { HAT::t_float_1d h_q; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.h b/src/KOKKOS/atom_vec_dpd_kokkos.h index 484d923506..203bbb19a5 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.h +++ b/src/KOKKOS/atom_vec_dpd_kokkos.h @@ -62,7 +62,7 @@ class AtomVecDPDKokkos : public AtomVecKokkos, public AtomVecDPD { void sync(ExecutionSpace space, unsigned int mask) override; void modified(ExecutionSpace space, unsigned int mask) override; void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; - double *uCond,*uMech,*uChem,*uCG,*uCGnew,*rho,*dpdTheta; + double *duChem; protected: @@ -81,8 +81,7 @@ class AtomVecDPDKokkos : public AtomVecKokkos, public AtomVecDPD { DAT::t_f_array d_f; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 806f1c1814..3985f19dcb 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -55,23 +55,11 @@ class AtomVecFullKokkos : public AtomVecKokkos, public AtomVecFull { protected: double *q; - tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; - - int *num_dihedral; - int **dihedral_type; tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; DAT::t_tagint_1d d_tag; diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index feacd4576c..150682ef46 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -92,8 +92,7 @@ class AtomVecHybridKokkos : public AtomVecKokkos, public AtomVecHybrid { int known_style(char *); }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index a420b17e21..6c011823fe 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -64,21 +64,10 @@ class AtomVecMolecularKokkos : public AtomVecKokkos, public AtomVecMolecular { protected: tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; - - int *num_dihedral; - int **dihedral_type; tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; DAT::t_tagint_1d d_tag; @@ -137,8 +126,7 @@ class AtomVecMolecularKokkos : public AtomVecKokkos, public AtomVecMolecular { h_improper_atom3,h_improper_atom4; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.h b/src/KOKKOS/atom_vec_sphere_kokkos.h index e2c5250648..0783fd874e 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.h +++ b/src/KOKKOS/atom_vec_sphere_kokkos.h @@ -77,9 +77,7 @@ class AtomVecSphereKokkos : public AtomVecKokkos, public AtomVecSphere { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; private: - double *radius,*rmass; - double **omega,**torque; - int radvary; + double **torque; DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; @@ -101,8 +99,7 @@ class AtomVecSphereKokkos : public AtomVecKokkos, public AtomVecSphere { HAT::t_f_array h_torque; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index 9fb36706a7..68834d4ef2 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -55,12 +55,6 @@ class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - // 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 - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; @@ -83,8 +77,7 @@ class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { HAT::t_fm_long_array h_fm_long; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h index f3fead3c02..76ef120176 100644 --- a/src/MOLECULE/atom_vec_angle.h +++ b/src/MOLECULE/atom_vec_angle.h @@ -35,7 +35,7 @@ class AtomVecAngle : virtual public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle; int **bond_type, **angle_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h index 0b018e5ac1..7c99829484 100644 --- a/src/MOLECULE/atom_vec_bond.h +++ b/src/MOLECULE/atom_vec_bond.h @@ -35,7 +35,7 @@ class AtomVecBond : virtual public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond; int **bond_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h index 0f55131d5d..ed3be02812 100644 --- a/src/MOLECULE/atom_vec_full.h +++ b/src/MOLECULE/atom_vec_full.h @@ -35,7 +35,7 @@ class AtomVecFull : virtual public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle, *num_dihedral, *num_improper; int **bond_type, **angle_type, **dihedral_type, **improper_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h index 6e33a6c1c6..50434d0ae0 100644 --- a/src/MOLECULE/atom_vec_molecular.h +++ b/src/MOLECULE/atom_vec_molecular.h @@ -35,7 +35,7 @@ class AtomVecMolecular : virtual public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle, *num_dihedral, *num_improper; int **bond_type, **angle_type, **dihedral_type, **improper_type; int **nspecial; diff --git a/src/SPIN/atom_vec_spin.h b/src/SPIN/atom_vec_spin.h index 9ee6329acd..bf11d5856e 100644 --- a/src/SPIN/atom_vec_spin.h +++ b/src/SPIN/atom_vec_spin.h @@ -32,7 +32,7 @@ class AtomVecSpin : virtual public AtomVec { void force_clear(int, size_t) override; void data_atom_post(int) override; - private: + protected: double **sp, **fm, **fm_long; }; diff --git a/src/atom_vec_sphere.h b/src/atom_vec_sphere.h index e6c903da4b..88a879d611 100644 --- a/src/atom_vec_sphere.h +++ b/src/atom_vec_sphere.h @@ -36,7 +36,7 @@ class AtomVecSphere : virtual public AtomVec { void pack_data_pre(int) override; void pack_data_post(int) override; - private: + protected: double *radius, *rmass; double **omega; From 77dea685b5ee371734717837f8312b621c00c873 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 13 Dec 2022 12:10:56 -0700 Subject: [PATCH 31/46] Small cleanup --- src/KOKKOS/comm_kokkos.cpp | 2 -- src/KOKKOS/comm_kokkos.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index a21d5482e7..6fad33a918 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -150,8 +150,6 @@ void CommKokkos::init() if (ghost_velocity && atomKK->avecKK->no_comm_vel_flag) // not all Kokkos atom_vec styles have comm vel pack/unpack routines yet forward_comm_classic = true; - - } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index 178c104b28..f7cf06d191 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -96,8 +96,6 @@ class CommKokkos : public CommBrick { void grow_list(int, int) override; void grow_swap(int) override; void copy_swap_info(); - - class AtomVecKokkos* avec_kk; }; } From 1440ff7b16345741c8bb6252ea4bee69345945ec Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 15:50:21 -0500 Subject: [PATCH 32/46] import fix sgcmc code from lammps-plugin repo --- src/MC/fix_semigrandcanonical_mc.cpp | 1922 ++++++++++++++++++++++++++ src/MC/fix_semigrandcanonical_mc.h | 272 ++++ 2 files changed, 2194 insertions(+) create mode 100644 src/MC/fix_semigrandcanonical_mc.cpp create mode 100644 src/MC/fix_semigrandcanonical_mc.h diff --git a/src/MC/fix_semigrandcanonical_mc.cpp b/src/MC/fix_semigrandcanonical_mc.cpp new file mode 100644 index 0000000000..98a2aa4a12 --- /dev/null +++ b/src/MC/fix_semigrandcanonical_mc.cpp @@ -0,0 +1,1922 @@ +/* ---------------------------------------------------------------------- + * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) + * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). + * + * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a + * description of the algorithm. + * + * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) + * + * History: + * + * 27-Feb-09 - AS - Original version + * + * 11-Mar-09 - AS - The MC fix is now invoked on the POST_FORCE stage of an + * MD step to avoid conflicts with other fixes that change + * the box size. + * + * 12-Mar-09 - AS - Added support for an arbitrary number of atom types. + * + * 13-Mar-09 - AS - Particle velocity is rescaled after accepted swap + * to conserve kinetic energy. + * + * 19-Jul-09 - AS - Made the MC routine compatible with Finnis-Sinclair type + * potentials. Takes now into account that the electron density + * at the swapped atom may change. + * + * 19-Jul-09 - AS - Added printing of parameter values to log file. + * + * 19-Jul-09 - AS - Added a serial VCSGC mode that doesn't use the second + * rejection step for simulations on a single processor. + * + * 17-Nov-09 - AS - The MC routine can now be used with arbitrary potential styles + * in serial mode. In this mode the generic total energy routine + * is used to calculate the energy difference. + * + * 15-Apr-10 - AS - Added the Install.sh script and made some small changes + * to make the module compatible with current version of LAMMPS. + * + * 17-Nov-10 - AS - Added debug code to check whether the random selection + * of trial particles is evenly distributed in parallel simulations. + * The individual trial count of each particle can be written to a dump file. + * + * 17-Nov-10 - AS - Fixed a bug in the printLog() function that led to + * corrupted log files. + * + * 15-Feb-11 - AS - Fixed compilation error in the compute_vector() method by replacing + * the max() function with inline code. + * + * 24-Sep-11 - AS - Adapted code to new interface of Error::one() function. + * + * 18-Sep-12 - AS - Renamed fix style from "sgc_mc" to "sgcmc". + * + * 07-Feb-13 - AS - Changed computeEnergyChangeGeneric() such that it no longer screws + * up the stored atomic forces. Now it can actual be used for hybrid MD/MC simulations. + * + * 20-Jan-15 - AS - Updated call to Neighbor::request() to include the 'instance_me' identifier. + * This change breaks backward-compatibility with LAMMPS versions prior to "20 Jan 2015". + * + * 10-Feb-15 - AS - Changed function pack_comm() to pack_forward_comm(), as required by recent LAMMPS version. + * + * 14-Apr-16 - AS - Restricted MC swaps to atoms in the fix group. + * +------------------------------------------------------------------------- */ + +#include "fix_semigrandcanonical_mc.h" + +#include "atom.h" +#include "update.h" +#include "error.h" +#include "modify.h" +#include "comm.h" +#include "domain.h" +#include "universe.h" +#include "force.h" +#include "compute.h" +#include "memory.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "pair.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "integrate.h" + +#include "pair_eam.h" +#include "random_park.h" + +#if CDEAM_MC_SUPPORT + #include "pair_eam_cd.h" +#endif +#if TERSOFF_MC_SUPPORT + #include "pair_tersoff.h" +#endif + +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; + +// This is for debugging purposes. The ASSERT() macro is used in the code to check +// if everything runs as expected. +#if SGCMC_DEBUG + inline void my_noop() {} + #define ASSERT(cond) ((!(cond)) ? error->one(FLERR, "Assertion failure.") : my_noop()) +#else + #define ASSERT(cond) +#endif + +/********************************************************************* + * Constructs the fix object and parses the input parameters + * that control the Monte Carlo routine. + *********************************************************************/ +FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), random(nullptr), localRandom(nullptr), neighborList(nullptr), + samplingWindowUserSize(0), samplingWindowPosition(5), nAcceptedSwaps(0), nRejectedSwaps(0), + kappa(0), serialMode(false), compute_pe(nullptr), pairEAM(nullptr) +{ + this->scalar_flag = 0; + this->vector_flag = 1; + this->extvector = 0; + this->global_freq = 1; + + // Specifies the number of output fields this fix produces for thermo output. + // It calculates the + // - Number of accepted trial moves + // - Number of rejected trial moves + // - Atom counts for each species. + this->size_vector = 2 + atom->ntypes; + + // Let LAMMPS know the number of data values per atom to transfer in MPI communication. + this->comm_forward = 4; + this->comm_reverse = 3; + +#if SGCMC_DEBUG + this->peratom_flag = 1; + this->size_peratom_cols = 0; + this->peratom_freq = 1; + this->create_attribute = 1; + trialCounters = nullptr; + grow_arrays(atom->nmax); + ASSERT(trialCounters != nullptr || atom->nlocal == 0); + memset(trialCounters, 0, sizeof(trialCounters[0]) * atom->nlocal); +#endif + + if(domain->triclinic) + error->all(FLERR, "Fix sgcmc does not support non-orthogonal simulation boxes."); + + // Parse fix parameters from input file. + if(narg < 6) + error->all(FLERR, "Illegal fix sgcmc command. Not enough parameters."); + + // Counter for reading parameters. + int iarg = 2; + + // Parse the number of MD timesteps to do between MC. + iarg++; + nevery_mdsteps = atoi(arg[iarg]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Number of MD timesteps: {}\n", nevery_mdsteps); + if(nevery_mdsteps <= 0) + error->all(FLERR, "Illegal fix sgcmc command. Invalid number of MD timesteps."); + + // Parse the fraction of atoms swaps attempted during each cycle. + iarg++; + swap_fraction = atof(arg[iarg]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Fraction of swap atoms: {}\n", swap_fraction); + if(swap_fraction < 0 || swap_fraction > 1.0) + error->all(FLERR, "Illegal fix sgcmc command. Invalid fraction of swap atoms."); + + // Parse temperature for MC. + iarg++; + double temperature = atof(arg[iarg]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Temperature: %f\n", temperature); + if(temperature <= 0) + error->all(FLERR, "Illegal fix sgcmc command. Temperature invalid."); + double kb = 8.617343e-5; + beta = 1.0 / ( kb * temperature ); + + // Parse chemical potentials. + iarg++; + deltamu.resize(atom->ntypes + 1); + deltamu[0] = 0.0; + deltamu[1] = 0.0; + if(atom->ntypes < 2) + error->all(FLERR, "Illegal fix sgcmc command. Fix can only be used in simulations with at least two atom types."); + for(int i=2; i<=atom->ntypes; i++, iarg++) { + if(iarg >= narg) + error->all(FLERR, "Illegal fix sgcmc command. Too few chemical potentials specified."); + deltamu[i] = atof(arg[iarg]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Chemical potential of species {}: {}\n", i, deltamu[i]); + } + + // Default values for optional parameters (where applicable). + numSamplingWindowMoves = 8; + seed = 324234; + + // Parse extra/optional parameters + while(iarg < narg) { + + if(strcmp(arg[iarg], "randseed") == 0) { + // Random number seed. + if(iarg + 2 > narg) error->all(FLERR, "Illegal fix sgcmc command. Missing parameter after keyword 'randseed'."); + seed = atoi(arg[iarg+1]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Random number seed: {}\n", seed); + if(seed <= 0) + error->all(FLERR, "Illegal fix sgcmc command. Random number seed must be positive."); + iarg += 2; + + } + else if(strcmp(arg[iarg], "window_moves") == 0) { + // Parse number of window moves. + if(iarg + 2 > narg) error->all(FLERR, "Illegal fix sgcmc command. Missing parameter after keyword 'window_moves'."); + numSamplingWindowMoves = atoi(arg[iarg+1]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Number of sampling window moves: {}\n", numSamplingWindowMoves); + if(numSamplingWindowMoves <= 0) + error->all(FLERR, "Illegal fix sgcmc command. Invalid number of sampling window moves."); + iarg += 2; + + } + else if(strcmp(arg[iarg], "window_size") == 0) { + // Parse sampling window size parameter. + if(iarg + 2 > narg) error->all(FLERR, "Missing parameter after keyword 'window_size'."); + samplingWindowUserSize = atof(arg[iarg+1]); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Sampling window size: {}\n", samplingWindowUserSize); + if(samplingWindowUserSize < 0.5 || samplingWindowUserSize > 1.0) + error->all(FLERR, "Illegal fix sgcmc command. Sampling window size is out of range."); + iarg += 2; + } + else if(strcmp(arg[iarg], "variance") == 0) { + // Parse parameters for variance constraint ensemble. + if(iarg + 1 + atom->ntypes > narg) + error->all(FLERR, "Illegal fix sgcmc command. Too few parameters after keyword 'variance'."); + iarg++; + + kappa = atof(arg[iarg]); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Kappa: {}\n", kappa); + if(kappa < 0) + error->all(FLERR, "Illegal fix sgcmc command. Variance constraint parameter must not be negative."); + iarg++; + + targetConcentration.resize(atom->ntypes + 1); + targetConcentration[0] = 1.0; + targetConcentration[1] = 1.0; + for(int i=2; i<=atom->ntypes; i++, iarg++) { + targetConcentration[i] = atof(arg[iarg]); + targetConcentration[1] -= targetConcentration[i]; + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Target concentration of species {}: {}\n", i, targetConcentration[i]); + if(targetConcentration[i] < 0 || targetConcentration[i] > 1.0) + error->all(FLERR, "Illegal fix sgcmc command. Target concentration is out of range."); + } + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Target concentration of species 1: {}\n", targetConcentration[1]); + if(targetConcentration[1] < 0) + error->all(FLERR, "Illegal fix sgcmc command. Target concentration is out of range."); + } + else if(strcmp(arg[iarg], "serial") == 0) { + // Switch off second rejection. + serialMode = true; + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using serial MC version without second rejection.\n"); + iarg++; + + if(comm->nprocs != 1) + error->all(FLERR, "Illegal fix sgcmc command. Cannot use serial mode Monte Carlo in a parallel simulation."); + } + else error->all(FLERR, "Illegal fix sgcmc command. Unknown optional parameter."); + } + + // Initialize random number generators. + random = new RanPark(lmp, seed); + localRandom = new RanPark(lmp, seed + universe->me); +} + +/********************************************************************* + * Destructor. Cleans up the random number generators. + *********************************************************************/ +FixSemiGrandCanonicalMC::~FixSemiGrandCanonicalMC() +{ + delete random; + delete localRandom; + +#if SGCMC_DEBUG + memory->sfree(trialCounters); +#endif +} + +#if SGCMC_DEBUG + +/********************************************************************* + * Allocate atom-based array. + *********************************************************************/ +void FixSemiGrandCanonicalMC::grow_arrays(int nmax) +{ + trialCounters = (double*)memory->srealloc(trialCounters, atom->nmax * sizeof(trialCounters[0]), "sgcmc:trialcounters"); + vector_atom = trialCounters; +} + +/********************************************************************* + * Copy values within local atom-based array. + *********************************************************************/ +void FixSemiGrandCanonicalMC::copy_arrays(int i, int j) +{ + trialCounters[j] = trialCounters[i]; +} + +/********************************************************************* + * Initialize one atom's array values, called when atom is created. + *********************************************************************/ +void FixSemiGrandCanonicalMC::set_arrays(int i) +{ + trialCounters[i] = 0; +} + +/********************************************************************* + * Pack values in local atom-based array for exchange with another proc. + *********************************************************************/ +int FixSemiGrandCanonicalMC::pack_exchange(int i, double *buf) +{ + buf[0] = trialCounters[i]; + return 1; +} + +/********************************************************************* + * Unpack values in local atom-based array from exchange with another proc. + *********************************************************************/ +int FixSemiGrandCanonicalMC::unpack_exchange(int nlocal, double *buf) +{ + trialCounters[nlocal] = buf[0]; + return 1; +} + +#endif + +/********************************************************************* + * The return value of this method specifies at which points the + * fix is invoked during the simulation. + *********************************************************************/ +int FixSemiGrandCanonicalMC::setmask() +{ + // We want the MC routine to be called in between the MD steps. + // We need the electron densities for each atom, so after the + // EAM potential has computed them in the force routine is a good + // time to invoke the MC routine. + int mask = 0; + mask |= POST_FORCE; + mask |= POST_FORCE_RESPA; + return mask; +} + +/********************************************************************* + * This gets called by the system before the simulation starts. + *********************************************************************/ +void FixSemiGrandCanonicalMC::init() +{ + // Make sure the user has defined only one Monte-Carlo fix. + int count = 0; + for(int i = 0; i < modify->nfix; i++) + if(strcmp(modify->fix[i]->style,"sgcmc") == 0) count++; + if(count > 1) error->all(FLERR, "More than one fix sgcmc defined."); + + // Save a pointer to the EAM potential. + if((pairEAM = dynamic_cast(force->pair))) { +#if CDEAM_MC_SUPPORT + if((pairCDEAM = dynamic_cast(pairEAM))) { + if(pairCDEAM->cdeamVersion != 1) + error->all(FLERR, "The sgcmc fix works only with the one-site concentration version of the CD-EAM potential."); + } +#endif + } +#if TERSOFF_MC_SUPPORT + else if((pairTersoff = dynamic_cast(force->pair))) {} +#endif + else { + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); + + // Create a compute that will provide the total energy of the system. + // This is needed by computeTotalEnergy(). + char* id_pe = (char*)"thermo_pe"; + int ipe = modify->find_compute(id_pe); + compute_pe = modify->compute[ipe]; + } + interactionRadius = force->pair->cutforce; + if (comm->me == 0) utils::logmesg(lmp, " SGC - Interaction radius: {}\n", interactionRadius); + + // This fix needs a full neighbor list. + neighbor->add_request(this, NeighConst::REQ_FULL); + + // Count local number of atoms from each species. + const int *type = atom->type; + const int *mask = atom->mask; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for(int i = 0; i < atom->nlocal; i++, ++type) { + ASSERT(*type >= 1 && *type <= atom->ntypes); + if(mask[i] & groupbit) + localSpeciesCounts[*type]++; + } + + // MPI sum to get global concentrations. + speciesCounts.resize(atom->ntypes+1); + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); +} + +/********************************************************************* + * Assigns the requested neighbor list to the fix. + *********************************************************************/ +void FixSemiGrandCanonicalMC::init_list(int /*id*/, NeighList *ptr) +{ + this->neighborList = ptr; +} + +/********************************************************************* + * Called after the EAM force calculation during each timestep. + * This method triggers the MC routine from time to time. + *********************************************************************/ +void FixSemiGrandCanonicalMC::post_force(int /*vflag*/) +{ + if((update->ntimestep % nevery_mdsteps) == 0) + doMC(); +} + +/********************************************************************* + * This routine does one full MC step. + *********************************************************************/ +void FixSemiGrandCanonicalMC::doMC() +{ + /// Reset energy variable to signal the energy calculation routine that + /// it need to recompute the current total energy. + totalPotentialEnergy = 0; + + // Allocate array memory. + changedAtoms.resize(atom->nmax); + + // During the last MD timestep the EAM potential routine has computed the + // electron densities for all atoms that belong to this processor. + // They are stored in the rho array of the PairEAM class. + // But computing the energy change caused by flipping one atom of this processor + // might require the electron densities of atoms that belong to other processors. + // So we first need to fetch those electron densities for our ghost atoms now. + fetchGhostAtomElectronDensities(); + + const int *mask = atom->mask; +#if SGCMC_DEBUG + // This check is for debugging only! Can be safely removed. + // Check the global concentration counter if it is still in sync on all nodes. + const int *type = atom->type; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + std::vector globalSpeciesCounts(atom->ntypes+1, 0); + for(int i = 0; i < atom->nlocal; i++, ++type) { + if(mask[i] & groupbit) + localSpeciesCounts[*type]++; + } + MPI_Allreduce(&localSpeciesCounts.front(), &globalSpeciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + for(int i = 1; i <= atom->ntypes; i++) { + // Note: If this test fails it might be an error in the code or + // because LAMMPS has lost atoms. This can happen for bad atom systems. + ASSERT(globalSpeciesCounts[i] == speciesCounts[i]); + } +#endif // End of debugging code + + // Reset counters. + int nAcceptedSwapsLocal = 0; + int nRejectedSwapsLocal = 0; + + int oldSpecies, newSpecies; + std::vector deltaN(atom->ntypes+1, 0); //< Local change in number of atoms of each species. + std::vector deltaNGlobal(atom->ntypes+1, 0); //< Global change in number of atoms of each species. + + for(int i = 0; i < numSamplingWindowMoves; i++) { + + // Reset flag array that keeps track of changed per-atom quantities. + std::fill(changedAtoms.begin(), changedAtoms.end(), false); + + // Position the sampling window within the node's boundaries. + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window and we have to exchange atom information after each and + // and every swap step, which is very slow. + bool oversizeWindow = placeSamplingWindow(); + + /// The number of times we want to swap an atom. + int nDice = (int)(swap_fraction * numFixAtomsLocal / numSamplingWindowMoves); + + // This number must be synchronized with the other nodes. We take the largest + // of all nodes and skip trial moves later. + int largestnDice; + MPI_Allreduce(&nDice, &largestnDice, 1, MPI_INT, MPI_MAX, world); + + // The probability to do one swap step. + double diceProbability = (double)nDice / (double)largestnDice; + + // Inner MC loop that swaps atom types. + for(int j = 0; j < largestnDice; j++) { + + double deltaE = 0; + std::fill(deltaN.begin(), deltaN.end(), 0); + int selectedAtom = -1, selectedAtomNL = -1; + + // This is only needed for debugging purposes: + int selectedAtomDebug = -1; + double deltaEDebug = 0; + + // As already said above, we have to do swap steps only with a certain probability + // to keep nodes in sync. + if(localRandom->uniform() <= diceProbability) { + + // Choose a random atom from the pool of atoms that are inside the sampling window. + int index = (int)(localRandom->uniform() * (double)samplingWindowAtoms.size()); + ASSERT(index < samplingWindowAtoms.size()); + selectedAtomNL = samplingWindowAtoms[index]; + + // Get the real atom index. + ASSERT(selectedAtomNL < neighborList->inum); + selectedAtom = neighborList->ilist[selectedAtomNL]; + ASSERT(selectedAtom < atom->nlocal); + ASSERT(selectedAtom == selectedAtomNL); // This assumption may be wrong. + oldSpecies = atom->type[selectedAtom]; + +#if SGCMC_DEBUG + trialCounters[selectedAtom]++; +#endif + + // Choose the new type for the swapping atom by random. + if(atom->ntypes > 2) { + // Use a random number to choose the new species if there are three or more atom types. + newSpecies = (int)(localRandom->uniform() * (atom->ntypes-1)) + 1; + if(newSpecies >= oldSpecies) newSpecies++; + } + else { + // If there are only two atom types, then the decision is clear. + newSpecies = (oldSpecies == 1) ? 2 : 1; + } + ASSERT(newSpecies >= 1 && newSpecies <= atom->ntypes && newSpecies != oldSpecies); + deltaN[oldSpecies] = -1; + deltaN[newSpecies] = +1; + + // Compute the energy difference that swapping this atom would cost or gain. + if(pairEAM) { +#if CDEAM_MC_SUPPORT + if(pairCDEAM) // Concentration dependent EAM case: + deltaE = computeEnergyChangeCDEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + else // Standard EAM case: +#endif + deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } +#if TERSOFF_MC_SUPPORT + else if(pairTersoff) { + deltaE = computeEnergyChangeTersoff(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } +#endif + else { + // Generic case: + deltaE = computeEnergyChangeGeneric(selectedAtom, oldSpecies, newSpecies); + } + + // This is only needed for debugging purposes. + // Save the values so they can later be checked. + selectedAtomDebug = selectedAtom; + deltaEDebug = deltaE; + + // Perform inner MC acceptance test. + double dm = 0.0; + if(serialMode && kappa != 0.0) { + for(int i = 2; i <= atom->ntypes; i++) + dm += (deltamu[i] + kappa / atom->natoms * (2.0 * speciesCounts[i] + deltaN[i])) * deltaN[i]; + } + else { + for(int i = 2; i <= atom->ntypes; i++) + dm += deltamu[i] * deltaN[i]; + } + double deltaB = -(deltaE + dm) * beta; +#if SGCMC_DEBUG + std::cout << "Old species: " << oldSpecies << " new species: " << newSpecies << " deltaE: " << deltaE << " dm: " << dm << " deltaB: " << deltaB; +#endif + if(deltaB < 0.0) { + if(deltaB < log(localRandom->uniform())) { + std::fill(deltaN.begin(), deltaN.end(), 0); + selectedAtom = -1; + deltaE = 0; +#if SGCMC_DEBUG + std::cout << " REJECTED"; +#endif + } + } + +#if SGCMC_DEBUG + cout << endl; +#endif + } + +#if 0 + // This is for debugging purposes only to check the energy change calculation routine. + // Check the return value by calculating the energy change the slow way: difference between total energy before and after the swap. + // The following code should be deactivated for full performance. + // WARNING: Calling this function screws up the stored forces and will therefore change the time evolution of the system in + // the MD simulation. + double deltaECheck = computeEnergyChangeGeneric(selectedAtomDebug, oldSpecies, newSpecies); + double deltaETotal, deltaECheckTotal; + MPI_Allreduce(&deltaEDebug, &deltaETotal, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&deltaECheck, &deltaECheckTotal, 1, MPI_DOUBLE, MPI_SUM, world); + double posx = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][0] : 0.0; + double posy = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][1] : 0.0; + double posz = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][2] : 0.0; + printLog("Checking MC routine. DeltaE=%f DeltaE(check)=%f Atom: %i [%f %f %f] Old species: %i New species: %i\n", + deltaETotal, deltaECheckTotal, selectedAtomDebug, posx, posy, posz, oldSpecies, newSpecies); + if(fabs(deltaECheckTotal - deltaETotal) > 1e-6) { // Delta E must be equal to the total energy difference. + error->one(FLERR, "Error in MC energy routine detected. Computed energy change deviates from correct value."); + } +#endif // End of debugging code + + + if(kappa != 0.0 && serialMode == false) { + + // What follows is the second rejection test for the variance-constrained + // semi-grandcanonical method. + + // MPI sum of total change in number of particles. + MPI_Allreduce(&deltaN.front(), &deltaNGlobal.front(), deltaN.size(), MPI_INT, MPI_SUM, world); + + // Perform outer MC acceptance test. + // This is done in sync by all processors. + double A = 0.0; + for(int i = 1; i <= atom->ntypes; i++) { + A += deltaNGlobal[i] * deltaNGlobal[i]; + A += 2.0 * deltaNGlobal[i] * (speciesCounts[i] - (int)(targetConcentration[i] * atom->natoms)); + } + double deltaB = -(kappa / atom->natoms) * A; + if(deltaB < 0.0) { + if(deltaB < log(random->uniform())) { + std::fill(deltaN.begin(), deltaN.end(), 0); + std::fill(deltaNGlobal.begin(), deltaNGlobal.end(), 0); + selectedAtom = -1; + } + } + + // Update global species counters. + for(int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaNGlobal[i]; + } + else if(serialMode) { + // Update the local species counters. + for(int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaN[i]; + } + + // Make accepted atom swap permanent. + if(selectedAtom >= 0) { + if(pairEAM) { +#if CDEAM_MC_SUPPORT + if(pairCDEAM) // Concentration dependent EAM case: + flipAtomCDEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + else // Standard EAM case: +#endif + flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } + else + flipAtomGeneric(selectedAtom, oldSpecies, newSpecies); + nAcceptedSwapsLocal++; + } + else { + nRejectedSwapsLocal++; + } + + // Update variable that keeps track of the current total energy. + totalPotentialEnergy += deltaE; + + if(oversizeWindow) { + // In case of an oversized sampling window we have to exchange the atom types and all other + // per-atom quantities after each and every swap step. This is very slow and should only be used + // for debugging purposes. + communicateRhoAndTypes(); + } + } + + // Finally the changed electron densities and atom types must be exchanged before + // the sampling window is moved. + if(!oversizeWindow) + communicateRhoAndTypes(); + } + + // MPI sum total number of accepted/rejected swaps. + MPI_Allreduce(&nAcceptedSwapsLocal, &nAcceptedSwaps, 1, MPI_INT, MPI_SUM, world); + MPI_Allreduce(&nRejectedSwapsLocal, &nRejectedSwaps, 1, MPI_INT, MPI_SUM, world); + + // For (parallelized) semi-grandcanonical MC we have to determine the current concentrations now. + // For the serial version and variance-constrained MC it has already been done in the loop. + if(kappa == 0.0 && serialMode == false) { + const int *type = atom->type; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for(int i = 0; i < atom->nlocal; i++, ++type) { + ASSERT(*type >= 1 && *type <= atom->ntypes); + if(mask[i] & groupbit) + localSpeciesCounts[*type]++; + } + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + } +} + +/********************************************************************* + * Fetches the electron densities for the local ghost atoms + * from the neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::fetchGhostAtomElectronDensities() +{ + if(pairEAM) { + // Transfer original EAM rho values. + communicationStage = 1; + comm->forward_comm(this); + } +} + +/********************************************************************* + * Transfers the locally changed electron densities and atom + * types to the neighbors. + *********************************************************************/ +void FixSemiGrandCanonicalMC::communicateRhoAndTypes() +{ + // Electron densities can have changed for real atoms as well as ghost atoms during the last MC step. + // So we have to perform a forward and a reverse communication to keep everything in sync. + // In the array changedAtoms we kept track of which rhos have been changed by the MC. This helps us + // here to not overwrite values when doing the bidirectional exchange. + + if(pairEAM) { + // Transfer changed electron densities of ghost atoms to the real atoms. + communicationStage = 2; + comm->reverse_comm(this); + } + + // Transfer changed atom types and electron densities of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int* list, double* buf, int pbc_flag, int* pbc) +{ + int m = 0; + if(communicationStage == 1) { + // Send electron densities of local atoms to neighbors. + ASSERT(pairEAM->rho != nullptr); +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = 0; i < n; i++) + buf[m++] = pairEAM->rho[list[i]]; +#if CDEAM_MC_SUPPORT + } + else { + // In case of the CD-EAM model we have to send the RhoB values and D values as well. + for(int i = 0; i < n; i++) { + buf[m++] = pairCDEAM->rho[list[i]]; + buf[m++] = pairCDEAM->rhoB[list[i]]; + buf[m++] = pairCDEAM->D_values[list[i]]; + } + } +#endif + } + else if(communicationStage == 3) { + if(pairEAM) { + // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + buf[m++] = pairEAM->rho[list[i]]; + } +#if CDEAM_MC_SUPPORT + } + else { + // In case of the CD-EAM model we have to send the RhoB values and D values as well. + for(int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + buf[m++] = pairCDEAM->rho[list[i]]; + buf[m++] = pairCDEAM->rhoB[list[i]]; + buf[m++] = pairCDEAM->D_values[list[i]]; + } + } +#endif + } + else { + // Generic potential case: + for(int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + } + } + } + else { + ASSERT(false); + } + return m; +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::unpack_forward_comm(int n, int first, double* buf) +{ + if(communicationStage == 1) { + // Receive electron densities of ghost atoms from neighbors. + int last = first + n; +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = first; i < last; i++) + pairEAM->rho[i] = *buf++; +#if CDEAM_MC_SUPPORT + } + else { + // Also receive the partial densities and D values when using the CD-EAM model. + for(int i = first; i < last; i++) { + pairCDEAM->rho[i] = *buf++; + pairCDEAM->rhoB[i] = *buf++; + pairCDEAM->D_values[i] = *buf++; + } + } +#endif + } + else if(communicationStage == 3) { + int last = first + n; + if(pairEAM) { + // Receive types and rhos of real atoms of the neighbor proc and assign them + // to the local ghost atoms. +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = first; i < last; i++, buf += 2) { + atom->type[i] = (int)buf[0]; + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + ASSERT(i < (int)changedAtoms.size()); + if(!changedAtoms[i]) + pairEAM->rho[i] = buf[1]; + } +#if CDEAM_MC_SUPPORT + } + else { + // Also receive the partial densities and D values when using the CD-EAM model. + for(int i = first; i < last; i++, buf += 4) { + atom->type[i] = (int)buf[0]; + // We have to make sure that values changed locally do not get overridden by the values + // sent by the neighbor procs. + ASSERT(i < (int)changedAtoms.size()); + if(!changedAtoms[i]) { + pairCDEAM->rho[i] = buf[1]; + pairCDEAM->rhoB[i] = buf[2]; + pairCDEAM->D_values[i] = buf[3]; + } + } + } +#endif + } + else { + // Generic potential case: + for(int i = first; i < last; i++, buf += 1) { + atom->type[i] = (int)buf[0]; + } + } + } + else { + ASSERT(false); + } +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +int FixSemiGrandCanonicalMC::pack_reverse_comm(int n, int first, double* buf) +{ + ASSERT(communicationStage == 2); + int m = 0; + + // Send changed electron densities of ghost atoms to the real atoms of neighbor procs. + ASSERT(pairEAM->rho != nullptr); + int last = first + n; +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = first; i < last; i++) + buf[m++] = pairEAM->rho[i]; +#if CDEAM_MC_SUPPORT + } + else { + // In case of the CD-EAM model we have to send the RhoB values and D values as well. + for(int i = first; i < last; i++) { + buf[m++] = pairCDEAM->rho[i]; + buf[m++] = pairCDEAM->rhoB[i]; + buf[m++] = pairCDEAM->D_values[i]; + } + } +#endif + return m; +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) +{ + ASSERT(communicationStage == 2); + + // Received changed electron densities of ghost atoms of neighbor procs and assign them to our + // real atoms. + ASSERT(pairEAM->rho != nullptr); +#if CDEAM_MC_SUPPORT + if(pairCDEAM == nullptr) { +#endif + for(int i = 0; i < n; i++, buf++) { + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + ASSERT(list[i] < (int)changedAtoms.size()); + if(!changedAtoms[list[i]]) + pairEAM->rho[list[i]] = *buf; + } +#if CDEAM_MC_SUPPORT + } + else { + for(int i = 0; i < n; i++, buf += 3) { + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + ASSERT(list[i] < (int)changedAtoms.size()); + if(!changedAtoms[list[i]]) { + pairCDEAM->rho[list[i]] = buf[0]; + pairCDEAM->rhoB[list[i]] = buf[1]; + pairCDEAM->D_values[list[i]] = buf[2]; + } + } + } +#endif +} + +/********************************************************************* + * Positions the sampling window inside the node's bounding box. + *********************************************************************/ +bool FixSemiGrandCanonicalMC::placeSamplingWindow() +{ + ASSERT(neighborList != nullptr); + ASSERT(neighborList->inum == atom->nlocal); + + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window. + bool oversizeWindow = false; + + // Align the sampling window to one of the 8 corners of the processor cell. + double samplingWindowLo[3]; + double samplingWindowHi[3]; + double margin[3]; + for(int i = 0; i < 3; i++) { + + margin[i] = interactionRadius * 2.0; + if(samplingWindowUserSize > 0.0) { + margin[i] = (domain->subhi[i] - domain->sublo[i]) * (1.0 - samplingWindowUserSize); + if(margin[i] < interactionRadius * 2.0) + oversizeWindow = true; + } + + double shift = (double)((samplingWindowPosition >> i) & 1) * margin[i]; + samplingWindowLo[i] = domain->sublo[i] + shift; + samplingWindowHi[i] = domain->subhi[i] + shift - margin[i]; + + // Check if processor cells are large enough. + // Node bounds must be at least four times as large as the atom interaction radius. + // Sampling window must be at least half as wise as the processor cell to cover the cell completely. + if(samplingWindowHi[i] - samplingWindowLo[i] + 1e-6 < (domain->subhi[i] - domain->sublo[i]) * 0.5) { + error->one(FLERR, "Per-node simulation cell is too small for fix sgcmc. Processor cell size must be at least 4 times cutoff radius."); + } + } + // Increase counter by one. + // Since we are only using the lower 3 bits of the integer value the alignment will + // be the same after 8 iterations. + samplingWindowPosition += 1; + + // Compile a list of atoms that are inside the sampling window. + samplingWindowAtoms.resize(0); + samplingWindowAtoms.reserve(atom->nlocal); + numSamplingWindowAtoms = 0; + numFixAtomsLocal = 0; + + ASSERT(atom->nlocal == neighborList->inum); + const int *mask = atom->mask; + for(int ii = 0; ii < neighborList->inum; ii++) { + int i = neighborList->ilist[ii]; + if(mask[i] & groupbit) { + numFixAtomsLocal++; + const double* x = atom->x[i]; + // Is atom inside window region? + if(x[0] >= samplingWindowLo[0] && x[0] < samplingWindowHi[0] && + x[1] >= samplingWindowLo[1] && x[1] < samplingWindowHi[1] && + x[2] >= samplingWindowLo[2] && x[2] < samplingWindowHi[2]) + { + // Atoms within a distance of two times the interaction radius from the cell border + // are less often inside the sampling window than atoms in the center of the node cell, + // which are always inside the window. + // We therefore have to increase their probability here to make them chosen + // as often as the core atoms. + int multiplicity = 1; + for(int k=0; k < 3; k++) { + if(x[k] < domain->sublo[k] + margin[k] || + x[k] > domain->subhi[k] - margin[k]) + multiplicity *= 2; + } + + for(int m = 0; m < multiplicity; m++) + samplingWindowAtoms.push_back(ii); + + numSamplingWindowAtoms++; + } + } + } + + return oversizeWindow; +} + +/********************************************************************* + * Calculates the change in energy that swapping the given + * atom would produce. This routine is for the standard EAM potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + double p; + int m; + double const* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + double deltaE = 0.0; + + // Calculate change of electron density at the surrounding + // sites induced by the swapped atom. Then calculate the change of embedding energy for each neighbor atom. + // Also recalculate the total electron density at the site of the swapped atom. + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + // Loop over all neighbors of the selected atom. + ASSERT(flipAtomNL < neighborList->inum); + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if(rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; + double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; + double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + deltaE += (newz2 - oldz2) / r; + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Calculate old embedding energy of atom j. + p = rho[j] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Calculate new embedding energy of atom j. + p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + } + + // Compute the change in embedding energy of the changing atom. + p = rho[flipAtom] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + p = new_total_rho_i * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + + return deltaE; +} + +#if CDEAM_MC_SUPPORT + +/********************************************************************* + * Calculates the change in energy that swapping the given + * atom would produce. + * This routine is for the concentration-dependent EAM potential. + * It has to do some extra work in comparison to the standard EAM routine above. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + ASSERT(pairCDEAM != nullptr); // Make sure we have a CD-EAM potential in use. + + double p; + int m; + double* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + double new_total_rhoB_i = 0.0; + + // The energy change to calculate. + double deltaE = 0.0; + + // Calculate each change of electron density (and partial density) at the + // surrounding sites induced by the swapped atom. Also calculate the change of pair interaction energy. + // Then calculate the change of embedding energy for each neighbor atom. + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + /// The change in atom i's D value. + double deltaD_i = 0.0; + + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if(rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + double rho_ji = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + new_total_rho_i += rho_ji; + if(jtype == pairCDEAM->speciesB) + new_total_rhoB_i += rho_ji; + + // Determine change of partial electron density at site j. + // It increases if the atom i becomes a B atom and it decreases if it was an B atom. + double delta_rhoB_j = 0; + if(newSpecies == pairCDEAM->speciesB) delta_rhoB_j = newrho_contr; + else if(oldSpecies == pairCDEAM->speciesB) delta_rhoB_j = -oldrho_contr; + + // Now we can calculate the new concentration x_j at site j. + double new_x_j = (pairCDEAM->rhoB[j] + delta_rhoB_j) / (rho[j] + delta_rho); + // Calculate the old concentration x_j at site j as well. + double old_x_j = pairCDEAM->rhoB[j] / rho[j]; + + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; + double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; + double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + /// Was the old i-j interaction concentration dependent? + if((jtype == pairCDEAM->speciesA && oldSpecies == pairCDEAM->speciesB) + || (jtype == pairCDEAM->speciesB && oldSpecies == pairCDEAM->speciesA)) { + + // The old pair interaction was concentration dependent. + // Please note that it must now become concentration independent that + // either the A or the B atom has changed to another species. + // We here require that only the A-B interactions are concentration dependent. + + // Add the new static pair interaction term. + deltaE += newz2 / r; + + // The D values of i and j decrease due to the removed concentration dependent cross interaction. + double deltaD_j = -oldz2 / r; + deltaD_i += deltaD_j; + + // Since the concentration x_j at site j changes, the mixed pair interaction between atom j and + // other atoms k is also affected. + // The energy change of site j due to the cross term is: (new_h*new_D - old_h*old_D)/2 + double old_h_j = pairCDEAM->evalH(old_x_j); + double new_h_j = pairCDEAM->evalH(new_x_j); + deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j] + deltaD_j) - old_h_j * pairCDEAM->D_values[j]); + } + else { + + // The old pair interaction was not concentration dependent. Now it might have + // become dependent. Do check: + if((jtype == pairCDEAM->speciesA && newSpecies == pairCDEAM->speciesB) + || (jtype == pairCDEAM->speciesB && newSpecies == pairCDEAM->speciesA)) { + + // The new pair interaction is concentration dependent. It's an AB interaction. + + // Subtract old static pair interaction. + deltaE -= oldz2 / r; + + // The D values of i and j increase due to the created AB cross interaction. + double deltaD_j = newz2 / r; + deltaD_i += deltaD_j; + + // Since the concentration x_j at site j changes, the mixed pair interaction between atom j and + // other atoms k is also affected. + // The energy change of site j due to the cross term is: (new_h*new_D - old_h*old_D)/2 + double old_h_j = pairCDEAM->evalH(old_x_j); + double new_h_j = pairCDEAM->evalH(new_x_j); + deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j] + deltaD_j) - old_h_j * pairCDEAM->D_values[j]); + } + else { + + // The pair interaction stays concentration independent. + // This is like standard EAM. + deltaE += (newz2 - oldz2) / r; + + double old_h_j = pairCDEAM->evalH(old_x_j); + double new_h_j = pairCDEAM->evalH(new_x_j); + deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j]) - old_h_j * pairCDEAM->D_values[j]); + } + } + + // Calculate old embedding energy of atom j. + p = rho[j] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Calculate new embedding energy of atom j. + p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + } + + ASSERT(rho[flipAtom] > 0.0); + ASSERT(new_total_rho_i > 0.0); + + // Things are easier if the rho(r) functional does not depend on the type of both atoms I and J (as for Finnis/Sinclair type potentials). + if(rho[flipAtom] == new_total_rho_i && pairCDEAM->rhoB[flipAtom] == new_total_rhoB_i) { + // Calculate local concentration at site i. This did not change. + double x_i = pairCDEAM->rhoB[flipAtom] / rho[flipAtom]; + + // Calculate h(x_i) polynomial function. + double h_i = pairCDEAM->evalH(x_i); + + // This is the energy change at site i due to the cross term: + deltaE += 0.5 * h_i * deltaD_i; + + // Compute the change in embedding energy of the swapping atom. + p = rho[flipAtom] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + } + else { + // Calculate the new and old concentration at site i. + double x_i_old = pairCDEAM->rhoB[flipAtom] / rho[flipAtom]; + double x_i_new = new_total_rhoB_i / new_total_rho_i; + + // Calculate h(x_i) polynomial function. + double old_h_i = pairCDEAM->evalH(x_i_old); + double new_h_i = pairCDEAM->evalH(x_i_new); + + // This is the energy change at site i due to the cross term: + deltaE += 0.5 * (new_h_i * (pairCDEAM->D_values[flipAtom] + deltaD_i) - old_h_i * pairCDEAM->D_values[flipAtom]); + + // Compute the change in embedding energy of the swapping atom. + p = rho[flipAtom] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + p = new_total_rho_i * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + } + + return deltaE; +} + +#endif + +#if TERSOFF_MC_SUPPORT + +/********************************************************************* + * Calculates the change in energy that swapping the given + * atom would produce. This routine is for the Tersoff potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeTersoff(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + // This routine is called even when no trial move is being performed during the + // the current iteration to keep the parallel processors in sync. If no trial + // move is performed then the energy is calculated twice for the same state of the system. + if(flipAtom >= 0) { + // Change system. Perform trial move. + atom->type[flipAtom] = newSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate new total energy. + double newEnergy = 0; + if(flipAtom >= 0) { + newEnergy = computeEnergyTersoff(flipAtom); + } + + // Undo trial move. Restore old system state. + if(flipAtom >= 0) { + atom->type[flipAtom] = oldSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate old total energy. + double oldEnergy = 0; + if(flipAtom >= 0 || totalPotentialEnergy == 0) { + totalPotentialEnergy = oldEnergy = computeEnergyTersoff(flipAtom); + } + else oldEnergy = totalPotentialEnergy; + + return newEnergy - oldEnergy; +} + +/// Computes the energy of the atom group around the flipped atom using the Tersoff potential. +double FixSemiGrandCanonicalMC::computeEnergyTersoff(int flipAtom) +{ + double totalEnergy = 0; + for(int ii = 0; ii < atom->nlocal; ii++) + totalEnergy += computeAtomicEnergyTersoff(ii); + return totalEnergy; +} + +/// Computes the energy of an atom using the Tersoff potential. +double FixSemiGrandCanonicalMC::computeAtomicEnergyTersoff(int i) +{ + double **x = atom->x; + int *tag = atom->tag; + int *type = atom->type; + + int* numneigh = neighborList->numneigh; + int** firstneigh = neighborList->firstneigh; + + double atomicEnergy = 0; + + int itype = pairTersoff->map[type[i]]; + int itag = tag[i]; + double xtmp = x[i][0]; + double ytmp = x[i][1]; + double ztmp = x[i][2]; + + // two-body interactions, skip half of them + int* jlist = firstneigh[i]; + int jnum = numneigh[i]; + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + int jtype = pairTersoff->map[type[j]]; + int jtag = tag[j]; + + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x[j][2] < x[i][2]) continue; + if (x[j][2] == ztmp && x[j][1] < ytmp) continue; + if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; + } + + double delx = xtmp - x[j][0]; + double dely = ytmp - x[j][1]; + double delz = ztmp - x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + + int iparam_ij = pairTersoff->elem2param[itype][jtype][jtype]; + if (rsq > pairTersoff->params[iparam_ij].cutsq) continue; + + double r = sqrt(rsq); + double tmp_fc = pairTersoff->ters_fc(r, &pairTersoff->params[iparam_ij]); + double tmp_exp = exp(-pairTersoff->params[iparam_ij].lam1 * r); + atomicEnergy += tmp_fc * pairTersoff->params[iparam_ij].biga * tmp_exp; + } + + // three-body interactions + // skip immediately if I-J is not within cutoff + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + int jtype = pairTersoff->map[type[j]]; + int iparam_ij = pairTersoff->elem2param[itype][jtype][jtype]; + + double delr1[3]; + delr1[0] = x[j][0] - xtmp; + delr1[1] = x[j][1] - ytmp; + delr1[2] = x[j][2] - ztmp; + double rsq1 = delr1[0]*delr1[0] + delr1[1]*delr1[1] + delr1[2]*delr1[2]; + if(rsq1 > pairTersoff->params[iparam_ij].cutsq) continue; + + // accumulate bondorder zeta for each i-j interaction via loop over k + double zeta_ij = 0.0; + for (int kk = 0; kk < jnum; kk++) { + if (jj == kk) continue; + int k = jlist[kk]; + k &= NEIGHMASK; + int ktype = pairTersoff->map[type[k]]; + int iparam_ijk = pairTersoff->elem2param[itype][jtype][ktype]; + double delr2[3]; + delr2[0] = x[k][0] - xtmp; + delr2[1] = x[k][1] - ytmp; + delr2[2] = x[k][2] - ztmp; + double rsq2 = delr2[0]*delr2[0] + delr2[1]*delr2[1] + delr2[2]*delr2[2]; + if(rsq2 > pairTersoff->params[iparam_ijk].cutsq) continue; + zeta_ij += pairTersoff->zeta(&pairTersoff->params[iparam_ijk],rsq1,rsq2,delr1,delr2); + } + + double r = sqrt(rsq1); + double fa = pairTersoff->ters_fa(r,&pairTersoff->params[iparam_ij]); + double bij = pairTersoff->ters_bij(zeta_ij,&pairTersoff->params[iparam_ij]); + atomicEnergy += 0.5*bij*fa; + } + + return atomicEnergy; +} + +#endif + +/********************************************************************* + * Calculates the change in energy that swapping the given atom would produce. + * This routine is for the general case of an arbitrary potential and + * IS VERY SLOW! It computes the total energies of the system for the unmodified state + * and for the modified state and then returns the difference of both values. + * This routine should only be used for debugging purposes. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this method. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies) +{ + // This routine is called even when no trial move is being performed during the + // the current iteration to keep the parallel processors in sync. If no trial + // move is performed then the energy is calculated twice for the same state of the system. + if(flipAtom >= 0) { + // Change system. Perform trial move. + atom->type[flipAtom] = newSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate new total energy. + double newEnergy = computeTotalEnergy(); + + // Undo trial move. Restore old system state. + if(flipAtom >= 0) { + atom->type[flipAtom] = oldSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate old total energy. + double oldEnergy = computeTotalEnergy(); + + // Restore the correct electron densities and forces. + update->integrate->setup_minimal(0); + fetchGhostAtomElectronDensities(); + + return newEnergy - oldEnergy; +} + +/********************************************************************* + * Lets LAMMPS calculate the total potential energy of the system. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeTotalEnergy() +{ + ASSERT(compute_pe != nullptr); + + int eflag = 1; + int vflag = 0; + + if(force->pair) force->pair->compute(eflag,vflag); + + if(atom->molecular) { + if(force->bond) force->bond->compute(eflag,vflag); + if(force->angle) force->angle->compute(eflag,vflag); + if(force->dihedral) force->dihedral->compute(eflag,vflag); + if(force->improper) force->improper->compute(eflag,vflag); + } + + if(force->kspace) force->kspace->compute(eflag,vflag); + + update->eflag_global = update->ntimestep; + return compute_pe->compute_scalar(); +} + +/********************************************************************* + * Flips the type of one atom and changes the electron densities + * of nearby atoms accordingly. + * This routine is for the case of a standard EAM potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new type to be assigned to the atom. + *********************************************************************/ +void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + double p; + int m; + double* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + + // Change atom's type and mark it for exchange. + atom->type[flipAtom] = newSpecies; + changedAtoms[flipAtom] = true; + + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + ASSERT(j < (int)changedAtoms.size()); + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if(rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + rho[j] += delta_rho; + + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Set the flag for this atom to indicate that its rho has changed and needs + // to be transfered at end of MC step. + changedAtoms[j] = true; + } + + // Store newly calculated electron density at swapped atom site. + rho[flipAtom] = new_total_rho_i; +} + +#if CDEAM_MC_SUPPORT + +/********************************************************************* + * Flips the type of one atom and changes the electron densities and + * D values of nearby atoms accordingly. + * This routine is for the case of the concentration dependent CD-EAM potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new type to be assigned to the atom. + *********************************************************************/ +void FixSemiGrandCanonicalMC::flipAtomCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + double p; + int m; + double* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + double new_total_rhoB_i = 0.0; + + atom->type[flipAtom] = newSpecies; + + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + /// The change in atom i's D value. + double deltaD_i = 0.0; + + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for(int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + ASSERT(j < (int)changedAtoms.size()); + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if(rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + rho[j] += delta_rho; + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + double rho_ji = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + new_total_rho_i += rho_ji; + if(jtype == pairCDEAM->speciesB) + new_total_rhoB_i += rho_ji; + + // Determine change of partial electron density at site j. + // It increases if the atom i becomes a B atom and it decreases if it was a B atom. + if(newSpecies == pairCDEAM->speciesB) + pairCDEAM->rhoB[j] += newrho_contr; + else if(oldSpecies == pairCDEAM->speciesB) + pairCDEAM->rhoB[j] -= oldrho_contr; + + /// The change in atom j's D value. + double deltaD_j; + + /// Was the old i-j interaction concentration dependent? + if((jtype == pairCDEAM->speciesA && oldSpecies == pairCDEAM->speciesB) + || (jtype == pairCDEAM->speciesB && oldSpecies == pairCDEAM->speciesA)) { + + // The old pair interaction was concentration dependent. + // Please note that it must now become concentration independent that + // either the A or the B atom has changed to another species. + // We here require that only the A-B interactions are concentration dependent. + + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; + double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // The D value of j decreases due to the removed cross interaction. + deltaD_j = -oldz2 / r; + } + else { + + // The old pair interaction was not concentration dependent. Now it might have + // become dependent. Do check: + if((jtype == pairCDEAM->speciesA && newSpecies == pairCDEAM->speciesB) + || (jtype == pairCDEAM->speciesB && newSpecies == pairCDEAM->speciesA)) { + + // The new pair interaction is concentration dependent. It's an AB interaction. + + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; + double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // The D value of j increases due to the created cross interaction. + deltaD_j = newz2 / r; + } + else deltaD_j = 0.0; + } + pairCDEAM->D_values[j] += deltaD_j; + + // D_i changes in the same way as D_j changes. + deltaD_i += deltaD_j; + + // Set the flag for this atom to indicate that its rho has changed and needs + // to be transfered at end of MC step. + changedAtoms[j] = true; + } + + // Store newly calculated electron densities and D value at swapped atom site. + rho[flipAtom] = new_total_rho_i; + pairCDEAM->rhoB[flipAtom] = new_total_rhoB_i; + pairCDEAM->D_values[flipAtom] += deltaD_i; + + changedAtoms[flipAtom] = true; +} + +#endif + +/********************************************************************* + * Flips the type of one atom. + * This routine is for the generic case. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new type to be assigned to the atom. + *********************************************************************/ +void FixSemiGrandCanonicalMC::flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies) +{ + atom->type[flipAtom] = newSpecies; + + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; + + changedAtoms[flipAtom] = true; +} + +/********************************************************************* + * Lets the fix report one of its internal state variables to LAMMPS. + *********************************************************************/ +double FixSemiGrandCanonicalMC::compute_vector(int index) +{ + if(index == 0) return nAcceptedSwaps; + if(index == 1) return nRejectedSwaps; + index -= 1; + ASSERT(index >= 1 && index < (int)speciesCounts.size()); + int totalAtoms = 0; + for(int i = 0; i < (int)speciesCounts.size(); i++) + totalAtoms += speciesCounts[i]; + if(index <= atom->ntypes) return (double)speciesCounts[index] / (totalAtoms > 0 ? totalAtoms : 1); + ASSERT(false); return 0.0; +} + +/********************************************************************* + * Reports the memory usage of this fix to LAMMPS. + *********************************************************************/ +double FixSemiGrandCanonicalMC::memory_usage() +{ + return (changedAtoms.size() * sizeof(bool)) + + (samplingWindowAtoms.size() * sizeof(int)); +} + diff --git a/src/MC/fix_semigrandcanonical_mc.h b/src/MC/fix_semigrandcanonical_mc.h new file mode 100644 index 0000000000..1e96edbceb --- /dev/null +++ b/src/MC/fix_semigrandcanonical_mc.h @@ -0,0 +1,272 @@ +/* ---------------------------------------------------------------------- + * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) + * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). + * + * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a + * description of the algorithm. + * + * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS +// clang-format off +FixStyle(sgcmc,FixSemiGrandCanonicalMC); +// clang-format on +#else + +#ifndef FIX_SEMIGRANDCANONICAL_MC_H +#define FIX_SEMIGRANDCANONICAL_MC_H + +#include "fix.h" + +// Setting this to 1 enables support for the concentration-dependent EAM potential (pair_style eam/cd) +// in the Monte Carlo routine. Setting to 0 limits support to standard EAM only and removes all dependencies +// on the CD-EAM potential code. +#ifndef CDEAM_MC_SUPPORT +#define CDEAM_MC_SUPPORT 0 +#endif + +// Setting this to 1 enables support for Tersoff-like potentials (pair_style tersoff) +// in the Monte Carlo routine. +#ifndef TERSOFF_MC_SUPPORT +#define TERSOFF_MC_SUPPORT 0 +#endif +// Setting this to 1 enables additional debugging/sanity checks (with a small performance penalty). +#ifndef SGCMC_DEBUG +#define SGCMC_DEBUG 0 +#endif + +#include +#include + +namespace LAMMPS_NS { + +class FixSemiGrandCanonicalMC : public Fix { + public: + /// Fix class constructor. + FixSemiGrandCanonicalMC(class LAMMPS *, int, char **); + + /// Fix class destructor. + ~FixSemiGrandCanonicalMC() override; + + /******************** Virtual methods from Fix base class ************************/ + + /// The return value of this method specifies at which points the fix is invoked during the simulation. + int setmask() override; + + /// This gets called by the system before the simulation starts. + void init() override; + + /// Assigns the requested neighbor list to the fix. + void init_list(int id, NeighList *ptr) override; + + /// Called after the EAM force calculation during each timestep. + /// This method triggers the MC routine from time to time. + void post_force(int vflag) override; + + /// Lets the fix report one of its internal state variables to LAMMPS. + double compute_vector(int index) override; + + /// This is for MPI communication with neighbor nodes. + int pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) override; + void unpack_forward_comm(int n, int first, double *buf) override; + int pack_reverse_comm(int n, int first, double *buf) override; + void unpack_reverse_comm(int n, int *list, double *buf) override; + + /// Reports the memory usage of this fix to LAMMPS. + double memory_usage() override; + + /******************** Monte-Carlo routines ************************/ + + /// This routine does one full MC step. + void doMC(); + + /// Fetches the electron densities for the local ghost atoms from the neighbor nodes. + void fetchGhostAtomElectronDensities(); + + /// Positions the sampling window inside the node's bounding box. + bool placeSamplingWindow(); + + /// Calculates the change in energy that swapping the given atom would produce. + /// This routine is for the case of a standard EAM potential. + double computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + +#if CDEAM_MC_SUPPORT + /// Calculates the change in energy that swapping the given atom would produce. + /// This routine is for the case of the concentration dependent CD-EAM potential. + double computeEnergyChangeCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); +#endif + +#if TERSOFF_MC_SUPPORT + /// Calculates the change in energy that swapping the given atom would produce. + /// This routine is for the Tersoff potential. + double computeEnergyChangeTersoff(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + + /// Computes the energy of the atom group around the flipped atom using the Tersoff potential. + double computeEnergyTersoff(int flipAtom); + + /// Computes the energy of an atom using the Tersoff potential. + double computeAtomicEnergyTersoff(int i); +#endif + + /// Calculates the change in energy that swapping the given atom would produce. + /// This routine is for the general case of an arbitrary potential and + /// IS VERY SLOW! It computes the total energies of the system for the unmodified state + /// and for the modified state and then returns the difference of both values. + /// This routine should only be used for debugging purposes. + double computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies); + + /// Lets LAMMPS calculate the total potential energy of the system. + double computeTotalEnergy(); + + /// Flips the type of one atom and changes the electron densities of nearby atoms accordingly. + /// This routine is for the case of a standard EAM potential. + void flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + + /// Flips the type of one atom and changes the electron densities and D values of nearby atoms accordingly. + /// This routine is for the case of the concentration dependent CD-EAM potential. + void flipAtomCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + + /// Flips the type of one atom. + /// This routine is for the generic case. + void flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies); + + /// Transfers the locally changed electron densities and atom types to the neighbors. + void communicateRhoAndTypes(); + +#if SGCMC_DEBUG + /// Allocate atom-based array. + void grow_arrays(int) override; + /// Copy values within local atom-based array. + void copy_arrays(int, int) override; + /// Initialize one atom's array values, called when atom is created. + void set_arrays(int) override; + /// Pack values in local atom-based array for exchange with another proc. + int pack_exchange(int, double *) override; + /// Unpack values in local atom-based array from exchange with another proc. + int unpack_exchange(int, double *) override; +#endif + + private: + /// The number of MD steps between each MC cycle. + int nevery_mdsteps; + + /// The number of times the sampling window should be repositioned during + /// one MC cycle. + int numSamplingWindowMoves; + + /// The fraction of atoms that should be swapped per MC step. + double swap_fraction; + + /// The maximum interaction radius of all potentials. + double interactionRadius; + + /// The inverse MC temperature. + double beta; + + /// Chemical potential differences for all species. The differences are relative to the chemical + /// potential of the first species. Note that this array is based on index 1 (not 0 as normal C arrays). + /// This means the first two elements of this vector are always zero. + std::vector deltamu; + + /// Enables serial implementation without second rejection in the VCSGC ensemble. + bool serialMode; + + /// The MC variance constraint parameter. + double kappa; + + /// The target concentration values for each species. The concentration of first species is + /// implicitely defined as one minues all other concentrations. Please note that this vector + /// is based on index 1. The first element at index 0 is not used. + std::vector targetConcentration; + + /// The master seed value for the random number generators on all nodes. + int seed; + + /// The random number generator that is in sync with all other nodes. + class RanPark *random; + + /// The local random number generator for this proc only. + class RanPark *localRandom; + + /// The total number of atoms of the different species in the whole system. + /// Divide this by the total number of atoms to get the global concentration. + /// Since LAMMPS atom types start at index 1 this array is also based on index 1. + /// The first array element at index 0 is not used. + std::vector speciesCounts; + + /// The full neighbor list used by this fix. + class NeighList *neighborList; + + /// The user-defined size of the sampling window. It is specified as a fraction + /// of the processor's cell boundaries. + /// If this parameter is 0 then the default sampling window size is used. + double samplingWindowUserSize; + + /// This counter is increased each time the sampling window is repositioned. + /// The lowest 3 bits of this integer value specify the alignment of the sampling window in + /// the processor cell. That means that after 8 iterations the 8 corners have been sampled + /// and it starts at the first corner again. + int samplingWindowPosition; + + /// Array with indices of all atoms that are within the sampling window. + /// Note 1: that an atom can be more than once in this array if its multiplicity is greater than one. + /// Note 2: Indices are into the I array of the neighbor list and not into the atoms array. + std::vector samplingWindowAtoms; + + /// The number of atoms inside the sampling window. Counting each atom only once. + int numSamplingWindowAtoms; + + /// The number of local atoms that are in the fix group. + int numFixAtomsLocal; + + /// Pointer to the EAM potential class. + /// This is required to access the Rho arrays calculated by the potential class and its potential tables. + class PairEAM *pairEAM; + +#if CDEAM_MC_SUPPORT + /// Pointer to the CD-EAM potential class. + /// This is required to access the RhoB arrays calculated by the potential class. + /// The pointer is NULL if only the standard EAM model is used in the simulation. + class PairEAMCD *pairCDEAM; +#endif + +#if TERSOFF_MC_SUPPORT + /// Pointer to the Tersoff potential class. + /// This is required to access the parameters of the potential when computing the + /// change in energy. + class PairTersoff *pairTersoff; +#endif + + /// This array contains a boolean value per atom (real and ghosts) that indicates whether + /// the electron density or another property at that site has been affected by one of the accepted MC swaps. + std::vector changedAtoms; + + /// This counter indicates the current MPI communication stage to let the + /// pack/unpack routines know which data is being transmitted. + int communicationStage; + + /// The total number of accepted swaps during the last MC step. + int nAcceptedSwaps; + + /// The total number of rejected swaps during the last MC step. + int nRejectedSwaps; + + /// Keeps track of the current total potential energy. + /// This is only used when no routine is available that can efficiently calculate the + /// local energy change due to an atom swap. + double totalPotentialEnergy; + + /// A compute used to compute the total potential energy of the system. + class Compute *compute_pe; + +#if SGCMC_DEBUG + /// This per-atom array counts how often each atom is picked for a trial move. + /// This is only used for debugging purposes. + double *trialCounters; +#endif +}; +} // namespace LAMMPS_NS + +#endif // FIX_SEMIGRANDCANONICAL_MC_H +#endif // FIX_CLASS From 422b9999f54f92ceb934c3303fce7bafd3de7475 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 15:56:42 -0500 Subject: [PATCH 33/46] add lammps copyright headers --- src/MC/fix_semigrandcanonical_mc.cpp | 75 ++++++---------------------- src/MC/fix_semigrandcanonical_mc.h | 13 +++++ 2 files changed, 28 insertions(+), 60 deletions(-) diff --git a/src/MC/fix_semigrandcanonical_mc.cpp b/src/MC/fix_semigrandcanonical_mc.cpp index 98a2aa4a12..a2bbd58a47 100644 --- a/src/MC/fix_semigrandcanonical_mc.cpp +++ b/src/MC/fix_semigrandcanonical_mc.cpp @@ -1,3 +1,17 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + /* ---------------------------------------------------------------------- * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). @@ -7,59 +21,7 @@ * * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) * - * History: - * - * 27-Feb-09 - AS - Original version - * - * 11-Mar-09 - AS - The MC fix is now invoked on the POST_FORCE stage of an - * MD step to avoid conflicts with other fixes that change - * the box size. - * - * 12-Mar-09 - AS - Added support for an arbitrary number of atom types. - * - * 13-Mar-09 - AS - Particle velocity is rescaled after accepted swap - * to conserve kinetic energy. - * - * 19-Jul-09 - AS - Made the MC routine compatible with Finnis-Sinclair type - * potentials. Takes now into account that the electron density - * at the swapped atom may change. - * - * 19-Jul-09 - AS - Added printing of parameter values to log file. - * - * 19-Jul-09 - AS - Added a serial VCSGC mode that doesn't use the second - * rejection step for simulations on a single processor. - * - * 17-Nov-09 - AS - The MC routine can now be used with arbitrary potential styles - * in serial mode. In this mode the generic total energy routine - * is used to calculate the energy difference. - * - * 15-Apr-10 - AS - Added the Install.sh script and made some small changes - * to make the module compatible with current version of LAMMPS. - * - * 17-Nov-10 - AS - Added debug code to check whether the random selection - * of trial particles is evenly distributed in parallel simulations. - * The individual trial count of each particle can be written to a dump file. - * - * 17-Nov-10 - AS - Fixed a bug in the printLog() function that led to - * corrupted log files. - * - * 15-Feb-11 - AS - Fixed compilation error in the compute_vector() method by replacing - * the max() function with inline code. - * - * 24-Sep-11 - AS - Adapted code to new interface of Error::one() function. - * - * 18-Sep-12 - AS - Renamed fix style from "sgc_mc" to "sgcmc". - * - * 07-Feb-13 - AS - Changed computeEnergyChangeGeneric() such that it no longer screws - * up the stored atomic forces. Now it can actual be used for hybrid MD/MC simulations. - * - * 20-Jan-15 - AS - Updated call to Neighbor::request() to include the 'instance_me' identifier. - * This change breaks backward-compatibility with LAMMPS versions prior to "20 Jan 2015". - * - * 10-Feb-15 - AS - Changed function pack_comm() to pack_forward_comm(), as required by recent LAMMPS version. - * - * 14-Apr-16 - AS - Restricted MC swaps to atoms in the fix group. - * + * Updates for integrtion into LAMMPS: Aidan Thompson, SNL and Axel Kohlmeyer, Temple U ------------------------------------------------------------------------- */ #include "fix_semigrandcanonical_mc.h" @@ -88,13 +50,6 @@ #include "pair_eam.h" #include "random_park.h" -#if CDEAM_MC_SUPPORT - #include "pair_eam_cd.h" -#endif -#if TERSOFF_MC_SUPPORT - #include "pair_tersoff.h" -#endif - #include #include diff --git a/src/MC/fix_semigrandcanonical_mc.h b/src/MC/fix_semigrandcanonical_mc.h index 1e96edbceb..73d82acdea 100644 --- a/src/MC/fix_semigrandcanonical_mc.h +++ b/src/MC/fix_semigrandcanonical_mc.h @@ -1,3 +1,16 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + /* ---------------------------------------------------------------------- * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). From 630b770f80c924ca0a23780b77fde546e92172eb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 15:58:16 -0500 Subject: [PATCH 34/46] rename files --- src/MC/{fix_semigrandcanonical_mc.cpp => fix_sgcmc.cpp} | 2 +- src/MC/{fix_semigrandcanonical_mc.h => fix_sgcmc.h} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/MC/{fix_semigrandcanonical_mc.cpp => fix_sgcmc.cpp} (99%) rename src/MC/{fix_semigrandcanonical_mc.h => fix_sgcmc.h} (99%) diff --git a/src/MC/fix_semigrandcanonical_mc.cpp b/src/MC/fix_sgcmc.cpp similarity index 99% rename from src/MC/fix_semigrandcanonical_mc.cpp rename to src/MC/fix_sgcmc.cpp index a2bbd58a47..07b9b7310e 100644 --- a/src/MC/fix_semigrandcanonical_mc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -24,7 +24,7 @@ * Updates for integrtion into LAMMPS: Aidan Thompson, SNL and Axel Kohlmeyer, Temple U ------------------------------------------------------------------------- */ -#include "fix_semigrandcanonical_mc.h" +#include "fix_sgcmc.h" #include "atom.h" #include "update.h" diff --git a/src/MC/fix_semigrandcanonical_mc.h b/src/MC/fix_sgcmc.h similarity index 99% rename from src/MC/fix_semigrandcanonical_mc.h rename to src/MC/fix_sgcmc.h index 73d82acdea..f74bc105e3 100644 --- a/src/MC/fix_semigrandcanonical_mc.h +++ b/src/MC/fix_sgcmc.h @@ -27,8 +27,8 @@ FixStyle(sgcmc,FixSemiGrandCanonicalMC); // clang-format on #else -#ifndef FIX_SEMIGRANDCANONICAL_MC_H -#define FIX_SEMIGRANDCANONICAL_MC_H +#ifndef FIX_SGCMC_H +#define FIX_SGCMC_H #include "fix.h" From b76e645182464a53f287f00c8b0e04567a41d85b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 16:14:29 -0500 Subject: [PATCH 35/46] remove optional code --- src/MC/fix_sgcmc.cpp | 945 +++---------------------------------------- src/MC/fix_sgcmc.h | 73 +--- 2 files changed, 58 insertions(+), 960 deletions(-) diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp index 07b9b7310e..280c0b6f53 100644 --- a/src/MC/fix_sgcmc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -56,15 +56,6 @@ using namespace LAMMPS_NS; using namespace FixConst; -// This is for debugging purposes. The ASSERT() macro is used in the code to check -// if everything runs as expected. -#if SGCMC_DEBUG - inline void my_noop() {} - #define ASSERT(cond) ((!(cond)) ? error->one(FLERR, "Assertion failure.") : my_noop()) -#else - #define ASSERT(cond) -#endif - /********************************************************************* * Constructs the fix object and parses the input parameters * that control the Monte Carlo routine. @@ -90,17 +81,6 @@ FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *lmp, int narg, char **a this->comm_forward = 4; this->comm_reverse = 3; -#if SGCMC_DEBUG - this->peratom_flag = 1; - this->size_peratom_cols = 0; - this->peratom_freq = 1; - this->create_attribute = 1; - trialCounters = nullptr; - grow_arrays(atom->nmax); - ASSERT(trialCounters != nullptr || atom->nlocal == 0); - memset(trialCounters, 0, sizeof(trialCounters[0]) * atom->nlocal); -#endif - if(domain->triclinic) error->all(FLERR, "Fix sgcmc does not support non-orthogonal simulation boxes."); @@ -245,58 +225,8 @@ FixSemiGrandCanonicalMC::~FixSemiGrandCanonicalMC() delete random; delete localRandom; -#if SGCMC_DEBUG - memory->sfree(trialCounters); -#endif } -#if SGCMC_DEBUG - -/********************************************************************* - * Allocate atom-based array. - *********************************************************************/ -void FixSemiGrandCanonicalMC::grow_arrays(int nmax) -{ - trialCounters = (double*)memory->srealloc(trialCounters, atom->nmax * sizeof(trialCounters[0]), "sgcmc:trialcounters"); - vector_atom = trialCounters; -} - -/********************************************************************* - * Copy values within local atom-based array. - *********************************************************************/ -void FixSemiGrandCanonicalMC::copy_arrays(int i, int j) -{ - trialCounters[j] = trialCounters[i]; -} - -/********************************************************************* - * Initialize one atom's array values, called when atom is created. - *********************************************************************/ -void FixSemiGrandCanonicalMC::set_arrays(int i) -{ - trialCounters[i] = 0; -} - -/********************************************************************* - * Pack values in local atom-based array for exchange with another proc. - *********************************************************************/ -int FixSemiGrandCanonicalMC::pack_exchange(int i, double *buf) -{ - buf[0] = trialCounters[i]; - return 1; -} - -/********************************************************************* - * Unpack values in local atom-based array from exchange with another proc. - *********************************************************************/ -int FixSemiGrandCanonicalMC::unpack_exchange(int nlocal, double *buf) -{ - trialCounters[nlocal] = buf[0]; - return 1; -} - -#endif - /********************************************************************* * The return value of this method specifies at which points the * fix is invoked during the simulation. @@ -325,18 +255,8 @@ void FixSemiGrandCanonicalMC::init() if(count > 1) error->all(FLERR, "More than one fix sgcmc defined."); // Save a pointer to the EAM potential. - if((pairEAM = dynamic_cast(force->pair))) { -#if CDEAM_MC_SUPPORT - if((pairCDEAM = dynamic_cast(pairEAM))) { - if(pairCDEAM->cdeamVersion != 1) - error->all(FLERR, "The sgcmc fix works only with the one-site concentration version of the CD-EAM potential."); - } -#endif - } -#if TERSOFF_MC_SUPPORT - else if((pairTersoff = dynamic_cast(force->pair))) {} -#endif - else { + pairEAM = dynamic_cast(force->pair); + if (!pairEAM) { if (comm->me == 0) utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); @@ -357,14 +277,14 @@ void FixSemiGrandCanonicalMC::init() const int *mask = atom->mask; std::vector localSpeciesCounts(atom->ntypes+1, 0); for(int i = 0; i < atom->nlocal; i++, ++type) { - ASSERT(*type >= 1 && *type <= atom->ntypes); if(mask[i] & groupbit) localSpeciesCounts[*type]++; } // MPI sum to get global concentrations. speciesCounts.resize(atom->ntypes+1); - MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), + MPI_INT, MPI_SUM, world); } /********************************************************************* @@ -406,23 +326,6 @@ void FixSemiGrandCanonicalMC::doMC() fetchGhostAtomElectronDensities(); const int *mask = atom->mask; -#if SGCMC_DEBUG - // This check is for debugging only! Can be safely removed. - // Check the global concentration counter if it is still in sync on all nodes. - const int *type = atom->type; - std::vector localSpeciesCounts(atom->ntypes+1, 0); - std::vector globalSpeciesCounts(atom->ntypes+1, 0); - for(int i = 0; i < atom->nlocal; i++, ++type) { - if(mask[i] & groupbit) - localSpeciesCounts[*type]++; - } - MPI_Allreduce(&localSpeciesCounts.front(), &globalSpeciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); - for(int i = 1; i <= atom->ntypes; i++) { - // Note: If this test fails it might be an error in the code or - // because LAMMPS has lost atoms. This can happen for bad atom systems. - ASSERT(globalSpeciesCounts[i] == speciesCounts[i]); - } -#endif // End of debugging code // Reset counters. int nAcceptedSwapsLocal = 0; @@ -474,20 +377,12 @@ void FixSemiGrandCanonicalMC::doMC() // Choose a random atom from the pool of atoms that are inside the sampling window. int index = (int)(localRandom->uniform() * (double)samplingWindowAtoms.size()); - ASSERT(index < samplingWindowAtoms.size()); selectedAtomNL = samplingWindowAtoms[index]; // Get the real atom index. - ASSERT(selectedAtomNL < neighborList->inum); selectedAtom = neighborList->ilist[selectedAtomNL]; - ASSERT(selectedAtom < atom->nlocal); - ASSERT(selectedAtom == selectedAtomNL); // This assumption may be wrong. oldSpecies = atom->type[selectedAtom]; -#if SGCMC_DEBUG - trialCounters[selectedAtom]++; -#endif - // Choose the new type for the swapping atom by random. if(atom->ntypes > 2) { // Use a random number to choose the new species if there are three or more atom types. @@ -498,25 +393,13 @@ void FixSemiGrandCanonicalMC::doMC() // If there are only two atom types, then the decision is clear. newSpecies = (oldSpecies == 1) ? 2 : 1; } - ASSERT(newSpecies >= 1 && newSpecies <= atom->ntypes && newSpecies != oldSpecies); deltaN[oldSpecies] = -1; deltaN[newSpecies] = +1; // Compute the energy difference that swapping this atom would cost or gain. if(pairEAM) { -#if CDEAM_MC_SUPPORT - if(pairCDEAM) // Concentration dependent EAM case: - deltaE = computeEnergyChangeCDEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - else // Standard EAM case: -#endif - deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - } -#if TERSOFF_MC_SUPPORT - else if(pairTersoff) { - deltaE = computeEnergyChangeTersoff(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - } -#endif - else { + deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } else { // Generic case: deltaE = computeEnergyChangeGeneric(selectedAtom, oldSpecies, newSpecies); } @@ -537,46 +420,15 @@ void FixSemiGrandCanonicalMC::doMC() dm += deltamu[i] * deltaN[i]; } double deltaB = -(deltaE + dm) * beta; -#if SGCMC_DEBUG - std::cout << "Old species: " << oldSpecies << " new species: " << newSpecies << " deltaE: " << deltaE << " dm: " << dm << " deltaB: " << deltaB; -#endif if(deltaB < 0.0) { if(deltaB < log(localRandom->uniform())) { std::fill(deltaN.begin(), deltaN.end(), 0); selectedAtom = -1; deltaE = 0; -#if SGCMC_DEBUG - std::cout << " REJECTED"; -#endif } } - -#if SGCMC_DEBUG - cout << endl; -#endif } -#if 0 - // This is for debugging purposes only to check the energy change calculation routine. - // Check the return value by calculating the energy change the slow way: difference between total energy before and after the swap. - // The following code should be deactivated for full performance. - // WARNING: Calling this function screws up the stored forces and will therefore change the time evolution of the system in - // the MD simulation. - double deltaECheck = computeEnergyChangeGeneric(selectedAtomDebug, oldSpecies, newSpecies); - double deltaETotal, deltaECheckTotal; - MPI_Allreduce(&deltaEDebug, &deltaETotal, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&deltaECheck, &deltaECheckTotal, 1, MPI_DOUBLE, MPI_SUM, world); - double posx = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][0] : 0.0; - double posy = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][1] : 0.0; - double posz = selectedAtomDebug >= 0 ? atom->x[selectedAtomDebug][2] : 0.0; - printLog("Checking MC routine. DeltaE=%f DeltaE(check)=%f Atom: %i [%f %f %f] Old species: %i New species: %i\n", - deltaETotal, deltaECheckTotal, selectedAtomDebug, posx, posy, posz, oldSpecies, newSpecies); - if(fabs(deltaECheckTotal - deltaETotal) > 1e-6) { // Delta E must be equal to the total energy difference. - error->one(FLERR, "Error in MC energy routine detected. Computed energy change deviates from correct value."); - } -#endif // End of debugging code - - if(kappa != 0.0 && serialMode == false) { // What follows is the second rejection test for the variance-constrained @@ -613,14 +465,8 @@ void FixSemiGrandCanonicalMC::doMC() // Make accepted atom swap permanent. if(selectedAtom >= 0) { - if(pairEAM) { -#if CDEAM_MC_SUPPORT - if(pairCDEAM) // Concentration dependent EAM case: - flipAtomCDEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - else // Standard EAM case: -#endif - flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - } + if(pairEAM) + flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); else flipAtomGeneric(selectedAtom, oldSpecies, newSpecies); nAcceptedSwapsLocal++; @@ -656,7 +502,6 @@ void FixSemiGrandCanonicalMC::doMC() const int *type = atom->type; std::vector localSpeciesCounts(atom->ntypes+1, 0); for(int i = 0; i < atom->nlocal; i++, ++type) { - ASSERT(*type >= 1 && *type <= atom->ntypes); if(mask[i] & groupbit) localSpeciesCounts[*type]++; } @@ -707,56 +552,20 @@ int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int* list, double* buf, in int m = 0; if(communicationStage == 1) { // Send electron densities of local atoms to neighbors. - ASSERT(pairEAM->rho != nullptr); -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = 0; i < n; i++) - buf[m++] = pairEAM->rho[list[i]]; -#if CDEAM_MC_SUPPORT + for(int i = 0; i < n; i++) buf[m++] = pairEAM->rho[list[i]]; + } else if(communicationStage == 3) { + if(pairEAM) { + // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. + for(int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + buf[m++] = pairEAM->rho[list[i]]; } - else { - // In case of the CD-EAM model we have to send the RhoB values and D values as well. - for(int i = 0; i < n; i++) { - buf[m++] = pairCDEAM->rho[list[i]]; - buf[m++] = pairCDEAM->rhoB[list[i]]; - buf[m++] = pairCDEAM->D_values[list[i]]; - } + } else { + // Generic potential case: + for(int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; } -#endif - } - else if(communicationStage == 3) { - if(pairEAM) { - // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = 0; i < n; i++) { - buf[m++] = atom->type[list[i]]; - buf[m++] = pairEAM->rho[list[i]]; - } -#if CDEAM_MC_SUPPORT - } - else { - // In case of the CD-EAM model we have to send the RhoB values and D values as well. - for(int i = 0; i < n; i++) { - buf[m++] = atom->type[list[i]]; - buf[m++] = pairCDEAM->rho[list[i]]; - buf[m++] = pairCDEAM->rhoB[list[i]]; - buf[m++] = pairCDEAM->D_values[list[i]]; - } - } -#endif - } - else { - // Generic potential case: - for(int i = 0; i < n; i++) { - buf[m++] = atom->type[list[i]]; - } - } - } - else { - ASSERT(false); + } } return m; } @@ -766,70 +575,29 @@ int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int* list, double* buf, in *********************************************************************/ void FixSemiGrandCanonicalMC::unpack_forward_comm(int n, int first, double* buf) { - if(communicationStage == 1) { - // Receive electron densities of ghost atoms from neighbors. - int last = first + n; -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = first; i < last; i++) - pairEAM->rho[i] = *buf++; -#if CDEAM_MC_SUPPORT - } - else { - // Also receive the partial densities and D values when using the CD-EAM model. - for(int i = first; i < last; i++) { - pairCDEAM->rho[i] = *buf++; - pairCDEAM->rhoB[i] = *buf++; - pairCDEAM->D_values[i] = *buf++; - } - } -#endif - } - else if(communicationStage == 3) { - int last = first + n; - if(pairEAM) { - // Receive types and rhos of real atoms of the neighbor proc and assign them - // to the local ghost atoms. -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = first; i < last; i++, buf += 2) { - atom->type[i] = (int)buf[0]; - // We have to make sure that rhos changed locally do not get overridden by the rhos - // sent by the neighbor procs. - ASSERT(i < (int)changedAtoms.size()); - if(!changedAtoms[i]) - pairEAM->rho[i] = buf[1]; - } -#if CDEAM_MC_SUPPORT - } - else { - // Also receive the partial densities and D values when using the CD-EAM model. - for(int i = first; i < last; i++, buf += 4) { - atom->type[i] = (int)buf[0]; - // We have to make sure that values changed locally do not get overridden by the values - // sent by the neighbor procs. - ASSERT(i < (int)changedAtoms.size()); - if(!changedAtoms[i]) { - pairCDEAM->rho[i] = buf[1]; - pairCDEAM->rhoB[i] = buf[2]; - pairCDEAM->D_values[i] = buf[3]; - } - } - } -#endif - } - else { - // Generic potential case: - for(int i = first; i < last; i++, buf += 1) { - atom->type[i] = (int)buf[0]; - } - } - } - else { - ASSERT(false); + if(communicationStage == 1) { + // Receive electron densities of ghost atoms from neighbors. + int last = first + n; + for(int i = first; i < last; i++) pairEAM->rho[i] = *buf++; + } else if(communicationStage == 3) { + int last = first + n; + if(pairEAM) { + // Receive types and rhos of real atoms of the neighbor proc and assign them + // to the local ghost atoms. + for(int i = first; i < last; i++, buf += 2) { + atom->type[i] = (int)buf[0]; + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + if(!changedAtoms[i]) + pairEAM->rho[i] = buf[1]; + } + } else { + // Generic potential case: + for(int i = first; i < last; i++, buf += 1) { + atom->type[i] = (int)buf[0]; + } } + } } /********************************************************************* @@ -837,29 +605,12 @@ void FixSemiGrandCanonicalMC::unpack_forward_comm(int n, int first, double* buf) *********************************************************************/ int FixSemiGrandCanonicalMC::pack_reverse_comm(int n, int first, double* buf) { - ASSERT(communicationStage == 2); - int m = 0; + int m = 0; - // Send changed electron densities of ghost atoms to the real atoms of neighbor procs. - ASSERT(pairEAM->rho != nullptr); - int last = first + n; -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = first; i < last; i++) - buf[m++] = pairEAM->rho[i]; -#if CDEAM_MC_SUPPORT - } - else { - // In case of the CD-EAM model we have to send the RhoB values and D values as well. - for(int i = first; i < last; i++) { - buf[m++] = pairCDEAM->rho[i]; - buf[m++] = pairCDEAM->rhoB[i]; - buf[m++] = pairCDEAM->D_values[i]; - } - } -#endif - return m; + // Send changed electron densities of ghost atoms to the real atoms of neighbor procs. + int last = first + n; + for(int i = first; i < last; i++) buf[m++] = pairEAM->rho[i]; + return m; } /********************************************************************* @@ -867,36 +618,14 @@ int FixSemiGrandCanonicalMC::pack_reverse_comm(int n, int first, double* buf) *********************************************************************/ void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) { - ASSERT(communicationStage == 2); - - // Received changed electron densities of ghost atoms of neighbor procs and assign them to our - // real atoms. - ASSERT(pairEAM->rho != nullptr); -#if CDEAM_MC_SUPPORT - if(pairCDEAM == nullptr) { -#endif - for(int i = 0; i < n; i++, buf++) { - // We have to make sure that rhos changed locally do not get overridden by the rhos - // sent by the neighbor procs. - ASSERT(list[i] < (int)changedAtoms.size()); - if(!changedAtoms[list[i]]) - pairEAM->rho[list[i]] = *buf; - } -#if CDEAM_MC_SUPPORT - } - else { - for(int i = 0; i < n; i++, buf += 3) { - // We have to make sure that rhos changed locally do not get overridden by the rhos - // sent by the neighbor procs. - ASSERT(list[i] < (int)changedAtoms.size()); - if(!changedAtoms[list[i]]) { - pairCDEAM->rho[list[i]] = buf[0]; - pairCDEAM->rhoB[list[i]] = buf[1]; - pairCDEAM->D_values[list[i]] = buf[2]; - } - } - } -#endif + // Received changed electron densities of ghost atoms of neighbor procs and assign them to our + // real atoms. + for(int i = 0; i < n; i++, buf++) { + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + if(!changedAtoms[list[i]]) + pairEAM->rho[list[i]] = *buf; + } } /********************************************************************* @@ -904,9 +633,6 @@ void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) *********************************************************************/ bool FixSemiGrandCanonicalMC::placeSamplingWindow() { - ASSERT(neighborList != nullptr); - ASSERT(neighborList->inum == atom->nlocal); - // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect // the same atoms in the region between the two sampling windows. @@ -949,7 +675,6 @@ bool FixSemiGrandCanonicalMC::placeSamplingWindow() numSamplingWindowAtoms = 0; numFixAtomsLocal = 0; - ASSERT(atom->nlocal == neighborList->inum); const int *mask = atom->mask; for(int ii = 0; ii < neighborList->inum; ii++) { int i = neighborList->ilist[ii]; @@ -1023,7 +748,6 @@ double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAto double zi = atom->x[flipAtom][2]; // Loop over all neighbors of the selected atom. - ASSERT(flipAtomNL < neighborList->inum); int* jlist = neighborList->firstneigh[flipAtomNL]; int jnum = neighborList->numneigh[flipAtomNL]; for(int jj = 0; jj < jnum; jj++) { @@ -1105,414 +829,6 @@ double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAto return deltaE; } -#if CDEAM_MC_SUPPORT - -/********************************************************************* - * Calculates the change in energy that swapping the given - * atom would produce. - * This routine is for the concentration-dependent EAM potential. - * It has to do some extra work in comparison to the standard EAM routine above. - * - * Parameters: - * - * flipAtom [in] - * This specifies the atom to be swapped. It's an index into the local list of atoms. - * - * flipAtomNL [in] - * This specifies the atom to be swapped. It's an index into the neighbor list. - * - * oldSpecies [in] - * The current species of the atom before the routine is called. - * - * newSpecies [in] - * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. - * - * Return value: - * The expected change in total potential energy. - *********************************************************************/ -double FixSemiGrandCanonicalMC::computeEnergyChangeCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) -{ - ASSERT(pairCDEAM != nullptr); // Make sure we have a CD-EAM potential in use. - - double p; - int m; - double* rho = pairEAM->rho; - double* coeff; - double new_total_rho_i = 0.0; - double new_total_rhoB_i = 0.0; - - // The energy change to calculate. - double deltaE = 0.0; - - // Calculate each change of electron density (and partial density) at the - // surrounding sites induced by the swapped atom. Also calculate the change of pair interaction energy. - // Then calculate the change of embedding energy for each neighbor atom. - - double xi = atom->x[flipAtom][0]; - double yi = atom->x[flipAtom][1]; - double zi = atom->x[flipAtom][2]; - - /// The change in atom i's D value. - double deltaD_i = 0.0; - - // Loop over all neighbors of the selected atom. - int* jlist = neighborList->firstneigh[flipAtomNL]; - int jnum = neighborList->numneigh[flipAtomNL]; - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - - double delx = xi - atom->x[j][0]; - double dely = yi - atom->x[j][1]; - double delz = zi - atom->x[j][2]; - double rsq = delx*delx + dely*dely + delz*delz; - if(rsq >= pairEAM->cutforcesq) continue; - - int jtype = atom->type[j]; - double r = sqrt(rsq); - - p = r * pairEAM->rdr + 1.0; - m = static_cast(p); - m = MIN(m, pairEAM->nr - 1); - p -= m; - p = MIN(p, 1.0); - - // Calculate change of electron density at site j. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; - double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; - double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - double delta_rho = newrho_contr - oldrho_contr; - - // Sum total rho at site of swapped atom. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; - double rho_ji = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - new_total_rho_i += rho_ji; - if(jtype == pairCDEAM->speciesB) - new_total_rhoB_i += rho_ji; - - // Determine change of partial electron density at site j. - // It increases if the atom i becomes a B atom and it decreases if it was an B atom. - double delta_rhoB_j = 0; - if(newSpecies == pairCDEAM->speciesB) delta_rhoB_j = newrho_contr; - else if(oldSpecies == pairCDEAM->speciesB) delta_rhoB_j = -oldrho_contr; - - // Now we can calculate the new concentration x_j at site j. - double new_x_j = (pairCDEAM->rhoB[j] + delta_rhoB_j) / (rho[j] + delta_rho); - // Calculate the old concentration x_j at site j as well. - double old_x_j = pairCDEAM->rhoB[j] / rho[j]; - - // Calculate change of pair energy ij. - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; - double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; - double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - /// Was the old i-j interaction concentration dependent? - if((jtype == pairCDEAM->speciesA && oldSpecies == pairCDEAM->speciesB) - || (jtype == pairCDEAM->speciesB && oldSpecies == pairCDEAM->speciesA)) { - - // The old pair interaction was concentration dependent. - // Please note that it must now become concentration independent that - // either the A or the B atom has changed to another species. - // We here require that only the A-B interactions are concentration dependent. - - // Add the new static pair interaction term. - deltaE += newz2 / r; - - // The D values of i and j decrease due to the removed concentration dependent cross interaction. - double deltaD_j = -oldz2 / r; - deltaD_i += deltaD_j; - - // Since the concentration x_j at site j changes, the mixed pair interaction between atom j and - // other atoms k is also affected. - // The energy change of site j due to the cross term is: (new_h*new_D - old_h*old_D)/2 - double old_h_j = pairCDEAM->evalH(old_x_j); - double new_h_j = pairCDEAM->evalH(new_x_j); - deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j] + deltaD_j) - old_h_j * pairCDEAM->D_values[j]); - } - else { - - // The old pair interaction was not concentration dependent. Now it might have - // become dependent. Do check: - if((jtype == pairCDEAM->speciesA && newSpecies == pairCDEAM->speciesB) - || (jtype == pairCDEAM->speciesB && newSpecies == pairCDEAM->speciesA)) { - - // The new pair interaction is concentration dependent. It's an AB interaction. - - // Subtract old static pair interaction. - deltaE -= oldz2 / r; - - // The D values of i and j increase due to the created AB cross interaction. - double deltaD_j = newz2 / r; - deltaD_i += deltaD_j; - - // Since the concentration x_j at site j changes, the mixed pair interaction between atom j and - // other atoms k is also affected. - // The energy change of site j due to the cross term is: (new_h*new_D - old_h*old_D)/2 - double old_h_j = pairCDEAM->evalH(old_x_j); - double new_h_j = pairCDEAM->evalH(new_x_j); - deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j] + deltaD_j) - old_h_j * pairCDEAM->D_values[j]); - } - else { - - // The pair interaction stays concentration independent. - // This is like standard EAM. - deltaE += (newz2 - oldz2) / r; - - double old_h_j = pairCDEAM->evalH(old_x_j); - double new_h_j = pairCDEAM->evalH(new_x_j); - deltaE += 0.5 * (new_h_j * (pairCDEAM->D_values[j]) - old_h_j * pairCDEAM->D_values[j]); - } - } - - // Calculate old embedding energy of atom j. - p = rho[j] * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; - double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - // Calculate new embedding energy of atom j. - p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; - double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - deltaE += newF - oldF; - } - - ASSERT(rho[flipAtom] > 0.0); - ASSERT(new_total_rho_i > 0.0); - - // Things are easier if the rho(r) functional does not depend on the type of both atoms I and J (as for Finnis/Sinclair type potentials). - if(rho[flipAtom] == new_total_rho_i && pairCDEAM->rhoB[flipAtom] == new_total_rhoB_i) { - // Calculate local concentration at site i. This did not change. - double x_i = pairCDEAM->rhoB[flipAtom] / rho[flipAtom]; - - // Calculate h(x_i) polynomial function. - double h_i = pairCDEAM->evalH(x_i); - - // This is the energy change at site i due to the cross term: - deltaE += 0.5 * h_i * deltaD_i; - - // Compute the change in embedding energy of the swapping atom. - p = rho[flipAtom] * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; - double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; - double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - deltaE += newF - oldF; - } - else { - // Calculate the new and old concentration at site i. - double x_i_old = pairCDEAM->rhoB[flipAtom] / rho[flipAtom]; - double x_i_new = new_total_rhoB_i / new_total_rho_i; - - // Calculate h(x_i) polynomial function. - double old_h_i = pairCDEAM->evalH(x_i_old); - double new_h_i = pairCDEAM->evalH(x_i_new); - - // This is the energy change at site i due to the cross term: - deltaE += 0.5 * (new_h_i * (pairCDEAM->D_values[flipAtom] + deltaD_i) - old_h_i * pairCDEAM->D_values[flipAtom]); - - // Compute the change in embedding energy of the swapping atom. - p = rho[flipAtom] * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; - double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - p = new_total_rho_i * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; - double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - deltaE += newF - oldF; - } - - return deltaE; -} - -#endif - -#if TERSOFF_MC_SUPPORT - -/********************************************************************* - * Calculates the change in energy that swapping the given - * atom would produce. This routine is for the Tersoff potential. - * - * Parameters: - * - * flipAtom [in] - * This specifies the atom to be swapped. It's an index into the local list of atoms. - * - * flipAtomNL [in] - * This specifies the atom to be swapped. It's an index into the neighbor list. - * - * oldSpecies [in] - * The current species of the atom before the routine is called. - * - * newSpecies [in] - * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. - * - * Return value: - * The expected change in total potential energy. - *********************************************************************/ -double FixSemiGrandCanonicalMC::computeEnergyChangeTersoff(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) -{ - // This routine is called even when no trial move is being performed during the - // the current iteration to keep the parallel processors in sync. If no trial - // move is performed then the energy is calculated twice for the same state of the system. - if(flipAtom >= 0) { - // Change system. Perform trial move. - atom->type[flipAtom] = newSpecies; - } - // Transfer changed atom types of the real atoms to the ghost atoms. - communicationStage = 3; - comm->forward_comm(this); - - // Calculate new total energy. - double newEnergy = 0; - if(flipAtom >= 0) { - newEnergy = computeEnergyTersoff(flipAtom); - } - - // Undo trial move. Restore old system state. - if(flipAtom >= 0) { - atom->type[flipAtom] = oldSpecies; - } - // Transfer changed atom types of the real atoms to the ghost atoms. - communicationStage = 3; - comm->forward_comm(this); - - // Calculate old total energy. - double oldEnergy = 0; - if(flipAtom >= 0 || totalPotentialEnergy == 0) { - totalPotentialEnergy = oldEnergy = computeEnergyTersoff(flipAtom); - } - else oldEnergy = totalPotentialEnergy; - - return newEnergy - oldEnergy; -} - -/// Computes the energy of the atom group around the flipped atom using the Tersoff potential. -double FixSemiGrandCanonicalMC::computeEnergyTersoff(int flipAtom) -{ - double totalEnergy = 0; - for(int ii = 0; ii < atom->nlocal; ii++) - totalEnergy += computeAtomicEnergyTersoff(ii); - return totalEnergy; -} - -/// Computes the energy of an atom using the Tersoff potential. -double FixSemiGrandCanonicalMC::computeAtomicEnergyTersoff(int i) -{ - double **x = atom->x; - int *tag = atom->tag; - int *type = atom->type; - - int* numneigh = neighborList->numneigh; - int** firstneigh = neighborList->firstneigh; - - double atomicEnergy = 0; - - int itype = pairTersoff->map[type[i]]; - int itag = tag[i]; - double xtmp = x[i][0]; - double ytmp = x[i][1]; - double ztmp = x[i][2]; - - // two-body interactions, skip half of them - int* jlist = firstneigh[i]; - int jnum = numneigh[i]; - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - int jtype = pairTersoff->map[type[j]]; - int jtag = tag[j]; - - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) continue; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) continue; - } else { - if (x[j][2] < x[i][2]) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; - } - - double delx = xtmp - x[j][0]; - double dely = ytmp - x[j][1]; - double delz = ztmp - x[j][2]; - double rsq = delx*delx + dely*dely + delz*delz; - - int iparam_ij = pairTersoff->elem2param[itype][jtype][jtype]; - if (rsq > pairTersoff->params[iparam_ij].cutsq) continue; - - double r = sqrt(rsq); - double tmp_fc = pairTersoff->ters_fc(r, &pairTersoff->params[iparam_ij]); - double tmp_exp = exp(-pairTersoff->params[iparam_ij].lam1 * r); - atomicEnergy += tmp_fc * pairTersoff->params[iparam_ij].biga * tmp_exp; - } - - // three-body interactions - // skip immediately if I-J is not within cutoff - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - int jtype = pairTersoff->map[type[j]]; - int iparam_ij = pairTersoff->elem2param[itype][jtype][jtype]; - - double delr1[3]; - delr1[0] = x[j][0] - xtmp; - delr1[1] = x[j][1] - ytmp; - delr1[2] = x[j][2] - ztmp; - double rsq1 = delr1[0]*delr1[0] + delr1[1]*delr1[1] + delr1[2]*delr1[2]; - if(rsq1 > pairTersoff->params[iparam_ij].cutsq) continue; - - // accumulate bondorder zeta for each i-j interaction via loop over k - double zeta_ij = 0.0; - for (int kk = 0; kk < jnum; kk++) { - if (jj == kk) continue; - int k = jlist[kk]; - k &= NEIGHMASK; - int ktype = pairTersoff->map[type[k]]; - int iparam_ijk = pairTersoff->elem2param[itype][jtype][ktype]; - double delr2[3]; - delr2[0] = x[k][0] - xtmp; - delr2[1] = x[k][1] - ytmp; - delr2[2] = x[k][2] - ztmp; - double rsq2 = delr2[0]*delr2[0] + delr2[1]*delr2[1] + delr2[2]*delr2[2]; - if(rsq2 > pairTersoff->params[iparam_ijk].cutsq) continue; - zeta_ij += pairTersoff->zeta(&pairTersoff->params[iparam_ijk],rsq1,rsq2,delr1,delr2); - } - - double r = sqrt(rsq1); - double fa = pairTersoff->ters_fa(r,&pairTersoff->params[iparam_ij]); - double bij = pairTersoff->ters_bij(zeta_ij,&pairTersoff->params[iparam_ij]); - atomicEnergy += 0.5*bij*fa; - } - - return atomicEnergy; -} - -#endif - /********************************************************************* * Calculates the change in energy that swapping the given atom would produce. * This routine is for the general case of an arbitrary potential and @@ -1573,8 +889,6 @@ double FixSemiGrandCanonicalMC::computeEnergyChangeGeneric(int flipAtom, int old *********************************************************************/ double FixSemiGrandCanonicalMC::computeTotalEnergy() { - ASSERT(compute_pe != nullptr); - int eflag = 1; int vflag = 0; @@ -1639,7 +953,6 @@ void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldS int jnum = neighborList->numneigh[flipAtomNL]; for(int jj = 0; jj < jnum; jj++) { int j = jlist[jj]; - ASSERT(j < (int)changedAtoms.size()); double delx = xi - atom->x[j][0]; double dely = yi - atom->x[j][1]; @@ -1677,151 +990,6 @@ void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldS rho[flipAtom] = new_total_rho_i; } -#if CDEAM_MC_SUPPORT - -/********************************************************************* - * Flips the type of one atom and changes the electron densities and - * D values of nearby atoms accordingly. - * This routine is for the case of the concentration dependent CD-EAM potential. - * - * Parameters: - * - * flipAtom [in] - * This specifies the atom to be swapped. It's an index into the local list of atoms. - * - * flipAtomNL [in] - * This specifies the atom to be swapped. It's an index into the neighbor list. - * - * oldSpecies [in] - * The current species of the atom before the routine is called. - * - * newSpecies [in] - * The new type to be assigned to the atom. - *********************************************************************/ -void FixSemiGrandCanonicalMC::flipAtomCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) -{ - double p; - int m; - double* rho = pairEAM->rho; - double* coeff; - double new_total_rho_i = 0.0; - double new_total_rhoB_i = 0.0; - - atom->type[flipAtom] = newSpecies; - - // Rescale particle velocity vector to conserve kinetic energy. - double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); - atom->v[flipAtom][0] *= vScaleFactor; - atom->v[flipAtom][1] *= vScaleFactor; - atom->v[flipAtom][2] *= vScaleFactor; - - double xi = atom->x[flipAtom][0]; - double yi = atom->x[flipAtom][1]; - double zi = atom->x[flipAtom][2]; - - /// The change in atom i's D value. - double deltaD_i = 0.0; - - // Loop over all neighbors of the selected atom. - int* jlist = neighborList->firstneigh[flipAtomNL]; - int jnum = neighborList->numneigh[flipAtomNL]; - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - ASSERT(j < (int)changedAtoms.size()); - - double delx = xi - atom->x[j][0]; - double dely = yi - atom->x[j][1]; - double delz = zi - atom->x[j][2]; - double rsq = delx*delx + dely*dely + delz*delz; - if(rsq >= pairEAM->cutforcesq) continue; - - int jtype = atom->type[j]; - double r = sqrt(rsq); - p = r * pairEAM->rdr + 1.0; - m = static_cast(p); - m = MIN(m, pairEAM->nr - 1); - p -= m; - p = MIN(p, 1.0); - - // Calculate change of electron density at site j. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; - double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; - double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - double delta_rho = newrho_contr - oldrho_contr; - - rho[j] += delta_rho; - // Sum total rho at site of swapped atom. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; - double rho_ji = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - new_total_rho_i += rho_ji; - if(jtype == pairCDEAM->speciesB) - new_total_rhoB_i += rho_ji; - - // Determine change of partial electron density at site j. - // It increases if the atom i becomes a B atom and it decreases if it was a B atom. - if(newSpecies == pairCDEAM->speciesB) - pairCDEAM->rhoB[j] += newrho_contr; - else if(oldSpecies == pairCDEAM->speciesB) - pairCDEAM->rhoB[j] -= oldrho_contr; - - /// The change in atom j's D value. - double deltaD_j; - - /// Was the old i-j interaction concentration dependent? - if((jtype == pairCDEAM->speciesA && oldSpecies == pairCDEAM->speciesB) - || (jtype == pairCDEAM->speciesB && oldSpecies == pairCDEAM->speciesA)) { - - // The old pair interaction was concentration dependent. - // Please note that it must now become concentration independent that - // either the A or the B atom has changed to another species. - // We here require that only the A-B interactions are concentration dependent. - - // Calculate change of pair energy ij. - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; - double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - // The D value of j decreases due to the removed cross interaction. - deltaD_j = -oldz2 / r; - } - else { - - // The old pair interaction was not concentration dependent. Now it might have - // become dependent. Do check: - if((jtype == pairCDEAM->speciesA && newSpecies == pairCDEAM->speciesB) - || (jtype == pairCDEAM->speciesB && newSpecies == pairCDEAM->speciesA)) { - - // The new pair interaction is concentration dependent. It's an AB interaction. - - // Calculate change of pair energy ij. - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; - double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - // The D value of j increases due to the created cross interaction. - deltaD_j = newz2 / r; - } - else deltaD_j = 0.0; - } - pairCDEAM->D_values[j] += deltaD_j; - - // D_i changes in the same way as D_j changes. - deltaD_i += deltaD_j; - - // Set the flag for this atom to indicate that its rho has changed and needs - // to be transfered at end of MC step. - changedAtoms[j] = true; - } - - // Store newly calculated electron densities and D value at swapped atom site. - rho[flipAtom] = new_total_rho_i; - pairCDEAM->rhoB[flipAtom] = new_total_rhoB_i; - pairCDEAM->D_values[flipAtom] += deltaD_i; - - changedAtoms[flipAtom] = true; -} - -#endif - /********************************************************************* * Flips the type of one atom. * This routine is for the generic case. @@ -1858,12 +1026,11 @@ double FixSemiGrandCanonicalMC::compute_vector(int index) if(index == 0) return nAcceptedSwaps; if(index == 1) return nRejectedSwaps; index -= 1; - ASSERT(index >= 1 && index < (int)speciesCounts.size()); int totalAtoms = 0; for(int i = 0; i < (int)speciesCounts.size(); i++) totalAtoms += speciesCounts[i]; if(index <= atom->ntypes) return (double)speciesCounts[index] / (totalAtoms > 0 ? totalAtoms : 1); - ASSERT(false); return 0.0; + return 0.0; } /********************************************************************* diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h index f74bc105e3..fd1f67baee 100644 --- a/src/MC/fix_sgcmc.h +++ b/src/MC/fix_sgcmc.h @@ -32,24 +32,6 @@ FixStyle(sgcmc,FixSemiGrandCanonicalMC); #include "fix.h" -// Setting this to 1 enables support for the concentration-dependent EAM potential (pair_style eam/cd) -// in the Monte Carlo routine. Setting to 0 limits support to standard EAM only and removes all dependencies -// on the CD-EAM potential code. -#ifndef CDEAM_MC_SUPPORT -#define CDEAM_MC_SUPPORT 0 -#endif - -// Setting this to 1 enables support for Tersoff-like potentials (pair_style tersoff) -// in the Monte Carlo routine. -#ifndef TERSOFF_MC_SUPPORT -#define TERSOFF_MC_SUPPORT 0 -#endif -// Setting this to 1 enables additional debugging/sanity checks (with a small performance penalty). -#ifndef SGCMC_DEBUG -#define SGCMC_DEBUG 0 -#endif - -#include #include namespace LAMMPS_NS { @@ -104,24 +86,6 @@ class FixSemiGrandCanonicalMC : public Fix { /// This routine is for the case of a standard EAM potential. double computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); -#if CDEAM_MC_SUPPORT - /// Calculates the change in energy that swapping the given atom would produce. - /// This routine is for the case of the concentration dependent CD-EAM potential. - double computeEnergyChangeCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); -#endif - -#if TERSOFF_MC_SUPPORT - /// Calculates the change in energy that swapping the given atom would produce. - /// This routine is for the Tersoff potential. - double computeEnergyChangeTersoff(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); - - /// Computes the energy of the atom group around the flipped atom using the Tersoff potential. - double computeEnergyTersoff(int flipAtom); - - /// Computes the energy of an atom using the Tersoff potential. - double computeAtomicEnergyTersoff(int i); -#endif - /// Calculates the change in energy that swapping the given atom would produce. /// This routine is for the general case of an arbitrary potential and /// IS VERY SLOW! It computes the total energies of the system for the unmodified state @@ -147,19 +111,6 @@ class FixSemiGrandCanonicalMC : public Fix { /// Transfers the locally changed electron densities and atom types to the neighbors. void communicateRhoAndTypes(); -#if SGCMC_DEBUG - /// Allocate atom-based array. - void grow_arrays(int) override; - /// Copy values within local atom-based array. - void copy_arrays(int, int) override; - /// Initialize one atom's array values, called when atom is created. - void set_arrays(int) override; - /// Pack values in local atom-based array for exchange with another proc. - int pack_exchange(int, double *) override; - /// Unpack values in local atom-based array from exchange with another proc. - int unpack_exchange(int, double *) override; -#endif - private: /// The number of MD steps between each MC cycle. int nevery_mdsteps; @@ -237,20 +188,6 @@ class FixSemiGrandCanonicalMC : public Fix { /// This is required to access the Rho arrays calculated by the potential class and its potential tables. class PairEAM *pairEAM; -#if CDEAM_MC_SUPPORT - /// Pointer to the CD-EAM potential class. - /// This is required to access the RhoB arrays calculated by the potential class. - /// The pointer is NULL if only the standard EAM model is used in the simulation. - class PairEAMCD *pairCDEAM; -#endif - -#if TERSOFF_MC_SUPPORT - /// Pointer to the Tersoff potential class. - /// This is required to access the parameters of the potential when computing the - /// change in energy. - class PairTersoff *pairTersoff; -#endif - /// This array contains a boolean value per atom (real and ghosts) that indicates whether /// the electron density or another property at that site has been affected by one of the accepted MC swaps. std::vector changedAtoms; @@ -272,14 +209,8 @@ class FixSemiGrandCanonicalMC : public Fix { /// A compute used to compute the total potential energy of the system. class Compute *compute_pe; - -#if SGCMC_DEBUG - /// This per-atom array counts how often each atom is picked for a trial move. - /// This is only used for debugging purposes. - double *trialCounters; -#endif }; } // namespace LAMMPS_NS -#endif // FIX_SEMIGRANDCANONICAL_MC_H -#endif // FIX_CLASS +#endif +#endif From 88ac09a8c04e266e6e1c0d3dc6df26fdca56dbf7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 16:29:12 -0500 Subject: [PATCH 36/46] build system support: fix sgcmc may only be compiled if EAM is available --- cmake/CMakeLists.txt | 2 +- cmake/Modules/Packages/MC.cmake | 9 +++++ src/.gitignore | 2 ++ src/MC/Install.sh | 63 +++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 cmake/Modules/Packages/MC.cmake create mode 100755 src/MC/Install.sh diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c96f5576a5..ec142af426 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -668,7 +668,7 @@ endif() # packages which selectively include variants based on enabled styles # e.g. accelerator packages ###################################################################### -foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU) +foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MC MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) endif() diff --git a/cmake/Modules/Packages/MC.cmake b/cmake/Modules/Packages/MC.cmake new file mode 100644 index 0000000000..f162254558 --- /dev/null +++ b/cmake/Modules/Packages/MC.cmake @@ -0,0 +1,9 @@ +# fix sgcmc may only be installed if also the EAM pair style from MANYBODY is installed +if(NOT PKG_MANYBODY) + get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX) + list(REMOVE_ITEM LAMMPS_FIX_HEADERS ${LAMMPS_SOURCE_DIR}/MC/fix_sgcmc.h) + set_property(GLOBAL PROPERTY FIX "${LAMMPS_FIX_HEADERS}") + get_target_property(LAMMPS_SOURCES lammps SOURCES) + list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/MC/fix_sgcmc.cpp) + set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}") +endif() diff --git a/src/.gitignore b/src/.gitignore index 0fbd54afcd..19f4d924b0 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -920,6 +920,8 @@ /fix_rigid_nvt_small.h /fix_rigid_small.cpp /fix_rigid_small.h +/fix_sgcmc.cpp +/fix_sgcmc.h /fix_shake.cpp /fix_shake.h /fix_shardlow.cpp diff --git a/src/MC/Install.sh b/src/MC/Install.sh new file mode 100755 index 0000000000..ccf6767c4d --- /dev/null +++ b/src/MC/Install.sh @@ -0,0 +1,63 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +# this is default Install.sh for all packages +# if package has an auxiliary library or a file with a dependency, +# then package dir has its own customized Install.sh + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + + +action fix_atom_swap.cpp +action fix_atom_swap.h +action fix_bond_break.cpp +action fix_bond_break.h +action fix_bond_create_angle.cpp +action fix_bond_create_angle.h +action fix_bond_create.cpp +action fix_bond_create.h +action fix_bond_swap.cpp +action fix_bond_swap.h +action fix_charge_regulation.cpp +action fix_charge_regulation.h +action fix_gcmc.cpp +action fix_gcmc.h +action fix_mol_swap.cpp +action fix_mol_swap.h +action fix_sgcmc.cpp pair_eam.cpp +action fix_sgcmc.h pair_eam.h +action fix_tfmc.cpp +action fix_tfmc.h +action fix_widom.cpp +action fix_widom.h +action pair_dsmc.cpp +action pair_dsmc.h From 49cccd7526b5cd01b3226d238f6319f488fbec93 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 16:35:49 -0500 Subject: [PATCH 37/46] add example for fix sgcmc --- examples/mc/FeCu.pasianot.eamfs | 9007 +++++++++++++++++++++++ examples/mc/in.sgcmc.eam | 48 + examples/mc/log.13Dec22.sgcmc.eam.g++.1 | 143 + examples/mc/log.13Dec22.sgcmc.eam.g++.4 | 143 + 4 files changed, 9341 insertions(+) create mode 100644 examples/mc/FeCu.pasianot.eamfs create mode 100644 examples/mc/in.sgcmc.eam create mode 100644 examples/mc/log.13Dec22.sgcmc.eam.g++.1 create mode 100644 examples/mc/log.13Dec22.sgcmc.eam.g++.4 diff --git a/examples/mc/FeCu.pasianot.eamfs b/examples/mc/FeCu.pasianot.eamfs new file mode 100644 index 0000000000..a5633bacaf --- /dev/null +++ b/examples/mc/FeCu.pasianot.eamfs @@ -0,0 +1,9007 @@ +Fe-Cu potential by Pasianot and Malerba, JNM 360, 118 (2007) +Fe potential by Mendelev, Cu potential by Mishin +PE, 05/27/2009 +2 Fe Cu +5000 0.3000000000E-02 5000 0.1101358000E-02 5.506790000 +26 55.847 2.8553 BCC + 0.000000000000000e+00 -2.502338715878852e-01 -3.915852477615788e-01 -4.541520341263603e-01 -5.270235795086948e-01 + -5.820137813191907e-01 -6.334511319245772e-01 -6.793141998726575e-01 -7.215324706414761e-01 -7.606131975312557e-01 + -7.970827725223445e-01 -8.313329919387222e-01 -8.636549303943222e-01 -8.942886450128376e-01 -9.234251076248214e-01 + -9.512229825062409e-01 -9.778144791806214e-01 -1.003311523498760e+00 -1.027809755065672e+00 -1.051391697497198e+00 + -1.074129154477209e+00 -1.096085058497037e+00 -1.117314932647117e+00 -1.137868055905411e+00 -1.157788403784776e+00 + -1.177115413961566e+00 -1.195884611609660e+00 -1.214128134799185e+00 -1.231875173682360e+00 -1.249152335150178e+00 + -1.265983951558685e+00 -1.282392343707737e+00 -1.298398046055169e+00 -1.314020000512098e+00 -1.329275722629841e+00 + -1.344181447804537e+00 -1.358752260334825e+00 -1.373002204445608e+00 -1.386944381857256e+00 -1.400591037928087e+00 + -1.413953637955728e+00 -1.427042934963793e+00 -1.439869029547145e+00 -1.452441423732973e+00 -1.464769070452198e+00 + -1.476860416985908e+00 -1.488723444007099e+00 -1.500365700842289e+00 -1.511794337388395e+00 -1.523016133062229e+00 + -1.534037522881468e+00 -1.544864621177124e+00 -1.555503244070705e+00 -1.565958929508429e+00 -1.576236955510854e+00 + -1.586342356916396e+00 -1.596279940767053e+00 -1.606054300467819e+00 -1.615669828742544e+00 -1.625130729454634e+00 + -1.634441029086672e+00 -1.643604587118151e+00 -1.652625105550088e+00 -1.661506137744704e+00 -1.670251096639065e+00 + -1.678863262385732e+00 -1.687345789430200e+00 -1.695701712976747e+00 -1.703933955366618e+00 -1.712045331943283e+00 + -1.720038556449747e+00 -1.727916246081839e+00 -1.735680926223856e+00 -1.743335034890479e+00 -1.750880926881849e+00 + -1.758320877585579e+00 -1.765657086752409e+00 -1.772891682042566e+00 -1.780026722286302e+00 -1.787064200557123e+00 + -1.794006047071369e+00 -1.800854131925905e+00 -1.807610267679311e+00 -1.814276211720992e+00 -1.820853668619758e+00 + -1.827344292385584e+00 -1.833749688543146e+00 -1.840071416095800e+00 -1.846310989388766e+00 -1.852469879877731e+00 + -1.858549517806932e+00 -1.864551293757170e+00 -1.870476560166527e+00 -1.876326632835685e+00 -1.882102792303735e+00 + -1.887806285155229e+00 -1.893438325265788e+00 -1.899000094989747e+00 -1.904492746292669e+00 -1.909917401803477e+00 + -1.915275155832934e+00 -1.920567075410339e+00 -1.925794201229736e+00 -1.930957548549688e+00 -1.936058108054043e+00 + -1.941096846675717e+00 -1.946074708385351e+00 -1.950992614930206e+00 -1.955851466536921e+00 -1.960652142645052e+00 + -1.965395502578354e+00 -1.970082386182181e+00 -1.974713614435233e+00 -1.979289990036900e+00 -1.983812297971365e+00 + -1.988281306040761e+00 -1.992697765363688e+00 -1.997062410905215e+00 -2.001375961966369e+00 -2.005639122646891e+00 + -2.009852582290609e+00 -2.014017015914234e+00 -2.018133084620317e+00 -2.022201435990600e+00 -2.026222704449250e+00 + -2.030197511651828e+00 -2.034126466851079e+00 -2.038010167240131e+00 -2.041849198283612e+00 -2.045644134037188e+00 + -2.049395537456054e+00 -2.053103960690683e+00 -2.056769945358115e+00 -2.060394022831066e+00 -2.063976714517138e+00 + -2.067518532118222e+00 -2.071019977881210e+00 -2.074481544840473e+00 -2.077903717052419e+00 -2.081286969821558e+00 + -2.084631769907669e+00 -2.087938575743120e+00 -2.091207837649796e+00 -2.094439998038564e+00 -2.097635491602200e+00 + -2.100794745502353e+00 -2.103918179550728e+00 -2.107006206384388e+00 -2.110059231627097e+00 -2.113077654054444e+00 + -2.116061865764799e+00 -2.119012252335141e+00 -2.121929192971692e+00 -2.124813060656121e+00 -2.127664222287478e+00 + -2.130483038819909e+00 -2.133269865390459e+00 -2.136025051445914e+00 -2.138748940879024e+00 -2.141441872152071e+00 + -2.144104178416009e+00 -2.146736187626258e+00 -2.149338222655301e+00 -2.151910601402148e+00 -2.154453636895005e+00 + -2.156967637389932e+00 -2.159452906480198e+00 -2.161909743195699e+00 -2.164338442098267e+00 -2.166739293374467e+00 + -2.169112582925921e+00 -2.171458592457252e+00 -2.173777599559529e+00 -2.176069877788093e+00 -2.178335696750736e+00 + -2.180575322188782e+00 -2.182789016054171e+00 -2.184977036584567e+00 -2.187139638376587e+00 -2.189277072457176e+00 + -2.191389586351989e+00 -2.193477424147857e+00 -2.195540826563956e+00 -2.197580031018832e+00 -2.199595271693328e+00 + -2.201586779591983e+00 -2.203554782602937e+00 -2.205499505556400e+00 -2.207421170281107e+00 -2.209319995655316e+00 + -2.211196197664255e+00 -2.213049989456184e+00 -2.214881581394238e+00 -2.216691181107032e+00 -2.218478993538120e+00 + -2.220245220994279e+00 -2.221990063192430e+00 -2.223713717301932e+00 -2.225416377990993e+00 -2.227098237473976e+00 + -2.228759485554509e+00 -2.230400309667533e+00 -2.232020894920435e+00 -2.233621424133257e+00 -2.235202077877915e+00 + -2.236763034513762e+00 -2.238304470225168e+00 -2.239826559061690e+00 -2.241329472974240e+00 -2.242813381850284e+00 + -2.244278453548302e+00 -2.245724853931507e+00 -2.247152746900820e+00 -2.248562294425109e+00 -2.249953656571756e+00 + -2.251326991540882e+00 -2.252682455695965e+00 -2.254020203593521e+00 -2.255340388012158e+00 -2.256643159981041e+00 + -2.257928668807769e+00 -2.259197062104328e+00 -2.260448485812105e+00 -2.261683084231092e+00 -2.262901000046045e+00 + -2.264102374351666e+00 -2.265287346677250e+00 -2.266456055010869e+00 -2.267608635823069e+00 -2.268745224089268e+00 + -2.269865953310465e+00 -2.270970955538091e+00 -2.272060361396592e+00 -2.273134300104890e+00 -2.274192899497445e+00 + -2.275236286044899e+00 -2.276264584874338e+00 -2.277277919788690e+00 -2.278276413284132e+00 -2.279260186571117e+00 + -2.280229359594064e+00 -2.281184051049774e+00 -2.282124378405483e+00 -2.283050457916613e+00 -2.283962404644175e+00 + -2.284860332471597e+00 -2.285744354119622e+00 -2.286614581163983e+00 -2.287471124052714e+00 -2.288314092122030e+00 + -2.289143593611911e+00 -2.289959735681407e+00 -2.290762624423672e+00 -2.291552364880611e+00 -2.292329061055794e+00 + -2.293092815929270e+00 -2.293843731472861e+00 -2.294581908663944e+00 -2.295307447498960e+00 -2.296020447006684e+00 + -2.296721005261261e+00 -2.297409219394981e+00 -2.298085185609632e+00 -2.298748999188869e+00 -2.299400754511783e+00 + -2.300040545064931e+00 -2.300668463454097e+00 -2.301284601415844e+00 -2.301889049828881e+00 -2.302481898725225e+00 + -2.303063237300273e+00 -2.303633153923143e+00 -2.304191736148714e+00 -2.304739070728200e+00 -2.305275243619421e+00 + -2.305800339996919e+00 -2.306314444261903e+00 -2.306817640052015e+00 -2.307310010250343e+00 -2.307791636994108e+00 + -2.308262601685295e+00 -2.308722985000041e+00 -2.309172866897634e+00 -2.309612326629400e+00 -2.310041442747435e+00 + -2.310460293113193e+00 -2.310868954905559e+00 -2.311267504628225e+00 -2.311656018119039e+00 -2.312034570558373e+00 + -2.312403236477067e+00 -2.312762089764253e+00 -2.313111203675049e+00 -2.313450650838138e+00 -2.313780503263004e+00 + -2.314100832346301e+00 -2.314411708879982e+00 -2.314713203058840e+00 -2.315005384487538e+00 -2.315288322187517e+00 + -2.315562084603811e+00 -2.315826739611746e+00 -2.316082354523429e+00 -2.316328996093344e+00 -2.316566730525349e+00 + -2.316795623479531e+00 -2.317015740078438e+00 -2.317227144913205e+00 -2.317429902049602e+00 -2.317624075033990e+00 + -2.317809726899128e+00 -2.317986920169159e+00 -2.318155716865614e+00 -2.318316178513639e+00 -2.318468366147555e+00 + -2.318612340316317e+00 -2.318748161088890e+00 -2.318875888059551e+00 -2.318995580353098e+00 -2.319107296629367e+00 + -2.319211095088310e+00 -2.319307033475710e+00 -2.319395169088151e+00 -2.319475558777873e+00 -2.319548258957596e+00 + -2.319613325605248e+00 -2.319670814268620e+00 -2.319720780069511e+00 -2.319763277708035e+00 -2.319798361467810e+00 + -2.319826085220447e+00 -2.319846502429908e+00 -2.319859666156802e+00 -2.319865629062627e+00 -2.319864443413965e+00 + -2.319856161086258e+00 -2.319840833567500e+00 -2.319818511962931e+00 -2.319789246999103e+00 -2.319753089027798e+00 + -2.319710088029891e+00 -2.319660293619147e+00 -2.319603755045984e+00 -2.319540521200980e+00 -2.319470640618020e+00 + -2.319394161478521e+00 -2.319311131615155e+00 -2.319221598515366e+00 -2.319125609324845e+00 -2.319023210850965e+00 + -2.318914449566154e+00 -2.318799371611112e+00 -2.318678022797595e+00 -2.318550448612130e+00 -2.318416694219462e+00 + -2.318276804465732e+00 -2.318130823881602e+00 -2.317978796685350e+00 -2.317820766785938e+00 -2.317656777785941e+00 + -2.317486872984025e+00 -2.317311095378236e+00 -2.317129487669164e+00 -2.316942092262829e+00 -2.316748951273513e+00 + -2.316550106526557e+00 -2.316345599561124e+00 -2.316135471632893e+00 -2.315919763716320e+00 -2.315698516507460e+00 + -2.315471770426942e+00 -2.315239565622576e+00 -2.315001941971922e+00 -2.314758939084826e+00 -2.314510596305920e+00 + -2.314256952717090e+00 -2.313998047139568e+00 -2.313733918136342e+00 -2.313464604014935e+00 -2.313190142829782e+00 + -2.312910572384565e+00 -2.312625930234513e+00 -2.312336253688678e+00 -2.312041579812182e+00 -2.311741945428170e+00 + -2.311437387119879e+00 -2.311127941233203e+00 -2.310813643878891e+00 -2.310494530934657e+00 -2.310170638047276e+00 + -2.309842000634667e+00 -2.309508653887929e+00 -2.309170632773183e+00 -2.308827972033339e+00 -2.308480706190472e+00 + -2.308128869547836e+00 -2.307772496191795e+00 -2.307411619993741e+00 -2.307046274611983e+00 -2.306676493493612e+00 + -2.306302309876231e+00 -2.305923756789481e+00 -2.305540867057213e+00 -2.305153673299357e+00 -2.304762207933692e+00 + -2.304366503177589e+00 -2.303966591049746e+00 -2.303562503371892e+00 -2.303154271770397e+00 -2.302741927677640e+00 + -2.302325502333937e+00 -2.301905026789309e+00 -2.301480531905097e+00 -2.301052048355563e+00 -2.300619606629470e+00 + -2.300183237031647e+00 -2.299742969684492e+00 -2.299298834529202e+00 -2.298850861327491e+00 -2.298399079663241e+00 + -2.297943518944003e+00 -2.297484208402453e+00 -2.297021177097839e+00 -2.296554453917422e+00 -2.296084067577878e+00 + -2.295610046626423e+00 -2.295132419442313e+00 -2.294651214238423e+00 -2.294166459062606e+00 -2.293678181799045e+00 + -2.293186410169582e+00 -2.292691171735040e+00 -2.292192493896510e+00 -2.291690403896431e+00 -2.291184928819864e+00 + -2.290676095596003e+00 -2.290163930999419e+00 -2.289648461651309e+00 -2.289129714020719e+00 -2.288607714425756e+00 + -2.288082489034790e+00 -2.287554063867464e+00 -2.287022464795797e+00 -2.286487717545603e+00 -2.285949847697653e+00 + -2.285408880688816e+00 -2.284864841813190e+00 -2.284317756223232e+00 -2.283767648930842e+00 -2.283214544808351e+00 + -2.282658468589461e+00 -2.282099444870565e+00 -2.281537498111839e+00 -2.280972652638302e+00 -2.280404932640851e+00 + -2.279834362177295e+00 -2.279260965173382e+00 -2.278684765423715e+00 -2.278105786592588e+00 -2.277524052215194e+00 + -2.276939585698652e+00 -2.276352410322994e+00 -2.275762549242122e+00 -2.275170025484755e+00 -2.274574861955383e+00 + -2.273977081435144e+00 -2.273376706582557e+00 -2.272773759934620e+00 -2.272168263907800e+00 -2.271560240798923e+00 + -2.270949712786074e+00 -2.270336701929474e+00 -2.269721230172357e+00 -2.269103319341808e+00 -2.268482991149421e+00 + -2.267860267192283e+00 -2.267235168953918e+00 -2.266607717805118e+00 -2.265977935004773e+00 -2.265345841700681e+00 + -2.264711458930368e+00 -2.264074807621871e+00 -2.263435908594351e+00 -2.262794782558966e+00 -2.262151450119762e+00 + -2.261505931774461e+00 -2.260858247915221e+00 -2.260208418829391e+00 -2.259556464700271e+00 -2.258902405607847e+00 + -2.258246261529381e+00 -2.257588052340147e+00 -2.256927797814314e+00 -2.256265517625659e+00 -2.255601231348283e+00 + -2.254934958457320e+00 -2.254266718329622e+00 -2.253596530244462e+00 -2.252924413384104e+00 -2.252250386834427e+00 + -2.251574469585767e+00 -2.250896680533593e+00 -2.250217038479171e+00 -2.249535562130213e+00 -2.248852270101532e+00 + -2.248167180915687e+00 -2.247480313003532e+00 -2.246791684704766e+00 -2.246101314268709e+00 -2.245409219854954e+00 + -2.244715419533983e+00 -2.244019931287772e+00 -2.243322773010398e+00 -2.242623962508636e+00 -2.241923517502507e+00 + -2.241221455625736e+00 -2.240517794426493e+00 -2.239812551367999e+00 -2.239105743829107e+00 -2.238397389104870e+00 + -2.237687504407096e+00 -2.236976106864919e+00 -2.236263213525310e+00 -2.235548841353499e+00 -2.234833007233646e+00 + -2.234115727969421e+00 -2.233397020284549e+00 -2.232676900823337e+00 -2.231955386151202e+00 -2.231232492755193e+00 + -2.230508237044484e+00 -2.229782635350765e+00 -2.229055703928828e+00 -2.228327458957150e+00 -2.227597916538390e+00 + -2.226867092699881e+00 -2.226135003394126e+00 -2.225401664499288e+00 -2.224667091819654e+00 -2.223931301086007e+00 + -2.223194307956140e+00 -2.222456128015421e+00 -2.221716776777257e+00 -2.220976269683556e+00 -2.220234622105197e+00 + -2.219491849342475e+00 -2.218747966625553e+00 -2.218002989114810e+00 -2.217256931901295e+00 -2.216509810007262e+00 + -2.215761638386622e+00 -2.215012431925369e+00 -2.214262205442008e+00 -2.213510973687992e+00 -2.212758751348133e+00 + -2.212005553040953e+00 -2.211251393319064e+00 -2.210496286669689e+00 -2.209740247515088e+00 -2.208983290212954e+00 + -2.208225429056820e+00 -2.207466678276468e+00 -2.206707052038315e+00 -2.205946564445748e+00 -2.205185229539463e+00 + -2.204423061297958e+00 -2.203660073637924e+00 -2.202896280414641e+00 -2.202131695422347e+00 -2.201366332394614e+00 + -2.200600205004720e+00 -2.199833326865986e+00 -2.199065711532052e+00 -2.198297372497344e+00 -2.197528323197469e+00 + -2.196758577009556e+00 -2.195988147252626e+00 -2.195217047187939e+00 -2.194445290019337e+00 -2.193672888893577e+00 + -2.192899856900580e+00 -2.192126207073854e+00 -2.191351952390872e+00 -2.190577105773411e+00 -2.189801680087880e+00 + -2.189025688145654e+00 -2.188249142703400e+00 -2.187472056463393e+00 -2.186694442073744e+00 -2.185916312128790e+00 + -2.185137679169449e+00 -2.184358555683546e+00 -2.183578954106126e+00 -2.182798886819760e+00 -2.182018366154860e+00 + -2.181237404389969e+00 -2.180456013751995e+00 -2.179674206416536e+00 -2.178891994508249e+00 -2.178109390101140e+00 + -2.177326405218863e+00 -2.176543051835017e+00 -2.175759341873431e+00 -2.174975287208445e+00 -2.174190899665144e+00 + -2.173406191019626e+00 -2.172621172999372e+00 -2.171835857283515e+00 -2.171050255503127e+00 -2.170264379241495e+00 + -2.169478240034389e+00 -2.168691849370340e+00 -2.167905218690847e+00 -2.167118359390624e+00 -2.166331282817957e+00 + -2.165544000274954e+00 -2.164756523017816e+00 -2.163968862257100e+00 -2.163181029157975e+00 -2.162393034840479e+00 + -2.161604890379725e+00 -2.160816606806120e+00 -2.160028195105691e+00 -2.159239666220349e+00 -2.158451031048124e+00 + -2.157662300443418e+00 -2.156873485217258e+00 -2.156084596137519e+00 -2.155295643929152e+00 -2.154506639274357e+00 + -2.153717592812890e+00 -2.152928515142323e+00 -2.152139416818280e+00 -2.151350308354652e+00 -2.150561200223841e+00 + -2.149772102856990e+00 -2.148983026644182e+00 -2.148193981934609e+00 -2.147404979036851e+00 -2.146616028219126e+00 + -2.145827139709514e+00 -2.145038323696169e+00 -2.144249590327540e+00 -2.143460949712591e+00 -2.142672411920996e+00 + -2.141883986983292e+00 -2.141095684891137e+00 -2.140307515597552e+00 -2.139519489017127e+00 -2.138731615026233e+00 + -2.137943903463224e+00 -2.137156364128644e+00 -2.136369006785423e+00 -2.135581841159012e+00 -2.134794876937625e+00 + -2.134008123772464e+00 -2.133221591277919e+00 -2.132435289031771e+00 -2.131649226575388e+00 -2.130863413413909e+00 + -2.130077859016437e+00 -2.129292572816182e+00 -2.128507564210652e+00 -2.127722842561890e+00 -2.126938417196665e+00 + -2.126154297406655e+00 -2.125370492448636e+00 -2.124587011544663e+00 -2.123803863882248e+00 -2.123021058614500e+00 + -2.122238604860293e+00 -2.121456511704498e+00 -2.120674788198162e+00 -2.119893443358685e+00 -2.119112486169999e+00 + -2.118331925582735e+00 -2.117551770514397e+00 -2.116772029849501e+00 -2.115992712439721e+00 -2.115213827104108e+00 + -2.114435382629267e+00 -2.113657387769519e+00 -2.112879851247078e+00 -2.112102781752208e+00 -2.111326187943385e+00 + -2.110550078447439e+00 -2.109774461859674e+00 -2.108999346744086e+00 -2.108224741633528e+00 -2.107450655029868e+00 + -2.106677095404151e+00 -2.105904071196752e+00 -2.105131590817535e+00 -2.104359662645981e+00 -2.103588295031309e+00 + -2.102817496292664e+00 -2.102047274719290e+00 -2.101277638570677e+00 -2.100508596076714e+00 -2.099740155437833e+00 + -2.098972324825156e+00 -2.098205112380644e+00 -2.097438526217175e+00 -2.096672574418735e+00 -2.095907265040586e+00 + -2.095142606109407e+00 -2.094378605623429e+00 -2.093615271552583e+00 -2.092852611838643e+00 -2.092090634395349e+00 + -2.091329347108516e+00 -2.090568757836169e+00 -2.089808874408728e+00 -2.089049704629143e+00 -2.088291256273022e+00 + -2.087533537088764e+00 -2.086776554797699e+00 -2.086020317094214e+00 -2.085264831645845e+00 -2.084510106093409e+00 + -2.083756148051177e+00 -2.083002965107001e+00 -2.082250564822440e+00 -2.081498954732894e+00 -2.080748142347719e+00 + -2.079998135150364e+00 -2.079248940598457e+00 -2.078500566123918e+00 -2.077753019133131e+00 -2.077006307007063e+00 + -2.076260437101383e+00 -2.075515416746592e+00 -2.074771253248141e+00 -2.074027953886544e+00 -2.073285525917480e+00 + -2.072543976571880e+00 -2.071803313056100e+00 -2.071063542552034e+00 -2.070324672217227e+00 -2.069586709185004e+00 + -2.068849660564566e+00 -2.068113533441121e+00 -2.067378334875964e+00 -2.066644071906579e+00 -2.065910751546769e+00 + -2.065178380786791e+00 -2.064446966593461e+00 -2.063716515910266e+00 -2.062987035657468e+00 -2.062258532732219e+00 + -2.061531014008653e+00 -2.060804486337964e+00 -2.060078956548535e+00 -2.059354431446072e+00 -2.058630917813696e+00 + -2.057908422412055e+00 -2.057186951979433e+00 -2.056466513231840e+00 -2.055747112863116e+00 -2.055028757544996e+00 + -2.054311453927238e+00 -2.053595208637742e+00 -2.052880028282651e+00 -2.052165919446444e+00 -2.051452888692046e+00 + -2.050740942560926e+00 -2.050030087573177e+00 -2.049320330227591e+00 -2.048611677001773e+00 -2.047904134352257e+00 + -2.047197708714598e+00 -2.046492406503472e+00 -2.045788234112772e+00 -2.045085197915699e+00 -2.044383304264857e+00 + -2.043682559492305e+00 -2.042982969909669e+00 -2.042284541808254e+00 -2.041587281459136e+00 -2.040891195113255e+00 + -2.040196289001502e+00 -2.039502569334813e+00 -2.038810042304255e+00 -2.038118714081095e+00 -2.037428590816866e+00 + -2.036739678643505e+00 -2.036051983673435e+00 -2.035365511999651e+00 -2.034680269695803e+00 -2.033996262816285e+00 + -2.033313497396324e+00 -2.032631979452039e+00 -2.031951714980517e+00 -2.031272709959916e+00 -2.030594970349565e+00 + -2.029918502090045e+00 -2.029243311103269e+00 -2.028569403292557e+00 -2.027896784542731e+00 -2.027225460720173e+00 + -2.026555437672887e+00 -2.025886721230608e+00 -2.025219317204886e+00 -2.024553231389171e+00 -2.023888469558886e+00 + -2.023225037471513e+00 -2.022562940866661e+00 -2.021902185466139e+00 -2.021242776974008e+00 -2.020584721076686e+00 + -2.019928023443025e+00 -2.019272689724395e+00 -2.018618725554759e+00 -2.017966136550744e+00 -2.017314928311718e+00 + -2.016665106419857e+00 -2.016016676440195e+00 -2.015369643920711e+00 -2.014724014392419e+00 -2.014079793369441e+00 + -2.013436986349081e+00 -2.012795598811893e+00 -2.012155636221751e+00 -2.011517104025927e+00 -2.010880007655117e+00 + -2.010244352523541e+00 -2.009610144029019e+00 -2.008977387553052e+00 -2.008346088460877e+00 -2.007716252101544e+00 + -2.007087883807985e+00 -2.006460988897077e+00 -2.005835572669687e+00 -2.005211640410741e+00 -2.004589197389321e+00 + -2.003968248858716e+00 -2.003348800056501e+00 -2.002730856204605e+00 -2.002114422509362e+00 -2.001499504161585e+00 + -2.000886106336611e+00 -2.000274234194366e+00 -1.999663892879436e+00 -1.999055087521146e+00 -1.998447823233624e+00 + -1.997842105115851e+00 -1.997237938251741e+00 -1.996635327710192e+00 -1.996034278545135e+00 -1.995434795795581e+00 + -1.994836884485715e+00 -1.994240549624950e+00 -1.993645796207996e+00 -1.993052629214916e+00 -1.992461053611186e+00 + -1.991871074347758e+00 -1.991282696361109e+00 -1.990695924573272e+00 -1.990110763891926e+00 -1.989527219210471e+00 + -1.988945295408069e+00 -1.988364997349702e+00 -1.987786329886241e+00 -1.987209297854499e+00 -1.986633906077278e+00 + -1.986060159363408e+00 -1.985488062507815e+00 -1.984917620291600e+00 -1.984348837482085e+00 -1.983781718832868e+00 + -1.983216269083883e+00 -1.982652492961452e+00 -1.982090395178336e+00 -1.981529980433766e+00 -1.980971253413516e+00 + -1.980414218789958e+00 -1.979858881222136e+00 -1.979305245355806e+00 -1.978753315823477e+00 -1.978203097244475e+00 + -1.977654594225015e+00 -1.977107811358184e+00 -1.976562753224058e+00 -1.976019424389725e+00 -1.975477829409343e+00 + -1.974937972824210e+00 -1.974399859162806e+00 -1.973863492940835e+00 -1.973328878661272e+00 -1.972796020814435e+00 + -1.972264923877971e+00 -1.971735592316963e+00 -1.971208030583991e+00 -1.970682243119160e+00 -1.970158234350139e+00 + -1.969636008692229e+00 -1.969115570548426e+00 -1.968596924309398e+00 -1.968080074353580e+00 -1.967565025047229e+00 + -1.967051780744475e+00 -1.966540345787341e+00 -1.966030724505812e+00 -1.965522921217900e+00 -1.965016940229659e+00 + -1.964512785835220e+00 -1.964010462316845e+00 -1.963509973944988e+00 -1.963011324978344e+00 -1.962514519663881e+00 + -1.962019562236897e+00 -1.961526456921067e+00 -1.961035207928480e+00 -1.960545819459659e+00 -1.960058295703655e+00 + -1.959572640838007e+00 -1.959088859028894e+00 -1.958606954431114e+00 -1.958126931188134e+00 -1.957648793432173e+00 + -1.957172545284190e+00 -1.956698190853962e+00 -1.956225734240072e+00 -1.955755179530033e+00 -1.955286530800259e+00 + -1.954819792116147e+00 -1.954354967532125e+00 -1.953892061091672e+00 -1.953431076827378e+00 -1.952972018760964e+00 + -1.952514890903317e+00 -1.952059697254547e+00 -1.951606441804024e+00 -1.951155128530414e+00 -1.950705761401745e+00 + -1.950258344375431e+00 -1.949812881398295e+00 -1.949369376406633e+00 -1.948927833326243e+00 -1.948488256072420e+00 + -1.948050648550061e+00 -1.947615014653694e+00 -1.947181358267495e+00 -1.946749683265333e+00 -1.946319993510820e+00 + -1.945892292857357e+00 -1.945466585148108e+00 -1.945042874216096e+00 -1.944621163884235e+00 -1.944201457965353e+00 + -1.943783760262237e+00 -1.943368074567676e+00 -1.942954404664505e+00 -1.942542754325630e+00 -1.942133127314037e+00 + -1.941725527382840e+00 -1.941319958275368e+00 -1.940916423725134e+00 -1.940514927455907e+00 -1.940115473181760e+00 + -1.939718064607074e+00 -1.939322705426601e+00 -1.938929399325471e+00 -1.938538149979232e+00 -1.938148961053886e+00 + -1.937761836205931e+00 -1.937376779082418e+00 -1.936993793320949e+00 -1.936612882549719e+00 -1.936234050387590e+00 + -1.935857300444053e+00 -1.935482636319296e+00 -1.935110061604254e+00 -1.934739579880611e+00 -1.934371194720868e+00 + -1.934004909688356e+00 -1.933640728337267e+00 -1.933278654212724e+00 -1.932918690850745e+00 -1.932560841778316e+00 + -1.932205110513409e+00 -1.931851500565032e+00 -1.931500015433260e+00 -1.931150658609253e+00 -1.930803433575301e+00 + -1.930458343804859e+00 -1.930115392762557e+00 -1.929774583904244e+00 -1.929435920677002e+00 -1.929099406519205e+00 + -1.928765044860532e+00 -1.928432839122003e+00 -1.928102792716032e+00 -1.927774909046428e+00 -1.927449191508423e+00 + -1.927125643488726e+00 -1.926804268365502e+00 -1.926485069508455e+00 -1.926168050278857e+00 -1.925853214029559e+00 + -1.925540564105015e+00 -1.925230103841328e+00 -1.924921836566286e+00 -1.924615765599347e+00 -1.924311894251707e+00 + -1.924010225826315e+00 -1.923710763617894e+00 -1.923413510913005e+00 -1.923118470990058e+00 -1.922825647119304e+00 + -1.922535042562943e+00 -1.922246660575068e+00 -1.921960504401699e+00 -1.921676577280871e+00 -1.921394882442637e+00 + -1.921115423109069e+00 -1.920838202494316e+00 -1.920563223804625e+00 -1.920290490238364e+00 -1.920020004986052e+00 + -1.919751771230355e+00 -1.919485792146149e+00 -1.919222070900552e+00 -1.918960610652924e+00 -1.918701414554912e+00 + -1.918444485750482e+00 -1.918189827375925e+00 -1.917937442559900e+00 -1.917687334423423e+00 -1.917439506079945e+00 + -1.917193960635344e+00 -1.916950701187958e+00 -1.916709730828633e+00 -1.916471052640719e+00 -1.916234669700108e+00 + -1.916000585075272e+00 -1.915768801827247e+00 -1.915539323009678e+00 -1.915312151668863e+00 -1.915087290843769e+00 + -1.914864743566054e+00 -1.914644512860088e+00 -1.914426601742979e+00 -1.914211013224609e+00 -1.913997750307632e+00 + -1.913786815987506e+00 -1.913578213252525e+00 -1.913371945083856e+00 -1.913168014455549e+00 -1.912966424334566e+00 + -1.912767177680794e+00 -1.912570277447078e+00 -1.912375726579230e+00 -1.912183528016060e+00 -1.911993684689408e+00 + -1.911806199524162e+00 -1.911621075438288e+00 -1.911438315342840e+00 -1.911257922141980e+00 -1.911079898733053e+00 + -1.910904248006509e+00 -1.910730972846012e+00 -1.910560076128402e+00 -1.910391560723777e+00 -1.910225429495489e+00 + -1.910061685300147e+00 -1.909900330987673e+00 -1.909741369401320e+00 -1.909584803377642e+00 -1.909430635746571e+00 + -1.909278869331415e+00 -1.909129506948898e+00 -1.908982551409168e+00 -1.908838005515824e+00 -1.908695872065935e+00 + -1.908556153850054e+00 -1.908418853652264e+00 -1.908283974250158e+00 -1.908151518414877e+00 -1.908021488911154e+00 + -1.907893888497317e+00 -1.907768719925307e+00 -1.907645985940704e+00 -1.907525689282748e+00 -1.907407832684373e+00 + -1.907292418872173e+00 -1.907179450566477e+00 -1.907068930481352e+00 -1.906960861324634e+00 -1.906855245797937e+00 + -1.906752086596660e+00 -1.906651386410043e+00 -1.906553147921180e+00 -1.906457373806959e+00 -1.906364066738204e+00 + -1.906273229379610e+00 -1.906184864389786e+00 -1.906098974421304e+00 -1.906015562120683e+00 -1.905934630128402e+00 + -1.905856181078966e+00 -1.905780217600874e+00 -1.905706742316644e+00 -1.905635757842851e+00 -1.905567266790150e+00 + -1.905501271763290e+00 -1.905437775361123e+00 -1.905376780176636e+00 -1.905318288796963e+00 -1.905262303803381e+00 + -1.905208827771360e+00 -1.905157863270561e+00 -1.905109412864876e+00 -1.905063479112441e+00 -1.905020064565640e+00 + -1.904979171771119e+00 -1.904940803269836e+00 -1.904904961597064e+00 -1.904871649282353e+00 -1.904840868849653e+00 + -1.904812622817242e+00 -1.904786913697784e+00 -1.904763743998368e+00 -1.904743116220462e+00 -1.904725032859995e+00 + -1.904709496407343e+00 -1.904696509347317e+00 -1.904686074159241e+00 -1.904678193316926e+00 -1.904672869288709e+00 + -1.904670104537476e+00 -1.904669901520642e+00 -1.904672262690203e+00 -1.904677190492756e+00 -1.904684687369470e+00 + -1.904694755756145e+00 -1.904707398083221e+00 -1.904722616775778e+00 -1.904740414253578e+00 -1.904760792931083e+00 + -1.904783755217430e+00 -1.904809303516487e+00 -1.904837440226858e+00 -1.904868167741889e+00 -1.904901488449690e+00 + -1.904937404733147e+00 -1.904975918969961e+00 -1.905017033532655e+00 -1.905060750788567e+00 -1.905107073099886e+00 + -1.905156002823665e+00 -1.905207542311811e+00 -1.905261693911145e+00 -1.905318459963395e+00 -1.905377842805202e+00 + -1.905439844768158e+00 -1.905504468178814e+00 -1.905571715358695e+00 -1.905641588624277e+00 -1.905714090287067e+00 + -1.905789222653563e+00 -1.905866988025308e+00 -1.905947388698898e+00 -1.906030426965976e+00 -1.906116105113269e+00 + -1.906204425422599e+00 -1.906295390170874e+00 -1.906389001630132e+00 -1.906485262067524e+00 -1.906584173745377e+00 + -1.906685738921180e+00 -1.906789959847581e+00 -1.906896838772432e+00 -1.907006377938798e+00 -1.907118579584959e+00 + -1.907233445944414e+00 -1.907350979245921e+00 -1.907471181713509e+00 -1.907594055566470e+00 -1.907719603019391e+00 + -1.907847826282189e+00 -1.907978727560068e+00 -1.908112309053585e+00 -1.908248572958617e+00 -1.908387521466432e+00 + -1.908529156763658e+00 -1.908673481032295e+00 -1.908820496449771e+00 -1.908970205188938e+00 -1.909122609418036e+00 + -1.909277711300791e+00 -1.909435512996346e+00 -1.909596016659329e+00 -1.909759224439852e+00 -1.909925138483517e+00 + -1.910093760931440e+00 -1.910265093920258e+00 -1.910439139582137e+00 -1.910615900044806e+00 -1.910795377431546e+00 + -1.910977573861199e+00 -1.911162491448207e+00 -1.911350132302599e+00 -1.911540498530023e+00 -1.911733592231773e+00 + -1.911929415504758e+00 -1.912127970441545e+00 -1.912329259130360e+00 -1.912533283655105e+00 -1.912740046095361e+00 + -1.912949548526419e+00 -1.913161793019291e+00 -1.913376781640710e+00 -1.913594516453150e+00 -1.913814999514819e+00 + -1.914038232879707e+00 -1.914264218597559e+00 -1.914492958713919e+00 -1.914724455270128e+00 -1.914958710303334e+00 + -1.915195725846515e+00 -1.915435503928488e+00 -1.915678046573908e+00 -1.915923355803288e+00 -1.916171433633011e+00 + -1.916422282075347e+00 -1.916675903138448e+00 -1.916932298826387e+00 -1.917191471139156e+00 -1.917453422072669e+00 + -1.917718153618788e+00 -1.917985667765312e+00 -1.918255966496023e+00 -1.918529051790657e+00 -1.918804925624940e+00 + -1.919083589970620e+00 -1.919365046795433e+00 -1.919649298063134e+00 -1.919936345733542e+00 -1.920226191762469e+00 + -1.920518838101830e+00 -1.920814286699556e+00 -1.921112539499689e+00 -1.921413598442361e+00 -1.921717465463779e+00 + -1.922024142496281e+00 -1.922333631468323e+00 -1.922645934304479e+00 -1.922961052925486e+00 -1.923278989248213e+00 + -1.923599745185685e+00 -1.923923322647128e+00 -1.924249723537959e+00 -1.924578949759761e+00 -1.924911003210338e+00 + -1.925245885783729e+00 -1.925583599370180e+00 -1.925924145856155e+00 -1.926267527124406e+00 -1.926613745053933e+00 + -1.926962801519989e+00 -1.927314698394121e+00 -1.927669437544174e+00 -1.928027020834292e+00 -1.928387450124911e+00 + -1.928750727272798e+00 -1.929116854131047e+00 -1.929485832549102e+00 -1.929857664372757e+00 -1.930232351444159e+00 + -1.930609895601848e+00 -1.930990298680730e+00 -1.931373562512105e+00 -1.931759688923653e+00 -1.932148679739498e+00 + -1.932540536780164e+00 -1.932935261862612e+00 -1.933332856800268e+00 -1.933733323402977e+00 -1.934136663477046e+00 + -1.934542878825268e+00 -1.934951971246913e+00 -1.935363942537724e+00 -1.935778794489949e+00 -1.936196528892353e+00 + -1.936617147530215e+00 -1.937040652185344e+00 -1.937467044636094e+00 -1.937896326657355e+00 -1.938328500020547e+00 + -1.938763566493703e+00 -1.939201527841392e+00 -1.939642385824780e+00 -1.940086142201642e+00 -1.940532798726324e+00 + -1.940982357149826e+00 -1.941434819219729e+00 -1.941890186680242e+00 -1.942348461272251e+00 -1.942809644733253e+00 + -1.943273738797405e+00 -1.943740745195556e+00 -1.944210665655209e+00 -1.944683501900552e+00 -1.945159255652477e+00 + -1.945637928628570e+00 -1.946119522543112e+00 -1.946604039107125e+00 -1.947091480028345e+00 -1.947581847011245e+00 + -1.948075141757065e+00 -1.948571365963784e+00 -1.949070521326131e+00 -1.949572609535622e+00 -1.950077632280552e+00 + -1.950585591245993e+00 -1.951096488113822e+00 -1.951610324562725e+00 -1.952127102268194e+00 -1.952646822902561e+00 + -1.953169488134975e+00 -1.953695099631423e+00 -1.954223659054738e+00 -1.954755168064616e+00 -1.955289628317605e+00 + -1.955827041467136e+00 -1.956367409163530e+00 -1.956910733053979e+00 -1.957457014782601e+00 -1.958006255990387e+00 + -1.958558458315249e+00 -1.959113623392025e+00 -1.959671752852486e+00 -1.960232848325334e+00 -1.960796911436222e+00 + -1.961363943807768e+00 -1.961933947059529e+00 -1.962506922808060e+00 -1.963082872666857e+00 -1.963661798246433e+00 + -1.964243701154278e+00 -1.964828582994884e+00 -1.965416445369769e+00 -1.966007289877443e+00 -1.966601118113475e+00 + -1.967197931670450e+00 -1.967797732137961e+00 -1.968400521102687e+00 -1.969006300148362e+00 -1.969615070855768e+00 + -1.970226834802765e+00 -1.970841593564292e+00 -1.971459348712371e+00 -1.972080101816131e+00 -1.972703854441789e+00 + -1.973330608152666e+00 -1.973960364509203e+00 -1.974593125068965e+00 -1.975228891386654e+00 -1.975867665014117e+00 + -1.976509447500335e+00 -1.977154240391441e+00 -1.977802045230730e+00 -1.978452863558668e+00 -1.979106696912898e+00 + -1.979763546828228e+00 -1.980423414836665e+00 -1.981086302467437e+00 -1.981752211246953e+00 -1.982421142698831e+00 + -1.983093098343921e+00 -1.983768079700265e+00 -1.984446088283173e+00 -1.985127125605189e+00 -1.985811193176090e+00 + -1.986498292502919e+00 -1.987188425089969e+00 -1.987881592438806e+00 -1.988577796048281e+00 -1.989277037414505e+00 + -1.989979318030885e+00 -1.990684639388122e+00 -1.991393002974224e+00 -1.992104410274516e+00 -1.992818862771611e+00 + -1.993536361945483e+00 -1.994256909273415e+00 -1.994980506230001e+00 -1.995707154287215e+00 -1.996436854914364e+00 + -1.997169609578102e+00 -1.997905419742475e+00 -1.998644286868872e+00 -1.999386212416074e+00 -2.000131197840234e+00 + -2.000879244594888e+00 -2.001630354130973e+00 -2.002384527896842e+00 -2.003141767338240e+00 -2.003902073898327e+00 + -2.004665449017706e+00 -2.005431894134382e+00 -2.006201410683811e+00 -2.006974000098877e+00 -2.007749663809916e+00 + -2.008528403244723e+00 -2.009310219828544e+00 -2.010095114984098e+00 -2.010883090131586e+00 -2.011674146688665e+00 + -2.012468286070491e+00 -2.013265509689707e+00 -2.014065818956456e+00 -2.014869215278391e+00 -2.015675700060665e+00 + -2.016485274705942e+00 -2.017297940614418e+00 -2.018113699183827e+00 -2.018932551809423e+00 -2.019754499883996e+00 + -2.020579544797892e+00 -2.021407687939015e+00 -2.022238930692813e+00 -2.023073274442305e+00 -2.023910720568091e+00 + -2.024751270448330e+00 -2.025594925458782e+00 -2.026441686972782e+00 -2.027291556361254e+00 -2.028144534992740e+00 + -2.029000624233381e+00 -2.029859825446918e+00 -2.030722139994724e+00 -2.031587569235807e+00 -2.032456114526781e+00 + -2.033327777221901e+00 -2.034202558673072e+00 -2.035080460229832e+00 -2.035961483239379e+00 -2.036845629046574e+00 + -2.037732898993935e+00 -2.038623294421658e+00 -2.039516816667612e+00 -2.040413467067337e+00 -2.041313246954071e+00 + -2.042216157658735e+00 -2.043122200509951e+00 -2.044031376834042e+00 -2.044943687955049e+00 -2.045859135194732e+00 + -2.046777719872542e+00 -2.047699443305691e+00 -2.048624306809098e+00 -2.049552311695423e+00 -2.050483459275068e+00 + -2.051417750856190e+00 -2.052355187744693e+00 -2.053295771244233e+00 -2.054239502656250e+00 -2.055186383279931e+00 + -2.056136414412242e+00 -2.057089597347935e+00 -2.058045933379546e+00 -2.059005423797393e+00 -2.059968069889587e+00 + -2.060933872942064e+00 -2.061902834238549e+00 -2.062874955060581e+00 -2.063850236687505e+00 -2.064828680396494e+00 + -2.065810287462551e+00 -2.066795059158510e+00 -2.067782996755041e+00 -2.068774101520662e+00 -2.069768374721733e+00 + -2.070765817622481e+00 -2.071766431484957e+00 -2.072770217569099e+00 -2.073777177132705e+00 -2.074787311431451e+00 + -2.075800621718894e+00 -2.076817109246462e+00 -2.077836775263488e+00 -2.078859621017187e+00 -2.079885647752666e+00 + -2.080914856712937e+00 -2.081947249138932e+00 -2.082982826269484e+00 -2.084021589341351e+00 -2.085063539589212e+00 + -2.086108678245658e+00 -2.087157006541239e+00 -2.088208525704420e+00 -2.089263236961625e+00 -2.090321141537214e+00 + -2.091382240653492e+00 -2.092446535530729e+00 -2.093514027387160e+00 -2.094584717438983e+00 -2.095658606900367e+00 + -2.096735696983457e+00 -2.097815988898372e+00 -2.098899483853224e+00 -2.099986183054104e+00 -2.101076087705096e+00 + -2.102169199008301e+00 -2.103265518163822e+00 -2.104365046369742e+00 -2.105467784822191e+00 -2.106573734715299e+00 + -2.107682897241208e+00 -2.108795273590104e+00 -2.109910864950205e+00 -2.111029672507756e+00 -2.112151697447043e+00 + -2.113276940950394e+00 -2.114405404198207e+00 -2.115537088368898e+00 -2.116671994638973e+00 -2.117810124182985e+00 + -2.118951478173553e+00 -2.120096057781377e+00 -2.121243864175221e+00 -2.122394898521957e+00 -2.123549161986514e+00 + -2.124706655731910e+00 -2.125867380919262e+00 -2.127031338707800e+00 -2.128198530254842e+00 -2.129368956715802e+00 + -2.130542619244231e+00 -2.131719518991788e+00 -2.132899657108238e+00 -2.134083034741480e+00 -2.135269653037541e+00 + -2.136459513140577e+00 -2.137652616192882e+00 -2.138848963334900e+00 -2.140048555705206e+00 -2.141251394440532e+00 + -2.142457480675770e+00 -2.143666815543961e+00 -2.144879400176309e+00 -2.146095235702186e+00 -2.147314323249125e+00 + -2.148536663942845e+00 -2.149762258907250e+00 -2.150991109264413e+00 -2.152223216134612e+00 -2.153458580636290e+00 + -2.154697203886097e+00 -2.155939086998886e+00 -2.157184231087713e+00 -2.158432637263842e+00 -2.159684306636743e+00 + -2.160939240314096e+00 -2.162197439401822e+00 -2.163458905004050e+00 -2.164723638223133e+00 -2.165991640159662e+00 + -2.167262911912465e+00 -2.168537454578604e+00 -2.169815269253381e+00 -2.171096357030366e+00 -2.172380719001362e+00 + -2.173668356256419e+00 -2.174959269883864e+00 -2.176253460970285e+00 -2.177550930600524e+00 -2.178851679857703e+00 + -2.180155709823218e+00 -2.181463021576747e+00 -2.182773616196250e+00 -2.184087494757944e+00 -2.185404658336391e+00 + -2.186725108004397e+00 -2.188048844833086e+00 -2.189375869891886e+00 -2.190706184248512e+00 -2.192039788969014e+00 + -2.193376685117749e+00 -2.194716873757371e+00 -2.196060355948863e+00 -2.197407132751541e+00 -2.198757205223044e+00 + -2.200110574419331e+00 -2.201467241394695e+00 -2.202827207201792e+00 -2.204190472891608e+00 -2.205557039513467e+00 + -2.206926908115037e+00 -2.208300079742360e+00 -2.209676555439819e+00 -2.211056336250151e+00 -2.212439423214473e+00 + -2.213825817372276e+00 -2.215215519761395e+00 -2.216608531418069e+00 -2.218004853376888e+00 -2.219404486670832e+00 + -2.220807432331276e+00 -2.222213691387983e+00 -2.223623264869098e+00 -2.225036153801162e+00 -2.226452359209121e+00 + -2.227871882116331e+00 -2.229294723544551e+00 -2.230720884513931e+00 -2.232150366043039e+00 -2.233583169148890e+00 + -2.235019294846892e+00 -2.236458744150863e+00 -2.237901518073101e+00 -2.239347617624281e+00 -2.240797043813529e+00 + -2.242249797648420e+00 -2.243705880134952e+00 -2.245165292277574e+00 -2.246628035079188e+00 -2.248094109541138e+00 + -2.249563516663224e+00 -2.251036257443719e+00 -2.252512332879331e+00 -2.253991743965241e+00 -2.255474491695112e+00 + -2.256960577061058e+00 -2.258450001053665e+00 -2.259942764662015e+00 -2.261438868873671e+00 -2.262938314674659e+00 + -2.264441103049500e+00 -2.265947234981217e+00 -2.267456711451307e+00 -2.268969533439785e+00 -2.270485701925157e+00 + -2.272005217884411e+00 -2.273528082293070e+00 -2.275054296125177e+00 -2.276583860353244e+00 -2.278116775948335e+00 + -2.279653043880010e+00 -2.281192665116365e+00 -2.282735640624031e+00 -2.284281971368139e+00 -2.285831658312368e+00 + -2.287384702418949e+00 -2.288941104648619e+00 -2.290500865960664e+00 -2.292063987312940e+00 -2.293630469661820e+00 + -2.295200313962230e+00 -2.296773521167668e+00 -2.298350092230174e+00 -2.299930028100345e+00 -2.301513329727359e+00 + -2.303099998058946e+00 -2.304690034041399e+00 -2.306283438619591e+00 -2.307880212736968e+00 -2.309480357335545e+00 + -2.311083873355932e+00 -2.312690761737336e+00 -2.314301023417510e+00 -2.315914659332828e+00 -2.317531670418241e+00 + -2.319152057607297e+00 -2.320775821832151e+00 -2.322402964023559e+00 -2.324033485110876e+00 -2.325667386022068e+00 + -2.327304667683706e+00 -2.328945331020975e+00 -2.330589376957682e+00 -2.332236806416253e+00 -2.333887620317718e+00 + -2.335541819581750e+00 -2.337199405126654e+00 -2.338860377869350e+00 -2.340524738725405e+00 -2.342192488609012e+00 + -2.343863628432999e+00 -2.345538159108850e+00 -2.347216081546682e+00 -2.348897396655259e+00 -2.350582105342006e+00 + -2.352270208513006e+00 -2.353961707072973e+00 -2.355656601925300e+00 -2.357354893972039e+00 -2.359056584113890e+00 + -2.360761673250241e+00 -2.362470162279137e+00 -2.364182052097298e+00 -2.365897343600136e+00 -2.367616037681701e+00 + -2.369338135234779e+00 -2.371063637150792e+00 -2.372792544319862e+00 -2.374524857630810e+00 -2.376260577971137e+00 + -2.377999706227046e+00 -2.379742243283432e+00 -2.381488190023890e+00 -2.383237547330728e+00 -2.384990316084951e+00 + -2.386746497166257e+00 -2.388506091453074e+00 -2.390269099822539e+00 -2.392035523150495e+00 -2.393805362311517e+00 + -2.395578618178898e+00 -2.397355291624653e+00 -2.399135383519508e+00 -2.400918894732937e+00 -2.402705826133134e+00 + -2.404496178587036e+00 -2.406289952960319e+00 -2.408087150117385e+00 -2.409887770921378e+00 -2.411691816234196e+00 + -2.413499286916482e+00 -2.415310183827637e+00 -2.417124507825783e+00 -2.418942259767817e+00 -2.420763440509397e+00 + -2.422588050904931e+00 -2.424416091807607e+00 -2.426247564069357e+00 -2.428082468540882e+00 -2.429920806071661e+00 + -2.431762577509934e+00 -2.433607783702720e+00 -2.435456425495825e+00 -2.437308503733829e+00 -2.439164019260086e+00 + -2.441022972916743e+00 -2.442885365544724e+00 -2.444751197983751e+00 -2.446620471072336e+00 -2.448493185647783e+00 + -2.450369342546193e+00 -2.452248942602461e+00 -2.454131986650292e+00 -2.456018475522207e+00 -2.457908410049500e+00 + -2.459801791062287e+00 -2.461698619389507e+00 -2.463598895858909e+00 -2.465502621297043e+00 -2.467409796529283e+00 + -2.469320422379833e+00 -2.471234499671722e+00 -2.473152029226791e+00 -2.475073011865701e+00 -2.476997448407970e+00 + -2.478925339671929e+00 -2.480856686474743e+00 -2.482791489632421e+00 -2.484729749959804e+00 -2.486671468270591e+00 + -2.488616645377308e+00 -2.490565282091325e+00 -2.492517379222876e+00 -2.494472937581027e+00 -2.496431957973708e+00 + -2.498394441207708e+00 -2.500360388088660e+00 -2.502329799421071e+00 -2.504302676008301e+00 -2.506279018652585e+00 + -2.508258828155011e+00 -2.510242105315529e+00 -2.512228850932978e+00 -2.514219065805072e+00 -2.516212750728384e+00 + -2.518209906498383e+00 -2.520210533909395e+00 -2.522214633754649e+00 -2.524222206826239e+00 -2.526233253915163e+00 + -2.528247775811304e+00 -2.530265773303430e+00 -2.532287247179208e+00 -2.534312198225181e+00 -2.536340627226823e+00 + -2.538372534968483e+00 -2.540407922233424e+00 -2.542446789803795e+00 -2.544489138460668e+00 -2.546534968984014e+00 + -2.548584282152714e+00 -2.550637078744586e+00 -2.552693359536329e+00 -2.554753125303561e+00 -2.556816376820847e+00 + -2.558883114861645e+00 -2.560953340198338e+00 -2.563027053602257e+00 -2.565104255843642e+00 -2.567184947691652e+00 + -2.569269129914397e+00 -2.571356803278927e+00 -2.573447968551196e+00 -2.575542626496120e+00 -2.577640777877541e+00 + -2.579742423458259e+00 -2.581847564000013e+00 -2.583956200263457e+00 -2.586068333008253e+00 -2.588183962992953e+00 + -2.590303090975103e+00 -2.592425717711169e+00 -2.594551843956599e+00 -2.596681470465796e+00 -2.598814597992102e+00 + -2.600951227287843e+00 -2.603091359104302e+00 -2.605234994191735e+00 -2.607382133299347e+00 -2.609532777175321e+00 + -2.611686926566822e+00 -2.613844582219981e+00 -2.616005744879901e+00 -2.618170415290673e+00 -2.620338594195372e+00 + -2.622510282336022e+00 -2.624685480453659e+00 -2.626864189288318e+00 -2.629046409578982e+00 -2.631232142063638e+00 + -2.633421387479294e+00 -2.635614146561922e+00 -2.637810420046472e+00 -2.640010208666940e+00 -2.642213513156286e+00 + -2.644420334246481e+00 -2.646630672668501e+00 -2.648844529152313e+00 -2.651061904426902e+00 -2.653282799220275e+00 + -2.655507214259428e+00 -2.657735150270368e+00 -2.659966607978148e+00 -2.662201588106788e+00 -2.664440091379368e+00 + -2.666682118517971e+00 -2.668927670243695e+00 -2.671176747276679e+00 -2.673429350336075e+00 -2.675685480140054e+00 + -2.677945137405846e+00 -2.680208322849678e+00 -2.682475037186829e+00 -2.684745281131615e+00 -2.687019055397374e+00 + -2.689296360696487e+00 -2.691577197740385e+00 -2.693861567239533e+00 -2.696149469903437e+00 -2.698440906440654e+00 + -2.700735877558792e+00 -2.703034383964495e+00 -2.705336426363465e+00 -2.707642005460460e+00 -2.709951121959278e+00 + -2.712263776562800e+00 -2.714579969972948e+00 -2.716899702890708e+00 -2.719222976016107e+00 -2.721549790048258e+00 + -2.723880145685348e+00 -2.726214043624607e+00 -2.728551484562331e+00 -2.730892469193915e+00 -2.733236998213813e+00 + -2.735585072315534e+00 -2.737936692191682e+00 -2.740291858533935e+00 -2.742650572033042e+00 -2.745012833378841e+00 + -2.747378643260263e+00 -2.749748002365299e+00 -2.752120911381043e+00 -2.754497370993660e+00 -2.756877381888414e+00 + -2.759260944749675e+00 -2.761648060260888e+00 -2.764038729104580e+00 -2.766432951962391e+00 -2.768830729515078e+00 + -2.771232062442445e+00 -2.773636951423451e+00 -2.776045397136128e+00 -2.778457400257615e+00 -2.780872961464151e+00 + -2.783292081431098e+00 -2.785714760832935e+00 -2.788141000343215e+00 -2.790570800634642e+00 -2.793004162379015e+00 + -2.795441086247242e+00 -2.797881572909360e+00 -2.800325623034530e+00 -2.802773237291023e+00 -2.805224416346235e+00 + -2.807679160866687e+00 -2.810137471518016e+00 -2.812599348965023e+00 -2.815064793871577e+00 -2.817533806900720e+00 + -2.820006388714628e+00 -2.822482539974584e+00 -2.824962261341016e+00 -2.827445553473503e+00 -2.829932417030747e+00 + -2.832422852670605e+00 -2.834916861050044e+00 -2.837414442825209e+00 -2.839915598651381e+00 -2.842420329182965e+00 + -2.844928635073532e+00 -2.847440516975808e+00 -2.849955975541651e+00 -2.852475011422093e+00 -2.854997625267306e+00 + -2.857523817726611e+00 -2.860053589448496e+00 -2.862586941080613e+00 -2.865123873269764e+00 -2.867664386661910e+00 + -2.870208481902185e+00 -2.872756159634881e+00 -2.875307420503462e+00 -2.877862265150549e+00 -2.880420694217936e+00 + -2.882982708346586e+00 -2.885548308176642e+00 -2.888117494347429e+00 -2.890690267497413e+00 -2.893266628264269e+00 + -2.895846577284838e+00 -2.898430115195134e+00 -2.901017242630361e+00 -2.903607960224904e+00 -2.906202268612328e+00 + -2.908800168425389e+00 -2.911401660296030e+00 -2.914006744855381e+00 -2.916615422733749e+00 -2.919227694560644e+00 + -2.921843560964770e+00 -2.924463022574029e+00 -2.927086080015509e+00 -2.929712733915490e+00 -2.932342984899474e+00 + -2.934976833592133e+00 -2.937614280617363e+00 -2.940255326598256e+00 -2.942899972157098e+00 -2.945548217915389e+00 + -2.948200064493845e+00 -2.950855512512379e+00 -2.953514562590114e+00 -2.956177215345383e+00 -2.958843471395737e+00 + -2.961513331357950e+00 -2.964186795847982e+00 -2.966863865481042e+00 -2.969544540871538e+00 -2.972228822633096e+00 + -2.974916711378592e+00 -2.977608207720079e+00 -2.980303312268865e+00 -2.983002025635479e+00 -2.985704348429672e+00 + -2.988410281260423e+00 -2.991119824735941e+00 -2.993832979463660e+00 -2.996549746050248e+00 -2.999270125101630e+00 + -3.001994117222935e+00 -3.004721723018531e+00 -3.007452943092040e+00 -3.010187778046309e+00 -3.012926228483428e+00 + -3.015668295004735e+00 -3.018413978210801e+00 -3.021163278701453e+00 -3.023916197075749e+00 -3.026672733932000e+00 + -3.029432889867773e+00 -3.032196665479876e+00 -3.034964061364365e+00 -3.037735078116557e+00 -3.040509716331012e+00 + -3.043287976601558e+00 -3.046069859521268e+00 -3.048855365682475e+00 -3.051644495676761e+00 -3.054437250094994e+00 + -3.057233629527281e+00 -3.060033634562990e+00 -3.062837265790776e+00 -3.065644523798526e+00 -3.068455409173430e+00 + -3.071269922501915e+00 -3.074088064369679e+00 -3.076909835361707e+00 -3.079735236062258e+00 -3.082564267054844e+00 + -3.085396928922253e+00 -3.088233222246566e+00 -3.091073147609129e+00 -3.093916705590559e+00 -3.096763896770764e+00 + -3.099614721728937e+00 -3.102469181043534e+00 -3.105327275292300e+00 -3.108189005052278e+00 -3.111054370899776e+00 + -3.113923373410397e+00 -3.116796013159040e+00 -3.119672290719892e+00 -3.122552206666409e+00 -3.125435761571350e+00 + -3.128322956006786e+00 -3.131213790544057e+00 -3.134108265753802e+00 -3.137006382205972e+00 -3.139908140469793e+00 + -3.142813541113813e+00 -3.145722584705857e+00 -3.148635271813065e+00 -3.151551603001882e+00 -3.154471578838045e+00 + -3.157395199886599e+00 -3.160322466711910e+00 -3.163253379877628e+00 -3.166187939946727e+00 -3.169126147481488e+00 + -3.172068003043496e+00 -3.175013507193647e+00 -3.177962660492161e+00 -3.180915463498569e+00 -3.183871916771706e+00 + -3.186832020869740e+00 -3.189795776350154e+00 -3.192763183769739e+00 -3.195734243684608e+00 -3.198708956650200e+00 + -3.201687323221279e+00 -3.204669343951928e+00 -3.207655019395554e+00 -3.210644350104894e+00 -3.213637336632021e+00 + -3.216633979528310e+00 -3.219634279344477e+00 -3.222638236630583e+00 -3.225645851936011e+00 -3.228657125809458e+00 + -3.231672058798984e+00 -3.234690651451981e+00 -3.237712904315154e+00 -3.240738817934559e+00 -3.243768392855589e+00 + -3.246801629622988e+00 -3.249838528780826e+00 -3.252879090872508e+00 -3.255923316440811e+00 -3.258971206027838e+00 + -3.262022760175028e+00 -3.265077979423168e+00 -3.268136864312412e+00 -3.271199415382246e+00 -3.274265633171505e+00 + -3.277335518218391e+00 -3.280409071060429e+00 -3.283486292234524e+00 -3.286567182276921e+00 -3.289651741723230e+00 + -3.292739971108408e+00 -3.295831870966755e+00 -3.298927441831955e+00 -3.302026684237054e+00 -3.305129598714428e+00 + -3.308236185795848e+00 -3.311346446012412e+00 -3.314460379894625e+00 -3.317577987972316e+00 -3.320699270774699e+00 + -3.323824228830359e+00 -3.326952862667231e+00 -3.330085172812642e+00 -3.333221159793278e+00 -3.336360824135186e+00 + -3.339504166363799e+00 -3.342651187003908e+00 -3.345801886579703e+00 -3.348956265614729e+00 -3.352114324631895e+00 + -3.355276064153538e+00 -3.358441484701320e+00 -3.361610586796302e+00 -3.364783370958925e+00 -3.367959837709023e+00 + -3.371139987565798e+00 -3.374323821047826e+00 -3.377511338673083e+00 -3.380702540958947e+00 -3.383897428422154e+00 + -3.387096001578831e+00 -3.390298260944501e+00 -3.393504207034073e+00 -3.396713840361855e+00 -3.399927161441538e+00 + -3.403144170786206e+00 -3.406364868908343e+00 -3.409589256319812e+00 -3.412817333531899e+00 -3.416049101055259e+00 + -3.419284559399956e+00 -3.422523709075449e+00 -3.425766550590609e+00 -3.429013084453696e+00 -3.432263311172365e+00 + -3.435517231253697e+00 -3.438774845204159e+00 -3.442036153529609e+00 -3.445301156735346e+00 -3.448569855326046e+00 + -3.451842249805807e+00 -3.455118340678133e+00 -3.458398128445935e+00 -3.461681613611535e+00 -3.464968796676661e+00 + -3.468259678142466e+00 -3.471554258509502e+00 -3.474852538277745e+00 -3.478154517946586e+00 -3.481460198014830e+00 + -3.484769578980697e+00 -3.488082661341818e+00 -3.491399445595259e+00 -3.494719932237499e+00 -3.498044121764448e+00 + -3.501372014671409e+00 -3.504703611453122e+00 -3.508038912603771e+00 -3.511377918616948e+00 -3.514720629985658e+00 + -3.518067047202351e+00 -3.521417170758916e+00 -3.524771001146632e+00 -3.528128538856226e+00 -3.531489784377869e+00 + -3.534854738201152e+00 -3.538223400815093e+00 -3.541595772708147e+00 -3.544971854368210e+00 -3.548351646282605e+00 + -3.551735148938096e+00 -3.555122362820871e+00 -3.558513288416572e+00 -3.561907926210269e+00 -3.565306276686472e+00 + -3.568708340329149e+00 -3.572114117621674e+00 -3.575523609046896e+00 -3.578936815087090e+00 -3.582353736223982e+00 + -3.585774372938740e+00 -3.589198725711980e+00 -3.592626795023756e+00 -3.596058581353578e+00 -3.599494085180416e+00 + -3.602933306982659e+00 -3.606376247238170e+00 -3.609822906424249e+00 -3.613273285017667e+00 -3.616727383494630e+00 + -3.620185202330797e+00 -3.623646742001296e+00 -3.627112002980697e+00 -3.630580985743044e+00 -3.634053690761820e+00 + -3.637530118509967e+00 -3.641010269459883e+00 -3.644494144083454e+00 -3.647981742852000e+00 -3.651473066236294e+00 + -3.654968114706609e+00 -3.658466888732652e+00 -3.661969388783590e+00 -3.665475615328066e+00 -3.668985568834209e+00 + -3.672499249769582e+00 -3.676016658601212e+00 -3.679537795795627e+00 -3.683062661818816e+00 -3.686591257136213e+00 + -3.690123582212739e+00 -3.693659637512796e+00 -3.697199423500252e+00 -3.700742940638435e+00 -3.704290189390158e+00 + -3.707841170217717e+00 -3.711395883582878e+00 -3.714954329946878e+00 -3.718516509770433e+00 -3.722082423513736e+00 + -3.725652071636476e+00 -3.729225454597809e+00 -3.732802572856360e+00 -3.736383426870251e+00 -3.739968017097092e+00 + -3.743556343993960e+00 -3.747148408017420e+00 -3.750744209623536e+00 -3.754343749267846e+00 -3.757947027405371e+00 + -3.761554044490634e+00 -3.765164800977630e+00 -3.768779297319843e+00 -3.772397533970266e+00 -3.776019511381367e+00 + -3.779645230005114e+00 -3.783274690292943e+00 -3.786907892695818e+00 -3.790544837664185e+00 -3.794185525647971e+00 + -3.797829957096611e+00 -3.801478132459025e+00 -3.805130052183649e+00 -3.808785716718410e+00 -3.812445126510720e+00 + -3.816108282007496e+00 -3.819775183655163e+00 -3.823445831899649e+00 -3.827120227186379e+00 -3.830798369960271e+00 + -3.834480260665755e+00 -3.838165899746767e+00 -3.841855287646750e+00 -3.845548424808647e+00 -3.849245311674900e+00 + -3.852945948687470e+00 -3.856650336287825e+00 -3.860358474916932e+00 -3.864070365015278e+00 -3.867786007022868e+00 + -3.871505401379192e+00 -3.875228548523268e+00 -3.878955448893632e+00 -3.882686102928319e+00 -3.886420511064884e+00 + -3.890158673740407e+00 -3.893900591391463e+00 -3.897646264454169e+00 -3.901395693364130e+00 -3.905148878556481e+00 + -3.908905820465894e+00 -3.912666519526535e+00 -3.916430976172091e+00 -3.920199190835787e+00 -3.923971163950356e+00 + -3.927746895948071e+00 -3.931526387260695e+00 -3.935309638319541e+00 -3.939096649555446e+00 -3.942887421398752e+00 + -3.946681954279347e+00 -3.950480248626651e+00 -3.954282304869576e+00 -3.958088123436599e+00 -3.961897704755720e+00 + -3.965711049254449e+00 -3.969528157359837e+00 -3.973349029498469e+00 -3.977173666096463e+00 -3.981002067579462e+00 + -3.984834234372642e+00 -3.988670166900735e+00 -3.992509865587974e+00 -3.996353330858146e+00 -4.000200563134574e+00 + -4.004051562840109e+00 -4.007906330397145e+00 -4.011764866227615e+00 -4.015627170752992e+00 -4.019493244394294e+00 + -4.023363087572059e+00 -4.027236700706383e+00 -4.031114084216902e+00 -4.034995238522789e+00 -4.038880164042757e+00 + -4.042768861195075e+00 -4.046661330397552e+00 -4.050557572067540e+00 -4.054457586621926e+00 -4.058361374477165e+00 + -4.062268936049244e+00 -4.066180271753694e+00 -4.070095382005614e+00 -4.074014267219641e+00 -4.077936927809962e+00 + -4.081863364190321e+00 -4.085793576773986e+00 -4.089727565973806e+00 -4.093665332202189e+00 -4.097606875871072e+00 + -4.101552197391952e+00 -4.105501297175883e+00 -4.109454175633480e+00 -4.113410833174915e+00 -4.117371270209918e+00 + -4.121335487147758e+00 -4.125303484397271e+00 -4.129275262366859e+00 -4.133250821464483e+00 -4.137230162097660e+00 + -4.141213284673465e+00 -4.145200189598537e+00 -4.149190877279081e+00 -4.153185348120865e+00 -4.157183602529212e+00 + -4.161185640909008e+00 -4.165191463664712e+00 -4.169201071200355e+00 -4.173214463919516e+00 -4.177231642225350e+00 + -4.181252606520591e+00 -4.185277357207513e+00 -4.189305894687974e+00 -4.193338219363411e+00 -4.197374331634809e+00 + -4.201414231902741e+00 -4.205457920567363e+00 -4.209505398028367e+00 -4.213556664685031e+00 -4.217611720936229e+00 + -4.221670567180388e+00 -4.225733203815498e+00 -4.229799631239144e+00 -4.233869849848502e+00 -4.237943860040279e+00 + -4.242021662210785e+00 -4.246103256755913e+00 -4.250188644071127e+00 -4.254277824551467e+00 -4.258370798591556e+00 + -4.262467566585599e+00 -4.266568128927379e+00 -4.270672486010255e+00 -4.274780638227183e+00 -4.278892585970684e+00 + -4.283008329632861e+00 -4.287127869605426e+00 -4.291251206279656e+00 -4.295378340046413e+00 -4.299509271296149e+00 + -4.303644000418893e+00 -4.307782527804274e+00 -4.311924853841519e+00 -4.316070978919406e+00 -4.320220903426330e+00 + -4.324374627750270e+00 -4.328532152278792e+00 -4.332693477399057e+00 -4.336858603497809e+00 -4.341027530961389e+00 + -4.345200260175742e+00 -4.349376791526378e+00 -4.353557125398426e+00 -4.357741262176597e+00 -4.361929202245197e+00 + -4.366120945988135e+00 -4.370316493788910e+00 -4.374515846030618e+00 -4.378719003095941e+00 -4.382925965367197e+00 + -4.387136733226254e+00 -4.391351307054602e+00 -4.395569687233333e+00 -4.399791874143130e+00 -4.404017868164284e+00 + -4.408247669676693e+00 -4.412481279059842e+00 -4.416718696692822e+00 -4.420959922954337e+00 -4.425204958222677e+00 + -4.429453802875758e+00 -4.433706457291089e+00 -4.437962921845775e+00 -4.442223196916548e+00 -4.446487282879729e+00 + -4.450755180111253e+00 -4.455026888986658e+00 -4.459302409881104e+00 -4.463581743169351e+00 -4.467864889225750e+00 + -4.472151848424286e+00 -4.476442621138564e+00 -4.480737207741772e+00 -4.485035608606713e+00 -4.489337824105825e+00 + -4.493643854611136e+00 -4.497953700494294e+00 -4.502267362126566e+00 -4.506584839878830e+00 -4.510906134121575e+00 + -4.515231245224915e+00 -4.519560173558575e+00 -4.523892919491889e+00 -4.528229483393817e+00 -4.532569865632944e+00 + -4.536914066577454e+00 -4.541262086595165e+00 -4.545613926053512e+00 -4.549969585319536e+00 -4.554329064759933e+00 + -4.558692364740978e+00 -4.563059485628594e+00 -4.567430427788318e+00 -4.571805191585312e+00 -4.576183777384360e+00 + -4.580566185549864e+00 -4.584952416445871e+00 -4.589342470436034e+00 -4.593736347883617e+00 -4.598134049151555e+00 + -4.602535574602366e+00 -4.606940924598215e+00 -4.611350099500895e+00 -4.615763099671819e+00 -4.620179925472048e+00 + -4.624600577262248e+00 -4.629025055402718e+00 -4.633453360253406e+00 -4.637885492173879e+00 -4.642321451523323e+00 + -4.646761238660574e+00 -4.651204853944100e+00 -4.655652297731985e+00 -4.660103570381972e+00 -4.664558672251414e+00 + -4.669017603697299e+00 -4.673480365076278e+00 -4.677946956744618e+00 -4.682417379058207e+00 -4.686891632372589e+00 + -4.691369717042950e+00 -4.695851633424101e+00 -4.700337381870502e+00 -4.704826962736228e+00 -4.709320376375019e+00 + -4.713817623140252e+00 -4.718318703384934e+00 -4.722823617461711e+00 -4.727332365722877e+00 -4.731844948520367e+00 + -4.736361366205763e+00 -4.740881619130278e+00 -4.745405707644782e+00 -4.749933632099776e+00 -4.754465392845407e+00 + -4.759000990231475e+00 -4.763540424607419e+00 -4.768083696322323e+00 -4.772630805724941e+00 -4.777181753163625e+00 + -4.781736538986410e+00 -4.786295163540972e+00 -4.790857627174635e+00 -4.795423930234377e+00 -4.799994073066809e+00 + -4.804568056018198e+00 -4.809145879434483e+00 -4.813727543661221e+00 -4.818313049043633e+00 -4.822902395926605e+00 + -4.827495584654658e+00 -4.832092615571965e+00 -4.836693489022368e+00 -4.841298205349351e+00 -4.845906764896066e+00 + -4.850519168005293e+00 -4.855135415019487e+00 -4.859755506280755e+00 -4.864379442130859e+00 -4.869007222911223e+00 + -4.873638848962912e+00 -4.878274320626662e+00 -4.882913638242878e+00 -4.887556802151599e+00 -4.892203812692545e+00 + -4.896854670205077e+00 -4.901509375028215e+00 -4.906167927500664e+00 -4.910830327960769e+00 -4.915496576746531e+00 + -4.920166674195641e+00 -4.924840620645424e+00 -4.929518416432892e+00 -4.934200061894690e+00 -4.938885557367149e+00 + -4.943574903186265e+00 -4.948268099687690e+00 -4.952965147206749e+00 -4.957666046078407e+00 -4.962370796637342e+00 + -4.967079399217861e+00 -4.971791854153949e+00 -4.976508161779259e+00 -4.981228322427121e+00 -4.985952336430508e+00 + -4.990680204122076e+00 -4.995411925834181e+00 -5.000147501898792e+00 -5.004886932647596e+00 -5.009630218411923e+00 + -5.014377359522774e+00 -5.019128356310840e+00 -5.023883209106478e+00 -5.028641918239699e+00 -5.033404484040224e+00 + -5.038170906837403e+00 -5.042941186960304e+00 -5.047715324737633e+00 -5.052493320497788e+00 -5.057275174568838e+00 + -5.062060887278532e+00 -5.066850458954302e+00 -5.071643889923235e+00 -5.076441180512111e+00 -5.081242331047386e+00 + -5.086047341855183e+00 -5.090856213261325e+00 -5.095668945591296e+00 -5.100485539170259e+00 -5.105305994323073e+00 + -5.110130311374258e+00 -5.114958490648023e+00 -5.119790532468257e+00 -5.124626437158541e+00 -5.129466205042124e+00 + -5.134309836441936e+00 -5.139157331680601e+00 -5.144008691080423e+00 -5.148863914963381e+00 -5.153723003651146e+00 + -5.158585957465074e+00 -5.163452776726214e+00 -5.168323461755270e+00 -5.173198012872664e+00 -5.178076430398495e+00 + -5.182958714652539e+00 -5.187844865954274e+00 -5.192734884622851e+00 -5.197628770977129e+00 -5.202526525335630e+00 + -5.207428148016579e+00 -5.212333639337883e+00 -5.217242999617151e+00 -5.222156229171685e+00 -5.227073328318455e+00 + -5.231994297374141e+00 -5.236919136655107e+00 -5.241847846477410e+00 -5.246780427156790e+00 -5.251716879008699e+00 + -5.256657202348276e+00 -5.261601397490344e+00 -5.266549464749412e+00 -5.271501404439718e+00 -5.276457216875169e+00 + -5.281416902369371e+00 -5.286380461235616e+00 -5.291347893786903e+00 -5.296319200335939e+00 -5.301294381195112e+00 + -5.306273436676504e+00 -5.311256367091902e+00 -5.316243172752793e+00 -5.321233853970363e+00 -5.326228411055482e+00 + -5.331226844318738e+00 -5.336229154070412e+00 -5.341235340620486e+00 -5.346245404278635e+00 -5.351259345354241e+00 + -5.356277164156404e+00 -5.361298860993880e+00 -5.366324436175172e+00 -5.371353890008475e+00 -5.376387222801674e+00 + -5.381424434862359e+00 -5.386465526497835e+00 -5.391510498015110e+00 -5.396559349720882e+00 -5.401612081921566e+00 + -5.406668694923281e+00 -5.411729189031852e+00 -5.416793564552815e+00 -5.421861821791401e+00 -5.426933961052540e+00 + -5.432009982640891e+00 -5.437089886860833e+00 -5.442173674016402e+00 -5.447261344411380e+00 -5.452352898349262e+00 + -5.457448336133238e+00 -5.462547658066200e+00 -5.467650864450756e+00 -5.472757955589240e+00 -5.477868931783695e+00 + -5.482983793335842e+00 -5.488102540547150e+00 -5.493225173718788e+00 -5.498351693151633e+00 -5.503482099146281e+00 + -5.508616392003035e+00 -5.513754572021907e+00 -5.518896639502648e+00 -5.524042594744686e+00 -5.529192438047204e+00 + -5.534346169709065e+00 -5.539503790028862e+00 -5.544665299304909e+00 -5.549830697835224e+00 -5.554999985917551e+00 + -5.560173163849363e+00 -5.565350231927815e+00 -5.570531190449804e+00 -5.575716039711939e+00 -5.580904780010557e+00 + -5.586097411641703e+00 -5.591293934901141e+00 -5.596494350084360e+00 -5.601698657486573e+00 -5.606906857402707e+00 + -5.612118950127392e+00 -5.617334935955009e+00 -5.622554815179657e+00 -5.627778588095129e+00 -5.633006254994962e+00 + -5.638237816172428e+00 -5.643473271920497e+00 -5.648712622531863e+00 -5.653955868298955e+00 -5.659203009513937e+00 + -5.664454046468674e+00 -5.669708979454753e+00 -5.674967808763511e+00 -5.680230534686000e+00 -5.685497157512981e+00 + -5.690767677534969e+00 -5.696042095042189e+00 -5.701320410324601e+00 -5.706602623671866e+00 -5.711888735373401e+00 + -5.717178745718360e+00 -5.722472654995594e+00 -5.727770463493701e+00 -5.733072171500994e+00 -5.738377779305535e+00 + -5.743687287195117e+00 -5.749000695457238e+00 -5.754318004379131e+00 -5.759639214247780e+00 -5.764964325349899e+00 + -5.770293337971915e+00 -5.775626252400000e+00 -5.780963068920038e+00 -5.786303787817687e+00 -5.791648409378297e+00 + -5.796996933886967e+00 -5.802349361628526e+00 -5.807705692887541e+00 -5.813065927948325e+00 -5.818430067094904e+00 + -5.823798110611049e+00 -5.829170058780258e+00 -5.834545911885780e+00 -5.839925670210602e+00 -5.845309334037417e+00 + -5.850696903648678e+00 -5.856088379326584e+00 -5.861483761353051e+00 -5.866883050009746e+00 -5.872286245578068e+00 + -5.877693348339152e+00 -5.883104358573871e+00 -5.888519276562852e+00 -5.893938102586454e+00 -5.899360836924761e+00 + -5.904787479857608e+00 -5.910218031664582e+00 -5.915652492624988e+00 -5.921090863017886e+00 -5.926533143122083e+00 + -5.931979333216122e+00 -5.937429433578276e+00 -5.942883444486576e+00 -5.948341366218787e+00 -5.953803199052428e+00 + -5.959268943264752e+00 -5.964738599132756e+00 -5.970212166933178e+00 -5.975689646942516e+00 -5.981171039436995e+00 + -5.986656344692580e+00 -5.992145562985025e+00 -5.997638694589780e+00 -6.003135739782047e+00 -6.008636698836816e+00 + -6.014141572028781e+00 -6.019650359632385e+00 -6.025163061921843e+00 -6.030679679171110e+00 -6.036200211653867e+00 + -6.041724659643579e+00 -6.047253023413430e+00 -6.052785303236364e+00 -6.058321499385080e+00 -6.063861612132020e+00 + -6.069405641749371e+00 -6.074953588509080e+00 -6.080505452682839e+00 -6.086061234542105e+00 -6.091620934358053e+00 + -6.097184552401647e+00 -6.102752088943580e+00 -6.108323544254316e+00 -6.113898918604045e+00 -6.119478212262720e+00 + -6.125061425500075e+00 -6.130648558585549e+00 -6.136239611788372e+00 -6.141834585377521e+00 -6.147433479621712e+00 + -6.153036294789428e+00 -6.158643031148904e+00 -6.164253688968132e+00 -6.169868268514869e+00 -6.175486770056609e+00 + -6.181109193860610e+00 -6.186735540193886e+00 -6.192365809323226e+00 -6.198000001515148e+00 -6.203638117035931e+00 + -6.209280156151636e+00 -6.214926119128074e+00 -6.220576006230784e+00 -6.226229817725092e+00 -6.231887553876090e+00 + -6.237549214948623e+00 -6.243214801207271e+00 -6.248884312916396e+00 -6.254557750340128e+00 -6.260235113742339e+00 + -6.265916403386665e+00 -6.271601619536529e+00 -6.277290762455077e+00 -6.282983832405249e+00 -6.288680829649721e+00 + -6.294381754450934e+00 -6.300086607071117e+00 -6.305795387772242e+00 -6.311508096816047e+00 -6.317224734464046e+00 + -6.322945300977493e+00 -6.328669796617409e+00 -6.334398221644610e+00 -6.340130576319652e+00 -6.345866860902846e+00 + -6.351607075654297e+00 -6.357351220833869e+00 -6.363099296701155e+00 -6.368851303515576e+00 -6.374607241536277e+00 + -6.380367111022172e+00 -6.386130912231954e+00 -6.391898645424085e+00 -6.397670310856794e+00 -6.403445908788060e+00 + -6.409225439475646e+00 -6.415008903177084e+00 -6.420796300149683e+00 -6.426587630650501e+00 -6.432382894936371e+00 + -6.438182093263920e+00 -6.443985225889512e+00 -6.449792293069281e+00 -6.455603295059175e+00 -6.461418232114865e+00 + -6.467237104491804e+00 -6.473059912445233e+00 -6.478886656230174e+00 -6.484717336101379e+00 -6.490551952313386e+00 + -6.496390505120561e+00 -6.502232994776961e+00 -6.508079421536452e+00 -6.513929785652689e+00 -6.519784087379094e+00 + -6.525642326968836e+00 -6.531504504674881e+00 -6.537370620749972e+00 -6.543240675446627e+00 -6.549114669017141e+00 + -6.554992601713554e+00 -6.560874473787715e+00 -6.566760285491243e+00 -6.572650037075519e+00 -6.578543728791724e+00 + -6.584441360890791e+00 -6.590342933623440e+00 -6.596248447240193e+00 -6.602157901991309e+00 -6.608071298126847e+00 + -6.613988635896638e+00 -6.619909915550290e+00 -6.625835137337201e+00 -6.631764301506546e+00 -6.637697408307263e+00 + -6.643634457988090e+00 -6.649575450797517e+00 -6.655520386983861e+00 -6.661469266795167e+00 -6.667422090479300e+00 + -6.673378858283891e+00 -6.679339570456337e+00 -6.685304227243845e+00 -6.691272828893389e+00 -6.697245375651724e+00 + -6.703221867765397e+00 -6.709202305480722e+00 -6.715186689043798e+00 -6.721175018700527e+00 -6.727167294696586e+00 + -6.733163517277418e+00 -6.739163686688271e+00 -6.745167803174153e+00 -6.751175866979899e+00 -6.757187878350086e+00 + -6.763203837529089e+00 -6.769223744761077e+00 -6.775247600289998e+00 -6.781275404359591e+00 -6.787307157213379e+00 + -6.793342859094645e+00 -6.799382510246520e+00 -6.805426110911839e+00 -6.811473661333310e+00 -6.817525161753391e+00 + -6.823580612414293e+00 -6.829640013558051e+00 -6.835703365426514e+00 -6.841770668261261e+00 -6.847841922303711e+00 + -6.853917127795019e+00 -6.859996284976181e+00 -6.866079394087945e+00 -6.872166455370881e+00 -6.878257469065336e+00 + -6.884352435411412e+00 -6.890451354649063e+00 -6.896554227018007e+00 -6.902661052757722e+00 -6.908771832107508e+00 + -6.914886565306481e+00 -6.921005252593503e+00 -6.927127894207235e+00 -6.933254490386168e+00 -6.939385041368540e+00 + -6.945519547392406e+00 -6.951658008695609e+00 -6.957800425515785e+00 -6.963946798090364e+00 -6.970097126656561e+00 + -6.976251411451404e+00 -6.982409652711705e+00 -6.988571850674059e+00 -6.994738005574878e+00 -7.000908117650358e+00 + -7.007082187136479e+00 -7.013260214269030e+00 -7.019442199283596e+00 -7.025628142415571e+00 -7.031818043900113e+00 + -7.038011903972172e+00 -7.044209722866557e+00 -7.050411500817816e+00 -7.056617238060313e+00 -7.062826934828212e+00 + -7.069040591355458e+00 -7.075258207875804e+00 -7.081479784622815e+00 -7.087705321829840e+00 -7.093934819730035e+00 + -7.100168278556337e+00 -7.106405698541495e+00 -7.112647079918084e+00 -7.118892422918433e+00 -7.125141727774680e+00 + -7.131394994718784e+00 -7.137652223982496e+00 -7.143913415797365e+00 -7.150178570394741e+00 -7.156447688005769e+00 + -7.162720768861397e+00 -7.168997813192387e+00 -7.175278821229301e+00 -7.181563793202489e+00 -7.187852729342118e+00 + -7.194145629878145e+00 -7.200442495040330e+00 -7.206743325058257e+00 -7.213048120161294e+00 -7.219356880578604e+00 + -7.225669606539178e+00 -7.231986298271799e+00 -7.238306956005045e+00 -7.244631579967329e+00 -7.250960170386830e+00 + -7.257292727491547e+00 -7.263629251509297e+00 -7.269969742667685e+00 -7.276314201194133e+00 -7.282662627315866e+00 + -7.289015021259905e+00 -7.295371383253110e+00 -7.301731713522094e+00 -7.308096012293305e+00 -7.314464279793020e+00 + -7.320836516247303e+00 -7.327212721882012e+00 -7.333592896922825e+00 -7.339977041595229e+00 -7.346365156124529e+00 + -7.352757240735817e+00 -7.359153295654018e+00 -7.365553321103840e+00 -7.371957317309811e+00 -7.378365284496280e+00 + -7.384777222887396e+00 -7.391193132707101e+00 -7.397613014179165e+00 -7.404036867527187e+00 -7.410464692974549e+00 + -7.416896490744429e+00 -7.423332261059860e+00 -7.429772004143665e+00 -7.436215720218461e+00 -7.442663409506689e+00 + -7.449115072230618e+00 -7.455570708612319e+00 -7.462030318873654e+00 -7.468493903236336e+00 -7.474961461921863e+00 + -7.481432995151539e+00 -7.487908503146506e+00 -7.494387986127713e+00 -7.500871444315909e+00 -7.507358877931678e+00 + -7.513850287195392e+00 -7.520345672327254e+00 -7.526845033547282e+00 -7.533348371075305e+00 -7.539855685130965e+00 + -7.546366975933723e+00 -7.552882243702854e+00 -7.559401488657434e+00 -7.565924711016385e+00 -7.572451910998421e+00 + -7.578983088822080e+00 -7.585518244705714e+00 -7.592057378867498e+00 -7.598600491525418e+00 -7.605147582897262e+00 + -7.611698653200676e+00 -7.618253702653100e+00 -7.624812731471770e+00 -7.631375739873762e+00 -7.637942728075978e+00 + -7.644513696295129e+00 -7.651088644747739e+00 -7.657667573650164e+00 -7.664250483218564e+00 -7.670837373668940e+00 + -7.677428245217064e+00 -7.684023098078583e+00 -7.690621932468945e+00 -7.697224748603410e+00 -7.703831546697062e+00 + -7.710442326964809e+00 -7.717057089621377e+00 -7.723675834881300e+00 -7.730298562958961e+00 -7.736925274068566e+00 + -7.743555968424084e+00 -7.750190646239366e+00 -7.756829307728082e+00 -7.763471953103685e+00 -7.770118582579482e+00 + -7.776769196368593e+00 -7.783423794683974e+00 -7.790082377738391e+00 -7.796744945744414e+00 -7.803411498914449e+00 + -7.810082037460762e+00 -7.816756561595423e+00 -7.823435071530273e+00 -7.830117567477052e+00 -7.836804049647279e+00 + -7.843494518252330e+00 -7.850188973503353e+00 -7.856887415611381e+00 -7.863589844787259e+00 -7.870296261241606e+00 + -7.877006665184924e+00 -7.883721056827543e+00 -7.890439436379575e+00 -7.897161804050968e+00 -7.903888160051543e+00 + -7.910618504590899e+00 -7.917352837878463e+00 -7.924091160123523e+00 -7.930833471535165e+00 -7.937579772322323e+00 + -7.944330062693729e+00 -7.951084342857964e+00 -7.957842613023447e+00 -7.964604873398404e+00 -7.971371124190894e+00 + -7.978141365608812e+00 -7.984915597859879e+00 -7.991693821151640e+00 -7.998476035691475e+00 -8.005262241686605e+00 + -8.012052439344041e+00 -8.018846628870644e+00 -8.025644810473141e+00 -8.032446984358055e+00 -8.039253150731721e+00 + -8.046063309800333e+00 -8.052877461769919e+00 -8.059695606846336e+00 -8.066517745235240e+00 -8.073343877142156e+00 + -8.080174002772431e+00 -8.087008122331229e+00 -8.093846236023561e+00 -8.100688344054255e+00 -8.107534446628014e+00 + -8.114384543949313e+00 -8.121238636222499e+00 -8.128096723651735e+00 -8.134958806441029e+00 -8.141824884794215e+00 + -8.148694958914962e+00 -8.155569029006765e+00 -8.162447095272967e+00 -8.169329157916735e+00 -8.176215217141083e+00 + -8.183105273148838e+00 -8.189999326142679e+00 -8.196897376325106e+00 -8.203799423898468e+00 -8.210705469064955e+00 + -8.217615512026555e+00 -8.224529552985137e+00 -8.231447592142381e+00 -8.238369629699797e+00 -8.245295665858759e+00 + -8.252225700820452e+00 -8.259159734785896e+00 -8.266097767955973e+00 -8.273039800531377e+00 -8.279985832712656e+00 + -8.286935864700171e+00 -8.293889896694134e+00 -8.300847928894626e+00 -8.307809961501516e+00 -8.314775994714518e+00 + -8.321746028733230e+00 -8.328720063757029e+00 -8.335698099985173e+00 -8.342680137616734e+00 -8.349666176850638e+00 + -8.356656217885641e+00 -8.363650260920339e+00 -8.370648306153180e+00 -8.377650353782432e+00 -8.384656404006195e+00 + -8.391666457022472e+00 -8.398680513029014e+00 -8.405698572223468e+00 -8.412720634803323e+00 -8.419746700965899e+00 + -8.426776770908349e+00 -8.433810844827663e+00 -8.440848922920704e+00 -8.447891005384147e+00 -8.454937092414497e+00 + -8.461987184208150e+00 -8.469041280961296e+00 -8.476099382869975e+00 -8.483161490130104e+00 -8.490227602937411e+00 + -8.497297721487449e+00 -8.504371845975683e+00 -8.511449976597337e+00 -8.518532113547520e+00 -8.525618257021209e+00 + -8.532708407213180e+00 -8.539802564318054e+00 -8.546900728530334e+00 -8.554002900044340e+00 -8.561109079054233e+00 + -8.568219265754033e+00 -8.575333460337607e+00 -8.582451662998643e+00 -8.589573873930684e+00 -8.596700093327133e+00 + -8.603830321381231e+00 -8.610964558286055e+00 -8.618102804234525e+00 -8.625245059419424e+00 -8.632391324033383e+00 + -8.639541598268854e+00 -8.646695882318152e+00 -8.653854176373446e+00 -8.661016480626726e+00 -8.668182795269855e+00 + -8.675353120494524e+00 -8.682527456492297e+00 -8.689705803454544e+00 -8.696888161572527e+00 -8.704074531037321e+00 + -8.711264912039873e+00 -8.718459304770979e+00 -8.725657709421256e+00 -8.732860126181169e+00 -8.740066555241091e+00 + -8.747276996791161e+00 -8.754491451021417e+00 -8.761709918121749e+00 -8.768932398281878e+00 -8.776158891691368e+00 + -8.783389398539647e+00 -8.790623919016008e+00 -8.797862453309548e+00 -8.805105001609256e+00 -8.812351564103956e+00 + -8.819602140982319e+00 -8.826856732432866e+00 -8.834115338643974e+00 -8.841377959803891e+00 -8.848644596100668e+00 + -8.855915247722244e+00 -8.863189914856402e+00 -8.870468597690763e+00 -8.877751296412818e+00 -8.885038011209907e+00 + -8.892328742269209e+00 -8.899623489777758e+00 -8.906922253922460e+00 -8.914225034890046e+00 -8.921531832867133e+00 + -8.928842648040153e+00 -8.936157480595394e+00 -8.943476330719038e+00 -8.950799198597096e+00 -8.958126084415404e+00 + -8.965456988359692e+00 -8.972791910615557e+00 -8.980130851368383e+00 -8.987473810803451e+00 -8.994820789105916e+00 + -9.002171786460757e+00 -9.009526803052800e+00 -9.016885839066749e+00 -9.024248894687164e+00 -9.031615970098445e+00 + -9.038987065484857e+00 -9.046362181030501e+00 -9.053741316919359e+00 -9.061124473335269e+00 -9.068511650461897e+00 + -9.075902848482778e+00 -9.083298067581330e+00 -9.090697307940800e+00 -9.098100569744282e+00 -9.105507853174750e+00 + -9.112919158415034e+00 -9.120334485647801e+00 -9.127753835055586e+00 -9.135177206820789e+00 -9.142604601125658e+00 + -9.150036018152299e+00 -9.157471458082691e+00 -9.164910921098638e+00 -9.172354407381833e+00 -9.179801917113823e+00 + -9.187253450475996e+00 -9.194709007649601e+00 -9.202168588815766e+00 -9.209632194155466e+00 -9.217099823849537e+00 + -9.224571478078660e+00 -9.232047157023397e+00 -9.239526860864149e+00 -9.247010589781191e+00 -9.254498343954662e+00 + -9.261990123564543e+00 -9.269485928790706e+00 -9.276985759812838e+00 -9.284489616810514e+00 -9.291997499963166e+00 + -9.299509409450087e+00 -9.307025345450429e+00 -9.314545308143211e+00 -9.322069297707307e+00 -9.329597314321452e+00 + -9.337129358164249e+00 -9.344665429414164e+00 -9.352205528249479e+00 -9.359749654848420e+00 -9.367297809389010e+00 + -9.374849992049160e+00 -9.382406203006667e+00 -9.389966442439121e+00 -9.397530710524038e+00 -9.405099007438761e+00 + -9.412671333360530e+00 -9.420247688466429e+00 -9.427828072933398e+00 -9.435412486938230e+00 -9.443000930657597e+00 + -9.450593404268066e+00 -9.458189907946041e+00 -9.465790441867744e+00 -9.473395006209342e+00 -9.481003601146801e+00 + -9.488616226855999e+00 -9.496232883512658e+00 -9.503853571292346e+00 -9.511478290370524e+00 -9.519107040922526e+00 + -9.526739823123510e+00 -9.534376637148544e+00 -9.542017483172511e+00 -9.549662361370208e+00 -9.557311271916278e+00 + -9.564964214985224e+00 -9.572621190751422e+00 -9.580282199389115e+00 -9.587947241072424e+00 -9.595616315975308e+00 + -9.603289424271598e+00 -9.610966566135021e+00 -9.618647741739137e+00 -9.626332951257398e+00 -9.634022194863123e+00 + -9.641715472729455e+00 -9.649412785029462e+00 -9.657114131936055e+00 -9.664819513621991e+00 -9.672528930259928e+00 + -9.680242382022390e+00 -9.687959869081746e+00 -9.695681391610250e+00 -9.703406949780033e+00 -9.711136543763059e+00 + -9.718870173731199e+00 -9.726607839856156e+00 -9.734349542309561e+00 -9.742095281262861e+00 -9.749845056887377e+00 + -9.757598869354331e+00 -9.765356718834767e+00 -9.773118605499638e+00 -9.780884529519779e+00 -9.788654491065836e+00 + -9.796428490308374e+00 -9.804206527417804e+00 -9.811988602564428e+00 -9.819774715918413e+00 -9.827564867649766e+00 + -9.835359057928416e+00 -9.843157286924123e+00 -9.850959554806540e+00 -9.858765861745187e+00 -9.866576207909432e+00 + -9.874390593468537e+00 -9.882209018591661e+00 -9.890031483447776e+00 -9.897857988205763e+00 -9.905688533034370e+00 + -9.913523118102228e+00 -9.921361743577808e+00 -9.929204409629477e+00 -9.937051116425481e+00 -9.944901864133916e+00 + -9.952756652922753e+00 -9.960615482959881e+00 -9.968478354412996e+00 -9.976345267449714e+00 -9.984216222237505e+00 + -9.992091218943708e+00 -9.999970257735548e+00 -1.000785333878012e+01 -1.001574046224439e+01 -1.002363162829521e+01 + -1.003152683709930e+01 -1.003942608882323e+01 -1.004732938363347e+01 -1.005523672169636e+01 -1.006314810317811e+01 + -1.007106352824484e+01 -1.007898299706249e+01 -1.008690650979689e+01 -1.009483406661375e+01 -1.010276566767870e+01 + -1.011070131315718e+01 -1.011864100321451e+01 -1.012658473801593e+01 -1.013453251772654e+01 -1.014248434251131e+01 + -1.015044021253504e+01 -1.015840012796250e+01 -1.016636408895826e+01 -1.017433209568680e+01 -1.018230414831248e+01 + -1.019028024699952e+01 -1.019826039191202e+01 -1.020624458321397e+01 -1.021423282106921e+01 -1.022222510564150e+01 + -1.023022143709443e+01 -1.023822181559150e+01 -1.024622624129609e+01 -1.025423471437143e+01 -1.026224723498064e+01 + -1.027026380328674e+01 -1.027828441945259e+01 -1.028630908364097e+01 -1.029433779601449e+01 -1.030237055673569e+01 + -1.031040736596695e+01 -1.031844822387055e+01 -1.032649313060863e+01 -1.033454208634322e+01 -1.034259509123625e+01 + -1.035065214544951e+01 -1.035871324914464e+01 -1.036677840248320e+01 -1.037484760562664e+01 -1.038292085873624e+01 + -1.039099816197320e+01 -1.039907951549858e+01 -1.040716491947335e+01 -1.041525437405832e+01 -1.042334787941419e+01 + -1.043144543570157e+01 -1.043954704308092e+01 -1.044765270171260e+01 -1.045576241175682e+01 -1.046387617337370e+01 + -1.047199398672325e+01 -1.048011585196535e+01 -1.048824176925973e+01 -1.049637173876604e+01 -1.050450576064383e+01 + -1.051264383505245e+01 -1.052078596215120e+01 -1.052893214209928e+01 -1.053708237505570e+01 -1.054523666117939e+01 + -1.055339500062918e+01 -1.056155739356377e+01 -1.056972384014173e+01 -1.057789434052151e+01 -1.058606889486146e+01 + -1.059424750331983e+01 -1.060243016605470e+01 -1.061061688322407e+01 -1.061880765498584e+01 -1.062700248149774e+01 + -1.063520136291741e+01 -1.064340429940240e+01 -1.065161129111011e+01 -1.065982233819784e+01 -1.066803744082278e+01 + -1.067625659914197e+01 -1.068447981331238e+01 -1.069270708349082e+01 -1.070093840983402e+01 -1.070917379249859e+01 + -1.071741323164101e+01 -1.072565672741764e+01 -1.073390427998475e+01 -1.074215588949848e+01 -1.075041155611485e+01 + -1.075867127998978e+01 -1.076693506127908e+01 -1.077520290013840e+01 -1.078347479672334e+01 -1.079175075118934e+01 + -1.080003076369175e+01 -1.080831483438578e+01 -1.081660296342658e+01 -1.082489515096912e+01 -1.083319139716829e+01 + -1.084149170217887e+01 -1.084979606615550e+01 -1.085810448925276e+01 -1.086641697162507e+01 -1.087473351342674e+01 + -1.088305411481200e+01 -1.089137877593492e+01 -1.089970749694949e+01 -1.090804027800960e+01 -1.091637711926899e+01 + -1.092471802088130e+01 -1.093306298300006e+01 -1.094141200577872e+01 -1.094976508937056e+01 -1.095812223392879e+01 + -1.096648343960650e+01 -1.097484870655665e+01 -1.098321803493211e+01 -1.099159142488565e+01 -1.099996887656988e+01 + -1.100835039013734e+01 -1.101673596574047e+01 -1.102512560353154e+01 -1.103351930366276e+01 -1.104191706628624e+01 + -1.105031889155393e+01 -1.105872477961770e+01 -1.106713473062930e+01 -1.107554874474038e+01 -1.108396682210247e+01 + -1.109238896286701e+01 -1.110081516718529e+01 -1.110924543520854e+01 -1.111767976708783e+01 -1.112611816297415e+01 + -1.113456062301839e+01 -1.114300714737132e+01 -1.115145773618357e+01 -1.115991238960572e+01 -1.116837110778820e+01 + -1.117683389088132e+01 -1.118530073903531e+01 -1.119377165240030e+01 -1.120224663112628e+01 -1.121072567536315e+01 + -1.121920878526069e+01 -1.122769596096861e+01 -1.123618720263645e+01 -1.124468251041367e+01 -1.125318188444964e+01 + -1.126168532489361e+01 -1.127019283189471e+01 -1.127870440560199e+01 -1.128722004616434e+01 -1.129573975373062e+01 + -1.130426352844951e+01 -1.131279137046964e+01 -1.132132327993946e+01 -1.132985925700740e+01 -1.133839930182175e+01 + -1.134694341453066e+01 -1.135549159528221e+01 -1.136404384422433e+01 -1.137260016150494e+01 -1.138116054727173e+01 + -1.138972500167237e+01 -1.139829352485441e+01 -1.140686611696527e+01 -1.141544277815226e+01 -1.142402350856261e+01 + -1.143260830834348e+01 -1.144119717764181e+01 -1.144979011660454e+01 -1.145838712537846e+01 -1.146698820411027e+01 + -1.147559335294655e+01 -1.148420257203378e+01 -1.149281586151835e+01 -1.150143322154652e+01 -1.151005465226447e+01 + -1.151868015381826e+01 -1.152730972635386e+01 -1.153594337001710e+01 -1.154458108495374e+01 -1.155322287130944e+01 + -1.156186872922975e+01 -1.157051865886009e+01 -1.157917266034580e+01 -1.158783073383211e+01 -1.159649287946416e+01 + -1.160515909738695e+01 -1.161382938774540e+01 -1.162250375068435e+01 -1.163118218634852e+01 -1.163986469488249e+01 + -1.164855127643079e+01 -1.165724193113782e+01 -1.166593665914788e+01 -1.167463546060516e+01 -1.168333833565378e+01 + -1.169204528443773e+01 -1.170075630710089e+01 -1.170947140378704e+01 -1.171819057463989e+01 -1.172691381980302e+01 + -1.173564113941991e+01 -1.174437253363394e+01 -1.175310800258839e+01 -1.176184754642644e+01 -1.177059116529117e+01 + -1.177933885932554e+01 -1.178809062867245e+01 -1.179684647347465e+01 -1.180560639387481e+01 -1.181437039001551e+01 + -1.182313846203921e+01 -1.183191061008830e+01 -1.184068683430503e+01 -1.184946713483156e+01 -1.185825151180997e+01 + -1.186703996538223e+01 -1.187583249569018e+01 -1.188462910287559e+01 -1.189342978708015e+01 -1.190223454844542e+01 + -1.191104338711284e+01 -1.191985630322376e+01 -1.192867329691951e+01 -1.193749436834120e+01 -1.194631951762992e+01 + -1.195514874492662e+01 -1.196398205037220e+01 -1.197281943410740e+01 -1.198166089627287e+01 -1.199050643700922e+01 + -1.199935605645689e+01 -1.200820975475625e+01 -1.201706753204761e+01 -1.202592938847110e+01 -1.203479532416681e+01 + -1.204366533927472e+01 -1.205253943393470e+01 -1.206141760828654e+01 -1.207029986246992e+01 -1.207918619662443e+01 + -1.208807661088954e+01 -1.209697110540464e+01 -1.210586968030902e+01 -1.211477233574189e+01 -1.212367907184231e+01 + -1.213258988874930e+01 -1.214150478660175e+01 -1.215042376553849e+01 -1.215934682569817e+01 -1.216827396721942e+01 + -1.217720519024078e+01 -1.218614049490063e+01 -1.219507988133729e+01 -1.220402334968899e+01 -1.221297090009384e+01 + -1.222192253268988e+01 -1.223087824761503e+01 -1.223983804500713e+01 -1.224880192500392e+01 -1.225776988774303e+01 + -1.226674193336200e+01 -1.227571806199830e+01 -1.228469827378926e+01 -1.229368256887214e+01 -1.230267094738412e+01 + -1.231166340946224e+01 -1.232065995524348e+01 -1.232966058486472e+01 -1.233866529846273e+01 -1.234767409617421e+01 + -1.235668697813571e+01 -1.236570394448377e+01 -1.237472499535476e+01 -1.238375013088498e+01 -1.239277935121066e+01 + -1.240181265646790e+01 -1.241085004679272e+01 -1.241989152232105e+01 -1.242893708318871e+01 -1.243798672953144e+01 + -1.244704046148487e+01 -1.245609827918456e+01 -1.246516018276597e+01 -1.247422617236445e+01 -1.248329624811526e+01 + -1.249237041015359e+01 -1.250144865861449e+01 -1.251053099363295e+01 -1.251961741534388e+01 -1.252870792388208e+01 + -1.253780251938222e+01 -1.254690120197893e+01 -1.255600397180673e+01 -1.256511082900004e+01 -1.257422177369317e+01 + -1.258333680602040e+01 -1.259245592611584e+01 -1.260157913411357e+01 -1.261070643014754e+01 -1.261983781435160e+01 + -1.262897328685953e+01 -1.263811284780502e+01 -1.264725649732168e+01 -1.265640423554297e+01 -1.266555606260234e+01 + -1.267471197863305e+01 -1.268387198376835e+01 -1.269303607814138e+01 -1.270220426188516e+01 -1.271137653513265e+01 + -1.272055289801669e+01 -1.272973335067006e+01 -1.273891789322541e+01 -1.274810652581535e+01 -1.275729924857236e+01 + -1.276649606162882e+01 -1.277569696511704e+01 -1.278490195916926e+01 -1.279411104391759e+01 -1.280332421949406e+01 + -1.281254148603064e+01 -1.282176284365914e+01 -1.283098829251136e+01 -1.284021783271895e+01 -1.284945146441350e+01 + -1.285868918772651e+01 -1.286793100278938e+01 -1.287717690973341e+01 -1.288642690868983e+01 -1.289568099978976e+01 + -1.290493918316427e+01 -1.291420145894427e+01 -1.292346782726064e+01 -1.293273828824418e+01 -1.294201284202555e+01 + -1.295129148873533e+01 -1.296057422850405e+01 -1.296986106146209e+01 -1.297915198773984e+01 -1.298844700746749e+01 + -1.299774612077518e+01 -1.300704932779299e+01 -1.301635662865089e+01 -1.302566802347876e+01 -1.303498351240637e+01 + -1.304430309556346e+01 -1.305362677307965e+01 -1.306295454508441e+01 -1.307228641170723e+01 -1.308162237307746e+01 + -1.309096242932435e+01 -1.310030658057708e+01 -1.310965482696472e+01 -1.311900716861630e+01 -1.312836360566069e+01 + -1.313772413822676e+01 -1.314708876644323e+01 -1.315645749043872e+01 -1.316583031034182e+01 -1.317520722628100e+01 + -1.318458823838463e+01 -1.319397334678105e+01 -1.320336255159842e+01 -1.321275585296490e+01 -1.322215325100852e+01 + -1.323155474585722e+01 -1.324096033763887e+01 -1.325037002648126e+01 -1.325978381251206e+01 -1.326920169585888e+01 + -1.327862367664927e+01 -1.328804975501062e+01 -1.329747993107027e+01 -1.330691420495551e+01 -1.331635257679351e+01 + -1.332579504671135e+01 -1.333524161483602e+01 -1.334469228129447e+01 -1.335414704621346e+01 -1.336360590971979e+01 + -1.337306887194011e+01 -1.338253593300098e+01 -1.339200709302889e+01 -1.340148235215025e+01 -1.341096171049137e+01 + -1.342044516817849e+01 -1.342993272533773e+01 -1.343942438209516e+01 -1.344892013857678e+01 -1.345841999490846e+01 + -1.346792395121599e+01 -1.347743200762512e+01 -1.348694416426146e+01 -1.349646042125059e+01 -1.350598077871795e+01 + -1.351550523678895e+01 -1.352503379558886e+01 -1.353456645524291e+01 -1.354410321587624e+01 -1.355364407761388e+01 + -1.356318904058077e+01 -1.357273810490182e+01 -1.358229127070182e+01 -1.359184853810548e+01 -1.360140990723740e+01 + -1.361097537822217e+01 -1.362054495118421e+01 -1.363011862624790e+01 -1.363969640353754e+01 -1.364927828317732e+01 + -1.365886426529140e+01 -1.366845435000381e+01 -1.367804853743850e+01 -1.368764682771935e+01 -1.369724922097016e+01 + -1.370685571731461e+01 -1.371646631687636e+01 -1.372608101977895e+01 -1.373569982614582e+01 -1.374532273610039e+01 + -1.375494974976591e+01 -1.376458086726563e+01 -1.377421608872267e+01 -1.378385541426007e+01 -1.379349884400080e+01 + -1.380314637806776e+01 -1.381279801658375e+01 -1.382245375967148e+01 -1.383211360745361e+01 -1.384177756005268e+01 + -1.385144561759116e+01 -1.386111778019146e+01 -1.387079404797589e+01 -1.388047442106668e+01 -1.389015889958599e+01 + -1.389984748365586e+01 -1.390954017339831e+01 -1.391923696893523e+01 -1.392893787038843e+01 -1.393864287787969e+01 + -1.394835199153066e+01 -1.395806521146290e+01 -1.396778253779794e+01 -1.397750397065719e+01 -1.398722951016200e+01 + -1.399695915643360e+01 -1.400669290959319e+01 -1.401643076976188e+01 -1.402617273706065e+01 -1.403591881161048e+01 + -1.404566899353222e+01 -1.405542328294662e+01 -1.406518167997440e+01 -1.407494418473618e+01 -1.408471079735248e+01 + -1.409448151794377e+01 -1.410425634663043e+01 -1.411403528353276e+01 -1.412381832877095e+01 -1.413360548246518e+01 + -1.414339674473550e+01 -1.415319211570187e+01 -1.416299159548421e+01 -1.417279518420232e+01 -1.418260288197596e+01 + -1.419241468892480e+01 -1.420223060516842e+01 -1.421205063082630e+01 -1.422187476601790e+01 -1.423170301086254e+01 + -1.424153536547952e+01 -1.425137182998800e+01 -1.426121240450711e+01 -1.427105708915588e+01 -1.428090588405325e+01 + -1.429075878931812e+01 -1.430061580506928e+01 -1.431047693142544e+01 -1.432034216850525e+01 -1.433021151642728e+01 + -1.434008497530999e+01 -1.434996254527182e+01 -1.435984422643108e+01 -1.436973001890603e+01 -1.437961992281484e+01 + -1.438951393827559e+01 -1.439941206540634e+01 -1.440931430432499e+01 -1.441922065514942e+01 -1.442913111799744e+01 + -1.443904569298670e+01 -1.444896438023490e+01 -1.445888717985955e+01 -1.446881409197816e+01 -1.447874511670810e+01 + -1.448868025416669e+01 -1.449861950447122e+01 -1.450856286773882e+01 -1.451851034408659e+01 -1.452846193363157e+01 + -1.453841763649066e+01 -1.454837745278077e+01 -1.455834138261865e+01 -1.456830942612103e+01 -1.457828158340454e+01 + -1.458825785458573e+01 -1.459823823978110e+01 -1.460822273910704e+01 -1.461821135267989e+01 -1.462820408061589e+01 + -1.463820092303125e+01 -1.464820188004203e+01 -1.465820695176426e+01 -1.466821613831393e+01 -1.467822943980689e+01 + -1.468824685635894e+01 -1.469826838808580e+01 -1.470829403510313e+01 -1.471832379752650e+01 -1.472835767547138e+01 + -1.473839566905324e+01 -1.474843777838742e+01 -1.475848400358915e+01 -1.476853434477367e+01 -1.477858880205607e+01 + -1.478864737555144e+01 -1.479871006537472e+01 -1.480877687164081e+01 -1.481884779446456e+01 -1.482892283396069e+01 + -1.483900199024388e+01 -1.484908526342874e+01 -1.485917265362979e+01 -1.486926416096146e+01 -1.487935978553816e+01 + -1.488945952747421e+01 -1.489956338688379e+01 -1.490967136388107e+01 -1.491978345858015e+01 -1.492989967109500e+01 + -1.494002000153960e+01 -1.495014445002777e+01 -1.496027301667331e+01 -1.497040570158993e+01 -1.498054250489127e+01 + -1.499068342669090e+01 -1.500082846710230e+01 -1.501097762623890e+01 -1.502113090421404e+01 -1.503128830114098e+01 + -1.504144981713293e+01 -1.505161545230301e+01 -1.506178520676428e+01 -1.507195908062970e+01 -1.508213707401220e+01 + -1.509231918702461e+01 -1.510250541977967e+01 -1.511269577239009e+01 -1.512289024496847e+01 -1.513308883762737e+01 + -1.514329155047923e+01 -1.515349838363646e+01 -1.516370933721139e+01 -1.517392441131628e+01 -1.518414360606331e+01 + -1.519436692156458e+01 -1.520459435793212e+01 -1.521482591527789e+01 -1.522506159371381e+01 -1.523530139335167e+01 + -1.524554531430324e+01 -1.525579335668019e+01 -1.526604552059410e+01 -1.527630180615655e+01 -1.528656221347897e+01 + -1.529682674267275e+01 -1.530709539384921e+01 -1.531736816711961e+01 -1.532764506259512e+01 -1.533792608038684e+01 + -1.534821122060578e+01 -1.535850048336294e+01 -1.536879386876919e+01 -1.537909137693534e+01 -1.538939300797218e+01 + -1.539969876199036e+01 -1.541000863910047e+01 -1.542032263941310e+01 -1.543064076303865e+01 -1.544096301008754e+01 + -1.545128938067011e+01 -1.546161987489659e+01 -1.547195449287719e+01 -1.548229323472200e+01 -1.549263610054108e+01 + -1.550298309044438e+01 -1.551333420454181e+01 -1.552368944294321e+01 -1.553404880575833e+01 -1.554441229309687e+01 + -1.555477990506846e+01 -1.556515164178263e+01 -1.557552750334888e+01 -1.558590748987663e+01 -1.559629160147516e+01 + -1.560667983825384e+01 -1.561707220032180e+01 -1.562746868778818e+01 -1.563786930076209e+01 -1.564827403935249e+01 + -1.565868290366830e+01 -1.566909589381839e+01 -1.567951300991154e+01 -1.568993425205647e+01 -1.570035962036184e+01 + -1.571078911493622e+01 -1.572122273588812e+01 -1.573166048332596e+01 -1.574210235735813e+01 -1.575254835809295e+01 + -1.576299848563865e+01 -1.577345274010339e+01 -1.578391112159525e+01 -1.579437363022230e+01 -1.580484026609246e+01 + -1.581531102931364e+01 -1.582578591999366e+01 -1.583626493824028e+01 -1.584674808416118e+01 -1.585723535786400e+01 + -1.586772675945627e+01 -1.587822228904548e+01 -1.588872194673904e+01 -1.589922573264433e+01 -1.590973364686858e+01 + -1.592024568951901e+01 -1.593076186070280e+01 -1.594128216052700e+01 -1.595180658909860e+01 -1.596233514652459e+01 + -1.597286783291180e+01 -1.598340464836704e+01 -1.599394559299707e+01 -1.600449066690856e+01 -1.601503987020810e+01 + -1.602559320300223e+01 -1.603615066539742e+01 -1.604671225750006e+01 -1.605727797941650e+01 -1.606784783125301e+01 + -1.607842181311579e+01 -1.608899992511097e+01 -1.609958216734461e+01 -1.611016853992270e+01 -1.612075904295123e+01 + -1.613135367653603e+01 -1.614195244078288e+01 -1.615255533579753e+01 -1.616316236168567e+01 -1.617377351855289e+01 + -1.618438880650469e+01 -1.619500822564661e+01 -1.620563177608400e+01 -1.621625945792220e+01 -1.622689127126649e+01 + -1.623752721622208e+01 -1.624816729289409e+01 -1.625881150138761e+01 -1.626945984180765e+01 -1.628011231425912e+01 + -1.629076891884693e+01 -1.630142965567586e+01 -1.631209452485069e+01 -1.632276352647606e+01 -1.633343666065660e+01 + -1.634411392749686e+01 -1.635479532710131e+01 -1.636548085957436e+01 -1.637617052502041e+01 -1.638686432354368e+01 + -1.639756225524843e+01 -1.640826432023882e+01 -1.641897051861891e+01 -1.642968085049275e+01 -1.644039531596428e+01 + -1.645111391513741e+01 -1.646183664811596e+01 -1.647256351500370e+01 -1.648329451590436e+01 -1.649402965092154e+01 + -1.650476892015881e+01 -1.651551232371968e+01 -1.652625986170761e+01 -1.653701153422597e+01 -1.654776734137807e+01 + -1.655852728326716e+01 -1.656929135999644e+01 -1.658005957166901e+01 -1.659083191838794e+01 -1.660160840025621e+01 + -1.661238901737675e+01 -1.662317376985244e+01 -1.663396265778607e+01 -1.664475568128038e+01 -1.665555284043803e+01 + -1.666635413536163e+01 -1.667715956615375e+01 -1.668796913291686e+01 -1.669878283575336e+01 -1.670960067476562e+01 + -1.672042265005593e+01 -1.673124876172653e+01 -1.674207900987955e+01 -1.675291339461713e+01 -1.676375191604129e+01 + -1.677459457425399e+01 -1.678544136935714e+01 -1.679629230145262e+01 -1.680714737064221e+01 -1.681800657702761e+01 + -1.682886992071048e+01 -1.683973740179243e+01 -1.685060902037498e+01 -1.686148477655961e+01 -1.687236467044772e+01 + -1.688324870214066e+01 -1.689413687173972e+01 -1.690502917934610e+01 -1.691592562506099e+01 -1.692682620898545e+01 + -1.693773093122051e+01 -1.694863979186718e+01 -1.695955279102634e+01 -1.697046992879882e+01 -1.698139120528543e+01 + -1.699231662058690e+01 -1.700324617480385e+01 -1.701417986803690e+01 -1.702511770038659e+01 -1.703605967195339e+01 + -1.704700578283770e+01 -1.705795603313987e+01 -1.706891042296021e+01 -1.707986895239892e+01 -1.709083162155618e+01 + -1.710179843053209e+01 -1.711276937942668e+01 -1.712374446833993e+01 -1.713472369737176e+01 -1.714570706662205e+01 + -1.715669457619057e+01 -1.716768622617706e+01 -1.717868201668118e+01 -1.718968194780258e+01 -1.720068601964076e+01 + -1.721169423229525e+01 -1.722270658586545e+01 -1.723372308045074e+01 -1.724474371615045e+01 -1.725576849306378e+01 + -1.726679741128994e+01 -1.727783047092806e+01 -1.728886767207717e+01 -1.729990901483631e+01 -1.731095449930440e+01 + -1.732200412558034e+01 -1.733305789376294e+01 -1.734411580395096e+01 -1.735517785624309e+01 -1.736624405073797e+01 + -1.737731438753420e+01 -1.738838886673029e+01 -1.739946748842468e+01 -1.741055025271579e+01 -1.742163715970200e+01 + -1.743272820948149e+01 -1.744382340215253e+01 -1.745492273781330e+01 -1.746602621656188e+01 -1.747713383849628e+01 + -1.748824560371452e+01 -1.749936151231451e+01 -1.751048156439410e+01 -1.752160576005110e+01 -1.753273409938323e+01 + -1.754386658248820e+01 -1.755500320946361e+01 -1.756614398040702e+01 -1.757728889541596e+01 -1.758843795458785e+01 + -1.759959115802007e+01 -1.761074850580996e+01 -1.762190999805478e+01 -1.763307563485174e+01 -1.764424541629797e+01 + -1.765541934249057e+01 -1.766659741352658e+01 -1.767777962950295e+01 -1.768896599051661e+01 -1.770015649666441e+01 + -1.771135114804312e+01 -1.772254994474948e+01 -1.773375288688022e+01 -1.774495997453189e+01 -1.775617120780110e+01 + -1.776738658678431e+01 -1.777860611157798e+01 -1.778982978227850e+01 -1.780105759898218e+01 -1.781228956178530e+01 + -1.782352567078408e+01 -1.783476592607465e+01 -1.784601032775310e+01 -1.785725887591547e+01 -1.786851157065773e+01 + -1.787976841207583e+01 -1.789102940026558e+01 -1.790229453532283e+01 -1.791356381734330e+01 -1.792483724642267e+01 + -1.793611482265659e+01 -1.794739654614061e+01 -1.795868241697024e+01 -1.796997243524098e+01 -1.798126660104817e+01 + -1.799256491448719e+01 -1.800386737565330e+01 -1.801517398464174e+01 -1.802648474154767e+01 -1.803779964646620e+01 + -1.804911869949240e+01 -1.806044190072123e+01 -1.807176925024766e+01 -1.808310074816659e+01 -1.809443639457279e+01 + -1.810577618956107e+01 -1.811712013322612e+01 -1.812846822566259e+01 -1.813982046696510e+01 -1.815117685722819e+01 + -1.816253739654631e+01 -1.817390208501391e+01 -1.818527092272536e+01 -1.819664390977498e+01 -1.820802104625699e+01 + -1.821940233226562e+01 -1.823078776789503e+01 -1.824217735323927e+01 -1.825357108839237e+01 -1.826496897344833e+01 + -1.827637100850105e+01 -1.828777719364440e+01 -1.829918752897218e+01 -1.831060201457814e+01 -1.832202065055599e+01 + -1.833344343699933e+01 -1.834487037400176e+01 -1.835630146165681e+01 -1.836773670005793e+01 -1.837917608929855e+01 + -1.839061962947201e+01 -1.840206732067164e+01 -1.841351916299065e+01 -1.842497515652225e+01 -1.843643530135957e+01 + -1.844789959759567e+01 -1.845936804532361e+01 -1.847084064463633e+01 -1.848231739562675e+01 -1.849379829838772e+01 + -1.850528335301203e+01 -1.851677255959244e+01 -1.852826591822165e+01 -1.853976342899227e+01 -1.855126509199690e+01 + -1.856277090732804e+01 -1.857428087507818e+01 -1.858579499533974e+01 -1.859731326820503e+01 -1.860883569376641e+01 + -1.862036227211610e+01 -1.863189300334630e+01 -1.864342788754917e+01 -1.865496692481676e+01 -1.866651011524111e+01 + -1.867805745891420e+01 -1.868960895592794e+01 -1.870116460637422e+01 -1.871272441034482e+01 -1.872428836793151e+01 + -1.873585647922603e+01 -1.874742874431993e+01 -1.875900516330489e+01 -1.877058573627242e+01 -1.878217046331398e+01 + -1.879375934452104e+01 -1.880535237998496e+01 -1.881694956979709e+01 -1.882855091404863e+01 -1.884015641283084e+01 + -1.885176606623487e+01 -1.886337987435184e+01 -1.887499783727278e+01 -1.888661995508869e+01 -1.889824622789052e+01 + -1.890987665576915e+01 -1.892151123881543e+01 -1.893314997712013e+01 -1.894479287077399e+01 -1.895643991986767e+01 + -1.896809112449181e+01 -1.897974648473697e+01 -1.899140600069364e+01 -1.900306967245233e+01 -1.901473750010340e+01 + -1.902640948373722e+01 -1.903808562344410e+01 -1.904976591931430e+01 -1.906145037143798e+01 -1.907313897990529e+01 + -1.908483174480633e+01 -1.909652866623112e+01 -1.910822974426967e+01 -1.911993497901187e+01 -1.913164437054759e+01 + -1.914335791896669e+01 -1.915507562435895e+01 -1.916679748681404e+01 -1.917852350642165e+01 -1.919025368327139e+01 + -1.920198801745281e+01 -1.921372650905543e+01 -1.922546915816869e+01 -1.923721596488198e+01 -1.924896692928468e+01 + -1.926072205146606e+01 -1.927248133151537e+01 -1.928424476952181e+01 -1.929601236557450e+01 -1.930778411976254e+01 + -1.931956003217496e+01 -1.933134010290073e+01 -1.934312433202880e+01 -1.935491271964804e+01 -1.936670526584726e+01 + -1.937850197071525e+01 -1.939030283434073e+01 -1.940210785681236e+01 -1.941391703821875e+01 -1.942573037864850e+01 + -1.943754787819008e+01 -1.944936953693195e+01 -1.946119535496258e+01 -1.947302533237027e+01 -1.948485946924335e+01 + -1.949669776567007e+01 -1.950854022173860e+01 -1.952038683753714e+01 -1.953223761315377e+01 -1.954409254867653e+01 + -1.955595164419345e+01 -1.956781489979243e+01 -1.957968231556140e+01 -1.959155389158818e+01 -1.960342962796057e+01 + -1.961530952476630e+01 -1.962719358209308e+01 -1.963908180002853e+01 -1.965097417866025e+01 -1.966287071807577e+01 + -1.967477141836255e+01 -1.968667627960809e+01 -1.969858530189970e+01 -1.971049848532474e+01 -1.972241582997051e+01 + -1.973433733592421e+01 -1.974626300327305e+01 -1.975819283210412e+01 -1.977012682250453e+01 -1.978206497456128e+01 + -1.979400728836138e+01 -1.980595376399175e+01 -1.981790440153923e+01 -1.982985920109068e+01 -1.984181816273287e+01 + -1.985378128655253e+01 -1.986574857263631e+01 -1.987772002107083e+01 -1.988969563194270e+01 -1.990167540533842e+01 + -1.991365934134447e+01 -1.992564744004727e+01 -1.993763970153319e+01 -1.994963612588854e+01 -1.996163671319962e+01 + -1.997364146355264e+01 -1.998565037703377e+01 -1.999766345372915e+01 -2.000968069372482e+01 -2.002170209710683e+01 + -2.003372766396113e+01 -2.004575739437366e+01 -2.005779128843031e+01 -2.006982934621686e+01 -2.008187156781912e+01 + -2.009391795332281e+01 -2.010596850281361e+01 -2.011802321637712e+01 -2.013008209409893e+01 -2.014214513606458e+01 + -2.015421234235953e+01 -2.016628371306920e+01 -2.017835924827902e+01 -2.019043894807426e+01 -2.020252281254022e+01 + -2.021461084176214e+01 -2.022670303582521e+01 -2.023879939481453e+01 -2.025089991881520e+01 -2.026300460791226e+01 + -2.027511346219072e+01 -2.028722648173548e+01 -2.029934366663143e+01 -2.031146501696343e+01 -2.032359053281625e+01 + -2.033572021427463e+01 -2.034785406142328e+01 -2.035999207434686e+01 -2.037213425312991e+01 -2.038428059785702e+01 + -2.039643110861268e+01 -2.040858578548134e+01 -2.042074462854739e+01 -2.043290763789519e+01 -2.044507481360905e+01 + -2.045724615577321e+01 -2.046942166447188e+01 -2.048160133978925e+01 -2.049378518180939e+01 -2.050597319061637e+01 + -2.051816536629423e+01 -2.053036170892692e+01 -2.054256221859834e+01 -2.055476689539240e+01 -2.056697573939288e+01 + -2.057918875068358e+01 -2.059140592934823e+01 -2.060362727547048e+01 -2.061585278913398e+01 -2.062808247042230e+01 + -2.064031631941898e+01 -2.065255433620753e+01 -2.066479652087135e+01 -2.067704287349386e+01 -2.068929339415838e+01 + -2.070154808294823e+01 -2.071380693994664e+01 -2.072606996523682e+01 -2.073833715890192e+01 -2.075060852102504e+01 + -2.076288405168924e+01 -2.077516375097752e+01 -2.078744761897289e+01 -2.079973565575823e+01 -2.081202786141640e+01 + -2.082432423603023e+01 -2.083662477968250e+01 -2.084892949245593e+01 -2.086123837443321e+01 -2.087355142569699e+01 + -2.088586864632980e+01 -2.089819003641422e+01 -2.091051559603275e+01 -2.092284532526780e+01 -2.093517922420180e+01 + -2.094751729291707e+01 -2.095985953149594e+01 -2.097220594002067e+01 -2.098455651857344e+01 -2.099691126723646e+01 + -2.100927018609180e+01 -2.102163327522155e+01 -2.103400053470775e+01 -2.104637196463234e+01 -2.105874756507729e+01 + -2.107112733612447e+01 -2.108351127785571e+01 -2.109589939035282e+01 -2.110829167369750e+01 -2.112068812797150e+01 + -2.113308875325646e+01 -2.114549354963396e+01 -2.115790251718560e+01 -2.117031565599286e+01 -2.118273296613722e+01 + -2.119515444770009e+01 -2.120758010076286e+01 -2.122000992540686e+01 -2.123244392171337e+01 -2.124488208976363e+01 + -2.125732442963882e+01 -2.126977094142008e+01 -2.128222162518853e+01 -2.129467648102522e+01 -2.130713550901114e+01 + -2.131959870922728e+01 -2.133206608175453e+01 -2.134453762667377e+01 -2.135701334406582e+01 -2.136949323401145e+01 + -2.138197729659143e+01 -2.139446553188642e+01 -2.140695793997705e+01 -2.141945452094395e+01 -2.143195527486767e+01 + -2.144446020182869e+01 -2.145696930190748e+01 -2.146948257518445e+01 -2.148200002173999e+01 -2.149452164165442e+01 + -2.150704743500799e+01 -2.151957740188097e+01 -2.153211154235353e+01 -2.154464985650582e+01 -2.155719234441795e+01 + -2.156973900616996e+01 -2.158228984184187e+01 -2.159484485151362e+01 -2.160740403526515e+01 -2.161996739317633e+01 + -2.163253492532698e+01 -2.164510663179689e+01 -2.165768251266581e+01 -2.167026256801343e+01 -2.168284679791940e+01 + -2.169543520246331e+01 -2.170802778172475e+01 -2.172062453578319e+01 -2.173322546471815e+01 -2.174583056860904e+01 + -2.175843984753521e+01 -2.177105330157605e+01 -2.178367093081085e+01 -2.179629273531881e+01 -2.180891871517916e+01 + -2.182154887047106e+01 -2.183418320127365e+01 -2.184682170766598e+01 -2.185946438972706e+01 -2.187211124753590e+01 + -2.188476228117145e+01 -2.189741749071255e+01 -2.191007687623811e+01 -2.192274043782690e+01 -2.193540817555769e+01 + -2.194808008950921e+01 -2.196075617976013e+01 -2.197343644638909e+01 -2.198612088947466e+01 -2.199880950909536e+01 + -2.201150230532973e+01 -2.202419927825622e+01 -2.203690042795324e+01 -2.204960575449914e+01 -2.206231525797226e+01 + -2.207502893845087e+01 -2.208774679601321e+01 -2.210046883073749e+01 -2.211319504270184e+01 -2.212592543198436e+01 + -2.213865999866312e+01 -2.215139874281616e+01 -2.216414166452144e+01 -2.217688876385687e+01 -2.218964004090036e+01 + -2.220239549572977e+01 -2.221515512842288e+01 -2.222791893905746e+01 -2.224068692771121e+01 -2.225345909446181e+01 + -2.226623543938691e+01 -2.227901596256408e+01 -2.229180066407084e+01 -2.230458954398474e+01 -2.231738260238319e+01 + -2.233017983934365e+01 -2.234298125494343e+01 -2.235578684925991e+01 -2.236859662237037e+01 -2.238141057435201e+01 + -2.239422870528208e+01 -2.240705101523771e+01 -2.241987750429605e+01 -2.243270817253411e+01 -2.244554302002896e+01 + -2.245838204685760e+01 -2.247122525309695e+01 -2.248407263882387e+01 -2.249692420411528e+01 -2.250977994904799e+01 + -2.252263987369876e+01 -2.253550397814432e+01 -2.254837226246134e+01 -2.256124472672649e+01 -2.257412137101638e+01 + -2.258700219540754e+01 -2.259988719997652e+01 -2.261277638479978e+01 -2.262566974995376e+01 -2.263856729551485e+01 + -2.265146902155941e+01 -2.266437492816374e+01 -2.267728501540410e+01 -2.269019928335671e+01 -2.270311773209779e+01 + -2.271604036170341e+01 -2.272896717224975e+01 -2.274189816381280e+01 -2.275483333646860e+01 -2.276777269029312e+01 + -2.278071622536228e+01 -2.279366394175199e+01 -2.280661583953809e+01 -2.281957191879638e+01 -2.283253217960263e+01 + -2.284549662203253e+01 -2.285846524616180e+01 -2.287143805206607e+01 -2.288441503982093e+01 -2.289739620950192e+01 + -2.291038156118458e+01 -2.292337109494437e+01 -2.293636481085672e+01 -2.294936270899702e+01 -2.296236478944061e+01 + -2.297537105226282e+01 -2.298838149753889e+01 -2.300139612534404e+01 -2.301441493575349e+01 -2.302743792884234e+01 + -2.304046510468572e+01 -2.305349646335867e+01 -2.306653200493623e+01 -2.307957172949336e+01 -2.309261563710498e+01 + -2.310566372784601e+01 -2.311871600179128e+01 -2.313177245901563e+01 -2.314483309959382e+01 -2.315789792360058e+01 + -2.317096693111059e+01 -2.318404012219852e+01 -2.319711749693895e+01 -2.321019905540647e+01 -2.322328479767561e+01 + -2.323637472382083e+01 -2.324946883391661e+01 -2.326256712803733e+01 -2.327566960625736e+01 -2.328877626865102e+01 + -2.330188711529259e+01 -2.331500214625633e+01 -2.332812136161644e+01 -2.334124476144705e+01 -2.335437234582229e+01 + -2.336750411481627e+01 -2.338064006850303e+01 -2.339378020695653e+01 -2.340692453025074e+01 -2.342007303845959e+01 + -2.343322573165697e+01 -2.344638260991669e+01 -2.345954367331259e+01 -2.347270892191841e+01 -2.348587835580782e+01 + -2.349905197505456e+01 -2.351222977973224e+01 -2.352541176991446e+01 -2.353859794567478e+01 -2.355178830708672e+01 + -2.356498285422376e+01 -2.357818158715934e+01 -2.359138450596683e+01 -2.360459161071962e+01 -2.361780290149102e+01 + -2.363101837835428e+01 -2.364423804138269e+01 -2.365746189064944e+01 -2.367068992622763e+01 -2.368392214819045e+01 + -2.369715855661094e+01 -2.371039915156216e+01 -2.372364393311708e+01 -2.373689290134870e+01 -2.375014605632993e+01 + -2.376340339813362e+01 -2.377666492683266e+01 -2.378993064249982e+01 -2.380320054520788e+01 -2.381647463502954e+01 + -2.382975291203750e+01 -2.384303537630443e+01 -2.385632202790291e+01 -2.386961286690548e+01 -2.388290789338473e+01 + -2.389620710741313e+01 -2.390951050906306e+01 -2.392281809840703e+01 -2.393612987551737e+01 -2.394944584046639e+01 + -2.396276599332641e+01 -2.397609033416966e+01 -2.398941886306839e+01 -2.400275158009476e+01 -2.401608848532087e+01 + -2.402942957881890e+01 -2.404277486066081e+01 -2.405612433091868e+01 -2.406947798966452e+01 -2.408283583697019e+01 + -2.409619787290764e+01 -2.410956409754875e+01 -2.412293451096532e+01 -2.413630911322914e+01 -2.414968790441197e+01 + -2.416307088458552e+01 -2.417645805382147e+01 -2.418984941219141e+01 -2.420324495976698e+01 -2.421664469661973e+01 + -2.423004862282117e+01 -2.424345673844275e+01 -2.425686904355595e+01 -2.427028553823217e+01 -2.428370622254276e+01 + -2.429713109655905e+01 -2.431056016035234e+01 -2.432399341399387e+01 -2.433743085755482e+01 -2.435087249110641e+01 + -2.436431831471977e+01 -2.437776832846597e+01 -2.439122253241606e+01 -2.440468092664110e+01 -2.441814351121206e+01 + -2.443161028619986e+01 -2.444508125167544e+01 -2.445855640770962e+01 -2.447203575437328e+01 -2.448551929173719e+01 + -2.449900701987211e+01 -2.451249893884875e+01 -2.452599504873780e+01 -2.453949534960988e+01 -2.455299984153561e+01 + -2.456650852458554e+01 -2.458002139883023e+01 -2.459353846434012e+01 -2.460705972118571e+01 -2.462058516943738e+01 + -2.463411480916553e+01 -2.464764864044048e+01 -2.466118666333255e+01 -2.467472887791197e+01 -2.468827528424903e+01 + -2.470182588241386e+01 -2.471538067247662e+01 -2.472893965450746e+01 -2.474250282857641e+01 -2.475607019475353e+01 + -2.476964175310885e+01 -2.478321750371228e+01 -2.479679744663381e+01 -2.481038158194328e+01 -2.482396990971055e+01 + -2.483756243000544e+01 -2.485115914289775e+01 -2.486476004845720e+01 -2.487836514675349e+01 -2.489197443785630e+01 + -2.490558792183528e+01 -2.491920559875997e+01 -2.493282746869996e+01 -2.494645353172479e+01 -2.496008378790389e+01 + -2.497371823730673e+01 -2.498735688000273e+01 -2.500099971606127e+01 -2.501464674555166e+01 -2.502829796854320e+01 + -2.504195338510515e+01 -2.505561299530673e+01 -2.506927679921718e+01 -2.508294479690558e+01 -2.509661698844103e+01 + -2.511029337389272e+01 -2.512397395332960e+01 -2.513765872682068e+01 -2.515134769443495e+01 -2.516504085624134e+01 + -2.517873821230874e+01 -2.519243976270600e+01 -2.520614550750195e+01 -2.521985544676539e+01 -2.523356958056503e+01 + -2.524728790896962e+01 -2.526101043204782e+01 -2.527473714986825e+01 -2.528846806249956e+01 -2.530220317001030e+01 + -2.531594247246897e+01 -2.532968596994411e+01 -2.534343366250413e+01 -2.535718555021750e+01 -2.537094163315259e+01 + -2.538470191137773e+01 -2.539846638496126e+01 -2.541223505397144e+01 -2.542600791847653e+01 -2.543978497854471e+01 + -2.545356623424417e+01 -2.546735168564306e+01 -2.548114133280943e+01 -2.549493517581139e+01 -2.550873321471695e+01 + -2.552253544959407e+01 -2.553634188051073e+01 -2.555015250753488e+01 -2.556396733073435e+01 -2.557778635017700e+01 + -2.559160956593068e+01 -2.560543697806314e+01 -2.561926858664212e+01 -2.563310439173529e+01 -2.564694439341039e+01 + -2.566078859173501e+01 -2.567463698677673e+01 -2.568848957860316e+01 -2.570234636728179e+01 -2.571620735288014e+01 + -2.573007253546564e+01 -2.574394191510572e+01 -2.575781549186777e+01 -2.577169326581913e+01 -2.578557523702712e+01 + -2.579946140555903e+01 -2.581335177148208e+01 -2.582724633486350e+01 -2.584114509577047e+01 -2.585504805427009e+01 + -2.586895521042949e+01 -2.588286656431574e+01 -2.589678211599587e+01 -2.591070186553685e+01 -2.592462581300569e+01 + -2.593855395846929e+01 -2.595248630199453e+01 -2.596642284364830e+01 -2.598036358349740e+01 -2.599430852160862e+01 + -2.600825765804873e+01 -2.602221099288441e+01 -2.603616852618238e+01 -2.605013025800926e+01 -2.606409618843168e+01 + -2.607806631751622e+01 -2.609204064532942e+01 -2.610601917193777e+01 -2.612000189740776e+01 -2.613398882180584e+01 + -2.614797994519840e+01 -2.616197526765180e+01 -2.617597478923238e+01 -2.618997851000648e+01 -2.620398643004031e+01 + -2.621799854940012e+01 -2.623201486815213e+01 -2.624603538636246e+01 -2.626006010409728e+01 -2.627408902142266e+01 + -2.628812213840468e+01 -2.630215945510933e+01 -2.631620097160262e+01 -2.633024668795051e+01 -2.634429660421891e+01 + -2.635835072047372e+01 -2.637240903678078e+01 -2.638647155320592e+01 -2.640053826981492e+01 -2.641460918667354e+01 + -2.642868430384748e+01 -2.644276362140242e+01 -2.645684713940401e+01 -2.647093485791788e+01 -2.648502677700959e+01 + -2.649912289674470e+01 -2.651322321718873e+01 -2.652732773840713e+01 -2.654143646046535e+01 -2.655554938342882e+01 + -2.656966650736290e+01 -2.658378783233291e+01 -2.659791335840421e+01 -2.661204308564203e+01 -2.662617701411162e+01 + -2.664031514387820e+01 -2.665445747500694e+01 -2.666860400756296e+01 -2.668275474161138e+01 -2.669690967721731e+01 + -2.671106881444569e+01 -2.672523215336161e+01 -2.673939969403001e+01 -2.675357143651582e+01 -2.676774738088396e+01 + -2.678192752719928e+01 -2.679611187552664e+01 -2.681030042593083e+01 -2.682449317847661e+01 -2.683869013322872e+01 + -2.685289129025187e+01 -2.686709664961073e+01 -2.688130621136993e+01 -2.689551997559407e+01 -2.690973794234772e+01 + -2.692396011169542e+01 -2.693818648370168e+01 -2.695241705843095e+01 -2.696665183594765e+01 -2.698089081631622e+01 + -2.699513399960103e+01 -2.700938138586637e+01 -2.702363297517659e+01 -2.703788876759596e+01 -2.705214876318866e+01 + -2.706641296201895e+01 -2.708068136415098e+01 -2.709495396964889e+01 -2.710923077857680e+01 -2.712351179099876e+01 + -2.713779700697879e+01 -2.715208642658092e+01 -2.716638004986914e+01 -2.718067787690738e+01 -2.719497990775952e+01 + -2.720928614248944e+01 -2.722359658116101e+01 -2.723791122383802e+01 -2.725223007058424e+01 -2.726655312146341e+01 + -2.728088037653925e+01 -2.729521183587545e+01 -2.730954749953563e+01 -2.732388736758342e+01 -2.733823144008240e+01 + -2.735257971709608e+01 -2.736693219868803e+01 -2.738128888492171e+01 -2.739564977586055e+01 -2.741001487156796e+01 + -2.742438417210737e+01 -2.743875767754211e+01 -2.745313538793548e+01 -2.746751730335079e+01 -2.748190342385128e+01 + -2.749629374950018e+01 -2.751068828036066e+01 -2.752508701649591e+01 -2.753948995796905e+01 -2.755389710484315e+01 + -2.756830845718126e+01 -2.758272401504645e+01 -2.759714377850172e+01 -2.761156774760998e+01 -2.762599592243420e+01 + -2.764042830303727e+01 -2.765486488948205e+01 -2.766930568183139e+01 -2.768375068014808e+01 -2.769819988449490e+01 + -2.771265329493459e+01 -2.772711091152985e+01 -2.774157273434337e+01 -2.775603876343777e+01 -2.777050899887569e+01 + -2.778498344071966e+01 -2.779946208903228e+01 -2.781394494387606e+01 -2.782843200531343e+01 -2.784292327340690e+01 + -2.785741874821889e+01 -2.787191842981172e+01 -2.788642231824782e+01 -2.790093041358950e+01 -2.791544271589903e+01 + -2.792995922523869e+01 -2.794447994167069e+01 -2.795900486525725e+01 -2.797353399606052e+01 -2.798806733414265e+01 + -2.800260487956574e+01 -2.801714663239184e+01 -2.803169259268302e+01 -2.804624276050129e+01 -2.806079713590860e+01 + -2.807535571896690e+01 -2.808991850973810e+01 -2.810448550828411e+01 -2.811905671466677e+01 -2.813363212894789e+01 + -2.814821175118929e+01 -2.816279558145268e+01 -2.817738361979981e+01 -2.819197586629237e+01 -2.820657232099202e+01 + -2.822117298396042e+01 -2.823577785525915e+01 -2.825038693494977e+01 -2.826500022309382e+01 -2.827961771975282e+01 + -2.829423942498824e+01 -2.830886533886155e+01 -2.832349546143411e+01 -2.833812979276735e+01 -2.835276833292260e+01 + -2.836741108196119e+01 -2.838205803994442e+01 -2.839670920693353e+01 -2.841136458298974e+01 -2.842602416817427e+01 + -2.844068796254828e+01 -2.845535596617291e+01 -2.847002817910925e+01 -2.848470460141837e+01 -2.849938523316133e+01 + -2.851407007439914e+01 -2.852875912519278e+01 -2.854345238560320e+01 -2.855814985569130e+01 -2.857285153551803e+01 + -2.858755742514416e+01 -2.860226752463057e+01 -2.861698183403805e+01 -2.863170035342737e+01 -2.864642308285926e+01 + -2.866115002239442e+01 -2.867588117209353e+01 -2.869061653201725e+01 -2.870535610222617e+01 -2.872009988278089e+01 + -2.873484787374193e+01 -2.874960007516984e+01 -2.876435648712514e+01 -2.877911710966824e+01 -2.879388194285957e+01 + -2.880865098675957e+01 -2.882342424142859e+01 -2.883820170692696e+01 -2.885298338331501e+01 -2.886776927065301e+01 + -2.888255936900120e+01 -2.889735367841981e+01 -2.891215219896903e+01 -2.892695493070900e+01 -2.894176187369987e+01 + -2.895657302800172e+01 -2.897138839367463e+01 -2.898620797077864e+01 -2.900103175937375e+01 -2.901585975951993e+01 + -2.903069197127715e+01 -2.904552839470532e+01 -2.906036902986429e+01 -2.907521387681397e+01 -2.909006293561415e+01 + -2.910491620632466e+01 -2.911977368900527e+01 -2.913463538371567e+01 -2.914950129051561e+01 -2.916437140946474e+01 + 7.449748552403716e+00 7.440274286952747e+00 7.430808310268183e+00 7.421350618650946e+00 7.411901208401943e+00 + 7.402460075822085e+00 7.393027217212294e+00 7.383602628873483e+00 7.374186307106561e+00 7.364778248212446e+00 + 7.355378448492054e+00 7.345986904246303e+00 7.336603611776096e+00 7.327228567382356e+00 7.317861767365994e+00 + 7.308503208027930e+00 7.299152885669068e+00 7.289810796590328e+00 7.280476937092629e+00 7.271151303476885e+00 + 7.261833892043997e+00 7.252524699094894e+00 7.243223720930485e+00 7.233930953851689e+00 7.224646394159410e+00 + 7.215370038154571e+00 7.206101882138086e+00 7.196841922410868e+00 7.187590155273826e+00 7.178346577027882e+00 + 7.169111183973944e+00 7.159883972412940e+00 7.150664938645765e+00 7.141454078973349e+00 7.132251389696595e+00 + 7.123056867116428e+00 7.113870507533756e+00 7.104692307249493e+00 7.095522262564555e+00 7.086360369779857e+00 + 7.077206625196316e+00 7.068061025114840e+00 7.058923565836346e+00 7.049794243661749e+00 7.040673054891966e+00 + 7.031559995827907e+00 7.022455062770489e+00 7.013358252020626e+00 7.004269559879234e+00 6.995188982647222e+00 + 6.986116516625509e+00 6.977052158115008e+00 6.967995903416638e+00 6.958947748831303e+00 6.949907690659927e+00 + 6.940875725203417e+00 6.931851848762698e+00 6.922836057638674e+00 6.913828348132264e+00 6.904828716544380e+00 + 6.895837159175943e+00 6.886853672327859e+00 6.877878252301045e+00 6.868910895396416e+00 6.859951597914893e+00 + 6.851000356157376e+00 6.842057166424788e+00 6.833122025018049e+00 6.824194928238065e+00 6.815275872385751e+00 + 6.806364853762022e+00 6.797461868667795e+00 6.788566913403985e+00 6.779679984271501e+00 6.770801077571264e+00 + 6.761930189604184e+00 6.753067316671174e+00 6.744212455073155e+00 6.735365601111038e+00 6.726526751085733e+00 + 6.717695901298162e+00 6.708873048049234e+00 6.700058187639864e+00 6.691251316370970e+00 6.682452430543458e+00 + 6.673661526458257e+00 6.664878600416264e+00 6.656103648718408e+00 6.647336667665596e+00 6.638577653558744e+00 + 6.629826602698767e+00 6.621083511386575e+00 6.612348375923091e+00 6.603621192609224e+00 6.594901957745887e+00 + 6.586190667633998e+00 6.577487318574468e+00 6.568791906868217e+00 6.560104428816153e+00 6.551424880719193e+00 + 6.542753258878250e+00 6.534089559594239e+00 6.525433779168082e+00 6.516785913900680e+00 6.508145960092954e+00 + 6.499513914045822e+00 6.490889772060197e+00 6.482273530436986e+00 6.473665185477110e+00 6.465064733481483e+00 + 6.456472170751022e+00 6.447887493586633e+00 6.439310698289239e+00 6.430741781159745e+00 6.422180738499080e+00 + 6.413627566608140e+00 6.405082261787855e+00 6.396544820339130e+00 6.388015238562886e+00 6.379493512760035e+00 + 6.370979639231489e+00 6.362473614278163e+00 6.353975434200977e+00 6.345485095300834e+00 6.337002593878659e+00 + 6.328527926235364e+00 6.320061088671859e+00 6.311602077489063e+00 6.303150888987892e+00 6.294707519469250e+00 + 6.286271965234064e+00 6.277844222583243e+00 6.269424287817700e+00 6.261012157238352e+00 6.252607827146113e+00 + 6.244211293841897e+00 6.235822553626615e+00 6.227441602801187e+00 6.219068437666524e+00 6.210703054523544e+00 + 6.202345449673155e+00 6.193995619416278e+00 6.185653560053824e+00 6.177319267886713e+00 6.168992739215846e+00 + 6.160673970342149e+00 6.152362957566535e+00 6.144059697189917e+00 6.135764185513209e+00 6.127476418837322e+00 + 6.119196393463177e+00 6.110924105691685e+00 6.102659551823761e+00 6.094402728160317e+00 6.086153631002272e+00 + 6.077912256650539e+00 6.069678601406028e+00 6.061452661569658e+00 6.053234433442346e+00 6.045023913324998e+00 + 6.036821097518535e+00 6.028625982323868e+00 6.020438564041912e+00 6.012258838973590e+00 6.004086803419803e+00 + 5.995922453681469e+00 5.987765786059505e+00 5.979616796854827e+00 5.971475482368347e+00 5.963341838900981e+00 + 5.955215862753640e+00 5.947097550227241e+00 5.938986897622698e+00 5.930883901240926e+00 5.922788557382836e+00 + 5.914700862349350e+00 5.906620812441375e+00 5.898548403959829e+00 5.890483633205628e+00 5.882426496479678e+00 + 5.874376990082901e+00 5.866335110316212e+00 5.858300853480523e+00 5.850274215876746e+00 5.842255193805799e+00 + 5.834243783568593e+00 5.826239981466046e+00 5.818243783799075e+00 5.810255186868586e+00 5.802274186975501e+00 + 5.794300780420730e+00 5.786334963505190e+00 5.778376732529792e+00 5.770426083795454e+00 5.762483013603089e+00 + 5.754547518253611e+00 5.746619594047938e+00 5.738699237286976e+00 5.730786444271647e+00 5.722881211302861e+00 + 5.714983534681539e+00 5.707093410708588e+00 5.699210835684924e+00 5.691335805911462e+00 5.683468317689121e+00 + 5.675608367318810e+00 5.667755951101442e+00 5.659911065337940e+00 5.652073706329210e+00 5.644243870376168e+00 + 5.636421553779730e+00 5.628606752840809e+00 5.620799463860322e+00 5.612999683139186e+00 5.605207406978303e+00 + 5.597422631678601e+00 5.589645353540985e+00 5.581875568866377e+00 5.574113273955689e+00 5.566358465109827e+00 + 5.558611138629720e+00 5.550871290816275e+00 5.543138917970402e+00 5.535414016393023e+00 5.527696582385046e+00 + 5.519986612247392e+00 5.512284102280971e+00 5.504589048786700e+00 5.496901448065488e+00 5.489221296418261e+00 + 5.481548590145919e+00 5.473883325549383e+00 5.466225498929572e+00 5.458575106587391e+00 5.450932144823761e+00 + 5.443296609939598e+00 5.435668498235811e+00 5.428047806013317e+00 5.420434529573027e+00 5.412828665215861e+00 + 5.405230209242731e+00 5.397639157954551e+00 5.390055507652236e+00 5.382479254636699e+00 5.374910395208857e+00 + 5.367348925669623e+00 5.359794842319912e+00 5.352248141460633e+00 5.344708819392708e+00 5.337176872417052e+00 + 5.329652296834572e+00 5.322135088946189e+00 5.314625245052812e+00 5.307122761455358e+00 5.299627634454744e+00 + 5.292139860351884e+00 5.284659435447683e+00 5.277186356043069e+00 5.269720618438948e+00 5.262262218936239e+00 + 5.254811153835849e+00 5.247367419438702e+00 5.239931012045707e+00 5.232501927957779e+00 5.225080163475835e+00 + 5.217665714900781e+00 5.210258578533542e+00 5.202858750675028e+00 5.195466227626151e+00 5.188081005687826e+00 + 5.180703081160972e+00 5.173332450346505e+00 5.165969109545332e+00 5.158613055058364e+00 5.151264283186531e+00 + 5.143922790230733e+00 5.136588572491892e+00 5.129261626270917e+00 5.121941947868726e+00 5.114629533586237e+00 + 5.107324379724356e+00 5.100026482584002e+00 5.092735838466089e+00 5.085452443671536e+00 5.078176294501248e+00 + 5.070907387256145e+00 5.063645718237141e+00 5.056391283745152e+00 5.049144080081089e+00 5.041904103545868e+00 + 5.034671350440405e+00 5.027445817065611e+00 5.020227499722402e+00 5.013016394711695e+00 5.005812498334395e+00 + 4.998615806891434e+00 4.991426316683708e+00 4.984244024012141e+00 4.977068925177646e+00 4.969901016481134e+00 + 4.962740294223531e+00 4.955586754705736e+00 4.948440394228673e+00 4.941301209093250e+00 4.934169195600390e+00 + 4.927044350050998e+00 4.919926668745995e+00 4.912816147986291e+00 4.905712784072808e+00 4.898616573306450e+00 + 4.891527511988138e+00 4.884445596418789e+00 4.877370822899310e+00 4.870303187730615e+00 4.863242687213626e+00 + 4.856189317649255e+00 4.849143075338413e+00 4.842103956582020e+00 4.835071957680982e+00 4.828047074936220e+00 + 4.821029304648649e+00 4.814018643119177e+00 4.807015086648722e+00 4.800018631538205e+00 4.793029274088528e+00 + 4.786047010600616e+00 4.779071837375377e+00 4.772103750713725e+00 4.765142746916582e+00 4.758188822284858e+00 + 4.751241973119460e+00 4.744302195721311e+00 4.737369486391331e+00 4.730443841430419e+00 4.723525257139500e+00 + 4.716613729819484e+00 4.709709255771290e+00 4.702811831295831e+00 4.695921452694015e+00 4.689038116266763e+00 + 4.682161818314993e+00 4.675292555139608e+00 4.668430323041531e+00 4.661575118321675e+00 4.654726937280952e+00 + 4.647885776220280e+00 4.641051631440568e+00 4.634224499242733e+00 4.627404375927694e+00 4.620591257796361e+00 + 4.613785141149650e+00 4.606986022288469e+00 4.600193897513741e+00 4.593408763126378e+00 4.586630615427295e+00 + 4.579859450717403e+00 4.573095265297614e+00 4.566338055468856e+00 4.559587817532028e+00 4.552844547788051e+00 + 4.546108242537840e+00 4.539378898082311e+00 4.532656510722372e+00 4.525941076758944e+00 4.519232592492937e+00 + 4.512531054225266e+00 4.505836458256852e+00 4.499148800888596e+00 4.492468078421423e+00 4.485794287156247e+00 + 4.479127423393980e+00 4.472467483435537e+00 4.465814463581832e+00 4.459168360133774e+00 4.452529169392290e+00 + 4.445896887658285e+00 4.439271511232674e+00 4.432653036416372e+00 4.426041459510297e+00 4.419436776815360e+00 + 4.412838984632476e+00 4.406248079262558e+00 4.399664057006524e+00 4.393086914165290e+00 4.386516647039763e+00 + 4.379953251930861e+00 4.373396725139497e+00 4.366847062966593e+00 4.360304261713053e+00 4.353768317679795e+00 + 4.347239227167735e+00 4.340716986477791e+00 4.334201591910872e+00 4.327693039767889e+00 4.321191326349767e+00 + 4.314696447957408e+00 4.308208400891736e+00 4.301727181453665e+00 4.295252785944103e+00 4.288785210663970e+00 + 4.282324451914175e+00 4.275870505995640e+00 4.269423369209271e+00 4.262983037855993e+00 4.256549508236708e+00 + 4.250122776652339e+00 4.243702839403795e+00 4.237289692791999e+00 4.230883333117855e+00 4.224483756682286e+00 + 4.218090959786202e+00 4.211704938730516e+00 4.205325689816143e+00 4.198953209343999e+00 4.192587493615001e+00 + 4.186228538930060e+00 4.179876341590091e+00 4.173530897896007e+00 4.167192204148724e+00 4.160860256649157e+00 + 4.154535051698218e+00 4.148216585596824e+00 4.141904854645890e+00 4.135599855146328e+00 4.129301583399053e+00 + 4.123010035704979e+00 4.116725208365024e+00 4.110447097680097e+00 4.104175699951115e+00 4.097911011478995e+00 + 4.091653028564644e+00 4.085401747508985e+00 4.079157164612928e+00 4.072919276177387e+00 4.066688078503279e+00 + 4.060463567891515e+00 4.054245740643011e+00 4.048034593058679e+00 4.041830121439440e+00 4.035632322086207e+00 + 4.029441191299887e+00 4.023256725381402e+00 4.017078920631661e+00 4.010907773351583e+00 4.004743279842081e+00 + 3.998585436404068e+00 3.992434239338456e+00 3.986289684946170e+00 3.980151769528111e+00 3.974020489385205e+00 + 3.967895840818355e+00 3.961777820128482e+00 3.955666423616504e+00 3.949561647583328e+00 3.943463488329874e+00 + 3.937371942157053e+00 3.931287005365778e+00 3.925208674256968e+00 3.919136945131536e+00 3.913071814290392e+00 + 3.907013278034458e+00 3.900961332664644e+00 3.894915974481865e+00 3.888877199787032e+00 3.882845004881065e+00 + 3.876819386064878e+00 3.870800339639380e+00 3.864787861905489e+00 3.858781949164122e+00 3.852782597716192e+00 + 3.846789803862609e+00 3.840803563904289e+00 3.834823874142153e+00 3.828850730877108e+00 3.822884130410067e+00 + 3.816924069041952e+00 3.810970543073673e+00 3.805023548806148e+00 3.799083082540284e+00 3.793149140577000e+00 + 3.787221719217213e+00 3.781300814761833e+00 3.775386423511777e+00 3.769478541767957e+00 3.763577165831291e+00 + 3.757682292002690e+00 3.751793916583069e+00 3.745912035873344e+00 3.740036646174429e+00 3.734167743787238e+00 + 3.728305325012684e+00 3.722449386151683e+00 3.716599923505150e+00 3.710756933373999e+00 3.704920412059142e+00 + 3.699090355861497e+00 3.693266761081976e+00 3.687449624021495e+00 3.681638940980968e+00 3.675834708261307e+00 + 3.670036922163429e+00 3.664245578988249e+00 3.658460675036681e+00 3.652682206609637e+00 3.646910170008033e+00 + 3.641144561532785e+00 3.635385377484806e+00 3.629632614165008e+00 3.623886267874308e+00 3.618146334913622e+00 + 3.612412811583862e+00 3.606685694185942e+00 3.600964979020779e+00 3.595250662389285e+00 3.589542740592375e+00 + 3.583841209930963e+00 3.578146066705964e+00 3.572457307218293e+00 3.566774927768866e+00 3.561098924658592e+00 + 3.555429294188389e+00 3.549766032659172e+00 3.544109136371855e+00 3.538458601627350e+00 3.532814424726574e+00 + 3.527176601970442e+00 3.521545129659867e+00 3.515920004095763e+00 3.510301221579043e+00 3.504688778410627e+00 + 3.499082670891423e+00 3.493482895322350e+00 3.487889448004318e+00 3.482302325238245e+00 3.476721523325045e+00 + 3.471147038565632e+00 3.465578867260920e+00 3.460017005711823e+00 3.454461450219256e+00 3.448912197084135e+00 + 3.443369242607371e+00 3.437832583089881e+00 3.432302214832579e+00 3.426778134136379e+00 3.421260337302195e+00 + 3.415748820630941e+00 3.410243580423535e+00 3.404744612980886e+00 3.399251914603913e+00 3.393765481593527e+00 + 3.388285310250645e+00 3.382811396876181e+00 3.377343737771047e+00 3.371882329236159e+00 3.366427167572434e+00 + 3.360978249080783e+00 3.355535570062121e+00 3.350099126817363e+00 3.344668915647423e+00 3.339244932853216e+00 + 3.333827174735655e+00 3.328415637595656e+00 3.323010317734133e+00 3.317611211452001e+00 3.312218315050173e+00 + 3.306831624829563e+00 3.301451137091087e+00 3.296076848135660e+00 3.290708754264196e+00 3.285346851777606e+00 + 3.279991136976808e+00 3.274641606162716e+00 3.269298255636246e+00 3.263961081698308e+00 3.258630080649819e+00 + 3.253305248791694e+00 3.247986582424847e+00 3.242674077850190e+00 3.237367731368640e+00 3.232067539281112e+00 + 3.226773497888519e+00 3.221485603491775e+00 3.216203852391795e+00 3.210928240889494e+00 3.205658765285786e+00 + 3.200395421881585e+00 3.195138206977806e+00 3.189887116875363e+00 3.184642147875171e+00 3.179403296278142e+00 + 3.174170558385193e+00 3.168943930497239e+00 3.163723408915193e+00 3.158508989939969e+00 3.153300669872482e+00 + 3.148098445013646e+00 3.142902311664378e+00 3.137712266125587e+00 3.132528304698192e+00 3.127350423683106e+00 + 3.122178619381244e+00 3.117012888093520e+00 3.111853226120847e+00 3.106699629764141e+00 3.101552095324317e+00 + 3.096410619102289e+00 3.091275197398968e+00 3.086145826515274e+00 3.081022502752118e+00 3.075905222410415e+00 + 3.070793981791079e+00 3.065688777195026e+00 3.060589604923169e+00 3.055496461276423e+00 3.050409342555702e+00 + 3.045328245061919e+00 3.040253165095992e+00 3.035184098958834e+00 3.030121042951357e+00 3.025063993374477e+00 + 3.020012946529110e+00 3.014967898716169e+00 3.009928846236568e+00 3.004895785391221e+00 2.999868712481045e+00 + 2.994847623806951e+00 2.989832515669856e+00 2.984823384370673e+00 2.979820226210319e+00 2.974823037489704e+00 + 2.969831814509746e+00 2.964846553571357e+00 2.959867250975452e+00 2.954893903022948e+00 2.949926506014757e+00 + 2.944965056251793e+00 2.940009550034971e+00 2.935059983665206e+00 2.930116353443413e+00 2.925178655670504e+00 + 2.920246886647395e+00 2.915321042675001e+00 2.910401120054236e+00 2.905487115086013e+00 2.900579024071247e+00 + 2.895676843310854e+00 2.890780569105748e+00 2.885890197756841e+00 2.881005725565050e+00 2.876127148831289e+00 + 2.871254463856472e+00 2.866387666941512e+00 2.861526754387325e+00 2.856671722494826e+00 2.851822567564928e+00 + 2.846979285898546e+00 2.842141873796594e+00 2.837310327559988e+00 2.832484643489642e+00 2.827664817886467e+00 + 2.822850847051381e+00 2.818042727285298e+00 2.813240454889132e+00 2.808444026163797e+00 2.803653437410207e+00 + 2.798868684929278e+00 2.794089765021923e+00 2.789316673989057e+00 2.784549408131594e+00 2.779787963750449e+00 + 2.775032337146536e+00 2.770282524620770e+00 2.765538522474064e+00 2.760800327007334e+00 2.756067934521495e+00 + 2.751341341317459e+00 2.746620543696142e+00 2.741905537958456e+00 2.737196320405320e+00 2.732492887337646e+00 + 2.727795235056346e+00 2.723103359862337e+00 2.718417258056534e+00 2.713736925939851e+00 2.709062359813200e+00 + 2.704393555977499e+00 2.699730510733661e+00 2.695073220382600e+00 2.690421681225228e+00 2.685775889562464e+00 + 2.681135841695221e+00 2.676501533924412e+00 2.671872962550951e+00 2.667250123875755e+00 2.662633014199737e+00 + 2.658021629823811e+00 2.653415967048891e+00 2.648816022175893e+00 2.644221791505731e+00 2.639633271339319e+00 + 2.635050457977570e+00 2.630473347721400e+00 2.625901936871724e+00 2.621336221729456e+00 2.616776198595510e+00 + 2.612221863770800e+00 2.607673213556241e+00 2.603130244252748e+00 2.598592952161234e+00 2.594061333582615e+00 + 2.589535384817803e+00 2.585015102167715e+00 2.580500481933265e+00 2.575991520415365e+00 2.571488213914932e+00 + 2.566990558732881e+00 2.562498551170123e+00 2.558012187527575e+00 2.553531464106150e+00 2.549056377206766e+00 + 2.544586923130332e+00 2.540123098177766e+00 2.535664898649981e+00 2.531212320847892e+00 2.526765361072414e+00 + 2.522324015624460e+00 2.517888280804945e+00 2.513458152914784e+00 2.509033628254891e+00 2.504614703126180e+00 + 2.500201373829565e+00 2.495793636665962e+00 2.491391487936285e+00 2.486994923941447e+00 2.482603940982363e+00 + 2.478218535359948e+00 2.473838703375117e+00 2.469464441328785e+00 2.465095745521862e+00 2.460732612255267e+00 + 2.456375037829913e+00 2.452023018546713e+00 2.447676550706584e+00 2.443335630610438e+00 2.439000254559191e+00 + 2.434670418853758e+00 2.430346119795050e+00 2.426027353683985e+00 2.421714116821476e+00 2.417406405508439e+00 + 2.413104216045784e+00 2.408807544734430e+00 2.404516387875289e+00 2.400230741769278e+00 2.395950602717307e+00 + 2.391675967020294e+00 2.387406830979154e+00 2.383143190894800e+00 2.378885043068143e+00 2.374632383800102e+00 + 2.370385209391590e+00 2.366143516143523e+00 2.361907300356812e+00 2.357676558332373e+00 2.353451286371123e+00 + 2.349231480773973e+00 2.345017137841837e+00 2.340808253875633e+00 2.336604825176272e+00 2.332406848044670e+00 + 2.328214318781741e+00 2.324027233688400e+00 2.319845589065560e+00 2.315669381214138e+00 2.311498606435046e+00 + 2.307333261029199e+00 2.303173341297511e+00 2.299018843540898e+00 2.294869764060274e+00 2.290726099156551e+00 + 2.286587845130646e+00 2.282454998283473e+00 2.278327554915946e+00 2.274205511328979e+00 2.270088863823487e+00 + 2.265977608700385e+00 2.261871742260587e+00 2.257771260805005e+00 2.253676160634556e+00 2.249586438050156e+00 + 2.245502089352716e+00 2.241423110843152e+00 2.237349498822377e+00 2.233281249591307e+00 2.229218359450858e+00 + 2.225160824701939e+00 2.221108641645470e+00 2.217061806582363e+00 2.213020315813533e+00 2.208984165639893e+00 + 2.204953352362359e+00 2.200927872281845e+00 2.196907721699265e+00 2.192892896915533e+00 2.188883394231564e+00 + 2.184879209948273e+00 2.180880340366575e+00 2.176886781787383e+00 2.172898530511610e+00 2.168915582840173e+00 + 2.164937935073986e+00 2.160965583513963e+00 2.156998524461018e+00 2.153036754216065e+00 2.149080269080021e+00 + 2.145129065353798e+00 2.141183139338310e+00 2.137242487334472e+00 2.133307105643201e+00 2.129376990565408e+00 + 2.125452138402008e+00 2.121532545453916e+00 2.117618208022047e+00 2.113709122407316e+00 2.109805284910635e+00 + 2.105906691832920e+00 2.102013339475084e+00 2.098125224138045e+00 2.094242342122713e+00 2.090364689730004e+00 + 2.086492263260834e+00 2.082625059016116e+00 2.078763073296764e+00 2.074906302403693e+00 2.071054742637817e+00 + 2.067208390300052e+00 2.063367241691310e+00 2.059531293112506e+00 2.055700540864557e+00 2.051874981248373e+00 + 2.048054610564874e+00 2.044239425114969e+00 2.040429421199575e+00 2.036624595119606e+00 2.032824943175977e+00 + 2.029030461669602e+00 2.025241146901394e+00 2.021456995172270e+00 2.017678002783143e+00 2.013904166034927e+00 + 2.010135481228537e+00 2.006371944664888e+00 2.002613552644893e+00 1.998860301469467e+00 1.995112187439525e+00 + 1.991369206855981e+00 1.987631356019750e+00 1.983898631231745e+00 1.980171028792880e+00 1.976448545004073e+00 + 1.972731176166235e+00 1.969018918580281e+00 1.965311768547126e+00 1.961609722367685e+00 1.957912776342872e+00 + 1.954220926773600e+00 1.950534169960784e+00 1.946852502205340e+00 1.943175919808181e+00 1.939504419070222e+00 + 1.935837996292376e+00 1.932176647775559e+00 1.928520369820686e+00 1.924869158728670e+00 1.921223010800425e+00 + 1.917581922336866e+00 1.913945889638909e+00 1.910314909007466e+00 1.906688976743452e+00 1.903068089147782e+00 + 1.899452242521371e+00 1.895841433165133e+00 1.892235657379981e+00 1.888634911466830e+00 1.885039191726596e+00 + 1.881448494460193e+00 1.877862815968533e+00 1.874282152552532e+00 1.870706500513106e+00 1.867135856151167e+00 + 1.863570215767631e+00 1.860009575663410e+00 1.856453932139422e+00 1.852903281496580e+00 1.849357620035796e+00 + 1.845816944057987e+00 1.842281249864067e+00 1.838750533754951e+00 1.835224792031551e+00 1.831704020994784e+00 + 1.828188216945564e+00 1.824677376184804e+00 1.821171495013419e+00 1.817670569732324e+00 1.814174596642433e+00 + 1.810683572044661e+00 1.807197492239921e+00 1.803716353529129e+00 1.800240152213198e+00 1.796768884593044e+00 + 1.793302546969580e+00 1.789841135643720e+00 1.786384646916382e+00 1.782933077088475e+00 1.779486422460917e+00 + 1.776044679334622e+00 1.772607844010504e+00 1.769175912789478e+00 1.765748881972457e+00 1.762326747860356e+00 + 1.758909506754091e+00 1.755497154954573e+00 1.752089688762719e+00 1.748687104479443e+00 1.745289398405660e+00 + 1.741896566842283e+00 1.738508606090227e+00 1.735125512450407e+00 1.731747282223736e+00 1.728373911711131e+00 + 1.725005397213503e+00 1.721641735031770e+00 1.718282921466842e+00 1.714928952819638e+00 1.711579825391069e+00 + 1.708235535482052e+00 1.704896079393500e+00 1.701561453426327e+00 1.698231653881448e+00 1.694906677059778e+00 + 1.691586519262230e+00 1.688271176789721e+00 1.684960645943161e+00 1.681654923023470e+00 1.678354004331557e+00 + 1.675057886168340e+00 1.671766564834732e+00 1.668480036631648e+00 1.665198297860002e+00 1.661921344820709e+00 + 1.658649173814682e+00 1.655381781142836e+00 1.652119163106087e+00 1.648861316005347e+00 1.645608236141532e+00 + 1.642359919815556e+00 1.639116363328334e+00 1.635877562980778e+00 1.632643515073806e+00 1.629414215908330e+00 + 1.626189661785266e+00 1.622969849005526e+00 1.619754773870027e+00 1.616544432679681e+00 1.613338821735404e+00 + 1.610137937338110e+00 1.606941775788715e+00 1.603750333388130e+00 1.600563606437273e+00 1.597381591237055e+00 + 1.594204284088393e+00 1.591031681292200e+00 1.587863779149392e+00 1.584700573960881e+00 1.581542062027584e+00 + 1.578388239650413e+00 1.575239103130285e+00 1.572094648768112e+00 1.568954872864810e+00 1.565819771721292e+00 + 1.562689341638474e+00 1.559563578917269e+00 1.556442479858593e+00 1.553326040763358e+00 1.550214257932481e+00 + 1.547107127666874e+00 1.544004646267455e+00 1.540906810035134e+00 1.537813615270829e+00 1.534725058275451e+00 + 1.531641135349918e+00 1.528561842795142e+00 1.525487176912038e+00 1.522417134001521e+00 1.519351710364504e+00 + 1.516290902301904e+00 1.513234706114633e+00 1.510183118103607e+00 1.507136134569738e+00 1.504093751813943e+00 + 1.501055966137135e+00 1.498022773840230e+00 1.494994171224139e+00 1.491970154589780e+00 1.488950720238066e+00 + 1.485935864469912e+00 1.482925583586231e+00 1.479919873887939e+00 1.476918731675949e+00 1.473922153251177e+00 + 1.470930134914536e+00 1.467942672966941e+00 1.464959763709306e+00 1.461981403442546e+00 1.459007588467575e+00 + 1.456038315085308e+00 1.453073579596659e+00 1.450113378302542e+00 1.447157707503872e+00 1.444206563501563e+00 + 1.441259942596530e+00 1.438317841089686e+00 1.435380255281947e+00 1.432447181474228e+00 1.429518615967441e+00 + 1.426594555062502e+00 1.423674995060325e+00 1.420759932261824e+00 1.417849362967915e+00 1.414943283479510e+00 + 1.412041690097526e+00 1.409144579122876e+00 1.406251946856474e+00 1.403363789599235e+00 1.400480103652074e+00 + 1.397600885315904e+00 1.394726130891640e+00 1.391855836680197e+00 1.388989998982490e+00 1.386128614099431e+00 + 1.383271678331936e+00 1.380419187980920e+00 1.377571139347296e+00 1.374727528731979e+00 1.371888352435884e+00 + 1.369053606759924e+00 1.366223288005015e+00 1.363397392472070e+00 1.360575916462005e+00 1.357758856275733e+00 + 1.354946208214169e+00 1.352137968578227e+00 1.349334133668822e+00 1.346534699786868e+00 1.343739663233281e+00 + 1.340949020308972e+00 1.338162767314858e+00 1.335380900551853e+00 1.332603416320872e+00 1.329830310922827e+00 + 1.327061580658634e+00 1.324297221829209e+00 1.321537230735464e+00 1.318781603678314e+00 1.316030336958674e+00 + 1.313283426877458e+00 1.310540869735580e+00 1.307802661833956e+00 1.305068799473498e+00 1.302339278955123e+00 + 1.299614096579743e+00 1.296893248648275e+00 1.294176731461630e+00 1.291464541320726e+00 1.288756674526474e+00 + 1.286053127379792e+00 1.283353896181592e+00 1.280658977232788e+00 1.277968366834296e+00 1.275282061287031e+00 + 1.272600056891905e+00 1.269922349949834e+00 1.267248936761731e+00 1.264579813628513e+00 1.261914976851092e+00 + 1.259254422730384e+00 1.256598147567302e+00 1.253946147662761e+00 1.251298419317676e+00 1.248654958832961e+00 + 1.246015762509529e+00 1.243380826648297e+00 1.240750147550178e+00 1.238123721516086e+00 1.235501544846937e+00 + 1.232883613843643e+00 1.230269924807121e+00 1.227660474038283e+00 1.225055257838046e+00 1.222454272507322e+00 + 1.219857514347026e+00 1.217264979658074e+00 1.214676664741379e+00 1.212092565897855e+00 1.209512679428417e+00 + 1.206937001633980e+00 1.204365528815458e+00 1.201798257273765e+00 1.199235183309816e+00 1.196676303224525e+00 + 1.194121613318807e+00 1.191571109893574e+00 1.189024789249744e+00 1.186482647688230e+00 1.183944681509945e+00 + 1.181410887015806e+00 1.178881260506724e+00 1.176355798283617e+00 1.173834496647397e+00 1.171317351898979e+00 + 1.168804360339279e+00 1.166295518269209e+00 1.163790821989684e+00 1.161290267801620e+00 1.158793852005930e+00 + 1.156301570903528e+00 1.153813420795330e+00 1.151329397982248e+00 1.148849498765199e+00 1.146373719445096e+00 + 1.143902056322854e+00 1.141434505699387e+00 1.138971063875609e+00 1.136511727152436e+00 1.134056491830780e+00 + 1.131605354211558e+00 1.129158310595683e+00 1.126715357284069e+00 1.124276490577631e+00 1.121841706777284e+00 + 1.119411002183941e+00 1.116984373098518e+00 1.114561815821929e+00 1.112143326655087e+00 1.109728901898908e+00 + 1.107318537854306e+00 1.104912230822195e+00 1.102509977103490e+00 1.100111772999104e+00 1.097717614809954e+00 + 1.095327498836952e+00 1.092941421381013e+00 1.090559378743053e+00 1.088181367223984e+00 1.085807383124722e+00 + 1.083437422746181e+00 1.081071482389275e+00 1.078709558354920e+00 1.076351646944028e+00 1.073997744457514e+00 + 1.071647847196295e+00 1.069301951461282e+00 1.066960053553391e+00 1.064622149773536e+00 1.062288236422632e+00 + 1.059958309801594e+00 1.057632366211334e+00 1.055310401952769e+00 1.052992413326812e+00 1.050678396634377e+00 + 1.048368348176379e+00 1.046062264253734e+00 1.043760141167354e+00 1.041461975218154e+00 1.039167762707049e+00 + 1.036877499934953e+00 1.034591183202782e+00 1.032308808811448e+00 1.030030373061866e+00 1.027755872254951e+00 + 1.025485302691617e+00 1.023218660672779e+00 1.020955942499351e+00 1.018697144472247e+00 1.016442262892383e+00 + 1.014191294060671e+00 1.011944234278027e+00 1.009701079845365e+00 1.007461827063600e+00 1.005226472233646e+00 + 1.002995011656417e+00 1.000767441632828e+00 9.985437584637925e-01 9.963239584502256e-01 9.941080378930424e-01 + 9.918959930931555e-01 9.896878203514810e-01 9.874835159689328e-01 9.852830762464250e-01 9.830864974848722e-01 + 9.808937759851886e-01 9.787049080482891e-01 9.765198899750881e-01 9.743387180664996e-01 9.721613886234379e-01 + 9.699878979468179e-01 9.678182423375530e-01 9.656524180965596e-01 9.634904215247502e-01 9.613322489230397e-01 + 9.591778965923433e-01 9.570273608335744e-01 9.548806379476480e-01 9.527377242354788e-01 9.505986159979797e-01 + 9.484633095360669e-01 9.463318011506541e-01 9.442040871426552e-01 9.420801638129854e-01 9.399600274625590e-01 + 9.378436743922897e-01 9.357311009030933e-01 9.336223032958822e-01 9.315172778715727e-01 9.294160209310781e-01 + 9.273185287753134e-01 9.252247977051927e-01 9.231348240216304e-01 9.210486040255410e-01 9.189661340178386e-01 + 9.168874102994385e-01 9.148124291712543e-01 9.127411869342008e-01 9.106736798891917e-01 9.086099043371424e-01 + 9.065498565789665e-01 9.044935329155791e-01 9.024409296478941e-01 9.003920430768264e-01 8.983468695032898e-01 + 8.963054052281993e-01 8.942676465524687e-01 8.922335897770131e-01 8.902032312027457e-01 8.881765671305829e-01 + 8.861535938614371e-01 8.841343076962237e-01 8.821187049358574e-01 8.801067818812520e-01 8.780985348333220e-01 + 8.760939600929825e-01 8.740930539611460e-01 8.720958127387295e-01 8.701022327266454e-01 8.681123102258093e-01 + 8.661260415371346e-01 8.641434229615371e-01 8.621644507999294e-01 8.601891213532277e-01 8.582174309223449e-01 + 8.562493758081970e-01 8.542849523116970e-01 8.523241567337597e-01 8.503669853752996e-01 8.484134345372311e-01 + 8.464635005204693e-01 8.445171796259274e-01 8.425744681545208e-01 8.406353624071630e-01 8.386998586847694e-01 + 8.367679532882535e-01 8.348396425185304e-01 8.329149226765136e-01 8.309937900631190e-01 8.290762409792595e-01 + 8.271622717258510e-01 8.252518786038064e-01 8.233450579140407e-01 8.214418059574683e-01 8.195421190350044e-01 + 8.176459934475618e-01 8.157534254960568e-01 8.138644114814021e-01 8.119789477045131e-01 8.100970304663040e-01 + 8.082186560676892e-01 8.063438208095829e-01 8.044725209928998e-01 8.026047529185537e-01 8.007405128874603e-01 + 7.988797972005324e-01 7.970226021586858e-01 7.951689240628343e-01 7.933187592138922e-01 7.914721039127738e-01 + 7.896289544603945e-01 7.877893071576668e-01 7.859531583055075e-01 7.841205042048290e-01 7.822913411565466e-01 + 7.804656654615749e-01 7.786434734208276e-01 7.768247613352199e-01 7.750095255056657e-01 7.731977622330796e-01 + 7.713894678183758e-01 7.695846385624693e-01 7.677832707662735e-01 7.659853607307038e-01 7.641909047566739e-01 + 7.623998991450991e-01 7.606123401968925e-01 7.588282242129696e-01 7.570475474942442e-01 7.552703063416313e-01 + 7.534964970560447e-01 7.517261159383993e-01 7.499591592896085e-01 7.481956234105887e-01 7.464355046022522e-01 + 7.446787991655144e-01 7.429255034012903e-01 7.411756136104929e-01 7.394291260940373e-01 7.376860371528386e-01 + 7.359463430878098e-01 7.342100401998667e-01 7.324771247899226e-01 7.307475931588928e-01 7.290214416076909e-01 + 7.272986664372321e-01 7.255792639484301e-01 7.238632304421997e-01 7.221505622194553e-01 7.204412555811112e-01 + 7.187353068280817e-01 7.170327122612817e-01 7.153334681816251e-01 7.136375708900264e-01 7.119450166874005e-01 + 7.102558018746606e-01 7.085699227527229e-01 7.068873756225003e-01 7.052081567849077e-01 7.035322625408595e-01 + 7.018596891912705e-01 7.001904330370544e-01 6.985244903791261e-01 6.968618575183999e-01 6.952025307557902e-01 + 6.935465063922116e-01 6.918937807285782e-01 6.902443500658040e-01 6.885982107048049e-01 6.869553589464933e-01 + 6.853157910917854e-01 6.836795034415946e-01 6.820464922968359e-01 6.804167539584229e-01 6.787902847272709e-01 + 6.771670809042936e-01 6.755471387904058e-01 6.739304546865216e-01 6.723170248935564e-01 6.707068457124232e-01 + 6.690999134440370e-01 6.674962243893127e-01 6.658957748491637e-01 6.642985611245055e-01 6.627045795162517e-01 + 6.611138263253172e-01 6.595262978526160e-01 6.579419903990626e-01 6.563609002655720e-01 6.547830237530582e-01 + 6.532083571624350e-01 6.516368967946180e-01 6.500686389505204e-01 6.485035799310573e-01 6.469417160371433e-01 + 6.453830435696921e-01 6.438275588296184e-01 6.422752581178374e-01 6.407261377352623e-01 6.391801939828081e-01 + 6.376374231613895e-01 6.360978215719203e-01 6.345613855153154e-01 6.330281112924886e-01 6.314979952043547e-01 + 6.299710335518284e-01 6.284472226358236e-01 6.269265587572552e-01 6.254090382170371e-01 6.238946573160838e-01 + 6.223834123553103e-01 6.208752996356303e-01 6.193703154579584e-01 6.178684561232091e-01 6.163697179322969e-01 + 6.148740971861357e-01 6.133815901856408e-01 6.118921932317262e-01 6.104059026253058e-01 6.089227146672945e-01 + 6.074426256586074e-01 6.059656319001574e-01 6.044917296928599e-01 6.030209153376287e-01 6.015531851353793e-01 + 6.000885353870247e-01 5.986269623934806e-01 5.971684624556605e-01 5.957130318744794e-01 5.942606669508510e-01 + 5.928113639856905e-01 5.913651192799119e-01 5.899219291344294e-01 5.884817898501579e-01 5.870446977280120e-01 + 5.856106490689048e-01 5.841796401737523e-01 5.827516673434679e-01 5.813267268789667e-01 5.799048150811624e-01 + 5.784859282509699e-01 5.770700626893032e-01 5.756572146970776e-01 5.742473805752061e-01 5.728405566246045e-01 + 5.714367391461864e-01 5.700359244408664e-01 5.686381088095590e-01 5.672432885531783e-01 5.658514599726390e-01 + 5.644626193688556e-01 5.630767630427422e-01 5.616938872952135e-01 5.603139884271836e-01 5.589370627395670e-01 + 5.575631065332790e-01 5.561921161092321e-01 5.548240877683427e-01 5.534590178115237e-01 5.520969025396907e-01 + 5.507377382537572e-01 5.493815212546381e-01 5.480282478432474e-01 5.466779143205005e-01 5.453305169873102e-01 + 5.439860521445922e-01 5.426445160932605e-01 5.413059051342295e-01 5.399702155684138e-01 5.386374436967276e-01 + 5.373075858200851e-01 5.359806382394012e-01 5.346565972555897e-01 5.333354591695658e-01 5.320172202822432e-01 + 5.307018768945369e-01 5.293894253073609e-01 5.280798618216298e-01 5.267731827382577e-01 5.254693843581593e-01 + 5.241684629822485e-01 5.228704149114412e-01 5.215752364466499e-01 5.202829238887903e-01 5.189934735387761e-01 + 5.177068816975220e-01 5.164231446659431e-01 5.151422587449525e-01 5.138642202354651e-01 5.125890254383957e-01 + 5.113166706546586e-01 5.100471521851681e-01 5.087804663308382e-01 5.075166093925835e-01 5.062555776713192e-01 + 5.049973674679586e-01 5.037419750834171e-01 5.024893968186085e-01 5.012396289744471e-01 4.999926678518474e-01 + 4.987485097517243e-01 4.975071509749917e-01 4.962685878225641e-01 4.950328165953561e-01 4.937998335942819e-01 + 4.925696351202563e-01 4.913422174741932e-01 4.901175769570069e-01 4.888957098696128e-01 4.876766125129238e-01 + 4.864602811878558e-01 4.852467121953222e-01 4.840359018362380e-01 4.828278464115173e-01 4.816225422220748e-01 + 4.804199855688242e-01 4.792201727526811e-01 4.780231000745586e-01 4.768287638353720e-01 4.756371603360353e-01 + 4.744482858774630e-01 4.732621367605699e-01 4.720787092862697e-01 4.708979997554774e-01 4.697200044691071e-01 + 4.685447197280733e-01 4.673721418332906e-01 4.662022670856728e-01 4.650350917861351e-01 4.638706122355916e-01 + 4.627088247349563e-01 4.615497255851442e-01 4.603933110870692e-01 4.592395775416462e-01 4.580885212497894e-01 + 4.569401385124132e-01 4.557944256304316e-01 4.546513789047599e-01 4.535109946363119e-01 4.523732691260023e-01 + 4.512381986747452e-01 4.501057795834551e-01 4.489760081530464e-01 4.478488806844338e-01 4.467243934785310e-01 + 4.456025428362536e-01 4.444833250585150e-01 4.433667364462299e-01 4.422527733003126e-01 4.411414319216777e-01 + 4.400327086112395e-01 4.389265996699126e-01 4.378231013986111e-01 4.367222100982497e-01 4.356239220697426e-01 + 4.345282336140042e-01 4.334351410319494e-01 4.323446406244920e-01 4.312567286925470e-01 4.301714015370275e-01 + 4.290886554588498e-01 4.280084867589269e-01 4.269308917381735e-01 4.258558666975046e-01 4.247834079378339e-01 + 4.237135117600763e-01 4.226461744651459e-01 4.215813923539569e-01 4.205191617274245e-01 4.194594788864623e-01 + 4.184023401319854e-01 4.173477417649076e-01 4.162956800861436e-01 4.152461513966076e-01 4.141991519972147e-01 + 4.131546781888785e-01 4.121127262725138e-01 4.110732925490347e-01 4.100363733193558e-01 4.090019648843917e-01 + 4.079700635450567e-01 4.069406656022651e-01 4.059137673569312e-01 4.048893651099695e-01 4.038674551622949e-01 + 4.028480338148211e-01 4.018310973684630e-01 4.008166421241345e-01 3.998046643827505e-01 3.987951604452256e-01 + 3.977881266124734e-01 3.967835591854087e-01 3.957814544649460e-01 3.947818087519999e-01 3.937846183474847e-01 + 3.927898795523145e-01 3.917975886674035e-01 3.908077419936672e-01 3.898203358320190e-01 3.888353664833736e-01 + 3.878528302486455e-01 3.868727234287491e-01 3.858950423245988e-01 3.849197832371089e-01 3.839469424671938e-01 + 3.829765163157681e-01 3.820085010837457e-01 3.810428930720420e-01 3.800796885815709e-01 3.791188839132462e-01 + 3.781604753679830e-01 3.772044592466958e-01 3.762508318502983e-01 3.752995894797058e-01 3.743507284358322e-01 + 3.734042450195919e-01 3.724601355318995e-01 3.715183962736693e-01 3.705790235458156e-01 3.696420136492531e-01 + 3.687073628848959e-01 3.677750675536586e-01 3.668451239564555e-01 3.659175283942012e-01 3.649922771678101e-01 + 3.640693665781960e-01 3.631487929262743e-01 3.622305525129587e-01 3.613146416391638e-01 3.604010566058042e-01 + 3.594897937137940e-01 3.585808492640478e-01 3.576742195574801e-01 3.567699008950048e-01 3.558678895775370e-01 + 3.549681819059906e-01 3.540707741812804e-01 3.531756627043205e-01 3.522828437760255e-01 3.513923136973096e-01 + 3.505040687690875e-01 3.496181052922732e-01 3.487344195677817e-01 3.478530078965268e-01 3.469738665794233e-01 + 3.460969919173855e-01 3.452223802113278e-01 3.443500277621644e-01 3.434799308708103e-01 3.426120858381791e-01 + 3.417464889651861e-01 3.408831365527449e-01 3.400220249017705e-01 3.391631503131769e-01 3.383065090878786e-01 + 3.374520975267903e-01 3.365999119308261e-01 3.357499486009006e-01 3.349022038379281e-01 3.340566739428230e-01 + 3.332133552164996e-01 3.323722439598729e-01 3.315333364738562e-01 3.306966290593651e-01 3.298621180173132e-01 + 3.290297996486153e-01 3.281996702541857e-01 3.273717261349389e-01 3.265459635917890e-01 3.257223789256509e-01 + 3.249009684374384e-01 3.240817284280666e-01 3.232646551984494e-01 3.224497450495014e-01 3.216369942821369e-01 + 3.208263991972705e-01 3.200179560958164e-01 3.192116612786893e-01 3.184075110468030e-01 3.176055017010728e-01 + 3.168056295424124e-01 3.160078908717366e-01 3.152122819899595e-01 3.144187991979958e-01 3.136274387967596e-01 + 3.128381970871658e-01 3.120510703701280e-01 3.112660549465616e-01 3.104831471173802e-01 3.097023431834987e-01 + 3.089236394458313e-01 3.081470322052923e-01 3.073725177627965e-01 3.066000924192579e-01 3.058297524755912e-01 + 3.050614942327107e-01 3.042953139915308e-01 3.035312080529657e-01 3.027691727179303e-01 3.020092042873384e-01 + 3.012512990621051e-01 3.004954533431443e-01 2.997416634313705e-01 2.989899256276983e-01 2.982402362330419e-01 + 2.974925915483157e-01 2.967469878744344e-01 2.960034215123119e-01 2.952618887628632e-01 2.945223859270023e-01 + 2.937849093056438e-01 2.930494551997020e-01 2.923160199100915e-01 2.915845997377263e-01 2.908551909835214e-01 + 2.901277899483905e-01 2.894023929332488e-01 2.886789962390100e-01 2.879575961665890e-01 2.872381890169001e-01 + 2.865207710908574e-01 2.858053386893756e-01 2.850918881133691e-01 2.843804156637523e-01 2.836709176414396e-01 + 2.829633903473454e-01 2.822578300823839e-01 2.815542331474700e-01 2.808525958435175e-01 2.801529144714415e-01 + 2.794551853321557e-01 2.787594047265750e-01 2.780655689556137e-01 2.773736743201861e-01 2.766837171212067e-01 + 2.759956936595899e-01 2.753096002362500e-01 2.746254331521017e-01 2.739431887080590e-01 2.732628632050366e-01 + 2.725844529439489e-01 2.719079542257102e-01 2.712333633512349e-01 2.705606766214377e-01 2.698898903372325e-01 + 2.692210007995342e-01 2.685540043092568e-01 2.678888971673150e-01 2.672256756746232e-01 2.665643361320956e-01 + 2.659048748406468e-01 2.652472881011912e-01 2.645915722146429e-01 2.639377234819169e-01 2.632857382039271e-01 + 2.626356126815881e-01 2.619873432158144e-01 2.613409261075200e-01 2.606963576576199e-01 2.600536341670281e-01 + 2.594127519366592e-01 2.587737072674276e-01 2.581364964602477e-01 2.575011158160336e-01 2.568675616357003e-01 + 2.562358302201616e-01 2.556059178703324e-01 2.549778208871267e-01 2.543515355714593e-01 2.537270582242444e-01 + 2.531043851463964e-01 2.524835126388297e-01 2.518644370024590e-01 2.512471545381981e-01 2.506316615469620e-01 + 2.500179543296648e-01 2.494060291872211e-01 2.487958824205451e-01 2.481875103305514e-01 2.475809092181542e-01 + 2.469760753842682e-01 2.463730051298074e-01 2.457716947556867e-01 2.451721405628201e-01 2.445743388521223e-01 + 2.439782859245076e-01 2.433839780808904e-01 2.427914116221849e-01 2.422005828493060e-01 2.416114880631675e-01 + 2.410241235646844e-01 2.404384856547707e-01 2.398545706343409e-01 2.392723748043098e-01 2.386918944655910e-01 + 2.381131259190998e-01 2.375360654657500e-01 2.369607094064561e-01 2.363870540421329e-01 2.358150956736944e-01 + 2.352448306020550e-01 2.346762551281295e-01 2.341093655528317e-01 2.335441581770767e-01 2.329806293017783e-01 + 2.324187752278514e-01 2.318585922562102e-01 2.313000766877690e-01 2.307432248234422e-01 2.301880329641446e-01 + 2.296344974107901e-01 2.290826144642935e-01 2.285323804255690e-01 2.279837915955310e-01 2.274368442750941e-01 + 2.268915347651725e-01 2.263478593666807e-01 2.258058143805332e-01 2.252653961076440e-01 2.247266008489282e-01 + 2.241894249052996e-01 2.236538645776730e-01 2.231199161669626e-01 2.225875759740828e-01 2.220568402999481e-01 + 2.215277054454728e-01 2.210001677115715e-01 2.204742233991586e-01 2.199498688091483e-01 2.194271002424550e-01 + 2.189059139999935e-01 2.183863063826778e-01 2.178682736914224e-01 2.173518122271418e-01 2.168369182907504e-01 + 2.163235881831627e-01 2.158118182052928e-01 2.153016046580553e-01 2.147929438423646e-01 2.142858320591354e-01 + 2.137802656092816e-01 2.132762407937178e-01 2.127737539133585e-01 2.122728012691182e-01 2.117733791619111e-01 + 2.112754838926515e-01 2.107791117622541e-01 2.102842590716335e-01 2.097909221217034e-01 2.092990972133788e-01 + 2.088087806475738e-01 2.083199687252032e-01 2.078326577471809e-01 2.073468440144217e-01 2.068625238278398e-01 + 2.063796934883499e-01 2.058983492968659e-01 2.054184875543025e-01 2.049401045615742e-01 2.044631966195954e-01 + 2.039877600292805e-01 2.035137910915436e-01 2.030412861072994e-01 2.025702413774623e-01 2.021006532029468e-01 + 2.016325178846670e-01 2.011658317235376e-01 2.007005910204729e-01 2.002367920763874e-01 1.997744311921952e-01 + 1.993135046688110e-01 1.988540088071491e-01 1.983959399081242e-01 1.979392942726502e-01 1.974840682016419e-01 + 1.970302579960134e-01 1.965778599566796e-01 1.961268703845544e-01 1.956772855805524e-01 1.952291018455880e-01 + 1.947823154805758e-01 1.943369227864299e-01 1.938929200640649e-01 1.934503036143950e-01 1.930090697383351e-01 + 1.925692147367991e-01 1.921307349107015e-01 1.916936265609568e-01 1.912578859884797e-01 1.908235094941840e-01 + 1.903904933789845e-01 1.899588339437956e-01 1.895285274895317e-01 1.890995703171071e-01 1.886719587274362e-01 + 1.882456890214335e-01 1.878207575000134e-01 1.873971604640904e-01 1.869748942145787e-01 1.865539550523928e-01 + 1.861343392784472e-01 1.857160431936564e-01 1.852990630989344e-01 1.848833952951959e-01 1.844690360833552e-01 + 1.840559817643271e-01 1.836442286390254e-01 1.832337730083648e-01 1.828246111732597e-01 1.824167394346248e-01 + 1.820101540933740e-01 1.816048514504219e-01 1.812008278066830e-01 1.807980794630718e-01 1.803966027205025e-01 + 1.799963938798894e-01 1.795974492421472e-01 1.791997651081904e-01 1.788033377789329e-01 1.784081635552895e-01 + 1.780142387381745e-01 1.776215596285026e-01 1.772301225271878e-01 1.768399237351444e-01 1.764509595532873e-01 + 1.760632262825308e-01 1.756767202237890e-01 1.752914376779765e-01 1.749073749460077e-01 1.745245283287970e-01 + 1.741428941272591e-01 1.737624686423079e-01 1.733832481748580e-01 1.730052290258240e-01 1.726284074961202e-01 + 1.722527798866608e-01 1.718783424983605e-01 1.715050916321335e-01 1.711330235888945e-01 1.707621346695576e-01 + 1.703924211750373e-01 1.700238794062480e-01 1.696565056641043e-01 1.692902962495204e-01 1.689252474634106e-01 + 1.685613556066896e-01 1.681986169802718e-01 1.678370278850714e-01 1.674765846220029e-01 1.671172834919807e-01 + 1.667591207959194e-01 1.664020928347330e-01 1.660461959093362e-01 1.656914263206433e-01 1.653377803695690e-01 + 1.649852543570273e-01 1.646338445839328e-01 1.642835473511999e-01 1.639343589597431e-01 1.635862757104767e-01 + 1.632392939043150e-01 1.628934098421725e-01 1.625486198249637e-01 1.622049201536032e-01 1.618623071290049e-01 + 1.615207770520836e-01 1.611803262237535e-01 1.608409509449292e-01 1.605026475165248e-01 1.601654122394552e-01 + 1.598292414146343e-01 1.594941313429769e-01 1.591600783253971e-01 1.588270786628095e-01 1.584951286561284e-01 + 1.581642246062686e-01 1.578343628141438e-01 1.575055395806690e-01 1.571777512067583e-01 1.568509939933263e-01 + 1.565252642412873e-01 1.562005582515557e-01 1.558768723250459e-01 1.555542027626726e-01 1.552325458653497e-01 + 1.549118979339920e-01 1.545922552695137e-01 1.542736141728294e-01 1.539559709448533e-01 1.536393218865000e-01 + 1.533236632986837e-01 1.530089914823192e-01 1.526953027383204e-01 1.523825933676020e-01 1.520708596710784e-01 + 1.517600979496639e-01 1.514503045042732e-01 1.511414756358203e-01 1.508336076452198e-01 1.505266968333862e-01 + 1.502207395012339e-01 1.499157319496771e-01 1.496116704796303e-01 1.493085513920080e-01 1.490063709877247e-01 + 1.487051255676945e-01 1.484048114328320e-01 1.481054248840516e-01 1.478069622222679e-01 1.475094197483949e-01 + 1.472127937633473e-01 1.469170805680394e-01 1.466222764633858e-01 1.463283777503005e-01 1.460353807296983e-01 + 1.457432817024934e-01 1.454520769696005e-01 1.451617628319335e-01 1.448723355904073e-01 1.445837915459360e-01 + 1.442961269994343e-01 1.440093382518162e-01 1.437234216039965e-01 1.434383733568894e-01 1.431541898114094e-01 + 1.428708672684709e-01 1.425884020289881e-01 1.423067903938758e-01 1.420260286640481e-01 1.417461131404195e-01 + 1.414670401239045e-01 1.411888059154174e-01 1.409114068158726e-01 1.406348391261847e-01 1.403590991472678e-01 + 1.400841831800365e-01 1.398100875254052e-01 1.395368084842883e-01 1.392643423576002e-01 1.389926854462553e-01 + 1.387218340511681e-01 1.384517844732529e-01 1.381825330134241e-01 1.379140759725961e-01 1.376464096516834e-01 + 1.373795303516005e-01 1.371134343732616e-01 1.368481180175811e-01 1.365835775854735e-01 1.363198093778535e-01 + 1.360568096956349e-01 1.357945748397326e-01 1.355331011110607e-01 1.352723848105339e-01 1.350124222390664e-01 + 1.347532096975727e-01 1.344947434869671e-01 1.342370199081642e-01 1.339800352620783e-01 1.337237858496237e-01 + 1.334682679717150e-01 1.332134779292666e-01 1.329594120231927e-01 1.327060665544079e-01 1.324534378238265e-01 + 1.322015221323631e-01 1.319503157809320e-01 1.316998150704475e-01 1.314500163018241e-01 1.312009157759762e-01 + 1.309525097938183e-01 1.307047946562647e-01 1.304577666642297e-01 1.302114221186280e-01 1.299657573203739e-01 + 1.297207685703817e-01 1.294764521695659e-01 1.292328044188408e-01 1.289898216191211e-01 1.287475000713208e-01 + 1.285058360763546e-01 1.282648259351368e-01 1.280244659485820e-01 1.277847524176043e-01 1.275456816431183e-01 + 1.273072499260383e-01 1.270694535672789e-01 1.268322888677544e-01 1.265957521283791e-01 1.263598396500675e-01 + 1.261245477337342e-01 1.258898726802932e-01 1.256558107906592e-01 1.254223583657466e-01 1.251895117064698e-01 + 1.249572671137431e-01 1.247256208884810e-01 1.244945693315979e-01 1.242641087440081e-01 1.240342354266263e-01 + 1.238049456803666e-01 1.235762358061435e-01 1.233481021048715e-01 1.231205408774650e-01 1.228935484248383e-01 + 1.226671210479058e-01 1.224412550475821e-01 1.222159467247814e-01 1.219911923804183e-01 1.217669883154070e-01 + 1.215433308306620e-01 1.213202162270979e-01 1.210976408056288e-01 1.208756008671693e-01 1.206540927126337e-01 + 1.204331126429366e-01 1.202126569589921e-01 1.199927219617149e-01 1.197733039520192e-01 1.195543992308197e-01 + 1.193360040990304e-01 1.191181148575661e-01 1.189007278073410e-01 1.186838392492695e-01 1.184674454842661e-01 + 1.182515428132451e-01 1.180361275371210e-01 1.178211959568083e-01 1.176067443732212e-01 1.173927690872742e-01 + 1.171792663998817e-01 1.169662326119583e-01 1.167536640244181e-01 1.165415569381756e-01 1.163299076541453e-01 + 1.161187124732416e-01 1.159079676963789e-01 1.156976696244715e-01 1.154878145584339e-01 1.152783987991806e-01 + 1.150694186476259e-01 1.148608704046842e-01 1.146527503712699e-01 1.144450548482975e-01 1.142377801366814e-01 + 1.140309225373359e-01 1.138244783511755e-01 1.136184438791145e-01 1.134128154220675e-01 1.132075892809488e-01 + 1.130027617566728e-01 1.127983291501539e-01 1.125942877623066e-01 1.123906338940452e-01 1.121873638462842e-01 + 1.119844739199379e-01 1.117819604159209e-01 1.115798196351473e-01 1.113780478785318e-01 1.111766414469887e-01 + 1.109755966414325e-01 1.107749097627774e-01 1.105745771119380e-01 1.103745949898286e-01 1.101749596973638e-01 + 1.099756675354577e-01 1.097767148050249e-01 1.095780978069798e-01 1.093798128422368e-01 1.091818562117104e-01 + 1.089842242163148e-01 1.087869131569646e-01 1.085899193345740e-01 1.083932390500577e-01 1.081968686043299e-01 + 1.080008042983051e-01 1.078050424328976e-01 1.076095793090220e-01 1.074144112275925e-01 1.072195344895236e-01 + 1.070249453957298e-01 1.068306402471254e-01 1.066366153446248e-01 1.064428669891425e-01 1.062493914815928e-01 + 1.060561851228902e-01 1.058632442139490e-01 1.056705650556837e-01 1.054781439490088e-01 1.052859771948386e-01 + 1.050940610940874e-01 1.049023919476698e-01 1.047109660565001e-01 1.045197797214928e-01 1.043288292435622e-01 + 1.041381113170835e-01 1.039476249550923e-01 1.037573700170755e-01 1.035673463637623e-01 1.033775538558824e-01 + 1.031879923541653e-01 1.029986617193404e-01 1.028095618121373e-01 1.026206924932855e-01 1.024320536235143e-01 + 1.022436450635534e-01 1.020554666741323e-01 1.018675183159803e-01 1.016797998498272e-01 1.014923111364022e-01 + 1.013050520364351e-01 1.011180224106551e-01 1.009312221197918e-01 1.007446510245748e-01 1.005583089857335e-01 + 1.003721958639974e-01 1.001863115200960e-01 1.000006558147589e-01 9.981522860871547e-02 9.963002976269521e-02 + 9.944505913742767e-02 9.926031659364230e-02 9.907580199206875e-02 9.889151519343629e-02 9.870745605847453e-02 + 9.852362444791300e-02 9.834002022248119e-02 9.815664324290849e-02 9.797349336992449e-02 9.779057046425871e-02 + 9.760787438664066e-02 9.742540499779966e-02 9.724316215846536e-02 9.706114572936728e-02 9.687935557123485e-02 + 9.669779154479764e-02 9.651645351078506e-02 9.633534132992665e-02 9.615445486295186e-02 9.597379397059029e-02 + 9.579335851357133e-02 9.561314835262449e-02 9.543316334847932e-02 9.525340336186539e-02 9.507386825351205e-02 + 9.489455788414881e-02 9.471547211450523e-02 9.453661080531085e-02 9.435797381729505e-02 9.417956101118734e-02 + 9.400137224771732e-02 9.382340738761444e-02 9.364566629160814e-02 9.346814882042799e-02 9.329085483480343e-02 + 9.311378419546408e-02 9.293693676313923e-02 9.276031239855852e-02 9.258391096245139e-02 9.240773231554750e-02 + 9.223177631857608e-02 9.205604283226682e-02 9.188053171734911e-02 9.170524283455263e-02 9.153017604460661e-02 + 9.135533120824073e-02 9.118070818618440e-02 9.100630683916724e-02 9.083212702791864e-02 9.065816861316804e-02 + 9.048443145564508e-02 9.031091541607918e-02 9.013762035519991e-02 8.996454613373667e-02 8.979169261241901e-02 + 8.961905965197636e-02 8.944664711313842e-02 8.927445485663438e-02 8.910248274319395e-02 8.893073063354659e-02 + 8.875919838842186e-02 8.858788586854908e-02 8.841679293465786e-02 8.824591944747770e-02 8.807526526773812e-02 + 8.790483025616851e-02 8.773461427349849e-02 8.756461718045747e-02 8.739483883777507e-02 8.722527910618062e-02 + 8.705593784640371e-02 8.688681491917384e-02 8.671791018522053e-02 8.654922350527321e-02 8.638075474006139e-02 + 8.621250375031457e-02 8.604447039676234e-02 8.587665454013405e-02 8.570905604115930e-02 8.554167476056752e-02 + 8.537451055908836e-02 8.520756329745109e-02 8.504083283638536e-02 8.487431903662059e-02 8.470802175888634e-02 + 8.454194086391209e-02 8.437607621242733e-02 8.421042766516153e-02 8.404499508284423e-02 8.387977832620493e-02 + 8.371477725597309e-02 8.354999173287821e-02 8.338542161764978e-02 8.322106677101745e-02 8.305692705371046e-02 + 8.289300232645846e-02 8.272929244999096e-02 8.256579728503743e-02 8.240251669232730e-02 8.223945053259016e-02 + 8.207659866655545e-02 8.191396095495274e-02 8.175153725851143e-02 8.158932743796107e-02 8.142733135403117e-02 + 8.126554886745126e-02 8.110397983895071e-02 8.094262412925914e-02 8.078148159910596e-02 8.062055210922078e-02 + 8.045983552033298e-02 8.029933169317209e-02 8.013904048846764e-02 7.997896176694917e-02 7.981909538934603e-02 + 7.965944121638786e-02 7.949999910880409e-02 7.934076892732417e-02 7.918175053267780e-02 7.902294378559423e-02 + 7.886434854680306e-02 7.870596467703381e-02 7.854779203701598e-02 7.838983048747900e-02 7.823207988915246e-02 + 7.807454010276579e-02 7.791721098904852e-02 7.776009240873012e-02 7.760318422254009e-02 7.744648629120794e-02 + 7.728999847546325e-02 7.713372063603535e-02 7.697765263365386e-02 7.682179432904819e-02 7.666614558294797e-02 + 7.651070625608256e-02 7.635547620918152e-02 7.620045530297433e-02 7.604564339819056e-02 7.589104035555959e-02 + 7.573664603581094e-02 7.558246029967419e-02 7.542848300787881e-02 7.527471402115422e-02 7.512115320022998e-02 + 7.496780040583560e-02 7.481465549870060e-02 7.466171833955440e-02 7.450898878912648e-02 7.435646670814641e-02 + 7.420415195734377e-02 7.405204439744785e-02 7.390014388918827e-02 7.374845029329451e-02 7.359696347049603e-02 + 7.344568328152248e-02 7.329460958710317e-02 7.314374224796763e-02 7.299308112484543e-02 7.284262607846607e-02 + 7.269237696955901e-02 7.254233365885369e-02 7.239249600707968e-02 7.224286387496655e-02 7.209343712324366e-02 + 7.194421561264056e-02 7.179519920388668e-02 7.164638775771169e-02 7.149778113484495e-02 7.134937919601594e-02 + 7.120118180195423e-02 7.105318881338936e-02 7.090540009105072e-02 7.075781549566780e-02 7.061043488797017e-02 + 7.046325812868739e-02 7.031628507854877e-02 7.016951559828394e-02 7.002294954862234e-02 6.987658679029360e-02 + 6.973042718402701e-02 6.958447059055219e-02 6.943871687059862e-02 6.929316588489585e-02 6.914781749417323e-02 + 6.900267155916040e-02 6.885772794058678e-02 6.871298649918187e-02 6.856844709567529e-02 6.842410959079638e-02 + 6.827997384527469e-02 6.813603971983971e-02 6.799230707522101e-02 6.784877577214800e-02 6.770544567135017e-02 + 6.756231663355708e-02 6.741938851949826e-02 6.727666118990307e-02 6.713413450550108e-02 6.699180832702184e-02 + 6.684968251519484e-02 6.670775693074947e-02 6.656603143441531e-02 6.642450588692185e-02 6.628318014899860e-02 + 6.614205408137501e-02 6.600112754478060e-02 6.586040039994488e-02 6.571987250759739e-02 6.557954372846751e-02 + 6.543941392328488e-02 6.529948295277883e-02 6.515975067767907e-02 6.502021695871489e-02 6.488088165661587e-02 + 6.474174463211153e-02 6.460280574593143e-02 6.446406485880489e-02 6.432552183146151e-02 6.418717652463078e-02 + 6.404902879904224e-02 6.391107851542538e-02 6.377332553450962e-02 6.363576971702452e-02 6.349841092369954e-02 + 6.336124901526427e-02 6.322428385244801e-02 6.308751529598047e-02 6.295094320659102e-02 6.281456744500925e-02 + 6.267838787196457e-02 6.254240434818652e-02 6.240661673440458e-02 6.227102489134832e-02 6.213562867974709e-02 + 6.200042796033049e-02 6.186542259382801e-02 6.173061244096921e-02 6.159599736248343e-02 6.146157721910026e-02 + 6.132735187154918e-02 6.119332118055979e-02 6.105948500686142e-02 6.092584321118364e-02 6.079239565425593e-02 + 6.065914219680792e-02 6.052608269956890e-02 6.039321702326848e-02 6.026054502863611e-02 6.012806657640142e-02 + 5.999578152729372e-02 5.986368974204260e-02 5.973179108137752e-02 5.960008540602803e-02 5.946857257672369e-02 + 5.933725245419383e-02 5.920612489916803e-02 5.907518977237583e-02 5.894444693454667e-02 5.881389624641006e-02 + 5.868353756869548e-02 5.855337076213246e-02 5.842339568745052e-02 5.829361220537909e-02 5.816402017664766e-02 + 5.803461946198580e-02 5.790540992212303e-02 5.777639141778872e-02 5.764756380971246e-02 5.751892695862373e-02 + 5.739048072525207e-02 5.726222497032688e-02 5.713415955457772e-02 5.700628433873407e-02 5.687859918352548e-02 + 5.675110394968137e-02 5.662379849793124e-02 5.649668268900464e-02 5.636975638363110e-02 5.624301944254002e-02 + 5.611647172646088e-02 5.599011309612329e-02 5.586394341225675e-02 5.573796253559063e-02 5.561217032685450e-02 + 5.548656664677788e-02 5.536115135609025e-02 5.523592431552111e-02 5.511088538579991e-02 5.498603442765621e-02 + 5.486137130181946e-02 5.473689586901927e-02 5.461260798998496e-02 5.448850752544614e-02 5.436459433613226e-02 + 5.424086828277291e-02 5.411732922609749e-02 5.399397702683550e-02 5.387081154571649e-02 5.374783264346995e-02 + 5.362504018082533e-02 5.350243401851213e-02 5.338001401725990e-02 5.325778003779816e-02 5.313573194085630e-02 + 5.301386958716389e-02 5.289219283745039e-02 5.277070155244543e-02 5.264939559287828e-02 5.252827481947860e-02 + 5.240733909297583e-02 5.228658827409954e-02 5.216602222357911e-02 5.204564080214408e-02 5.192544387052399e-02 + 5.180543128944835e-02 5.168560291964656e-02 5.156595862184820e-02 5.144649825678276e-02 5.132722168517973e-02 + 5.120812876776858e-02 5.108921936527882e-02 5.097049333843993e-02 5.085195054798146e-02 5.073359085463291e-02 + 5.061541411912372e-02 5.049742020218338e-02 5.037960896454145e-02 5.026198026692743e-02 5.014453397007076e-02 + 5.002726993470093e-02 4.991018802154750e-02 4.979328809133997e-02 4.967657000480776e-02 4.956003362268040e-02 + 4.944367880568746e-02 4.932750541455837e-02 4.921151331002260e-02 4.909570235280970e-02 4.898007240364916e-02 + 4.886462332327048e-02 4.874935497240312e-02 4.863426721177660e-02 4.851935990212042e-02 4.840463290416413e-02 + 4.829008607863713e-02 4.817571928626897e-02 4.806153238778912e-02 4.794752524392717e-02 4.783369771541247e-02 + 4.772004966297460e-02 4.760658094734306e-02 4.749329142924741e-02 4.738018096941701e-02 4.726724942858141e-02 + 4.715449666747011e-02 4.704192254681265e-02 4.692952692733852e-02 4.681730966977717e-02 4.670527063485810e-02 + 4.659340968331084e-02 4.648172667586493e-02 4.637022147324977e-02 4.625889393619487e-02 4.614774392542979e-02 + 4.603677130168404e-02 4.592597592568702e-02 4.581535765816823e-02 4.570491635985727e-02 4.559465189148363e-02 + 4.548456411377672e-02 4.537465288746606e-02 4.526491807328119e-02 4.515535953195162e-02 4.504597712420678e-02 + 4.493677071077620e-02 4.482774015238937e-02 4.471888530977582e-02 4.461020604366499e-02 4.450170221478643e-02 + 4.439337368386963e-02 4.428522031164406e-02 4.417724195883925e-02 4.406943848618464e-02 4.396180975440979e-02 + 4.385435562424421e-02 4.374707595641732e-02 4.363997061165866e-02 4.353303945069772e-02 4.342628233426407e-02 + 4.331969912308711e-02 4.321328967789632e-02 4.310705385942128e-02 4.300099152839144e-02 4.289510254553639e-02 + 4.278938677158548e-02 4.268384406726829e-02 4.257847429331426e-02 4.247327731045304e-02 4.236825297941395e-02 + 4.226340116092654e-02 4.215872171572034e-02 4.205421450452487e-02 4.194987938806956e-02 4.184571622708395e-02 + 4.174172488229748e-02 4.163790521443976e-02 4.153425708424018e-02 4.143078035242830e-02 4.132747487973357e-02 + 4.122434052688555e-02 4.112137715461366e-02 4.101858462364746e-02 4.091596279471640e-02 4.081351152855003e-02 + 4.071123068587779e-02 4.060912012742923e-02 4.050717971393380e-02 4.040540930612108e-02 4.030380876472048e-02 + 4.020237795046150e-02 4.010111672407364e-02 4.000002494628654e-02 3.989910247782946e-02 3.979834917943206e-02 + 3.969776491182379e-02 3.959734953573417e-02 3.949710291189267e-02 3.939702490102882e-02 3.929711536387203e-02 + 3.919737416115189e-02 3.909780115359791e-02 3.899839620193951e-02 3.889915916690621e-02 3.880008990922754e-02 + 3.870118828963302e-02 3.860245416885208e-02 3.850388740761421e-02 3.840548786664894e-02 3.830725540668584e-02 + 3.820918988845431e-02 3.811129117268384e-02 3.801355912010395e-02 3.791599359144421e-02 3.781859444743402e-02 + 3.772136154880290e-02 3.762429475628037e-02 3.752739393059597e-02 3.743065893247909e-02 3.733408962265928e-02 + 3.723768586186606e-02 3.714144751082894e-02 3.704537443027734e-02 3.694946648094082e-02 3.685372352354885e-02 + 3.675814541883098e-02 3.666273202751662e-02 3.656748321033533e-02 3.647239882801658e-02 3.637747874128989e-02 + 3.628272281088477e-02 3.618813089753067e-02 3.609370286195710e-02 3.599943856489357e-02 3.590533786706961e-02 + 3.581140062921466e-02 3.571762671205823e-02 3.562401597632983e-02 3.553056828275900e-02 3.543728349207515e-02 + 3.534416146500782e-02 3.525120206228652e-02 3.515840514464076e-02 3.506577057279998e-02 3.497329820749372e-02 + 3.488098790945146e-02 3.478883953940275e-02 3.469685295807699e-02 3.460502802620374e-02 3.451336460451249e-02 + 3.442186255373277e-02 3.433052173459401e-02 3.423934200782575e-02 3.414832323415747e-02 3.405746527431870e-02 + 3.396676798903889e-02 3.387623123904757e-02 3.378585488507421e-02 3.369563878784837e-02 3.360558280809946e-02 + 3.351568680655703e-02 3.342595064395056e-02 3.333637418100957e-02 3.324695727846357e-02 3.315769979704199e-02 + 3.306860159747437e-02 3.297966254049021e-02 3.289088248681904e-02 3.280226129719029e-02 3.271379883233347e-02 + 3.262549495297810e-02 3.253734951985372e-02 3.244936239368974e-02 3.236153343521570e-02 3.227386250516109e-02 + 3.218634946425545e-02 3.209899417322821e-02 3.201179649280889e-02 3.192475628372700e-02 3.183787340671206e-02 + 3.175114772249351e-02 3.166457909180088e-02 3.157816737536367e-02 3.149191243391140e-02 3.140581412817352e-02 + 3.131987231887953e-02 3.123408686675895e-02 3.114845763254130e-02 3.106298447695604e-02 3.097766726073266e-02 + 3.089250584460067e-02 3.080750008928961e-02 3.072264985552891e-02 3.063795500404810e-02 3.055341539557667e-02 + 3.046903089084416e-02 3.038480135057999e-02 3.030072663551370e-02 3.021680660637479e-02 3.013304112389275e-02 + 3.004943004879711e-02 2.996597324181731e-02 2.988267056368287e-02 2.979952187512330e-02 2.971652703686811e-02 + 2.963368590964675e-02 2.955099835418875e-02 2.946846423122360e-02 2.938608340148083e-02 2.930385572568987e-02 + 2.922178106458027e-02 2.913985927888150e-02 2.905809022932310e-02 2.897647377663451e-02 2.889500978154525e-02 + 2.881369810478483e-02 2.873253860708276e-02 2.865153114916850e-02 2.857067559177156e-02 2.848997179562144e-02 + 2.840941962144767e-02 2.832901892997968e-02 2.824876958194701e-02 2.816867143807916e-02 2.808872435910564e-02 + 2.800892820575589e-02 2.792928283875946e-02 2.784978811884582e-02 2.777044390674452e-02 2.769125006318498e-02 + 2.761220644889673e-02 2.753331292460928e-02 2.745456935105212e-02 2.737597558895477e-02 2.729753149904667e-02 + 2.721923694205737e-02 2.714109177871633e-02 2.706309586975311e-02 2.698524907589712e-02 2.690755125787792e-02 + 2.683000227642497e-02 2.675260199226783e-02 2.667535026613592e-02 2.659824695875877e-02 2.652129193086588e-02 + 2.644448504318678e-02 2.636782615645090e-02 2.629131513138777e-02 2.621495182872689e-02 2.613873610919780e-02 + 2.606266783352991e-02 2.598674686245276e-02 2.591097305669585e-02 2.583534627698871e-02 2.575986638406077e-02 + 2.568453323864157e-02 2.560934670146059e-02 2.553430663324736e-02 2.545941289473133e-02 2.538466534664203e-02 + 2.531006384970894e-02 2.523560826466160e-02 2.516129845222944e-02 2.508713427314200e-02 2.501311558812876e-02 + 2.493924225791922e-02 2.486551414324292e-02 2.479193110482929e-02 2.471849300340787e-02 2.464519969970813e-02 + 2.457205105445962e-02 2.449904692839177e-02 2.442618718223411e-02 2.435347167671614e-02 2.428090027256738e-02 + 2.420847283051727e-02 2.413618921129533e-02 2.406404927563107e-02 2.399205288425402e-02 2.392019989789362e-02 + 2.384849017727937e-02 2.377692358314079e-02 2.370549997620740e-02 2.363421921720865e-02 2.356308116687406e-02 + 2.349208568593311e-02 2.342123263511536e-02 2.335052187515022e-02 2.327995326676723e-02 2.320952667069589e-02 + 2.313924194766571e-02 2.306909895840616e-02 2.299909756364674e-02 2.292923762411695e-02 2.285951900054633e-02 + 2.278994155366431e-02 2.272050514420041e-02 2.265120963288414e-02 2.258205488044503e-02 2.251304074761250e-02 + 2.244416709511610e-02 2.237543378368530e-02 2.230684067404963e-02 2.223838762693858e-02 2.217007450308162e-02 + 2.210190116320827e-02 2.203386746804801e-02 2.196597327833039e-02 2.189821845478484e-02 2.183060285814088e-02 + 2.176312634912800e-02 2.169578878847575e-02 2.162859003691357e-02 2.156152995517096e-02 2.149460840397744e-02 + 2.142782524406253e-02 2.136118033615566e-02 2.129467354098637e-02 2.122830471928416e-02 2.116207373177853e-02 + 2.109598043919896e-02 2.103002470227495e-02 2.096420638173599e-02 2.089852533831163e-02 2.083298143273129e-02 + 2.076757452572451e-02 2.070230447802078e-02 2.063717115034963e-02 2.057217440344050e-02 2.050731409802292e-02 + 2.044259009482638e-02 2.037800225458040e-02 2.031355043801443e-02 2.024923450585800e-02 2.018505431884060e-02 + 2.012100973769173e-02 2.005710062314091e-02 1.999332683591760e-02 1.992968823675130e-02 1.986618468637153e-02 + 1.980281604550779e-02 1.973958217488955e-02 1.967648293524631e-02 1.961351818730759e-02 1.955068779180290e-02 + 1.948799160946169e-02 1.942542950101347e-02 1.936300132718777e-02 1.930070694871408e-02 1.923854622632186e-02 + 1.917651902074064e-02 1.911462519269990e-02 1.905286460292917e-02 1.899123711215791e-02 1.892974258111562e-02 + 1.886838087053181e-02 1.880715184113601e-02 1.874605535365765e-02 1.868509126882627e-02 1.862425944737136e-02 + 1.856355975002244e-02 1.850299203750895e-02 1.844255617056043e-02 1.838225200990637e-02 1.832207941627629e-02 + 1.826203825039963e-02 1.820212837300593e-02 1.814234964482469e-02 1.808270192658538e-02 1.802318507901754e-02 + 1.796379896285062e-02 1.790454343872297e-02 1.784541836513687e-02 1.778642359843651e-02 1.772755899487045e-02 + 1.766882441068734e-02 1.761021970213578e-02 1.755174472546439e-02 1.749339933692175e-02 1.743518339275648e-02 + 1.737709674921720e-02 1.731913926255254e-02 1.726131078901105e-02 1.720361118484138e-02 1.714604030629212e-02 + 1.708859800961192e-02 1.703128415104933e-02 1.697409858685299e-02 1.691704117327150e-02 1.686011176655350e-02 + 1.680331022294755e-02 1.674663639870229e-02 1.669009015006631e-02 1.663367133328826e-02 1.657737980461669e-02 + 1.652121542030025e-02 1.646517803658753e-02 1.640926750972717e-02 1.635348369596773e-02 1.629782645155784e-02 + 1.624229563274612e-02 1.618689109578117e-02 1.613161269691162e-02 1.607646029238604e-02 1.602143373845306e-02 + 1.596653289136129e-02 1.591175760735935e-02 1.585710774269581e-02 1.580258315361932e-02 1.574818369637846e-02 + 1.569390922722188e-02 1.563975960239814e-02 1.558573467815586e-02 1.553183431074367e-02 1.547805835641019e-02 + 1.542440667140398e-02 1.537087911197367e-02 1.531747553436788e-02 1.526419579483524e-02 1.521103974962430e-02 + 1.515800725498371e-02 1.510509816716207e-02 1.505231234240801e-02 1.499964963697009e-02 1.494710990709695e-02 + 1.489469300903720e-02 1.484239879903946e-02 1.479022713335231e-02 1.473817786822437e-02 1.468625085990425e-02 + 1.463444596464058e-02 1.458276303868193e-02 1.453120193827693e-02 1.447976251967419e-02 1.442844463912233e-02 + 1.437724815286993e-02 1.432617291716562e-02 1.427521878825798e-02 1.422438562239566e-02 1.417367327582728e-02 + 1.412308160480139e-02 1.407261046556662e-02 1.402225971437159e-02 1.397202920746493e-02 1.392191880109521e-02 + 1.387192835151105e-02 1.382205771496106e-02 1.377230674769388e-02 1.372267530595806e-02 1.367316324600226e-02 + 1.362377042407505e-02 1.357449669642509e-02 1.352534191930093e-02 1.347630594895120e-02 1.342738864162452e-02 + 1.337858985356952e-02 1.332990944103476e-02 1.328134726026887e-02 1.323290316752046e-02 1.318457701903816e-02 + 1.313636867107054e-02 1.308827797986622e-02 1.304030480167382e-02 1.299244899274197e-02 1.294471040931923e-02 + 1.289708890765423e-02 1.284958434399559e-02 1.280219657459192e-02 1.275492545569181e-02 1.270777084354387e-02 + 1.266073259439673e-02 1.261381056449897e-02 1.256700461009925e-02 1.252031458744611e-02 1.247374035278820e-02 + 1.242728176237412e-02 1.238093867245251e-02 1.233471093927193e-02 1.228859841908100e-02 1.224260096812834e-02 + 1.219671844266258e-02 1.215095069893228e-02 1.210529759318608e-02 1.205975898167258e-02 1.201433472064042e-02 + 1.196902466633815e-02 1.192382867501442e-02 1.187874660291783e-02 1.183377830629700e-02 1.178892364140051e-02 + 1.174418246447699e-02 1.169955463177504e-02 1.165503999954330e-02 1.161063842403033e-02 1.156634976148476e-02 + 1.152217386815520e-02 1.147811060029028e-02 1.143415981413857e-02 1.139032136594870e-02 1.134659511196927e-02 + 1.130298090844892e-02 1.125947861163621e-02 1.121608807777978e-02 1.117280916312823e-02 1.112964172393017e-02 + 1.108658561643422e-02 1.104364069688897e-02 1.100080682154304e-02 1.095808384664503e-02 1.091547162844358e-02 + 1.087297002318726e-02 1.083057888712468e-02 1.078829807650447e-02 1.074612744757525e-02 1.070406685658559e-02 + 1.066211615978412e-02 1.062027521341945e-02 1.057854387374020e-02 1.053692199699495e-02 1.049540943943233e-02 + 1.045400605730094e-02 1.041271170684941e-02 1.037152624432632e-02 1.033044952598028e-02 1.028948140805991e-02 + 1.024862174681384e-02 1.020787039849065e-02 1.016722721933894e-02 1.012669206560735e-02 1.008626479354448e-02 + 1.004594525939892e-02 1.000573331941929e-02 9.965628829854205e-03 9.925631646952281e-03 9.885741626962105e-03 + 9.845958626132295e-03 9.806282500711461e-03 9.766713106948224e-03 9.727250301091174e-03 9.687893939388922e-03 + 9.648643878090089e-03 9.609499973443269e-03 9.570462081697095e-03 9.531530059100150e-03 9.492703761901051e-03 + 9.453983046348409e-03 9.415367768690846e-03 9.376857785176945e-03 9.338452952055326e-03 9.300153125574601e-03 + 9.261958161983393e-03 9.223867917530281e-03 9.185882248463889e-03 9.148001011032818e-03 9.110224061485711e-03 + 9.072551256071124e-03 9.034982451037702e-03 8.997517502634035e-03 8.960156267108764e-03 8.922898600710457e-03 + 8.885744359687739e-03 8.848693400289223e-03 8.811745578763531e-03 8.774900751359239e-03 8.738158774324977e-03 + 8.701519503909350e-03 8.664982796360977e-03 8.628548507928447e-03 8.592216494860380e-03 8.555986613405385e-03 + 8.519858719812080e-03 8.483832670329055e-03 8.447908321204923e-03 8.412085528688303e-03 8.376364149027796e-03 + 8.340744038472027e-03 8.305225053269574e-03 8.269807049669070e-03 8.234489883919114e-03 8.199273412268336e-03 + 8.164157490965312e-03 8.129141976258669e-03 8.094226724397005e-03 8.059411591628960e-03 8.024696434203098e-03 + 7.990081108368059e-03 7.955565470372437e-03 7.921149376464860e-03 7.886832682893913e-03 7.852615245908214e-03 + 7.818496921756376e-03 7.784477566687015e-03 7.750557036948720e-03 7.716735188790110e-03 7.683011878459793e-03 + 7.649386962206392e-03 7.615860296278496e-03 7.582431736924712e-03 7.549101140393664e-03 7.515868362933969e-03 + 7.482733260794206e-03 7.449695690222999e-03 7.416755507468959e-03 7.383912568780708e-03 7.351166730406827e-03 + 7.318517848595938e-03 7.285965779596649e-03 7.253510379657572e-03 7.221151505027326e-03 7.188889011954499e-03 + 7.156722756687706e-03 7.124652595475558e-03 7.092678384566681e-03 7.060799980209652e-03 7.029017238653099e-03 + 6.997330016145626e-03 6.965738168935856e-03 6.934241553272372e-03 6.902840025403800e-03 6.871533441578741e-03 + 6.840321658045828e-03 6.809204531053630e-03 6.778181916850779e-03 6.747253671685882e-03 6.716419651807561e-03 + 6.685679713464399e-03 6.655033712905014e-03 6.624481506378021e-03 6.594022950132032e-03 6.563657900415641e-03 + 6.533386213477465e-03 6.503207745566116e-03 6.473122352930210e-03 6.443129891818337e-03 6.413230218479116e-03 + 6.383423189161154e-03 6.353708660113071e-03 6.324086487583456e-03 6.294556527820926e-03 6.265118637074094e-03 + 6.235772671591568e-03 6.206518487621963e-03 6.177355941413872e-03 6.148284889215913e-03 6.119305187276698e-03 + 6.090416691844841e-03 6.061619259168929e-03 6.032912745497586e-03 6.004297007079420e-03 5.975771900163051e-03 + 5.947337280997061e-03 5.918993005830076e-03 5.890738930910704e-03 5.862574912487566e-03 5.834500806809243e-03 + 5.806516470124362e-03 5.778621758681529e-03 5.750816528729360e-03 5.723100636516450e-03 5.695473938291410e-03 + 5.667936290302856e-03 5.640487548799405e-03 5.613127570029646e-03 5.585856210242193e-03 5.558673325685662e-03 + 5.531578772608670e-03 5.504572407259803e-03 5.477654085887683e-03 5.450823664740917e-03 5.424081000068129e-03 + 5.397425948117900e-03 5.370858365138850e-03 5.344378107379596e-03 5.317985031088746e-03 5.291678992514898e-03 + 5.265459847906665e-03 5.239327453512659e-03 5.213281665581490e-03 5.187322340361775e-03 5.161449334102100e-03 + 5.135662503051089e-03 5.109961703457348e-03 5.084346791569499e-03 5.058817623636128e-03 5.033374055905854e-03 + 5.008015944627285e-03 4.982743146049042e-03 4.957555516419718e-03 4.932452911987924e-03 4.907435189002269e-03 + 4.882502203711378e-03 4.857653812363840e-03 4.832889871208267e-03 4.808210236493273e-03 4.783614764467474e-03 + 4.759103311379466e-03 4.734675733477858e-03 4.710331887011266e-03 4.686071628228306e-03 4.661894813377568e-03 + 4.637801298707671e-03 4.613790940467224e-03 4.589863594904843e-03 4.566019118269118e-03 4.542257366808671e-03 + 4.518578196772109e-03 4.494981464408054e-03 4.471467025965088e-03 4.448034737691835e-03 4.424684455836904e-03 + 4.401416036648902e-03 4.378229336376447e-03 4.355124211268131e-03 4.332100517572573e-03 4.309158111538376e-03 + 4.286296849414167e-03 4.263516587448529e-03 4.240817181890086e-03 4.218198488987445e-03 4.195660364989219e-03 + 4.173202666144005e-03 4.150825248700419e-03 4.128527968907071e-03 4.106310683012575e-03 4.084173247265527e-03 + 4.062115517914543e-03 4.040137351208228e-03 4.018238603395208e-03 3.996419130724064e-03 3.974678789443424e-03 + 3.953017435801891e-03 3.931434926048083e-03 3.909931116430592e-03 3.888505863198038e-03 3.867159022599027e-03 + 3.845890450882177e-03 3.824700004296082e-03 3.803587539089355e-03 3.782552911510609e-03 3.761595977808460e-03 + 3.740716594231500e-03 3.719914617028346e-03 3.699189902447607e-03 3.678542306737894e-03 3.657971686147821e-03 + 3.637477896925982e-03 3.617060795320995e-03 3.596720237581467e-03 3.576456079956017e-03 3.556268178693235e-03 + 3.536156390041741e-03 3.516120570250142e-03 3.496160575567056e-03 3.476276262241076e-03 3.456467486520818e-03 + 3.436734104654891e-03 3.417075972891913e-03 3.397492947480476e-03 3.377984884669197e-03 3.358551640706685e-03 + 3.339193071841557e-03 3.319909034322406e-03 3.300699384397850e-03 3.281563978316495e-03 3.262502672326960e-03 + 3.243515322677838e-03 3.224601785617746e-03 3.205761917395293e-03 3.186995574259093e-03 3.168302612457743e-03 + 3.149682888239858e-03 3.131136257854047e-03 3.112662577548928e-03 3.094261703573092e-03 3.075933492175158e-03 + 3.057677799603733e-03 3.039494482107426e-03 3.021383395934856e-03 3.003344397334615e-03 2.985377342555319e-03 + 2.967482087845577e-03 2.949658489454007e-03 2.931906403629201e-03 2.914225686619777e-03 2.896616194674343e-03 + 2.879077784041516e-03 2.861610310969888e-03 2.844213631708079e-03 2.826887602504695e-03 2.809632079608352e-03 + 2.792446919267647e-03 2.775331977731194e-03 2.758287111247604e-03 2.741312176065491e-03 2.724407028433449e-03 + 2.707571524600097e-03 2.690805520814042e-03 2.674108873323900e-03 2.657481438378266e-03 2.640923072225757e-03 + 2.624433631114980e-03 2.608012971294552e-03 2.591660949013068e-03 2.575377420519144e-03 2.559162242061389e-03 + 2.543015269888418e-03 2.526936360248827e-03 2.510925369391232e-03 2.494982153564241e-03 2.479106569016469e-03 + 2.463298471996514e-03 2.447557718752990e-03 2.431884165534506e-03 2.416277668589671e-03 2.400738084167101e-03 + 2.385265268515391e-03 2.369859077883157e-03 2.354519368519007e-03 2.339245996671558e-03 2.324038818589404e-03 + 2.308897690521163e-03 2.293822468715441e-03 2.278813009420856e-03 2.263869168886002e-03 2.248990803359497e-03 + 2.234177769089947e-03 2.219429922325968e-03 2.204747119316157e-03 2.190129216309129e-03 2.175576069553493e-03 + 2.161087535297863e-03 2.146663469790839e-03 2.132303729281031e-03 2.118008170017052e-03 2.103776648247515e-03 + 2.089609020221018e-03 2.075505142186175e-03 2.061464870391595e-03 2.047488061085894e-03 2.033574570517667e-03 + 2.019724254935531e-03 2.005936970588094e-03 1.992212573723970e-03 1.978550920591757e-03 1.964951867440071e-03 + 1.951415270517519e-03 1.937940986072710e-03 1.924528870354260e-03 1.911178779610765e-03 1.897890570090841e-03 + 1.884664098043096e-03 1.871499219716145e-03 1.858395791358585e-03 1.845353669219032e-03 1.832372709546094e-03 + 1.819452768588385e-03 1.806593702594503e-03 1.793795367813064e-03 1.781057620492675e-03 1.768380316881951e-03 + 1.755763313229490e-03 1.743206465783907e-03 1.730709630793810e-03 1.718272664507814e-03 1.705895423174517e-03 + 1.693577763042532e-03 1.681319540360471e-03 1.669120611376945e-03 1.656980832340554e-03 1.644900059499912e-03 + 1.632878149103628e-03 1.620914957400315e-03 1.609010340638574e-03 1.597164155067017e-03 1.585376256934253e-03 + 1.573646502488897e-03 1.561974747979547e-03 1.550360849654818e-03 1.538804663763317e-03 1.527306046553655e-03 + 1.515864854274445e-03 1.504480943174286e-03 1.493154169501792e-03 1.481884389505572e-03 1.470671459434240e-03 + 1.459515235536394e-03 1.448415574060649e-03 1.437372331255614e-03 1.426385363369901e-03 1.415454526652112e-03 + 1.404579677350858e-03 1.393760671714750e-03 1.382997365992401e-03 1.372289616432411e-03 1.361637279283392e-03 + 1.351040210793954e-03 1.340498267212711e-03 1.330011304788262e-03 1.319579179769221e-03 1.309201748404197e-03 + 1.298878866941802e-03 1.288610391630638e-03 1.278396178719316e-03 1.268236084456448e-03 1.258129965090645e-03 + 1.248077676870508e-03 1.238079076044650e-03 1.228134018861680e-03 1.218242361570212e-03 1.208403960418845e-03 + 1.198618671656193e-03 1.188886351530865e-03 1.179206856291474e-03 1.169580042186619e-03 1.160005765464916e-03 + 1.150483882374972e-03 1.141014249165397e-03 1.131596722084803e-03 1.122231157381791e-03 1.112917411304974e-03 + 1.103655340102962e-03 1.094444800024366e-03 1.085285647317788e-03 1.076177738231842e-03 1.067120929015135e-03 + 1.058115075916281e-03 1.049160035183880e-03 1.040255663066546e-03 1.031401815812888e-03 1.022598349671518e-03 + 1.013845120891037e-03 1.005141985720059e-03 9.964888004071919e-04 9.878854212010486e-04 9.793317043502309e-04 + 9.708275061033512e-04 9.623726827090181e-04 9.539670904158446e-04 9.456105854724324e-04 9.373030241273940e-04 + 9.290442626293378e-04 9.208341572268767e-04 9.126725641686127e-04 9.045593397031583e-04 8.964943400791219e-04 + 8.884774215451166e-04 8.805084403497438e-04 8.725872527416161e-04 8.647137149693424e-04 8.568876832815321e-04 + 8.491090139267964e-04 8.413775631537383e-04 8.336931872109701e-04 8.260557423471004e-04 8.184650848107415e-04 + 8.109210708504961e-04 8.034235567149758e-04 7.959723986527902e-04 7.885674529125507e-04 7.812085757428605e-04 + 7.738956233923316e-04 7.666284521095726e-04 7.594069181431954e-04 7.522308777418032e-04 7.451001871540077e-04 + 7.380147026284183e-04 7.309742804136466e-04 7.239787767582952e-04 7.170280479109767e-04 7.101219501202994e-04 + 7.032603396348755e-04 6.964430727033079e-04 6.896700055742087e-04 6.829409944961865e-04 6.762558957178533e-04 + 6.696145654878124e-04 6.630168600546754e-04 6.564626356670511e-04 6.499517485735516e-04 6.434840550227800e-04 + 6.370594112633479e-04 6.306776735438646e-04 6.243386981129385e-04 6.180423412191816e-04 6.117884591111977e-04 + 6.055769080375977e-04 5.994075442469912e-04 5.932802239879889e-04 5.871948035091956e-04 5.811511390592223e-04 + 5.751490868866776e-04 5.691885032401732e-04 5.632692443683132e-04 5.573911665197090e-04 5.515541259429694e-04 + 5.457579788867056e-04 5.400025815995219e-04 5.342877903300293e-04 5.286134613268377e-04 5.229794508385569e-04 + 5.173856151137926e-04 5.118318104011550e-04 5.063178929492534e-04 5.008437190066993e-04 4.954091448220964e-04 + 4.900140266440566e-04 4.846582207211883e-04 4.793415833021029e-04 4.740639706354048e-04 4.688252389697055e-04 + 4.636252445536134e-04 4.584638436357397e-04 4.533408924646894e-04 4.482562472890731e-04 4.432097643574999e-04 + 4.382012999185791e-04 4.332307102209210e-04 4.282978515131307e-04 4.234025800438191e-04 4.185447520615955e-04 + 4.137242238150707e-04 4.089408515528493e-04 4.041944915235423e-04 3.994849999757589e-04 3.948122331581099e-04 + 3.901760473192000e-04 3.855762987076405e-04 3.810128435720403e-04 3.764855381610099e-04 3.719942387231546e-04 + 3.675388015070854e-04 3.631190827614110e-04 3.587349387347422e-04 3.543862256756842e-04 3.500727998328479e-04 + 3.457945174548421e-04 3.415512347902775e-04 3.373428080877597e-04 3.331690935958992e-04 3.290299475633049e-04 + 3.249252262385874e-04 3.208547858703525e-04 3.168184827072106e-04 3.128161729977707e-04 3.088477129906432e-04 + 3.049129589344340e-04 3.010117670777535e-04 2.971439936692106e-04 2.933094949574159e-04 2.895081271909752e-04 + 2.857397466184990e-04 2.820042094885960e-04 2.783013720498754e-04 2.746310905509476e-04 2.709932212404183e-04 + 2.673876203668981e-04 2.638141441789959e-04 2.602726489253221e-04 2.567629908544828e-04 2.532850262150882e-04 + 2.498386112557472e-04 2.464236022250703e-04 2.430398553716636e-04 2.396872269441373e-04 2.363655731911004e-04 + 2.330747503611633e-04 2.298146147029320e-04 2.265850224650169e-04 2.233858298960269e-04 2.202168932445723e-04 + 2.170780687592593e-04 2.139692126886982e-04 2.108901812814979e-04 2.078408307862685e-04 2.048210174516166e-04 + 2.018305975261523e-04 1.988694272584845e-04 1.959373628972234e-04 1.930342606909753e-04 1.901599768883506e-04 + 1.873143677379581e-04 1.844972894884079e-04 1.817085983883066e-04 1.789481506862643e-04 1.762158026308899e-04 + 1.735114104707923e-04 1.708348304545817e-04 1.681859188308646e-04 1.655645318482511e-04 1.629705257553502e-04 + 1.604037568007718e-04 1.578640812331228e-04 1.553513553010130e-04 1.528654352530516e-04 1.504061773378482e-04 + 1.479734378040100e-04 1.455670729001469e-04 1.431869388748686e-04 1.408328919767813e-04 1.385047884544977e-04 + 1.362024845566247e-04 1.339258365317697e-04 1.316747006285450e-04 1.294489330955560e-04 1.272483901814152e-04 + 1.250729281347298e-04 1.229224032041069e-04 1.207966716381590e-04 1.186955896854931e-04 1.166190135947167e-04 + 1.145667996144419e-04 1.125388039932743e-04 1.105348829798262e-04 1.085548928227049e-04 1.065986897705177e-04 + 1.046661300718766e-04 1.027570699753891e-04 1.008713657296624e-04 9.900887358330876e-05 9.716944978493387e-05 + 9.535295058314972e-05 9.355923222656375e-05 9.178815096378338e-05 9.003956304342048e-05 8.831332471408114e-05 + 8.660929222437702e-05 8.492732182291570e-05 8.326726975830472e-05 8.162899227915576e-05 8.001234563407632e-05 + 7.841718607167412e-05 7.684336984056057e-05 7.529075318934215e-05 7.375919236663024e-05 7.224854362103254e-05 + 7.075866320115673e-05 6.928940735561416e-05 6.784063233301257e-05 6.641219438195972e-05 6.500394975106684e-05 + 6.361575468894061e-05 6.224746544419213e-05 6.089893826542929e-05 5.957002940125986e-05 5.826059510029498e-05 + 5.697049161114246e-05 5.569957518241021e-05 5.444770206270919e-05 5.321472850064636e-05 5.200051074483260e-05 + 5.080490504387584e-05 4.962776764638405e-05 4.846895480096806e-05 4.732832275623497e-05 4.620572776079547e-05 + 4.510102606325759e-05 4.401407391222942e-05 4.294472755632157e-05 4.189284324414216e-05 4.085827722429926e-05 + 3.984088574540343e-05 3.884052505606199e-05 3.785705140488547e-05 3.689032104048197e-05 3.594019021145967e-05 + 3.500651516642904e-05 3.408915215399821e-05 3.318795742277539e-05 3.230278722137097e-05 3.143349779839244e-05 + 3.057994540245013e-05 2.974198628215226e-05 2.891947668610709e-05 2.811227286292489e-05 2.732023106121389e-05 + 2.654320752958242e-05 2.578105851664065e-05 2.503364027099627e-05 2.430080904125942e-05 2.358242107603841e-05 + 2.287833262394161e-05 2.218839993357908e-05 2.151247925355917e-05 2.085042683249028e-05 2.020209891898239e-05 + 1.956735176164341e-05 1.894604160908327e-05 1.833802470991036e-05 1.774315731273317e-05 1.716129566616156e-05 + 1.659229601880353e-05 1.603601461926890e-05 1.549230771616617e-05 1.496103155810380e-05 1.444204239369161e-05 + 1.393519647153807e-05 1.344035004025171e-05 1.295735934844227e-05 1.248608064471789e-05 1.202637017768825e-05 + 1.157808419596189e-05 1.114107894814740e-05 1.071521068285440e-05 1.030033564869146e-05 9.896310094267184e-06 + 9.502990268191156e-06 9.120232419071657e-06 8.747892795518239e-06 8.385827646139515e-06 8.033893219544123e-06 + 7.691945764341566e-06 7.359841529140471e-06 7.037436762549516e-06 6.724587713178145e-06 6.421150629634780e-06 + 6.126981760528832e-06 5.841937354468980e-06 5.565873660063932e-06 5.298646925923060e-06 5.040113400655060e-06 + 4.790129332868661e-06 4.548550971173195e-06 4.315234564177192e-06 4.090036360489959e-06 3.872812608720230e-06 + 3.663419557476763e-06 3.461713455368821e-06 3.267550551005007e-06 3.080787092994556e-06 2.901279329946239e-06 + 2.728883510468841e-06 2.563455883171568e-06 2.404852696663204e-06 2.252930199552555e-06 2.107544640448791e-06 + 1.968552267960603e-06 1.835809330697142e-06 1.709172077267219e-06 1.588496756279663e-06 1.473639616343597e-06 + 1.364456906067845e-06 1.260804874061252e-06 1.162539768932911e-06 1.069517839291589e-06 9.815953337463618e-07 + 8.986285009060785e-07 8.204735893796031e-07 7.469868477759875e-07 6.780245247040928e-07 6.134428687727947e-07 + 5.530981285911221e-07 4.968465527679040e-07 4.445443899121569e-07 3.960478886327589e-07 3.512132975386017e-07 + 3.098968652386831e-07 2.719548403418620e-07 2.372434714571254e-07 2.056190071933670e-07 1.769376961594907e-07 + 1.510557869644685e-07 1.278295282172019e-07 1.071151685266009e-07 8.876895650162454e-08 7.264714075116895e-08 + 5.860596988418577e-08 4.650169250958690e-08 3.619055723629051e-08 2.752881267323894e-08 2.037270742934896e-08 + 1.457849011354222e-08 1.000240933475375e-08 6.500713701901725e-09 3.929651823917492e-09 2.145472309723612e-09 + 1.004423768245183e-09 3.627548084097459e-10 7.671403914193890e-11 2.550069367546636e-12 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 1.184510019832191e+01 1.183003611625487e+01 1.181498521332641e+01 1.179994748365501e+01 1.178492292135909e+01 + 1.176991152055712e+01 1.175491327536755e+01 1.173992817990884e+01 1.172495622829943e+01 1.170999741465779e+01 + 1.169505173310237e+01 1.168011917775162e+01 1.166519974272399e+01 1.165029342213795e+01 1.163540021011193e+01 + 1.162052010076441e+01 1.160565308821382e+01 1.159079916657862e+01 1.157595832997728e+01 1.156113057252825e+01 + 1.154631588834996e+01 1.153151427156088e+01 1.151672571627947e+01 1.150195021662419e+01 1.148718776671346e+01 + 1.147243836066577e+01 1.145770199259956e+01 1.144297865663328e+01 1.142826834688538e+01 1.141357105747433e+01 + 1.139888678251857e+01 1.138421551613657e+01 1.136955725244677e+01 1.135491198556763e+01 1.134027970961759e+01 + 1.132566041871512e+01 1.131105410697867e+01 1.129646076852669e+01 1.128188039747764e+01 1.126731298794997e+01 + 1.125275853406214e+01 1.123821702993260e+01 1.122368846967979e+01 1.120917284742218e+01 1.119467015727823e+01 + 1.118018039336637e+01 1.116570354980508e+01 1.115123962071280e+01 1.113678860020798e+01 1.112235048240908e+01 + 1.110792526143456e+01 1.109351293140286e+01 1.107911348643245e+01 1.106472692064177e+01 1.105035322814928e+01 + 1.103599240307343e+01 1.102164443953269e+01 1.100730933164549e+01 1.099298707353030e+01 1.097867765930556e+01 + 1.096438108308975e+01 1.095009733900130e+01 1.093582642115866e+01 1.092156832368030e+01 1.090732304068468e+01 + 1.089309056629023e+01 1.087887089461541e+01 1.086466401977870e+01 1.085046993589853e+01 1.083628863709334e+01 + 1.082212011748162e+01 1.080796437118179e+01 1.079382139231234e+01 1.077969117499169e+01 1.076557371333831e+01 + 1.075146900147065e+01 1.073737703350717e+01 1.072329780356632e+01 1.070923130576655e+01 1.069517753422632e+01 + 1.068113648306408e+01 1.066710814639828e+01 1.065309251834738e+01 1.063908959302984e+01 1.062509936456410e+01 + 1.061112182706863e+01 1.059715697466186e+01 1.058320480146227e+01 1.056926530158830e+01 1.055533846915840e+01 + 1.054142429829104e+01 1.052752278310466e+01 1.051363391771772e+01 1.049975769624867e+01 1.048589411281596e+01 + 1.047204316153806e+01 1.045820483653340e+01 1.044437913192047e+01 1.043056604181768e+01 1.041676556034352e+01 + 1.040297768161642e+01 1.038920239975484e+01 1.037543970887725e+01 1.036168960310208e+01 1.034795207654780e+01 + 1.033422712333286e+01 1.032051473757571e+01 1.030681491339481e+01 1.029312764490860e+01 1.027945292623556e+01 + 1.026579075149412e+01 1.025214111480275e+01 1.023850401027989e+01 1.022487943204399e+01 1.021126737421354e+01 + 1.019766783090694e+01 1.018408079624269e+01 1.017050626433922e+01 1.015694422931499e+01 1.014339468528846e+01 + 1.012985762637807e+01 1.011633304670228e+01 1.010282094037955e+01 1.008932130152833e+01 1.007583412426707e+01 + 1.006235940271423e+01 1.004889713098826e+01 1.003544730320761e+01 1.002200991349075e+01 1.000858495595611e+01 + 9.995172424722163e+00 9.981772313907358e+00 9.968384617630145e+00 9.955009330008981e+00 9.941646445162320e+00 + 9.928295957208617e+00 9.914957860266320e+00 9.901632148453889e+00 9.888318815889773e+00 9.875017856692436e+00 + 9.861729264980317e+00 9.848453034871882e+00 9.835189160485580e+00 9.821937635939873e+00 9.808698455353197e+00 + 9.795471612844016e+00 9.782257102530791e+00 9.769054918531968e+00 9.755865054966003e+00 9.742687505951341e+00 + 9.729522265606452e+00 9.716369328049780e+00 9.703228687399781e+00 9.690100337774904e+00 9.676984273293613e+00 + 9.663880488074357e+00 9.650788976235585e+00 9.637709731895756e+00 9.624642749173331e+00 9.611588022186748e+00 + 9.598545545054472e+00 9.585515311894952e+00 9.572497316826642e+00 9.559491553968009e+00 9.546498017437488e+00 + 9.533516701353536e+00 9.520547599834613e+00 9.507590706999174e+00 9.494646016965673e+00 9.481713523852560e+00 + 9.468793221778288e+00 9.455885104861313e+00 9.442989167220089e+00 9.430105402973073e+00 9.417233806238709e+00 + 9.404374371135466e+00 9.391527091781786e+00 9.378691962296129e+00 9.365868976796950e+00 9.353058129402688e+00 + 9.340259414231813e+00 9.327472825402777e+00 9.314698357034032e+00 9.301936003244025e+00 9.289185758151220e+00 + 9.276447615874064e+00 9.263721570531015e+00 9.251007616240530e+00 9.238305747121052e+00 9.225615957291046e+00 + 9.212938240868960e+00 9.200272591973253e+00 9.187619004722370e+00 9.174977473234772e+00 9.162347991628911e+00 + 9.149730554023241e+00 9.137125154536221e+00 9.124531787286292e+00 9.111950446391919e+00 9.099381125971549e+00 + 9.086823820143648e+00 9.074278523026656e+00 9.061745228739030e+00 9.049223931399224e+00 9.036714625125702e+00 + 9.024217304036908e+00 9.011731962251293e+00 8.999258593887324e+00 8.986797193063444e+00 8.974347753898108e+00 + 8.961910270509771e+00 8.949484737016887e+00 8.937071147537912e+00 8.924669496191306e+00 8.912279777095502e+00 + 8.899901984368976e+00 8.887536112130167e+00 8.875182154497541e+00 8.862840105589546e+00 8.850509959524626e+00 + 8.838191710421256e+00 8.825885352397878e+00 8.813590879572939e+00 8.801308286064907e+00 8.789037565992222e+00 + 8.776778713473353e+00 8.764531722626746e+00 8.752296587570854e+00 8.740073302424127e+00 8.727861861305035e+00 + 8.715662258332012e+00 8.703474487623518e+00 8.691298543298020e+00 8.679134419473952e+00 8.666982110269780e+00 + 8.654841609803961e+00 8.642712912194941e+00 8.630596011561174e+00 8.618490902021113e+00 8.606397577693221e+00 + 8.594316032695943e+00 8.582246261147736e+00 8.570188257167056e+00 8.558142014872352e+00 8.546107528382082e+00 + 8.534084791814701e+00 8.522073799288661e+00 8.510074544922407e+00 8.498087022834406e+00 8.486111227143113e+00 + 8.474147151966971e+00 8.462194791424441e+00 8.450254139633971e+00 8.438325190714020e+00 8.426407938783044e+00 + 8.414502377959495e+00 8.402608502361817e+00 8.390726306108480e+00 8.378855783317928e+00 8.366996928108620e+00 + 8.355149734599001e+00 8.343314196907537e+00 8.331490309152674e+00 8.319678065452869e+00 8.307877459926578e+00 + 8.296088486692241e+00 8.284311139868331e+00 8.272545413573296e+00 8.260791301925581e+00 8.249048799043644e+00 + 8.237317899045944e+00 8.225598596050943e+00 8.213890884177079e+00 8.202194757542799e+00 8.190510210266586e+00 + 8.178837236466865e+00 8.167175830262108e+00 8.155525985770758e+00 8.143887697111275e+00 8.132260958402117e+00 + 8.120645763761727e+00 8.109042107308563e+00 8.097449983161082e+00 8.085869385437743e+00 8.074300308256985e+00 + 8.062742745737271e+00 8.051196691997054e+00 8.039662141154793e+00 8.028139087328933e+00 8.016627524637929e+00 + 8.005127447200245e+00 7.993638849134322e+00 7.982161724558620e+00 7.970696067591595e+00 7.959241872351688e+00 + 7.947799132957380e+00 7.936367843527097e+00 7.924947998179305e+00 7.913539591032457e+00 7.902142616205003e+00 + 7.890757067815414e+00 7.879382939982121e+00 7.868020226823591e+00 7.856668922458269e+00 7.845329021004621e+00 + 7.834000516581088e+00 7.822683403306132e+00 7.811377675298203e+00 7.800083326675765e+00 7.788800351557255e+00 + 7.777528744061140e+00 7.766268498305876e+00 7.755019608409903e+00 7.743782068491678e+00 7.732555872669666e+00 + 7.721341015062316e+00 7.710137489788076e+00 7.698945290965412e+00 7.687764412712761e+00 7.676594849148589e+00 + 7.665436594391352e+00 7.654289642559492e+00 7.643153987771468e+00 7.632029624145747e+00 7.620916545800760e+00 + 7.609814746854981e+00 7.598724221426850e+00 7.587644963634824e+00 7.576576967597366e+00 7.565520227432924e+00 + 7.554474737259942e+00 7.543440491196885e+00 7.532417483362217e+00 7.521405707874366e+00 7.510405158851806e+00 + 7.499415830412979e+00 7.488437716676350e+00 7.477470811760371e+00 7.466515109783484e+00 7.455570604864154e+00 + 7.444637291120840e+00 7.433715162671977e+00 7.422804213636035e+00 7.411904438131464e+00 7.401015830276713e+00 + 7.390138384190245e+00 7.379272093990504e+00 7.368416953795946e+00 7.357572957725034e+00 7.346740099896214e+00 + 7.335918374427944e+00 7.325107775438666e+00 7.314308297046848e+00 7.303519933370942e+00 7.292742678529400e+00 + 7.281976526640671e+00 7.271221471823206e+00 7.260477508195482e+00 7.249744629875925e+00 7.239022830983001e+00 + 7.228312105635165e+00 7.217612447950875e+00 7.206923852048572e+00 7.196246312046720e+00 7.185579822063771e+00 + 7.174924376218174e+00 7.164279968628396e+00 7.153646593412868e+00 7.143024244690062e+00 7.132412916578432e+00 + 7.121812603196429e+00 7.111223298662504e+00 7.100644997095114e+00 7.090077692612701e+00 7.079521379333741e+00 + 7.068976051376674e+00 7.058441702859952e+00 7.047918327902033e+00 7.037405920621373e+00 7.026904475136423e+00 + 7.016413985565637e+00 7.005934446027467e+00 6.995465850640374e+00 6.985008193522812e+00 6.974561468793224e+00 + 6.964125670570069e+00 6.953700792971802e+00 6.943286830116882e+00 6.932883776123755e+00 6.922491625110874e+00 + 6.912110371196699e+00 6.901740008499687e+00 6.891380531138286e+00 6.881031933230944e+00 6.870694208896131e+00 + 6.860367352252279e+00 6.850051357417861e+00 6.839746218511328e+00 6.829451929651125e+00 6.819168484955712e+00 + 6.808895878543539e+00 6.798634104533068e+00 6.788383157042741e+00 6.778143030191029e+00 6.767913718096366e+00 + 6.757695214877219e+00 6.747487514652034e+00 6.737290611539279e+00 6.727104499657389e+00 6.716929173124835e+00 + 6.706764626060061e+00 6.696610852581521e+00 6.686467846807668e+00 6.676335602856960e+00 6.666214114847852e+00 + 6.656103376898796e+00 6.646003383128244e+00 6.635914127654651e+00 6.625835604596471e+00 6.615767808072159e+00 + 6.605710732200167e+00 6.595664371098951e+00 6.585628718886966e+00 6.575603769682662e+00 6.565589517604495e+00 + 6.555585956770917e+00 6.545593081300388e+00 6.535610885311354e+00 6.525639362922274e+00 6.515678508251603e+00 + 6.505728315417784e+00 6.495788778539287e+00 6.485859891734556e+00 6.475941649122047e+00 6.466034044820213e+00 + 6.456137072947508e+00 6.446250727622387e+00 6.436375002963300e+00 6.426509893088710e+00 6.416655392117070e+00 + 6.406811494166821e+00 6.396978193356429e+00 6.387155483804341e+00 6.377343359629018e+00 6.367541814948908e+00 + 6.357750843882468e+00 6.347970440548146e+00 6.338200599064411e+00 6.328441313549696e+00 6.318692578122477e+00 + 6.308954386901185e+00 6.299226734004287e+00 6.289509613550242e+00 6.279803019657492e+00 6.270106946444500e+00 + 6.260421388029714e+00 6.250746338531587e+00 6.241081792068580e+00 6.231427742759143e+00 6.221784184721724e+00 + 6.212151112074789e+00 6.202528518936784e+00 6.192916399426166e+00 6.183314747661382e+00 6.173723557760893e+00 + 6.164142823843156e+00 6.154572540026614e+00 6.145012700429728e+00 6.135463299170954e+00 6.125924330368746e+00 + 6.116395788141549e+00 6.106877666607819e+00 6.097369959886024e+00 6.087872662094601e+00 6.078385767352007e+00 + 6.068909269776704e+00 6.059443163487140e+00 6.049987442601775e+00 6.040542101239052e+00 6.031107133517430e+00 + 6.021682533555369e+00 6.012268295471315e+00 6.002864413383725e+00 5.993470881411052e+00 5.984087693671754e+00 + 5.974714844284278e+00 5.965352327367080e+00 5.956000137038617e+00 5.946658267417343e+00 5.937326712621709e+00 + 5.928005466770168e+00 5.918694523981177e+00 5.909393878373189e+00 5.900103524064659e+00 5.890823455174035e+00 + 5.881553665819781e+00 5.872294150120342e+00 5.863044902194178e+00 5.853805916159739e+00 5.844577186135479e+00 + 5.835358706239852e+00 5.826150470591316e+00 5.816952473308323e+00 5.807764708509323e+00 5.798587170312773e+00 + 5.789419852837129e+00 5.780262750200841e+00 5.771115856522363e+00 5.761979165920150e+00 5.752852672512660e+00 + 5.743736370418341e+00 5.734630253755649e+00 5.725534316643039e+00 5.716448553198963e+00 5.707372957541877e+00 + 5.698307523790231e+00 5.689252246062483e+00 5.680207118477086e+00 5.671172135152497e+00 5.662147290207161e+00 + 5.653132577759538e+00 5.644127991928084e+00 5.635133526831249e+00 5.626149176587487e+00 5.617174935315253e+00 + 5.608210797133003e+00 5.599256756159189e+00 5.590312806512264e+00 5.581378942310678e+00 5.572455157672897e+00 + 5.563541446717363e+00 5.554637803562536e+00 5.545744222326866e+00 5.536860697128810e+00 5.527987222086822e+00 + 5.519123791319354e+00 5.510270398944863e+00 5.501427039081799e+00 5.492593705848617e+00 5.483770393363775e+00 + 5.474957095745721e+00 5.466153807112911e+00 5.457360521583801e+00 5.448577233276843e+00 5.439803936310490e+00 + 5.431040624803197e+00 5.422287292873420e+00 5.413543934639609e+00 5.404810544220222e+00 5.396087115733708e+00 + 5.387373643298526e+00 5.378670121033128e+00 5.369976543055965e+00 5.361292903485493e+00 5.352619196440171e+00 + 5.343955416038445e+00 5.335301556398773e+00 5.326657611639607e+00 5.318023575879403e+00 5.309399443236614e+00 + 5.300785207829692e+00 5.292180863777094e+00 5.283586405197272e+00 5.275001826208682e+00 5.266427120929776e+00 + 5.257862283479006e+00 5.249307307974829e+00 5.240762188535700e+00 5.232226919280071e+00 5.223701494326393e+00 + 5.215185907793125e+00 5.206680153798718e+00 5.198184226461631e+00 5.189698119900310e+00 5.181221828233213e+00 + 5.172755345578794e+00 5.164298666055507e+00 5.155851783781802e+00 5.147414692876138e+00 5.138987387456968e+00 + 5.130569861642745e+00 5.122162109551923e+00 5.113764125302954e+00 5.105375903014296e+00 5.096997436804400e+00 + 5.088628720791720e+00 5.080269749094712e+00 5.071920515831827e+00 5.063581015121522e+00 5.055251241082247e+00 + 5.046931187832457e+00 5.038620849490610e+00 5.030320220175157e+00 5.022029294004551e+00 5.013748065097247e+00 + 5.005476527571697e+00 4.997214675546362e+00 4.988962503139684e+00 4.980720004470126e+00 4.972487173656138e+00 + 4.964264004816179e+00 4.956050492068697e+00 4.947846629532147e+00 4.939652411324984e+00 4.931467831565665e+00 + 4.923292884372640e+00 4.915127563864359e+00 4.906971864159286e+00 4.898825779375868e+00 4.890689303632560e+00 + 4.882562431047816e+00 4.874445155740092e+00 4.866337471827839e+00 4.858239373429513e+00 4.850150854663567e+00 + 4.842071909648451e+00 4.834002532502628e+00 4.825942717344547e+00 4.817892458292658e+00 4.809851749465419e+00 + 4.801820584981285e+00 4.793798958958709e+00 4.785786865516143e+00 4.777784298772041e+00 4.769791252844862e+00 + 4.761807721853052e+00 4.753833699915071e+00 4.745869181149370e+00 4.737914159674408e+00 4.729968629608630e+00 + 4.722032585070497e+00 4.714106020178457e+00 4.706188929050969e+00 4.698281305806488e+00 4.690383144563463e+00 + 4.682494439440351e+00 4.674615184555605e+00 4.666745374027678e+00 4.658885001975027e+00 4.651034062516102e+00 + 4.643192549769359e+00 4.635360457853252e+00 4.627537780886236e+00 4.619724512986761e+00 4.611920648273283e+00 + 4.604126180864258e+00 4.596341104878140e+00 4.588565414433377e+00 4.580799103648429e+00 4.573042166641749e+00 + 4.565294597531791e+00 4.557556390437004e+00 4.549827539475847e+00 4.542108038766774e+00 4.534397882428236e+00 + 4.526697064578689e+00 4.519005579336585e+00 4.511323420820381e+00 4.503650583148531e+00 4.495987060439482e+00 + 4.488332846811696e+00 4.480687936383624e+00 4.473052323273721e+00 4.465426001600438e+00 4.457808965482229e+00 + 4.450201209037552e+00 4.442602726384858e+00 4.435013511642601e+00 4.427433558929235e+00 4.419862862363214e+00 + 4.412301416062992e+00 4.404749214147024e+00 4.397206250733761e+00 4.389672519941661e+00 4.382148015889178e+00 + 4.374632732694760e+00 4.367126664476866e+00 4.359629805353945e+00 4.352142149444459e+00 4.344663690866858e+00 + 4.337194423739590e+00 4.329734342181116e+00 4.322283440309890e+00 4.314841712244363e+00 4.307409152102988e+00 + 4.299985754004224e+00 4.292571512066521e+00 4.285166420408334e+00 4.277770473148113e+00 4.270383664404318e+00 + 4.263005988295402e+00 4.255637438939815e+00 4.248278010456012e+00 4.240927696962451e+00 4.233586492577582e+00 + 4.226254391419860e+00 4.218931387607737e+00 4.211617475259670e+00 4.204312648494112e+00 4.197016901429517e+00 + 4.189730228184337e+00 4.182452622877026e+00 4.175184079626042e+00 4.167924592549835e+00 4.160674155766861e+00 + 4.153432763395572e+00 4.146200409554423e+00 4.138977088361870e+00 4.131762793936362e+00 4.124557520396357e+00 + 4.117361261860307e+00 4.110174012446667e+00 4.102995766273891e+00 4.095826517460431e+00 4.088666260124742e+00 + 4.081514988385281e+00 4.074372696360496e+00 4.067239378168845e+00 4.060115027928779e+00 4.052999639758758e+00 + 4.045893207777228e+00 4.038795726102648e+00 4.031707188853470e+00 4.024627590148148e+00 4.017556924105138e+00 + 4.010495184842892e+00 4.003442366479863e+00 3.996398463134506e+00 3.989363468925277e+00 3.982337377970627e+00 + 3.975320184389009e+00 3.968311882298880e+00 3.961312465818693e+00 3.954321929066901e+00 3.947340266161957e+00 + 3.940367471222317e+00 3.933403538366436e+00 3.926448461712768e+00 3.919502235379761e+00 3.912564853485875e+00 + 3.905636310149562e+00 3.898716599489274e+00 3.891805715623469e+00 3.884903652670597e+00 3.878010404749114e+00 + 3.871125965977475e+00 3.864250330474130e+00 3.857383492357537e+00 3.850525445746147e+00 3.843676184758418e+00 + 3.836835703512797e+00 3.830003996127744e+00 3.823181056721709e+00 3.816366879413152e+00 3.809561458320519e+00 + 3.802764787562267e+00 3.795976861256855e+00 3.789197673522732e+00 3.782427218478348e+00 3.775665490242162e+00 + 3.768912482932628e+00 3.762168190668202e+00 3.755432607567331e+00 3.748705727748473e+00 3.741987545330086e+00 + 3.735278054430617e+00 3.728577249168521e+00 3.721885123662257e+00 3.715201672030273e+00 3.708526888391025e+00 + 3.701860766862969e+00 3.695203301564556e+00 3.688554486614240e+00 3.681914316130479e+00 3.675282784231723e+00 + 3.668659885036427e+00 3.662045612663043e+00 3.655439961230028e+00 3.648842924855836e+00 3.642254497658916e+00 + 3.635674673757727e+00 3.629103447270722e+00 3.622540812316354e+00 3.615986763013077e+00 3.609441293479344e+00 + 3.602904397833612e+00 3.596376070194333e+00 3.589856304679958e+00 3.583345095408944e+00 3.576842436499748e+00 + 3.570348322070819e+00 3.563862746240612e+00 3.557385703127580e+00 3.550917186850179e+00 3.544457191526864e+00 + 3.538005711276083e+00 3.531562740216298e+00 3.525128272465957e+00 3.518702302143518e+00 3.512284823367430e+00 + 3.505875830256151e+00 3.499475316928134e+00 3.493083277501832e+00 3.486699706095698e+00 3.480324596828187e+00 + 3.473957943817754e+00 3.467599741182855e+00 3.461249983041939e+00 3.454908663513460e+00 3.448575776715876e+00 + 3.442251316767638e+00 3.435935277787201e+00 3.429627653893019e+00 3.423328439203543e+00 3.417037627837233e+00 + 3.410755213912539e+00 3.404481191547913e+00 3.398215554861811e+00 3.391958297972690e+00 3.385709414998999e+00 + 3.379468900059193e+00 3.373236747271727e+00 3.367012950755055e+00 3.360797504627632e+00 3.354590403007910e+00 + 3.348391640014343e+00 3.342201209765383e+00 3.336019106379492e+00 3.329845323975114e+00 3.323679856670706e+00 + 3.317522698584726e+00 3.311373843835625e+00 3.305233286541855e+00 3.299101020821872e+00 3.292977040794129e+00 + 3.286861340577083e+00 3.280753914289183e+00 3.274654756048885e+00 3.268563859974646e+00 3.262481220184913e+00 + 3.256406830798150e+00 3.250340685932801e+00 3.244282779707324e+00 3.238233106240173e+00 3.232191659649803e+00 + 3.226158434054668e+00 3.220133423573217e+00 3.214116622323909e+00 3.208108024425198e+00 3.202107623995534e+00 + 3.196115415153374e+00 3.190131392017173e+00 3.184155548705380e+00 3.178187879336453e+00 3.172228378028845e+00 + 3.166277038901010e+00 3.160333856071403e+00 3.154398823658475e+00 3.148471935780679e+00 3.142553186556476e+00 + 3.136642570104314e+00 3.130740080542647e+00 3.124845711989931e+00 3.118959458564619e+00 3.113081314385167e+00 + 3.107211273570024e+00 3.101349330237647e+00 3.095495478506491e+00 3.089649712495008e+00 3.083812026321653e+00 + 3.077982414104878e+00 3.072160869963139e+00 3.066347388014891e+00 3.060541962378585e+00 3.054744587172676e+00 + 3.048955256515617e+00 3.043173964525865e+00 3.037400705321871e+00 3.031635473022089e+00 3.025878261744974e+00 + 3.020129065608980e+00 3.014387878732562e+00 3.008654695234170e+00 3.002929509232260e+00 2.997212314845288e+00 + 2.991503106191707e+00 2.985801877389968e+00 2.980108622558526e+00 2.974423335815839e+00 2.968746011280356e+00 + 2.963076643070533e+00 2.957415225304822e+00 2.951761752101681e+00 2.946116217579562e+00 2.940478615856916e+00 + 2.934848941052199e+00 2.929227187283867e+00 2.923613348670372e+00 2.918007419330166e+00 2.912409393381707e+00 + 2.906819264943447e+00 2.901237028133838e+00 2.895662677071337e+00 2.890096205874396e+00 2.884537608661469e+00 + 2.878986879551011e+00 2.873444012661475e+00 2.867909002111315e+00 2.862381842018985e+00 2.856862526502940e+00 + 2.851351049681632e+00 2.845847405673515e+00 2.840351588597048e+00 2.834863592570676e+00 2.829383411712858e+00 + 2.823911040142049e+00 2.818446471976702e+00 2.812989701335270e+00 2.807540722336207e+00 2.802099529097966e+00 + 2.796666115739005e+00 2.791240476377771e+00 2.785822605132724e+00 2.780412496122314e+00 2.775010143465000e+00 + 2.769615541279230e+00 2.764228683683461e+00 2.758849564796147e+00 2.753478178735740e+00 2.748114519620698e+00 + 2.742758581569470e+00 2.737410358700515e+00 2.732069845132279e+00 2.726737034983225e+00 2.721411922371800e+00 + 2.716094501416463e+00 2.710784766235665e+00 2.705482710947860e+00 2.700188329671502e+00 2.694901616525047e+00 + 2.689622565626946e+00 2.684351171095656e+00 2.679087427049626e+00 2.673831327607318e+00 2.668582866887176e+00 + 2.663342039007661e+00 2.658108838087224e+00 2.652883258244320e+00 2.647665293597403e+00 2.642454938264927e+00 + 2.637252186365345e+00 2.632057032017109e+00 2.626869469338678e+00 2.621689492448502e+00 2.616517095465036e+00 + 2.611352272506734e+00 2.606195017692051e+00 2.601045325139437e+00 2.595903188967351e+00 2.590768603294245e+00 + 2.585641562238573e+00 2.580522059918787e+00 2.575410090453343e+00 2.570305647960693e+00 2.565208726559292e+00 + 2.560119320367595e+00 2.555037423504057e+00 2.549963030087127e+00 2.544896134235264e+00 2.539836730066918e+00 + 2.534784811700545e+00 2.529740373254598e+00 2.524703408847533e+00 2.519673912597801e+00 2.514651878623859e+00 + 2.509637301044157e+00 2.504630173977153e+00 2.499630491541298e+00 2.494638247855048e+00 2.489653437036854e+00 + 2.484676053205173e+00 2.479706090478458e+00 2.474743542975163e+00 2.469788404813739e+00 2.464840670112645e+00 + 2.459900332990330e+00 2.454967387565254e+00 2.450041827955863e+00 2.445123648280618e+00 2.440212842657967e+00 + 2.435309405206370e+00 2.430413330044276e+00 2.425524611290141e+00 2.420643243062418e+00 2.415769219479562e+00 + 2.410902534660027e+00 2.406043182722267e+00 2.401191157784735e+00 2.396346453965883e+00 2.391509065384169e+00 + 2.386678986158045e+00 2.381856210405966e+00 2.377040732246381e+00 2.372232545797750e+00 2.367431645178525e+00 + 2.362638024507160e+00 2.357851677902107e+00 2.353072599481823e+00 2.348300783364759e+00 2.343536223669372e+00 + 2.338778914514112e+00 2.334028850017436e+00 2.329286024297796e+00 2.324550431473648e+00 2.319822065663444e+00 + 2.315100920985640e+00 2.310386991558688e+00 2.305680271501042e+00 2.300980754931157e+00 2.296288435967485e+00 + 2.291603308728483e+00 2.286925367332601e+00 2.282254605898296e+00 2.277591018544022e+00 2.272934599388231e+00 + 2.268285342549378e+00 2.263643242145917e+00 2.259008292296300e+00 2.254380487118985e+00 2.249759820732421e+00 + 2.245146287255066e+00 2.240539880805373e+00 2.235940595501794e+00 2.231348425462784e+00 2.226763364806798e+00 + 2.222185407652288e+00 2.217614548117708e+00 2.213050780321513e+00 2.208494098382159e+00 2.203944496418095e+00 + 2.199401968547778e+00 2.194866508889663e+00 2.190338111562201e+00 2.185816770683846e+00 2.181302480373056e+00 + 2.176795234748279e+00 2.172295027927974e+00 2.167801854030591e+00 2.163315707174588e+00 2.158836581478416e+00 + 2.154364471060529e+00 2.149899370039381e+00 2.145441272533427e+00 2.140990172661120e+00 2.136546064540917e+00 + 2.132108942291266e+00 2.127678800030624e+00 2.123255631877447e+00 2.118839431950187e+00 2.114430194367295e+00 + 2.110027913247228e+00 2.105632582708442e+00 2.101244196869388e+00 2.096862749848520e+00 2.092488235764292e+00 + 2.088120648735158e+00 2.083759982879573e+00 2.079406232315990e+00 2.075059391162862e+00 2.070719453538646e+00 + 2.066386413561792e+00 2.062060265350757e+00 2.057741003023992e+00 2.053428620699954e+00 2.049123112497094e+00 + 2.044824472533869e+00 2.040532694928731e+00 2.036247773800133e+00 2.031969703266531e+00 2.027698477446379e+00 + 2.023434090458129e+00 2.019176536420236e+00 2.014925809451152e+00 2.010681903669336e+00 2.006444813193236e+00 + 2.002214532141311e+00 1.997991054632010e+00 1.993774374783790e+00 1.989564486715105e+00 1.985361384544408e+00 + 1.981165062390151e+00 1.976975514370793e+00 1.972792734604783e+00 1.968616717210577e+00 1.964447456306630e+00 + 1.960284946011392e+00 1.956129180443322e+00 1.951980153720870e+00 1.947837859962493e+00 1.943702293286642e+00 + 1.939573447811771e+00 1.935451317656337e+00 1.931335896938793e+00 1.927227179777590e+00 1.923125160291183e+00 + 1.919029832598028e+00 1.914941190816578e+00 1.910859229065287e+00 1.906783941462608e+00 1.902715322126995e+00 + 1.898653365176903e+00 1.894598064730783e+00 1.890549414907093e+00 1.886507409824286e+00 1.882472043600813e+00 + 1.878443310355132e+00 1.874421204205691e+00 1.870405719270951e+00 1.866396849669361e+00 1.862394589519377e+00 + 1.858398932939454e+00 1.854409874048042e+00 1.850427406963598e+00 1.846451525804576e+00 1.842482224689429e+00 + 1.838519497736610e+00 1.834563339064575e+00 1.830613742791775e+00 1.826670703036666e+00 1.822734213917703e+00 + 1.818804269553338e+00 1.814880864062026e+00 1.810963991562218e+00 1.807053646172373e+00 1.803149822010940e+00 + 1.799252513196377e+00 1.795361713847136e+00 1.791477418081670e+00 1.787599620018433e+00 1.783728313775881e+00 + 1.779863493472466e+00 1.776005153226644e+00 1.772153287156867e+00 1.768307889381588e+00 1.764468954019264e+00 + 1.760636475188347e+00 1.756810447007290e+00 1.752990863594549e+00 1.749177719068575e+00 1.745371007547827e+00 + 1.741570723150754e+00 1.737776859995811e+00 1.733989412201454e+00 1.730208373886134e+00 1.726433739168308e+00 + 1.722665502166428e+00 1.718903656998948e+00 1.715148197784323e+00 1.711399118641004e+00 1.707656413687447e+00 + 1.703920077042109e+00 1.700190102823439e+00 1.696466485149892e+00 1.692749218139922e+00 1.689038295911985e+00 + 1.685333712584534e+00 1.681635462276021e+00 1.677943539104903e+00 1.674257937189631e+00 1.670578650648659e+00 + 1.666905673600443e+00 1.663239000163437e+00 1.659578624456093e+00 1.655924540596865e+00 1.652276742704208e+00 + 1.648635224896575e+00 1.644999981292424e+00 1.641371006010202e+00 1.637748293168367e+00 1.634131836885372e+00 + 1.630521631279671e+00 1.626917670469719e+00 1.623319948573968e+00 1.619728459710873e+00 1.616143197998889e+00 + 1.612564157556467e+00 1.608991332502063e+00 1.605424716954130e+00 1.601864305031124e+00 1.598310090851497e+00 + 1.594762068533703e+00 1.591220232196197e+00 1.587684575957430e+00 1.584155093935859e+00 1.580631780249937e+00 + 1.577114629018117e+00 1.573603634358855e+00 1.570098790390603e+00 1.566600091231816e+00 1.563107531000947e+00 + 1.559621103816450e+00 1.556140803796780e+00 1.552666625060390e+00 1.549198561725734e+00 1.545736607911266e+00 + 1.542280757735441e+00 1.538831005316709e+00 1.535387344773530e+00 1.531949770224353e+00 1.528518275787633e+00 + 1.525092855581826e+00 1.521673503725383e+00 1.518260214336760e+00 1.514852981534411e+00 1.511451799436788e+00 + 1.508056662162347e+00 1.504667563829540e+00 1.501284498556822e+00 1.497907460462647e+00 1.494536443665469e+00 + 1.491171442283741e+00 1.487812450435918e+00 1.484459462240453e+00 1.481112471815801e+00 1.477771473280414e+00 + 1.474436460752748e+00 1.471107428351256e+00 1.467784370194392e+00 1.464467280400610e+00 1.461156153088363e+00 + 1.457850982376107e+00 1.454551762382294e+00 1.451258487225379e+00 1.447971151023815e+00 1.444689747896057e+00 + 1.441414271960557e+00 1.438144717335771e+00 1.434881078140152e+00 1.431623348492154e+00 1.428371522510231e+00 + 1.425125594312837e+00 1.421885558018425e+00 1.418651407745451e+00 1.415423137612366e+00 1.412200741737627e+00 + 1.408984214239685e+00 1.405773549236996e+00 1.402568740848013e+00 1.399369783191191e+00 1.396176670384982e+00 + 1.392989396547842e+00 1.389807955798222e+00 1.386632342254580e+00 1.383462550035366e+00 1.380298573259037e+00 + 1.377140406044044e+00 1.373988042508844e+00 1.370841476771888e+00 1.367700702951632e+00 1.364565715166528e+00 + 1.361436507535033e+00 1.358313074175598e+00 1.355195409206678e+00 1.352083506746727e+00 1.348977360914198e+00 + 1.345876965827546e+00 1.342782315605225e+00 1.339693404365688e+00 1.336610226227389e+00 1.333532775308783e+00 + 1.330461045728323e+00 1.327395031604463e+00 1.324334727055657e+00 1.321280126200359e+00 1.318231223157023e+00 + 1.315188012044103e+00 1.312150486980052e+00 1.309118642083325e+00 1.306092471472375e+00 1.303071969265657e+00 + 1.300057129581623e+00 1.297047946538730e+00 1.294044414255429e+00 1.291046526850176e+00 1.288054278441424e+00 + 1.285067663147626e+00 1.282086675087237e+00 1.279111308378711e+00 1.276141557140500e+00 1.273177415491062e+00 + 1.270218877548847e+00 1.267265937432311e+00 1.264318589259907e+00 1.261376827150089e+00 1.258440645221310e+00 + 1.255510037592027e+00 1.252584998380690e+00 1.249665521705757e+00 1.246751601685678e+00 1.243843232438909e+00 + 1.240940408083904e+00 1.238043122739116e+00 1.235151370523000e+00 1.232265145554009e+00 1.229384441950597e+00 + 1.226509253831218e+00 1.223639575314326e+00 1.220775400518375e+00 1.217916723561819e+00 1.215063538563112e+00 + 1.212215839640708e+00 1.209373620913059e+00 1.206536876498622e+00 1.203705600515848e+00 1.200879787083194e+00 + 1.198059430319111e+00 1.195244524342055e+00 1.192435063270478e+00 1.189631041222836e+00 1.186832452317581e+00 + 1.184039290673168e+00 1.181251550408052e+00 1.178469225640684e+00 1.175692310489519e+00 1.172920799073013e+00 + 1.170154685509618e+00 1.167393963917788e+00 1.164638628415977e+00 1.161888673122640e+00 1.159144092156229e+00 + 1.156404879635199e+00 1.153671029678004e+00 1.150942536403098e+00 1.148219393928934e+00 1.145501596373967e+00 + 1.142789137856650e+00 1.140082012495438e+00 1.137380214408784e+00 1.134683737715142e+00 1.131992576532967e+00 + 1.129306724980710e+00 1.126626177176830e+00 1.123950927239775e+00 1.121280969288003e+00 1.118616297439967e+00 + 1.115956905814120e+00 1.113302788528917e+00 1.110653939702811e+00 1.108010353454256e+00 1.105372023901706e+00 + 1.102738945163616e+00 1.100111111358439e+00 1.097488516604628e+00 1.094871155020640e+00 1.092259020724924e+00 + 1.089652107835939e+00 1.087050410472135e+00 1.084453922751969e+00 1.081862638793893e+00 1.079276552716361e+00 + 1.076695658637827e+00 1.074119950676745e+00 1.071549422951569e+00 1.068984069580755e+00 1.066423884682753e+00 + 1.063868862376019e+00 1.061318996779007e+00 1.058774282010170e+00 1.056234712187964e+00 1.053700281430840e+00 + 1.051170983857254e+00 1.048646813585659e+00 1.046127764734510e+00 1.043613831422260e+00 1.041105007767362e+00 + 1.038601287888272e+00 1.036102665903443e+00 1.033609135931328e+00 1.031120692090381e+00 1.028637328499058e+00 + 1.026159039275810e+00 1.023685818539093e+00 1.021217660407362e+00 1.018754558999067e+00 1.016296508432665e+00 + 1.013843502826609e+00 1.011395536299353e+00 1.008952602969351e+00 1.006514696955057e+00 1.004081812374924e+00 + 1.001653943347407e+00 9.992310839909596e-01 9.968132284240359e-01 9.944003707650890e-01 9.919925051325733e-01 + 9.895896256449433e-01 9.871917264206521e-01 9.847988015781539e-01 9.824108452359025e-01 9.800278515123521e-01 + 9.776498145259559e-01 9.752767283951689e-01 9.729085872384446e-01 9.705453851742363e-01 9.681871163209983e-01 + 9.658337747971858e-01 9.634853547212503e-01 9.611418502116473e-01 9.588032553868296e-01 9.564695643652531e-01 + 9.541407712653692e-01 9.518168702056341e-01 9.494978553045001e-01 9.471837206804223e-01 9.448744604518532e-01 + 9.425700687372479e-01 9.402705396550599e-01 9.379758673237428e-01 9.356860458617511e-01 9.334010693875392e-01 + 9.311209320195587e-01 9.288456278762662e-01 9.265751510761141e-01 9.243094957375571e-01 9.220486559790483e-01 + 9.197926259190422e-01 9.175413996759921e-01 9.152949713683535e-01 9.130533351145778e-01 9.108164850331213e-01 + 9.085844152424365e-01 9.063571198609776e-01 9.041345930071989e-01 9.019168287995535e-01 8.997038213564960e-01 + 8.974955647964804e-01 8.952920532379602e-01 8.930932807993895e-01 8.908992415992220e-01 8.887099297559116e-01 + 8.865253393879137e-01 8.843454646136791e-01 8.821702995516649e-01 8.799998383203228e-01 8.778340750381082e-01 + 8.756730038234739e-01 8.735166187948746e-01 8.713649140707634e-01 8.692178837695959e-01 8.670755220098232e-01 + 8.649378229099016e-01 8.628047805882842e-01 8.606763891634249e-01 8.585526427537781e-01 8.564335354777970e-01 + 8.543190614539353e-01 8.522092148006480e-01 8.501039896363877e-01 8.480033800796097e-01 8.459073802487667e-01 + 8.438159842623136e-01 8.417291862387039e-01 8.396469802963914e-01 8.375693605538298e-01 8.354963211294733e-01 + 8.334278561417752e-01 8.313639597091915e-01 8.293046259501734e-01 8.272498489831766e-01 8.251996229266541e-01 + 8.231539418990600e-01 8.211128000188496e-01 8.190761914044744e-01 8.170441101743895e-01 8.150165504470491e-01 + 8.129935063409072e-01 8.109749719744173e-01 8.089609414660327e-01 8.069514089342078e-01 8.049463684973976e-01 + 8.029458142740543e-01 8.009497403826332e-01 7.989581409415876e-01 7.969710100693709e-01 7.949883418844375e-01 + 7.930101305052417e-01 7.910363700502369e-01 7.890670546378770e-01 7.871021783866162e-01 7.851417354149083e-01 + 7.831857198412076e-01 7.812341257839672e-01 7.792869473616411e-01 7.773441786926844e-01 7.754058138955490e-01 + 7.734718470886908e-01 7.715422723905624e-01 7.696170839196185e-01 7.676962757943125e-01 7.657798421330989e-01 + 7.638677770544305e-01 7.619600746767630e-01 7.600567291185483e-01 7.581577344982415e-01 7.562630849342962e-01 + 7.543727745451663e-01 7.524867974493061e-01 7.506051477651688e-01 7.487278196112092e-01 7.468548071058804e-01 + 7.449861043676366e-01 7.431217055149322e-01 7.412616046662198e-01 7.394057959399548e-01 7.375542734545907e-01 + 7.357070313285805e-01 7.338640636803793e-01 7.320253646284400e-01 7.301909282912175e-01 7.283607487871652e-01 + 7.265348202347370e-01 7.247131367523862e-01 7.228956924585682e-01 7.210824814717359e-01 7.192734979103437e-01 + 7.174687358928449e-01 7.156681895376936e-01 7.138718529633438e-01 7.120797202882497e-01 7.102917856308643e-01 + 7.085080431096433e-01 7.067284868430389e-01 7.049531109495056e-01 7.031819095474970e-01 7.014148767554675e-01 + 6.996520066918709e-01 6.978932934751610e-01 6.961387312237917e-01 6.943883140562170e-01 6.926420360908908e-01 + 6.908998914462667e-01 6.891618742407996e-01 6.874279785929424e-01 6.856981986211498e-01 6.839725284438737e-01 + 6.822509621795712e-01 6.805334939466938e-01 6.788201178636959e-01 6.771108280490323e-01 6.754056186211560e-01 + 6.737044836985214e-01 6.720074173995820e-01 6.703144138427916e-01 6.686254671466050e-01 6.669405714294750e-01 + 6.652597208098568e-01 6.635829094062031e-01 6.619101313369683e-01 6.602413807206061e-01 6.585766516755713e-01 + 6.569159383203169e-01 6.552592347732970e-01 6.536065351529652e-01 6.519578335777757e-01 6.503131241661829e-01 + 6.486724010366403e-01 6.470356583076016e-01 6.454028900975206e-01 6.437740905248515e-01 6.421492537080489e-01 + 6.405283737655656e-01 6.389114448158563e-01 6.372984609773739e-01 6.356894163685732e-01 6.340843051079088e-01 + 6.324831213138328e-01 6.308858591047999e-01 6.292925125992642e-01 6.277030759156799e-01 6.261175431725007e-01 + 6.245359084881801e-01 6.229581659811716e-01 6.213843097699309e-01 6.198143339729103e-01 6.182482327085640e-01 + 6.166860000953464e-01 6.151276302517111e-01 6.135731172961122e-01 6.120224553470032e-01 6.104756385228381e-01 + 6.089326609420713e-01 6.073935167231557e-01 6.058581999845468e-01 6.043267048446977e-01 6.027990254220615e-01 + 6.012751558350929e-01 5.997550902022464e-01 5.982388226419743e-01 5.967263472727323e-01 5.952176582129732e-01 + 5.937127495811512e-01 5.922116154957202e-01 5.907142500751342e-01 5.892206474378469e-01 5.877308017023124e-01 + 5.862447069869845e-01 5.847623574103171e-01 5.832837470907644e-01 5.818088701467800e-01 5.803377206968180e-01 + 5.788702928593317e-01 5.774065807527762e-01 5.759465784956044e-01 5.744902802062705e-01 5.730376800032286e-01 + 5.715887720049325e-01 5.701435503298361e-01 5.687020090963933e-01 5.672641424230577e-01 5.658299444282838e-01 + 5.643994092305251e-01 5.629725309482358e-01 5.615493036998697e-01 5.601297216038805e-01 5.587137787787223e-01 + 5.573014693428492e-01 5.558927874147145e-01 5.544877271127728e-01 5.530862825554776e-01 5.516884478612831e-01 + 5.502942171486430e-01 5.489035845360112e-01 5.475165441418414e-01 5.461330900845884e-01 5.447532164827048e-01 + 5.433769174546459e-01 5.420041871188643e-01 5.406350195938152e-01 5.392694089979513e-01 5.379073494497271e-01 + 5.365488350675965e-01 5.351938599700136e-01 5.338424182754320e-01 5.324945041023057e-01 5.311501115690886e-01 + 5.298092347942344e-01 5.284718678961979e-01 5.271380049934313e-01 5.258076402043905e-01 5.244807676475280e-01 + 5.231573814412983e-01 5.218374757041553e-01 5.205210445545529e-01 5.192080821109445e-01 5.178985824917850e-01 + 5.165925398155270e-01 5.152899482006259e-01 5.139908017655346e-01 5.126950946287073e-01 5.114028209085977e-01 + 5.101139747236602e-01 5.088285501923481e-01 5.075465414331159e-01 5.062679425644168e-01 5.049927477047058e-01 + 5.037209509724357e-01 5.024525464860612e-01 5.011875283640356e-01 4.999258907248134e-01 4.986676276868477e-01 + 4.974127333685937e-01 4.961612018885036e-01 4.949130273650330e-01 4.936682039166345e-01 4.924267256617630e-01 + 4.911885867188718e-01 4.899537812064148e-01 4.887223032428465e-01 4.874941469466201e-01 4.862693064361900e-01 + 4.850477758300100e-01 4.838295492465340e-01 4.826146208042155e-01 4.814029846215092e-01 4.801946348168681e-01 + 4.789895655087472e-01 4.777877708155995e-01 4.765892448558791e-01 4.753939817480404e-01 4.742019756105367e-01 + 4.730132205618220e-01 4.718277107203507e-01 4.706454402045759e-01 4.694664031329525e-01 4.682905936239337e-01 + 4.671180057959737e-01 4.659486337675262e-01 4.647824716570455e-01 4.636195135829849e-01 4.624597536637991e-01 + 4.613031860179409e-01 4.601498047638656e-01 4.589996040200259e-01 4.578525779048765e-01 4.567087205368712e-01 + 4.555680260344633e-01 4.544304885161072e-01 4.532961021002569e-01 4.521648609053661e-01 4.510367590498890e-01 + 4.499117906522792e-01 4.487899498309905e-01 4.476712307044773e-01 4.465556273911929e-01 4.454431340095921e-01 + 4.443337446781276e-01 4.432274535152543e-01 4.421242546394258e-01 4.410241421690960e-01 4.399271102227187e-01 + 4.388331529187480e-01 4.377422643756375e-01 4.366544387118417e-01 4.355696700458138e-01 4.344879524960082e-01 + 4.334092801808788e-01 4.323336472188792e-01 4.312610477284635e-01 4.301914758280859e-01 4.291249256361997e-01 + 4.280613912712594e-01 4.270008668517183e-01 4.259433464960309e-01 4.248888243226509e-01 4.238372944500320e-01 + 4.227887509966284e-01 4.217431880808940e-01 4.207005998212823e-01 4.196609803362479e-01 4.186243237442441e-01 + 4.175906241637251e-01 4.165598757131449e-01 4.155320725109569e-01 4.145072086756156e-01 4.134852783255747e-01 + 4.124662755792881e-01 4.114501945552099e-01 4.104370293717939e-01 4.094267741474934e-01 4.084194230007635e-01 + 4.074149700500570e-01 4.064134094138285e-01 4.054147352105315e-01 4.044189415586203e-01 4.034260225765486e-01 + 4.024359723827703e-01 4.014487850957392e-01 4.004644548339098e-01 3.994829757157350e-01 3.985043418596696e-01 + 3.975285473841670e-01 3.965555864076816e-01 3.955854530486667e-01 3.946181414255767e-01 3.936536456568652e-01 + 3.926919598609864e-01 3.917330781563938e-01 3.907769946615419e-01 3.898237034948840e-01 3.888731987748745e-01 + 3.879254746199671e-01 3.869805251486158e-01 3.860383444792740e-01 3.850989267303966e-01 3.841622660204363e-01 + 3.832283564678482e-01 3.822971921910854e-01 3.813687673086020e-01 3.804430759388526e-01 3.795201122002897e-01 + 3.785998702113687e-01 3.776823440905425e-01 3.767675279562652e-01 3.758554159269913e-01 3.749460021211741e-01 + 3.740392806572675e-01 3.731352456537259e-01 3.722338912290024e-01 3.713352115015520e-01 3.704392005898275e-01 + 3.695458526122837e-01 3.686551616873742e-01 3.677671219335527e-01 3.668817274692731e-01 3.659989724129900e-01 + 3.651188508831563e-01 3.642413569982267e-01 3.633664848766547e-01 3.624942286368943e-01 3.616245823973996e-01 + 3.607575402766243e-01 3.598930963930223e-01 3.590312448650478e-01 3.581719798111540e-01 3.573152953497958e-01 + 3.564611855994264e-01 3.556096446785001e-01 3.547606667054706e-01 3.539142457987917e-01 3.530703760769175e-01 + 3.522290516583018e-01 3.513902666613987e-01 3.505540152046622e-01 3.497202914065458e-01 3.488890893855034e-01 + 3.480604032599897e-01 3.472342271484578e-01 3.464105551693616e-01 3.455893814411555e-01 3.447707000822932e-01 + 3.439545052112287e-01 3.431407909464156e-01 3.423295514063079e-01 3.415207807093598e-01 3.407144729740253e-01 + 3.399106223187577e-01 3.391092228620113e-01 3.383102687222401e-01 3.375137540178980e-01 3.367196728674387e-01 + 3.359280193893159e-01 3.351387877019841e-01 3.343519719238973e-01 3.335675661735084e-01 3.327855645692723e-01 + 3.320059612296424e-01 3.312287502730731e-01 3.304539258180176e-01 3.296814819829305e-01 3.289114128862653e-01 + 3.281437126464763e-01 3.273783753820168e-01 3.266153952113410e-01 3.258547662529030e-01 3.250964826251567e-01 + 3.243405384465560e-01 3.235869278355544e-01 3.228356449106061e-01 3.220866837901651e-01 3.213400385926854e-01 + 3.205957034366205e-01 3.198536724404248e-01 3.191139397225519e-01 3.183764994014560e-01 3.176413455955904e-01 + 3.169084724234095e-01 3.161778740033671e-01 3.154495444539175e-01 3.147234778935138e-01 3.139996684406107e-01 + 3.132781102136613e-01 3.125587973311206e-01 3.118417239114415e-01 3.111268840730783e-01 3.104142719344850e-01 + 3.097038816141156e-01 3.089957072304235e-01 3.082897429018632e-01 3.075859827468881e-01 3.068844208839528e-01 + 3.061850514315106e-01 3.054878685080154e-01 3.047928662319213e-01 3.041000387216827e-01 3.034093800957526e-01 + 3.027208844725854e-01 3.020345459706350e-01 3.013503587083554e-01 3.006683168042003e-01 2.999884143766235e-01 + 2.993106455440793e-01 2.986350044250213e-01 2.979614851379038e-01 2.972900818011801e-01 2.966207885333046e-01 + 2.959535994527310e-01 2.952885086779137e-01 2.946255103273057e-01 2.939645985193615e-01 2.933057673725348e-01 + 2.926490110052801e-01 2.919943235360504e-01 2.913416990833000e-01 2.906911317654829e-01 2.900426157010534e-01 + 2.893961450084647e-01 2.887517138061708e-01 2.881093162126260e-01 2.874689463462842e-01 2.868305983255990e-01 + 2.861942662690242e-01 2.855599442950141e-01 2.849276265220227e-01 2.842973070685033e-01 2.836689800529103e-01 + 2.830426395936975e-01 2.824182798093192e-01 2.817958948182286e-01 2.811754787388796e-01 2.805570256897268e-01 + 2.799405297892240e-01 2.793259851558245e-01 2.787133859079827e-01 2.781027261641523e-01 2.774940000427872e-01 + 2.768872016623420e-01 2.762823251412696e-01 2.756793645980242e-01 2.750783141510602e-01 2.744791679188311e-01 + 2.738819200197907e-01 2.732865645723932e-01 2.726930956950923e-01 2.721015075063423e-01 2.715117941245966e-01 + 2.709239496683093e-01 2.703379682559343e-01 2.697538440059259e-01 2.691715710367374e-01 2.685911434668228e-01 + 2.680125554146365e-01 2.674358009986322e-01 2.668608743372635e-01 2.662877695489846e-01 2.657164807522494e-01 + 2.651470020655118e-01 2.645793276072255e-01 2.640134514958445e-01 2.634493678498229e-01 2.628870707876148e-01 + 2.623265544276734e-01 2.617678128884531e-01 2.612108402884079e-01 2.606556307459915e-01 2.601021783796580e-01 + 2.595504773078608e-01 2.590005216490543e-01 2.584523055216923e-01 2.579058230442291e-01 2.573610683351178e-01 + 2.568180355128129e-01 2.562767186957681e-01 2.557371120024374e-01 2.551992095512745e-01 2.546630054607338e-01 + 2.541284938492686e-01 2.535956688353333e-01 2.530645245373814e-01 2.525350550738671e-01 2.520072545632441e-01 + 2.514811171239671e-01 2.509566368744887e-01 2.504338079332638e-01 2.499126244187457e-01 2.493930804493888e-01 + 2.488751701436468e-01 2.483588876199736e-01 2.478442269968230e-01 2.473311823926494e-01 2.468197479259061e-01 + 2.463099177150473e-01 2.458016858785268e-01 2.452950465347987e-01 2.447899938023168e-01 2.442865217995350e-01 + 2.437846246449071e-01 2.432842964568875e-01 2.427855313539295e-01 2.422883234544872e-01 2.417926668770146e-01 + 2.412985557399656e-01 2.408059841617944e-01 2.403149462609543e-01 2.398254361558995e-01 2.393374479650841e-01 + 2.388509758069619e-01 2.383660137999866e-01 2.378825560626122e-01 2.374005967132927e-01 2.369201298704823e-01 + 2.364411496526343e-01 2.359636501782029e-01 2.354876255656420e-01 2.350130699334060e-01 2.345399773999479e-01 + 2.340683420837222e-01 2.335981581031827e-01 2.331294195767834e-01 2.326621206229778e-01 2.321962553602203e-01 + 2.317318179069645e-01 2.312688023816648e-01 2.308072029027743e-01 2.303470135887476e-01 2.298882285580383e-01 + 2.294308419291006e-01 2.289748478203878e-01 2.285202403503545e-01 2.280670136374541e-01 2.276151618001410e-01 + 2.271646789568687e-01 2.267155592260911e-01 2.262677967262625e-01 2.258213855758365e-01 2.253763198932670e-01 + 2.249325937970081e-01 2.244902014055137e-01 2.240491368372375e-01 2.236093942106337e-01 2.231709676441558e-01 + 2.227338512562580e-01 2.222980391653943e-01 2.218635254900184e-01 2.214303043485844e-01 2.209983698595459e-01 + 2.205677161413573e-01 2.201383373124721e-01 2.197102274913443e-01 2.192833807964278e-01 2.188577913461766e-01 + 2.184334532590448e-01 2.180103606534859e-01 2.175885076479540e-01 2.171678883609029e-01 2.167484969107871e-01 + 2.163303274160595e-01 2.159133739951748e-01 2.154976307665865e-01 2.150830918487489e-01 2.146697513601156e-01 + 2.142576034191406e-01 2.138466421442777e-01 2.134368616539811e-01 2.130282560667045e-01 2.126208195009017e-01 + 2.122145460750268e-01 2.118094299075339e-01 2.114054651168764e-01 2.110026458215086e-01 2.106009661398841e-01 + 2.102004201904573e-01 2.098010020916819e-01 2.094027059620115e-01 2.090055259199003e-01 2.086094560838022e-01 + 2.082144905721711e-01 2.078206235034609e-01 2.074278489961252e-01 2.070361611686185e-01 2.066455541393945e-01 + 2.062560220269069e-01 2.058675589496098e-01 2.054801590259569e-01 2.050938163744025e-01 2.047085251134001e-01 + 2.043242793614038e-01 2.039410732368675e-01 2.035589008582454e-01 2.031777563439909e-01 2.027976338125581e-01 + 2.024185273824009e-01 2.020404311719735e-01 2.016633392997295e-01 2.012872458841228e-01 2.009121450436073e-01 + 2.005380308966374e-01 2.001648975616662e-01 1.997927391571482e-01 1.994215498015371e-01 1.990513236132870e-01 + 1.986820547108515e-01 1.983137372126848e-01 1.979463652372407e-01 1.975799329029729e-01 1.972144343283358e-01 + 1.968498636317829e-01 1.964862149317682e-01 1.961234823467457e-01 1.957616599951694e-01 1.954007419954929e-01 + 1.950407224661702e-01 1.946815955256556e-01 1.943233552924024e-01 1.939659958848651e-01 1.936095114214971e-01 + 1.932538960207526e-01 1.928991438010857e-01 1.925452488809498e-01 1.921922053787992e-01 1.918400074130876e-01 + 1.914886491022692e-01 1.911381245647975e-01 1.907884279191267e-01 1.904395532837105e-01 1.900914947770033e-01 + 1.897442465174584e-01 1.893978026235301e-01 1.890521572136722e-01 1.887073044063385e-01 1.883632383199831e-01 + 1.880199530730597e-01 1.876774427840224e-01 1.873357015713252e-01 1.869947235534217e-01 1.866545028487660e-01 + 1.863150335758119e-01 1.859763098530137e-01 1.856383257988248e-01 1.853010755316992e-01 1.849645531700910e-01 + 1.846287528324541e-01 1.842936686372424e-01 1.839592947029097e-01 1.836256251479099e-01 1.832926540906972e-01 + 1.829603756497252e-01 1.826287839434479e-01 1.822978730903191e-01 1.819676372087931e-01 1.816380704173234e-01 + 1.813091668343641e-01 1.809809205783691e-01 1.806533257677921e-01 1.803263765210874e-01 1.800000669567086e-01 + 1.796743911931098e-01 1.793493433487447e-01 1.790249175420675e-01 1.787011078915319e-01 1.783779085155919e-01 + 1.780553135327013e-01 1.777333170613142e-01 1.774119132198842e-01 1.770910961268656e-01 1.767708599007120e-01 + 1.764511986598777e-01 1.761321065228161e-01 1.758135776079814e-01 1.754956060338275e-01 1.751781859188084e-01 + 1.748613113813778e-01 1.745449765399896e-01 1.742291755130979e-01 1.739139024191565e-01 1.735991513766195e-01 + 1.732849165039405e-01 1.729711919195737e-01 1.726579717419727e-01 1.723452500895918e-01 1.720330210808845e-01 + 1.717212788343051e-01 1.714100174683072e-01 1.710992311013450e-01 1.707889138518721e-01 1.704790598383425e-01 + 1.701696631792104e-01 1.698607179929294e-01 1.695522183979535e-01 1.692441585127366e-01 1.689365324557326e-01 + 1.686293343453954e-01 1.683225583001789e-01 1.680161984385371e-01 1.677102488789240e-01 1.674047037397934e-01 + 1.670995571395990e-01 1.667948031967950e-01 1.664904360298352e-01 1.661864497571736e-01 1.658828384972639e-01 + 1.655795969941628e-01 1.652767236785968e-01 1.649742183271500e-01 1.646720807183821e-01 1.643703106308530e-01 + 1.640689078431228e-01 1.637678721337512e-01 1.634672032812983e-01 1.631669010643239e-01 1.628669652613877e-01 + 1.625673956510499e-01 1.622681920118704e-01 1.619693541224087e-01 1.616708817612252e-01 1.613727747068795e-01 + 1.610750327379318e-01 1.607776556329416e-01 1.604806431704690e-01 1.601839951290739e-01 1.598877112873163e-01 + 1.595917914237559e-01 1.592962353169526e-01 1.590010427454666e-01 1.587062134878576e-01 1.584117473226854e-01 + 1.581176440285100e-01 1.578239033838913e-01 1.575305251673893e-01 1.572375091575637e-01 1.569448551329745e-01 + 1.566525628721817e-01 1.563606321537451e-01 1.560690627562245e-01 1.557778544581799e-01 1.554870070381714e-01 + 1.551965202747587e-01 1.549063939465015e-01 1.546166278319599e-01 1.543272217096940e-01 1.540381753582634e-01 + 1.537494885562282e-01 1.534611610821482e-01 1.531731927145834e-01 1.528855832320935e-01 1.525983324132386e-01 + 1.523114400365784e-01 1.520249058806730e-01 1.517387297240821e-01 1.514529113453660e-01 1.511674505230842e-01 + 1.508823470357966e-01 1.505976006620633e-01 1.503132111804443e-01 1.500291783694991e-01 1.497455020077879e-01 + 1.494621818738705e-01 1.491792177463070e-01 1.488966094036570e-01 1.486143566244805e-01 1.483324591873375e-01 + 1.480509168707879e-01 1.477697294533914e-01 1.474888967137080e-01 1.472084184302977e-01 1.469282943817205e-01 + 1.466485243465360e-01 1.463691081033043e-01 1.460900454305851e-01 1.458113361069387e-01 1.455329799109245e-01 + 1.452549766211028e-01 1.449773260160332e-01 1.447000278742759e-01 1.444230819743906e-01 1.441464880949372e-01 + 1.438702460144757e-01 1.435943555115659e-01 1.433188163647679e-01 1.430436283526413e-01 1.427687912537462e-01 + 1.424943048466424e-01 1.422201689098901e-01 1.419463832220487e-01 1.416729475616784e-01 1.413998617073391e-01 + 1.411271254375908e-01 1.408547385309931e-01 1.405827007661060e-01 1.403110119214895e-01 1.400396717757036e-01 + 1.397686801073079e-01 1.394980366948626e-01 1.392277413169274e-01 1.389577937520624e-01 1.386881937788272e-01 + 1.384189411757819e-01 1.381500357214864e-01 1.378814771945006e-01 1.376132653733844e-01 1.373454000366976e-01 + 1.370778809630002e-01 1.368107079308521e-01 1.365438807188131e-01 1.362773991054433e-01 1.360112628693024e-01 + 1.357454717889505e-01 1.354800256429473e-01 1.352149242098527e-01 1.349501672682267e-01 1.346857545966293e-01 + 1.344216859736202e-01 1.341579611777595e-01 1.338945799876068e-01 1.336315421817223e-01 1.333688475386658e-01 + 1.331064958369972e-01 1.328444868552764e-01 1.325828203720631e-01 1.323214961659178e-01 1.320605140153996e-01 + 1.317998736990690e-01 1.315395749954856e-01 1.312796176832095e-01 1.310200015408004e-01 1.307607263468183e-01 + 1.305017918798232e-01 1.302431979183749e-01 1.299849442410332e-01 1.297270306263581e-01 1.294694568529096e-01 + 1.292122226992475e-01 1.289553279439316e-01 1.286987723655220e-01 1.284425557425785e-01 1.281866778536611e-01 + 1.279311384773295e-01 1.276759373921436e-01 1.274210743766636e-01 1.271665492094492e-01 1.269123616690602e-01 + 1.266585115340567e-01 1.264049985829985e-01 1.261518225944454e-01 1.258989833469577e-01 1.256464806190948e-01 + 1.253943141894169e-01 1.251424838364838e-01 1.248909893388554e-01 1.246398304750916e-01 1.243890070237524e-01 + 1.241385187633976e-01 1.238883654725872e-01 1.236385469298809e-01 1.233890629138387e-01 1.231399132030206e-01 + 1.228910975759866e-01 1.226426158112962e-01 1.223944676875096e-01 1.221466529831866e-01 1.218991714768873e-01 + 1.216520229471713e-01 1.214052071725986e-01 1.211587239317292e-01 1.209125730031230e-01 1.206667541653398e-01 + 1.204212671969394e-01 1.201761118764820e-01 1.199312879825273e-01 1.196867952936352e-01 1.194426335883657e-01 + 1.191988026452786e-01 1.189553022429340e-01 1.187121321598915e-01 1.184692921747111e-01 1.182267820659528e-01 + 1.179846016121766e-01 1.177427505919421e-01 1.175012287838093e-01 1.172600359663383e-01 1.170191719180887e-01 + 1.167786364176207e-01 1.165384292434940e-01 1.162985501742685e-01 1.160589989885042e-01 1.158197754647611e-01 + 1.155808793815988e-01 1.153423105175774e-01 1.151040686512567e-01 1.148661535611968e-01 1.146285650259574e-01 + 1.143913028240985e-01 1.141543667341798e-01 1.139177565347616e-01 1.136814720044035e-01 1.134455129216654e-01 + 1.132098790651072e-01 1.129745702132891e-01 1.127395861447706e-01 1.125049266381118e-01 1.122705914718726e-01 + 1.120365804246130e-01 1.118028932748926e-01 1.115695298012715e-01 1.113364897823095e-01 1.111037729965668e-01 + 1.108713792226030e-01 1.106393082389780e-01 1.104075598242518e-01 1.101761337569844e-01 1.099450298157354e-01 + 1.097142477790650e-01 1.094837874255330e-01 1.092536485336992e-01 1.090238308821237e-01 1.087943342493663e-01 + 1.085651584139868e-01 1.083363031545451e-01 1.081077682496014e-01 1.078795534777153e-01 1.076516586174468e-01 + 1.074240834473558e-01 1.071968277460022e-01 1.069698912919459e-01 1.067432738637467e-01 1.065169752399647e-01 + 1.062909951991598e-01 1.060653335198917e-01 1.058399899807203e-01 1.056149643602057e-01 1.053902564369078e-01 + 1.051658659893863e-01 1.049417927962012e-01 1.047180366359124e-01 1.044945972870799e-01 1.042714745282634e-01 + 1.040486681380230e-01 1.038261778949184e-01 1.036040035775097e-01 1.033821449643567e-01 1.031606018340192e-01 + 1.029393739650573e-01 1.027184611360310e-01 1.024978631254998e-01 1.022775797120238e-01 1.020576106741630e-01 + 1.018379557904772e-01 1.016186148395264e-01 1.013995875998703e-01 1.011808738500690e-01 1.009624733686823e-01 + 1.007443859342702e-01 1.005266113253923e-01 1.003091493206090e-01 1.000919996984797e-01 9.987516223756472e-02 + 9.965863671642368e-02 9.944242291361657e-02 9.922652060770329e-02 9.901092957724383e-02 9.879564960079788e-02 + 9.858068045692549e-02 9.836602192418654e-02 9.815167378114105e-02 9.793763580634866e-02 9.772390777836942e-02 + 9.751048947576320e-02 9.729738067709007e-02 9.708458116090966e-02 9.687209070578200e-02 9.665990909026694e-02 + 9.644803609292460e-02 9.623647149231455e-02 9.602521506699689e-02 9.581426659553142e-02 9.560362585647826e-02 + 9.539329262839702e-02 9.518326668984774e-02 9.497354781939027e-02 9.476413579558457e-02 9.455503039699066e-02 + 9.434623140216819e-02 9.413773858967717e-02 9.392955173807757e-02 9.372167062592920e-02 9.351409503179200e-02 + 9.330682473422582e-02 9.309985951179062e-02 9.289319914304633e-02 9.268684340655275e-02 9.248079208086978e-02 + 9.227504494455742e-02 9.206960177617562e-02 9.186446235428407e-02 9.165962645744281e-02 9.145509386421173e-02 + 9.125086435315079e-02 9.104693770281974e-02 9.084331369177857e-02 9.063999209858718e-02 9.043697270180552e-02 + 9.023425527999339e-02 9.003183961171067e-02 8.982972547551737e-02 8.962791264997345e-02 8.942640091363863e-02 + 8.922519004507280e-02 8.902427982283603e-02 8.882367002548823e-02 8.862336043158911e-02 8.842335081969865e-02 + 8.822364096837684e-02 8.802423065618351e-02 8.782511966167857e-02 8.762630776342187e-02 8.742779473997338e-02 + 8.722958036989294e-02 8.703166443174064e-02 8.683404670407610e-02 8.663672696545938e-02 8.643970499445031e-02 + 8.624298056960893e-02 8.604655346949501e-02 8.585042347266844e-02 8.565459035768923e-02 8.545905390311723e-02 + 8.526381388751228e-02 8.506887008943430e-02 8.487422228744325e-02 8.467987026009907e-02 8.448581378596152e-02 + 8.429205264359059e-02 8.409858661154612e-02 8.390541546838824e-02 8.371253899267647e-02 8.351995696297099e-02 + 8.332766915783157e-02 8.313567535581827e-02 8.294397533549079e-02 8.275256887540909e-02 8.256145575413315e-02 + 8.237063575022288e-02 8.218010864223803e-02 8.198987420873864e-02 8.179993222828459e-02 8.161028247943578e-02 + 8.142092474075205e-02 8.123185879079332e-02 8.104308440811948e-02 8.085460137129052e-02 8.066640945886633e-02 + 8.047850844940672e-02 8.029089812147158e-02 8.010357825362091e-02 7.991654862441462e-02 7.972980901241251e-02 + 7.954335919617447e-02 7.935719895426054e-02 7.917132806523056e-02 7.898574630764435e-02 7.880045346006183e-02 + 7.861544930104307e-02 7.843073360914780e-02 7.824630616293594e-02 7.806216674096743e-02 7.787831512180217e-02 + 7.769475108400008e-02 7.751147440612097e-02 7.732848486672479e-02 7.714578224437146e-02 7.696336631762096e-02 + 7.678123686503303e-02 7.659939366516767e-02 7.641783649658471e-02 7.623656513784420e-02 7.605557936750583e-02 + 7.587487896412962e-02 7.569446370627547e-02 7.551433337250338e-02 7.533448774137305e-02 7.515492659144445e-02 + 7.497564970127749e-02 7.479665684943212e-02 7.461794781446825e-02 7.443952237494571e-02 7.426138030942438e-02 + 7.408352139646424e-02 7.390594541462524e-02 7.372865214246714e-02 7.355164135854984e-02 7.337491284143338e-02 + 7.319846636967763e-02 7.302230172184236e-02 7.284641867648749e-02 7.267081701217305e-02 7.249549650745897e-02 + 7.232045694090500e-02 7.214569809107103e-02 7.197121973651709e-02 7.179702165580308e-02 7.162310362748878e-02 + 7.144946543013417e-02 7.127610684229910e-02 7.110302764254356e-02 7.093022760942734e-02 7.075770652151042e-02 + 7.058546415735271e-02 7.041350029551406e-02 7.024181471455442e-02 7.007040719303358e-02 6.989927750951157e-02 + 6.972842544254830e-02 6.955785077070353e-02 6.938755327253728e-02 6.921753272660937e-02 6.904778891147988e-02 + 6.887832160570852e-02 6.870913058785515e-02 6.854021563647983e-02 6.837157653014239e-02 6.820321304740287e-02 + 6.803512496682092e-02 6.786731206695658e-02 6.769977412636968e-02 6.753251092362034e-02 6.736552223726817e-02 + 6.719880784587320e-02 6.703236752799535e-02 6.686620106219456e-02 6.670030822703060e-02 6.653468880106347e-02 + 6.636934256285300e-02 6.620426929095923e-02 6.603946876394190e-02 6.587494076036100e-02 6.571068505877638e-02 + 6.554670143774802e-02 6.538298967583572e-02 6.521954955159946e-02 6.505638084359908e-02 6.489348333039455e-02 + 6.473085679054569e-02 6.456850100261248e-02 6.440641574515474e-02 6.424460079673253e-02 6.408305593590556e-02 + 6.392178094123378e-02 6.376077559127709e-02 6.360003966459560e-02 6.343957293974885e-02 6.327937519529699e-02 + 6.311944620979983e-02 6.295978576181734e-02 6.280039362990936e-02 6.264126959263583e-02 6.248241342855653e-02 + 6.232382491623151e-02 6.216550383422068e-02 6.200744996108382e-02 6.184966307538087e-02 6.169214295567180e-02 + 6.153488938051651e-02 6.137790212847481e-02 6.122118097810659e-02 6.106472570797182e-02 6.090853609663049e-02 + 6.075261192264235e-02 6.059695296456730e-02 6.044155900096528e-02 6.028642981039629e-02 6.013156517142009e-02 + 5.997696486259661e-02 5.982262866248578e-02 5.966855634964759e-02 5.951474770264176e-02 5.936120250002826e-02 + 5.920792052036703e-02 5.905490154221802e-02 5.890214534414098e-02 5.874965170469591e-02 5.859742040244267e-02 + 5.844545121594127e-02 5.829374392375142e-02 5.814229830443318e-02 5.799111413654637e-02 5.784019119865093e-02 + 5.768952926930679e-02 5.753912812707376e-02 5.738898755051179e-02 5.723910731818078e-02 5.708948720864069e-02 + 5.694012700045131e-02 5.679102647217259e-02 5.664218540236444e-02 5.649360356958682e-02 5.634528075239949e-02 + 5.619721672936244e-02 5.604941127903557e-02 5.590186417997881e-02 5.575457521075197e-02 5.560754414991501e-02 + 5.546077077602782e-02 5.531425486765037e-02 5.516799620334242e-02 5.502199456166394e-02 5.487624972117486e-02 + 5.473076146043511e-02 5.458552955800448e-02 5.444055379244295e-02 5.429583394231038e-02 5.415136978616674e-02 + 5.400716110257183e-02 5.386320767008564e-02 5.371950926726800e-02 5.357606567267891e-02 5.343287666487814e-02 + 5.328994202242569e-02 5.314726152388140e-02 5.300483494780522e-02 5.286266207275708e-02 5.272074267729676e-02 + 5.257907653998425e-02 5.243766343937943e-02 5.229650315404227e-02 5.215559546253257e-02 5.201494014341022e-02 + 5.187453697523518e-02 5.173438573656742e-02 5.159448620596670e-02 5.145483816199297e-02 5.131544138320613e-02 + 5.117629564816617e-02 5.103740073543286e-02 5.089875642356614e-02 5.076036249112593e-02 5.062221871667218e-02 + 5.048432487876468e-02 5.034668075596340e-02 5.020928612682823e-02 5.007214076991912e-02 4.993524446379589e-02 + 4.979859698701846e-02 4.966219811814673e-02 4.952604763574067e-02 4.939014531836011e-02 4.925449094456493e-02 + 4.911908429291507e-02 4.898392514197048e-02 4.884901327029097e-02 4.871434845643648e-02 4.857993047896691e-02 + 4.844575911644221e-02 4.831183414742219e-02 4.817815535046679e-02 4.804472250413592e-02 4.791153538698947e-02 + 4.777859377758741e-02 4.764589745448952e-02 4.751344619625577e-02 4.738123978144605e-02 4.724927798862030e-02 + 4.711756059633834e-02 4.698608738316012e-02 4.685485812764553e-02 4.672387260835453e-02 4.659313060384689e-02 + 4.646263189268263e-02 4.633237625342158e-02 4.620236346462373e-02 4.607259330484887e-02 4.594306555265695e-02 + 4.581377998660788e-02 4.568473638526159e-02 4.555593452717792e-02 4.542737419091678e-02 4.529905515503809e-02 + 4.517097719810180e-02 4.504314009866769e-02 4.491554363529575e-02 4.478818758654587e-02 4.466107173097797e-02 + 4.453419584715187e-02 4.440755971362755e-02 4.428116310896486e-02 4.415500581172379e-02 4.402908760046412e-02 + 4.390340825374580e-02 4.377796755012876e-02 4.365276526817287e-02 4.352780118643809e-02 4.340307508348420e-02 + 4.327858673787122e-02 4.315433592815897e-02 4.303032243290744e-02 4.290654603067642e-02 4.278300650002589e-02 + 4.265970361951570e-02 4.253663716770585e-02 4.241380692315611e-02 4.229121266442645e-02 4.216885417007675e-02 + 4.204673121866698e-02 4.192484358875694e-02 4.180319105890656e-02 4.168177340767576e-02 4.156059041362450e-02 + 4.143964185531256e-02 4.131892751129989e-02 4.119844716014640e-02 4.107820058041205e-02 4.095818755065662e-02 + 4.083840784944010e-02 4.071886125532234e-02 4.059954754686330e-02 4.048046650262282e-02 4.036161790116083e-02 + 4.024300152103721e-02 4.012461714081195e-02 4.000646453904481e-02 3.988854349429578e-02 3.977085378512473e-02 + 3.965339519009156e-02 3.953616748775624e-02 3.941917045667857e-02 3.930240387541852e-02 3.918586752253593e-02 + 3.906956117659079e-02 3.895348461614292e-02 3.883763761975224e-02 3.872201996597866e-02 3.860663143338214e-02 + 3.849147180052246e-02 3.837654084595958e-02 3.826183834825340e-02 3.814736408596389e-02 3.803311783765086e-02 + 3.791909938187420e-02 3.780530849719386e-02 3.769174496216977e-02 3.757840855536175e-02 3.746529905532976e-02 + 3.735241624063364e-02 3.723975988983343e-02 3.712732978148885e-02 3.701512569415990e-02 3.690314740640647e-02 + 3.679139469678848e-02 3.667986734386579e-02 3.656856512619832e-02 3.645748782234595e-02 3.634663521086866e-02 + 3.623600707032625e-02 3.612560317927865e-02 3.601542331628579e-02 3.590546725990760e-02 3.579573478870388e-02 + 3.568622568123460e-02 3.557693971605963e-02 3.546787667173892e-02 3.535903632683234e-02 3.525041845989978e-02 + 3.514202284950115e-02 3.503384927419634e-02 3.492589751254532e-02 3.481816734310789e-02 3.471065854444400e-02 + 3.460337089511353e-02 3.449630417367645e-02 3.438945815869258e-02 3.428283262872182e-02 3.417642736232413e-02 + 3.407024213805943e-02 3.396427673448750e-02 3.385853093016833e-02 3.375300450366182e-02 3.364769723352787e-02 + 3.354260889832635e-02 3.343773927661717e-02 3.333308814696023e-02 3.322865528791549e-02 3.312444047804275e-02 + 3.302044349590197e-02 3.291666412005304e-02 3.281310212905592e-02 3.270975730147040e-02 3.260662941585644e-02 + 3.250371825077394e-02 3.240102358478284e-02 3.229854519644294e-02 3.219628286431422e-02 3.209423636695655e-02 + 3.199240548292985e-02 3.189078999079405e-02 3.178938966910898e-02 3.168820429643457e-02 3.158723365133074e-02 + 3.148647751235738e-02 3.138593565807438e-02 3.128560786704163e-02 3.118549391781907e-02 3.108559358896662e-02 + 3.098590665904409e-02 3.088643290661142e-02 3.078717211022856e-02 3.068812404845539e-02 3.058928849985176e-02 + 3.049066524297762e-02 3.039225405639284e-02 3.029405471865738e-02 3.019606700833108e-02 3.009829070397384e-02 + 3.000072558414558e-02 2.990337142740626e-02 2.980622801231566e-02 2.970929511743377e-02 2.961257252132046e-02 + 2.951606000253568e-02 2.941975733963923e-02 2.932366431119108e-02 2.922778069575113e-02 2.913210627187930e-02 + 2.903664081813541e-02 2.894138411307943e-02 2.884633593527126e-02 2.875149606327076e-02 2.865686427563789e-02 + 2.856244035093249e-02 2.846822406756952e-02 2.837421520056763e-02 2.828041352151405e-02 2.818681880184402e-02 + 2.809343081299287e-02 2.800024932639589e-02 2.790727411348838e-02 2.781450494570558e-02 2.772194159448280e-02 + 2.762958383125535e-02 2.753743142745854e-02 2.744548415452757e-02 2.735374178389779e-02 2.726220408700447e-02 + 2.717087083528295e-02 2.707974180016844e-02 2.698881675309625e-02 2.689809546550168e-02 2.680757770882006e-02 + 2.671726325448661e-02 2.662715187393664e-02 2.653724333860544e-02 2.644753741992834e-02 2.635803388934054e-02 + 2.626873251827740e-02 2.617963307817417e-02 2.609073534046620e-02 2.600203907658869e-02 2.591354405797697e-02 + 2.582525005606633e-02 2.573715684229206e-02 2.564926418808948e-02 2.556157186489380e-02 2.547407964414037e-02 + 2.538678729726445e-02 2.529969459570137e-02 2.521280131088634e-02 2.512610721425472e-02 2.503961207724175e-02 + 2.495331567128279e-02 2.486721776781305e-02 2.478131813826782e-02 2.469561655408244e-02 2.461011278669220e-02 + 2.452480660753233e-02 2.443969778803814e-02 2.435478609964493e-02 2.427007131378803e-02 2.418555320190264e-02 + 2.410123153542410e-02 2.401710608578769e-02 2.393317662442874e-02 2.384944292278244e-02 2.376590475228415e-02 + 2.368256188436915e-02 2.359941409047274e-02 2.351646114203017e-02 2.343370281047675e-02 2.335113886724776e-02 + 2.326876908377852e-02 2.318659323150427e-02 2.310461108186032e-02 2.302282240628196e-02 2.294122697620450e-02 + 2.285982456306319e-02 2.277861493829333e-02 2.269759787333019e-02 2.261677313960910e-02 2.253614050856538e-02 + 2.245569975163421e-02 2.237545064025093e-02 2.229539294585083e-02 2.221552643986924e-02 2.213585089374139e-02 + 2.205636607890257e-02 2.197707176678809e-02 2.189796772883327e-02 2.181905373647331e-02 2.174032956114360e-02 + 2.166179497427933e-02 2.158344974731589e-02 2.150529365168848e-02 2.142732645883241e-02 2.134954794018299e-02 + 2.127195786717554e-02 2.119455601124527e-02 2.111734214382750e-02 2.104031603635753e-02 2.096347746027067e-02 + 2.088682618700216e-02 2.081036198798729e-02 2.073408463466138e-02 2.065799389845973e-02 2.058208955081758e-02 + 2.050637136317023e-02 2.043083910695299e-02 2.035549255360115e-02 2.028033147454998e-02 2.020535564123475e-02 + 2.013056482509080e-02 2.005595879755336e-02 1.998153733005781e-02 1.990730019403932e-02 1.983324716093324e-02 + 1.975937800217485e-02 1.968569248919949e-02 1.961219039344237e-02 1.953887148633879e-02 1.946573553932406e-02 + 1.939278232383351e-02 1.932001161130233e-02 1.924742317316587e-02 1.917501678085940e-02 1.910279220581827e-02 + 1.903074921947766e-02 1.895888759327293e-02 1.888720709863935e-02 1.881570750701223e-02 1.874438858982681e-02 + 1.867325011851842e-02 1.860229186452231e-02 1.853151359927385e-02 1.846091509420823e-02 1.839049612076077e-02 + 1.832025645036677e-02 1.825019585446155e-02 1.818031410448033e-02 1.811061097185843e-02 1.804108622803114e-02 + 1.797173964443378e-02 1.790257099250157e-02 1.783358004366985e-02 1.776476656937389e-02 1.769613034104897e-02 + 1.762767113013041e-02 1.755938870805347e-02 1.749128284625344e-02 1.742335331616560e-02 1.735559988922529e-02 + 1.728802233686775e-02 1.722062043052824e-02 1.715339394164211e-02 1.708634264164465e-02 1.701946630197109e-02 + 1.695276469405675e-02 1.688623758933693e-02 1.681988475924692e-02 1.675370597522197e-02 1.668770100869741e-02 + 1.662186963110850e-02 1.655621161389056e-02 1.649072672847885e-02 1.642541474630865e-02 1.636027543881526e-02 + 1.629530857743400e-02 1.623051393360013e-02 1.616589127874891e-02 1.610144038431569e-02 1.603716102173572e-02 + 1.597305296244428e-02 1.590911597787667e-02 1.584534983946819e-02 1.578175431865413e-02 1.571832918686975e-02 + 1.565507421555035e-02 1.559198917613122e-02 1.552907384004768e-02 1.546632797873497e-02 1.540375136362839e-02 + 1.534134376616324e-02 1.527910495777480e-02 1.521703470989838e-02 1.515513279396924e-02 1.509339898142267e-02 + 1.503183304369397e-02 1.497043475221845e-02 1.490920387843134e-02 1.484814019376797e-02 1.478724346966362e-02 + 1.472651347755360e-02 1.466594998887315e-02 1.460555277505758e-02 1.454532160754218e-02 1.448525625776228e-02 + 1.442535649715309e-02 1.436562209714995e-02 1.430605282918812e-02 1.424664846470294e-02 1.418740877512963e-02 + 1.412833353190351e-02 1.406942250645987e-02 1.401067547023402e-02 1.395209219466119e-02 1.389367245117671e-02 + 1.383541601121587e-02 1.377732264621395e-02 1.371939212760623e-02 1.366162422682800e-02 1.360401871531456e-02 + 1.354657536450121e-02 1.348929394582320e-02 1.343217423071583e-02 1.337521599061440e-02 1.331841899695420e-02 + 1.326178302117052e-02 1.320530783469862e-02 1.314899320897382e-02 1.309283891543139e-02 1.303684472550666e-02 + 1.298101041063485e-02 1.292533574225128e-02 1.286982049179124e-02 1.281446443069005e-02 1.275926733038293e-02 + 1.270422896230521e-02 1.264934909789217e-02 1.259462750857913e-02 1.254006396580132e-02 1.248565824099406e-02 + 1.243141010559264e-02 1.237731933103235e-02 1.232338568874847e-02 1.226960895017628e-02 1.221598888675107e-02 + 1.216252526990816e-02 1.210921787108281e-02 1.205606646171029e-02 1.200307081322593e-02 1.195023069706501e-02 + 1.189754588466279e-02 1.184501614745457e-02 1.179264125687565e-02 1.174042098436133e-02 1.168835510134686e-02 + 1.163644337926754e-02 1.158468558955867e-02 1.153308150365554e-02 1.148163089299345e-02 1.143033352900765e-02 + 1.137918918313345e-02 1.132819762680614e-02 1.127735863146102e-02 1.122667196853335e-02 1.117613740945843e-02 + 1.112575472567155e-02 1.107552368860801e-02 1.102544406970307e-02 1.097551564039204e-02 1.092573817211020e-02 + 1.087611143629287e-02 1.082663520437527e-02 1.077730924779274e-02 1.072813333798055e-02 1.067910724637402e-02 + 1.063023074440839e-02 1.058150360351897e-02 1.053292559514105e-02 1.048449649070993e-02 1.043621606166087e-02 + 1.038808407942917e-02 1.034010031545013e-02 1.029226454115903e-02 1.024457652799116e-02 1.019703604738179e-02 + 1.014964287076624e-02 1.010239676957978e-02 1.005529751525770e-02 1.000834487923527e-02 9.961538632947809e-03 + 9.914878547830594e-03 9.868364395318921e-03 9.821995946848057e-03 9.775772973853302e-03 9.729695247769950e-03 + 9.683762540033298e-03 9.637974622078598e-03 9.592331265341163e-03 9.546832241256279e-03 9.501477321259251e-03 + 9.456266276785327e-03 9.411198879269821e-03 9.366274900148019e-03 9.321494110855231e-03 9.276856282826696e-03 + 9.232361187497736e-03 9.188008596303632e-03 9.143798280679684e-03 9.099730012061156e-03 9.055803561883343e-03 + 9.012018701581541e-03 8.968375202591054e-03 8.924872836347138e-03 8.881511374285087e-03 8.838290587840202e-03 + 8.795210248447786e-03 8.752270127543088e-03 8.709469996561416e-03 8.666809626938060e-03 8.624288790108327e-03 + 8.581907257507461e-03 8.539664800570772e-03 8.497561190733558e-03 8.455596199431106e-03 8.413769598098688e-03 + 8.372081158171597e-03 8.330530651085128e-03 8.289117848274571e-03 8.247842521175223e-03 8.206704441222340e-03 + 8.165703379851232e-03 8.124839108497183e-03 8.084111398595504e-03 8.043520021581443e-03 8.003064748890308e-03 + 7.962745351957384e-03 7.922561602217977e-03 7.882513271107353e-03 7.842600130060799e-03 7.802821950513608e-03 + 7.763178503901092e-03 7.723669561658506e-03 7.684294895221145e-03 7.645054276024305e-03 7.605947475503284e-03 + 7.566974265093352e-03 7.528134416229795e-03 7.489427700347914e-03 7.450853888883007e-03 7.412412753270333e-03 + 7.374104064945197e-03 7.335927595342886e-03 7.297883115898700e-03 7.259970398047898e-03 7.222189213225787e-03 + 7.184539332867653e-03 7.147020528408806e-03 7.109632571284490e-03 7.072375232930018e-03 7.035248284780677e-03 + 6.998251498271754e-03 6.961384644838551e-03 6.924647495916328e-03 6.888039822940391e-03 6.851561397346019e-03 + 6.815211990568525e-03 6.778991374043162e-03 6.742899319205238e-03 6.706935597490038e-03 6.671099980332858e-03 + 6.635392239168969e-03 6.599812145433667e-03 6.564359470562242e-03 6.529033985989994e-03 6.493835463152187e-03 + 6.458763673484123e-03 6.423818388421083e-03 6.388999379398382e-03 6.354306417851262e-03 6.319739275215045e-03 + 6.285297722925007e-03 6.250981532416452e-03 6.216790475124642e-03 6.182724322484880e-03 6.148782845932454e-03 + 6.114965816902662e-03 6.081273006830771e-03 6.047704187152074e-03 6.014259129301869e-03 5.980937604715452e-03 + 5.947739384828086e-03 5.914664241075071e-03 5.881711944891696e-03 5.848882267713252e-03 5.816174980975036e-03 + 5.783589856112312e-03 5.751126664560382e-03 5.718785177754533e-03 5.686565167130068e-03 5.654466404122244e-03 + 5.622488660166369e-03 5.590631706697726e-03 5.558895315151620e-03 5.527279256963311e-03 5.495783303568101e-03 + 5.464407226401277e-03 5.433150796898142e-03 5.402013786493957e-03 5.370995966624024e-03 5.340097108723629e-03 + 5.309316984228075e-03 5.278655364572626e-03 5.248112021192582e-03 5.217686725523227e-03 5.187379248999867e-03 + 5.157189363057763e-03 5.127116839132216e-03 5.097161448658516e-03 5.067322963071958e-03 5.037601153807811e-03 + 5.007995792301374e-03 4.978506649987935e-03 4.949133498302795e-03 4.919876108681217e-03 4.890734252558502e-03 + 4.861707701369936e-03 4.832796226550807e-03 4.803999599536421e-03 4.775317591762038e-03 4.746749974662958e-03 + 4.718296519674468e-03 4.689956998231871e-03 4.661731181770430e-03 4.633618841725445e-03 4.605619749532205e-03 + 4.577733676626011e-03 4.549960394442122e-03 4.522299674415846e-03 4.494751287982466e-03 4.467315006577280e-03 + 4.439990601635559e-03 4.412777844592599e-03 4.385676506883690e-03 4.358686359944131e-03 4.331807175209184e-03 + 4.305038724114155e-03 4.278380778094327e-03 4.251833108585001e-03 4.225395487021443e-03 4.199067684838954e-03 + 4.172849473472818e-03 4.146740624358338e-03 4.120740908930778e-03 4.094850098625439e-03 4.069067964877608e-03 + 4.043394279122585e-03 4.017828812795635e-03 3.992371337332059e-03 3.967021624167144e-03 3.941779444736186e-03 + 3.916644570474457e-03 3.891616772817254e-03 3.866695823199864e-03 3.841881493057577e-03 3.817173553825691e-03 + 3.792571776939472e-03 3.768075933834220e-03 3.743685795945222e-03 3.719401134707777e-03 3.695221721557152e-03 + 3.671147327928650e-03 3.647177725257552e-03 3.623312684979162e-03 3.599551978528743e-03 3.575895377341601e-03 + 3.552342652853016e-03 3.528893576498289e-03 3.505547919712690e-03 3.482305453931515e-03 3.459165950590054e-03 + 3.436129181123602e-03 3.413194916967434e-03 3.390362929556839e-03 3.367632990327113e-03 3.345004870713549e-03 + 3.322478342151419e-03 3.300053176076018e-03 3.277729143922636e-03 3.255506017126571e-03 3.233383567123091e-03 + 3.211361565347495e-03 3.189439783235070e-03 3.167617992221112e-03 3.145895963740894e-03 3.124273469229713e-03 + 3.102750280122855e-03 3.081326167855609e-03 3.060000903863274e-03 3.038774259581116e-03 3.017646006444438e-03 + 2.996615915888523e-03 2.975683759348671e-03 2.954849308260150e-03 2.934112334058261e-03 2.913472608178290e-03 + 2.892929902055533e-03 2.872483987125260e-03 2.852134634822772e-03 2.831881616583353e-03 2.811724703842302e-03 + 2.791663668034889e-03 2.771698280596412e-03 2.751828312962158e-03 2.732053536567425e-03 2.712373722847482e-03 + 2.692788643237626e-03 2.673298069173149e-03 2.653901772089343e-03 2.634599523421481e-03 2.615391094604860e-03 + 2.596276257074769e-03 2.577254782266501e-03 2.558326441615332e-03 2.539491006556557e-03 2.520748248525463e-03 + 2.502097938957346e-03 2.483539849287480e-03 2.465073750951161e-03 2.446699415383674e-03 2.428416614020312e-03 + 2.410225118296368e-03 2.392124699647115e-03 2.374115129507849e-03 2.356196179313860e-03 2.338367620500442e-03 + 2.320629224502867e-03 2.302980762756432e-03 2.285422006696426e-03 2.267952727758143e-03 2.250572697376858e-03 + 2.233281686987864e-03 2.216079468026452e-03 2.198965811927918e-03 2.181940490127533e-03 2.165003274060593e-03 + 2.148153935162387e-03 2.131392244868211e-03 2.114717974613337e-03 2.098130895833062e-03 2.081630779962673e-03 + 2.065217398437465e-03 2.048890522692714e-03 2.032649924163713e-03 2.016495374285752e-03 2.000426644494126e-03 + 1.984443506224108e-03 1.968545730910994e-03 1.952733089990072e-03 1.937005354896637e-03 1.921362297065964e-03 + 1.905803687933347e-03 1.890329298934075e-03 1.874938901503444e-03 1.859632267076724e-03 1.844409167089217e-03 + 1.829269372976206e-03 1.814212656172981e-03 1.799238788114837e-03 1.784347540237048e-03 1.769538683974909e-03 + 1.754811990763710e-03 1.740167232038742e-03 1.725604179235283e-03 1.711122603788629e-03 1.696722277134065e-03 + 1.682402970706887e-03 1.668164455942369e-03 1.654006504275808e-03 1.639928887142492e-03 1.625931375977714e-03 + 1.612013742216749e-03 1.598175757294894e-03 1.584417192647435e-03 1.570737819709667e-03 1.557137409916867e-03 + 1.543615734704329e-03 1.530172565507339e-03 1.516807673761193e-03 1.503520830901168e-03 1.490311808362557e-03 + 1.477180377580647e-03 1.464126309990734e-03 1.451149377028094e-03 1.438249350128022e-03 1.425426000725804e-03 + 1.412679100256735e-03 1.400008420156093e-03 1.387413731859170e-03 1.374894806801254e-03 1.362451416417636e-03 + 1.350083332143606e-03 1.337790325414444e-03 1.325572167665442e-03 1.313428630331890e-03 1.301359484849079e-03 + 1.289364502652289e-03 1.277443455176812e-03 1.265596113857936e-03 1.253822250130956e-03 1.242121635431148e-03 + 1.230494041193807e-03 1.218939238854221e-03 1.207456999847681e-03 1.196047095609467e-03 1.184709297574872e-03 + 1.173443377179185e-03 1.162249105857698e-03 1.151126255045689e-03 1.140074596178453e-03 1.129093900691276e-03 + 1.118183940019452e-03 1.107344485598260e-03 1.096575308862992e-03 1.085876181248937e-03 1.075246874191387e-03 + 1.064687159125622e-03 1.054196807486934e-03 1.043775590710611e-03 1.033423280231947e-03 1.023139647486220e-03 + 1.012924463908723e-03 1.002777500934745e-03 9.926985299995724e-04 9.826873225384988e-04 9.727436499868044e-04 + 9.628672837797804e-04 9.530579953527160e-04 9.433155561409024e-04 9.336397375796210e-04 9.240303111041634e-04 + 9.144870481498174e-04 9.050097201518753e-04 8.955980985456180e-04 8.862519547663374e-04 8.769710602493213e-04 + 8.677551864298620e-04 8.586041047432399e-04 8.495175866247467e-04 8.404954035096720e-04 8.315373268333056e-04 + 8.226431280309302e-04 8.138125785378364e-04 8.050454497893130e-04 7.963415132206520e-04 7.877005402671333e-04 + 7.791223023640501e-04 7.706065709466894e-04 7.621531174503436e-04 7.537617133102937e-04 7.454321299618317e-04 + 7.371641388402454e-04 7.289575113808262e-04 7.208120190188562e-04 7.127274331896262e-04 7.047035253284248e-04 + 6.967400668705408e-04 6.888368292512645e-04 6.809935839058778e-04 6.732101022696724e-04 6.654861557779368e-04 + 6.578215158659625e-04 6.502159539690304e-04 6.426692415224324e-04 6.351811499614567e-04 6.277514507213948e-04 + 6.203799152375280e-04 6.130663149451484e-04 6.058104212795442e-04 5.986120056760058e-04 5.914708395698158e-04 + 5.843866943962659e-04 5.773593415906435e-04 5.703885525882402e-04 5.634740988243379e-04 5.566157517342281e-04 + 5.498132827531990e-04 5.430664633165412e-04 5.363750648595379e-04 5.297388588174797e-04 5.231576166256548e-04 + 5.166311097193540e-04 5.101591095338604e-04 5.037413875044649e-04 4.973777150664555e-04 4.910678636551228e-04 + 4.848116047057501e-04 4.786087096536281e-04 4.724589499340449e-04 4.663620969822913e-04 4.603179222336506e-04 + 4.543261971234134e-04 4.483866930868676e-04 4.424991815593019e-04 4.366634339760067e-04 4.308792217722652e-04 + 4.251463163833680e-04 4.194644892446035e-04 4.138335117912622e-04 4.082531554586277e-04 4.027231916819903e-04 + 3.972433918966381e-04 3.918135275378618e-04 3.864333700409451e-04 3.811026908411783e-04 3.758212613738496e-04 + 3.705888530742497e-04 3.654052373776619e-04 3.602701857193769e-04 3.551834695346827e-04 3.501448602588700e-04 + 3.451541293272223e-04 3.402110481750301e-04 3.353153882375817e-04 3.304669209501669e-04 3.256654177480704e-04 + 3.209106500665821e-04 3.162023893409903e-04 3.115404070065852e-04 3.069244744986507e-04 3.023543632524774e-04 + 2.978298447033534e-04 2.933506902865686e-04 2.889166714374075e-04 2.845275595911603e-04 2.801831261831150e-04 + 2.758831426485598e-04 2.716273804227849e-04 2.674156109410747e-04 2.632476056387193e-04 2.591231359510068e-04 + 2.550419733132272e-04 2.510038891606653e-04 2.470086549286107e-04 2.430560420523521e-04 2.391458219671786e-04 + 2.352777661083759e-04 2.314516459112336e-04 2.276672328110411e-04 2.239242982430823e-04 2.202226136426513e-04 + 2.165619504450333e-04 2.129420800855138e-04 2.093627739993866e-04 2.058238036219341e-04 2.023249403884502e-04 + 1.988659557342204e-04 1.954466210945300e-04 1.920667079046728e-04 1.887259875999340e-04 1.854242316155996e-04 + 1.821612113869626e-04 1.789366983493062e-04 1.757504639379237e-04 1.726022795881008e-04 1.694919167351232e-04 + 1.664191468142838e-04 1.633837412608687e-04 1.603854715101632e-04 1.574241089974609e-04 1.544994251580449e-04 + 1.516111914272081e-04 1.487591792402364e-04 1.459431600324156e-04 1.431629052390386e-04 1.404181862953890e-04 + 1.377087746367595e-04 1.350344416984360e-04 1.323949589157045e-04 1.297900977238577e-04 1.272196295581814e-04 + 1.246833258539619e-04 1.221809580464913e-04 1.197122975710540e-04 1.172771158629421e-04 1.148751843574417e-04 + 1.125062744898392e-04 1.101701576954265e-04 1.078666054094900e-04 1.055953890673160e-04 1.033562801041963e-04 + 1.011490499554156e-04 9.897347005626549e-05 9.682931184203257e-05 9.471634674800319e-05 9.263434620946902e-05 + 9.058308166171652e-05 8.856232454003224e-05 8.657184627970762e-05 8.461141831602771e-05 8.268081208428384e-05 + 8.077979901976259e-05 7.890815055775064e-05 7.706563813353921e-05 7.525203318241361e-05 7.346710713966480e-05 + 7.171063144057957e-05 6.998237752044478e-05 6.828211681455130e-05 6.660962075818604e-05 6.496466078663583e-05 + 6.334700833519147e-05 6.175643483913857e-05 6.019271173376790e-05 5.865561045436633e-05 5.714490243622088e-05 + 5.566035911462217e-05 5.420175192485715e-05 5.276885230221288e-05 5.136143168197985e-05 4.997926149944398e-05 + 4.862211318989571e-05 4.728975818862210e-05 4.598196793091027e-05 4.469851385205058e-05 4.343916738733009e-05 + 4.220369997203605e-05 4.099188304145863e-05 3.980348803088407e-05 3.863828637560248e-05 3.749604951090107e-05 + 3.637654887206717e-05 3.527955589439074e-05 3.420484201315908e-05 3.315217866365955e-05 3.212133728118200e-05 + 3.111208930101303e-05 3.012420615844240e-05 2.915745928875747e-05 2.821162012724574e-05 2.728646010919688e-05 + 2.638175066989761e-05 2.549726324463755e-05 2.463276926870421e-05 2.378804017738504e-05 2.296284740596966e-05 + 2.215696238974553e-05 2.137015656400022e-05 2.060220136402321e-05 1.985286822510145e-05 1.912192858252432e-05 + 1.840915387157941e-05 1.771431552755436e-05 1.703718498573850e-05 1.637753368141942e-05 1.573513304988482e-05 + 1.510975452642394e-05 1.450116954632393e-05 1.390914954487400e-05 1.333346595736183e-05 1.277389021907516e-05 + 1.223019376530309e-05 1.170214803133335e-05 1.118952445245373e-05 1.069209446395325e-05 1.020962950111930e-05 + 9.741900999240843e-06 9.288680393605679e-06 8.849739119501652e-06 8.424848612217666e-06 8.013780307041547e-06 + 7.616305639261172e-06 7.232196044165379e-06 6.861222957041736e-06 6.503157813179035e-06 6.157772047865166e-06 + 5.824837096388053e-06 5.504124394036426e-06 5.195405376097961e-06 4.898451477861344e-06 4.613034134614521e-06 + 4.338924781645458e-06 4.075894854242793e-06 3.823715787694494e-06 3.582159017288563e-06 3.350995978313578e-06 + 3.129998106057359e-06 2.918936835808456e-06 2.717583602854878e-06 2.525709842484664e-06 2.343086989986320e-06 + 2.169486480647874e-06 2.004679749757391e-06 1.848438232603329e-06 1.700533364473627e-06 1.560736580656715e-06 + 1.428819316440665e-06 1.304553007113569e-06 1.187709087963820e-06 1.078058994279508e-06 9.753741613487438e-07 + 8.794260244598842e-07 7.899860189009674e-07 7.068255799603295e-07 6.297161429260866e-07 5.584291430863768e-07 + 4.927360157295061e-07 4.324081961435606e-07 3.772171196168294e-07 3.269342214374535e-07 2.813309368935902e-07 + 2.401787012735049e-07 2.032489498653510e-07 1.703131179572954e-07 1.411426408375830e-07 1.155089537943586e-07 + 9.318349211585539e-08 7.393769109024318e-08 5.754298600570192e-08 4.377081215044991e-08 3.239260481266485e-08 + 2.317979928053213e-08 1.590383084225846e-08 1.033613478602374e-08 6.248146400028812e-09 3.411300972460543e-09 + 1.597033791509841e-09 5.767801453714960e-10 1.219753222356829e-10 4.054610294399152e-12 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +29 63.54600 3.61500 fcc + 4.999999999810711e-06 -2.974529772262570e-02 -6.430698647352583e-02 -9.359726059686035e-02 -1.245883332905926e-01 + -1.544249092078051e-01 -1.839957990655601e-01 -2.131094566857851e-01 -2.417885155117329e-01 -2.700517310188084e-01 + -2.978956641541096e-01 -3.253300092643397e-01 -3.523592859047337e-01 -3.789894479055120e-01 -4.052260805026124e-01 + -4.310747172135264e-01 -4.565408585290769e-01 -4.816299260417520e-01 -5.063472875649956e-01 -5.306982484760044e-01 + -5.546880543701050e-01 -5.783218912677119e-01 -6.016048861816500e-01 -6.245421076145018e-01 -6.471385659602377e-01 + -6.693992139074976e-01 -6.913289465852567e-01 -7.129326021807865e-01 -7.342149625244568e-01 -7.551807535175351e-01 + -7.758346455576955e-01 -7.961812539302272e-01 -8.162251389632388e-01 -8.359708065989396e-01 -8.554227089793534e-01 + -8.745852448655735e-01 -8.934627600538377e-01 -9.120595477652830e-01 -9.303798488093634e-01 -9.484278521099418e-01 + -9.662076952903965e-01 -9.837234650845670e-01 -1.000979197743438e+00 -1.017978879421880e+00 -1.034726446351777e+00 + -1.051225785324413e+00 -1.067480734273202e+00 -1.083495082676656e+00 -1.099272571955679e+00 -1.114816895855978e+00 + -1.130131700631826e+00 -1.145220585486677e+00 -1.160087103151659e+00 -1.174734760280879e+00 -1.189167017839340e+00 + -1.203387291479897e+00 -1.217398951738020e+00 -1.231205324433113e+00 -1.244809691240687e+00 -1.258215290080375e+00 + -1.271425315494448e+00 -1.284442919018367e+00 -1.297271209386570e+00 -1.309913252897130e+00 -1.322372073975628e+00 + -1.334650655556149e+00 -1.346751939450387e+00 -1.358678826711070e+00 -1.370434177848266e+00 -1.382020813160453e+00 + -1.393441513287949e+00 -1.404699019587196e+00 -1.415796034490494e+00 -1.426735221861634e+00 -1.437519207221928e+00 + -1.448150578050979e+00 -1.458631884327496e+00 -1.468965638897198e+00 -1.479154317823156e+00 -1.489200360733120e+00 + -1.499106171054304e+00 -1.508874116287063e+00 -1.518506528531185e+00 -1.528005704847587e+00 -1.537373907599264e+00 + -1.546613364789955e+00 -1.555726270306389e+00 -1.564714784168311e+00 -1.573581033038246e+00 -1.582327110577210e+00 + -1.590955077776282e+00 -1.599466963286337e+00 -1.607864763666269e+00 -1.616150443612786e+00 -1.624325936451788e+00 + -1.632393144488314e+00 -1.640353939328714e+00 -1.648210162201158e+00 -1.655963624208433e+00 -1.663616106540719e+00 + -1.671169360946975e+00 -1.678625110079156e+00 -1.685985047805010e+00 -1.693250839519310e+00 -1.700424122399519e+00 + -1.707506505604724e+00 -1.714499570725597e+00 -1.721404872122921e+00 -1.728223937231006e+00 -1.734958266859556e+00 + -1.741609335450561e+00 -1.748178591266417e+00 -1.754667456817147e+00 -1.761077329193275e+00 -1.767409580359829e+00 + -1.773665557448806e+00 -1.779846583015710e+00 -1.785953955219528e+00 -1.791988948226326e+00 -1.797952812536256e+00 + -1.803846775268204e+00 -1.809672040442883e+00 -1.815429789237373e+00 -1.821121180159522e+00 -1.826747349427069e+00 + -1.832309411288701e+00 -1.837808458299317e+00 -1.843245561593720e+00 -1.848621771137924e+00 -1.853938115899646e+00 + -1.859195604203010e+00 -1.864395224043148e+00 -1.869537943352107e+00 -1.874624710263173e+00 -1.879656453357774e+00 + -1.884634081833461e+00 -1.889558485834440e+00 -1.894430536759171e+00 -1.899251087517010e+00 -1.904020972783122e+00 + -1.908741009239976e+00 -1.913411995743834e+00 -1.918034713631692e+00 -1.922609927021227e+00 -1.927138383058234e+00 + -1.931620812162146e+00 -1.936057928261314e+00 -1.940450428958438e+00 -1.944798995815045e+00 -1.949104294642919e+00 + -1.953366975742423e+00 -1.957587674138659e+00 -1.961767009809789e+00 -1.965905587851686e+00 -1.970003998741092e+00 + -1.974062818617800e+00 -1.978082609513892e+00 -1.982063919580502e+00 -1.986007283308652e+00 -1.989913221693113e+00 + -1.993782242475532e+00 -1.997614840416584e+00 -2.001411497516209e+00 -2.005172683230969e+00 -2.008898854686896e+00 + -2.012590456842320e+00 -2.016247922712500e+00 -2.019871673630875e+00 -2.023462119460371e+00 -2.027019658801358e+00 + -2.030544679196124e+00 -2.034037557290278e+00 -2.037498659040316e+00 -2.040928339963340e+00 -2.044326945339381e+00 + -2.047694810409991e+00 -2.051032260574074e+00 -2.054339611547194e+00 -2.057617169553732e+00 -2.060865231564336e+00 + -2.064084085489279e+00 -2.067274010367665e+00 -2.070435276554393e+00 -2.073568145876755e+00 -2.076672871812636e+00 + -2.079749699715078e+00 -2.082798866996717e+00 -2.085820603309610e+00 -2.088815130723087e+00 -2.091782663876979e+00 + -2.094723410147227e+00 -2.097637569857166e+00 -2.100525336452930e+00 -2.103386896673880e+00 -2.106222430721270e+00 + -2.109032112407347e+00 -2.111816109309661e+00 -2.114574582968703e+00 -2.117307689054226e+00 -2.120015577526261e+00 + -2.122698392794530e+00 -2.125356273862621e+00 -2.127989354472209e+00 -2.130597763286815e+00 -2.133181624048925e+00 + -2.135741055731620e+00 -2.138276172688646e+00 -2.140787084792938e+00 -2.143273897571786e+00 -2.145736712376609e+00 + -2.148175626530753e+00 -2.150590733471714e+00 -2.152982122891836e+00 -2.155349880870490e+00 -2.157694090001053e+00 + -2.160014829546717e+00 -2.162312175578782e+00 -2.164586201109520e+00 -2.166836976223482e+00 -2.169064568202661e+00 + -2.171269041645952e+00 -2.173450458611177e+00 -2.175608878743719e+00 -2.177744359399976e+00 -2.179856955769301e+00 + -2.181946720991605e+00 -2.184013706269698e+00 -2.186057960997892e+00 -2.188079532880760e+00 -2.190078468047203e+00 + -2.192054811162993e+00 -2.194008605540286e+00 -2.195939893243223e+00 -2.197848715203474e+00 -2.199735111328910e+00 + -2.201599120608279e+00 -2.203440781214366e+00 -2.205260130605058e+00 -2.207057205622181e+00 -2.208832042594640e+00 + -2.210584677436705e+00 -2.212315145743323e+00 -2.214023482883906e+00 -2.215709724094596e+00 -2.217373904570314e+00 + -2.219016059556012e+00 -2.220636224434478e+00 -2.222234434812230e+00 -2.223810726603892e+00 -2.225365136115460e+00 + -2.226897700129347e+00 -2.228408455984414e+00 -2.229897441653065e+00 -2.231364695817732e+00 -2.232810257945853e+00 + -2.234234168363960e+00 -2.235636468335345e+00 -2.237017200129656e+00 -2.238376407088992e+00 -2.239714133695035e+00 + -2.241030425634650e+00 -2.242325329864605e+00 -2.243598894681571e+00 -2.244851169781754e+00 -2.246082206316076e+00 + -2.247292056947830e+00 -2.248480775908871e+00 -2.249648419054990e+00 -2.250795043927707e+00 -2.251920709804646e+00 + -2.253025477743616e+00 -2.254109410630856e+00 -2.255172573227847e+00 -2.256215032217156e+00 -2.257236856255709e+00 + -2.258238116016356e+00 -2.259218884220921e+00 -2.260179235678919e+00 -2.261119247325009e+00 -2.262038998255372e+00 + -2.262938569771987e+00 -2.263818045415693e+00 -2.264677510988414e+00 -2.265517054582310e+00 -2.266336766607800e+00 + -2.267136739820506e+00 -2.267917069356113e+00 -2.268677852755292e+00 -2.269419189975145e+00 -2.270141183408787e+00 + -2.270843937904013e+00 -2.271527560780716e+00 -2.272192161856036e+00 -2.272837853461272e+00 -2.273464750442787e+00 + -2.274072970171993e+00 -2.274662632554641e+00 -2.275233860038732e+00 -2.275786777629709e+00 -2.276321512899268e+00 + -2.276838195976115e+00 -2.277336959546317e+00 -2.277817938853157e+00 -2.278281271695579e+00 -2.278727098433203e+00 + -2.279155561986953e+00 -2.279566807819966e+00 -2.279960983928274e+00 -2.280338240831269e+00 -2.280698731560701e+00 + -2.281042611655312e+00 -2.281370039153072e+00 -2.281681174562626e+00 -2.281976180844296e+00 -2.282255223391167e+00 + -2.282518470008657e+00 -2.282766090898608e+00 -2.282998258642880e+00 -2.283215148165716e+00 -2.283416936705063e+00 + -2.283603803784261e+00 -2.283775931182202e+00 -2.283933502906944e+00 -2.284076705170144e+00 -2.284205726340460e+00 + -2.284320756906550e+00 -2.284421989435776e+00 -2.284509618541787e+00 -2.284583840844606e+00 -2.284644854890528e+00 + -2.284692861356983e+00 -2.284728062048774e+00 -2.284750662511332e+00 -2.284760866462175e+00 -2.284758846317831e+00 + -2.284744706065169e+00 -2.284718539826492e+00 -2.284680442784649e+00 -2.284630508328036e+00 -2.284568829476414e+00 + -2.284495498385510e+00 -2.284410606481633e+00 -2.284314244448809e+00 -2.284206502232984e+00 -2.284087469050950e+00 + -2.283957233393515e+00 -2.283815883030289e+00 -2.283663505011025e+00 -2.283500185673601e+00 -2.283326010650175e+00 + -2.283141064871846e+00 -2.282945432573279e+00 -2.282739197296537e+00 -2.282522441892167e+00 -2.282295248526338e+00 + -2.282057698686696e+00 -2.281809873186612e+00 -2.281551852169350e+00 -2.281283715111630e+00 -2.281005540824415e+00 + -2.280717407459219e+00 -2.280419392513690e+00 -2.280111572835493e+00 -2.279794024626100e+00 -2.279466823444055e+00 + -2.279130044205507e+00 -2.278783761189780e+00 -2.278428048044707e+00 -2.278062977790158e+00 -2.277688622821473e+00 + -2.277305054912497e+00 -2.276912345215930e+00 -2.276510564268080e+00 -2.276099781994102e+00 -2.275680067711165e+00 + -2.275251490131551e+00 -2.274814117365495e+00 -2.274368016921350e+00 -2.273913255709684e+00 -2.273449900048309e+00 + -2.272978015665192e+00 -2.272497667701276e+00 -2.272008920713100e+00 -2.271511838672842e+00 -2.271006484971777e+00 + -2.270492922425180e+00 -2.269971213274961e+00 -2.269441419192237e+00 -2.268903601279766e+00 -2.268357820071938e+00 + -2.267804135537632e+00 -2.267242607084921e+00 -2.266673293563574e+00 -2.266096253267404e+00 -2.265511543936470e+00 + -2.264919222757081e+00 -2.264319346364091e+00 -2.263711970845491e+00 -2.263097151744718e+00 -2.262474944062816e+00 + -2.261845402260514e+00 -2.261208580258189e+00 -2.260564531437684e+00 -2.259913308646772e+00 -2.259254964201340e+00 + -2.258589549887394e+00 -2.257917116962976e+00 -2.257237716158207e+00 -2.256551397676592e+00 -2.255858211199403e+00 + -2.255158205887789e+00 -2.254451430384613e+00 -2.253737932816259e+00 -2.253017760792774e+00 -2.252290961408688e+00 + -2.251557581247387e+00 -2.250817666383103e+00 -2.250071262382655e+00 -2.249318414307177e+00 -2.248559166712322e+00 + -2.247793563648755e+00 -2.247021648666400e+00 -2.246243464816426e+00 -2.245459054652896e+00 -2.244668460234418e+00 + -2.243871723124463e+00 -2.243068884391568e+00 -2.242259984613473e+00 -2.241445063879088e+00 -2.240624161790128e+00 + -2.239797317462727e+00 -2.238964569527799e+00 -2.238125956131088e+00 -2.237281514937132e+00 -2.236431283131328e+00 + -2.235575297421522e+00 -2.234713594039550e+00 -2.233846208741804e+00 -2.232973176809008e+00 -2.232094533050194e+00 + -2.231210311804744e+00 -2.230320546943990e+00 -2.229425271872794e+00 -2.228524519530207e+00 -2.227618322389153e+00 + -2.226706712460275e+00 -2.225789721294088e+00 -2.224867379982586e+00 -2.223939719160836e+00 -2.223006769007830e+00 + -2.222068559246027e+00 -2.221125119145137e+00 -2.220176477524404e+00 -2.219222662754232e+00 -2.218263702757810e+00 + -2.217299625012119e+00 -2.216330456547491e+00 -2.215356223951251e+00 -2.214376953370165e+00 -2.213392670512112e+00 + -2.212403400647748e+00 -2.211409168611695e+00 -2.210409998802172e+00 -2.209405915184477e+00 -2.208396941293584e+00 + -2.207383100235931e+00 -2.206364414691167e+00 -2.205340906913459e+00 -2.204312598731262e+00 -2.203279511550634e+00 + -2.202241666358070e+00 -2.201199083722335e+00 -2.200151783796301e+00 -2.199099786318501e+00 -2.198043110612920e+00 + -2.196981775592267e+00 -2.195915799760983e+00 -2.194845201217184e+00 -2.193769997654599e+00 -2.192690206364266e+00 + -2.191605844234577e+00 -2.190516927754359e+00 -2.189423473016115e+00 -2.188325495718082e+00 -2.187223011166275e+00 + -2.186116034276374e+00 -2.185004579573976e+00 -2.183888661197555e+00 -2.182768292901925e+00 -2.181643488060391e+00 + -2.180514259666944e+00 -2.179380620338358e+00 -2.178242582314598e+00 -2.177100157461768e+00 -2.175953357275697e+00 + -2.174802192884262e+00 -2.173646675049743e+00 -2.172486814171045e+00 -2.171322620284405e+00 -2.170154103066202e+00 + -2.168981271836789e+00 -2.167804135562953e+00 -2.166622702860366e+00 -2.165436981995990e+00 -2.164246980889130e+00 + -2.163052707114078e+00 -2.161854167904146e+00 -2.160651370154303e+00 -2.159444320423765e+00 -2.158233024938550e+00 + -2.157017489592782e+00 -2.155797719951358e+00 -2.154573721254086e+00 -2.153345498418473e+00 -2.152113056042457e+00 + -2.150876398407144e+00 -2.149635529478417e+00 -2.148390452909494e+00 -2.147141172045244e+00 -2.145887689925127e+00 + -2.144630009286074e+00 -2.143368132565373e+00 -2.142102061902524e+00 -2.140831799141815e+00 -2.139557345836748e+00 + -2.138278703253123e+00 -2.136995872372039e+00 -2.135708853892906e+00 -2.134417648235631e+00 -2.133122255543166e+00 + -2.131822675685981e+00 -2.130518908265326e+00 -2.129210952616371e+00 -2.127898807811330e+00 -2.126582472661882e+00 + -2.125261945721767e+00 -2.123937225291317e+00 -2.122608309420839e+00 -2.121275195913853e+00 -2.119937882330373e+00 + -2.118596365989546e+00 -2.117250643972272e+00 -2.115900713125760e+00 -2.114546570067044e+00 -2.113188211186347e+00 + -2.111825632650426e+00 -2.110458830405398e+00 -2.109087800179499e+00 -2.107712537487564e+00 -2.106333037634681e+00 + -2.104949295719616e+00 -2.103561306638236e+00 -2.102169065086604e+00 -2.100772565563689e+00 -2.099371802375872e+00 + -2.097966769640692e+00 -2.096557461290312e+00 -2.095143871075032e+00 -2.093725992566534e+00 -2.092303819160633e+00 + -2.090877344081788e+00 -2.089446560386858e+00 -2.088011460968645e+00 -2.086572038559443e+00 -2.085128285734371e+00 + -2.083680194914300e+00 -2.082227758370182e+00 -2.080770968226895e+00 -2.079309816466798e+00 -2.077844294933302e+00 + -2.076374395334334e+00 -2.074900109245281e+00 -2.073421428113268e+00 -2.071938343260962e+00 -2.070450845890176e+00 + -2.068958927085462e+00 -2.067462577817551e+00 -2.065961788946467e+00 -2.064456551225608e+00 -2.062946855305587e+00 + -2.061432691737794e+00 -2.059914050977949e+00 -2.058390923389603e+00 -2.056863299247311e+00 -2.055331168740595e+00 + -2.053794521977675e+00 -2.052253348989029e+00 -2.050707639730928e+00 -2.049157384088912e+00 -2.047602571880996e+00 + -2.046043192861499e+00 -2.044479236724704e+00 -2.042910693108343e+00 -2.041337551597080e+00 -2.039759801725936e+00 + -2.038177432983566e+00 -2.036590434815867e+00 -2.034998796629576e+00 -2.033402507795658e+00 -2.031801557652704e+00 + -2.030195935510301e+00 -2.028585630652281e+00 -2.026970632340236e+00 -2.025350929816901e+00 -2.023726512309482e+00 + -2.022097369032948e+00 -2.020463489193264e+00 -2.018824861990693e+00 -2.017181476623089e+00 -2.015533322289137e+00 + -2.013880388191564e+00 -2.012222663540280e+00 -2.010560137555506e+00 -2.008892799471031e+00 -2.007220638537354e+00 + -2.005543644024714e+00 -2.003861805226137e+00 -2.002175111460466e+00 -2.000483552075360e+00 -1.998787116450410e+00 + -1.997085794000193e+00 -1.995379574177046e+00 -1.993668446473970e+00 -1.991952400427470e+00 -1.990231425620385e+00 + -1.988505511684964e+00 -1.986774648305709e+00 -1.985038825221930e+00 -1.983298032230433e+00 -1.981552259188221e+00 + -1.979801496015170e+00 -1.978045732696886e+00 -1.976284959287468e+00 -1.974519165911801e+00 -1.972748342768021e+00 + -1.970972480130025e+00 -1.969191568349977e+00 -1.967405597860977e+00 -1.965614559179727e+00 -1.963818442908475e+00 + -1.962017239737334e+00 -1.960210940446591e+00 -1.958399535908944e+00 -1.956583017092063e+00 -1.954761375061048e+00 + -1.952934600980153e+00 -1.951102686114853e+00 -1.949265621833916e+00 -1.947423399611466e+00 -1.945576011029322e+00 + -1.943723447779321e+00 -1.941865701664761e+00 -1.940002764602220e+00 -1.938134628623416e+00 -1.936261285877053e+00 + -1.934382728630933e+00 -1.932498949274147e+00 -1.930609940318228e+00 -1.928715694398726e+00 -1.926816204276861e+00 + -1.924911462841137e+00 -1.923001463109181e+00 -1.921086198229848e+00 -1.919165661484078e+00 -1.917239846286222e+00 + -1.915308746185453e+00 -1.913372354867159e+00 -1.911430666154576e+00 -1.909483674010689e+00 -1.907531372538875e+00 + -1.905573755983935e+00 -1.903610818733309e+00 -1.901642555318248e+00 -1.899668960415145e+00 -1.897690028847340e+00 + -1.895705755585500e+00 -1.893716135748389e+00 -1.891721164603861e+00 -1.889720837569811e+00 -1.887715150215264e+00 + -1.885704098261985e+00 -1.883687677584678e+00 -1.881665884211489e+00 -1.879638714324755e+00 -1.877606164261747e+00 + -1.875568230515538e+00 -1.873524909736410e+00 -1.871476198731857e+00 -1.869422094466849e+00 -1.867362594064368e+00 + -1.865297694805917e+00 -1.863227394132156e+00 -1.861151689644132e+00 -1.859070579103125e+00 -1.856984060430629e+00 + -1.854892131708708e+00 -1.852794791180298e+00 -1.850692037249563e+00 -1.848583868483016e+00 -1.846470283609175e+00 + -1.844351281518301e+00 -1.842226861262547e+00 -1.840097022056075e+00 -1.837961763275225e+00 -1.835821084459365e+00 + -1.833674985310510e+00 -1.831523465692773e+00 -1.829366525632330e+00 -1.827204165317372e+00 -1.825036385098054e+00 + -1.822863185487151e+00 -1.820684567159566e+00 -1.818500530951587e+00 -1.816311077860659e+00 -1.814116209045147e+00 + -1.811915925824112e+00 -1.809710229677771e+00 -1.807499122246926e+00 -1.805282605331993e+00 -1.803060680892635e+00 + -1.800833351047356e+00 -1.798600618073082e+00 -1.796362484405475e+00 -1.794118952638219e+00 -1.791870025521948e+00 + -1.789615705963686e+00 -1.787355997026266e+00 -1.785090901927800e+00 -1.782820424041778e+00 -1.780544566896309e+00 + -1.778263334172888e+00 -1.775976729705675e+00 -1.773684757480802e+00 -1.771387421635713e+00 -1.769084726459004e+00 + -1.766776676389749e+00 -1.764463276016015e+00 -1.762144530074053e+00 -1.759820443447505e+00 -1.757491021166585e+00 + -1.755156268407777e+00 -1.752816190493067e+00 -1.750470792888431e+00 -1.748120081202859e+00 -1.745764061187435e+00 + -1.743402738734446e+00 -1.741036119876891e+00 -1.738664210787749e+00 -1.736287017778289e+00 -1.733904547297024e+00 + -1.731516805928730e+00 -1.729123800393417e+00 -1.726725537545713e+00 -1.724322024374108e+00 -1.721913267999197e+00 + -1.719499275672529e+00 -1.717080054775552e+00 -1.714655612818529e+00 -1.712225957439758e+00 -1.709791096404816e+00 + -1.707351037604744e+00 -1.704905789054834e+00 -1.702455358893499e+00 -1.699999755381117e+00 -1.697538986899140e+00 + -1.695073061949339e+00 -1.692601989151939e+00 -1.690125777244355e+00 -1.687644435080006e+00 -1.685157971627097e+00 + -1.682666395967668e+00 -1.680169717296760e+00 -1.677667944920599e+00 -1.675161088255273e+00 -1.672649156825472e+00 + -1.670132160263248e+00 -1.667610108307030e+00 -1.665083010800692e+00 -1.662550877691807e+00 -1.660013719030264e+00 + -1.657471544966985e+00 -1.654924365752664e+00 -1.652372191736694e+00 -1.649815033366252e+00 -1.647252901184563e+00 + -1.644685805829483e+00 -1.642113758032216e+00 -1.639536768616035e+00 -1.636954848495137e+00 -1.634368008673768e+00 + -1.631776260244455e+00 -1.629179614386624e+00 -1.626578082365314e+00 -1.623971675529856e+00 -1.621360405312723e+00 + -1.618744283228616e+00 -1.616123320872805e+00 -1.613497529919679e+00 -1.610866922121478e+00 -1.608231509307009e+00 + -1.605591303380452e+00 -1.602946316320431e+00 -1.600296560178402e+00 -1.597642047077262e+00 -1.594982789210051e+00 + -1.592318798838672e+00 -1.589650088292725e+00 -1.586976669968553e+00 -1.584298556327702e+00 -1.581615759895517e+00 + -1.578928293259898e+00 -1.576236169070057e+00 -1.573539400035316e+00 -1.570837998924132e+00 -1.568131978562685e+00 + -1.565421351833477e+00 -1.562706131674105e+00 -1.559986331076056e+00 -1.557261963083497e+00 -1.554533040792341e+00 + -1.551799577348870e+00 -1.549061585948380e+00 -1.546319079834004e+00 -1.543572072295516e+00 -1.540820576668156e+00 + -1.538064606331704e+00 -1.535304174709156e+00 -1.532539295265443e+00 -1.529769981506265e+00 -1.526996246976940e+00 + -1.524218105261294e+00 -1.521435569980673e+00 -1.518648654792741e+00 -1.515857373390260e+00 -1.513061739499927e+00 + -1.510261766881280e+00 -1.507457469325655e+00 -1.504648860655170e+00 -1.501835954721618e+00 -1.499018765405266e+00 + -1.496197306613796e+00 -1.493371592281244e+00 -1.490541636366935e+00 -1.487707452854560e+00 -1.484869055751119e+00 + -1.482026459085769e+00 -1.479179676908803e+00 -1.476328723290653e+00 -1.473473612320907e+00 -1.470614358107333e+00 + -1.467750974774950e+00 -1.464883476464902e+00 -1.462011877333507e+00 -1.459136191551330e+00 -1.456256433302213e+00 + -1.453372616782348e+00 -1.450484756199388e+00 -1.447592865771413e+00 -1.444696959726040e+00 -1.441797052299523e+00 + -1.438893157735824e+00 -1.435985290285779e+00 -1.433073464206186e+00 -1.430157693758910e+00 -1.427237993210005e+00 + -1.424314376828874e+00 -1.421386858887432e+00 -1.418455453659242e+00 -1.415520175418727e+00 -1.412581038440266e+00 + -1.409638056997445e+00 -1.406691245362249e+00 -1.403740617804247e+00 -1.400786188589830e+00 -1.397827971981392e+00 + -1.394865982236568e+00 -1.391900233607513e+00 -1.388930740340141e+00 -1.385957516673378e+00 -1.382980576838445e+00 + -1.379999935058056e+00 -1.377015605545769e+00 -1.374027602505287e+00 -1.371035940129765e+00 -1.368040632601135e+00 + -1.365041694089385e+00 -1.362039138751849e+00 -1.359032980732610e+00 -1.356023234161846e+00 -1.353009913155193e+00 + -1.349993031813137e+00 -1.346972604220348e+00 -1.343948644444978e+00 -1.340921166538134e+00 -1.337890184533307e+00 + -1.334855712445783e+00 -1.331817764272060e+00 -1.328776353989248e+00 -1.325731495554416e+00 -1.322683202904096e+00 + -1.319631489953804e+00 -1.316576370597481e+00 -1.313517858706949e+00 -1.310455968131407e+00 -1.307390712696745e+00 + -1.304322106205176e+00 -1.301250162434767e+00 -1.298174895138932e+00 -1.295096318045963e+00 -1.292014444858547e+00 + -1.288929289253154e+00 -1.285840864879663e+00 -1.282749185360983e+00 -1.279654264292610e+00 -1.276556115242183e+00 + -1.273454751749040e+00 -1.270350187323670e+00 -1.267242435447356e+00 -1.264131509571866e+00 -1.261017423119054e+00 + -1.257900189480467e+00 -1.254779822016964e+00 -1.251656334058131e+00 -1.248529738902049e+00 -1.245400049815003e+00 + -1.242267280031128e+00 -1.239131442752061e+00 -1.235992551146588e+00 -1.232850618350151e+00 -1.229705657464579e+00 + -1.226557681557882e+00 -1.223406703663960e+00 -1.220252736782276e+00 -1.217095793877524e+00 -1.213935887879212e+00 + -1.210773031681400e+00 -1.207607238142563e+00 -1.204438520085305e+00 -1.201266890296094e+00 -1.198092361525016e+00 + -1.194914946485288e+00 -1.191734657853123e+00 -1.188551508267585e+00 -1.185365510330353e+00 -1.182176676605511e+00 + -1.178985019619322e+00 -1.175790551859792e+00 -1.172593285776534e+00 -1.169393233780670e+00 -1.166190408244668e+00 + -1.162984821502151e+00 -1.159776485847655e+00 -1.156565413536314e+00 -1.153351616783677e+00 -1.150135107765698e+00 + -1.146915898618573e+00 -1.143694001438581e+00 -1.140469428281918e+00 -1.137242191164382e+00 -1.134012302061195e+00 + -1.130779772907074e+00 -1.127544615596070e+00 -1.124306841981435e+00 -1.121066463875526e+00 -1.117823493049462e+00 + -1.114577941233045e+00 -1.111329820114775e+00 -1.108079141341763e+00 -1.104825916519657e+00 -1.101570157212519e+00 + -1.098311874942576e+00 -1.095051081190077e+00 -1.091787787393390e+00 -1.088522004948960e+00 -1.085253745211226e+00 + -1.081983019492520e+00 -1.078709839062889e+00 -1.075434215149928e+00 -1.072156158938924e+00 -1.068875681572841e+00 + -1.065592794152240e+00 -1.062307507735225e+00 -1.059019833337311e+00 -1.055729781931232e+00 -1.052437364447113e+00 + -1.049142591772498e+00 -1.045845474752299e+00 -1.042546024188749e+00 -1.039244250841284e+00 -1.035940165426402e+00 + -1.032633778617835e+00 -1.029325101046582e+00 -1.026014143300901e+00 -1.022700915926290e+00 -1.019385429425379e+00 + -1.016067694257817e+00 -1.012747720840422e+00 -1.009425519547281e+00 -1.006101100709748e+00 -1.002774474616428e+00 + -9.994456515131339e-01 -9.961146416027145e-01 -9.927814550452979e-01 -9.894461019583579e-01 -9.861085924167352e-01 + -9.827689364526724e-01 -9.794271440557631e-01 -9.760832251728038e-01 -9.727371897080341e-01 -9.693890475232336e-01 + -9.660388084377602e-01 -9.626864822285967e-01 -9.593320786303275e-01 -9.559756073349919e-01 -9.526170779923363e-01 + -9.492565002099276e-01 -9.458938835532064e-01 -9.425292375455497e-01 -9.391625716682727e-01 -9.357938953604861e-01 + -9.324232180193422e-01 -9.290505490001821e-01 -9.256758976165971e-01 -9.222992731405002e-01 -9.189206848021546e-01 + -9.155401417900354e-01 -9.121576532510745e-01 -9.087732282908244e-01 -9.053868759735387e-01 -9.019986053222475e-01 + -8.986084253188085e-01 -8.952163449037792e-01 -8.918223729766506e-01 -8.884265183960345e-01 -8.850287899797543e-01 + -8.816291965049287e-01 -8.782277467080382e-01 -8.748244492848152e-01 -8.714193128904584e-01 -8.680123461398447e-01 + -8.646035576076280e-01 -8.611929558283322e-01 -8.577805492964320e-01 -8.543663464662500e-01 -8.509503557521700e-01 + -8.475325855288578e-01 -8.441130441313672e-01 -8.406917398552465e-01 -8.372686809566259e-01 -8.338438756521399e-01 + -8.304173321191086e-01 -8.269890584957844e-01 -8.235590628814669e-01 -8.201273533366124e-01 -8.166939378829362e-01 + -8.132588245033374e-01 -8.098220211420800e-01 -8.063835357050458e-01 -8.029433760598558e-01 -7.995015500359854e-01 + -7.960580654248766e-01 -7.926129299798835e-01 -7.891661514164245e-01 -7.857177374122553e-01 -7.822676956075949e-01 + -7.788160336052478e-01 -7.753627589707209e-01 -7.719078792321810e-01 -7.684514018805977e-01 -7.649933343700221e-01 + -7.615336841177162e-01 -7.580724585042823e-01 -7.546096648737854e-01 -7.511453105337301e-01 -7.476794027551762e-01 + -7.442119487730333e-01 -7.407429557861941e-01 -7.372724309576654e-01 -7.338003814146944e-01 -7.303268142487679e-01 + -7.268517365157010e-01 -7.233751552359434e-01 -7.198970773947163e-01 -7.164175099421463e-01 -7.129364597933961e-01 + -7.094539338286766e-01 -7.059699388933205e-01 -7.024844817980913e-01 -6.989975693193274e-01 -6.955092081990747e-01 + -6.920194051452209e-01 -6.885281668315246e-01 -6.850354998976717e-01 -6.815414109495830e-01 -6.780459065595650e-01 + -6.745489932664477e-01 -6.710506775757169e-01 -6.675509659595550e-01 -6.640498648568872e-01 -6.605473806736856e-01 + -6.570435197831260e-01 -6.535382885257272e-01 -6.500316932094807e-01 -6.465237401099102e-01 -6.430144354700990e-01 + -6.395037855009964e-01 -6.359917963815742e-01 -6.324784742589671e-01 -6.289638252486081e-01 -6.254478554342929e-01 + -6.219305708682017e-01 -6.184119775711935e-01 -6.148920815329759e-01 -6.113708887122395e-01 -6.078484050367946e-01 + -6.043246364036469e-01 -6.007995886790076e-01 -5.972732676985832e-01 -5.937456792677487e-01 -5.902168291616812e-01 + -5.866867231254987e-01 -5.831553668743398e-01 -5.796227660933704e-01 -5.760889264380635e-01 -5.725538535343775e-01 + -5.690175529788876e-01 -5.654800303389226e-01 -5.619412911526557e-01 -5.584013409291054e-01 -5.548601851484034e-01 + -5.513178292619730e-01 -5.477742786926665e-01 -5.442295388348998e-01 -5.406836150547434e-01 -5.371365126899267e-01 + -5.335882370500895e-01 -5.300387934169691e-01 -5.264881870445293e-01 -5.229364231590963e-01 -5.193835069594627e-01 + -5.158294436168782e-01 -5.122742382752947e-01 -5.087178960515530e-01 -5.051604220355145e-01 -5.016018212901950e-01 + -4.980420988518643e-01 -4.944812597300535e-01 -4.909193089077686e-01 -4.873562513416893e-01 -4.837920919622982e-01 + -4.802268356740119e-01 -4.766604873552837e-01 -4.730930518586110e-01 -4.695245340107353e-01 -4.659549386128445e-01 + -4.623842704406984e-01 -4.588125342447544e-01 -4.552397347502847e-01 -4.516658766573718e-01 -4.480909646411015e-01 + -4.445150033517625e-01 -4.409379974149741e-01 -4.373599514318086e-01 -4.337808699789076e-01 -4.302007576084850e-01 + -4.266196188484980e-01 -4.230374582028547e-01 -4.194542801515368e-01 -4.158700891507195e-01 -4.122848896328899e-01 + -4.086986860068522e-01 -4.051114826578878e-01 -4.015232839479533e-01 -3.979340942158113e-01 -3.943439177771490e-01 + -3.907527589246850e-01 -3.871606219281927e-01 -3.835675110346344e-01 -3.799734304683662e-01 -3.763783844312629e-01 + -3.727823771028347e-01 -3.691854126403394e-01 -3.655874951788002e-01 -3.619886288311359e-01 -3.583888176883556e-01 + -3.547880658196861e-01 -3.511863772726900e-01 -3.475837560733700e-01 -3.439802062261966e-01 -3.403757317142188e-01 + -3.367703364992645e-01 -3.331640245220630e-01 -3.295567997023559e-01 -3.259486659390053e-01 -3.223396271100321e-01 + -3.187296870726997e-01 -3.151188496637202e-01 -3.115071186993761e-01 -3.078944979756281e-01 -3.042809912682182e-01 + -3.006666023327148e-01 -2.970513349045861e-01 -2.934351926994019e-01 -2.898181794129512e-01 -2.862002987213512e-01 + -2.825815542811472e-01 -2.789619497293617e-01 -2.753414886835577e-01 -2.717201747420350e-01 -2.680980114839463e-01 + -2.644750024694065e-01 -2.608511512395889e-01 -2.572264613167772e-01 -2.536009362044210e-01 -2.499745793873251e-01 + -2.463473943317643e-01 -2.427193844855928e-01 -2.390905532783392e-01 -2.354609041212582e-01 -2.318304404073747e-01 + -2.281991655116755e-01 -2.245670827912224e-01 -2.209341955852512e-01 -2.173005072152671e-01 -2.136660209851075e-01 + -2.100307401809710e-01 -2.063946680716038e-01 -2.027578079084109e-01 -1.991201629255557e-01 -1.954817363400530e-01 + -1.918425313518324e-01 -1.882025511437609e-01 -1.845617988818216e-01 -1.809202777152288e-01 -1.772779907765208e-01 + -1.736349411816489e-01 -1.699911320300484e-01 -1.663465664046538e-01 -1.627012473720686e-01 -1.590551779826788e-01 + -1.554083612707462e-01 -1.517608002544958e-01 -1.481124979361825e-01 -1.444634573021090e-01 -1.408136813227827e-01 + -1.371631729530310e-01 -1.335119351320907e-01 -1.298599707836971e-01 -1.262072828161450e-01 -1.225538741223097e-01 + -1.188997475797902e-01 -1.152449060510300e-01 -1.115893523833992e-01 -1.079330894092803e-01 -1.042761199461357e-01 + -1.006184467965231e-01 -9.696007274822774e-02 -9.330100057438517e-02 -8.964123303356122e-02 -8.598077286983424e-02 + -8.231962281286517e-02 -7.865778557790955e-02 -7.499526386593933e-02 -7.133206036376810e-02 -6.766817774412769e-02 + -6.400361866574732e-02 -6.033838577342381e-02 -5.667248169803389e-02 -5.300590905664746e-02 -4.933867045264920e-02 + -4.567076847581415e-02 -4.200220570238655e-02 -3.833298469514738e-02 -3.466310800342957e-02 -3.099257816321675e-02 + -2.732139769726914e-02 -2.364956911519612e-02 -1.997709491353020e-02 -1.630397757579507e-02 -1.263021957252322e-02 + -8.955823361345837e-03 -5.280791387111823e-03 -1.605126081964963e-03 2.071170134586485e-03 5.748094855600855e-03 + 9.425645686690845e-03 1.310382024593703e-02 1.678261616376874e-02 2.046203108289166e-02 2.414206265822271e-02 + 2.782270855681995e-02 3.150396645786312e-02 3.518583405258492e-02 3.886830904415156e-02 4.255138914758803e-02 + 4.623507208971680e-02 4.991935560909162e-02 5.360423745597131e-02 5.728971539226702e-02 6.097578719141545e-02 + 6.466245063831325e-02 6.834970352925622e-02 7.203754367186781e-02 7.572596888508176e-02 7.941497699908910e-02 + 8.310456585521861e-02 8.679473330586998e-02 9.048547721445237e-02 9.417679545531955e-02 9.786868591375421e-02 + 1.015611464859084e-01 1.052541750786990e-01 1.089477696097372e-01 1.126419280072713e-01 1.163366482101255e-01 + 1.200319281676670e-01 1.237277658397772e-01 1.274241591967351e-01 1.311211062191494e-01 1.348186048979051e-01 + 1.385166532341022e-01 1.422152492390253e-01 1.459143909341164e-01 1.496140763508625e-01 1.533143035307329e-01 + 1.570150705251202e-01 1.607163753952856e-01 1.644182162123267e-01 1.681205910571567e-01 1.718234980203906e-01 + 1.755269352022867e-01 1.792309007126910e-01 1.829353926709834e-01 1.866404092060424e-01 1.903459484562278e-01 + 1.940520085692764e-01 1.977585877022375e-01 2.014656840214258e-01 2.051732957023651e-01 2.088814209297487e-01 + 2.125900578974350e-01 2.162992048083373e-01 2.200088598743714e-01 2.237190213164002e-01 2.274296873641816e-01 + 2.311408562563316e-01 2.348525262403182e-01 2.385646955723619e-01 2.422773625173777e-01 2.459905253489230e-01 + 2.497041823491505e-01 2.534183318087678e-01 2.571329720270329e-01 2.608481013116614e-01 2.645637179787702e-01 + 2.682798203528239e-01 2.719964067665871e-01 2.757134755610949e-01 2.794310250856368e-01 2.831490536976771e-01 + 2.868675597627948e-01 2.905865416546349e-01 2.943059977548639e-01 2.980259264531308e-01 3.017463261470603e-01 + 3.054671952421796e-01 3.091885321518557e-01 3.129103352972455e-01 3.166326031072572e-01 3.203553340185105e-01 + 3.240785264753302e-01 3.278021789296729e-01 3.315262898410738e-01 3.352508576766006e-01 3.389758809107990e-01 + 3.427013580256680e-01 3.464272875106516e-01 3.501536678625716e-01 3.538804975855692e-01 3.576077751910594e-01 + 3.613354991976881e-01 3.650636681313048e-01 3.687922805249425e-01 3.725213349187690e-01 3.762508298600275e-01 + 3.799807639029857e-01 3.837111356088989e-01 3.874419435459824e-01 3.911731862893885e-01 3.949048624211740e-01 + 3.986369705302226e-01 4.023695092122097e-01 4.061024770695666e-01 4.098358727114415e-01 4.135696947536948e-01 + 4.173039418188508e-01 4.210386125360338e-01 4.247737055409372e-01 4.285092194757774e-01 4.322451529892598e-01 + 4.359815047365813e-01 4.397182733793715e-01 4.434554575856482e-01 4.471930560297706e-01 4.509310673923997e-01 + 4.546694903604793e-01 4.584083236272107e-01 4.621475658920251e-01 4.658872158605209e-01 4.696272722444260e-01 + 4.733677337615650e-01 4.771085991358258e-01 4.808498670971474e-01 4.845915363814908e-01 4.883336057307771e-01 + 4.920760738928535e-01 4.958189396214601e-01 4.995622016761947e-01 5.033058588225020e-01 5.070499098316517e-01 + 5.107943534806773e-01 5.145391885523346e-01 5.182844138350757e-01 5.220300281230178e-01 5.257760302159316e-01 + 5.295224189192098e-01 5.332691930438227e-01 5.370163514062751e-01 5.407638928285766e-01 5.445118161382115e-01 + 5.482601201681270e-01 5.520088037567100e-01 5.557578657477374e-01 5.595073049903369e-01 5.632571203389566e-01 + 5.670073106533396e-01 5.707578747985095e-01 5.745088116447482e-01 5.782601200675495e-01 5.820117989475806e-01 + 5.857638471706547e-01 5.895162636277033e-01 5.932690472147573e-01 5.970221968329386e-01 6.007757113884100e-01 + 6.045295897923321e-01 6.082838309608417e-01 6.120384338150270e-01 6.157933972809060e-01 6.195487202894194e-01 + 6.233044017763778e-01 6.270604406824323e-01 6.308168359530472e-01 6.345735865384647e-01 6.383306913937021e-01 + 6.420881494785343e-01 6.458459597574499e-01 6.496041211996127e-01 6.533626327788410e-01 6.571214934735885e-01 + 6.608807022669068e-01 6.646402581464583e-01 6.684001601044642e-01 6.721604071376693e-01 6.759209982473187e-01 + 6.796819324391351e-01 6.834432087232953e-01 6.872048261144361e-01 6.909667836316008e-01 6.947290802982086e-01 + 6.984917151420330e-01 7.022546871951785e-01 7.060179954940593e-01 7.097816390793986e-01 7.135456169961855e-01 + 7.173099282936458e-01 7.210745720252143e-01 7.248395472485171e-01 7.286048530253483e-01 7.323704884216655e-01 + 7.361364525075642e-01 7.399027443572311e-01 7.436693630489271e-01 7.474363076649712e-01 7.512035772917065e-01 + 7.549711710195152e-01 7.587390879427752e-01 7.625073271598276e-01 7.662758877729542e-01 7.700447688883600e-01 + 7.738139696161510e-01 7.775834890703355e-01 7.813533263687892e-01 7.851234806332243e-01 7.888939509891686e-01 + 7.926647365659425e-01 7.964358364966436e-01 8.002072499181447e-01 8.039789759710598e-01 8.077510137997215e-01 + 8.115233625521516e-01 8.152960213800404e-01 8.190689894387397e-01 8.228422658872446e-01 8.266158498881856e-01 + 8.303897406077796e-01 8.341639372158201e-01 8.379384388856563e-01 8.417132447941736e-01 8.454883541217841e-01 + 8.492637660524233e-01 8.530394797734975e-01 8.568154944758737e-01 8.605918093538610e-01 8.643684236051893e-01 + 8.681453364310144e-01 8.719225470358860e-01 8.757000546277245e-01 8.794778584178012e-01 8.832559576207158e-01 + 8.870343514543838e-01 8.908130391400285e-01 8.945920199021707e-01 8.983712929685914e-01 9.021508575703128e-01 + 9.059307129415819e-01 9.097108583198581e-01 9.134912929457998e-01 9.172720160632626e-01 9.210530269192547e-01 + 9.248343247639269e-01 9.286159088505546e-01 9.323977784355193e-01 9.361799327783000e-01 9.399623711414764e-01 + 9.437450927906796e-01 9.475280969945827e-01 9.513113830248859e-01 9.550949501562985e-01 9.588787976665334e-01 + 9.626629248362989e-01 9.664473309492629e-01 9.702320152920413e-01 9.740169771541809e-01 9.778022158281421e-01 + 9.815877306092978e-01 9.853735207959158e-01 9.891595856891386e-01 9.929459245929639e-01 9.967325368142239e-01 + 1.000519421662573e+00 1.004306578450491e+00 1.008094006493260e+00 1.011881705108960e+00 1.015669673618414e+00 + 1.019457911345202e+00 1.023246417615658e+00 1.027035191758812e+00 1.030824233106444e+00 1.034613540993033e+00 + 1.038403114755716e+00 1.042192953734301e+00 1.045983057271259e+00 1.049773424711693e+00 1.053564055403357e+00 + 1.057354948696604e+00 1.061146103944397e+00 1.064937520502279e+00 1.068729197728344e+00 1.072521134983281e+00 + 1.076313331630313e+00 1.080105787035196e+00 1.083898500566212e+00 1.087691471594149e+00 1.091484699492279e+00 + 1.095278183636364e+00 1.099071923404625e+00 1.102865918177762e+00 1.106660167338908e+00 1.110454670273624e+00 + 1.114249426369879e+00 1.118044435018049e+00 1.121839695610920e+00 1.125635207543654e+00 1.129430970213787e+00 + 1.133226983021199e+00 1.137023245368112e+00 1.140819756659091e+00 1.144616516301010e+00 1.148413523703078e+00 + 1.152210778276778e+00 1.156008279435879e+00 1.159806026596436e+00 1.163604019176739e+00 1.167402256597350e+00 + 1.171200738281089e+00 1.174999463652973e+00 1.178798432140239e+00 1.182597643172343e+00 1.186397096180900e+00 + 1.190196790599755e+00 1.193996725864902e+00 1.197796901414489e+00 1.201597316688831e+00 1.205397971130369e+00 + 1.209198864183652e+00 1.212999995295380e+00 1.216801363914356e+00 1.220602969491471e+00 1.224404811479703e+00 + 1.228206889334096e+00 1.232009202511745e+00 1.235811750471838e+00 1.239614532675582e+00 1.243417548586224e+00 + 1.247220797669036e+00 1.251024279391295e+00 1.254827993222272e+00 1.258631938633253e+00 1.262436115097495e+00 + 1.266240522090237e+00 1.270045159088673e+00 1.273850025571937e+00 1.277655121021129e+00 1.281460444919266e+00 + 1.285265996751315e+00 1.289071776004128e+00 1.292877782166474e+00 1.296684014729029e+00 1.300490473184322e+00 + 1.304297157026783e+00 1.308104065752717e+00 1.311911198860283e+00 1.315718555849481e+00 1.319526136222142e+00 + 1.323333939481939e+00 1.327141965134373e+00 1.330950212686751e+00 1.334758681648181e+00 1.338567371529577e+00 + 1.342376281843627e+00 1.346185412104794e+00 1.349994761829313e+00 1.353804330535196e+00 1.357614117742193e+00 + 1.361424122971793e+00 1.365234345747223e+00 1.369044785593433e+00 1.372855442037079e+00 1.376666314606557e+00 + 1.380477402831948e+00 1.384288706245020e+00 1.388100224379228e+00 1.391911956769691e+00 1.395723902953217e+00 + 1.399536062468262e+00 1.403348434854938e+00 1.407161019655010e+00 1.410973816411859e+00 1.414786824670482e+00 + 1.418600043977534e+00 1.422413473881260e+00 1.426227113931514e+00 1.430040963679749e+00 1.433855022678995e+00 + 1.437669290483868e+00 1.441483766650551e+00 1.445298450736820e+00 1.449113342301984e+00 1.452928440906907e+00 + 1.456743746114005e+00 1.460559257487215e+00 1.464374974592010e+00 1.468190896995395e+00 1.472007024265873e+00 + 1.475823355973462e+00 1.479639891689688e+00 1.483456630987549e+00 1.487273573441524e+00 1.491090718627604e+00 + 1.494908066123240e+00 1.498725615507327e+00 1.502543366360226e+00 1.506361318263761e+00 1.510179470801182e+00 + 1.513997823557182e+00 1.517816376117892e+00 1.521635128070872e+00 1.525454079005076e+00 1.529273228510862e+00 + 1.533092576180029e+00 1.536912121605744e+00 1.540731864382566e+00 1.544551804106445e+00 1.548371940374710e+00 + 1.552192272786052e+00 1.556012800940515e+00 1.559833524439517e+00 1.563654442885843e+00 1.567475555883599e+00 + 1.571296863038223e+00 1.575118363956503e+00 1.578940058246540e+00 1.582761945517770e+00 1.586584025380936e+00 + 1.590406297448085e+00 1.594228761332567e+00 1.598051416649029e+00 1.601874263013399e+00 1.605697300042904e+00 + 1.609520527356048e+00 1.613343944572591e+00 1.617167551313563e+00 1.620991347201264e+00 1.624815331859245e+00 + 1.628639504912300e+00 1.632463865986463e+00 1.636288414709016e+00 1.640113150708467e+00 1.643938073614544e+00 + 1.647763183058201e+00 1.651588478671610e+00 1.655413960088138e+00 1.659239626942369e+00 1.663065478870086e+00 + 1.666891515508254e+00 1.670717736495018e+00 1.674544141469714e+00 1.678370730072873e+00 1.682197501946165e+00 + 1.686024456732443e+00 1.689851594075727e+00 1.693678913621150e+00 1.697506415015047e+00 1.701334097904871e+00 + 1.705161961939224e+00 1.708990006767836e+00 1.712818232041556e+00 1.716646637412369e+00 1.720475222533373e+00 + 1.724303987058799e+00 1.728132930643963e+00 1.731962052945288e+00 1.735791353620303e+00 1.739620832327621e+00 + 1.743450488726960e+00 1.747280322479111e+00 1.751110333245942e+00 1.754940520690395e+00 1.758770884476495e+00 + 1.762601424269322e+00 1.766432139734997e+00 1.770263030540735e+00 1.774094096354784e+00 1.777925336846424e+00 + 1.781756751685986e+00 1.785588340544849e+00 1.789420103095404e+00 1.793252039011081e+00 1.797084147966338e+00 + 1.800916429636643e+00 1.804748883698474e+00 1.808581509829327e+00 1.812414307707703e+00 1.816247277013096e+00 + 1.820080417425998e+00 1.823913728627902e+00 1.827747210301280e+00 1.831580862129588e+00 1.835414683797252e+00 + 1.839248674989692e+00 1.843082835393283e+00 1.846917164695372e+00 1.850751662584271e+00 1.854586328749242e+00 + 1.858421162880485e+00 1.862256164669187e+00 1.866091333807462e+00 1.869926669988357e+00 1.873762172905859e+00 + 1.877597842254888e+00 1.881433677731301e+00 1.885269679031874e+00 1.889105845854307e+00 1.892942177897211e+00 + 1.896778674860105e+00 1.900615336443431e+00 1.904452162348530e+00 1.908289152277638e+00 1.912126305933900e+00 + 1.915963623021343e+00 1.919801103244882e+00 1.923638746310337e+00 1.927476551924393e+00 1.931314519794603e+00 + 1.935152649629421e+00 1.938990941138158e+00 1.942829394030991e+00 1.946668008018962e+00 1.950506782813956e+00 + 1.954345718128757e+00 1.958184813676960e+00 1.962024069173015e+00 1.965863484332242e+00 1.969703058870781e+00 + 1.973542792505600e+00 1.977382684954527e+00 1.981222735936210e+00 1.985062945170119e+00 1.988903312376550e+00 + 1.992743837276623e+00 1.996584519592279e+00 2.000425359046253e+00 2.004266355362118e+00 2.008107508264239e+00 + 2.011948817477781e+00 2.015790282728717e+00 2.019631903743792e+00 2.023473680250584e+00 2.027315611977434e+00 + 2.031157698653481e+00 2.034999940008646e+00 2.038842335773612e+00 2.042684885679868e+00 2.046527589459656e+00 + 2.050370446845998e+00 2.054213457572679e+00 2.058056621374253e+00 2.061899937986032e+00 2.065743407144061e+00 + 2.069587028585192e+00 2.073430802046996e+00 2.077274727267780e+00 2.081118803986620e+00 2.084963031943340e+00 + 2.088807410878472e+00 2.092651940533300e+00 2.096496620649857e+00 2.100341450970890e+00 2.104186431239868e+00 + 2.108031561200996e+00 2.111876840599186e+00 2.115722269180089e+00 2.119567846690062e+00 2.123413572876169e+00 + 2.127259447486187e+00 2.131105470268597e+00 2.134951640972579e+00 2.138797959348045e+00 2.142644425145562e+00 + 2.146491038116414e+00 2.150337798012584e+00 2.154184704586730e+00 2.158031757592203e+00 2.161878956783035e+00 + 2.165726301913951e+00 2.169573792740339e+00 2.173421429018272e+00 2.177269210504503e+00 2.181117136956432e+00 + 2.184965208132139e+00 2.188813423790382e+00 2.192661783690573e+00 2.196510287592776e+00 2.200358935257718e+00 + 2.204207726446776e+00 2.208056660921995e+00 2.211905738446045e+00 2.215754958782268e+00 2.219604321694638e+00 + 2.223453826947759e+00 2.227303474306887e+00 2.231153263537919e+00 2.235003194407377e+00 2.238853266682425e+00 + 2.242703480130844e+00 2.246553834521041e+00 2.250404329622069e+00 2.254254965203567e+00 2.258105741035820e+00 + 2.261956656889728e+00 2.265807712536795e+00 2.269658907749144e+00 2.273510242299514e+00 2.277361715961221e+00 + 2.281213328508221e+00 2.285065079715066e+00 2.288916969356898e+00 2.292768997209452e+00 2.296621163049071e+00 + 2.300473466652688e+00 2.304325907797825e+00 2.308178486262591e+00 2.312031201825690e+00 2.315884054266406e+00 + 2.319737043364595e+00 2.323590168900697e+00 2.327443430655735e+00 2.331296828411312e+00 2.335150361949601e+00 + 2.339004031053328e+00 2.342857835505797e+00 2.346711775090900e+00 2.350565849593061e+00 2.354420058797285e+00 + 2.358274402489136e+00 2.362128880454725e+00 2.365983492480729e+00 2.369838238354368e+00 2.373693117863430e+00 + 2.377548130796239e+00 2.381403276941666e+00 2.385258556089136e+00 2.389113968028614e+00 2.392969512550594e+00 + 2.396825189446120e+00 2.400680998506778e+00 2.404536939524682e+00 2.408393012292476e+00 2.412249216603342e+00 + 2.416105552250984e+00 2.419962019029628e+00 2.423818616734047e+00 2.427675345159514e+00 2.431532204101833e+00 + 2.435389193357338e+00 2.439246312722842e+00 2.443103561995715e+00 2.446960940973828e+00 2.450818449455553e+00 + 2.454676087239773e+00 2.458533854125888e+00 2.462391749913810e+00 2.466249774403922e+00 2.470107927397144e+00 + 2.473966208694879e+00 2.477824618099033e+00 2.481683155412010e+00 2.485541820436698e+00 2.489400612976488e+00 + 2.493259532835266e+00 2.497118579817395e+00 2.500977753727728e+00 2.504837054371609e+00 2.508696481554857e+00 + 2.512556035083781e+00 2.516415714765172e+00 2.520275520406294e+00 2.524135451814887e+00 2.527995508799164e+00 + 2.531855691167817e+00 2.535715998730005e+00 2.539576431295364e+00 2.543436988673999e+00 2.547297670676467e+00 + 2.551158477113792e+00 2.555019407797480e+00 2.558880462539467e+00 2.562741641152187e+00 2.566602943448496e+00 + 2.570464369241728e+00 2.574325918345680e+00 2.578187590574561e+00 2.582049385743079e+00 2.585911303666359e+00 + 2.589773344159990e+00 2.593635507040009e+00 2.597497792122881e+00 2.601360199225535e+00 2.605222728165335e+00 + 2.609085378760071e+00 2.612948150827995e+00 2.616811044187788e+00 2.620674058658547e+00 2.624537194059826e+00 + 2.628400450211614e+00 2.632263826934317e+00 2.636127324048770e+00 2.639990941376240e+00 2.643854678738428e+00 + 2.647718535957453e+00 2.651582512855854e+00 2.655446609256586e+00 2.659310824983045e+00 2.663175159859037e+00 + 2.667039613708778e+00 2.670904186356907e+00 2.674768877628471e+00 2.678633687348941e+00 2.682498615344191e+00 + 2.686363661440501e+00 2.690228825464567e+00 2.694094107243497e+00 2.697959506604806e+00 2.701825023376384e+00 + 2.705690657386567e+00 2.709556408464075e+00 2.713422276438001e+00 2.717288261137876e+00 2.721154362393623e+00 + 2.725020580035540e+00 2.728886913894344e+00 2.732753363801129e+00 2.736619929587372e+00 2.740486611084965e+00 + 2.744353408126183e+00 2.748220320543677e+00 2.752087348170495e+00 2.755954490840073e+00 2.759821748386222e+00 + 2.763689120643135e+00 2.767556607445396e+00 2.771424208627959e+00 2.775291924026168e+00 2.779159753475736e+00 + 2.783027696812751e+00 2.786895753873690e+00 2.790763924495389e+00 2.794632208515051e+00 2.798500605770271e+00 + 2.802369116099008e+00 2.806237739339573e+00 2.810106475330655e+00 2.813975323911325e+00 2.817844284920988e+00 + 2.821713358199438e+00 2.825582543586830e+00 2.829451840923661e+00 2.833321250050794e+00 2.837190770809476e+00 + 2.841060403041279e+00 2.844930146588145e+00 2.848800001292379e+00 2.852669966996631e+00 2.856540043543903e+00 + 2.860410230777552e+00 2.864280528541288e+00 2.868150936679154e+00 2.872021455035565e+00 2.875892083455281e+00 + 2.879762821783390e+00 2.883633669865330e+00 2.887504627546890e+00 2.891375694674199e+00 2.895246871093730e+00 + 2.899118156652296e+00 2.902989551197044e+00 2.906861054575454e+00 2.910732666635357e+00 2.914604387224911e+00 + 2.918476216192609e+00 2.922348153387285e+00 2.926220198658103e+00 2.930092351854549e+00 2.933964612826442e+00 + 2.937836981423946e+00 2.941709457497539e+00 2.945582040898030e+00 2.949454731476543e+00 2.953327529084536e+00 + 2.957200433573802e+00 2.961073444796446e+00 2.964946562604892e+00 2.968819786851891e+00 2.972693117390511e+00 + 2.976566554074131e+00 2.980440096756472e+00 2.984313745291551e+00 2.988187499533694e+00 2.992061359337559e+00 + 2.995935324558123e+00 2.999809395050658e+00 3.003683570670743e+00 3.007557851274288e+00 3.011432236717509e+00 + 3.015306726856922e+00 3.019181321549349e+00 3.023056020651925e+00 3.026930824022092e+00 3.030805731517596e+00 + 3.034680742996488e+00 3.038555858317117e+00 3.042431077338135e+00 3.046306399918491e+00 3.050181825917436e+00 + 3.054057355194544e+00 3.057932987609653e+00 3.061808723022907e+00 3.065684561294761e+00 3.069560502285944e+00 + 3.073436545857505e+00 3.077312691870754e+00 3.081188940187324e+00 3.085065290669126e+00 3.088941743178361e+00 + 3.092818297577534e+00 3.096694953729397e+00 3.100571711497044e+00 3.104448570743832e+00 3.108325531333389e+00 + 3.112202593129648e+00 3.116079755996834e+00 3.119957019799434e+00 3.123834384402221e+00 3.127711849670264e+00 + 3.131589415468909e+00 3.135467081663770e+00 3.139344848120748e+00 3.143222714706027e+00 3.147100681286060e+00 + 3.150978747727584e+00 3.154856913897605e+00 3.158735179663403e+00 3.162613544892546e+00 3.166492009452863e+00 + 3.170370573212458e+00 3.174249236039705e+00 3.178127997803246e+00 3.182006858372005e+00 3.185885817615167e+00 + 3.189764875402178e+00 3.193644031602761e+00 3.197523286086910e+00 3.201402638724883e+00 3.205282089387195e+00 + 3.209161637944619e+00 3.213041284268201e+00 3.216921028229274e+00 3.220800869699382e+00 3.224680808550369e+00 + 3.228560844654336e+00 3.232440977883612e+00 3.236321208110829e+00 3.240201535208851e+00 3.244081959050797e+00 + 3.247962479510052e+00 3.251843096460258e+00 3.255723809775304e+00 3.259604619329335e+00 3.263485524996756e+00 + 3.267366526652213e+00 3.271247624170616e+00 3.275128817427123e+00 3.279010106297138e+00 3.282891490656318e+00 + 3.286772970380568e+00 3.290654545346034e+00 3.294536215429121e+00 3.298417980506477e+00 3.302299840454991e+00 + 3.306181795151808e+00 3.310063844474303e+00 3.313945988300107e+00 3.317828226507090e+00 3.321710558973357e+00 + 3.325592985577268e+00 3.329475506197414e+00 3.333358120712633e+00 3.337240829001994e+00 3.341123630944812e+00 + 3.345006526420645e+00 3.348889515309279e+00 3.352772597490729e+00 3.356655772845258e+00 3.360539041253372e+00 + 3.364422402595799e+00 3.368305856753500e+00 3.372189403607681e+00 3.376073043039771e+00 3.379956774931425e+00 + 3.383840599164541e+00 3.387724515621249e+00 3.391608524183907e+00 3.395492624735098e+00 3.399376817157620e+00 + 3.403261101334524e+00 3.407145477149094e+00 3.411029944484806e+00 3.414914503225384e+00 3.418799153254779e+00 + 3.422683894457152e+00 3.426568726716919e+00 3.430453649918682e+00 3.434338663947280e+00 3.438223768687789e+00 + 3.442108964025496e+00 3.445994249845889e+00 3.449879626034712e+00 3.453765092477914e+00 3.457650649061649e+00 + 3.461536295672301e+00 3.465422032196477e+00 3.469307858520995e+00 3.473193774532890e+00 3.477079780119415e+00 + 3.480965875168029e+00 3.484852059566419e+00 3.488738333202488e+00 3.492624695964341e+00 3.496511147740293e+00 + 3.500397688418888e+00 3.504284317888859e+00 3.508171036039178e+00 3.512057842759014e+00 3.515944737937729e+00 + 3.519831721464933e+00 3.523718793230405e+00 3.527605953124155e+00 3.531493201036399e+00 3.535380536857553e+00 + 3.539267960478252e+00 3.543155471789302e+00 3.547043070681772e+00 3.550930757046888e+00 3.554818530776093e+00 + 3.558706391761053e+00 3.562594339893608e+00 3.566482375065814e+00 3.570370497169926e+00 3.574258706098419e+00 + 3.578147001743945e+00 3.582035383999357e+00 3.585923852757734e+00 3.589812407912312e+00 3.593701049356562e+00 + 3.597589776984145e+00 3.601478590688908e+00 3.605367490364899e+00 3.609256475906370e+00 3.613145547207766e+00 + 3.617034704163729e+00 3.620923946669089e+00 3.624813274618877e+00 3.628702687908314e+00 3.632592186432809e+00 + 3.636481770087979e+00 3.640371438769635e+00 3.644261192373752e+00 3.648151030796515e+00 3.652040953934309e+00 + 3.655930961683694e+00 3.659821053941432e+00 3.663711230604457e+00 3.667601491569907e+00 3.671491836735101e+00 + 3.675382265997548e+00 3.679272779254951e+00 3.683163376405176e+00 3.687054057346316e+00 3.690944821976607e+00 + 3.694835670194492e+00 3.698726601898611e+00 3.702617616987750e+00 3.706508715360910e+00 3.710399896917270e+00 + 3.714291161556196e+00 3.718182509177221e+00 3.722073939680066e+00 3.725965452964635e+00 3.729857048931016e+00 + 3.733748727479471e+00 3.737640488510456e+00 3.741532331924585e+00 3.745424257622661e+00 3.749316265505680e+00 + 3.753208355474780e+00 3.757100527431315e+00 3.760992781276802e+00 3.764885116912924e+00 3.768777534241552e+00 + 3.772670033164732e+00 3.776562613584673e+00 3.780455275403772e+00 3.784348018524601e+00 3.788240842849901e+00 + 3.792133748282588e+00 3.796026734725749e+00 3.799919802082638e+00 3.803812950256703e+00 3.807706179151531e+00 + 3.811599488670903e+00 3.815492878718772e+00 3.819386349199244e+00 3.823279900016608e+00 3.827173531075329e+00 + 3.831067242280022e+00 3.834961033535479e+00 3.838854904746666e+00 3.842748855818712e+00 3.846642886656917e+00 + 3.850536997166732e+00 3.854431187253799e+00 3.858325456823914e+00 3.862219805783029e+00 3.866114234037267e+00 + 3.870008741492930e+00 3.873903328056468e+00 3.877797993634503e+00 3.881692738133819e+00 3.885587561461354e+00 + 3.889482463524214e+00 3.893377444229677e+00 3.897272503485176e+00 3.901167641198303e+00 3.905062857276809e+00 + 3.908958151628612e+00 3.912853524161789e+00 3.916748974784573e+00 3.920644503405356e+00 3.924540109932688e+00 + 3.928435794275292e+00 3.932331556342037e+00 3.936227396041937e+00 3.940123313284186e+00 3.944019307978133e+00 + 3.947915380033268e+00 3.951811529359243e+00 3.955707755865875e+00 3.959604059463127e+00 3.963500440061118e+00 + 3.967396897570128e+00 3.971293431900595e+00 3.975190042963091e+00 3.979086730668355e+00 3.982983494927284e+00 + 3.986880335650903e+00 3.990777252750427e+00 3.994674246137198e+00 3.998571315722721e+00 4.002468461418634e+00 + 4.006365683136734e+00 4.010262980788989e+00 4.014160354287492e+00 4.018057803544500e+00 4.021955328472413e+00 + 4.025852928983772e+00 4.029750604991282e+00 4.033648356407791e+00 4.037546183146281e+00 4.041444085119914e+00 + 4.045342062241969e+00 4.049240114425880e+00 4.053138241585236e+00 4.057036443633754e+00 4.060934720485319e+00 + 4.064833072053951e+00 4.068731498253815e+00 4.072629998999217e+00 4.076528574204604e+00 4.080427223784582e+00 + 4.084325947653895e+00 4.088224745727431e+00 4.092123617920205e+00 4.096022564147386e+00 4.099921584324299e+00 + 4.103820678366392e+00 4.107719846189272e+00 4.111619087708659e+00 4.115518402840437e+00 4.119417791500630e+00 + 4.123317253605394e+00 4.127216789071021e+00 4.131116397813960e+00 4.135016079750782e+00 4.138915834798201e+00 + 4.142815662873077e+00 4.146715563892406e+00 4.150615537773317e+00 4.154515584433065e+00 4.158415703789073e+00 + 4.162315895758883e+00 4.166216160260166e+00 4.170116497210739e+00 4.174016906528549e+00 4.177917388131700e+00 + 4.181817941938395e+00 4.185718567866993e+00 4.189619265836000e+00 4.193520035764035e+00 4.197420877569849e+00 + 4.201321791172351e+00 4.205222776490553e+00 4.209123833443624e+00 4.213024961950862e+00 4.216926161931687e+00 + 4.220827433305650e+00 4.224728775992443e+00 4.228630189911899e+00 4.232531674983950e+00 4.236433231128689e+00 + 4.240334858266338e+00 4.244236556317230e+00 4.248138325201841e+00 4.252040164840775e+00 4.255942075154763e+00 + 4.259844056064670e+00 4.263746107491480e+00 4.267648229356314e+00 4.271550421580432e+00 4.275452684085195e+00 + 4.279355016792104e+00 4.283257419622798e+00 4.287159892499030e+00 4.291062435342680e+00 4.294965048075763e+00 + 4.298867730620414e+00 4.302770482898887e+00 4.306673304833581e+00 4.310576196347009e+00 4.314479157361798e+00 + 4.318382187800719e+00 4.322285287586650e+00 4.326188456642602e+00 4.330091694891720e+00 4.333995002257261e+00 + 4.337898378662596e+00 4.341801824031233e+00 4.345705338286800e+00 4.349608921353045e+00 4.353512573153845e+00 + 4.357416293613188e+00 4.361320082655183e+00 4.365223940204074e+00 4.369127866184225e+00 4.373031860520095e+00 + 4.376935923136287e+00 4.380840053957526e+00 4.384744252908652e+00 4.388648519914627e+00 4.392552854900507e+00 + 4.396457257791507e+00 4.400361728512938e+00 4.404266266990228e+00 4.408170873148935e+00 4.412075546914733e+00 + 4.415980288213393e+00 4.419885096970840e+00 4.423789973113086e+00 4.427694916566270e+00 4.431599927256657e+00 + 4.435505005110602e+00 4.439410150054613e+00 4.443315362015288e+00 4.447220640919339e+00 4.451125986693611e+00 + 4.455031399265058e+00 4.458936878560739e+00 4.462842424507838e+00 4.466748037033640e+00 4.470653716065564e+00 + 4.474559461531138e+00 4.478465273357989e+00 4.482371151473866e+00 4.486277095806632e+00 4.490183106284270e+00 + 4.494089182834870e+00 4.497995325386625e+00 4.501901533867844e+00 4.505807808206965e+00 4.509714148332520e+00 + 4.513620554173148e+00 4.517527025657617e+00 4.521433562714797e+00 4.525340165273663e+00 4.529246833263311e+00 + 4.533153566612947e+00 4.537060365251863e+00 4.540967229109491e+00 4.544874158115369e+00 4.548781152199127e+00 + 4.552688211290517e+00 4.556595335319395e+00 4.560502524215726e+00 4.564409777909585e+00 4.568317096331151e+00 + 4.572224479410710e+00 4.576131927078670e+00 4.580039439265522e+00 4.583947015901896e+00 4.587854656918493e+00 + 4.591762362246146e+00 4.595670131815790e+00 4.599577965558446e+00 4.603485863405274e+00 4.607393825287514e+00 + 4.611301851136528e+00 4.615209940883774e+00 4.619118094460810e+00 4.623026311799314e+00 4.626934592831057e+00 + 4.630842937487914e+00 4.634751345701876e+00 4.638659817405020e+00 4.642568352529532e+00 4.646476951007724e+00 + 4.650385612771989e+00 4.654294337754813e+00 4.658203125888803e+00 4.662111977106663e+00 4.666020891341213e+00 + 4.669929868525360e+00 4.673838908592097e+00 4.677748011474558e+00 4.681657177105950e+00 4.685566405419582e+00 + 4.689475696348879e+00 4.693385049827360e+00 4.697294465788649e+00 4.701203944166440e+00 4.705113484894579e+00 + 4.709023087906980e+00 4.712932753137645e+00 4.716842480520704e+00 4.720752269990381e+00 4.724662121480987e+00 + 4.728572034926930e+00 4.732482010262732e+00 4.736392047423006e+00 4.740302146342463e+00 4.744212306955919e+00 + 4.748122529198262e+00 4.752032813004509e+00 4.755943158309769e+00 4.759853565049232e+00 4.763764033158194e+00 + 4.767674562572055e+00 4.771585153226303e+00 4.775495805056527e+00 4.779406517998403e+00 4.783317291987707e+00 + 4.787228126960327e+00 4.791139022852228e+00 4.795049979599470e+00 4.798960997138212e+00 4.802872075404728e+00 + 4.806783214335366e+00 4.810694413866552e+00 4.814605673934833e+00 4.818516994476862e+00 4.822428375429350e+00 + 4.826339816729119e+00 4.830251318313096e+00 4.834162880118287e+00 4.838074502081788e+00 4.841986184140806e+00 + 4.845897926232623e+00 4.849809728294617e+00 4.853721590264272e+00 4.857633512079154e+00 4.861545493676913e+00 + 4.865457534995310e+00 4.869369635972181e+00 4.873281796545461e+00 4.877194016653170e+00 4.881106296233433e+00 + 4.885018635224464e+00 4.888931033564545e+00 4.892843491192083e+00 4.896756008045549e+00 4.900668584063503e+00 + 4.904581219184616e+00 4.908493913347652e+00 4.912406666491426e+00 4.916319478554875e+00 4.920232349477025e+00 + 4.924145279196985e+00 4.928058267653942e+00 4.931971314787186e+00 4.935884420536087e+00 4.939797584840124e+00 + 4.943710807638835e+00 4.947624088871856e+00 4.951537428478923e+00 4.955450826399852e+00 4.959364282574548e+00 + 4.963277796942979e+00 4.967191369445247e+00 4.971105000021513e+00 4.975018688612018e+00 4.978932435157112e+00 + 4.982846239597206e+00 4.986760101872820e+00 4.990674021924551e+00 4.994587999693081e+00 4.998502035119179e+00 + 5.002416128143695e+00 5.006330278707575e+00 5.010244486751836e+00 5.014158752217599e+00 5.018073075046062e+00 + 5.021987455178499e+00 5.025901892556272e+00 5.029816387120825e+00 5.033730938813709e+00 5.037645547576535e+00 + 5.041560213351000e+00 5.045474936078894e+00 5.049389715702087e+00 5.053304552162531e+00 5.057219445402261e+00 + 5.061134395363388e+00 5.065049401988131e+00 5.068964465218773e+00 5.072879584997671e+00 5.076794761267281e+00 + 5.080709993970135e+00 5.084625283048848e+00 5.088540628446118e+00 5.092456030104727e+00 5.096371487967532e+00 + 5.100287001977467e+00 5.104202572077567e+00 5.108118198210930e+00 5.112033880320745e+00 5.115949618350281e+00 + 5.119865412242876e+00 5.123781261941962e+00 5.127697167391047e+00 5.131613128533725e+00 5.135529145313658e+00 + 5.139445217674589e+00 5.143361345560363e+00 5.147277528914878e+00 5.151193767682111e+00 5.155110061806146e+00 + 5.159026411231123e+00 5.162942815901261e+00 5.166859275760874e+00 5.170775790754339e+00 5.174692360826114e+00 + 5.178608985920737e+00 5.182525665982828e+00 5.186442400957093e+00 5.190359190788300e+00 5.194276035421282e+00 + 5.198192934800989e+00 5.202109888872426e+00 5.206026897580672e+00 5.209943960870889e+00 5.213861078688311e+00 + 5.217778250978260e+00 5.221695477686122e+00 5.225612758757373e+00 5.229530094137553e+00 5.233447483772281e+00 + 5.237364927607260e+00 5.241282425588252e+00 5.245199977661116e+00 5.249117583771781e+00 5.253035243866246e+00 + 5.256952957890576e+00 5.260870725790926e+00 5.264788547513535e+00 5.268706423004683e+00 5.272624352210764e+00 + 5.276542335078230e+00 5.280460371553595e+00 5.284378461583461e+00 5.288296605114506e+00 5.292214802093479e+00 + 5.296133052467205e+00 5.300051356182580e+00 5.303969713186566e+00 5.307888123426207e+00 5.311806586848630e+00 + 5.315725103401025e+00 5.319643673030646e+00 5.323562295684837e+00 5.327480971311006e+00 5.331399699856629e+00 + 5.335318481269277e+00 5.339237315496557e+00 5.343156202486188e+00 5.347075142185935e+00 5.350994134543632e+00 + 5.354913179507208e+00 5.358832277024653e+00 5.362751427044014e+00 5.366670629513426e+00 5.370589884381094e+00 + 5.374509191595290e+00 5.378428551104363e+00 5.382347962856725e+00 5.386267426800867e+00 5.390186942885344e+00 + 5.394106511058783e+00 5.398026131269886e+00 5.401945803467421e+00 5.405865527600220e+00 5.409785303617207e+00 + 5.413705131467342e+00 5.417625011099695e+00 5.421544942463374e+00 5.425464925507555e+00 5.429384960181517e+00 + 5.433305046434582e+00 5.437225184216137e+00 5.441145373475650e+00 5.445065614162660e+00 5.448985906226772e+00 + 5.452906249617661e+00 5.456826644285054e+00 5.460747090178762e+00 5.464667587248663e+00 5.468588135444709e+00 + 5.472508734716910e+00 5.476429385015343e+00 5.480350086290163e+00 5.484270838491581e+00 5.488191641569884e+00 + 5.492112495475418e+00 5.496033400158610e+00 5.499954355569950e+00 5.503875361659968e+00 5.507796418379304e+00 + 5.511717525678641e+00 5.515638683508733e+00 5.519559891820397e+00 5.523481150564511e+00 5.527402459692045e+00 + 5.531323819154003e+00 5.535245228901478e+00 5.539166688885620e+00 5.543088199057640e+00 5.547009759368822e+00 + 5.550931369770526e+00 5.554853030214157e+00 5.558774740651182e+00 5.562696501033155e+00 5.566618311311688e+00 + 5.570540171438450e+00 5.574462081365184e+00 5.578384041043692e+00 5.582306050425843e+00 5.586228109463566e+00 + 5.590150218108859e+00 5.594072376313789e+00 5.597994584030478e+00 5.601916841211109e+00 5.605839147807951e+00 + 5.609761503773312e+00 5.613683909059564e+00 5.617606363619169e+00 5.621528867404630e+00 5.625451420368507e+00 + 5.629374022463446e+00 5.633296673642148e+00 5.637219373857373e+00 5.641142123061935e+00 5.645064921208726e+00 + 5.648987768250699e+00 5.652910664140864e+00 5.656833608832292e+00 5.660756602278123e+00 5.664679644431557e+00 + 5.668602735245848e+00 5.672525874674330e+00 5.676449062670387e+00 5.680372299187456e+00 5.684295584179051e+00 + 5.688218917598742e+00 5.692142299400166e+00 5.696065729537008e+00 5.699989207963028e+00 5.703912734632039e+00 + 5.707836309497911e+00 5.711759932514585e+00 5.715683603636069e+00 5.719607322816414e+00 5.723531090009735e+00 + 5.727454905170222e+00 5.731378768252110e+00 5.735302679209690e+00 5.739226637997344e+00 5.743150644569472e+00 + 5.747074698880565e+00 5.750998800885166e+00 5.754922950537861e+00 5.758847147793322e+00 5.762771392606274e+00 + 5.766695684931488e+00 5.770620024723804e+00 5.774544411938114e+00 5.778468846529377e+00 5.782393328452615e+00 + 5.786317857662901e+00 5.790242434115354e+00 5.794167057765184e+00 5.798091728567639e+00 5.802016446478020e+00 + 5.805941211451693e+00 5.809866023444093e+00 5.813790882410697e+00 5.817715788307055e+00 5.821640741088761e+00 + 5.825565740711476e+00 5.829490787130914e+00 5.833415880302844e+00 5.837341020183102e+00 5.841266206727576e+00 + 5.845191439892216e+00 5.849116719633019e+00 5.853042045906038e+00 5.856967418667407e+00 5.860892837873299e+00 + 5.864818303479931e+00 5.868743815443598e+00 5.872669373720643e+00 5.876594978267471e+00 5.880520629040545e+00 + 5.884446325996370e+00 5.888372069091520e+00 5.892297858282618e+00 5.896223693526352e+00 5.900149574779458e+00 + 5.904075501998732e+00 5.908001475141026e+00 5.911927494163236e+00 5.915853559022340e+00 5.919779669675345e+00 + 5.923705826079318e+00 5.927632028191405e+00 5.931558275968772e+00 5.935484569368667e+00 5.939410908348387e+00 + 5.943337292865270e+00 5.947263722876723e+00 5.951190198340217e+00 5.955116719213237e+00 5.959043285453376e+00 + 5.962969897018244e+00 5.966896553865521e+00 5.970823255952941e+00 5.974750003238276e+00 5.978676795679381e+00 + 5.982603633234132e+00 5.986530515860487e+00 5.990457443516443e+00 5.994384416160051e+00 5.998311433749435e+00 + 6.002238496242732e+00 6.006165603598179e+00 6.010092755774037e+00 6.014019952728622e+00 6.017947194420314e+00 + 6.021874480807541e+00 6.025801811848792e+00 6.029729187502582e+00 6.033656607727504e+00 6.037584072482205e+00 + 6.041511581725372e+00 6.045439135415756e+00 6.049366733512157e+00 6.053294375973407e+00 6.057222062758417e+00 + 6.061149793826147e+00 6.065077569135598e+00 6.069005388645831e+00 6.072933252315947e+00 6.076861160105123e+00 + 6.080789111972567e+00 6.084717107877537e+00 6.088645147779356e+00 6.092573231637400e+00 6.096501359411073e+00 + 6.100429531059860e+00 6.104357746543279e+00 6.108286005820902e+00 6.112214308852358e+00 6.116142655597328e+00 + 6.120071046015527e+00 6.123999480066726e+00 6.127927957710776e+00 6.131856478907547e+00 6.135785043616966e+00 + 6.139713651799017e+00 6.143642303413714e+00 6.147570998421169e+00 6.151499736781492e+00 6.155428518454863e+00 + 6.159357343401520e+00 6.163286211581745e+00 6.167215122955865e+00 6.171144077484265e+00 6.175073075127373e+00 + 6.179002115845662e+00 6.182931199599676e+00 6.186860326349998e+00 6.190789496057242e+00 6.194718708682085e+00 + 6.198647964185269e+00 6.202577262527563e+00 6.206506603669784e+00 6.210435987572825e+00 6.214365414197607e+00 + 6.218294883505083e+00 6.222224395456291e+00 6.226153950012299e+00 6.230083547134218e+00 6.234013186783224e+00 + 6.237942868920530e+00 6.241872593507395e+00 6.245802360505133e+00 6.249732169875108e+00 6.253662021578736e+00 + 6.257591915577457e+00 6.261521851832772e+00 6.265451830306250e+00 6.269381850959493e+00 6.273311913754136e+00 + 6.277242018651873e+00 6.281172165614456e+00 6.285102354603675e+00 6.289032585581362e+00 6.292962858509402e+00 + 6.296893173349732e+00 6.300823530064331e+00 6.304753928615227e+00 6.308684368964485e+00 6.312614851074240e+00 + 6.316545374906649e+00 6.320475940423933e+00 6.324406547588343e+00 6.328337196362189e+00 6.332267886707841e+00 + 6.336198618587682e+00 6.340129391964171e+00 6.344060206799793e+00 6.347991063057087e+00 6.351921960698646e+00 + 6.355852899687100e+00 6.359783879985132e+00 6.363714901555444e+00 6.367645964360829e+00 6.371577068364101e+00 + 6.375508213528107e+00 6.379439399815769e+00 6.383370627190037e+00 6.387301895613901e+00 6.391233205050414e+00 + 6.395164555462665e+00 6.399095946813782e+00 6.403027379066943e+00 6.406958852185380e+00 6.410890366132364e+00 + 6.414821920871201e+00 6.418753516365252e+00 6.422685152577927e+00 6.426616829472681e+00 6.430548547012995e+00 + 6.434480305162416e+00 6.438412103884530e+00 6.442343943142954e+00 6.446275822901362e+00 6.450207743123482e+00 + 6.454139703773065e+00 6.458071704813928e+00 6.462003746209899e+00 6.465935827924884e+00 6.469867949922830e+00 + 6.473800112167705e+00 6.477732314623537e+00 6.481664557254395e+00 6.485596840024389e+00 6.489529162897681e+00 + 6.493461525838472e+00 6.497393928811004e+00 6.501326371779557e+00 6.505258854708466e+00 6.509191377562104e+00 + 6.513123940304890e+00 6.517056542901281e+00 6.520989185315786e+00 6.524921867512954e+00 6.528854589457358e+00 + 6.532787351113637e+00 6.536720152446469e+00 6.540652993420571e+00 6.544585874000699e+00 6.548518794151661e+00 + 6.552451753838305e+00 6.556384753025508e+00 6.560317791678210e+00 6.564250869761382e+00 6.568183987240030e+00 + 6.572117144079228e+00 6.576050340244061e+00 6.579983575699681e+00 6.583916850411267e+00 6.587850164344033e+00 + 6.591783517463260e+00 6.595716909734260e+00 6.599650341122366e+00 6.603583811592983e+00 6.607517321111550e+00 + 6.611450869643538e+00 6.615384457154459e+00 6.619318083609882e+00 6.623251748975390e+00 6.627185453216641e+00 + 6.631119196299318e+00 6.635052978189128e+00 6.638986798851843e+00 6.642920658253285e+00 6.646854556359279e+00 + 6.650788493135720e+00 6.654722468548537e+00 6.658656482563696e+00 6.662590535147219e+00 6.666524626265158e+00 + 6.670458755883578e+00 6.674392923968630e+00 6.678327130486488e+00 6.682261375403362e+00 6.686195658685502e+00 + 6.690129980299200e+00 6.694064340210804e+00 6.697998738386664e+00 6.701933174793202e+00 6.705867649396889e+00 + 6.709802162164207e+00 6.713736713061675e+00 6.717671302055887e+00 6.721605929113451e+00 6.725540594201011e+00 + 6.729475297285267e+00 6.733410038332955e+00 6.737344817310841e+00 6.741279634185729e+00 6.745214488924485e+00 + 6.749149381493993e+00 6.753084311861183e+00 6.757019279993020e+00 6.760954285856514e+00 6.764889329418707e+00 + 6.768824410646693e+00 6.772759529507592e+00 6.776694685968563e+00 6.780629879996820e+00 6.784565111559600e+00 + 6.788500380624176e+00 6.792435687157864e+00 6.796371031128033e+00 6.800306412502081e+00 6.804241831247434e+00 + 6.808177287331562e+00 6.812112780721996e+00 6.816048311386260e+00 6.819983879291952e+00 6.823919484406702e+00 + 6.827855126698172e+00 6.831790806134070e+00 6.835726522682127e+00 6.839662276310116e+00 6.843598066985860e+00 + 6.847533894677223e+00 6.851469759352090e+00 6.855405660978378e+00 6.859341599524073e+00 6.863277574957172e+00 + 6.867213587245726e+00 6.871149636357796e+00 6.875085722261508e+00 6.879021844925032e+00 6.882958004316539e+00 + 6.886894200404269e+00 6.890830433156481e+00 6.894766702541489e+00 6.898703008527638e+00 6.902639351083285e+00 + 6.906575730176863e+00 6.910512145776821e+00 6.914448597851643e+00 6.918385086369851e+00 6.922321611300020e+00 + 6.926258172610748e+00 6.930194770270661e+00 6.934131404248438e+00 6.938068074512785e+00 6.942004781032449e+00 + 6.945941523776210e+00 6.949878302712889e+00 6.953815117811351e+00 6.957751969040458e+00 6.961688856369166e+00 + 6.965625779766430e+00 6.969562739201248e+00 6.973499734642654e+00 6.977436766059707e+00 6.981373833421536e+00 + 6.985310936697287e+00 6.989248075856122e+00 6.993185250867258e+00 6.997122461699955e+00 7.001059708323488e+00 + 7.004996990707195e+00 7.008934308820419e+00 7.012871662632560e+00 7.016809052113049e+00 7.020746477231343e+00 + 7.024683937956949e+00 7.028621434259388e+00 7.032558966108247e+00 7.036496533473125e+00 7.040434136323654e+00 + 7.044371774629517e+00 7.048309448360422e+00 7.052247157486122e+00 7.056184901976394e+00 7.060122681801048e+00 + 7.064060496929938e+00 7.067998347332947e+00 7.071936232979996e+00 7.075874153841030e+00 7.079812109886049e+00 + 7.083750101085078e+00 7.087688127408173e+00 7.091626188825422e+00 7.095564285306954e+00 7.099502416822924e+00 + 7.103440583343542e+00 7.107378784839032e+00 7.111317021279651e+00 7.115255292635697e+00 7.119193598877512e+00 + 7.123131939975464e+00 7.127070315899942e+00 7.131008726621381e+00 7.134947172110254e+00 7.138885652337065e+00 + 7.142824167272352e+00 7.146762716886672e+00 7.150701301150646e+00 7.154639920034903e+00 7.158578573510104e+00 + 7.162517261546958e+00 7.166455984116213e+00 7.170394741188641e+00 7.174333532735027e+00 7.178272358726226e+00 + 7.182211219133108e+00 7.186150113926570e+00 7.190089043077551e+00 7.194028006557031e+00 7.197967004335998e+00 + 7.201906036385506e+00 7.205845102676621e+00 7.209784203180433e+00 7.213723337868090e+00 7.217662506710752e+00 + 7.221601709679642e+00 7.225540946745974e+00 7.229480217881020e+00 7.233419523056086e+00 7.237358862242496e+00 + 7.241298235411615e+00 7.245237642534841e+00 7.249177083583614e+00 7.253116558529394e+00 7.257056067343663e+00 + 7.260995609997962e+00 7.264935186463842e+00 7.268874796712897e+00 7.272814440716760e+00 7.276754118447077e+00 + 7.280693829875533e+00 7.284633574973859e+00 7.288573353713804e+00 7.292513166067145e+00 7.296453012005713e+00 + 7.300392891501342e+00 7.304332804525915e+00 7.308272751051359e+00 7.312212731049586e+00 7.316152744492599e+00 + 7.320092791352399e+00 7.324032871601018e+00 7.327972985210530e+00 7.331913132153037e+00 7.335853312400668e+00 + 7.339793525925593e+00 7.343733772699999e+00 7.347674052696118e+00 7.351614365886214e+00 7.355554712242567e+00 + 7.359495091737507e+00 7.363435504343380e+00 7.367375950032575e+00 7.371316428777495e+00 7.375256940550589e+00 + 7.379197485324344e+00 7.383138063071249e+00 7.387078673763860e+00 7.391019317374728e+00 7.394959993876464e+00 + 7.398900703241702e+00 7.402841445443087e+00 7.406782220453321e+00 7.410723028245119e+00 7.414663868791250e+00 + 7.418604742064480e+00 7.422545648037628e+00 7.426486586683548e+00 7.430427557975103e+00 7.434368561885189e+00 + 7.438309598386767e+00 7.442250667452785e+00 7.446191769056233e+00 7.450132903170147e+00 7.454074069767579e+00 + 7.458015268821621e+00 7.461956500305385e+00 7.465897764192020e+00 7.469839060454693e+00 7.473780389066612e+00 + 7.477721750001026e+00 7.481663143231182e+00 7.485604568730383e+00 7.489546026471958e+00 7.493487516429258e+00 + 7.497429038575670e+00 7.501370592884602e+00 7.505312179329509e+00 7.509253797883850e+00 7.513195448521138e+00 + 7.517137131214899e+00 7.521078845938686e+00 7.525020592666116e+00 7.528962371370785e+00 7.532904182026352e+00 + 7.536846024606491e+00 7.540787899084914e+00 7.544729805435362e+00 7.548671743631582e+00 7.552613713647395e+00 + 7.556555715456611e+00 7.560497749033079e+00 7.564439814350693e+00 7.568381911383356e+00 7.572324040105001e+00 + 7.576266200489612e+00 7.580208392511180e+00 7.584150616143734e+00 7.588092871361319e+00 7.592035158138017e+00 + 7.595977476447958e+00 7.599919826265271e+00 7.603862207564132e+00 7.607804620318729e+00 7.611747064503290e+00 + 7.615689540092074e+00 7.619632047059358e+00 7.623574585379452e+00 7.627517155026707e+00 7.631459755975482e+00 + 7.635402388200179e+00 7.639345051675221e+00 7.643287746375046e+00 7.647230472274143e+00 7.651173229347036e+00 + 7.655116017568241e+00 7.659058836912326e+00 7.663001687353896e+00 7.666944568867566e+00 7.670887481427973e+00 + 7.674830425009804e+00 7.678773399587753e+00 7.682716405136556e+00 7.686659441630979e+00 7.690602509045798e+00 + 7.694545607355840e+00 7.698488736535943e+00 7.702431896560968e+00 7.706375087405814e+00 7.710318309045409e+00 + 7.714261561454699e+00 7.718204844608677e+00 7.722148158482338e+00 7.726091503050719e+00 7.730034878288886e+00 + 7.733978284171926e+00 7.737921720674944e+00 7.741865187773094e+00 7.745808685441546e+00 7.749752213655484e+00 + 7.753695772390144e+00 7.757639361620781e+00 7.761582981322659e+00 7.765526631471095e+00 7.769470312041419e+00 + 7.773414023008983e+00 7.777357764349174e+00 7.781301536037411e+00 7.785245338049130e+00 7.789189170359795e+00 + 7.793133032944893e+00 7.797076925779955e+00 7.801020848840526e+00 7.804964802102174e+00 7.808908785540495e+00 + 7.812852799131112e+00 7.816796842849679e+00 7.820740916671883e+00 7.824685020573422e+00 7.828629154530024e+00 + 7.832573318517450e+00 7.836517512511481e+00 7.840461736487932e+00 7.844405990422626e+00 7.848350274291438e+00 + 7.852294588070255e+00 7.856238931734984e+00 7.860183305261573e+00 7.864127708625979e+00 7.868072141804203e+00 + 7.872016604772266e+00 7.875961097506200e+00 7.879905619982076e+00 7.883850172175999e+00 7.887794754064088e+00 + 7.891739365622486e+00 7.895684006827366e+00 7.899628677654928e+00 7.903573378081402e+00 7.907518108083036e+00 + 7.911462867636102e+00 7.915407656716901e+00 7.919352475301766e+00 7.923297323367039e+00 7.927242200889101e+00 + 7.931187107844353e+00 7.935132044209239e+00 7.939077009960200e+00 7.943022005073713e+00 7.946967029526285e+00 + 7.950912083294444e+00 7.954857166354743e+00 7.958802278683779e+00 7.962747420258130e+00 7.966692591054445e+00 + 7.970637791049374e+00 7.974583020219595e+00 7.978528278541820e+00 7.982473565992767e+00 7.986418882549202e+00 + 7.990364228187905e+00 7.994309602885677e+00 7.998255006619347e+00 8.002200439365769e+00 8.006145901101817e+00 + 8.010091391804414e+00 8.014036911450473e+00 8.017982460016944e+00 8.021928037480818e+00 8.025873643819086e+00 + 8.029819279008782e+00 8.033764943026958e+00 8.037710635850686e+00 8.041656357457072e+00 8.045602107823234e+00 + 8.049547886926318e+00 8.053493694743510e+00 8.057439531252003e+00 8.061385396429017e+00 8.065331290251798e+00 + 8.069277212697617e+00 8.073223163743767e+00 8.077169143367579e+00 8.081115151546383e+00 8.085061188257558e+00 + 8.089007253478485e+00 8.092953347186583e+00 8.096899469359290e+00 8.100845619974066e+00 8.104791799008410e+00 + 8.108738006439820e+00 8.112684242245839e+00 8.116630506404029e+00 8.120576798891953e+00 8.124523119687245e+00 + 8.128469468767518e+00 8.132415846110435e+00 8.136362251693665e+00 8.140308685494910e+00 8.144255147491897e+00 + 8.148201637662380e+00 8.152148155984117e+00 8.156094702434922e+00 8.160041276992603e+00 8.163987879634995e+00 + 8.167934510339974e+00 8.171881169085422e+00 8.175827855849271e+00 8.179774570609441e+00 8.183721313343879e+00 + 8.187668084030586e+00 8.191614882647572e+00 8.195561709172846e+00 8.199508563584475e+00 8.203455445860529e+00 + 8.207402355979104e+00 8.211349293918321e+00 8.215296259656325e+00 8.219243253171292e+00 8.223190274441404e+00 + 8.227137323444873e+00 8.231084400159938e+00 8.235031504564860e+00 8.238978636637917e+00 8.242925796357413e+00 + 8.246872983701680e+00 8.250820198649068e+00 8.254767441177954e+00 8.258714711266720e+00 8.262662008893784e+00 + 8.266609334037611e+00 8.270556686676635e+00 8.274504066789358e+00 8.278451474354295e+00 8.282398909349968e+00 + 8.286346371754933e+00 8.290293861547758e+00 8.294241378707056e+00 8.298188923211439e+00 8.302136495039546e+00 + 8.306084094170053e+00 8.310031720581641e+00 8.313979374253032e+00 8.317927055162944e+00 8.321874763290140e+00 + 8.325822498613396e+00 8.329770261111511e+00 8.333718050763297e+00 8.337665867547615e+00 8.341613711443319e+00 + 8.345561582429301e+00 8.349509480484476e+00 8.353457405587761e+00 8.357405357718111e+00 8.361353336854512e+00 + 8.365301342975959e+00 8.369249376061466e+00 8.373197436090088e+00 8.377145523040872e+00 8.381093636892894e+00 + 8.385041777625290e+00 8.388989945217165e+00 8.392938139647681e+00 8.396886360896003e+00 8.400834608941331e+00 + 8.404782883762870e+00 8.408731185339862e+00 8.412679513651563e+00 8.416627868677262e+00 8.420576250396248e+00 + 8.424524658787846e+00 8.428473093831403e+00 8.432421555506286e+00 8.436370043791873e+00 8.440318558667581e+00 + 8.444267100112835e+00 8.448215668107082e+00 8.452164262629802e+00 8.456112883660488e+00 8.460061531178642e+00 + 8.464010205163815e+00 8.467958905595557e+00 8.471907632453449e+00 8.475856385717085e+00 8.479805165366082e+00 + 8.483753971380104e+00 8.487702803738784e+00 8.491651662421813e+00 8.495600547408909e+00 8.499549458679786e+00 + 8.503498396214182e+00 8.507447359991884e+00 8.511396349992669e+00 8.515345366196343e+00 8.519294408582736e+00 + 8.523243477131702e+00 8.527192571823106e+00 8.531141692636846e+00 8.535090839552836e+00 8.539040012551006e+00 + 8.542989211611307e+00 8.546938436713715e+00 8.550887687838220e+00 8.554836964964855e+00 8.558786268073638e+00 + 8.562735597144622e+00 8.566684952157900e+00 8.570634333093563e+00 8.574583739931727e+00 8.578533172652534e+00 + 8.582482631236132e+00 8.586432115662710e+00 8.590381625912469e+00 8.594331161965624e+00 8.598280723802416e+00 + 8.602230311403101e+00 8.606179924747970e+00 8.610129563817308e+00 8.614079228591445e+00 8.618028919050730e+00 + 8.621978635175504e+00 8.625928376946163e+00 8.629878144343103e+00 8.633827937346743e+00 8.637777755937529e+00 + 8.641727600095916e+00 8.645677469802399e+00 8.649627365037459e+00 8.653577285781630e+00 8.657527232015454e+00 + 8.661477203719476e+00 8.665427200874291e+00 8.669377223460504e+00 8.673327271458728e+00 8.677277344849587e+00 + 8.681227443613757e+00 8.685177567731921e+00 8.689127717184771e+00 8.693077891953029e+00 8.697028092017424e+00 + 8.700978317358722e+00 8.704928567957696e+00 8.708878843795150e+00 8.712829144851895e+00 8.716779471108758e+00 + 8.720729822546611e+00 8.724680199146320e+00 8.728630600888787e+00 8.732581027754909e+00 8.736531479725622e+00 + 8.740481956781895e+00 8.744432458904697e+00 8.748382986074997e+00 8.752333538273827e+00 8.756284115482217e+00 + 8.760234717681200e+00 8.764185344851851e+00 8.768135996975253e+00 8.772086674032519e+00 8.776037376004782e+00 + 8.779988102873165e+00 8.783938854618841e+00 8.787889631223004e+00 8.791840432666843e+00 8.795791258931581e+00 + 8.799742109998453e+00 8.803692985848731e+00 8.807643886463683e+00 8.811594811824598e+00 8.815545761912805e+00 + 8.819496736709628e+00 8.823447736196423e+00 8.827398760354567e+00 8.831349809165451e+00 8.835300882610465e+00 + 8.839251980671060e+00 8.843203103328682e+00 8.847154250564778e+00 8.851105422360842e+00 8.855056618698383e+00 + 8.859007839558918e+00 8.862959084923983e+00 8.866910354775133e+00 8.870861649093953e+00 8.874812967862036e+00 + 8.878764311060996e+00 8.882715678672470e+00 8.886667070678101e+00 8.890618487059555e+00 8.894569927798539e+00 + 8.898521392876743e+00 8.902472882275891e+00 8.906424395977727e+00 8.910375933964017e+00 8.914327496216544e+00 + 8.918279082717106e+00 8.922230693447505e+00 8.926182328389581e+00 8.930133987525194e+00 8.934085670836204e+00 + 8.938037378304507e+00 8.941989109912015e+00 8.945940865640639e+00 8.949892645472326e+00 8.953844449389043e+00 + 8.957796277372763e+00 8.961748129405487e+00 8.965700005469230e+00 8.969651905546019e+00 8.973603829617915e+00 + 8.977555777666984e+00 8.981507749675307e+00 8.985459745624995e+00 8.989411765498163e+00 8.993363809276961e+00 + 8.997315876943548e+00 9.001267968480086e+00 9.005220083868767e+00 9.009172223091827e+00 9.013124386131484e+00 + 9.017076572969975e+00 9.021028783589566e+00 9.024981017972546e+00 9.028933276101220e+00 9.032885557957899e+00 + 9.036837863524912e+00 9.040790192784614e+00 9.044742545719387e+00 9.048694922311613e+00 9.052647322543685e+00 + 9.056599746398041e+00 9.060552193857109e+00 9.064504664903353e+00 9.068457159519253e+00 9.072409677687288e+00 + 9.076362219389965e+00 9.080314784609845e+00 9.084267373329443e+00 9.088219985531319e+00 9.092172621198060e+00 + 9.096125280312265e+00 9.100077962856547e+00 9.104030668813524e+00 9.107983398165862e+00 9.111936150896209e+00 + 9.115888926987253e+00 9.119841726421710e+00 9.123794549182279e+00 9.127747395251687e+00 9.131700264612697e+00 + 9.135653157248070e+00 9.139606073140598e+00 9.143559012273078e+00 9.147511974628335e+00 9.151464960189195e+00 + 9.155417968938506e+00 9.159371000859151e+00 9.163324055934019e+00 9.167277134146000e+00 9.171230235478017e+00 + 9.175183359913012e+00 9.179136507433931e+00 9.183089678023746e+00 9.187042871665453e+00 9.190996088342050e+00 + 9.194949328036554e+00 9.198902590732009e+00 9.202855876411469e+00 9.206809185057997e+00 9.210762516654686e+00 + 9.214715871184641e+00 9.218669248630977e+00 9.222622648976838e+00 9.226576072205372e+00 9.230529518299752e+00 + 9.234482987243164e+00 9.238436479018816e+00 9.242389993609926e+00 9.246343530999724e+00 9.250297091171465e+00 + 9.254250674108420e+00 9.258204279793881e+00 9.262157908211137e+00 9.266111559343512e+00 9.270065233174350e+00 + 9.274018929686974e+00 9.277972648864786e+00 9.281926390691151e+00 9.285880155149465e+00 9.289833942223158e+00 + 9.293787751895650e+00 9.297741584150398e+00 9.301695438970858e+00 9.305649316340519e+00 9.309603216242873e+00 + 9.313557138661427e+00 9.317511083579724e+00 9.321465050981292e+00 9.325419040849711e+00 9.329373053168547e+00 + 9.333327087921395e+00 9.337281145091870e+00 9.341235224663585e+00 9.345189326620188e+00 9.349143450945339e+00 + 9.353097597622712e+00 9.357051766635994e+00 9.361005957968880e+00 9.364960171605098e+00 9.368914407528390e+00 + 9.372868665722509e+00 9.376822946171211e+00 9.380777248858283e+00 9.384731573767526e+00 9.388685920882766e+00 + 9.392640290187822e+00 9.396594681666546e+00 9.400549095302797e+00 9.404503531080460e+00 9.408457988983429e+00 + 9.412412468995601e+00 9.416366971100908e+00 9.420321495283297e+00 9.424276041526713e+00 9.428230609815136e+00 + 9.432185200132551e+00 9.436139812462965e+00 9.440094446790390e+00 9.444049103098862e+00 9.448003781372424e+00 + 9.451958481595151e+00 9.455913203751125e+00 9.459867947824433e+00 9.463822713799196e+00 9.467777501659521e+00 + 9.471732311389564e+00 9.475687142973488e+00 9.479641996395451e+00 9.483596871639650e+00 9.487551768690283e+00 + 9.491506687531567e+00 9.495461628147741e+00 9.499416590523049e+00 9.503371574641758e+00 9.507326580488144e+00 + 9.511281608046493e+00 9.515236657301129e+00 9.519191728236381e+00 9.523146820836576e+00 9.527101935086067e+00 + 9.531057070969227e+00 9.535012228470441e+00 9.538967407574107e+00 9.542922608264641e+00 9.546877830526482e+00 + 9.550833074344064e+00 9.554788339701840e+00 9.558743626584297e+00 9.562698934975925e+00 9.566654264861223e+00 + 9.570609616224706e+00 9.574564989050916e+00 9.578520383324399e+00 9.582475799029718e+00 9.586431236151450e+00 + 9.590386694674194e+00 9.594342174582565e+00 9.598297675861172e+00 9.602253198494653e+00 9.606208742467665e+00 + 9.610164307764872e+00 9.614119894370967e+00 9.618075502270639e+00 9.622031131448587e+00 9.625986781889550e+00 + 9.629942453578275e+00 9.633898146499501e+00 9.637853860638002e+00 9.641809595978570e+00 9.645765352506004e+00 + 9.649721130205119e+00 9.653676929060724e+00 9.657632749057667e+00 9.661588590180823e+00 9.665544452415050e+00 + 9.669500335745237e+00 9.673456240156284e+00 9.677412165633088e+00 9.681368112160611e+00 9.685324079723769e+00 + 9.689280068307523e+00 9.693236077896859e+00 9.697192108476765e+00 9.701148160032226e+00 9.705104232548255e+00 + 9.709060326009890e+00 9.713016440402178e+00 9.716972575710177e+00 9.720928731918955e+00 9.724884909013587e+00 + 9.728841106979187e+00 9.732797325800869e+00 9.736753565463749e+00 9.740709825952983e+00 9.744666107253732e+00 + 9.748622409351144e+00 9.752578732230427e+00 9.756535075876767e+00 9.760491440275388e+00 9.764447825411512e+00 + 9.768404231270377e+00 9.772360657837234e+00 9.776317105097363e+00 9.780273573036045e+00 9.784230061638569e+00 + 9.788186570890247e+00 9.792143100776414e+00 9.796099651282411e+00 9.800056222393579e+00 9.804012814095282e+00 + 9.807969426372910e+00 9.811926059211855e+00 9.815882712597514e+00 9.819839386515332e+00 9.823796080950723e+00 + 9.827752795889150e+00 9.831709531316076e+00 9.835666287216968e+00 9.839623063577319e+00 9.843579860382640e+00 + 9.847536677618439e+00 9.851493515270260e+00 9.855450373323642e+00 9.859407251764143e+00 9.863364150577338e+00 + 9.867321069748803e+00 9.871278009264149e+00 9.875234969108993e+00 9.879191949268950e+00 9.883148949729671e+00 + 9.887105970476812e+00 9.891063011496023e+00 9.895020072773001e+00 9.898977154293434e+00 9.902934256043030e+00 + 9.906891378007515e+00 9.910848520172619e+00 9.914805682524083e+00 9.918762865047686e+00 9.922720067729196e+00 + 9.926677290554396e+00 9.930634533509092e+00 9.934591796579099e+00 9.938549079750242e+00 9.942506383008373e+00 + 9.946463706339326e+00 9.950421049728988e+00 9.954378413163242e+00 9.958335796627976e+00 9.962293200109091e+00 + 9.966250623592515e+00 9.970208067064183e+00 9.974165530510032e+00 9.978123013916065e+00 9.982080517268205e+00 + 9.986038040552405e+00 9.989995583754785e+00 9.993953146861317e+00 9.997910729857953e+00 1.000186833273077e+01 + 1.000582595546584e+01 1.000978359804920e+01 1.001374126046696e+01 1.001769894270521e+01 1.002165664475003e+01 + 1.002561436658758e+01 1.002957210820399e+01 1.003352986958533e+01 1.003748765071779e+01 1.004144545158757e+01 + 1.004540327218085e+01 1.004936111248374e+01 1.005331897248250e+01 1.005727685216344e+01 1.006123475151268e+01 + 1.006519267051658e+01 1.006915060916130e+01 1.007310856743310e+01 1.007706654531831e+01 1.008102454280318e+01 + 1.008498255987407e+01 1.008894059651738e+01 1.009289865271929e+01 1.009685672846620e+01 1.010081482374451e+01 + 1.010477293854056e+01 1.010873107284080e+01 1.011268922663155e+01 1.011664739989926e+01 1.012060559263028e+01 + 1.012456380481114e+01 1.012852203642833e+01 1.013248028746816e+01 1.013643855791723e+01 1.014039684776198e+01 + 1.014435515698888e+01 1.014831348558448e+01 1.015227183353533e+01 1.015623020082792e+01 1.016018858744882e+01 + 1.016414699338458e+01 1.016810541862183e+01 1.017206386314711e+01 1.017602232694696e+01 1.017998081000807e+01 + 1.018393931231707e+01 1.018789783386056e+01 1.019185637462519e+01 1.019581493459768e+01 1.019977351376466e+01 + 1.020373211211275e+01 1.020769072962879e+01 1.021164936629938e+01 1.021560802211125e+01 1.021956669705123e+01 + 1.022352539110597e+01 1.022748410426219e+01 1.023144283650683e+01 1.023540158782656e+01 1.023936035820811e+01 + 1.024331914763840e+01 1.024727795610426e+01 1.025123678359242e+01 1.025519563008982e+01 1.025915449558332e+01 + 1.026311338005976e+01 1.026707228350598e+01 1.027103120590887e+01 1.027499014725542e+01 1.027894910753243e+01 + 1.028290808672698e+01 1.028686708482590e+01 1.029082610181617e+01 1.029478513768479e+01 1.029874419241865e+01 + 1.030270326600479e+01 1.030666235843028e+01 1.031062146968203e+01 1.031458059974712e+01 1.031853974861258e+01 + 1.032249891626539e+01 1.032645810269273e+01 1.033041730788159e+01 1.033437653181913e+01 1.033833577449240e+01 + 1.034229503588844e+01 1.034625431599445e+01 1.035021361479754e+01 1.035417293228486e+01 1.035813226844355e+01 + 1.036209162326079e+01 1.036605099672376e+01 1.037001038881961e+01 1.037396979953562e+01 1.037792922885899e+01 + 1.038188867677688e+01 1.038584814327662e+01 1.038980762834545e+01 1.039376713197049e+01 1.039772665413910e+01 + 1.040168619483862e+01 1.040564575405627e+01 1.040960533177941e+01 1.041356492799537e+01 1.041752454269141e+01 + 1.042148417585492e+01 1.042544382747322e+01 1.042940349753366e+01 1.043336318602366e+01 1.043732289293065e+01 + 1.044128261824197e+01 1.044524236194503e+01 1.044920212402723e+01 1.045316190447608e+01 1.045712170327899e+01 + 1.046108152042337e+01 1.046504135589673e+01 1.046900120968655e+01 1.047296108178035e+01 1.047692097216551e+01 + 1.048088088082967e+01 1.048484080776037e+01 1.048880075294500e+01 1.049276071637128e+01 1.049672069802666e+01 + 1.050068069789875e+01 1.050464071597511e+01 1.050860075224336e+01 1.051256080669113e+01 1.051652087930587e+01 + 1.052048097007536e+01 1.052444107898728e+01 1.052840120602916e+01 1.053236135118870e+01 1.053632151445363e+01 + 1.054028169581148e+01 1.054424189525015e+01 1.054820211275716e+01 1.055216234832027e+01 1.055612260192732e+01 + 1.056008287356597e+01 1.056404316322390e+01 1.056800347088897e+01 1.057196379654897e+01 1.057592414019164e+01 + 1.057988450180470e+01 1.058384488137598e+01 1.058780527889341e+01 1.059176569434473e+01 1.059572612771778e+01 + 1.059968657900042e+01 1.060364704818047e+01 1.060760753524580e+01 1.061156804018439e+01 1.061552856298414e+01 + 1.061948910363280e+01 1.062344966211832e+01 1.062741023842875e+01 1.063137083255198e+01 1.063533144447583e+01 + 1.063929207418836e+01 1.064325272167759e+01 1.064721338693144e+01 1.065117406993782e+01 1.065513477068483e+01 + 1.065909548916052e+01 1.066305622535282e+01 1.066701697924981e+01 1.067097775083953e+01 1.067493854011000e+01 + 1.067889934704931e+01 1.068286017164554e+01 1.068682101388675e+01 1.069078187376108e+01 1.069474275125661e+01 + 1.069870364636148e+01 1.070266455906385e+01 1.070662548935178e+01 1.071058643721341e+01 1.071454740263700e+01 + 1.071850838561071e+01 1.072246938612262e+01 1.072643040416096e+01 1.073039143971403e+01 1.073435249277003e+01 + 1.073831356331702e+01 1.074227465134339e+01 1.074623575683734e+01 1.075019687978709e+01 1.075415802018108e+01 + 1.075811917800728e+01 1.076208035325424e+01 1.076604154591021e+01 1.077000275596337e+01 1.077396398340213e+01 + 1.077792522821489e+01 1.078188649038987e+01 1.078584776991551e+01 1.078980906678014e+01 1.079377038097206e+01 + 1.079773171247971e+01 1.080169306129156e+01 1.080565442739588e+01 1.080961581078118e+01 1.081357721143583e+01 + 1.081753862934823e+01 1.082150006450693e+01 1.082546151690035e+01 1.082942298651685e+01 1.083338447334506e+01 + 1.083734597737335e+01 1.084130749859022e+01 1.084526903698427e+01 1.084923059254394e+01 1.085319216525781e+01 + 1.085715375511432e+01 1.086111536210206e+01 1.086507698620965e+01 1.086903862742562e+01 1.087300028573848e+01 + 1.087696196113690e+01 1.088092365360948e+01 1.088488536314474e+01 1.088884708973135e+01 1.089280883335799e+01 + 1.089677059401324e+01 1.090073237168577e+01 1.090469416636424e+01 1.090865597803722e+01 1.091261780669351e+01 + 1.091657965232179e+01 1.092054151491064e+01 1.092450339444893e+01 1.092846529092528e+01 1.093242720432847e+01 + 1.093638913464717e+01 1.094035108187014e+01 1.094431304598625e+01 1.094827502698413e+01 1.095223702485254e+01 + 1.095619903958037e+01 1.096016107115647e+01 1.096412311956950e+01 1.096808518480828e+01 1.097204726686185e+01 + 1.097600936571878e+01 1.097997148136802e+01 1.098393361379843e+01 1.098789576299891e+01 1.099185792895836e+01 + 1.099582011166554e+01 1.099978231110941e+01 1.100374452727893e+01 1.100770676016299e+01 1.101166900975046e+01 + 1.101563127603030e+01 1.101959355899157e+01 1.102355585862306e+01 1.102751817491377e+01 1.103148050785272e+01 + 1.103544285742887e+01 1.103940522363119e+01 1.104336760644876e+01 1.104733000587051e+01 1.105129242188548e+01 + 1.105525485448276e+01 1.105921730365137e+01 1.106317976938032e+01 1.106714225165869e+01 1.107110475047552e+01 + 1.107506726581996e+01 1.107902979768106e+01 1.108299234604792e+01 1.108695491090967e+01 1.109091749225542e+01 + 1.109488009007421e+01 1.109884270435529e+01 1.110280533508783e+01 1.110676798226090e+01 1.111073064586368e+01 + 1.111469332588542e+01 1.111865602231519e+01 1.112261873514227e+01 1.112658146435581e+01 1.113054420994507e+01 + 1.113450697189932e+01 1.113846975020764e+01 1.114243254485937e+01 1.114639535584373e+01 1.115035818315001e+01 + 1.115432102676752e+01 1.115828388668549e+01 1.116224676289312e+01 1.116620965537986e+01 1.117017256413502e+01 + 1.117413548914779e+01 1.117809843040753e+01 1.118206138790364e+01 1.118602436162540e+01 1.118998735156224e+01 + 1.119395035770345e+01 1.119791338003841e+01 1.120187641855655e+01 1.120583947324725e+01 1.120980254409987e+01 + 1.121376563110383e+01 1.121772873424851e+01 1.122169185352348e+01 1.122565498891808e+01 1.122961814042170e+01 + 1.123358130802394e+01 1.123754449171411e+01 1.124150769148184e+01 1.124547090731646e+01 1.124943413920754e+01 + 1.125339738714465e+01 1.125736065111719e+01 1.126132393111470e+01 1.126528722712670e+01 1.126925053914278e+01 + 1.127321386715250e+01 1.127717721114534e+01 1.128114057111089e+01 1.128510394703880e+01 1.128906733891855e+01 + 1.129303074673982e+01 1.129699417049216e+01 1.130095761016512e+01 1.130492106574838e+01 1.130888453723166e+01 + 1.131284802460446e+01 1.131681152785643e+01 1.132077504697733e+01 1.132473858195679e+01 1.132870213278441e+01 + 1.133266569944998e+01 1.133662928194313e+01 1.134059288025353e+01 1.134455649437096e+01 1.134852012428513e+01 + 1.135248376998567e+01 1.135644743146237e+01 1.136041110870508e+01 1.136437480170340e+01 1.136833851044718e+01 + 1.137230223492618e+01 1.137626597513008e+01 1.138022973104887e+01 1.138419350267220e+01 1.138815728998987e+01 + 1.139212109299178e+01 1.139608491166773e+01 1.140004874600751e+01 1.140401259600099e+01 1.140797646163798e+01 + 1.141194034290844e+01 1.141590423980216e+01 1.141986815230896e+01 1.142383208041880e+01 1.142779602412162e+01 + 1.143175998340729e+01 1.143572395826566e+01 1.143968794868672e+01 1.144365195466042e+01 1.144761597617661e+01 + 1.145158001322524e+01 1.145554406579633e+01 1.145950813387979e+01 1.146347221746567e+01 1.146743631654392e+01 + 1.147140043110443e+01 1.147536456113731e+01 1.147932870663251e+01 1.148329286758009e+01 1.148725704397007e+01 + 1.149122123579242e+01 1.149518544303718e+01 1.149914966569454e+01 1.150311390375449e+01 1.150707815720695e+01 + 1.151104242604216e+01 1.151500671025023e+01 1.151897100982111e+01 1.152293532474489e+01 1.152689965501183e+01 + 1.153086400061205e+01 1.153482836153557e+01 1.153879273777252e+01 1.154275712931309e+01 1.154672153614742e+01 + 1.155068595826563e+01 1.155465039565794e+01 1.155861484831451e+01 1.156257931622558e+01 1.156654379938131e+01 + 1.157050829777183e+01 1.157447281138744e+01 1.157843734021828e+01 1.158240188425466e+01 1.158636644348675e+01 + 1.159033101790480e+01 1.159429560749914e+01 1.159826021225991e+01 1.160222483217747e+01 1.160618946724206e+01 + 1.161015411744397e+01 1.161411878277351e+01 1.161808346322091e+01 1.162204815877661e+01 1.162601286943079e+01 + 1.162997759517385e+01 1.163394233599611e+01 1.163790709188792e+01 1.164187186283973e+01 1.164583664884172e+01 + 1.164980144988430e+01 1.165376626595788e+01 1.165773109705285e+01 1.166169594315962e+01 1.166566080426858e+01 + 1.166962568037015e+01 1.167359057145462e+01 1.167755547751260e+01 1.168152039853444e+01 1.168548533451052e+01 + 1.168945028543143e+01 1.169341525128745e+01 1.169738023206922e+01 1.170134522776713e+01 1.170531023837164e+01 + 1.170927526387328e+01 1.171324030426250e+01 1.171720535952991e+01 1.172117042966583e+01 1.172513551466101e+01 + 1.172910061450587e+01 1.173306572919086e+01 1.173703085870670e+01 1.174099600304388e+01 1.174496116219290e+01 + 1.174892633614441e+01 1.175289152488895e+01 1.175685672841706e+01 1.176082194671941e+01 1.176478717978654e+01 + 1.176875242760911e+01 1.177271769017773e+01 1.177668296748305e+01 1.178064825951567e+01 1.178461356626618e+01 + 1.178857888772530e+01 1.179254422388362e+01 1.179650957473193e+01 1.180047494026082e+01 1.180444032046094e+01 + 1.180840571532305e+01 1.181237112483775e+01 1.181633654899581e+01 1.182030198778800e+01 1.182426744120495e+01 + 1.182823290923737e+01 1.183219839187610e+01 1.183616388911187e+01 1.184012940093526e+01 1.184409492733721e+01 + 1.184806046830851e+01 1.185202602383981e+01 1.185599159392190e+01 1.185995717854561e+01 1.186392277770172e+01 + 1.186788839138113e+01 1.187185401957453e+01 1.187581966227275e+01 1.187978531946670e+01 1.188375099114717e+01 + 1.188771667730504e+01 1.189168237793109e+01 1.189564809301627e+01 1.189961382255137e+01 1.190357956652720e+01 + 1.190754532493486e+01 1.191151109776510e+01 1.191547688500877e+01 1.191944268665685e+01 1.192340850270026e+01 + 1.192737433312989e+01 1.193134017793673e+01 1.193530603711162e+01 1.193927191064553e+01 1.194323779852949e+01 + 1.194720370075437e+01 1.195116961731110e+01 1.195513554819082e+01 1.195910149338441e+01 1.196306745288285e+01 + 1.196703342667713e+01 1.197099941475826e+01 1.197496541711727e+01 1.197893143374514e+01 1.198289746463298e+01 + 1.198686350977179e+01 1.199082956915257e+01 1.199479564276638e+01 1.199876173060427e+01 1.200272783265734e+01 + 1.200669394891670e+01 1.201066007937339e+01 1.201462622401842e+01 1.201859238284293e+01 1.202255855583805e+01 + 1.202652474299488e+01 1.203049094430459e+01 1.203445715975820e+01 1.203842338934691e+01 1.204238963306182e+01 + 1.204635589089405e+01 1.205032216283487e+01 1.205428844887528e+01 1.205825474900657e+01 1.206222106321992e+01 + 1.206618739150650e+01 1.207015373385743e+01 1.207412009026389e+01 1.207808646071718e+01 1.208205284520852e+01 + 1.208601924372905e+01 1.208998565627001e+01 1.209395208282265e+01 1.209791852337819e+01 1.210188497792800e+01 + 1.210585144646319e+01 1.210981792897509e+01 1.211378442545498e+01 1.211775093589403e+01 1.212171746028358e+01 + 1.212568399861503e+01 1.212965055087957e+01 1.213361711706857e+01 1.213758369717333e+01 1.214155029118506e+01 + 1.214551689909515e+01 1.214948352089506e+01 1.215345015657596e+01 1.215741680612929e+01 1.216138346954643e+01 + 1.216535014681870e+01 1.216931683793743e+01 1.217328354289403e+01 1.217725026167997e+01 1.218121699428650e+01 + 1.218518374070504e+01 1.218915050092714e+01 1.219311727494416e+01 1.219708406274737e+01 1.220105086432838e+01 + 1.220501767967852e+01 1.220898450878922e+01 1.221295135165203e+01 1.221691820825841e+01 1.222088507859966e+01 + 1.222485196266738e+01 1.222881886045302e+01 1.223278577194806e+01 1.223675269714403e+01 1.224071963603241e+01 + 1.224468658860463e+01 1.224865355485229e+01 1.225262053476690e+01 1.225658752833992e+01 1.226055453556295e+01 + 1.226452155642759e+01 1.226848859092524e+01 1.227245563904747e+01 1.227642270078602e+01 1.228038977613229e+01 + 1.228435686507784e+01 1.228832396761440e+01 1.229229108373344e+01 1.229625821342652e+01 1.230022535668532e+01 + 1.230419251350150e+01 1.230815968386663e+01 1.231212686777228e+01 1.231609406521009e+01 1.232006127617184e+01 + 1.232402850064899e+01 1.232799573863324e+01 1.233196299011628e+01 1.233593025508976e+01 1.233989753354541e+01 + 1.234386482547477e+01 1.234783213086962e+01 1.235179944972173e+01 1.235576678202268e+01 1.235973412776415e+01 + 1.236370148693796e+01 1.236766885953578e+01 1.237163624554935e+01 1.237560364497032e+01 1.237957105779050e+01 + 1.238353848400172e+01 1.238750592359561e+01 1.239147337656392e+01 1.239544084289853e+01 1.239940832259116e+01 + 1.240337581563350e+01 1.240734332201741e+01 1.241131084173473e+01 1.241527837477727e+01 1.241924592113674e+01 + 1.242321348080499e+01 1.242718105377384e+01 1.243114864003509e+01 1.243511623958061e+01 1.243908385240234e+01 + 1.244305147849200e+01 1.244701911784139e+01 1.245098677044247e+01 1.245495443628717e+01 1.245892211536726e+01 + 1.246288980767460e+01 1.246685751320110e+01 1.247082523193867e+01 1.247479296387923e+01 1.247876070901471e+01 + 1.248272846733698e+01 1.248669623883791e+01 1.249066402350953e+01 1.249463182134376e+01 1.249859963233241e+01 + 1.250256745646751e+01 1.250653529374113e+01 1.251050314414499e+01 1.251447100767122e+01 1.251843888431185e+01 + 1.252240677405871e+01 1.252637467690377e+01 1.253034259283920e+01 1.253431052185685e+01 1.253827846394878e+01 + 1.254224641910695e+01 1.254621438732342e+01 1.255018236859024e+01 1.255415036289937e+01 1.255811837024292e+01 + 1.256208639061292e+01 1.256605442400139e+01 1.257002247040040e+01 1.257399052980202e+01 1.257795860219828e+01 + 1.258192668758136e+01 1.258589478594318e+01 1.258986289727595e+01 1.259383102157176e+01 1.259779915882266e+01 + 1.260176730902082e+01 1.260573547215829e+01 1.260970364822725e+01 1.261367183721978e+01 1.261764003912799e+01 + 1.262160825394408e+01 1.262557648166022e+01 1.262954472226850e+01 1.263351297576103e+01 1.263748124213012e+01 + 1.264144952136788e+01 1.264541781346644e+01 1.264938611841802e+01 1.265335443621482e+01 1.265732276684897e+01 + 1.266129111031274e+01 1.266525946659833e+01 1.266922783569799e+01 1.267319621760395e+01 1.267716461230827e+01 + 1.268113301980337e+01 1.268510144008147e+01 1.268906987313476e+01 1.269303831895546e+01 1.269700677753587e+01 + 1.270097524886830e+01 1.270494373294501e+01 1.270891222975827e+01 1.271288073930032e+01 1.271684926156348e+01 + 1.272081779654003e+01 1.272478634422225e+01 1.272875490460252e+01 1.273272347767318e+01 1.273669206342650e+01 + 1.274066066185475e+01 1.274462927295029e+01 1.274859789670558e+01 1.275256653311283e+01 1.275653518216443e+01 + 1.276050384385278e+01 1.276447251817019e+01 1.276844120510903e+01 1.277240990466175e+01 1.277637861682061e+01 + 1.278034734157817e+01 1.278431607892670e+01 1.278828482885858e+01 1.279225359136630e+01 1.279622236644223e+01 + 1.280019115407882e+01 1.280415995426841e+01 1.280812876700355e+01 1.281209759227668e+01 1.281606643008012e+01 + 1.282003528040640e+01 1.282400414324795e+01 1.282797301859726e+01 1.283194190644677e+01 1.283591080678899e+01 + 1.283987971961643e+01 1.284384864492146e+01 1.284781758269665e+01 1.285178653293450e+01 1.285575549562751e+01 + 1.285972447076814e+01 1.286369345834896e+01 1.286766245836256e+01 1.287163147080127e+01 1.287560049565779e+01 + 1.287956953292465e+01 1.288353858259436e+01 1.288750764465946e+01 1.289147671911245e+01 1.289544580594604e+01 + 1.289941490515269e+01 1.290338401672502e+01 1.290735314065558e+01 1.291132227693698e+01 1.291529142556187e+01 + 1.291926058652273e+01 1.292322975981223e+01 1.292719894542300e+01 1.293116814334764e+01 1.293513735357876e+01 + 1.293910657610898e+01 1.294307581093100e+01 1.294704505803731e+01 1.295101431742070e+01 1.295498358907383e+01 + 1.295895287298926e+01 1.296292216915976e+01 1.296689147757790e+01 1.297086079823635e+01 1.297483013112791e+01 + 1.297879947624520e+01 1.298276883358083e+01 1.298673820312763e+01 1.299070758487832e+01 1.299467697882548e+01 + 1.299864638496186e+01 1.300261580328026e+01 1.300658523377334e+01 1.301055467643381e+01 1.301452413125453e+01 + 1.301849359822815e+01 1.302246307734746e+01 1.302643256860515e+01 1.303040207199396e+01 1.303437158750683e+01 + 1.303834111513644e+01 1.304231065487551e+01 1.304628020671689e+01 1.305024977065333e+01 1.305421934667763e+01 + 1.305818893478268e+01 1.306215853496120e+01 1.306612814720601e+01 1.307009777151000e+01 1.307406740786590e+01 + 1.307803705626652e+01 1.308200671670484e+01 1.308597638917361e+01 1.308994607366569e+01 1.309391577017390e+01 + 1.309788547869114e+01 1.310185519921029e+01 1.310582493172419e+01 1.310979467622566e+01 1.311376443270773e+01 + 1.311773420116315e+01 1.312170398158481e+01 1.312567377396572e+01 1.312964357829879e+01 1.313361339457678e+01 + 1.313758322279269e+01 1.314155306293946e+01 1.314552291501000e+01 1.314949277899725e+01 1.315346265489416e+01 + 1.315743254269354e+01 1.316140244238852e+01 1.316537235397200e+01 1.316934227743692e+01 1.317331221277625e+01 + 1.317728215998293e+01 1.318125211904993e+01 1.318522208997038e+01 1.318919207273708e+01 1.319316206734305e+01 + 1.319713207378137e+01 1.320110209204503e+01 1.320507212212707e+01 1.320904216402043e+01 1.321301221771812e+01 + 1.321698228321315e+01 1.322095236049861e+01 1.322492244956761e+01 1.322889255041308e+01 1.323286266302804e+01 + 1.323683278740563e+01 1.324080292353891e+01 1.324477307142089e+01 1.324874323104467e+01 1.325271340240333e+01 + 1.325668358548995e+01 1.326065378029760e+01 1.326462398681933e+01 1.326859420504831e+01 1.327256443497769e+01 + 1.327653467660038e+01 1.328050492990961e+01 1.328447519489862e+01 1.328844547156036e+01 1.329241575988794e+01 + 1.329638605987465e+01 1.330035637151357e+01 1.330432669479776e+01 1.330829702972043e+01 1.331226737627479e+01 + 1.331623773445394e+01 1.332020810425100e+01 1.332417848565926e+01 1.332814887867189e+01 1.333211928328196e+01 + 1.333608969948267e+01 1.334006012726732e+01 1.334403056662908e+01 1.334800101756103e+01 1.335197148005651e+01 + 1.335594195410872e+01 1.335991243971082e+01 1.336388293685611e+01 1.336785344553781e+01 1.337182396574900e+01 + 1.337579449748319e+01 1.337976504073337e+01 1.338373559549298e+01 1.338770616175521e+01 1.339167673951321e+01 + 1.339564732876046e+01 1.339961792949012e+01 1.340358854169540e+01 1.340755916536969e+01 1.341152980050625e+01 + 1.341550044709830e+01 1.341947110513925e+01 1.342344177462238e+01 1.342741245554094e+01 1.343138314788827e+01 + 1.343535385165773e+01 1.343932456684261e+01 1.344329529343622e+01 1.344726603143195e+01 1.345123678082311e+01 + 1.345520754160296e+01 1.345917831376498e+01 1.346314909730254e+01 1.346711989220882e+01 1.347109069847735e+01 + 1.347506151610151e+01 1.347903234507459e+01 1.348300318538998e+01 1.348697403704109e+01 1.349094490002130e+01 + 1.349491577432402e+01 1.349888665994271e+01 1.350285755687067e+01 1.350682846510129e+01 1.351079938462813e+01 + 1.351477031544459e+01 1.351874125754390e+01 1.352271221091970e+01 1.352668317556540e+01 1.353065415147435e+01 + 1.353462513864007e+01 1.353859613705606e+01 1.354256714671559e+01 1.354653816761232e+01 1.355050919973960e+01 + 1.355448024309098e+01 1.355845129765994e+01 1.356242236343982e+01 1.356639344042432e+01 1.357036452860678e+01 + 1.357433562798071e+01 1.357830673853967e+01 1.358227786027718e+01 1.358624899318672e+01 1.359022013726177e+01 + 1.359419129249587e+01 1.359816245888257e+01 1.360213363641541e+01 1.360610482508793e+01 1.361007602489368e+01 + 1.361404723582619e+01 1.361801845787901e+01 1.362198969104567e+01 1.362596093531977e+01 1.362993219069488e+01 + 1.363390345716453e+01 1.363787473472236e+01 1.364184602336187e+01 1.364581732307674e+01 1.364978863386054e+01 + 1.365375995570681e+01 1.365773128860919e+01 1.366170263256135e+01 1.366567398755679e+01 1.366964535358918e+01 + 1.367361673065214e+01 1.367758811873928e+01 1.368155951784428e+01 1.368553092796080e+01 1.368950234908233e+01 + 1.369347378120261e+01 1.369744522431531e+01 1.370141667841409e+01 1.370538814349260e+01 1.370935961954450e+01 + 1.371333110656345e+01 1.371730260454310e+01 1.372127411347716e+01 1.372524563335935e+01 1.372921716418336e+01 + 1.373318870594277e+01 1.373716025863139e+01 1.374113182224295e+01 1.374510339677109e+01 1.374907498220951e+01 + 1.375304657855195e+01 1.375701818579219e+01 1.376098980392383e+01 1.376496143294079e+01 1.376893307283663e+01 + 1.377290472360514e+01 1.377687638524018e+01 1.378084805773536e+01 1.378481974108449e+01 1.378879143528132e+01 + 1.379276314031972e+01 1.379673485619334e+01 1.380070658289590e+01 1.380467832042136e+01 1.380865006876340e+01 + 1.381262182791587e+01 1.381659359787251e+01 1.382056537862707e+01 1.382453717017342e+01 1.382850897250539e+01 + 1.383248078561680e+01 1.383645260950143e+01 1.384042444415310e+01 1.384439628956564e+01 1.384836814573289e+01 + 1.385234001264869e+01 1.385631189030694e+01 1.386028377870140e+01 1.386425567782593e+01 1.386822758767445e+01 + 1.387219950824081e+01 1.387617143951877e+01 1.388014338150232e+01 1.388411533418528e+01 1.388808729756153e+01 + 1.389205927162496e+01 1.389603125636949e+01 1.390000325178905e+01 1.390397525787738e+01 1.390794727462853e+01 + 1.391191930203633e+01 1.391589134009472e+01 1.391986338879768e+01 1.392383544813902e+01 1.392780751811269e+01 + 1.393177959871267e+01 1.393575168993288e+01 1.393972379176731e+01 1.394369590420982e+01 1.394766802725429e+01 + 1.395164016089490e+01 1.395561230512542e+01 1.395958445993986e+01 1.396355662533219e+01 1.396752880129638e+01 + 1.397150098782643e+01 1.397547318491629e+01 1.397944539255996e+01 1.398341761075145e+01 1.398738983948479e+01 + 1.399136207875392e+01 1.399533432855275e+01 1.399930658887545e+01 1.400327885971602e+01 1.400725114106838e+01 + 1.401122343292659e+01 1.401519573528469e+01 1.401916804813670e+01 1.402314037147676e+01 1.402711270529870e+01 + 1.403108504959673e+01 1.403505740436485e+01 1.403902976959708e+01 1.404300214528754e+01 1.404697453143022e+01 + 1.405094692801925e+01 1.405491933504872e+01 1.405889175251268e+01 1.406286418040517e+01 1.406683661872023e+01 + 1.407080906745206e+01 1.407478152659478e+01 1.407875399614241e+01 1.408272647608902e+01 1.408669896642876e+01 + 1.409067146715573e+01 1.409464397826408e+01 1.409861649974791e+01 1.410258903160136e+01 1.410656157381855e+01 + 1.411053412639361e+01 1.411450668932065e+01 1.411847926259379e+01 1.412245184620733e+01 1.412642444015529e+01 + 1.413039704443185e+01 1.413436965903115e+01 1.413834228394734e+01 1.414231491917469e+01 1.414628756470728e+01 + 1.415026022053928e+01 1.415423288666498e+01 1.415820556307847e+01 1.416217824977390e+01 1.416615094674565e+01 + 1.417012365398773e+01 1.417409637149439e+01 1.417806909925987e+01 1.418204183727842e+01 1.418601458554424e+01 + 1.418998734405145e+01 1.419396011279438e+01 1.419793289176719e+01 1.420190568096417e+01 1.420587848037956e+01 + 1.420985129000755e+01 1.421382410984246e+01 1.421779693987845e+01 1.422176978010981e+01 1.422574263053085e+01 + 1.422971549113586e+01 1.423368836191901e+01 1.423766124287453e+01 1.424163413399685e+01 1.424560703528024e+01 + 1.424957994671881e+01 1.425355286830697e+01 1.425752580003913e+01 1.426149874190941e+01 1.426547169391214e+01 + 1.426944465604161e+01 1.427341762829223e+01 1.427739061065832e+01 1.428136360313411e+01 1.428533660571391e+01 + 1.428930961839209e+01 1.429328264116310e+01 1.429725567402110e+01 1.430122871696047e+01 1.430520176997562e+01 + 1.430917483306079e+01 1.431314790621050e+01 1.431712098941895e+01 1.432109408268057e+01 1.432506718598978e+01 + 1.432904029934084e+01 1.433301342272814e+01 1.433698655614610e+01 1.434095969958915e+01 1.434493285305156e+01 + 1.434890601652782e+01 1.435287919001235e+01 1.435685237349938e+01 1.436082556698351e+01 1.436479877045898e+01 + 1.436877198392034e+01 1.437274520736195e+01 1.437671844077818e+01 1.438069168416357e+01 1.438466493751245e+01 + 1.438863820081922e+01 1.439261147407844e+01 1.439658475728449e+01 1.440055805043181e+01 1.440453135351491e+01 + 1.440850466652812e+01 1.441247798946601e+01 1.441645132232298e+01 1.442042466509354e+01 1.442439801777214e+01 + 1.442837138035315e+01 1.443234475283122e+01 1.443631813520080e+01 1.444029152745628e+01 1.444426492959222e+01 + 1.444823834160315e+01 1.445221176348348e+01 1.445618519522775e+01 1.446015863683042e+01 1.446413208828608e+01 + 1.446810554958926e+01 1.447207902073439e+01 1.447605250171598e+01 1.448002599252864e+01 1.448399949316699e+01 + 1.448797300362533e+01 1.449194652389829e+01 1.449592005398051e+01 1.449989359386644e+01 1.450386714355070e+01 + 1.450784070302780e+01 1.451181427229228e+01 1.451578785133869e+01 1.451976144016165e+01 1.452373503875573e+01 + 1.452770864711544e+01 1.453168226523547e+01 1.453565589311034e+01 1.453962953073462e+01 1.454360317810289e+01 + 1.029818381729593e+00 1.028950884496729e+00 1.028083684143606e+00 1.027216781151606e+00 1.026350176001324e+00 + 1.025483869172581e+00 1.024617861144403e+00 1.023752152395052e+00 1.022886743401999e+00 1.022021634641924e+00 + 1.021156826590733e+00 1.020292319723555e+00 1.019428114514717e+00 1.018564211437776e+00 1.017700610965502e+00 + 1.016837313569891e+00 1.015974319722141e+00 1.015111629892667e+00 1.014249244551109e+00 1.013387164166326e+00 + 1.012525389206371e+00 1.011663920138531e+00 1.010802757429314e+00 1.009941901544421e+00 1.009081352948791e+00 + 1.008221112106560e+00 1.007361179481090e+00 1.006501555534955e+00 1.005642240729950e+00 1.004783235527070e+00 + 1.003924540386534e+00 1.003066155767777e+00 1.002208082129445e+00 1.001350319929398e+00 1.000492869624714e+00 + 9.996357316716880e-01 9.987789065258112e-01 9.979223946418012e-01 9.970661964736000e-01 9.962103124743420e-01 + 9.953547430963930e-01 9.944994887913201e-01 9.936445500099114e-01 9.927899272021641e-01 9.919356208172856e-01 + 9.910816313037093e-01 9.902279591090667e-01 9.893746046802088e-01 9.885215684632106e-01 9.876688509033346e-01 + 9.868164524450742e-01 9.859643735321345e-01 9.851126146074320e-01 9.842611761130974e-01 9.834100584904591e-01 + 9.825592621800773e-01 9.817087876217170e-01 9.808586352543572e-01 9.800088055161804e-01 9.791592988445962e-01 + 9.783101156762170e-01 9.774612564468647e-01 9.766127215915824e-01 9.757645115446213e-01 9.749166267394365e-01 + 9.740690676087043e-01 9.732218345843163e-01 9.723749280973597e-01 9.715283485781565e-01 9.706820964562251e-01 + 9.698361721602867e-01 9.689905761183024e-01 9.681453087574169e-01 9.673003705039974e-01 9.664557617836383e-01 + 9.656114830211113e-01 9.647675346404295e-01 9.639239170648062e-01 9.630806307166673e-01 9.622376760176445e-01 + 9.613950533885930e-01 9.605527632495635e-01 9.597108060198339e-01 9.588691821178861e-01 9.580278919614106e-01 + 9.571869359673182e-01 9.563463145517181e-01 9.555060281299464e-01 9.546660771165288e-01 9.538264619252308e-01 + 9.529871829690043e-01 9.521482406600201e-01 9.513096354096716e-01 9.504713676285490e-01 9.496334377264566e-01 + 9.487958461124151e-01 9.479585931946528e-01 9.471216793806151e-01 9.462851050769484e-01 9.454488706895151e-01 + 9.446129766233924e-01 9.437774232828615e-01 9.429422110714295e-01 9.421073403917942e-01 9.412728116458823e-01 + 9.404386252348220e-01 9.396047815589634e-01 9.387712810178472e-01 9.379381240102465e-01 9.371053109341390e-01 + 9.362728421867169e-01 9.354407181643748e-01 9.346089392627226e-01 9.337775058765924e-01 9.329464184000119e-01 + 9.321156772262308e-01 9.312852827477137e-01 9.304552353561221e-01 9.296255354423377e-01 9.287961833964591e-01 + 9.279671796077937e-01 9.271385244648559e-01 9.263102183553842e-01 9.254822616663051e-01 9.246546547837874e-01 + 9.238273980931880e-01 9.230004919790931e-01 9.221739368252849e-01 9.213477330147730e-01 9.205218809297767e-01 + 9.196963809517100e-01 9.188712334612238e-01 9.180464388381754e-01 9.172219974616195e-01 9.163979097098389e-01 + 9.155741759603314e-01 9.147507965897905e-01 9.139277719741313e-01 9.131051024884993e-01 9.122827885072258e-01 + 9.114608304038728e-01 9.106392285511987e-01 9.098179833212006e-01 9.089970950850672e-01 9.081765642132013e-01 + 9.073563910752415e-01 9.065365760400137e-01 9.057171194755685e-01 9.048980217491761e-01 9.040792832273093e-01 + 9.032609042756635e-01 9.024428852591421e-01 9.016252265418704e-01 9.008079284871761e-01 8.999909914576094e-01 + 8.991744158149402e-01 8.983582019201434e-01 8.975423501334069e-01 8.967268608141471e-01 8.959117343209785e-01 + 8.950969710117408e-01 8.942825712434899e-01 8.934685353724918e-01 8.926548637542326e-01 8.918415567434075e-01 + 8.910286146939277e-01 8.902160379589314e-01 8.894038268907535e-01 8.885919818409634e-01 8.877805031603390e-01 + 8.869693911988736e-01 8.861586463057748e-01 8.853482688294735e-01 8.845382591176074e-01 8.837286175170382e-01 + 8.829193443738415e-01 8.821104400333194e-01 8.813019048399672e-01 8.804937391375302e-01 8.796859432689383e-01 + 8.788785175763698e-01 8.780714624011906e-01 8.772647780840088e-01 8.764584649646275e-01 8.756525233820975e-01 + 8.748469536746660e-01 8.740417561797943e-01 8.732369312341854e-01 8.724324791737378e-01 8.716284003335842e-01 + 8.708246950480666e-01 8.700213636507483e-01 8.692184064744144e-01 8.684158238510710e-01 8.676136161119459e-01 + 8.668117835874691e-01 8.660103266073188e-01 8.652092455003623e-01 8.644085405947126e-01 8.636082122176930e-01 + 8.628082606958477e-01 8.620086863549371e-01 8.612094895199540e-01 8.604106705150950e-01 8.596122296638031e-01 + 8.588141672887118e-01 8.580164837117062e-01 8.572191792538755e-01 8.564222542355302e-01 8.556257089762138e-01 + 8.548295437946868e-01 8.540337590089232e-01 8.532383549361378e-01 8.524433318927489e-01 8.516486901944214e-01 + 8.508544301560150e-01 8.500605520916377e-01 8.492670563146056e-01 8.484739431374629e-01 8.476812128719879e-01 + 8.468888658291742e-01 8.460969023192301e-01 8.453053226516050e-01 8.445141271349622e-01 8.437233160772019e-01 + 8.429328897854421e-01 8.421428485660195e-01 8.413531927245138e-01 8.405639225657113e-01 8.397750383936414e-01 + 8.389865405115459e-01 8.381984292218968e-01 8.374107048264100e-01 8.366233676260025e-01 8.358364179208301e-01 + 8.350498560102736e-01 8.342636821929516e-01 8.334778967667037e-01 8.326925000285881e-01 8.319074922749050e-01 + 8.311228738011748e-01 8.303386449021535e-01 8.295548058718220e-01 8.287713570033873e-01 8.279882985892980e-01 + 8.272056309212164e-01 8.264233542900459e-01 8.256414689859125e-01 8.248599752981799e-01 8.240788735154359e-01 + 8.232981639255081e-01 8.225178468154439e-01 8.217379224715397e-01 8.209583911792924e-01 8.201792532234660e-01 + 8.194005088880395e-01 8.186221584562126e-01 8.178442022104446e-01 8.170666404324106e-01 8.162894734030188e-01 + 8.155127014024118e-01 8.147363247099736e-01 8.139603436043195e-01 8.131847583632836e-01 8.124095692639565e-01 + 8.116347765826520e-01 8.108603805949233e-01 8.100863815755439e-01 8.093127797985503e-01 8.085395755371961e-01 + 8.077667690639661e-01 8.069943606506018e-01 8.062223505680559e-01 8.054507390865440e-01 8.046795264754931e-01 + 8.039087130035937e-01 8.031382989387471e-01 8.023682845481188e-01 8.015986700980898e-01 8.008294558543005e-01 + 8.000606420816119e-01 7.992922290441270e-01 7.985242170052068e-01 7.977566062274219e-01 7.969893969726131e-01 + 7.962225895018390e-01 7.954561840754025e-01 7.946901809528604e-01 7.939245803929975e-01 7.931593826538446e-01 + 7.923945879926741e-01 7.916301966660031e-01 7.908662089295843e-01 7.901026250384157e-01 7.893394452467377e-01 + 7.885766698080421e-01 7.878142989750540e-01 7.870523329997409e-01 7.862907721333283e-01 7.855296166262692e-01 + 7.847688667282761e-01 7.840085226882906e-01 7.832485847545170e-01 7.824890531743899e-01 7.817299281946019e-01 + 7.809712100610798e-01 7.802128990190107e-01 7.794549953128257e-01 7.786974991861861e-01 7.779404108820238e-01 + 7.771837306425062e-01 7.764274587090452e-01 7.756715953223189e-01 7.749161407222345e-01 7.741610951479628e-01 + 7.734064588379100e-01 7.726522320297414e-01 7.718984149603736e-01 7.711450078659716e-01 7.703920109819528e-01 + 7.696394245429754e-01 7.688872487829679e-01 7.681354839350873e-01 7.673841302317636e-01 7.666331879046780e-01 + 7.658826571847401e-01 7.651325383021447e-01 7.643828314863181e-01 7.636335369659546e-01 7.628846549689886e-01 + 7.621361857226245e-01 7.613881294533094e-01 7.606404863867471e-01 7.598932567479024e-01 7.591464407609992e-01 + 7.584000386495007e-01 7.576540506361484e-01 7.569084769429252e-01 7.561633177910779e-01 7.554185734011138e-01 + 7.546742439927862e-01 7.539303297851194e-01 7.531868309963931e-01 7.524437478441433e-01 7.517010805451729e-01 + 7.509588293155244e-01 7.502169943705327e-01 7.494755759247704e-01 7.487345741920710e-01 7.479939893855403e-01 + 7.472538217175346e-01 7.465140713996899e-01 7.457747386428837e-01 7.450358236572685e-01 7.442973266522522e-01 + 7.435592478365257e-01 7.428215874180144e-01 7.420843456039282e-01 7.413475226007359e-01 7.406111186141786e-01 + 7.398751338492491e-01 7.391395685102188e-01 7.384044228006188e-01 7.376696969232452e-01 7.369353910801724e-01 + 7.362015054727200e-01 7.354680403015011e-01 7.347349957663855e-01 7.340023720665088e-01 7.332701694002729e-01 + 7.325383879653635e-01 7.318070279587258e-01 7.310760895765697e-01 7.303455730143900e-01 7.296154784669409e-01 + 7.288858061282534e-01 7.281565561916257e-01 7.274277288496396e-01 7.266993242941352e-01 7.259713427162320e-01 + 7.252437843063264e-01 7.245166492540811e-01 7.237899377484421e-01 7.230636499776156e-01 7.223377861291044e-01 + 7.216123463896634e-01 7.208873309453390e-01 7.201627399814490e-01 7.194385736825899e-01 7.187148322326289e-01 + 7.179915158147232e-01 7.172686246112918e-01 7.165461588040415e-01 7.158241185739584e-01 7.151025041013133e-01 + 7.143813155656346e-01 7.136605531457616e-01 7.129402170197867e-01 7.122203073650976e-01 7.115008243583609e-01 + 7.107817681755283e-01 7.100631389918213e-01 7.093449369817535e-01 7.086271623191288e-01 7.079098151770227e-01 + 7.071928957277950e-01 7.064764041430962e-01 7.057603405938540e-01 7.050447052502943e-01 7.043294982819069e-01 + 7.036147198574930e-01 7.029003701451239e-01 7.021864493121559e-01 7.014729575252477e-01 7.007598949503372e-01 + 7.000472617526459e-01 6.993350580966848e-01 6.986232841462711e-01 6.979119400644835e-01 6.972010260137138e-01 + 6.964905421556352e-01 6.957804886512132e-01 6.950708656607031e-01 6.943616733436515e-01 6.936529118589069e-01 + 6.929445813645911e-01 6.922366820181409e-01 6.915292139762761e-01 6.908221773950025e-01 6.901155724296415e-01 + 6.894093992347849e-01 6.887036579643414e-01 6.879983487715106e-01 6.872934718087691e-01 6.865890272279214e-01 + 6.858850151800516e-01 6.851814358155334e-01 6.844782892840615e-01 6.837755757346169e-01 6.830732953154698e-01 + 6.823714481742131e-01 6.816700344577232e-01 6.809690543121741e-01 6.802685078830616e-01 6.795683953151590e-01 + 6.788687167525560e-01 6.781694723386447e-01 6.774706622161151e-01 6.767722865269591e-01 6.760743454124786e-01 + 6.753768390132785e-01 6.746797674692673e-01 6.739831309196559e-01 6.732869295029654e-01 6.725911633570258e-01 + 6.718958326189636e-01 6.712009374252277e-01 6.705064779115578e-01 6.698124542130220e-01 6.691188664639710e-01 + 6.684257147980994e-01 6.677329993483697e-01 6.670407202470956e-01 6.663488776258716e-01 6.656574716156213e-01 + 6.649665023465672e-01 6.642759699482516e-01 6.635858745495389e-01 6.628962162785792e-01 6.622069952628680e-01 + 6.615182116291918e-01 6.608298655036673e-01 6.601419570117113e-01 6.594544862780705e-01 6.587674534268005e-01 + 6.580808585812741e-01 6.573947018641830e-01 6.567089833975377e-01 6.560237033026629e-01 6.553388617002051e-01 + 6.546544587101327e-01 6.539704944517252e-01 6.532869690435937e-01 6.526038826036548e-01 6.519212352491717e-01 + 6.512390270966975e-01 6.505572582621333e-01 6.498759288606880e-01 6.491950390069006e-01 6.485145888146371e-01 + 6.478345783970798e-01 6.471550078667395e-01 6.464758773354548e-01 6.457971869143856e-01 6.451189367140270e-01 + 6.444411268441842e-01 6.437637574140082e-01 6.430868285319666e-01 6.424103403058604e-01 6.417342928428207e-01 + 6.410586862493056e-01 6.403835206311005e-01 6.397087960933276e-01 6.390345127404358e-01 6.383606706762150e-01 + 6.376872700037648e-01 6.370143108255504e-01 6.363417932433403e-01 6.356697173582497e-01 6.349980832707296e-01 + 6.343268910805641e-01 6.336561408868723e-01 6.329858327881138e-01 6.323159668820773e-01 6.316465432658849e-01 + 6.309775620360070e-01 6.303090232882540e-01 6.296409271177641e-01 6.289732736190176e-01 6.283060628858407e-01 + 6.276392950113973e-01 6.269729700881854e-01 6.263070882080511e-01 6.256416494621824e-01 6.249766539411071e-01 + 6.243121017346971e-01 6.236479929321692e-01 6.229843276220822e-01 6.223211058923402e-01 6.216583278301934e-01 + 6.209959935222358e-01 6.203341030544107e-01 6.196726565120050e-01 6.190116539796550e-01 6.183510955413452e-01 + 6.176909812804066e-01 6.170313112795207e-01 6.163720856207198e-01 6.157133043853837e-01 6.150549676542453e-01 + 6.143970755073860e-01 6.137396280242426e-01 6.130826252836019e-01 6.124260673636039e-01 6.117699543417435e-01 + 6.111142862948674e-01 6.104590632991790e-01 6.098042854302367e-01 6.091499527629531e-01 6.084960653715985e-01 + 6.078426233298003e-01 6.071896267105423e-01 6.065370755861670e-01 6.058849700283762e-01 6.052333101082292e-01 + 6.045820958961469e-01 6.039313274619081e-01 6.032810048746553e-01 6.026311282028907e-01 6.019816975144792e-01 + 6.013327128766476e-01 6.006841743559861e-01 6.000360820184497e-01 5.993884359293573e-01 5.987412361533913e-01 + 5.980944827546003e-01 5.974481757964005e-01 5.968023153415725e-01 5.961569014522661e-01 5.955119341899963e-01 + 5.948674136156495e-01 5.942233397894796e-01 5.935797127711093e-01 5.929365326195324e-01 5.922937993931128e-01 + 5.916515131495866e-01 5.910096739460612e-01 5.903682818390164e-01 5.897273368843048e-01 5.890868391371534e-01 + 5.884467886521625e-01 5.878071854833076e-01 5.871680296839397e-01 5.865293213067856e-01 5.858910604039487e-01 + 5.852532470269098e-01 5.846158812265267e-01 5.839789630530365e-01 5.833424925560552e-01 5.827064697845771e-01 + 5.820708947869774e-01 5.814357676110123e-01 5.808010883038195e-01 5.801668569119174e-01 5.795330734812076e-01 + 5.788997380569754e-01 5.782668506838887e-01 5.776344114059998e-01 5.770024202667475e-01 5.763708773089532e-01 + 5.757397825748277e-01 5.751091361059651e-01 5.744789379433500e-01 5.738491881273532e-01 5.732198866977327e-01 + 5.725910336936391e-01 5.719626291536092e-01 5.713346731155720e-01 5.707071656168469e-01 5.700801066941448e-01 + 5.694534963835695e-01 5.688273347206153e-01 5.682016217401733e-01 5.675763574765249e-01 5.669515419633487e-01 + 5.663271752337172e-01 5.657032573200997e-01 5.650797882543601e-01 5.644567680677605e-01 5.638341967909611e-01 + 5.632120744540188e-01 5.625904010863910e-01 5.619691767169334e-01 5.613484013739017e-01 5.607280750849534e-01 + 5.601081978771462e-01 5.594887697769401e-01 5.588697908101971e-01 5.582512610021830e-01 5.576331803775684e-01 + 5.570155489604254e-01 5.563983667742330e-01 5.557816338418764e-01 5.551653501856452e-01 5.545495158272374e-01 + 5.539341307877576e-01 5.533191950877188e-01 5.527047087470435e-01 5.520906717850608e-01 5.514770842205133e-01 + 5.508639460715520e-01 5.502512573557398e-01 5.496390180900520e-01 5.490272282908741e-01 5.484158879740074e-01 + 5.478049971546652e-01 5.471945558474766e-01 5.465845640664834e-01 5.459750218251452e-01 5.453659291363367e-01 + 5.447572860123511e-01 5.441490924648956e-01 5.435413485050985e-01 5.429340541435068e-01 5.423272093900847e-01 + 5.417208142542186e-01 5.411148687447143e-01 5.405093728697989e-01 5.399043266371233e-01 5.392997300537579e-01 + 5.386955831261986e-01 5.380918858603644e-01 5.374886382615973e-01 5.368858403346670e-01 5.362834920837678e-01 + 5.356815935125191e-01 5.350801446239694e-01 5.344791454205930e-01 5.338785959042937e-01 5.332784960764038e-01 + 5.326788459376851e-01 5.320796454883300e-01 5.314808947279601e-01 5.308825936556308e-01 5.302847422698291e-01 + 5.296873405684723e-01 5.290903885489139e-01 5.284938862079409e-01 5.278978335417738e-01 5.273022305460695e-01 + 5.267070772159208e-01 5.261123735458566e-01 5.255181195298438e-01 5.249243151612855e-01 5.243309604330255e-01 + 5.237380553373464e-01 5.231455998659684e-01 5.225535940100552e-01 5.219620377602096e-01 5.213709311064777e-01 + 5.207802740383466e-01 5.201900665447470e-01 5.196003086140540e-01 5.190110002340856e-01 5.184221413921068e-01 + 5.178337320748273e-01 5.172457722684018e-01 5.166582619584337e-01 5.160712011299742e-01 5.154845897675218e-01 + 5.148984278550243e-01 5.143127153758787e-01 5.137274523129332e-01 5.131426386484871e-01 5.125582743642881e-01 + 5.119743594415413e-01 5.113908938608994e-01 5.108078776024734e-01 5.102253106458245e-01 5.096431929699716e-01 + 5.090615245533867e-01 5.084803053740006e-01 5.078995354091985e-01 5.073192146358236e-01 5.067393430301793e-01 + 5.061599205680244e-01 5.055809472245809e-01 5.050024229745267e-01 5.044243477920045e-01 5.038467216506157e-01 + 5.032695445234244e-01 5.026928163829588e-01 5.021165372012084e-01 5.015407069496285e-01 5.009653255991380e-01 + 5.003903931201225e-01 4.998159094824317e-01 4.992418746553835e-01 4.986682886077632e-01 4.980951513078233e-01 + 4.975224627232859e-01 4.969502228213414e-01 4.963784315686525e-01 4.958070889313492e-01 4.952361948750348e-01 + 4.946657493647862e-01 4.940957523651500e-01 4.935262038401480e-01 4.929571037532756e-01 4.923884520675025e-01 + 4.918202487452752e-01 4.912524937485135e-01 4.906851870386177e-01 4.901183285764616e-01 4.895519183224000e-01 + 4.889859562362653e-01 4.884204422773690e-01 4.878553764045027e-01 4.872907585759400e-01 4.867265887494344e-01 + 4.861628668822214e-01 4.855995929310211e-01 4.850367668520347e-01 4.844743886009498e-01 4.839124581329363e-01 + 4.833509754026514e-01 4.827899403642382e-01 4.822293529713254e-01 4.816692131770306e-01 4.811095209339583e-01 + 4.805502761942031e-01 4.799914789093490e-01 4.794331290304684e-01 4.788752265081255e-01 4.783177712923771e-01 + 4.777607633327716e-01 4.772042025783493e-01 4.766480889776447e-01 4.760924224786861e-01 4.755372030289992e-01 + 4.749824305756006e-01 4.744281050650074e-01 4.738742264432317e-01 4.733207946557833e-01 4.727678096476701e-01 + 4.722152713634001e-01 4.716631797469799e-01 4.711115347419170e-01 4.705603362912189e-01 4.700095843373959e-01 + 4.694592788224603e-01 4.689094196879268e-01 4.683600068748161e-01 4.678110403236498e-01 4.672625199744569e-01 + 4.667144457667719e-01 4.661668176396354e-01 4.656196355315954e-01 4.650728993807072e-01 4.645266091245350e-01 + 4.639807647001523e-01 4.634353660441420e-01 4.628904130925983e-01 4.623459057811258e-01 4.618018440448413e-01 + 4.612582278183737e-01 4.607150570358662e-01 4.601723316309757e-01 4.596300515368735e-01 4.590882166862456e-01 + 4.585468270112950e-01 4.580058824437407e-01 4.574653829148196e-01 4.569253283552872e-01 4.563857186954153e-01 + 4.558465538649983e-01 4.553078337933492e-01 4.547695584093006e-01 4.542317276412095e-01 4.536943414169521e-01 + 4.531573996639294e-01 4.526209023090658e-01 4.520848492788089e-01 4.515492404991315e-01 4.510140758955333e-01 + 4.504793553930383e-01 4.499450789161996e-01 4.494112463890965e-01 4.488778577353366e-01 4.483449128780581e-01 + 4.478124117399270e-01 4.472803542431403e-01 4.467487403094279e-01 4.462175698600489e-01 4.456868428157965e-01 + 4.451565590969962e-01 4.446267186235084e-01 4.440973213147268e-01 4.435683670895819e-01 4.430398558665385e-01 + 4.425117875635997e-01 4.419841620983043e-01 4.414569793877306e-01 4.409302393484938e-01 4.404039418967508e-01 + 4.398780869481968e-01 4.393526744180685e-01 4.388277042211444e-01 4.383031762717433e-01 4.377790904837298e-01 + 4.372554467705097e-01 4.367322450450342e-01 4.362094852197994e-01 4.356871672068460e-01 4.351652909177619e-01 + 4.346438562636824e-01 4.341228631552893e-01 4.336023115028136e-01 4.330822012160359e-01 4.325625322042850e-01 + 4.320433043764413e-01 4.315245176409366e-01 4.310061719057540e-01 4.304882670784293e-01 4.299708030660506e-01 + 4.294537797752620e-01 4.289371971122609e-01 4.284210549827991e-01 4.279053532921870e-01 4.273900919452894e-01 + 4.268752708465294e-01 4.263608898998885e-01 4.258469490089066e-01 4.253334480766831e-01 4.248203870058775e-01 + 4.243077656987099e-01 4.237955840569633e-01 4.232838419819813e-01 4.227725393746716e-01 4.222616761355047e-01 + 4.217512521645165e-01 4.212412673613070e-01 4.207317216250425e-01 4.202226148544557e-01 4.197139469478456e-01 + 4.192057178030805e-01 4.186979273175958e-01 4.181905753883974e-01 4.176836619120601e-01 4.171771867847298e-01 + 4.166711499021237e-01 4.161655511595305e-01 4.156603904518119e-01 4.151556676734036e-01 4.146513827183149e-01 + 4.141475354801297e-01 4.136441258520069e-01 4.131411537266833e-01 4.126386189964708e-01 4.121365215532592e-01 + 4.116348612885181e-01 4.111336380932936e-01 4.106328518582143e-01 4.101325024734859e-01 4.096325898288974e-01 + 4.091331138138199e-01 4.086340743172054e-01 4.081354712275890e-01 4.076373044330911e-01 4.071395738214157e-01 + 4.066422792798521e-01 4.061454206952758e-01 4.056489979541481e-01 4.051530109425192e-01 4.046574595460252e-01 + 4.041623436498933e-01 4.036676631389379e-01 4.031734178975648e-01 4.026796078097706e-01 4.021862327591431e-01 + 4.016932926288611e-01 4.012007873016990e-01 4.007087166600222e-01 4.002170805857917e-01 3.997258789605636e-01 + 3.992351116654888e-01 3.987447785813157e-01 3.982548795883886e-01 3.977654145666499e-01 3.972763833956406e-01 + 3.967877859545022e-01 3.962996221219734e-01 3.958118917763958e-01 3.953245947957101e-01 3.948377310574614e-01 + 3.943513004387955e-01 3.938653028164619e-01 3.933797380668155e-01 3.928946060658141e-01 3.924099066890221e-01 + 3.919256398116097e-01 3.914418053083537e-01 3.909584030536383e-01 3.904754329214563e-01 3.899928947854096e-01 + 3.895107885187095e-01 3.890291139941772e-01 3.885478710842450e-01 3.880670596609584e-01 3.875866795959723e-01 + 3.871067307605578e-01 3.866272130255981e-01 3.861481262615901e-01 3.856694703386480e-01 3.851912451265009e-01 + 3.847134504944937e-01 3.842360863115903e-01 3.837591524463702e-01 3.832826487670337e-01 3.828065751413997e-01 + 3.823309314369062e-01 3.818557175206143e-01 3.813809332592036e-01 3.809065785189776e-01 3.804326531658637e-01 + 3.799591570654093e-01 3.794860900827899e-01 3.790134520828026e-01 3.785412429298733e-01 3.780694624880520e-01 + 3.775981106210156e-01 3.771271871920696e-01 3.766566920641487e-01 3.761866250998138e-01 3.757169861612596e-01 + 3.752477751103074e-01 3.747789918084121e-01 3.743106361166593e-01 3.738427078957682e-01 3.733752070060899e-01 + 3.729081333076116e-01 3.724414866599509e-01 3.719752669223666e-01 3.715094739537484e-01 3.710441076126257e-01 + 3.705791677571640e-01 3.701146542451682e-01 3.696505669340793e-01 3.691869056809810e-01 3.687236703425956e-01 + 3.682608607752857e-01 3.677984768350568e-01 3.673365183775564e-01 3.668749852580737e-01 3.664138773315431e-01 + 3.659531944525422e-01 3.654929364752956e-01 3.650331032536696e-01 3.645736946411818e-01 3.641147104909934e-01 + 3.636561506559150e-01 3.631980149884056e-01 3.627403033405718e-01 3.622830155641726e-01 3.618261515106154e-01 + 3.613697110309607e-01 3.609136939759199e-01 3.604581001958562e-01 3.600029295407875e-01 3.595481818603860e-01 + 3.590938570039763e-01 3.586399548205421e-01 3.581864751587193e-01 3.577334178668033e-01 3.572807827927460e-01 + 3.568285697841575e-01 3.563767786883063e-01 3.559254093521206e-01 3.554744616221902e-01 3.550239353447640e-01 + 3.545738303657537e-01 3.541241465307322e-01 3.536748836849369e-01 3.532260416732670e-01 3.527776203402874e-01 + 3.523296195302283e-01 3.518820390869841e-01 3.514348788541167e-01 3.509881386748559e-01 3.505418183920974e-01 + 3.500959178484067e-01 3.496504368860180e-01 3.492053753468356e-01 3.487607330724338e-01 3.483165099040590e-01 + 3.478727056826295e-01 3.474293202487349e-01 3.469863534426395e-01 3.465438051042803e-01 3.461016750732708e-01 + 3.456599631888982e-01 3.452186692901267e-01 3.447777932155964e-01 3.443373348036247e-01 3.438972938922089e-01 + 3.434576703190229e-01 3.430184639214210e-01 3.425796745364376e-01 3.421413020007878e-01 3.417033461508684e-01 + 3.412658068227591e-01 3.408286838522205e-01 3.403919770746985e-01 3.399556863253226e-01 3.395198114389070e-01 + 3.390843522499521e-01 3.386493085926442e-01 3.382146803008571e-01 3.377804672081506e-01 3.373466691477754e-01 + 3.369132859526693e-01 3.364803174554597e-01 3.360477634884669e-01 3.356156238836976e-01 3.351838984728560e-01 + 3.347525870873335e-01 3.343216895582179e-01 3.338912057162902e-01 3.334611353920236e-01 3.330314784155899e-01 + 3.326022346168536e-01 3.321734038253784e-01 3.317449858704238e-01 3.313169805809465e-01 3.308893877856031e-01 + 3.304622073127483e-01 3.300354389904374e-01 3.296090826464260e-01 3.291831381081711e-01 3.287576052028312e-01 + 3.283324837572684e-01 3.279077735980464e-01 3.274834745514347e-01 3.270595864434056e-01 3.266361090996378e-01 + 3.262130423455162e-01 3.257903860061323e-01 3.253681399062839e-01 3.249463038704773e-01 3.245248777229282e-01 + 3.241038612875606e-01 3.236832543880099e-01 3.232630568476204e-01 3.228432684894483e-01 3.224238891362634e-01 + 3.220049186105466e-01 3.215863567344919e-01 3.211682033300088e-01 3.207504582187211e-01 3.203331212219665e-01 + 3.199161921608014e-01 3.194996708559962e-01 3.190835571280407e-01 3.186678507971421e-01 3.182525516832264e-01 + 3.178376596059389e-01 3.174231743846448e-01 3.170090958384311e-01 3.165954237861044e-01 3.161821580461963e-01 + 3.157692984369572e-01 3.153568447763648e-01 3.149447968821185e-01 3.145331545716427e-01 3.141219176620886e-01 + 3.137110859703329e-01 3.133006593129781e-01 3.128906375063549e-01 3.124810203665224e-01 3.120718077092681e-01 + 3.116629993501095e-01 3.112545951042929e-01 3.108465947867962e-01 3.104389982123292e-01 3.100318051953336e-01 + 3.096250155499837e-01 3.092186290901864e-01 3.088126456295833e-01 3.084070649815516e-01 3.080018869592031e-01 + 3.075971113753857e-01 3.071927380426839e-01 3.067887667734205e-01 3.063851973796554e-01 3.059820296731870e-01 + 3.055792634655543e-01 3.051768985680359e-01 3.047749347916501e-01 3.043733719471583e-01 3.039722098450628e-01 + 3.035714482956082e-01 3.031710871087840e-01 3.027711260943218e-01 3.023715650617000e-01 3.019724038201406e-01 + 3.015736421786119e-01 3.011752799458296e-01 3.007773169302559e-01 3.003797529401016e-01 2.999825877833255e-01 + 2.995858212676354e-01 2.991894532004912e-01 2.987934833891002e-01 2.983979116404238e-01 2.980027377611728e-01 + 2.976079615578124e-01 2.972135828365602e-01 2.968196014033879e-01 2.964260170640212e-01 2.960328296239420e-01 + 2.956400388883867e-01 2.952476446623498e-01 2.948556467505808e-01 2.944640449575888e-01 2.940728390876413e-01 + 2.936820289447630e-01 2.932916143327394e-01 2.929015950551182e-01 2.925119709152045e-01 2.921227417160683e-01 + 2.917339072605400e-01 2.913454673512138e-01 2.909574217904474e-01 2.905697703803620e-01 2.901825129228457e-01 + 2.897956492195500e-01 2.894091790718942e-01 2.890231022810620e-01 2.886374186480083e-01 2.882521279734530e-01 + 2.878672300578861e-01 2.874827247015674e-01 2.870986117045257e-01 2.867148908665615e-01 2.863315619872462e-01 + 2.859486248659225e-01 2.855660793017081e-01 2.851839250934908e-01 2.848021620399357e-01 2.844207899394790e-01 + 2.840398085903352e-01 2.836592177904930e-01 2.832790173377175e-01 2.828992070295517e-01 2.825197866633166e-01 + 2.821407560361101e-01 2.817621149448114e-01 2.813838631860774e-01 2.810060005563464e-01 2.806285268518375e-01 + 2.802514418685511e-01 2.798747454022703e-01 2.794984372485610e-01 2.791225172027725e-01 2.787469850600381e-01 + 2.783718406152765e-01 2.779970836631914e-01 2.776227139982728e-01 2.772487314147963e-01 2.768751357068266e-01 + 2.765019266682160e-01 2.761291040926038e-01 2.757566677734204e-01 2.753846175038854e-01 2.750129530770083e-01 + 2.746416742855919e-01 2.742707809222268e-01 2.739002727793011e-01 2.735301496489910e-01 2.731604113232701e-01 + 2.727910575939039e-01 2.724220882524545e-01 2.720535030902779e-01 2.716853018985279e-01 2.713174844681541e-01 + 2.709500505899038e-01 2.705830000543224e-01 2.702163326517540e-01 2.698500481723419e-01 2.694841464060294e-01 + 2.691186271425597e-01 2.687534901714791e-01 2.683887352821340e-01 2.680243622636735e-01 2.676603709050501e-01 + 2.672967609950193e-01 2.669335323221427e-01 2.665706846747851e-01 2.662082178411169e-01 2.658461316091154e-01 + 2.654844257665647e-01 2.651231001010558e-01 2.647621543999885e-01 2.644015884505699e-01 2.640414020398177e-01 + 2.636815949545587e-01 2.633221669814316e-01 2.629631179068836e-01 2.626044475171763e-01 2.622461555983829e-01 + 2.618882419363880e-01 2.615307063168919e-01 2.611735485254081e-01 2.608167683472651e-01 2.604603655676072e-01 + 2.601043399713934e-01 2.597486913434020e-01 2.593934194682263e-01 2.590385241302776e-01 2.586840051137867e-01 + 2.583298622028034e-01 2.579760951811965e-01 2.576227038326562e-01 2.572696879406927e-01 2.569170472886380e-01 + 2.565647816596475e-01 2.562128908366965e-01 2.558613746025872e-01 2.555102327399431e-01 2.551594650312133e-01 + 2.548090712586735e-01 2.544590512044224e-01 2.541094046503871e-01 2.537601313783218e-01 2.534112311698070e-01 + 2.530627038062528e-01 2.527145490688978e-01 2.523667667388090e-01 2.520193565968856e-01 2.516723184238555e-01 + 2.513256520002791e-01 2.509793571065478e-01 2.506334335228853e-01 2.502878810293500e-01 2.499426994058326e-01 + 2.495978884320579e-01 2.492534478875870e-01 2.489093775518145e-01 2.485656772039739e-01 2.482223466231313e-01 + 2.478793855881943e-01 2.475367938779053e-01 2.471945712708471e-01 2.468527175454402e-01 2.465112324799459e-01 + 2.461701158524651e-01 2.458293674409401e-01 2.454889870231530e-01 2.451489743767304e-01 2.448093292791402e-01 + 2.444700515076929e-01 2.441311408395442e-01 2.437925970516937e-01 2.434544199209853e-01 2.431166092241098e-01 + 2.427791647376033e-01 2.424420862378482e-01 2.421053735010758e-01 2.417690263033645e-01 2.414330444206402e-01 + 2.410974276286805e-01 2.407621757031096e-01 2.404272884194057e-01 2.400927655528937e-01 2.397586068787531e-01 + 2.394248121720148e-01 2.390913812075613e-01 2.387583137601297e-01 2.384256096043098e-01 2.380932685145460e-01 + 2.377612902651390e-01 2.374296746302436e-01 2.370984213838712e-01 2.367675302998897e-01 2.364370011520252e-01 + 2.361068337138607e-01 2.357770277588382e-01 2.354475830602578e-01 2.351184993912816e-01 2.347897765249294e-01 + 2.344614142340833e-01 2.341334122914859e-01 2.338057704697415e-01 2.334784885413185e-01 2.331515662785476e-01 + 2.328250034536224e-01 2.324987998386010e-01 2.321729552054077e-01 2.318474693258313e-01 2.315223419715254e-01 + 2.311975729140113e-01 2.308731619246784e-01 2.305491087747826e-01 2.302254132354468e-01 2.299020750776660e-01 + 2.295790940723019e-01 2.292564699900866e-01 2.289342026016244e-01 2.286122916773879e-01 2.282907369877251e-01 + 2.279695383028519e-01 2.276486953928603e-01 2.273282080277150e-01 2.270080759772542e-01 2.266882990111898e-01 + 2.263688768991105e-01 2.260498094104794e-01 2.257310963146369e-01 2.254127373807992e-01 2.250947323780591e-01 + 2.247770810753903e-01 2.244597832416420e-01 2.241428386455430e-01 2.238262470557034e-01 2.235100082406102e-01 + 2.231941219686351e-01 2.228785880080282e-01 2.225634061269221e-01 2.222485760933322e-01 2.219340976751560e-01 + 2.216199706401764e-01 2.213061947560577e-01 2.209927697903505e-01 2.206796955104900e-01 2.203669716837984e-01 + 2.200545980774815e-01 2.197425744586344e-01 2.194309005942384e-01 2.191195762511639e-01 2.188086011961671e-01 + 2.184979751958968e-01 2.181876980168889e-01 2.178777694255699e-01 2.175681891882572e-01 2.172589570711599e-01 + 2.169500728403784e-01 2.166415362619054e-01 2.163333471016268e-01 2.160255051253206e-01 2.157180100986615e-01 + 2.154108617872163e-01 2.151040599564475e-01 2.147976043717136e-01 2.144914947982684e-01 2.141857310012641e-01 + 2.138803127457486e-01 2.135752397966674e-01 2.132705119188662e-01 2.129661288770873e-01 2.126620904359741e-01 + 2.123583963600691e-01 2.120550464138151e-01 2.117520403615575e-01 2.114493779675405e-01 2.111470589959129e-01 + 2.108450832107256e-01 2.105434503759312e-01 2.102421602553884e-01 2.099412126128580e-01 2.096406072120067e-01 + 2.093403438164065e-01 2.090404221895345e-01 2.087408420947760e-01 2.084416032954211e-01 2.081427055546675e-01 + 2.078441486356233e-01 2.075459323013027e-01 2.072480563146299e-01 2.069505204384377e-01 2.066533244354705e-01 + 2.063564680683833e-01 2.060599510997398e-01 2.057637732920188e-01 2.054679344076092e-01 2.051724342088134e-01 + 2.048772724578466e-01 2.045824489168381e-01 2.042879633478316e-01 2.039938155127856e-01 2.037000051735744e-01 + 2.034065320919868e-01 2.031133960297296e-01 2.028205967484258e-01 2.025281340096159e-01 2.022360075747585e-01 + 2.019442172052307e-01 2.016527626623291e-01 2.013616437072689e-01 2.010708601011855e-01 2.007804116051363e-01 + 2.004902979800972e-01 2.002005189869689e-01 1.999110743865720e-01 1.996219639396496e-01 1.993331874068694e-01 + 1.990447445488224e-01 1.987566351260229e-01 1.984688588989109e-01 1.981814156278513e-01 1.978943050731339e-01 + 1.976075269949766e-01 1.973210811535225e-01 1.970349673088424e-01 1.967491852209351e-01 1.964637346497272e-01 + 1.961786153550753e-01 1.958938270967636e-01 1.956093696345075e-01 1.953252427279517e-01 1.950414461366723e-01 + 1.947579796201767e-01 1.944748429379045e-01 1.941920358492269e-01 1.939095581134485e-01 1.936274094898069e-01 + 1.933455897374736e-01 1.930640986155543e-01 1.927829358830904e-01 1.925021012990585e-01 1.922215946223688e-01 + 1.919414156118721e-01 1.916615640263520e-01 1.913820396245310e-01 1.911028421650712e-01 1.908239714065701e-01 + 1.905454271075658e-01 1.902672090265351e-01 1.899893169218953e-01 1.897117505520038e-01 1.894345096751582e-01 + 1.891575940495977e-01 1.888810034335047e-01 1.886047375850014e-01 1.883287962621552e-01 1.880531792229748e-01 + 1.877778862254139e-01 1.875029170273709e-01 1.872282713866882e-01 1.869539490611531e-01 1.866799498084994e-01 + 1.864062733864064e-01 1.861329195525012e-01 1.858598880643570e-01 1.855871786794955e-01 1.853147911553862e-01 + 1.850427252494477e-01 1.847709807190468e-01 1.844995573215010e-01 1.842284548140771e-01 1.839576729539936e-01 + 1.836872114984187e-01 1.834170702044722e-01 1.831472488292281e-01 1.828777471297103e-01 1.826085648628968e-01 + 1.823397017857204e-01 1.820711576550648e-01 1.818029322277711e-01 1.815350252606335e-01 1.812674365104026e-01 + 1.810001657337839e-01 1.807332126874409e-01 1.804665771279919e-01 1.802002588120142e-01 1.799342574960414e-01 + 1.796685729365668e-01 1.794032048900415e-01 1.791381531128748e-01 1.788734173614389e-01 1.786089973920626e-01 + 1.783448929610376e-01 1.780811038246156e-01 1.778176297390092e-01 1.775544704603953e-01 1.772916257449107e-01 + 1.770290953486569e-01 1.767668790276984e-01 1.765049765380633e-01 1.762433876357433e-01 1.759821120766968e-01 + 1.757211496168458e-01 1.754605000120784e-01 1.752001630182495e-01 1.749401383911799e-01 1.746804258866586e-01 + 1.744210252604406e-01 1.741619362682507e-01 1.739031586657799e-01 1.736446922086909e-01 1.733865366526132e-01 + 1.731286917531486e-01 1.728711572658675e-01 1.726139329463114e-01 1.723570185499930e-01 1.721004138323974e-01 + 1.718441185489820e-01 1.715881324551753e-01 1.713324553063794e-01 1.710770868579710e-01 1.708220268652999e-01 + 1.705672750836905e-01 1.703128312684414e-01 1.700586951748279e-01 1.698048665580997e-01 1.695513451734831e-01 + 1.692981307761814e-01 1.690452231213756e-01 1.687926219642226e-01 1.685403270598581e-01 1.682883381633964e-01 + 1.680366550299311e-01 1.677852774145344e-01 1.675342050722588e-01 1.672834377581359e-01 1.670329752271799e-01 + 1.667828172343838e-01 1.665329635347252e-01 1.662834138831599e-01 1.660341680346288e-01 1.657852257440554e-01 + 1.655365867663455e-01 1.652882508563902e-01 1.650402177690624e-01 1.647924872592225e-01 1.645450590817131e-01 + 1.642979329913641e-01 1.640511087429918e-01 1.638045860913968e-01 1.635583647913681e-01 1.633124445976817e-01 + 1.630668252651016e-01 1.628215065483780e-01 1.625764882022522e-01 1.623317699814520e-01 1.620873516406972e-01 + 1.618432329346956e-01 1.615994136181455e-01 1.613558934457360e-01 1.611126721721478e-01 1.608697495520529e-01 + 1.606271253401142e-01 1.603847992909883e-01 1.601427711593249e-01 1.599010406997657e-01 1.596596076669457e-01 + 1.594184718154962e-01 1.591776329000409e-01 1.589370906751990e-01 1.586968448955861e-01 1.584568953158120e-01 + 1.582172416904841e-01 1.579778837742047e-01 1.577388213215750e-01 1.575000540871921e-01 1.572615818256517e-01 + 1.570234042915484e-01 1.567855212394746e-01 1.565479324240220e-01 1.563106375997808e-01 1.560736365213435e-01 + 1.558369289433017e-01 1.556005146202470e-01 1.553643933067731e-01 1.551285647574753e-01 1.548930287269509e-01 + 1.546577849697986e-01 1.544228332406219e-01 1.541881732940258e-01 1.539538048846192e-01 1.537197277670161e-01 + 1.534859416958338e-01 1.532524464256952e-01 1.530192417112279e-01 1.527863273070663e-01 1.525537029678490e-01 + 1.523213684482231e-01 1.520893235028403e-01 1.518575678863628e-01 1.516261013534574e-01 1.513949236588008e-01 + 1.511640345570772e-01 1.509334338029804e-01 1.507031211512141e-01 1.504730963564894e-01 1.502433591735304e-01 + 1.500139093570694e-01 1.497847466618507e-01 1.495558708426297e-01 1.493272816541739e-01 1.490989788512621e-01 + 1.488709621886855e-01 1.486432314212500e-01 1.484157863037719e-01 1.481886265910834e-01 1.479617520380304e-01 + 1.477351623994726e-01 1.475088574302843e-01 1.472828368853558e-01 1.470571005195935e-01 1.468316480879186e-01 + 1.466064793452692e-01 1.463815940465994e-01 1.461569919468831e-01 1.459326728011089e-01 1.457086363642838e-01 + 1.454848823914340e-01 1.452614106376053e-01 1.450382208578599e-01 1.448153128072819e-01 1.445926862409746e-01 + 1.443703409140607e-01 1.441482765816843e-01 1.439264929990105e-01 1.437049899212260e-01 1.434837671035389e-01 + 1.432628243011788e-01 1.430421612693997e-01 1.428217777634769e-01 1.426016735387091e-01 1.423818483504199e-01 + 1.421623019539556e-01 1.419430341046870e-01 1.417240445580107e-01 1.415053330693476e-01 1.412868993941451e-01 + 1.410687432878751e-01 1.408508645060363e-01 1.406332628041548e-01 1.404159379377833e-01 1.401988896625017e-01 + 1.399821177339180e-01 1.397656219076674e-01 1.395494019394156e-01 1.393334575848545e-01 1.391177885997074e-01 + 1.389023947397268e-01 1.386872757606943e-01 1.384724314184224e-01 1.382578614687543e-01 1.380435656675653e-01 + 1.378295437707599e-01 1.376157955342758e-01 1.374023207140827e-01 1.371891190661836e-01 1.369761903466122e-01 + 1.367635343114382e-01 1.365511507167630e-01 1.363390393187226e-01 1.361271998734866e-01 1.359156321372607e-01 + 1.357043358662845e-01 1.354933108168334e-01 1.352825567452182e-01 1.350720734077865e-01 1.348618605609217e-01 + 1.346519179610443e-01 1.344422453646124e-01 1.342328425281200e-01 1.340237092081012e-01 1.338148451611273e-01 + 1.336062501438069e-01 1.333979239127904e-01 1.331898662247650e-01 1.329820768364577e-01 1.327745555046373e-01 + 1.325673019861111e-01 1.323603160377283e-01 1.321535974163777e-01 1.319471458789905e-01 1.317409611825399e-01 + 1.315350430840405e-01 1.313293913405493e-01 1.311240057091662e-01 1.309188859470336e-01 1.307140318113391e-01 + 1.305094430593119e-01 1.303051194482263e-01 1.301010607354018e-01 1.298972666782018e-01 1.296937370340339e-01 + 1.294904715603530e-01 1.292874700146588e-01 1.290847321544970e-01 1.288822577374607e-01 1.286800465211891e-01 + 1.284780982633689e-01 1.282764127217333e-01 1.280749896540645e-01 1.278738288181925e-01 1.276729299719949e-01 + 1.274722928734003e-01 1.272719172803841e-01 1.270718029509728e-01 1.268719496432412e-01 1.266723571153156e-01 + 1.264730251253718e-01 1.262739534316377e-01 1.260751417923909e-01 1.258765899659611e-01 1.256782977107294e-01 + 1.254802647851296e-01 1.252824909476478e-01 1.250849759568223e-01 1.248877195712447e-01 1.246907215495615e-01 + 1.244939816504695e-01 1.242974996327227e-01 1.241012752551286e-01 1.239053082765492e-01 1.237095984559012e-01 + 1.235141455521565e-01 1.233189493243436e-01 1.231240095315461e-01 1.229293259329048e-01 1.227348982876164e-01 + 1.225407263549334e-01 1.223468098941680e-01 1.221531486646889e-01 1.219597424259213e-01 1.217665909373507e-01 + 1.215736939585204e-01 1.213810512490305e-01 1.211886625685445e-01 1.209965276767804e-01 1.208046463335197e-01 + 1.206130182986023e-01 1.204216433319289e-01 1.202305211934601e-01 1.200396516432187e-01 1.198490344412880e-01 + 1.196586693478126e-01 1.194685561230006e-01 1.192786945271197e-01 1.190890843205029e-01 1.188997252635442e-01 + 1.187106171167008e-01 1.185217596404941e-01 1.183331525955089e-01 1.181447957423934e-01 1.179566888418623e-01 + 1.177688316546917e-01 1.175812239417248e-01 1.173938654638699e-01 1.172067559820999e-01 1.170198952574548e-01 + 1.168332830510397e-01 1.166469191240259e-01 1.164608032376522e-01 1.162749351532250e-01 1.160893146321165e-01 + 1.159039414357676e-01 1.157188153256858e-01 1.155339360634491e-01 1.153493034107013e-01 1.151649171291566e-01 + 1.149807769805984e-01 1.147968827268796e-01 1.146132341299209e-01 1.144298309517146e-01 1.142466729543235e-01 + 1.140637598998791e-01 1.138810915505867e-01 1.136986676687199e-01 1.135164880166243e-01 1.133345523567180e-01 + 1.131528604514913e-01 1.129714120635051e-01 1.127902069553948e-01 1.126092448898663e-01 1.124285256297014e-01 + 1.122480489377530e-01 1.120678145769488e-01 1.118878223102901e-01 1.117080719008529e-01 1.115285631117864e-01 + 1.113492957063161e-01 1.111702694477414e-01 1.109914840994383e-01 1.108129394248575e-01 1.106346351875251e-01 + 1.104565711510452e-01 1.102787470790967e-01 1.101011627354352e-01 1.099238178838954e-01 1.097467122883864e-01 + 1.095698457128964e-01 1.093932179214913e-01 1.092168286783156e-01 1.090406777475911e-01 1.088647648936190e-01 + 1.086890898807788e-01 1.085136524735300e-01 1.083384524364101e-01 1.081634895340389e-01 1.079887635311131e-01 + 1.078142741924122e-01 1.076400212827943e-01 1.074660045672001e-01 1.072922238106496e-01 1.071186787782450e-01 + 1.069453692351707e-01 1.067722949466921e-01 1.065994556781558e-01 1.064268511949941e-01 1.062544812627173e-01 + 1.060823456469228e-01 1.059104441132881e-01 1.057387764275756e-01 1.055673423556319e-01 1.053961416633867e-01 + 1.052251741168536e-01 1.050544394821309e-01 1.048839375254021e-01 1.047136680129355e-01 1.045436307110844e-01 + 1.043738253862878e-01 1.042042518050696e-01 1.040349097340416e-01 1.038657989398996e-01 1.036969191894269e-01 + 1.035282702494945e-01 1.033598518870589e-01 1.031916638691649e-01 1.030237059629436e-01 1.028559779356158e-01 + 1.026884795544882e-01 1.025212105869567e-01 1.023541708005063e-01 1.021873599627101e-01 1.020207778412294e-01 + 1.018544242038169e-01 1.016882988183130e-01 1.015224014526476e-01 1.013567318748423e-01 1.011912898530077e-01 + 1.010260751553449e-01 1.008610875501469e-01 1.006963268057950e-01 1.005317926907653e-01 1.003674849736218e-01 + 1.002034034230231e-01 1.000395478077181e-01 9.987591789654780e-02 9.971251345844698e-02 9.954933426244125e-02 + 9.938638007764994e-02 9.922365067328646e-02 9.906114581865591e-02 9.889886528315754e-02 9.873680883628547e-02 + 9.857497624762653e-02 9.841336728686208e-02 9.825198172376917e-02 9.809081932821735e-02 9.792987987017401e-02 + 9.776916311969899e-02 9.760866884694980e-02 9.744839682217774e-02 9.728834681573258e-02 9.712851859805698e-02 + 9.696891193969276e-02 9.680952661127736e-02 9.665036238354409e-02 9.649141902732546e-02 9.633269631354829e-02 + 9.617419401324032e-02 9.601591189752484e-02 9.585784973762296e-02 9.570000730485571e-02 9.554238437064018e-02 + 9.538498070649509e-02 9.522779608403464e-02 9.507083027497541e-02 9.491408305113043e-02 9.475755418441414e-02 + 9.460124344684000e-02 9.444515061052126e-02 9.428927544767225e-02 9.413361773060668e-02 9.397817723173911e-02 + 9.382295372358590e-02 9.366794697876325e-02 9.351315676998900e-02 9.335858287008275e-02 9.320422505196591e-02 + 9.305008308866132e-02 9.289615675329434e-02 9.274244581909208e-02 9.258895005938572e-02 9.243566924760703e-02 + 9.228260315729252e-02 9.212975156208111e-02 9.197711423571521e-02 9.182469095204157e-02 9.167248148500988e-02 + 9.152048560867383e-02 9.136870309719233e-02 9.121713372482762e-02 9.106577726594742e-02 9.091463349502378e-02 + 9.076370218663352e-02 9.061298311546082e-02 9.046247605629219e-02 9.031218078402289e-02 9.016209707365150e-02 + 9.001222470028415e-02 8.986256343913364e-02 8.971311306551767e-02 8.956387335486245e-02 8.941484408269981e-02 + 8.926602502466938e-02 8.911741595651761e-02 8.896901665409843e-02 8.882082689337470e-02 8.867284645041515e-02 + 8.852507510139924e-02 8.837751262261156e-02 8.823015879044772e-02 8.808301338141127e-02 8.793607617211446e-02 + 8.778934693927805e-02 8.764282545973402e-02 8.749651151042169e-02 8.735040486839081e-02 8.720450531080169e-02 + 8.705881261492446e-02 8.691332655813792e-02 8.676804691793320e-02 8.662297347191195e-02 8.647810599778565e-02 + 8.633344427337754e-02 8.618898807662081e-02 8.604473718556219e-02 8.590069137835830e-02 8.575685043327749e-02 + 8.561321412870182e-02 8.546978224312321e-02 8.532655455514768e-02 8.518353084349259e-02 8.504071088698810e-02 + 8.489809446457885e-02 8.475568135531987e-02 8.461347133838226e-02 8.447146419304774e-02 8.432965969871346e-02 + 8.418805763489025e-02 8.404665778120257e-02 8.390545991738911e-02 8.376446382330226e-02 8.362366927890992e-02 + 8.348307606429477e-02 8.334268395965257e-02 8.320249274529654e-02 8.306250220165345e-02 8.292271210926622e-02 + 8.278312224879276e-02 8.264373240100760e-02 8.250454234680088e-02 8.236555186717760e-02 8.222676074326088e-02 + 8.208816875628919e-02 8.194977568761792e-02 8.181158131871981e-02 8.167358543118301e-02 8.153578780671458e-02 + 8.139818822713811e-02 8.126078647439403e-02 8.112358233054157e-02 8.098657557775711e-02 8.084976599833528e-02 + 8.071315337468798e-02 8.057673748934711e-02 8.044051812496189e-02 8.030449506430019e-02 8.016866809024924e-02 + 8.003303698581497e-02 7.989760153412183e-02 7.976236151841422e-02 7.962731672205711e-02 7.949246692853296e-02 + 7.935781192144453e-02 7.922335148451654e-02 7.908908540159118e-02 7.895501345663296e-02 7.882113543372496e-02 + 7.868745111707288e-02 7.855396029100163e-02 7.842066273995724e-02 7.828755824850811e-02 7.815464660134269e-02 + 7.802192758327056e-02 7.788940097922308e-02 7.775706657425528e-02 7.762492415354082e-02 7.749297350237767e-02 + 7.736121440618510e-02 7.722964665050465e-02 7.709827002100095e-02 7.696708430346043e-02 7.683608928379389e-02 + 7.670528474803258e-02 7.657467048233327e-02 7.644424627297415e-02 7.631401190635798e-02 7.618396716901024e-02 + 7.605411184758187e-02 7.592444572884496e-02 7.579496859969717e-02 7.566568024716050e-02 7.553658045838056e-02 + 7.540766902062793e-02 7.527894572129755e-02 7.515041034790855e-02 7.502206268810578e-02 7.489390252965893e-02 + 7.476592966046258e-02 7.463814386853636e-02 7.451054494202597e-02 7.438313266920277e-02 7.425590683846357e-02 + 7.412886723833031e-02 7.400201365745282e-02 7.387534588460472e-02 7.374886370868754e-02 7.362256691872980e-02 + 7.349645530388434e-02 7.337052865343258e-02 7.324478675678282e-02 7.311922940346886e-02 7.299385638315332e-02 + 7.286866748562490e-02 7.274366250080050e-02 7.261884121872426e-02 7.249420342956742e-02 7.236974892362961e-02 + 7.224547749133943e-02 7.212138892325144e-02 7.199748301004981e-02 7.187375954254648e-02 7.175021831168232e-02 + 7.162685910852673e-02 7.150368172427798e-02 7.138068595026226e-02 7.125787157793585e-02 7.113523839888364e-02 + 7.101278620481988e-02 7.089051478758880e-02 7.076842393916320e-02 7.064651345164547e-02 7.052478311726892e-02 + 7.040323272839584e-02 7.028186207751887e-02 7.016067095726068e-02 7.003965916037465e-02 6.991882647974333e-02 + 6.979817270838114e-02 6.967769763943314e-02 6.955740106617377e-02 6.943728278201038e-02 6.931734258047911e-02 + 6.919758025524873e-02 6.907799560011899e-02 6.895858840902157e-02 6.883935847601874e-02 6.872030559530402e-02 + 6.860142956120464e-02 6.848273016817703e-02 6.836420721081214e-02 6.824586048383144e-02 6.812768978208955e-02 + 6.800969490057214e-02 6.789187563439816e-02 6.777423177882019e-02 6.765676312922145e-02 6.753946948111943e-02 + 6.742235063016358e-02 6.730540637213692e-02 6.718863650295635e-02 6.707204081867049e-02 6.695561911546238e-02 + 6.683937118964749e-02 6.672329683767635e-02 6.660739585613246e-02 6.649166804173308e-02 6.637611319132937e-02 + 6.626073110190654e-02 6.614552157058440e-02 6.603048439461572e-02 6.591561937139018e-02 6.580092629842874e-02 + 6.568640497338905e-02 6.557205519406327e-02 6.545787675837786e-02 6.534386946439420e-02 6.523003311030823e-02 + 6.511636749445301e-02 6.500287241529389e-02 6.488954767143396e-02 6.477639306161019e-02 6.466340838469585e-02 + 6.455059343970032e-02 6.443794802576742e-02 6.432547194217716e-02 6.421316498834705e-02 6.410102696382836e-02 + 6.398905766830912e-02 6.387725690161559e-02 6.376562446370711e-02 6.365416015468170e-02 6.354286377477433e-02 + 6.343173512435428e-02 6.332077400392887e-02 6.320998021414370e-02 6.309935355577792e-02 6.298889382975151e-02 + 6.287860083711863e-02 6.276847437907243e-02 6.265851425694195e-02 6.254872027219480e-02 6.243909222643552e-02 + 6.232962992140653e-02 6.222033315898774e-02 6.211120174119685e-02 6.200223547018939e-02 6.189343414825904e-02 + 6.178479757783759e-02 6.167632556149458e-02 6.156801790193815e-02 6.145987440201451e-02 6.135189486470850e-02 + 6.124407909314349e-02 6.113642689058121e-02 6.102893806042227e-02 6.092161240620589e-02 6.081444973161033e-02 + 6.070744984045263e-02 6.060061253668905e-02 6.049393762441481e-02 6.038742490786434e-02 6.028107419141133e-02 + 6.017488527956895e-02 6.006885797698998e-02 5.996299208846637e-02 5.985728741892989e-02 5.975174377345195e-02 + 5.964636095724386e-02 5.954113877565684e-02 5.943607703418188e-02 5.933117553845009e-02 5.922643409423262e-02 + 5.912185250744099e-02 5.901743058412699e-02 5.891316813048256e-02 5.880906495284029e-02 5.870512085767296e-02 + 5.860133565159446e-02 5.849770914135879e-02 5.839424113386129e-02 5.829093143613754e-02 5.818777985536438e-02 + 5.808478619885944e-02 5.798195027408155e-02 5.787927188863066e-02 5.777675085024783e-02 5.767438696681541e-02 + 5.757218004635708e-02 5.747012989703802e-02 5.736823632716495e-02 5.726649914518603e-02 5.716491815969112e-02 + 5.706349317941162e-02 5.696222401322115e-02 5.686111047013469e-02 5.676015235930957e-02 5.665934949004476e-02 + 5.655870167178147e-02 5.645820871410302e-02 5.635787042673490e-02 5.625768661954506e-02 5.615765710254351e-02 + 5.605778168588283e-02 5.595806017985791e-02 5.585849239490642e-02 5.575907814160858e-02 5.565981723068713e-02 + 5.556070947300771e-02 5.546175467957849e-02 5.536295266155087e-02 5.526430323021909e-02 5.516580619702026e-02 + 5.506746137353453e-02 5.496926857148521e-02 5.487122760273896e-02 5.477333827930546e-02 5.467560041333785e-02 + 5.457801381713258e-02 5.448057830312946e-02 5.438329368391182e-02 5.428615977220666e-02 5.418917638088458e-02 + 5.409234332295967e-02 5.399566041158989e-02 5.389912746007679e-02 5.380274428186612e-02 5.370651069054730e-02 + 5.361042649985374e-02 5.351449152366280e-02 5.341870557599597e-02 5.332306847101894e-02 5.322758002304143e-02 + 5.313224004651761e-02 5.303704835604573e-02 5.294200476636851e-02 5.284710909237295e-02 5.275236114909065e-02 + 5.265776075169771e-02 5.256330771551469e-02 5.246900185600681e-02 5.237484298878387e-02 5.228083092960058e-02 + 5.218696549435629e-02 5.209324649909523e-02 5.199967376000637e-02 5.190624709342363e-02 5.181296631582597e-02 + 5.171983124383753e-02 5.162684169422720e-02 5.153399748390908e-02 5.144129842994243e-02 5.134874434953189e-02 + 5.125633506002712e-02 5.116407037892325e-02 5.107195012386069e-02 5.097997411262521e-02 5.088814216314804e-02 + 5.079645409350596e-02 5.070490972192128e-02 5.061350886676187e-02 5.052225134654108e-02 5.043113697991806e-02 + 5.034016558569764e-02 5.024933698283059e-02 5.015865099041313e-02 5.006810742768746e-02 4.997770611404170e-02 + 4.988744686900989e-02 4.979732951227194e-02 4.970735386365389e-02 4.961751974312771e-02 4.952782697081142e-02 + 4.943827536696937e-02 4.934886475201177e-02 4.925959494649528e-02 4.917046577112270e-02 4.908147704674309e-02 + 4.899262859435168e-02 4.890392023509032e-02 4.881535179024721e-02 4.872692308125674e-02 4.863863392969997e-02 + 4.855048415730427e-02 4.846247358594373e-02 4.837460203763899e-02 4.828686933455715e-02 4.819927529901200e-02 + 4.811181975346400e-02 4.802450252052035e-02 4.793732342293487e-02 4.785028228360837e-02 4.776337892558823e-02 + 4.767661317206874e-02 4.758998484639095e-02 4.750349377204301e-02 4.741713977265999e-02 4.733092267202366e-02 + 4.724484229406293e-02 4.715889846285370e-02 4.707309100261897e-02 4.698741973772886e-02 4.690188449270040e-02 + 4.681648509219788e-02 4.673122136103263e-02 4.664609312416333e-02 4.656110020669590e-02 4.647624243388327e-02 + 4.639151963112578e-02 4.630693162397099e-02 4.622247823811394e-02 4.613815929939678e-02 4.605397463380928e-02 + 4.596992406748844e-02 4.588600742671866e-02 4.580222453793175e-02 4.571857522770720e-02 4.563505932277185e-02 + 4.555167665000001e-02 4.546842703641361e-02 4.538531030918200e-02 4.530232629562224e-02 4.521947482319904e-02 + 4.513675571952460e-02 4.505416881235877e-02 4.497171392960905e-02 4.488939089933080e-02 4.480719954972680e-02 + 4.472513970914786e-02 4.464321120609229e-02 4.456141386920624e-02 4.447974752728358e-02 4.439821200926614e-02 + 4.431680714424342e-02 4.423553276145283e-02 4.415438869027951e-02 4.407337476025656e-02 4.399249080106498e-02 + 4.391173664253364e-02 4.383111211463933e-02 4.375061704750673e-02 4.367025127140842e-02 4.359001461676502e-02 + 4.350990691414525e-02 4.342992799426557e-02 4.335007768799056e-02 4.327035582633267e-02 4.319076224045273e-02 + 4.311129676165918e-02 4.303195922140893e-02 4.295274945130653e-02 4.287366728310493e-02 4.279471254870493e-02 + 4.271588508015561e-02 4.263718470965416e-02 4.255861126954581e-02 4.248016459232381e-02 4.240184451062970e-02 + 4.232365085725320e-02 4.224558346513210e-02 4.216764216735236e-02 4.208982679714814e-02 4.201213718790169e-02 + 4.193457317314362e-02 4.185713458655257e-02 4.177982126195552e-02 4.170263303332759e-02 4.162556973479205e-02 + 4.154863120062045e-02 4.147181726523266e-02 4.139512776319668e-02 4.131856252922880e-02 4.124212139819342e-02 + 4.116580420510335e-02 4.108961078511960e-02 4.101354097355144e-02 4.093759460585639e-02 4.086177151764019e-02 + 4.078607154465683e-02 4.071049452280871e-02 4.063504028814641e-02 4.055970867686878e-02 4.048449952532289e-02 + 4.040941267000411e-02 4.033444794755624e-02 4.025960519477109e-02 4.018488424858895e-02 4.011028494609837e-02 + 4.003580712453604e-02 3.996145062128702e-02 3.988721527388461e-02 3.981310092001050e-02 3.973910739749454e-02 + 3.966523454431485e-02 3.959148219859770e-02 3.951785019861791e-02 3.944433838279841e-02 3.937094658971043e-02 + 3.929767465807329e-02 3.922452242675468e-02 3.915148973477064e-02 3.907857642128529e-02 3.900578232561114e-02 + 3.893310728720878e-02 3.886055114568715e-02 3.878811374080323e-02 3.871579491246244e-02 3.864359450071839e-02 + 3.857151234577273e-02 3.849954828797544e-02 3.842770216782455e-02 3.835597382596646e-02 3.828436310319572e-02 + 3.821286984045495e-02 3.814149387883489e-02 3.807023505957453e-02 3.799909322406100e-02 3.792806821382960e-02 + 3.785715987056366e-02 3.778636803609461e-02 3.771569255240202e-02 3.764513326161367e-02 3.757469000600518e-02 + 3.750436262800053e-02 3.743415097017155e-02 3.736405487523818e-02 3.729407418606832e-02 3.722420874567802e-02 + 3.715445839723137e-02 3.708482298404037e-02 3.701530234956497e-02 3.694589633741310e-02 3.687660479134074e-02 + 3.680742755525190e-02 3.673836447319825e-02 3.666941538937959e-02 3.660058014814346e-02 3.653185859398554e-02 + 3.646325057154911e-02 3.639475592562551e-02 3.632637450115382e-02 3.625810614322090e-02 3.618995069706160e-02 + 3.612190800805836e-02 3.605397792174155e-02 3.598616028378923e-02 3.591845494002718e-02 3.585086173642891e-02 + 3.578338051911566e-02 3.571601113435646e-02 3.564875342856781e-02 3.558160724831399e-02 3.551457244030676e-02 + 3.544764885140575e-02 3.538083632861801e-02 3.531413471909822e-02 3.524754387014850e-02 3.518106362921859e-02 + 3.511469384390579e-02 3.504843436195476e-02 3.498228503125778e-02 3.491624569985452e-02 3.485031621593195e-02 + 3.478449642782455e-02 3.471878618401417e-02 3.465318533313019e-02 3.458769372394899e-02 3.452231120539447e-02 + 3.445703762653769e-02 3.439187283659716e-02 3.432681668493857e-02 3.426186902107471e-02 3.419702969466565e-02 + 3.413229855551856e-02 3.406767545358790e-02 3.400316023897502e-02 3.393875276192865e-02 3.387445287284434e-02 + 3.381026042226468e-02 3.374617526087952e-02 3.368219723952536e-02 3.361832620918598e-02 3.355456202099187e-02 + 3.349090452622049e-02 3.342735357629614e-02 3.336390902279002e-02 3.330057071742024e-02 3.323733851205150e-02 + 3.317421225869542e-02 3.311119180951021e-02 3.304827701680088e-02 3.298546773301923e-02 3.292276381076348e-02 + 3.286016510277862e-02 3.279767146195605e-02 3.273528274133401e-02 3.267299879409696e-02 3.261081947357614e-02 + 3.254874463324902e-02 3.248677412673959e-02 3.242490780781821e-02 3.236314553040164e-02 3.230148714855306e-02 + 3.223993251648181e-02 3.217848148854351e-02 3.211713391924007e-02 3.205588966321957e-02 3.199474857527639e-02 + 3.193371051035084e-02 3.187277532352945e-02 3.181194287004474e-02 3.175121300527541e-02 3.169058558474602e-02 + 3.163006046412720e-02 3.156963749923540e-02 3.150931654603296e-02 3.144909746062825e-02 3.138898009927525e-02 + 3.132896431837392e-02 3.126904997446978e-02 3.120923692425420e-02 3.114952502456412e-02 3.108991413238225e-02 + 3.103040410483682e-02 3.097099479920163e-02 3.091168607289601e-02 3.085247778348474e-02 3.079336978867808e-02 + 3.073436194633185e-02 3.067545411444700e-02 3.061664615116992e-02 3.055793791479227e-02 3.049932926375105e-02 + 3.044082005662837e-02 3.038241015215162e-02 3.032409940919322e-02 3.026588768677075e-02 3.020777484404678e-02 + 3.014976074032899e-02 3.009184523507004e-02 3.003402818786739e-02 2.997630945846348e-02 2.991868890674557e-02 + 2.986116639274578e-02 2.980374177664100e-02 2.974641491875273e-02 2.968918567954729e-02 2.963205391963545e-02 + 2.957501949977276e-02 2.951808228085934e-02 2.946124212393966e-02 2.940449889020270e-02 2.934785244098188e-02 + 2.929130263775508e-02 2.923484934214431e-02 2.917849241591612e-02 2.912223172098112e-02 2.906606711939417e-02 + 2.900999847335420e-02 2.895402564520441e-02 2.889814849743199e-02 2.884236689266812e-02 2.878668069368797e-02 + 2.873108976341048e-02 2.867559396489877e-02 2.862019316135960e-02 2.856488721614354e-02 2.850967599274484e-02 + 2.845455935480147e-02 2.839953716609519e-02 2.834460929055108e-02 2.828977559223799e-02 2.823503593536820e-02 + 2.818039018429734e-02 2.812583820352457e-02 2.807137985769232e-02 2.801701501158639e-02 2.796274353013577e-02 + 2.790856527841271e-02 2.785448012163248e-02 2.780048792515359e-02 2.774658855447765e-02 2.769278187524912e-02 + 2.763906775325542e-02 2.758544605442698e-02 2.753191664483701e-02 2.747847939070157e-02 2.742513415837943e-02 + 2.737188081437201e-02 2.731871922532344e-02 2.726564925802046e-02 2.721267077939226e-02 2.715978365651062e-02 + 2.710698775658973e-02 2.705428294698613e-02 2.700166909519859e-02 2.694914606886840e-02 2.689671373577893e-02 + 2.684437196385573e-02 2.679212062116645e-02 2.673995957592078e-02 2.668788869647051e-02 2.663590785130934e-02 + 2.658401690907286e-02 2.653221573853852e-02 2.648050420862550e-02 2.642888218839482e-02 2.637734954704907e-02 + 2.632590615393258e-02 2.627455187853117e-02 2.622328659047220e-02 2.617211015952437e-02 2.612102245559803e-02 + 2.607002334874467e-02 2.601911270915717e-02 2.596829040716955e-02 2.591755631325705e-02 2.586691029803604e-02 + 2.581635223226402e-02 2.576588198683934e-02 2.571549943280137e-02 2.566520444133035e-02 2.561499688374738e-02 + 2.556487663151437e-02 2.551484355623383e-02 2.546489752964897e-02 2.541503842364360e-02 2.536526611024213e-02 + 2.531558046160929e-02 2.526598135005041e-02 2.521646864801105e-02 2.516704222807709e-02 2.511770196297464e-02 + 2.506844772557006e-02 2.501927938886981e-02 2.497019682602032e-02 2.492119991030810e-02 2.487228851515949e-02 + 2.482346251414088e-02 2.477472178095836e-02 2.472606618945776e-02 2.467749561362466e-02 2.462900992758417e-02 + 2.458060900560113e-02 2.453229272207970e-02 2.448406095156366e-02 2.443591356873605e-02 2.438785044841923e-02 + 2.433987146557491e-02 2.429197649530386e-02 2.424416541284614e-02 2.419643809358074e-02 2.414879441302571e-02 + 2.410123424683799e-02 2.405375747081346e-02 2.400636396088687e-02 2.395905359313154e-02 2.391182624375964e-02 + 2.386468178912182e-02 2.381762010570739e-02 2.377064107014414e-02 2.372374455919827e-02 2.367693044977429e-02 + 2.363019861891504e-02 2.358354894380167e-02 2.353698130175332e-02 2.349049557022748e-02 2.344409162681937e-02 + 2.339776934926244e-02 2.335152861542784e-02 2.330536930332469e-02 2.325929129109989e-02 2.321329445703792e-02 + 2.316737867956098e-02 2.312154383722880e-02 2.307578980873863e-02 2.303011647292517e-02 2.298452370876049e-02 + 2.293901139535392e-02 2.289357941195195e-02 2.284822763793841e-02 2.280295595283414e-02 2.275776423629699e-02 + 2.271265236812174e-02 2.266762022824008e-02 2.262266769672057e-02 2.257779465376847e-02 2.253300097972579e-02 + 2.248828655507105e-02 2.244365126041943e-02 2.239909497652243e-02 2.235461758426810e-02 2.231021896468079e-02 + 2.226589899892109e-02 2.222165756828580e-02 2.217749455420780e-02 2.213340983825609e-02 2.208940330213568e-02 + 2.204547482768741e-02 2.200162429688798e-02 2.195785159184988e-02 2.191415659482132e-02 2.187053918818612e-02 + 2.182699925446367e-02 2.178353667630882e-02 2.174015133651188e-02 2.169684311799842e-02 2.165361190382941e-02 + 2.161045757720092e-02 2.156738002144419e-02 2.152437912002551e-02 2.148145475654605e-02 2.143860681474209e-02 + 2.139583517848464e-02 2.135313973177946e-02 2.131052035876701e-02 2.126797694372233e-02 2.122550937105510e-02 + 2.118311752530948e-02 2.114080129116389e-02 2.109856055343118e-02 2.105639519705838e-02 2.101430510712685e-02 + 2.097229016885181e-02 2.093035026758276e-02 2.088848528880298e-02 2.084669511812965e-02 2.080497964131383e-02 + 2.076333874424025e-02 2.072177231292733e-02 2.068028023352706e-02 2.063886239232489e-02 2.059751867573969e-02 + 2.055624897032378e-02 2.051505316276277e-02 2.047393113987528e-02 2.043288278861326e-02 2.039190799606156e-02 + 2.035100664943814e-02 2.031017863609374e-02 2.026942384351203e-02 2.022874215930932e-02 2.018813347123464e-02 + 2.014759766716960e-02 2.010713463512833e-02 2.006674426325743e-02 2.002642643983582e-02 1.998618105327470e-02 + 1.994600799211741e-02 1.990590714503957e-02 1.986587840084881e-02 1.982592164848464e-02 1.978603677701852e-02 + 1.974622367565370e-02 1.970648223372523e-02 1.966681234069982e-02 1.962721388617567e-02 1.958768675988257e-02 + 1.954823085168165e-02 1.950884605156553e-02 1.946953224965790e-02 1.943028933621385e-02 1.939111720161943e-02 + 1.935201573639177e-02 1.931298483117888e-02 1.927402437675976e-02 1.923513426404419e-02 1.919631438407257e-02 + 1.915756462801598e-02 1.911888488717604e-02 1.908027505298486e-02 1.904173501700498e-02 1.900326467092919e-02 + 1.896486390658049e-02 1.892653261591207e-02 1.888827069100726e-02 1.885007802407922e-02 1.881195450747120e-02 + 1.877390003365612e-02 1.873591449523674e-02 1.869799778494542e-02 1.866014979564416e-02 1.862237042032451e-02 + 1.858465955210731e-02 1.854701708424281e-02 1.850944291011052e-02 1.847193692321911e-02 1.843449901720641e-02 + 1.839712908583917e-02 1.835982702301311e-02 1.832259272275277e-02 1.828542607921151e-02 1.824832698667137e-02 + 1.821129533954295e-02 1.817433103236538e-02 1.813743395980618e-02 1.810060401666136e-02 1.806384109785505e-02 + 1.802714509843967e-02 1.799051591359570e-02 1.795395343863162e-02 1.791745756898384e-02 1.788102820021669e-02 + 1.784466522802225e-02 1.780836854822025e-02 1.777213805675804e-02 1.773597364971046e-02 1.769987522327984e-02 + 1.766384267379585e-02 1.762787589771540e-02 1.759197479162257e-02 1.755613925222856e-02 1.752036917637160e-02 + 1.748466446101681e-02 1.744902500325621e-02 1.741345070030855e-02 1.737794144951918e-02 1.734249714836013e-02 + 1.730711769442992e-02 1.727180298545352e-02 1.723655291928215e-02 1.720136739389334e-02 1.716624630739074e-02 + 1.713118955800411e-02 1.709619704408924e-02 1.706126866412775e-02 1.702640431672713e-02 1.699160390062053e-02 + 1.695686731466684e-02 1.692219445785053e-02 1.688758522928144e-02 1.685303952819490e-02 1.681855725395140e-02 + 1.678413830603687e-02 1.674978258406216e-02 1.671548998776335e-02 1.668126041700129e-02 1.664709377176185e-02 + 1.661298995215557e-02 1.657894885841778e-02 1.654497039090840e-02 1.651105445011187e-02 1.647720093663701e-02 + 1.644340975121703e-02 1.640968079470945e-02 1.637601396809589e-02 1.634240917248211e-02 1.630886630909784e-02 + 1.627538527929666e-02 1.624196598455614e-02 1.620860832647740e-02 1.617531220678537e-02 1.614207752732841e-02 + 1.610890419007842e-02 1.607579209713067e-02 1.604274115070368e-02 1.600975125313930e-02 1.597682230690236e-02 + 1.594395421458081e-02 1.591114687888548e-02 1.587840020265006e-02 1.584571408883111e-02 1.581308844050772e-02 + 1.578052316088166e-02 1.574801815327709e-02 1.571557332114071e-02 1.568318856804151e-02 1.565086379767065e-02 + 1.561859891384147e-02 1.558639382048930e-02 1.555424842167157e-02 1.552216262156743e-02 1.549013632447795e-02 + 1.545816943482578e-02 1.542626185715522e-02 1.539441349613207e-02 1.536262425654359e-02 1.533089404329835e-02 + 1.529922276142617e-02 1.526761031607801e-02 1.523605661252587e-02 1.520456155616278e-02 1.517312505250267e-02 + 1.514174700718018e-02 1.511042732595070e-02 1.507916591469021e-02 1.504796267939523e-02 1.501681752618278e-02 + 1.498573036129008e-02 1.495470109107468e-02 1.492372962201427e-02 1.489281586070665e-02 1.486195971386951e-02 + 1.483116108834055e-02 1.480041989107714e-02 1.476973602915645e-02 1.473910940977514e-02 1.470853994024954e-02 + 1.467802752801534e-02 1.464757208062756e-02 1.461717350576047e-02 1.458683171120747e-02 1.455654660488108e-02 + 1.452631809481281e-02 1.449614608915297e-02 1.446603049617069e-02 1.443597122425380e-02 1.440596818190877e-02 + 1.437602127776049e-02 1.434613042055241e-02 1.431629551914620e-02 1.428651648252179e-02 1.425679321977723e-02 + 1.422712564012869e-02 1.419751365291029e-02 1.416795716757397e-02 1.413845609368946e-02 1.410901034094416e-02 + 1.407961981914309e-02 1.405028443820881e-02 1.402100410818119e-02 1.399177873921743e-02 1.396260824159200e-02 + 1.393349252569648e-02 1.390443150203946e-02 1.387542508124651e-02 1.384647317405998e-02 1.381757569133904e-02 + 1.378873254405951e-02 1.375994364331371e-02 1.373120890031058e-02 1.370252822637531e-02 1.367390153294943e-02 + 1.364532873159062e-02 1.361680973397271e-02 1.358834445188560e-02 1.355993279723497e-02 1.353157468204240e-02 + 1.350327001844514e-02 1.347501871869618e-02 1.344682069516396e-02 1.341867586033241e-02 1.339058412680079e-02 + 1.336254540728360e-02 1.333455961461055e-02 1.330662666172639e-02 1.327874646169089e-02 1.325091892767864e-02 + 1.322314397297907e-02 1.319542151099625e-02 1.316775145524890e-02 1.314013371937028e-02 1.311256821710795e-02 + 1.308505486232389e-02 1.305759356899425e-02 1.303018425120931e-02 1.300282682317344e-02 1.297552119920489e-02 + 1.294826729373576e-02 1.292106502131191e-02 1.289391429659287e-02 1.286681503435175e-02 1.283976714947509e-02 + 1.281277055696279e-02 1.278582517192804e-02 1.275893090959727e-02 1.273208768530988e-02 1.270529541451842e-02 + 1.267855401278819e-02 1.265186339579736e-02 1.262522347933680e-02 1.259863417930998e-02 1.257209541173294e-02 + 1.254560709273409e-02 1.251916913855416e-02 1.249278146554613e-02 1.246644399017512e-02 1.244015662901833e-02 + 1.241391929876483e-02 1.238773191621557e-02 1.236159439828326e-02 1.233550666199231e-02 1.230946862447860e-02 + 1.228348020298958e-02 1.225754131488399e-02 1.223165187763192e-02 1.220581180881456e-02 1.218002102612427e-02 + 1.215427944736436e-02 1.212858699044902e-02 1.210294357340328e-02 1.207734911436282e-02 1.205180353157398e-02 + 1.202630674339358e-02 1.200085866828889e-02 1.197545922483743e-02 1.195010833172700e-02 1.192480590775552e-02 + 1.189955187183097e-02 1.187434614297120e-02 1.184918864030394e-02 1.182407928306664e-02 1.179901799060644e-02 + 1.177400468237997e-02 1.174903927795340e-02 1.172412169700217e-02 1.169925185931104e-02 1.167442968477387e-02 + 1.164965509339370e-02 1.162492800528245e-02 1.160024834066097e-02 1.157561601985885e-02 1.155103096331436e-02 + 1.152649309157442e-02 1.150200232529439e-02 1.147755858523803e-02 1.145316179227743e-02 1.142881186739280e-02 + 1.140450873167257e-02 1.138025230631309e-02 1.135604251261868e-02 1.133187927200143e-02 1.130776250598114e-02 + 1.128369213618532e-02 1.125966808434890e-02 1.123569027231431e-02 1.121175862203126e-02 1.118787305555674e-02 + 1.116403349505484e-02 1.114023986279671e-02 1.111649208116048e-02 1.109279007263106e-02 1.106913375980015e-02 + 1.104552306536607e-02 1.102195791213375e-02 1.099843822301458e-02 1.097496392102625e-02 1.095153492929275e-02 + 1.092815117104425e-02 1.090481256961699e-02 1.088151904845316e-02 1.085827053110086e-02 1.083506694121396e-02 + 1.081190820255199e-02 1.078879423898010e-02 1.076572497446891e-02 1.074270033309446e-02 1.071972023903803e-02 + 1.069678461658616e-02 1.067389339013043e-02 1.065104648416746e-02 1.062824382329880e-02 1.060548533223078e-02 + 1.058277093577440e-02 1.056010055884533e-02 1.053747412646376e-02 1.051489156375426e-02 1.049235279594577e-02 + 1.046985774837142e-02 1.044740634646846e-02 1.042499851577821e-02 1.040263418194588e-02 1.038031327072056e-02 + 1.035803570795504e-02 1.033580141960577e-02 1.031361033173270e-02 1.029146237049932e-02 1.026935746217240e-02 + 1.024729553312198e-02 1.022527650982121e-02 1.020330031884633e-02 1.018136688687657e-02 1.015947614069400e-02 + 1.013762800718344e-02 1.011582241333236e-02 1.009405928623082e-02 1.007233855307138e-02 1.005066014114891e-02 + 1.002902397786062e-02 1.000742999070585e-02 9.985878107286045e-03 9.964368255304602e-03 9.942900362566854e-03 + 9.921474356979905e-03 9.900090166552522e-03 9.878747719395080e-03 9.857446943719447e-03 9.836187767838898e-03 + 9.814970120168019e-03 9.793793929222560e-03 9.772659123619408e-03 9.751565632076428e-03 9.730513383412421e-03 + 9.709502306547012e-03 9.688532330500496e-03 9.667603384393805e-03 9.646715397448383e-03 9.625868298986120e-03 + 9.605062018429193e-03 9.584296485300049e-03 9.563571629221227e-03 9.542887379915295e-03 9.522243667204748e-03 + 9.501640421011943e-03 9.481077571359006e-03 9.460555048367609e-03 9.440072782259024e-03 9.419630703353957e-03 + 9.399228742072458e-03 9.378866828933860e-03 9.358544894556597e-03 9.338262869658163e-03 9.318020685055019e-03 + 9.297818271662490e-03 9.277655560494666e-03 9.257532482664282e-03 9.237448969382641e-03 9.217404951959510e-03 + 9.197400361803025e-03 9.177435130419596e-03 9.157509189413856e-03 9.137622470488421e-03 9.117774905443955e-03 + 9.097966426178949e-03 9.078196964689741e-03 9.058466453070313e-03 9.038774823512251e-03 9.019122008304617e-03 + 8.999507939833841e-03 8.979932550583722e-03 8.960395773135194e-03 8.940897540166326e-03 8.921437784452157e-03 + 8.902016438864622e-03 8.882633436372534e-03 8.863288710041314e-03 8.843982193033088e-03 8.824713818606434e-03 + 8.805483520116371e-03 8.786291231014220e-03 8.767136884847527e-03 8.748020415260011e-03 8.728941755991345e-03 + 8.709900840877150e-03 8.690897603848880e-03 8.671931978933735e-03 8.653003900254566e-03 8.634113302029723e-03 + 8.615260118573000e-03 8.596444284293523e-03 8.577665733695748e-03 8.558924401379151e-03 8.540220222038370e-03 + 8.521553130462930e-03 8.502923061537221e-03 8.484329950240396e-03 8.465773731646264e-03 8.447254340923232e-03 + 8.428771713334124e-03 8.410325784236157e-03 8.391916489080779e-03 8.373543763413678e-03 8.355207542874598e-03 + 8.336907763197208e-03 8.318644360209113e-03 8.300417269831660e-03 8.282226428079924e-03 8.264071771062566e-03 + 8.245953234981710e-03 8.227870756132868e-03 8.209824270904874e-03 8.191813715779761e-03 8.173839027332642e-03 + 8.155900142231672e-03 8.137996997237886e-03 8.120129529205112e-03 8.102297675079924e-03 8.084501371901490e-03 + 8.066740556801533e-03 8.049015167004157e-03 8.031325139825799e-03 8.013670412675106e-03 7.996050923052904e-03 + 7.978466608552032e-03 7.960917406857245e-03 7.943403255745151e-03 7.925924093084069e-03 7.908479856834030e-03 + 7.891070485046534e-03 7.873695915864603e-03 7.856356087522573e-03 7.839050938346024e-03 7.821780406751704e-03 + 7.804544431247447e-03 7.787342950432069e-03 7.770175902995169e-03 7.753043227717206e-03 7.735944863469245e-03 + 7.718880749212993e-03 7.701850824000604e-03 7.684855026974610e-03 7.667893297367842e-03 7.650965574503301e-03 + 7.634071797794107e-03 7.617211906743409e-03 7.600385840944176e-03 7.583593540079220e-03 7.566834943921063e-03 + 7.550109992331842e-03 7.533418625263189e-03 7.516760782756189e-03 7.500136404941188e-03 7.483545432037805e-03 + 7.466987804354747e-03 7.450463462289805e-03 7.433972346329666e-03 7.417514397049856e-03 7.401089555114641e-03 + 7.384697761276924e-03 7.368338956378189e-03 7.352013081348364e-03 7.335720077205704e-03 7.319459885056723e-03 + 7.303232446096106e-03 7.287037701606667e-03 7.270875592959056e-03 7.254746061611936e-03 7.238649049111654e-03 + 7.222584497092264e-03 7.206552347275421e-03 7.190552541470252e-03 7.174585021573283e-03 7.158649729568332e-03 + 7.142746607526421e-03 7.126875597605660e-03 7.111036642051188e-03 7.095229683195062e-03 7.079454663456138e-03 + 7.063711525339974e-03 7.048000211438786e-03 7.032320664431308e-03 7.016672827082698e-03 7.001056642244471e-03 + 6.985472052854345e-03 6.969919001936201e-03 6.954397432599980e-03 6.938907288041579e-03 6.923448511542730e-03 + 6.908021046470931e-03 6.892624836279358e-03 6.877259824506742e-03 6.861925954777301e-03 6.846623170800648e-03 + 6.831351416371628e-03 6.816110635370327e-03 6.800900771761874e-03 6.785721769596439e-03 6.770573573009094e-03 + 6.755456126219661e-03 6.740369373532736e-03 6.725313259337485e-03 6.710287728107603e-03 6.695292724401245e-03 + 6.680328192860867e-03 6.665394078213138e-03 6.650490325268893e-03 6.635616878923006e-03 6.620773684154290e-03 + 6.605960686025434e-03 6.591177829682861e-03 6.576425060356659e-03 6.561702323360478e-03 6.547009564091465e-03 + 6.532346728030131e-03 6.517713760740271e-03 6.503110607868868e-03 6.488537215145974e-03 6.473993528384660e-03 + 6.459479493480949e-03 6.444995056413572e-03 6.430540163244050e-03 6.416114760116471e-03 6.401718793257528e-03 + 6.387352208976226e-03 6.373014953664018e-03 6.358706973794522e-03 6.344428215923534e-03 6.330178626688879e-03 + 6.315958152810371e-03 6.301766741089672e-03 6.287604338410200e-03 6.273470891737058e-03 6.259366348116907e-03 + 6.245290654677928e-03 6.231243758629679e-03 6.217225607262999e-03 6.203236147949938e-03 6.189275328143647e-03 + 6.175343095378301e-03 6.161439397269008e-03 6.147564181511671e-03 6.133717395882932e-03 6.119898988240080e-03 + 6.106108906520936e-03 6.092347098743772e-03 6.078613513007241e-03 6.064908097490217e-03 6.051230800451773e-03 + 6.037581570231013e-03 6.023960355247071e-03 6.010367103998954e-03 5.996801765065450e-03 5.983264287105040e-03 + 5.969754618855806e-03 5.956272709135380e-03 5.942818506840782e-03 5.929391960948356e-03 5.915993020513681e-03 + 5.902621634671468e-03 5.889277752635500e-03 5.875961323698472e-03 5.862672297231961e-03 5.849410622686305e-03 + 5.836176249590496e-03 5.822969127552117e-03 5.809789206257247e-03 5.796636435470341e-03 5.783510765034160e-03 + 5.770412144869656e-03 5.757340524975902e-03 5.744295855429991e-03 5.731278086386956e-03 5.718287168079642e-03 + 5.705323050818644e-03 5.692385684992196e-03 5.679475021066089e-03 5.666591009583606e-03 5.653733601165356e-03 + 5.640902746509247e-03 5.628098396390361e-03 5.615320501660886e-03 5.602569013249989e-03 5.589843882163771e-03 + 5.577145059485132e-03 5.564472496373680e-03 5.551826144065657e-03 5.539205953873864e-03 5.526611877187547e-03 + 5.514043865472263e-03 5.501501870269872e-03 5.488985843198365e-03 5.476495735951853e-03 5.464031500300402e-03 + 5.451593088089975e-03 5.439180451242325e-03 5.426793541754912e-03 5.414432311700856e-03 5.402096713228736e-03 + 5.389786698562611e-03 5.377502220001856e-03 5.365243229921098e-03 5.353009680770121e-03 5.340801525073776e-03 + 5.328618715431905e-03 5.316461204519201e-03 5.304328945085163e-03 5.292221889953985e-03 5.280139992024460e-03 + 5.268083204269930e-03 5.256051479738124e-03 5.244044771551120e-03 5.232063032905230e-03 5.220106217070922e-03 + 5.208174277392745e-03 5.196267167289178e-03 5.184384840252607e-03 5.172527249849164e-03 5.160694349718734e-03 + 5.148886093574747e-03 5.137102435204207e-03 5.125343328467491e-03 5.113608727298320e-03 5.101898585703655e-03 + 5.090212857763627e-03 5.078551497631410e-03 5.066914459533141e-03 5.055301697767846e-03 5.043713166707315e-03 + 5.032148820796075e-03 5.020608614551232e-03 5.009092502562409e-03 4.997600439491663e-03 4.986132380073362e-03 + 4.974688279114171e-03 4.963268091492844e-03 4.951871772160252e-03 4.940499276139216e-03 4.929150558524433e-03 + 4.917825574482423e-03 4.906524279251372e-03 4.895246628141118e-03 4.883992576533000e-03 4.872762079879793e-03 + 4.861555093705608e-03 4.850371573605832e-03 4.839211475247013e-03 4.828074754366764e-03 4.816961366773682e-03 + 4.805871268347250e-03 4.794804415037780e-03 4.783760762866306e-03 4.772740267924467e-03 4.761742886374434e-03 + 4.750768574448833e-03 4.739817288450679e-03 4.728888984753220e-03 4.717983619799898e-03 4.707101150104245e-03 + 4.696241532249794e-03 4.685404722889983e-03 4.674590678748093e-03 4.663799356617136e-03 4.653030713359749e-03 + 4.642284705908150e-03 4.631561291264004e-03 4.620860426498378e-03 4.610182068751622e-03 4.599526175233280e-03 + 4.588892703222010e-03 4.578281610065496e-03 4.567692853180372e-03 4.557126390052089e-03 4.546582178234899e-03 + 4.536060175351690e-03 4.525560339093941e-03 4.515082627221634e-03 4.504626997563141e-03 4.494193408015179e-03 + 4.483781816542667e-03 4.473392181178677e-03 4.463024460024318e-03 4.452678611248686e-03 4.442354593088759e-03 + 4.432052363849285e-03 4.421771881902708e-03 4.411513105689093e-03 4.401275993716044e-03 4.391060504558614e-03 + 4.380866596859155e-03 4.370694229327322e-03 4.360543360739925e-03 4.350413949940895e-03 4.340305955841122e-03 + 4.330219337418431e-03 4.320154053717470e-03 4.310110063849622e-03 4.300087326992903e-03 4.290085802391935e-03 + 4.280105449357784e-03 4.270146227267908e-03 4.260208095566078e-03 4.250291013762265e-03 4.240394941432571e-03 + 4.230519838219162e-03 4.220665663830134e-03 4.210832378039451e-03 4.201019940686864e-03 4.191228311677810e-03 + 4.181457450983364e-03 4.171707318640076e-03 4.161977874749962e-03 4.152269079480362e-03 4.142580893063902e-03 + 4.132913275798359e-03 4.123266188046622e-03 4.113639590236568e-03 4.104033442860987e-03 4.094447706477488e-03 + 4.084882341708445e-03 4.075337309240902e-03 4.065812569826433e-03 4.056308084281117e-03 4.046823813485424e-03 + 4.037359718384164e-03 4.027915759986347e-03 4.018491899365133e-03 4.009088097657736e-03 3.999704316065328e-03 + 3.990340515853001e-03 3.980996658349612e-03 3.971672704947742e-03 3.962368617103602e-03 3.953084356336941e-03 + 3.943819884230963e-03 3.934575162432246e-03 3.925350152650663e-03 3.916144816659280e-03 3.906959116294274e-03 + 3.897793013454857e-03 3.888646470103181e-03 3.879519448264277e-03 3.870411910025936e-03 3.861323817538637e-03 + 3.852255133015473e-03 3.843205818732045e-03 3.834175837026415e-03 3.825165150298977e-03 3.816173721012392e-03 + 3.807201511691509e-03 3.798248484923271e-03 3.789314603356629e-03 3.780399829702493e-03 3.771504126733568e-03 + 3.762627457284353e-03 3.753769784251004e-03 3.744931070591295e-03 3.736111279324483e-03 3.727310373531252e-03 + 3.718528316353631e-03 3.709765070994887e-03 3.701020600719484e-03 3.692294868852965e-03 3.683587838781863e-03 + 3.674899473953636e-03 3.666229737876574e-03 3.657578594119742e-03 3.648946006312838e-03 3.640331938146173e-03 + 3.631736353370541e-03 3.623159215797162e-03 3.614600489297582e-03 3.606060137803600e-03 3.597538125307203e-03 + 3.589034415860429e-03 3.580548973575334e-03 3.572081762623883e-03 3.563632747237884e-03 3.555201891708901e-03 + 3.546789160388153e-03 3.538394517686443e-03 3.530017928074086e-03 3.521659356080807e-03 3.513318766295685e-03 + 3.504996123367032e-03 3.496691392002348e-03 3.488404536968191e-03 3.480135523090168e-03 3.471884315252777e-03 + 3.463650878399375e-03 3.455435177532061e-03 3.447237177711623e-03 3.439056844057428e-03 3.430894141747375e-03 + 3.422749036017780e-03 3.414621492163301e-03 3.406511475536868e-03 3.398418951549584e-03 3.390343885670667e-03 + 3.382286243427352e-03 3.374245990404793e-03 3.366223092246016e-03 3.358217514651808e-03 3.350229223380667e-03 + 3.342258184248666e-03 3.334304363129445e-03 3.326367725954064e-03 3.318448238710954e-03 3.310545867445828e-03 + 3.302660578261602e-03 3.294792337318323e-03 3.286941110833061e-03 3.279106865079847e-03 3.271289566389589e-03 + 3.263489181149991e-03 3.255705675805486e-03 3.247939016857112e-03 3.240189170862484e-03 3.232456104435657e-03 + 3.224739784247106e-03 3.217040177023617e-03 3.209357249548185e-03 3.201690968659954e-03 3.194041301254140e-03 + 3.186408214281960e-03 3.178791674750511e-03 3.171191649722731e-03 3.163608106317298e-03 3.156041011708556e-03 + 3.148490333126424e-03 3.140956037856345e-03 3.133438093239169e-03 3.125936466671091e-03 3.118451125603568e-03 + 3.110982037543236e-03 3.103529170051853e-03 3.096092490746181e-03 3.088671967297928e-03 3.081267567433668e-03 + 3.073879258934749e-03 3.066507009637240e-03 3.059150787431810e-03 3.051810560263697e-03 3.044486296132587e-03 + 3.037177963092544e-03 3.029885529251956e-03 3.022608962773418e-03 3.015348231873687e-03 3.008103304823578e-03 + 3.000874149947892e-03 2.993660735625326e-03 2.986463030288435e-03 2.979281002423507e-03 2.972114620570502e-03 + 2.964963853322963e-03 2.957828669327945e-03 2.950709037285960e-03 2.943604925950849e-03 2.936516304129738e-03 + 2.929443140682951e-03 2.922385404523917e-03 2.915343064619134e-03 2.908316089988024e-03 2.901304449702916e-03 + 2.894308112888936e-03 2.887327048723923e-03 2.880361226438385e-03 2.873410615315386e-03 2.866475184690462e-03 + 2.859554903951596e-03 2.852649742539072e-03 2.845759669945461e-03 2.838884655715475e-03 2.832024669445943e-03 + 2.825179680785725e-03 2.818349659435606e-03 2.811534575148238e-03 2.804734397728073e-03 2.797949097031250e-03 + 2.791178642965567e-03 2.784423005490355e-03 2.777682154616420e-03 2.770956060405980e-03 2.764244692972559e-03 + 2.757548022480946e-03 2.750866019147074e-03 2.744198653237957e-03 2.737545895071655e-03 2.730907715017131e-03 + 2.724284083494211e-03 2.717674970973513e-03 2.711080347976329e-03 2.704500185074616e-03 2.697934452890842e-03 + 2.691383122097963e-03 2.684846163419327e-03 2.678323547628599e-03 2.671815245549672e-03 2.665321228056625e-03 + 2.658841466073606e-03 2.652375930574780e-03 2.645924592584241e-03 2.639487423175933e-03 2.633064393473604e-03 + 2.626655474650677e-03 2.620260637930209e-03 2.613879854584828e-03 2.607513095936608e-03 2.601160333357042e-03 + 2.594821538266929e-03 2.588496682136316e-03 2.582185736484436e-03 2.575888672879592e-03 2.569605462939119e-03 + 2.563336078329286e-03 2.557080490765224e-03 2.550838672010866e-03 2.544610593878852e-03 2.538396228230442e-03 + 2.532195546975489e-03 2.526008522072306e-03 2.519835125527640e-03 2.513675329396543e-03 2.507529105782347e-03 + 2.501396426836568e-03 2.495277264758819e-03 2.489171591796750e-03 2.483079380245976e-03 2.477000602449974e-03 + 2.470935230800059e-03 2.464883237735247e-03 2.458844595742226e-03 2.452819277355261e-03 2.446807255156126e-03 + 2.440808501774015e-03 2.434822989885503e-03 2.428850692214408e-03 2.422891581531795e-03 2.416945630655832e-03 + 2.411012812451754e-03 2.405093099831777e-03 2.399186465755023e-03 2.393292883227442e-03 2.387412325301757e-03 + 2.381544765077357e-03 2.375690175700247e-03 2.369848530362968e-03 2.364019802304516e-03 2.358203964810278e-03 + 2.352400991211948e-03 2.346610854887461e-03 2.340833529260910e-03 2.335068987802472e-03 2.329317204028361e-03 + 2.323578151500701e-03 2.317851803827497e-03 2.312138134662551e-03 2.306437117705376e-03 2.300748726701132e-03 + 2.295072935440548e-03 2.289409717759845e-03 2.283759047540681e-03 2.278120898710053e-03 2.272495245240231e-03 + 2.266882061148695e-03 2.261281320498041e-03 2.255692997395942e-03 2.250117065995029e-03 2.244553500492853e-03 + 2.239002275131798e-03 2.233463364199008e-03 2.227936742026309e-03 2.222422382990156e-03 2.216920261511528e-03 + 2.211430352055893e-03 2.205952629133092e-03 2.200487067297302e-03 2.195033641146945e-03 2.189592325324619e-03 + 2.184163094517017e-03 2.178745923454885e-03 2.173340786912899e-03 2.167947659709639e-03 2.162566516707488e-03 + 2.157197332812561e-03 2.151840082974660e-03 2.146494742187162e-03 2.141161285486971e-03 2.135839687954444e-03 + 2.130529924713301e-03 2.125231970930582e-03 2.119945801816547e-03 2.114671392624614e-03 2.109408718651299e-03 + 2.104157755236119e-03 2.098918477761544e-03 2.093690861652904e-03 2.088474882378322e-03 2.083270515448668e-03 + 2.078077736417447e-03 2.072896520880750e-03 2.067726844477175e-03 2.062568682887761e-03 2.057422011835914e-03 + 2.052286807087334e-03 2.047163044449925e-03 2.042050699773769e-03 2.036949748951009e-03 2.031860167915795e-03 + 2.026781932644220e-03 2.021715019154229e-03 2.016659403505570e-03 2.011615061799707e-03 2.006581970179748e-03 + 2.001560104830387e-03 1.996549441977809e-03 1.991549957889654e-03 1.986561628874912e-03 1.981584431283866e-03 + 1.976618341508021e-03 1.971663335980033e-03 1.966719391173629e-03 1.961786483603561e-03 1.956864589825491e-03 + 1.951953686435972e-03 1.947053750072334e-03 1.942164757412634e-03 1.937286685175590e-03 1.932419510120486e-03 + 1.927563209047122e-03 1.922717758795751e-03 1.917883136246978e-03 1.913059318321714e-03 1.908246281981096e-03 + 1.903444004226412e-03 1.898652462099053e-03 1.893871632680412e-03 1.889101493091820e-03 1.884342020494508e-03 + 1.879593192089483e-03 1.874854985117518e-03 1.870127376859014e-03 1.865410344633984e-03 1.860703865801972e-03 + 1.856007917761960e-03 1.851322477952315e-03 1.846647523850726e-03 1.841983032974109e-03 1.837328982878569e-03 + 1.832685351159301e-03 1.828052115450536e-03 1.823429253425470e-03 1.818816742796179e-03 1.814214561313585e-03 + 1.809622686767343e-03 1.805041096985786e-03 1.800469769835881e-03 1.795908683223124e-03 1.791357815091485e-03 + 1.786817143423345e-03 1.782286646239406e-03 1.777766301598651e-03 1.773256087598245e-03 1.768755982373484e-03 + 1.764265964097722e-03 1.759786010982292e-03 1.755316101276446e-03 1.750856213267296e-03 1.746406325279714e-03 + 1.741966415676298e-03 1.737536462857272e-03 1.733116445260433e-03 1.728706341361096e-03 1.724306129671981e-03 + 1.719915788743189e-03 1.715535297162117e-03 1.711164633553375e-03 1.706803776578741e-03 1.702452704937071e-03 + 1.698111397364240e-03 1.693779832633082e-03 1.689457989553302e-03 1.685145846971415e-03 1.680843383770689e-03 + 1.676550578871052e-03 1.672267411229053e-03 1.667993859837768e-03 1.663729903726738e-03 1.659475521961914e-03 + 1.655230693645565e-03 1.650995397916243e-03 1.646769613948668e-03 1.642553320953695e-03 1.638346498178252e-03 + 1.634149124905233e-03 1.629961180453462e-03 1.625782644177617e-03 1.621613495468152e-03 1.617453713751245e-03 + 1.613303278488718e-03 1.609162169177968e-03 1.605030365351908e-03 1.600907846578891e-03 1.596794592462642e-03 + 1.592690582642206e-03 1.588595796791844e-03 1.584510214621009e-03 1.580433815874245e-03 1.576366580331133e-03 + 1.572308487806224e-03 1.568259518148966e-03 1.564219651243634e-03 1.560188867009277e-03 1.556167145399630e-03 + 1.552154466403065e-03 1.548150810042506e-03 1.544156156375373e-03 1.540170485493516e-03 1.536193777523136e-03 + 1.532226012624734e-03 1.528267170993023e-03 1.524317232856873e-03 1.520376178479257e-03 1.516443988157147e-03 + 1.512520642221480e-03 1.508606121037086e-03 1.504700405002599e-03 1.500803474550418e-03 1.496915310146616e-03 + 1.493035892290888e-03 1.489165201516485e-03 1.485303218390133e-03 1.481449923511977e-03 1.477605297515515e-03 + 1.473769321067519e-03 1.469941974867990e-03 1.466123239650068e-03 1.462313096179967e-03 1.458511525256938e-03 + 1.454718507713163e-03 1.450934024413710e-03 1.447158056256463e-03 1.443390584172052e-03 1.439631589123796e-03 + 1.435881052107618e-03 1.432138954151997e-03 1.428405276317896e-03 1.424679999698685e-03 1.420963105420086e-03 + 1.417254574640114e-03 1.413554388548989e-03 1.409862528369083e-03 1.406178975354860e-03 1.402503710792785e-03 + 1.398836716001297e-03 1.395177972330700e-03 1.391527461163134e-03 1.387885163912482e-03 1.384251062024314e-03 + 1.380625136975829e-03 1.377007370275777e-03 1.373397743464392e-03 1.369796238113346e-03 1.366202835825656e-03 + 1.362617518235638e-03 1.359040267008831e-03 1.355471063841936e-03 1.351909890462751e-03 1.348356728630106e-03 + 1.344811560133783e-03 1.341274366794478e-03 1.337745130463710e-03 1.334223833023776e-03 1.330710456387662e-03 + 1.327204982498997e-03 1.323707393331990e-03 1.320217670891348e-03 1.316735797212216e-03 1.313261754360129e-03 + 1.309795524430917e-03 1.306337089550672e-03 1.302886431875659e-03 1.299443533592256e-03 1.296008376916904e-03 + 1.292580944096015e-03 1.289161217405943e-03 1.285749179152886e-03 1.282344811672828e-03 1.278948097331500e-03 + 1.275559018524285e-03 1.272177557676164e-03 1.268803697241659e-03 1.265437419704753e-03 1.262078707578848e-03 + 1.258727543406676e-03 1.255383909760247e-03 1.252047789240794e-03 1.248719164478686e-03 1.245398018133383e-03 + 1.242084332893374e-03 1.238778091476089e-03 1.235479276627864e-03 1.232187871123859e-03 1.228903857767994e-03 + 1.225627219392907e-03 1.222357938859856e-03 1.219095999058684e-03 1.215841382907745e-03 1.212594073353836e-03 + 1.209354053372143e-03 1.206121305966170e-03 1.202895814167675e-03 1.199677561036624e-03 1.196466529661101e-03 + 1.193262703157260e-03 1.190066064669269e-03 1.186876597369226e-03 1.183694284457124e-03 1.180519109160761e-03 + 1.177351054735692e-03 1.174190104465166e-03 1.171036241660058e-03 1.167889449658818e-03 1.164749711827387e-03 + 1.161617011559153e-03 1.158491332274896e-03 1.155372657422697e-03 1.152260970477900e-03 1.149156254943044e-03 + 1.146058494347792e-03 1.142967672248894e-03 1.139883772230089e-03 1.136806777902072e-03 1.133736672902426e-03 + 1.130673440895551e-03 1.127617065572611e-03 1.124567530651477e-03 1.121524819876652e-03 1.118488917019226e-03 + 1.115459805876799e-03 1.112437470273431e-03 1.109421894059581e-03 1.106413061112042e-03 1.103410955333878e-03 + 1.100415560654376e-03 1.097426861028969e-03 1.094444840439192e-03 1.091469482892606e-03 1.088500772422747e-03 + 1.085538693089074e-03 1.082583228976891e-03 1.079634364197295e-03 1.076692082887128e-03 1.073756369208893e-03 + 1.070827207350726e-03 1.067904581526309e-03 1.064988475974817e-03 1.062078874960879e-03 1.059175762774491e-03 + 1.056279123730976e-03 1.053388942170920e-03 1.050505202460106e-03 1.047627888989476e-03 1.044756986175049e-03 + 1.041892478457876e-03 1.039034350303982e-03 1.036182586204304e-03 1.033337170674638e-03 1.030498088255578e-03 + 1.027665323512456e-03 1.024838861035294e-03 1.022018685438738e-03 1.019204781362003e-03 1.016397133468828e-03 + 1.013595726447394e-03 1.010800545010297e-03 1.008011573894470e-03 1.005228797861136e-03 1.002452201695755e-03 + 9.996817702079591e-04 9.969174882315031e-04 9.941593406242138e-04 9.914073122679219e-04 9.886613880684206e-04 + 9.859215529554011e-04 9.831877918823979e-04 9.804600898267509e-04 9.777384317895251e-04 9.750228027954779e-04 + 9.723131878929931e-04 9.696095721540308e-04 9.669119406740836e-04 9.642202785721025e-04 9.615345709904628e-04 + 9.588548030949057e-04 9.561809600744811e-04 9.535130271415005e-04 9.508509895314854e-04 9.481948325031062e-04 + 9.455445413381496e-04 9.429001013414459e-04 9.402614978408295e-04 9.376287161870898e-04 9.350017417539094e-04 + 9.323805599378314e-04 9.297651561581924e-04 9.271555158570741e-04 9.245516244992735e-04 9.219534675722257e-04 + 9.193610305859729e-04 9.167742990731131e-04 9.141932585887439e-04 9.116178947104276e-04 9.090481930381289e-04 + 9.064841391941748e-04 9.039257188232094e-04 9.013729175921408e-04 8.988257211900963e-04 8.962841153283848e-04 + 8.937480857404345e-04 8.912176181817610e-04 8.886926984299131e-04 8.861733122844320e-04 8.836594455668119e-04 + 8.811510841204358e-04 8.786482138105597e-04 8.761508205242484e-04 8.736588901703345e-04 8.711724086793855e-04 + 8.686913620036491e-04 8.662157361170182e-04 8.637455170149924e-04 8.612806907146226e-04 8.588212432544880e-04 + 8.563671606946371e-04 8.539184291165609e-04 8.514750346231535e-04 8.490369633386603e-04 8.466042014086459e-04 + 8.441767349999642e-04 8.417545503007019e-04 8.393376335201616e-04 8.369259708888062e-04 8.345195486582270e-04 + 8.321183531011220e-04 8.297223705112365e-04 8.273315872033428e-04 8.249459895132038e-04 8.225655637975308e-04 + 8.201902964339641e-04 8.178201738210238e-04 8.154551823780817e-04 8.130953085453365e-04 8.107405387837729e-04 + 8.083908595751301e-04 8.060462574218848e-04 8.037067188471956e-04 8.013722303949032e-04 7.990427786294723e-04 + 7.967183501359861e-04 7.943989315201051e-04 7.920845094080408e-04 7.897750704465403e-04 7.874706013028433e-04 + 7.851710886646647e-04 7.828765192401741e-04 7.805868797579635e-04 7.783021569670245e-04 7.760223376367352e-04 + 7.737474085568220e-04 7.714773565373522e-04 7.692121684087006e-04 7.669518310215403e-04 7.646963312468176e-04 + 7.624456559757314e-04 7.601997921197144e-04 7.579587266104277e-04 7.557224463997258e-04 7.534909384596541e-04 + 7.512641897824264e-04 7.490421873804107e-04 7.468249182861257e-04 7.446123695522144e-04 7.424045282514359e-04 + 7.402013814766621e-04 7.380029163408529e-04 7.358091199770648e-04 7.336199795384232e-04 7.314354821981238e-04 + 7.292556151494339e-04 7.270803656056673e-04 7.249097208001975e-04 7.227436679864377e-04 7.205821944378479e-04 + 7.184252874479333e-04 7.162729343302359e-04 7.141251224183327e-04 7.119818390658497e-04 7.098430716464428e-04 + 7.077088075538251e-04 7.055790342017453e-04 7.034537390240080e-04 7.013329094744767e-04 6.992165330270747e-04 + 6.971045971757988e-04 6.949970894347307e-04 6.928939973380295e-04 6.907953084399711e-04 6.887010103149309e-04 + 6.866110905574200e-04 6.845255367820862e-04 6.824443366237339e-04 6.803674777373396e-04 6.782949477980766e-04 + 6.762267345013232e-04 6.741628255626918e-04 6.721032087180440e-04 6.700478717235213e-04 6.679968023555647e-04 + 6.659499884109389e-04 6.639074177067609e-04 6.618690780805346e-04 6.598349573901659e-04 6.578050435140120e-04 + 6.557793243508975e-04 6.537577878201559e-04 6.517404218616691e-04 6.497272144358936e-04 6.477181535239088e-04 + 6.457132271274497e-04 6.437124232689478e-04 6.417157299915893e-04 6.397231353593320e-04 6.377346274569761e-04 + 6.357501943901975e-04 6.337698242856013e-04 6.317935052907774e-04 6.298212255743453e-04 6.278529733260034e-04 + 6.258887367566057e-04 6.239285040981976e-04 6.219722636040842e-04 6.200200035488922e-04 6.180717122286284e-04 + 6.161273779607526e-04 6.141869890842305e-04 6.122505339596137e-04 6.103180009691072e-04 6.083893785166364e-04 + 6.064646550279245e-04 6.045438189505729e-04 6.026268587541292e-04 6.007137629301755e-04 5.988045199924053e-04 + 5.968991184767083e-04 5.949975469412629e-04 5.930997939666093e-04 5.912058481557512e-04 5.893156981342519e-04 + 5.874293325503146e-04 5.855467400748898e-04 5.836679094017699e-04 5.817928292476901e-04 5.799214883524362e-04 + 5.780538754789433e-04 5.761899794134093e-04 5.743297889654003e-04 5.724732929679649e-04 5.706204802777561e-04 + 5.687713397751366e-04 5.669258603643061e-04 5.650840309734229e-04 5.632458405547263e-04 5.614112780846698e-04 + 5.595803325640424e-04 5.577529930181042e-04 5.559292484967302e-04 5.541090880745339e-04 5.522925008510161e-04 + 5.504794759507094e-04 5.486700025233169e-04 5.468640697438700e-04 5.450616668128722e-04 5.432627829564542e-04 + 5.414674074265372e-04 5.396755295009874e-04 5.378871384837769e-04 5.361022237051602e-04 5.343207745218290e-04 + 5.325427803170940e-04 5.307682305010555e-04 5.289971145107831e-04 5.272294218104964e-04 5.254651418917475e-04 + 5.237042642736141e-04 5.219467785028798e-04 5.201926741542382e-04 5.184419408304840e-04 5.166945681627146e-04 + 5.149505458105326e-04 5.132098634622606e-04 5.114725108351385e-04 5.097384776755481e-04 5.080077537592228e-04 + 5.062803288914737e-04 5.045561929074159e-04 5.028353356721876e-04 5.011177470811844e-04 4.994034170603047e-04 + 4.976923355661730e-04 4.959844925863925e-04 4.942798781397872e-04 4.925784822766497e-04 4.908802950790036e-04 + 4.891853066608515e-04 4.874935071684372e-04 4.858048867805191e-04 4.841194357086268e-04 4.824371441973486e-04 + 4.807580025245945e-04 4.790820010018851e-04 4.774091299746367e-04 4.757393798224453e-04 4.740727409593847e-04 + 4.724092038343067e-04 4.707487589311287e-04 4.690913967691593e-04 4.674371079033913e-04 4.657858829248238e-04 + 4.641377124607833e-04 4.624925871752355e-04 4.608504977691301e-04 4.592114349807130e-04 4.575753895858758e-04 + 4.559423523984933e-04 4.543123142707647e-04 4.526852660935651e-04 4.510611987968056e-04 4.494401033497811e-04 + 4.478219707615415e-04 4.462067920812565e-04 4.445945583985878e-04 4.429852608440723e-04 4.413788905894909e-04 + 4.397754388482678e-04 4.381748968758605e-04 4.365772559701472e-04 4.349825074718372e-04 4.333906427648717e-04 + 4.318016532768348e-04 4.302155304793766e-04 4.286322658886204e-04 4.270518510655989e-04 4.254742776166819e-04 + 4.238995371940074e-04 4.223276214959323e-04 4.207585222674663e-04 4.191922313007252e-04 4.176287404353971e-04 + 4.160680415591867e-04 4.145101266082952e-04 4.129549875678805e-04 4.114026164725374e-04 4.098530054067845e-04 + 4.083061465055390e-04 4.067620319546178e-04 4.052206539912290e-04 4.036820049044735e-04 4.021460770358587e-04 + 4.006128627798014e-04 3.990823545841480e-04 3.975545449507041e-04 3.960294264357513e-04 3.945069916505877e-04 + 3.929872332620658e-04 3.914701439931301e-04 3.899557166233749e-04 3.884439439895897e-04 3.869348189863217e-04 + 3.854283345664438e-04 3.839244837417184e-04 3.824232595833719e-04 3.809246552226824e-04 3.794286638515561e-04 + 3.779352787231212e-04 3.764444931523244e-04 3.749563005165273e-04 3.734706942561186e-04 3.719876678751189e-04 + 3.705072149417957e-04 3.690293290892928e-04 3.675540040162453e-04 3.660812334874208e-04 3.646110113343426e-04 + 3.631433314559429e-04 3.616781878192023e-04 3.602155744597983e-04 3.587554854827668e-04 3.572979150631556e-04 + 3.558428574466919e-04 3.543903069504545e-04 3.529402579635412e-04 3.514927049477530e-04 3.500476424382762e-04 + 3.486050650443656e-04 3.471649674500453e-04 3.457273444147953e-04 3.442921907742554e-04 3.428595014409353e-04 + 3.414292714049160e-04 3.400014957345659e-04 3.385761695772595e-04 3.371532881600925e-04 3.357328467906162e-04 + 3.343148408575550e-04 3.328992658315439e-04 3.314861172658666e-04 3.300753907971889e-04 3.286670821463027e-04 + 3.272611871188764e-04 3.258577016061956e-04 3.244566215859224e-04 3.230579431228430e-04 3.216616623696310e-04 + 3.202677755676063e-04 3.188762790474943e-04 3.174871692301936e-04 3.161004426275463e-04 3.147160958431003e-04 + 3.133341255728874e-04 3.119545286061938e-04 3.105773018263326e-04 3.092024422114276e-04 3.078299468351838e-04 + 3.064598128676706e-04 3.050920375761001e-04 3.037266183256079e-04 3.023635525800407e-04 3.010028379027304e-04 + 2.996444719572770e-04 2.982884525083430e-04 2.969347774224196e-04 2.955834446686244e-04 2.942344523194696e-04 + 2.928877985516537e-04 2.915434816468392e-04 2.902014999924286e-04 2.888618520823453e-04 2.875245365178105e-04 + 2.861895520081152e-04 2.848568973713967e-04 2.835265715354048e-04 2.821985735382700e-04 2.808729025292733e-04 + 2.795495577696008e-04 2.782285386331062e-04 2.769098446070698e-04 2.755934752929379e-04 2.742794304070834e-04 + 2.729677097815383e-04 2.716583133647338e-04 2.703512412222365e-04 2.690464935374709e-04 2.677440706124452e-04 + 2.664439728684624e-04 2.651462008468317e-04 2.638507552095744e-04 2.625576367401134e-04 2.612668463439645e-04 + 2.599783850494211e-04 2.586922540082174e-04 2.574084544962027e-04 2.561269879139908e-04 2.548478557876067e-04 + 2.535710597691303e-04 2.522966016373122e-04 2.510244832982002e-04 2.497547067857432e-04 2.484872742623838e-04 + 2.472221880196457e-04 2.459594504787025e-04 2.446990641909397e-04 2.434410318385041e-04 2.421853562348324e-04 + 2.409320403251750e-04 2.396810871871055e-04 2.384325000310062e-04 2.371862822005542e-04 2.359424371731765e-04 + 2.347009685604991e-04 2.334618801087803e-04 2.322251756993212e-04 2.309908593488626e-04 2.297589352099681e-04 + 2.285294075713796e-04 2.273022808583668e-04 2.260775596330450e-04 2.248552485946826e-04 2.236353525799866e-04 + 2.224178765633630e-04 2.212028256571659e-04 2.199902051119119e-04 2.187800203164854e-04 2.175722767983152e-04 + 2.163669802235265e-04 2.151641363970733e-04 2.139637512628501e-04 2.127658309037655e-04 2.115703815418088e-04 + 2.103774095380756e-04 2.091869213927782e-04 2.079989237452251e-04 2.068134233737715e-04 2.056304271957448e-04 + 2.044499422673467e-04 2.032719757835135e-04 2.020965350777630e-04 2.009236276219990e-04 1.997532610262938e-04 + 1.985854430386384e-04 1.974201815446564e-04 1.962574845672917e-04 1.950973602664664e-04 1.939398169386941e-04 + 1.927848630166776e-04 1.916325070688546e-04 1.904827577989203e-04 1.893356240453173e-04 1.881911147806796e-04 + 1.870492391112484e-04 1.859100062762542e-04 1.847734256472526e-04 1.836395067274333e-04 1.825082591508841e-04 + 1.813796926818193e-04 1.802538172137731e-04 1.791306427687452e-04 1.780101794963195e-04 1.768924376727294e-04 + 1.757774276998909e-04 1.746651601043975e-04 1.735556455364648e-04 1.724488947688391e-04 1.713449186956687e-04 + 1.702437283313192e-04 1.691453348091648e-04 1.680497493803179e-04 1.669569834123269e-04 1.658670483878313e-04 + 1.647799559031625e-04 1.636957176669092e-04 1.626143454984393e-04 1.615358513263660e-04 1.604602471869836e-04 + 1.593875452226438e-04 1.583177576800956e-04 1.572508969087797e-04 1.561869753590675e-04 1.551260055804629e-04 + 1.540680002197587e-04 1.530129720191348e-04 1.519609338142261e-04 1.509118985321265e-04 1.498658791893602e-04 + 1.488228888898014e-04 1.477829408225389e-04 1.467460482597098e-04 1.457122245542688e-04 1.446814831377229e-04 + 1.436538375178170e-04 1.426293012761641e-04 1.416078880658399e-04 1.405896116089245e-04 1.395744856939964e-04 + 1.385625241735868e-04 1.375537409615780e-04 1.365481500305607e-04 1.355457654091519e-04 1.345466011792512e-04 + 1.335506714732667e-04 1.325579904712906e-04 1.315685723982243e-04 1.305824315208711e-04 1.295995821449722e-04 + 1.286200386122076e-04 1.276438152971529e-04 1.266709266041871e-04 1.257013869643660e-04 1.247352108322515e-04 + 1.237724126826950e-04 1.228130070075879e-04 1.218570083125657e-04 1.209044311136757e-04 1.199552899340088e-04 + 1.190095993002848e-04 1.180673737394097e-04 1.171286277749934e-04 1.161933759238266e-04 1.152616326923324e-04 + 1.143334125729736e-04 1.134087300406355e-04 1.124875995489718e-04 1.115700355267187e-04 1.106560523739818e-04 + 1.097456644584901e-04 1.088388861118238e-04 1.079357316256163e-04 1.070362152477246e-04 1.061403511783777e-04 + 1.052481535663063e-04 1.043596365048368e-04 1.034748140279784e-04 1.025937001064761e-04 1.017163086438544e-04 + 1.008426534724414e-04 9.997274834936866e-05 9.910660695256547e-05 9.824424287673517e-05 9.738566962931541e-05 + 9.653090062643459e-05 9.567994918885018e-05 9.483282853788458e-05 9.398955179135359e-05 9.315013195948445e-05 + 9.231458194083502e-05 9.148291451821221e-05 9.065514235457830e-05 8.983127798897465e-05 8.901133383243232e-05 + 8.819532216389478e-05 8.738325512614660e-05 8.657514472174283e-05 8.577100280895282e-05 8.497084109771503e-05 + 8.417467114559572e-05 8.338250435377364e-05 8.259435196302730e-05 8.181022504974917e-05 8.103013452197552e-05 + 8.025409111543239e-05 7.948210538961181e-05 7.871418772386426e-05 7.795034831352150e-05 7.719059716604785e-05 + 7.643494409721332e-05 7.568339872730578e-05 7.493597047737353e-05 7.419266856549716e-05 7.345350200310578e-05 + 7.271847959132284e-05 7.198760991735673e-05 7.126090135093370e-05 7.053836204076654e-05 6.981999991107502e-05 + 6.910582265815076e-05 6.839583774696692e-05 6.769005240784333e-05 6.698847363315635e-05 6.629110817410565e-05 + 6.559796253753766e-05 6.490904298281823e-05 6.422435551876905e-05 6.354390590066264e-05 6.286769962727383e-05 + 6.219574193800043e-05 6.152803781004032e-05 6.086459195563986e-05 6.020540881940740e-05 5.955049257569118e-05 + 5.889984712603448e-05 5.825347609669282e-05 5.761138283622993e-05 5.697357041318637e-05 5.634004161381888e-05 + 5.571079893992013e-05 5.508584460671579e-05 5.446518054083443e-05 5.384880837836585e-05 5.323672946299121e-05 + 5.262894484420010e-05 5.202545527559055e-05 5.142626121324820e-05 5.083136281421434e-05 5.024075993503921e-05 + 4.965445213041716e-05 4.907243865191547e-05 4.849471844678477e-05 4.792129015686161e-05 4.735215211756121e-05 + 4.678730235695511e-05 4.622673859494350e-05 4.567045824251898e-05 4.511845840111642e-05 4.457073586206156e-05 + 4.402728710610508e-05 4.348810830305398e-05 4.295319531149510e-05 4.242254367860773e-05 4.189614864007389e-05 + 4.137400512008104e-05 4.085610773141445e-05 4.034245077564941e-05 3.983302824342958e-05 3.932783381484373e-05 + 3.882686085989520e-05 3.833010243906019e-05 3.783755130394494e-05 3.734919989802954e-05 3.686504035750698e-05 + 3.638506451221525e-05 3.590926388665614e-05 3.543762970110884e-05 3.497015287283352e-05 3.450682401736136e-05 + 3.404763344987884e-05 3.359257118669495e-05 3.314162694679995e-05 3.269479015351089e-05 3.225204993620033e-05 + 3.181339513211309e-05 3.137881428826766e-05 3.094829566343765e-05 3.052182723022056e-05 3.009939667718319e-05 + 2.968099141109031e-05 2.926659855921328e-05 2.885620497171300e-05 2.844979722410323e-05 2.804736161978962e-05 + 2.764888419267947e-05 2.725435070986982e-05 2.686374667440253e-05 2.647705732809277e-05 2.609426765442674e-05 + 2.571536238152390e-05 2.534032598516852e-05 2.496914269190540e-05 2.460179648219627e-05 2.423827109364181e-05 + 2.387855002425940e-05 2.352261653582234e-05 2.317045365725579e-05 2.282204418808512e-05 2.247737070194190e-05 + 2.213641555011767e-05 2.179916086517057e-05 2.146558856458067e-05 2.113568035444908e-05 2.080941773324508e-05 + 2.048678199559587e-05 2.016775423611574e-05 1.985231535327859e-05 1.954044605332434e-05 1.923212685420430e-05 + 1.892733808956078e-05 1.862605991273695e-05 1.832827230081971e-05 1.803395505871150e-05 1.774308782322672e-05 + 1.745565006721707e-05 1.717162110371697e-05 1.689098009011289e-05 1.661370603233248e-05 1.633977778905005e-05 + 1.606917407591017e-05 1.580187346976573e-05 1.553785441292676e-05 1.527709521742333e-05 1.501957406927455e-05 + 1.476526903276718e-05 1.451415805473996e-05 1.426621896886990e-05 1.402142949996386e-05 1.377976726824817e-05 + 1.354120979365865e-05 1.330573450012840e-05 1.307331871986934e-05 1.284393969764941e-05 1.261757459506268e-05 + 1.239420049478802e-05 1.217379440484011e-05 1.195633326280557e-05 1.174179394006714e-05 1.153015324601260e-05 + 1.132138793222567e-05 1.111547469666021e-05 1.091239018779498e-05 1.071211100876603e-05 1.051461372147913e-05 + 1.031987485069629e-05 1.012787088809916e-05 9.938578296326043e-06 9.751973512980472e-06 9.568032954612371e-06 + 9.386733020669547e-06 9.208050097416654e-06 9.031960561824616e-06 8.858440785424383e-06 8.687467138128244e-06 + 8.519015992015672e-06 8.353063725081848e-06 8.189586724950208e-06 8.028561392546748e-06 7.869964145734144e-06 + 7.713771422907741e-06 7.559959686548994e-06 7.408505426738554e-06 7.259385164627063e-06 7.112575455861534e-06 + 6.968052893969842e-06 6.825794113698912e-06 6.685775794308924e-06 6.547974662821824e-06 6.412367497222283e-06 + 6.278931129613094e-06 6.147642449322814e-06 6.018478405964542e-06 5.891416012447914e-06 5.766432347940673e-06 + 5.643504560782077e-06 5.522609871346635e-06 5.403725574857077e-06 5.286829044147916e-06 5.171897732378419e-06 + 5.058909175693897e-06 4.947840995837334e-06 4.838670902708373e-06 4.731376696871797e-06 4.625936272014513e-06 + 4.522327617349994e-06 4.420528819971782e-06 4.320518067155093e-06 4.222273648605747e-06 4.125773958658428e-06 + 4.030997498421807e-06 3.937922877872627e-06 3.846528817897944e-06 3.756794152284902e-06 3.668697829659997e-06 + 3.582218915375677e-06 3.497336593346376e-06 3.414030167833259e-06 3.332279065177400e-06 3.252062835482698e-06 + 3.173361154248255e-06 3.096153823949667e-06 3.020420775571329e-06 2.946142070087850e-06 2.873297899896671e-06 + 2.801868590201445e-06 2.731834600346031e-06 2.663176525100491e-06 2.595875095898964e-06 2.529911182029116e-06 + 2.465265791775111e-06 2.401920073512739e-06 2.339855316758546e-06 2.279052953172751e-06 2.219494557516089e-06 + 2.161161848561799e-06 2.104036689962893e-06 2.048101091074562e-06 1.993337207733550e-06 1.939727342993457e-06 + 1.887253947817708e-06 1.835899621730212e-06 1.785647113423813e-06 1.736479321327926e-06 1.688379294135400e-06 + 1.641330231288832e-06 1.595315483427832e-06 1.550318552796643e-06 1.506323093613627e-06 1.463312912402804e-06 + 1.421271968287653e-06 1.380184373248645e-06 1.340034392344034e-06 1.300806443895344e-06 1.262485099637813e-06 + 1.225055084836039e-06 1.188501278366089e-06 1.152808712764265e-06 1.117962574242909e-06 1.083948202674529e-06 + 1.050751091543994e-06 1.018356887870114e-06 9.867513920968653e-07 9.559205579547005e-07 9.258504922929371e-07 + 8.965274548836271e-07 8.679378581972364e-07 8.400682671513345e-07 8.129053988321868e-07 7.864361221904069e-07 + 7.606474577110100e-07 7.355265770582774e-07 7.110608026964081e-07 6.872376074863144e-07 6.640446142589491e-07 + 6.414695953662352e-07 6.195004722095921e-07 5.981253147470748e-07 5.773323409795099e-07 5.571099164160332e-07 + 5.374465535198827e-07 5.183309111348450e-07 4.997517938927376e-07 4.816981516028571e-07 4.641590786234663e-07 + 4.471238132162180e-07 4.305817368839108e-07 4.145223736919136e-07 3.989353895741610e-07 3.838105916237865e-07 + 3.691379273692475e-07 3.549074840362857e-07 3.411094877961157e-07 3.277343030005419e-07 3.147724314043560e-07 + 3.022145113754031e-07 2.900513170930214e-07 2.782737577350204e-07 2.668728766538939e-07 2.558398505426128e-07 + 2.451659885903532e-07 2.348427316287615e-07 2.248616512690930e-07 2.152144490305612e-07 2.058929554605210e-07 + 1.968891292466452e-07 1.881950563216890e-07 1.798029489611610e-07 1.717051448742153e-07 1.638941062882806e-07 + 1.563624190277244e-07 1.491027915868600e-07 1.421080541978123e-07 1.353711578934072e-07 1.288851735655833e-07 + 1.226432910195998e-07 1.166388180243241e-07 1.108651793590512e-07 1.053159158570257e-07 9.998468344609899e-08 + 9.486525218677497e-08 8.995150530790842e-08 8.523743824042736e-08 8.071715764932013e-08 7.638488046413408e-08 + 7.223493290835025e-08 6.826174952779308e-08 6.445987221842320e-08 6.082394925372990e-08 5.734873431194653e-08 + 5.402908550338636e-08 5.085996439810271e-08 4.783643505408042e-08 4.495366304624628e-08 4.220691449643992e-08 + 3.959155510461912e-08 3.710304918147942e-08 3.473695868267070e-08 3.248894224484316e-08 3.035475422369135e-08 + 2.833024373416266e-08 2.641135369305261e-08 2.459411986410664e-08 2.287466990583917e-08 2.124922242221163e-08 + 1.971408601631660e-08 1.826565834724324e-08 1.690042519025680e-08 1.561495950042311e-08 1.440592047984212e-08 + 1.327005264858940e-08 1.220418491951834e-08 1.120522967703349e-08 1.027018185994446e-08 9.396118048534208e-09 + 8.580195555924395e-09 7.819651523861899e-09 7.111802023016270e-09 6.454041157878717e-09 5.843840176364124e-09 + 5.278746584195627e-09 4.756383264150572e-09 4.274447600257207e-09 3.830710607002911e-09 3.423016063635163e-09 + 3.049279653616837e-09 2.707488109296194e-09 2.395698361856508e-09 2.112036696597026e-09 1.854697913595365e-09 + 1.621944493805400e-09 1.412105770628677e-09 1.223577107006488e-09 1.054819078068198e-09 9.043566593699515e-10 + 7.707784207582635e-10 6.527357258855351e-10 5.489419374025072e-10 4.581716278528005e-10 3.792597962865099e-10 + 3.111010906120930e-10 2.526490356996466e-10 2.029152672467338e-10 1.609687714165102e-10 1.259351302536631e-10 + 9.699577288161152e-11 7.338723248282899e-11 5.440040906012058e-11 3.937983797582400e-11 2.772296426258365e-11 + 1.887942269738662e-11 1.235032362860542e-11 7.687544543101969e-12 4.493027358840057e-12 2.418081426072236e-12 + 1.162692218286942e-12 4.748356921798243e-13 1.497982939327985e-13 2.950258728058308e-14 1.838477039278279e-15 + 1.637411226950052e+00 1.636031906349800e+00 1.634653057788334e+00 1.633274682031054e+00 1.631896779842106e+00 + 1.630519351984404e+00 1.629142399219601e+00 1.627765922308133e+00 1.626389922009179e+00 1.625014399080659e+00 + 1.623639354279265e+00 1.622264788360453e+00 1.620890702078400e+00 1.619517096186064e+00 1.618143971435149e+00 + 1.616771328576127e+00 1.615399168358205e+00 1.614027491529341e+00 1.612656298836264e+00 1.611285591024459e+00 + 1.609915368838130e+00 1.608545633020264e+00 1.607176384312610e+00 1.605807623455630e+00 1.604439351188578e+00 + 1.603071568249430e+00 1.601704275374933e+00 1.600337473300579e+00 1.598971162760620e+00 1.597605344488042e+00 + 1.596240019214590e+00 1.594875187670765e+00 1.593510850585818e+00 1.592147008687743e+00 1.590783662703295e+00 + 1.589420813357984e+00 1.588058461376040e+00 1.586696607480464e+00 1.585335252393024e+00 1.583974396834204e+00 + 1.582614041523265e+00 1.581254187178199e+00 1.579894834515759e+00 1.578535984251441e+00 1.577177637099484e+00 + 1.575819793772898e+00 1.574462454983416e+00 1.573105621441532e+00 1.571749293856505e+00 1.570393472936302e+00 + 1.569038159387668e+00 1.567683353916094e+00 1.566329057225817e+00 1.564975270019825e+00 1.563621992999830e+00 + 1.562269226866323e+00 1.560916972318530e+00 1.559565230054428e+00 1.558214000770727e+00 1.556863285162908e+00 + 1.555513083925185e+00 1.554163397750515e+00 1.552814227330616e+00 1.551465573355948e+00 1.550117436515704e+00 + 1.548769817497840e+00 1.547422716989063e+00 1.546076135674802e+00 1.544730074239269e+00 1.543384533365398e+00 + 1.542039513734856e+00 1.540695016028101e+00 1.539351040924293e+00 1.538007589101356e+00 1.536664661235985e+00 + 1.535322258003567e+00 1.533980380078283e+00 1.532639028133042e+00 1.531298202839501e+00 1.529957904868055e+00 + 1.528618134887863e+00 1.527278893566806e+00 1.525940181571536e+00 1.524601999567439e+00 1.523264348218643e+00 + 1.521927228188036e+00 1.520590640137232e+00 1.519254584726615e+00 1.517919062615281e+00 1.516584074461117e+00 + 1.515249620920717e+00 1.513915702649432e+00 1.512582320301378e+00 1.511249474529393e+00 1.509917165985066e+00 + 1.508585395318740e+00 1.507254163179498e+00 1.505923470215178e+00 1.504593317072348e+00 1.503263704396329e+00 + 1.501934632831194e+00 1.500606103019750e+00 1.499278115603573e+00 1.497950671222953e+00 1.496623770516953e+00 + 1.495297414123367e+00 1.493971602678752e+00 1.492646336818377e+00 1.491321617176292e+00 1.489997444385281e+00 + 1.488673819076880e+00 1.487350741881356e+00 1.486028213427729e+00 1.484706234343782e+00 1.483384805256019e+00 + 1.482063926789707e+00 1.480743599568865e+00 1.479423824216234e+00 1.478104601353317e+00 1.476785931600370e+00 + 1.475467815576392e+00 1.474150253899121e+00 1.472833247185061e+00 1.471516796049425e+00 1.470200901106222e+00 + 1.468885562968169e+00 1.467570782246758e+00 1.466256559552203e+00 1.464942895493489e+00 1.463629790678345e+00 + 1.462317245713219e+00 1.461005261203346e+00 1.459693837752699e+00 1.458382975963975e+00 1.457072676438644e+00 + 1.455762939776927e+00 1.454453766577767e+00 1.453145157438869e+00 1.451837112956714e+00 1.450529633726489e+00 + 1.449222720342158e+00 1.447916373396406e+00 1.446610593480709e+00 1.445305381185257e+00 1.444000737098990e+00 + 1.442696661809634e+00 1.441393155903622e+00 1.440090219966154e+00 1.438787854581190e+00 1.437486060331422e+00 + 1.436184837798305e+00 1.434884187562036e+00 1.433584110201574e+00 1.432284606294610e+00 1.430985676417599e+00 + 1.429687321145755e+00 1.428389541053028e+00 1.427092336712117e+00 1.425795708694494e+00 1.424499657570356e+00 + 1.423204183908668e+00 1.421909288277149e+00 1.420614971242262e+00 1.419321233369230e+00 1.418028075222018e+00 + 1.416735497363345e+00 1.415443500354701e+00 1.414152084756298e+00 1.412861251127132e+00 1.411571000024939e+00 + 1.410281332006209e+00 1.408992247626182e+00 1.407703747438863e+00 1.406415831996996e+00 1.405128501852091e+00 + 1.403841757554408e+00 1.402555599652978e+00 1.401270028695548e+00 1.399985045228673e+00 1.398700649797612e+00 + 1.397416842946428e+00 1.396133625217893e+00 1.394850997153574e+00 1.393568959293758e+00 1.392287512177535e+00 + 1.391006656342719e+00 1.389726392325873e+00 1.388446720662355e+00 1.387167641886243e+00 1.385889156530399e+00 + 1.384611265126426e+00 1.383333968204690e+00 1.382057266294319e+00 1.380781159923203e+00 1.379505649617994e+00 + 1.378230735904076e+00 1.376956419305637e+00 1.375682700345576e+00 1.374409579545593e+00 1.373137057426132e+00 + 1.371865134506398e+00 1.370593811304350e+00 1.369323088336727e+00 1.368052966119001e+00 1.366783445165447e+00 + 1.365514525989052e+00 1.364246209101613e+00 1.362978495013662e+00 1.361711384234493e+00 1.360444877272180e+00 + 1.359178974633552e+00 1.357913676824188e+00 1.356648984348459e+00 1.355384897709471e+00 1.354121417409130e+00 + 1.352858543948064e+00 1.351596277825704e+00 1.350334619540223e+00 1.349073569588566e+00 1.347813128466461e+00 + 1.346553296668387e+00 1.345294074687576e+00 1.344035463016052e+00 1.342777462144590e+00 1.341520072562751e+00 + 1.340263294758853e+00 1.339007129219971e+00 1.337751576431977e+00 1.336496636879481e+00 1.335242311045890e+00 + 1.333988599413358e+00 1.332735502462816e+00 1.331483020673992e+00 1.330231154525344e+00 1.328979904494120e+00 + 1.327729271056335e+00 1.326479254686793e+00 1.325229855859059e+00 1.323981075045455e+00 1.322732912717099e+00 + 1.321485369343868e+00 1.320238445394424e+00 1.318992141336197e+00 1.317746457635386e+00 1.316501394756984e+00 + 1.315256953164734e+00 1.314013133321173e+00 1.312769935687601e+00 1.311527360724106e+00 1.310285408889543e+00 + 1.309044080641558e+00 1.307803376436556e+00 1.306563296729748e+00 1.305323841975075e+00 1.304085012625311e+00 + 1.302846809131983e+00 1.301609231945378e+00 1.300372281514607e+00 1.299135958287533e+00 1.297900262710800e+00 + 1.296665195229835e+00 1.295430756288858e+00 1.294196946330868e+00 1.292963765797621e+00 1.291731215129691e+00 + 1.290499294766417e+00 1.289268005145928e+00 1.288037346705115e+00 1.286807319879695e+00 1.285577925104142e+00 + 1.284349162811706e+00 1.283121033434457e+00 1.281893537403209e+00 1.280666675147605e+00 1.279440447096034e+00 + 1.278214853675714e+00 1.276989895312608e+00 1.275765572431509e+00 1.274541885455963e+00 1.273318834808338e+00 + 1.272096420909763e+00 1.270874644180162e+00 1.269653505038279e+00 1.268433003901601e+00 1.267213141186455e+00 + 1.265993917307924e+00 1.264775332679890e+00 1.263557387715048e+00 1.262340082824866e+00 1.261123418419613e+00 + 1.259907394908352e+00 1.258692012698945e+00 1.257477272198039e+00 1.256263173811081e+00 1.255049717942313e+00 + 1.253836904994787e+00 1.252624735370336e+00 1.251413209469588e+00 1.250202327691992e+00 1.248992090435768e+00 + 1.247782498097959e+00 1.246573551074382e+00 1.245365249759682e+00 1.244157594547280e+00 1.242950585829417e+00 + 1.241744223997117e+00 1.240538509440227e+00 1.239333442547393e+00 1.238129023706036e+00 1.236925253302418e+00 + 1.235722131721585e+00 1.234519659347382e+00 1.233317836562487e+00 1.232116663748353e+00 1.230916141285261e+00 + 1.229716269552277e+00 1.228517048927289e+00 1.227318479786994e+00 1.226120562506895e+00 1.224923297461305e+00 + 1.223726685023331e+00 1.222530725564919e+00 1.221335419456789e+00 1.220140767068504e+00 1.218946768768438e+00 + 1.217753424923737e+00 1.216560735900410e+00 1.215368702063246e+00 1.214177323775868e+00 1.212986601400692e+00 + 1.211796535298973e+00 1.210607125830762e+00 1.209418373354928e+00 1.208230278229165e+00 1.207042840809989e+00 + 1.205856061452706e+00 1.204669940511476e+00 1.203484478339251e+00 1.202299675287814e+00 1.201115531707771e+00 + 1.199932047948530e+00 1.198749224358340e+00 1.197567061284265e+00 1.196385559072188e+00 1.195204718066825e+00 + 1.194024538611684e+00 1.192845021049147e+00 1.191666165720385e+00 1.190487972965393e+00 1.189310443123009e+00 + 1.188133576530880e+00 1.186957373525507e+00 1.185781834442185e+00 1.184606959615057e+00 1.183432749377081e+00 + 1.182259204060076e+00 1.181086323994643e+00 1.179914109510246e+00 1.178742560935170e+00 1.177571678596544e+00 + 1.176401462820306e+00 1.175231913931248e+00 1.174063032252984e+00 1.172894818107960e+00 1.171727271817474e+00 + 1.170560393701625e+00 1.169394184079387e+00 1.168228643268553e+00 1.167063771585749e+00 1.165899569346434e+00 + 1.164736036864928e+00 1.163573174454374e+00 1.162410982426746e+00 1.161249461092880e+00 1.160088610762436e+00 + 1.158928431743923e+00 1.157768924344685e+00 1.156610088870927e+00 1.155451925627675e+00 1.154294434918809e+00 + 1.153137617047059e+00 1.151981472313989e+00 1.150826001020023e+00 1.149671203464409e+00 1.148517079945276e+00 + 1.147363630759565e+00 1.146210856203089e+00 1.145058756570504e+00 1.143907332155318e+00 1.142756583249880e+00 + 1.141606510145410e+00 1.140457113131954e+00 1.139308392498426e+00 1.138160348532594e+00 1.137012981521088e+00 + 1.135866291749359e+00 1.134720279501761e+00 1.133574945061461e+00 1.132430288710505e+00 1.131286310729794e+00 + 1.130143011399090e+00 1.129000390996996e+00 1.127858449800988e+00 1.126717188087415e+00 1.125576606131466e+00 + 1.124436704207194e+00 1.123297482587523e+00 1.122158941544228e+00 1.121021081347968e+00 1.119883902268232e+00 + 1.118747404573414e+00 1.117611588530747e+00 1.116476454406328e+00 1.115342002465144e+00 1.114208232971036e+00 + 1.113075146186707e+00 1.111942742373729e+00 1.110811021792571e+00 1.109679984702529e+00 1.108549631361805e+00 + 1.107419962027460e+00 1.106290976955429e+00 1.105162676400518e+00 1.104035060616406e+00 1.102908129855662e+00 + 1.101781884369700e+00 1.100656324408844e+00 1.099531450222279e+00 1.098407262058054e+00 1.097283760163130e+00 + 1.096160944783308e+00 1.095038816163303e+00 1.093917374546702e+00 1.092796620175943e+00 1.091676553292395e+00 + 1.090557174136282e+00 1.089438482946698e+00 1.088320479961658e+00 1.087203165418041e+00 1.086086539551597e+00 + 1.084970602596999e+00 1.083855354787780e+00 1.082740796356357e+00 1.081626927534068e+00 1.080513748551103e+00 + 1.079401259636564e+00 1.078289461018445e+00 1.077178352923623e+00 1.076067935577865e+00 1.074958209205841e+00 + 1.073849174031113e+00 1.072740830276135e+00 1.071633178162253e+00 1.070526217909715e+00 1.069419949737671e+00 + 1.068314373864152e+00 1.067209490506112e+00 1.066105299879377e+00 1.065001802198705e+00 1.063898997677714e+00 + 1.062796886528978e+00 1.061695468963908e+00 1.060594745192882e+00 1.059494715425136e+00 1.058395379868838e+00 + 1.057296738731042e+00 1.056198792217720e+00 1.055101540533767e+00 1.054004983882941e+00 1.052909122467960e+00 + 1.051813956490415e+00 1.050719486150831e+00 1.049625711648621e+00 1.048532633182132e+00 1.047440250948613e+00 + 1.046348565144226e+00 1.045257575964051e+00 1.044167283602085e+00 1.043077688251234e+00 1.041988790103326e+00 + 1.040900589349111e+00 1.039813086178243e+00 1.038726280779314e+00 1.037640173339811e+00 1.036554764046183e+00 + 1.035470053083749e+00 1.034386040636792e+00 1.033302726888494e+00 1.032220112020972e+00 1.031138196215273e+00 + 1.030056979651357e+00 1.028976462508116e+00 1.027896644963373e+00 1.026817527193873e+00 1.025739109375303e+00 + 1.024661391682253e+00 1.023584374288273e+00 1.022508057365827e+00 1.021432441086318e+00 1.020357525620085e+00 + 1.019283311136396e+00 1.018209797803450e+00 1.017136985788391e+00 1.016064875257293e+00 1.014993466375182e+00 + 1.013922759305986e+00 1.012852754212625e+00 1.011783451256911e+00 1.010714850599617e+00 1.009646952400460e+00 + 1.008579756818097e+00 1.007513264010127e+00 1.006447474133101e+00 1.005382387342503e+00 1.004318003792757e+00 + 1.003254323637251e+00 1.002191347028324e+00 1.001129074117245e+00 1.000067505054238e+00 9.990066399884867e-01 + 9.979464790681216e-01 9.968870224402149e-01 9.958282702508015e-01 9.947702226448700e-01 9.937128797663605e-01 + 9.926562417581684e-01 9.916003087621491e-01 9.905450809191109e-01 9.894905583688210e-01 9.884367412500075e-01 + 9.873836297003549e-01 9.863312238565132e-01 9.852795238540879e-01 9.842285298276514e-01 9.831782419107389e-01 + 9.821286602358464e-01 9.810797849344380e-01 9.800316161369445e-01 9.789841539727603e-01 9.779373985702500e-01 + 9.768913500567438e-01 9.758460085585459e-01 9.748013742009272e-01 9.737574471081304e-01 9.727142274033723e-01 + 9.716717152088393e-01 9.706299106456946e-01 9.695888138340764e-01 9.685484248930956e-01 9.675087439408417e-01 + 9.664697710943825e-01 9.654315064697624e-01 9.643939501820056e-01 9.633571023451181e-01 9.623209630720845e-01 + 9.612855324748736e-01 9.602508106644340e-01 9.592167977507019e-01 9.581834938425962e-01 9.571508990480220e-01 + 9.561190134738696e-01 9.550878372260180e-01 9.540573704093351e-01 9.530276131276783e-01 9.519985654838922e-01 + 9.509702275798145e-01 9.499425995162768e-01 9.489156813931003e-01 9.478894733091031e-01 9.468639753620941e-01 + 9.458391876488828e-01 9.448151102652727e-01 9.437917433060639e-01 9.427690868650566e-01 9.417471410350493e-01 + 9.407259059078428e-01 9.397053815742373e-01 9.386855681240360e-01 9.376664656460446e-01 9.366480742280739e-01 + 9.356303939569384e-01 9.346134249184591e-01 9.335971671974641e-01 9.325816208777891e-01 9.315667860422785e-01 + 9.305526627727867e-01 9.295392511501777e-01 9.285265512543281e-01 9.275145631641277e-01 9.265032869574776e-01 + 9.254927227112941e-01 9.244828705015097e-01 9.234737304030731e-01 9.224653024899486e-01 9.214575868351202e-01 + 9.204505835105908e-01 9.194442925873830e-01 9.184387141355398e-01 9.174338482241285e-01 9.164296949212357e-01 + 9.154262542939761e-01 9.144235264084847e-01 9.134215113299267e-01 9.124202091224917e-01 9.114196198493950e-01 + 9.104197435728861e-01 9.094205803542386e-01 9.084221302537594e-01 9.074243933307865e-01 9.064273696436902e-01 + 9.054310592498754e-01 9.044354622057784e-01 9.034405785668755e-01 9.024464083876746e-01 9.014529517217246e-01 + 9.004602086216105e-01 8.994681791389586e-01 8.984768633244326e-01 8.974862612277391e-01 8.964963728976282e-01 + 8.955071983818899e-01 8.945187377273618e-01 8.935309909799241e-01 8.925439581845038e-01 8.915576393850758e-01 + 8.905720346246624e-01 8.895871439453347e-01 8.886029673882134e-01 8.876195049934711e-01 8.866367568003338e-01 + 8.856547228470765e-01 8.846734031710306e-01 8.836927978085835e-01 8.827129067951759e-01 8.817337301653075e-01 + 8.807552679525346e-01 8.797775201894729e-01 8.788004869077992e-01 8.778241681382467e-01 8.768485639106163e-01 + 8.758736742537677e-01 8.748994991956263e-01 8.739260387631828e-01 8.729532929824899e-01 8.719812618786719e-01 + 8.710099454759177e-01 8.700393437974878e-01 8.690694568657086e-01 8.681002847019810e-01 8.671318273267754e-01 + 8.661640847596382e-01 8.651970570191840e-01 8.642307441231066e-01 8.632651460881758e-01 8.623002629302348e-01 + 8.613360946642076e-01 8.603726413040956e-01 8.594099028629804e-01 8.584478793530261e-01 8.574865707854751e-01 + 8.565259771706557e-01 8.555660985179794e-01 8.546069348359399e-01 8.536484861321205e-01 8.526907524131909e-01 + 8.517337336849053e-01 8.507774299521114e-01 8.498218412187430e-01 8.488669674878269e-01 8.479128087614820e-01 + 8.469593650409194e-01 8.460066363264447e-01 8.450546226174567e-01 8.441033239124531e-01 8.431527402090283e-01 + 8.422028715038711e-01 8.412537177927730e-01 8.403052790706261e-01 8.393575553314203e-01 8.384105465682505e-01 + 8.374642527733140e-01 8.365186739379120e-01 8.355738100524518e-01 8.346296611064439e-01 8.336862270885106e-01 + 8.327435079863807e-01 8.318015037868898e-01 8.308602144759878e-01 8.299196400387333e-01 8.289797804592995e-01 + 8.280406357209711e-01 8.271022058061477e-01 8.261644906963459e-01 8.252274903721962e-01 8.242912048134499e-01 + 8.233556339989754e-01 8.224207779067589e-01 8.214866365139095e-01 8.205532097966589e-01 8.196204977303596e-01 + 8.186885002894887e-01 8.177572174476472e-01 8.168266491775638e-01 8.158967954510945e-01 8.149676562392182e-01 + 8.140392315120507e-01 8.131115212388301e-01 8.121845253879326e-01 8.112582439268611e-01 8.103326768222548e-01 + 8.094078240398850e-01 8.084836855446609e-01 8.075602613006256e-01 8.066375512709597e-01 8.057155554179852e-01 + 8.047942737031588e-01 8.038737060870838e-01 8.029538525294975e-01 8.020347129892873e-01 8.011162874244790e-01 + 8.001985757922450e-01 7.992815780489045e-01 7.983652941499214e-01 7.974497240499093e-01 7.965348677026295e-01 + 7.956207250609947e-01 7.947072960770665e-01 7.937945807020598e-01 7.928825788863436e-01 7.919712905794390e-01 + 7.910607157300246e-01 7.901508542859329e-01 7.892417061941576e-01 7.883332714008452e-01 7.874255498513054e-01 + 7.865185414900101e-01 7.856122462605885e-01 7.847066641058353e-01 7.838017949677083e-01 7.828976387873290e-01 + 7.819941955049877e-01 7.810914650601365e-01 7.801894473914022e-01 7.792881424365740e-01 7.783875501326160e-01 + 7.774876704156618e-01 7.765885032210167e-01 7.756900484831593e-01 7.747923061357447e-01 7.738952761116007e-01 + 7.729989583427321e-01 7.721033527603236e-01 7.712084592947351e-01 7.703142778755102e-01 7.694208084313687e-01 + 7.685280508902158e-01 7.676360051791388e-01 7.667446712244074e-01 7.658540489514787e-01 7.649641382849937e-01 + 7.640749391487830e-01 7.631864514658649e-01 7.622986751584447e-01 7.614116101479196e-01 7.605252563548796e-01 + 7.596396136991068e-01 7.587546820995754e-01 7.578704614744550e-01 7.569869517411109e-01 7.561041528161087e-01 + 7.552220646152050e-01 7.543406870533618e-01 7.534600200447384e-01 7.525800635026955e-01 7.517008173397954e-01 + 7.508222814678063e-01 7.499444557976980e-01 7.490673402396480e-01 7.481909347030380e-01 7.473152390964596e-01 + 7.464402533277119e-01 7.455659773038036e-01 7.446924109309576e-01 7.438195541146033e-01 7.429474067593865e-01 + 7.420759687691674e-01 7.412052400470204e-01 7.403352204952367e-01 7.394659100153245e-01 7.385973085080106e-01 + 7.377294158732423e-01 7.368622320101857e-01 7.359957568172314e-01 7.351299901919900e-01 7.342649320312976e-01 + 7.334005822312142e-01 7.325369406870272e-01 7.316740072932514e-01 7.308117819436288e-01 7.299502645311305e-01 + 7.290894549479591e-01 7.282293530855477e-01 7.273699588345632e-01 7.265112720849067e-01 7.256532927257104e-01 + 7.247960206453473e-01 7.239394557314253e-01 7.230835978707880e-01 7.222284469495232e-01 7.213740028529538e-01 + 7.205202654656477e-01 7.196672346714147e-01 7.188149103533061e-01 7.179632923936191e-01 7.171123806738980e-01 + 7.162621750749310e-01 7.154126754767575e-01 7.145638817586635e-01 7.137157937991853e-01 7.128684114761125e-01 + 7.120217346664840e-01 7.111757632465932e-01 7.103304970919904e-01 7.094859360774778e-01 7.086420800771165e-01 + 7.077989289642240e-01 7.069564826113784e-01 7.061147408904156e-01 7.052737036724352e-01 7.044333708277962e-01 + 7.035937422261236e-01 7.027548177363039e-01 7.019165972264917e-01 7.010790805641052e-01 7.002422676158337e-01 + 6.994061582476330e-01 6.985707523247289e-01 6.977360497116196e-01 6.969020502720719e-01 6.960687538691304e-01 + 6.952361603651105e-01 6.944042696216044e-01 6.935730814994810e-01 6.927425958588852e-01 6.919128125592414e-01 + 6.910837314592551e-01 6.902553524169101e-01 6.894276752894737e-01 6.886006999334972e-01 6.877744262048131e-01 + 6.869488539585418e-01 6.861239830490892e-01 6.852998133301489e-01 6.844763446547026e-01 6.836535768750205e-01 + 6.828315098426666e-01 6.820101434084949e-01 6.811894774226507e-01 6.803695117345774e-01 6.795502461930102e-01 + 6.787316806459818e-01 6.779138149408228e-01 6.770966489241615e-01 6.762801824419261e-01 6.754644153393453e-01 + 6.746493474609487e-01 6.738349786505716e-01 6.730213087513502e-01 6.722083376057278e-01 6.713960650554526e-01 + 6.705844909415813e-01 6.697736151044781e-01 6.689634373838176e-01 6.681539576185845e-01 6.673451756470746e-01 + 6.665370913068981e-01 6.657297044349774e-01 6.649230148675519e-01 6.641170224401756e-01 6.633117269877205e-01 + 6.625071283443766e-01 6.617032263436535e-01 6.609000208183810e-01 6.600975116007117e-01 6.592956985221207e-01 + 6.584945814134063e-01 6.576941601046911e-01 6.568944344254265e-01 6.560954042043885e-01 6.552970692696822e-01 + 6.544994294487438e-01 6.537024845683368e-01 6.529062344545608e-01 6.521106789328426e-01 6.513158178279470e-01 + 6.505216509639736e-01 6.497281781643566e-01 6.489353992518665e-01 6.481433140486149e-01 6.473519223760511e-01 + 6.465612240549649e-01 6.457712189054885e-01 6.449819067470955e-01 6.441932873986055e-01 6.434053606781801e-01 + 6.426181264033304e-01 6.418315843909113e-01 6.410457344571281e-01 6.402605764175353e-01 6.394761100870375e-01 + 6.386923352798892e-01 6.379092518097015e-01 6.371268594894354e-01 6.363451581314088e-01 6.355641475472962e-01 + 6.347838275481271e-01 6.340041979442921e-01 6.332252585455379e-01 6.324470091609733e-01 6.316694495990686e-01 + 6.308925796676585e-01 6.301163991739377e-01 6.293409079244694e-01 6.285661057251791e-01 6.277919923813637e-01 + 6.270185676976848e-01 6.262458314781745e-01 6.254737835262366e-01 6.247024236446445e-01 6.239317516355453e-01 + 6.231617673004594e-01 6.223924704402825e-01 6.216238608552849e-01 6.208559383451155e-01 6.200887027088013e-01 + 6.193221537447481e-01 6.185562912507417e-01 6.177911150239497e-01 6.170266248609239e-01 6.162628205575960e-01 + 6.154997019092870e-01 6.147372687107010e-01 6.139755207559282e-01 6.132144578384504e-01 6.124540797511364e-01 + 6.116943862862451e-01 6.109353772354286e-01 6.101770523897286e-01 6.094194115395836e-01 6.086624544748255e-01 + 6.079061809846809e-01 6.071505908577768e-01 6.063956838821338e-01 6.056414598451745e-01 6.048879185337234e-01 + 6.041350597340008e-01 6.033828832316360e-01 6.026313888116562e-01 6.018805762584986e-01 6.011304453560027e-01 + 6.003809958874148e-01 5.996322276353907e-01 5.988841403819964e-01 5.981367339087040e-01 5.973900079964027e-01 + 5.966439624253888e-01 5.958985969753752e-01 5.951539114254883e-01 5.944099055542715e-01 5.936665791396830e-01 + 5.929239319591024e-01 5.921819637893219e-01 5.914406744065629e-01 5.907000635864601e-01 5.899601311040750e-01 + 5.892208767338908e-01 5.884823002498174e-01 5.877444014251861e-01 5.870071800327599e-01 5.862706358447271e-01 + 5.855347686327043e-01 5.847995781677403e-01 5.840650642203148e-01 5.833312265603372e-01 5.825980649571535e-01 + 5.818655791795422e-01 5.811337689957200e-01 5.804026341733347e-01 5.796721744794791e-01 5.789423896806795e-01 + 5.782132795429049e-01 5.774848438315650e-01 5.767570823115092e-01 5.760299947470345e-01 5.753035809018785e-01 + 5.745778405392276e-01 5.738527734217127e-01 5.731283793114114e-01 5.724046579698522e-01 5.716816091580137e-01 + 5.709592326363224e-01 5.702375281646619e-01 5.695164955023637e-01 5.687961344082173e-01 5.680764446404661e-01 + 5.673574259568105e-01 5.666390781144071e-01 5.659214008698717e-01 5.652043939792823e-01 5.644880571981747e-01 + 5.637723902815484e-01 5.630573929838643e-01 5.623430650590496e-01 5.616294062604945e-01 5.609164163410570e-01 + 5.602040950530631e-01 5.594924421483047e-01 5.587814573780456e-01 5.580711404930209e-01 5.573614912434349e-01 + 5.566525093789667e-01 5.559441946487687e-01 5.552365468014686e-01 5.545295655851697e-01 5.538232507474539e-01 + 5.531176020353810e-01 5.524126191954886e-01 5.517083019737967e-01 5.510046501158057e-01 5.503016633665005e-01 + 5.495993414703482e-01 5.488976841713015e-01 5.481966912127982e-01 5.474963623377633e-01 5.467966972886121e-01 + 5.460976958072464e-01 5.453993576350594e-01 5.447016825129358e-01 5.440046701812526e-01 5.433083203798809e-01 + 5.426126328481869e-01 5.419176073250306e-01 5.412232435487707e-01 5.405295412572630e-01 5.398365001878622e-01 + 5.391441200774240e-01 5.384524006623044e-01 5.377613416783629e-01 5.370709428609596e-01 5.363812039449629e-01 + 5.356921246647443e-01 5.350037047541809e-01 5.343159439466624e-01 5.336288419750793e-01 5.329423985718411e-01 + 5.322566134688602e-01 5.315714863975666e-01 5.308870170889014e-01 5.302032052733175e-01 5.295200506807880e-01 + 5.288375530407972e-01 5.281557120823517e-01 5.274745275339738e-01 5.267939991237049e-01 5.261141265791089e-01 + 5.254349096272699e-01 5.247563479947955e-01 5.240784414078173e-01 5.234011895919920e-01 5.227245922725017e-01 + 5.220486491740567e-01 5.213733600208939e-01 5.206987245367811e-01 5.200247424450150e-01 5.193514134684242e-01 + 5.186787373293709e-01 5.180067137497504e-01 5.173353424509914e-01 5.166646231540590e-01 5.159945555794558e-01 + 5.153251394472215e-01 5.146563744769358e-01 5.139882603877164e-01 5.133207968982227e-01 5.126539837266588e-01 + 5.119878205907692e-01 5.113223072078422e-01 5.106574432947141e-01 5.099932285677666e-01 5.093296627429268e-01 + 5.086667455356741e-01 5.080044766610340e-01 5.073428558335846e-01 5.066818827674560e-01 5.060215571763299e-01 + 5.053618787734429e-01 5.047028472715853e-01 5.040444623831054e-01 5.033867238199060e-01 5.027296312934522e-01 + 5.020731845147619e-01 5.014173831944200e-01 5.007622270425683e-01 5.001077157689119e-01 4.994538490827209e-01 + 4.988006266928294e-01 4.981480483076352e-01 4.974961136351044e-01 4.968448223827706e-01 4.961941742577364e-01 + 4.955441689666741e-01 4.948948062158257e-01 4.942460857110060e-01 4.935980071576035e-01 4.929505702605805e-01 + 4.923037747244742e-01 4.916576202533964e-01 4.910121065510375e-01 4.903672333206671e-01 4.897230002651330e-01 + 4.890794070868633e-01 4.884364534878674e-01 4.877941391697386e-01 4.871524638336520e-01 4.865114271803674e-01 + 4.858710289102314e-01 4.852312687231771e-01 4.845921463187237e-01 4.839536613959817e-01 4.833158136536499e-01 + 4.826786027900171e-01 4.820420285029666e-01 4.814060904899717e-01 4.807707884481030e-01 4.801361220740235e-01 + 4.795020910639930e-01 4.788686951138691e-01 4.782359339191070e-01 4.776038071747616e-01 4.769723145754876e-01 + 4.763414558155404e-01 4.757112305887811e-01 4.750816385886694e-01 4.744526795082739e-01 4.738243530402647e-01 + 4.731966588769217e-01 4.725695967101307e-01 4.719431662313867e-01 4.713173671317938e-01 4.706921991020678e-01 + 4.700676618325349e-01 4.694437550131362e-01 4.688204783334236e-01 4.681978314825663e-01 4.675758141493496e-01 + 4.669544260221732e-01 4.663336667890556e-01 4.657135361376380e-01 4.650940337551752e-01 4.644751593285487e-01 + 4.638569125442587e-01 4.632392930884300e-01 4.626223006468113e-01 4.620059349047756e-01 4.613901955473248e-01 + 4.607750822590845e-01 4.601605947243118e-01 4.595467326268886e-01 4.589334956503333e-01 4.583208834777902e-01 + 4.577088957920389e-01 4.570975322754922e-01 4.564867926101958e-01 4.558766764778328e-01 4.552671835597215e-01 + 4.546583135368169e-01 4.540500660897158e-01 4.534424408986504e-01 4.528354376434978e-01 4.522290560037716e-01 + 4.516232956586330e-01 4.510181562868839e-01 4.504136375669709e-01 4.498097391769872e-01 4.492064607946734e-01 + 4.486038020974150e-01 4.480017627622501e-01 4.474003424658632e-01 4.467995408845908e-01 4.461993576944216e-01 + 4.455997925709962e-01 4.450008451896098e-01 4.444025152252121e-01 4.438048023524084e-01 4.432077062454607e-01 + 4.426112265782896e-01 4.420153630244744e-01 4.414201152572537e-01 4.408254829495261e-01 4.402314657738544e-01 + 4.396380634024634e-01 4.390452755072401e-01 4.384531017597385e-01 4.378615418311778e-01 4.372705953924432e-01 + 4.366802621140911e-01 4.360905416663407e-01 4.355014337190888e-01 4.349129379418957e-01 4.343250540039994e-01 + 4.337377815743073e-01 4.331511203214026e-01 4.325650699135419e-01 4.319796300186594e-01 4.313948003043650e-01 + 4.308105804379471e-01 4.302269700863726e-01 4.296439689162890e-01 4.290615765940236e-01 4.284797927855867e-01 + 4.278986171566699e-01 4.273180493726519e-01 4.267380890985930e-01 4.261587359992410e-01 4.255799897390296e-01 + 4.250018499820807e-01 4.244243163922069e-01 4.238473886329084e-01 4.232710663673758e-01 4.226953492584934e-01 + 4.221202369688379e-01 4.215457291606787e-01 4.209718254959817e-01 4.203985256364062e-01 4.198258292433102e-01 + 4.192537359777483e-01 4.186822455004763e-01 4.181113574719449e-01 4.175410715523103e-01 4.169713874014289e-01 + 4.164023046788570e-01 4.158338230438582e-01 4.152659421553989e-01 4.146986616721515e-01 4.141319812524955e-01 + 4.135659005545156e-01 4.130004192360092e-01 4.124355369544799e-01 4.118712533671413e-01 4.113075681309209e-01 + 4.107444809024574e-01 4.101819913381024e-01 4.096200990939234e-01 4.090588038257013e-01 4.084981051889344e-01 + 4.079380028388396e-01 4.073784964303475e-01 4.068195856181136e-01 4.062612700565096e-01 4.057035493996292e-01 + 4.051464233012909e-01 4.045898914150316e-01 4.040339533941155e-01 4.034786088915316e-01 4.029238575599932e-01 + 4.023696990519420e-01 4.018161330195475e-01 4.012631591147064e-01 4.007107769890481e-01 4.001589862939302e-01 + 3.996077866804438e-01 3.990571777994110e-01 3.985071593013877e-01 3.979577308366666e-01 3.974088920552739e-01 + 3.968606426069721e-01 3.963129821412633e-01 3.957659103073851e-01 3.952194267543184e-01 3.946735311307787e-01 + 3.941282230852289e-01 3.935835022658694e-01 3.930393683206469e-01 3.924958208972499e-01 3.919528596431140e-01 + 3.914104842054195e-01 3.908686942310948e-01 3.903274893668133e-01 3.897868692590014e-01 3.892468335538330e-01 + 3.887073818972318e-01 3.881685139348753e-01 3.876302293121930e-01 3.870925276743667e-01 3.865554086663346e-01 + 3.860188719327893e-01 3.854829171181787e-01 3.849475438667105e-01 3.844127518223495e-01 3.838785406288180e-01 + 3.833449099296020e-01 3.828118593679444e-01 3.822793885868550e-01 3.817474972291010e-01 3.812161849372175e-01 + 3.806854513535036e-01 3.801552961200226e-01 3.796257188786062e-01 3.790967192708526e-01 3.785682969381282e-01 + 3.780404515215710e-01 3.775131826620874e-01 3.769864900003553e-01 3.764603731768246e-01 3.759348318317201e-01 + 3.754098656050386e-01 3.748854741365527e-01 3.743616570658100e-01 3.738384140321378e-01 3.733157446746377e-01 + 3.727936486321924e-01 3.722721255434626e-01 3.717511750468889e-01 3.712307967806964e-01 3.707109903828906e-01 + 3.701917554912597e-01 3.696730917433756e-01 3.691549987765983e-01 3.686374762280717e-01 3.681205237347253e-01 + 3.676041409332779e-01 3.670883274602387e-01 3.665730829519043e-01 3.660584070443605e-01 3.655442993734889e-01 + 3.650307595749600e-01 3.645177872842377e-01 3.640053821365828e-01 3.634935437670468e-01 3.629822718104829e-01 + 3.624715659015346e-01 3.619614256746479e-01 3.614518507640669e-01 3.609428408038342e-01 3.604343954277918e-01 + 3.599265142695858e-01 3.594191969626622e-01 3.589124431402727e-01 3.584062524354708e-01 3.579006244811140e-01 + 3.573955589098706e-01 3.568910553542108e-01 3.563871134464134e-01 3.558837328185684e-01 3.553809131025703e-01 + 3.548786539301298e-01 3.543769549327649e-01 3.538758157418062e-01 3.533752359883982e-01 3.528752153034981e-01 + 3.523757533178805e-01 3.518768496621318e-01 3.513785039666573e-01 3.508807158616792e-01 3.503834849772394e-01 + 3.498868109431957e-01 3.493906933892287e-01 3.488951319448391e-01 3.484001262393506e-01 3.479056759019057e-01 + 3.474117805614760e-01 3.469184398468534e-01 3.464256533866562e-01 3.459334208093289e-01 3.454417417431443e-01 + 3.449506158162017e-01 3.444600426564296e-01 3.439700218915866e-01 3.434805531492598e-01 3.429916360568718e-01 + 3.425032702416740e-01 3.420154553307516e-01 3.415281909510247e-01 3.410414767292468e-01 3.405553122920100e-01 + 3.400696972657403e-01 3.395846312767012e-01 3.391001139509973e-01 3.386161449145688e-01 3.381327237931988e-01 + 3.376498502125099e-01 3.371675237979661e-01 3.366857441748764e-01 3.362045109683893e-01 3.357238238035015e-01 + 3.352436823050538e-01 3.347640860977307e-01 3.342850348060675e-01 3.338065280544442e-01 3.333285654670907e-01 + 3.328511466680864e-01 3.323742712813598e-01 3.318979389306938e-01 3.314221492397196e-01 3.309469018319214e-01 + 3.304721963306411e-01 3.299980323590714e-01 3.295244095402615e-01 3.290513274971160e-01 3.285787858523982e-01 + 3.281067842287294e-01 3.276353222485864e-01 3.271643995343100e-01 3.266940157080986e-01 3.262241703920133e-01 + 3.257548632079761e-01 3.252860937777726e-01 3.248178617230523e-01 3.243501666653291e-01 3.238830082259833e-01 + 3.234163860262590e-01 3.229502996872700e-01 3.224847488299971e-01 3.220197330752893e-01 3.215552520438660e-01 + 3.210913053563168e-01 3.206278926331034e-01 3.201650134945576e-01 3.197026675608849e-01 3.192408544521667e-01 + 3.187795737883546e-01 3.183188251892805e-01 3.178586082746495e-01 3.173989226640429e-01 3.169397679769224e-01 + 3.164811438326276e-01 3.160230498503765e-01 3.155654856492684e-01 3.151084508482836e-01 3.146519450662829e-01 + 3.141959679220129e-01 3.137405190341007e-01 3.132855980210595e-01 3.128312045012868e-01 3.123773380930663e-01 + 3.119239984145697e-01 3.114711850838541e-01 3.110188977188669e-01 3.105671359374433e-01 3.101158993573090e-01 + 3.096651875960810e-01 3.092150002712682e-01 3.087653370002708e-01 3.083161974003831e-01 3.078675810887930e-01 + 3.074194876825830e-01 3.069719167987313e-01 3.065248680541137e-01 3.060783410655030e-01 3.056323354495664e-01 + 3.051868508228766e-01 3.047418868018996e-01 3.042974430030044e-01 3.038535190424632e-01 3.034101145364465e-01 + 3.029672291010297e-01 3.025248623521908e-01 3.020830139058135e-01 3.016416833776860e-01 3.012008703835015e-01 + 3.007605745388604e-01 3.003207954592724e-01 2.998815327601522e-01 2.994427860568267e-01 2.990045549645299e-01 + 2.985668390984081e-01 2.981296380735197e-01 2.976929515048343e-01 2.972567790072334e-01 2.968211201955141e-01 + 2.963859746843862e-01 2.959513420884770e-01 2.955172220223277e-01 2.950836141003979e-01 2.946505179370640e-01 + 2.942179331466219e-01 2.937858593432844e-01 2.933542961411866e-01 2.929232431543826e-01 2.924926999968498e-01 + 2.920626662824857e-01 2.916331416251108e-01 2.912041256384727e-01 2.907756179362394e-01 2.903476181320059e-01 + 2.899201258392954e-01 2.894931406715530e-01 2.890666622421561e-01 2.886406901644073e-01 2.882152240515402e-01 + 2.877902635167165e-01 2.873658081730311e-01 2.869418576335072e-01 2.865184115111026e-01 2.860954694187058e-01 + 2.856730309691412e-01 2.852510957751660e-01 2.848296634494710e-01 2.844087336046879e-01 2.839883058533796e-01 + 2.835683798080499e-01 2.831489550811389e-01 2.827300312850247e-01 2.823116080320286e-01 2.818936849344081e-01 + 2.814762616043645e-01 2.810593376540404e-01 2.806429126955206e-01 2.802269863408318e-01 2.798115582019479e-01 + 2.793966278907848e-01 2.789821950192047e-01 2.785682591990167e-01 2.781548200419761e-01 2.777418771597872e-01 + 2.773294301641005e-01 2.769174786665186e-01 2.765060222785901e-01 2.760950606118186e-01 2.756845932776550e-01 + 2.752746198875063e-01 2.748651400527293e-01 2.744561533846351e-01 2.740476594944889e-01 2.736396579935119e-01 + 2.732321484928814e-01 2.728251306037287e-01 2.724186039371433e-01 2.720125681041739e-01 2.716070227158268e-01 + 2.712019673830679e-01 2.707974017168218e-01 2.703933253279764e-01 2.699897378273785e-01 2.695866388258382e-01 + 2.691840279341284e-01 2.687819047629872e-01 2.683802689231139e-01 2.679791200251744e-01 2.675784576798002e-01 + 2.671782814975905e-01 2.667785910891098e-01 2.663793860648915e-01 2.659806660354361e-01 2.655824306112161e-01 + 2.651846794026702e-01 2.647874120202130e-01 2.643906280742243e-01 2.639943271750597e-01 2.635985089330481e-01 + 2.632031729584894e-01 2.628083188616605e-01 2.624139462528092e-01 2.620200547421637e-01 2.616266439399239e-01 + 2.612337134562689e-01 2.608412629013569e-01 2.604492918853209e-01 2.600578000182752e-01 2.596667869103139e-01 + 2.592762521715115e-01 2.588861954119210e-01 2.584966162415810e-01 2.581075142705087e-01 2.577188891087085e-01 + 2.573307403661660e-01 2.569430676528514e-01 2.565558705787202e-01 2.561691487537150e-01 2.557829017877642e-01 + 2.553971292907816e-01 2.550118308726715e-01 2.546270061433266e-01 2.542426547126275e-01 2.538587761904437e-01 + 2.534753701866390e-01 2.530924363110650e-01 2.527099741735664e-01 2.523279833839819e-01 2.519464635521411e-01 + 2.515654142878697e-01 2.511848352009855e-01 2.508047259013042e-01 2.504250859986355e-01 2.500459151027862e-01 + 2.496672128235620e-01 2.492889787707647e-01 2.489112125541949e-01 2.485339137836515e-01 2.481570820689361e-01 + 2.477807170198497e-01 2.474048182461928e-01 2.470293853577692e-01 2.466544179643857e-01 2.462799156758520e-01 + 2.459058781019798e-01 2.455323048525889e-01 2.451591955375010e-01 2.447865497665446e-01 2.444143671495556e-01 + 2.440426472963757e-01 2.436713898168554e-01 2.433005943208524e-01 2.429302604182354e-01 2.425603877188800e-01 + 2.421909758326747e-01 2.418220243695161e-01 2.414535329393168e-01 2.410855011519973e-01 2.407179286174932e-01 + 2.403508149457528e-01 2.399841597467388e-01 2.396179626304304e-01 2.392522232068181e-01 2.388869410859133e-01 + 2.385221158777404e-01 2.381577471923426e-01 2.377938346397812e-01 2.374303778301365e-01 2.370673763735067e-01 + 2.367048298800100e-01 2.363427379597876e-01 2.359811002229974e-01 2.356199162798227e-01 2.352591857404684e-01 + 2.348989082151615e-01 2.345390833141520e-01 2.341797106477158e-01 2.338207898261537e-01 2.334623204597906e-01 + 2.331043021589781e-01 2.327467345340931e-01 2.323896171955442e-01 2.320329497537631e-01 2.316767318192112e-01 + 2.313209630023801e-01 2.309656429137924e-01 2.306107711639973e-01 2.302563473635783e-01 2.299023711231496e-01 + 2.295488420533565e-01 2.291957597648781e-01 2.288431238684267e-01 2.284909339747493e-01 2.281391896946268e-01 + 2.277878906388743e-01 2.274370364183455e-01 2.270866266439283e-01 2.267366609265475e-01 2.263871388771676e-01 + 2.260380601067894e-01 2.256894242264524e-01 2.253412308472370e-01 2.249934795802627e-01 2.246461700366907e-01 + 2.242993018277214e-01 2.239528745645978e-01 2.236068878586062e-01 2.232613413210755e-01 2.229162345633777e-01 + 2.225715671969297e-01 2.222273388331912e-01 2.218835490836709e-01 2.215401975599186e-01 2.211972838735347e-01 + 2.208548076361656e-01 2.205127684595039e-01 2.201711659552917e-01 2.198299997353193e-01 2.194892694114288e-01 + 2.191489745955082e-01 2.188091148994985e-01 2.184696899353915e-01 2.181306993152319e-01 2.177921426511134e-01 + 2.174540195551867e-01 2.171163296396531e-01 2.167790725167690e-01 2.164422477988437e-01 2.161058550982445e-01 + 2.157698940273923e-01 2.154343641987652e-01 2.150992652248970e-01 2.147645967183806e-01 2.144303582918655e-01 + 2.140965495580604e-01 2.137631701297338e-01 2.134302196197108e-01 2.130976976408810e-01 2.127656038061924e-01 + 2.124339377286529e-01 2.121026990213367e-01 2.117718872973763e-01 2.114415021699677e-01 2.111115432523733e-01 + 2.107820101579166e-01 2.104529024999880e-01 2.101242198920406e-01 2.097959619475948e-01 2.094681282802384e-01 + 2.091407185036244e-01 2.088137322314734e-01 2.084871690775743e-01 2.081610286557834e-01 2.078353105800292e-01 + 2.075100144643059e-01 2.071851399226798e-01 2.068606865692889e-01 2.065366540183409e-01 2.062130418841139e-01 + 2.058898497809612e-01 2.055670773233076e-01 2.052447241256503e-01 2.049227898025626e-01 2.046012739686907e-01 + 2.042801762387565e-01 2.039594962275559e-01 2.036392335499625e-01 2.033193878209261e-01 2.029999586554719e-01 + 2.026809456687064e-01 2.023623484758107e-01 2.020441666920468e-01 2.017263999327536e-01 2.014090478133518e-01 + 2.010921099493411e-01 2.007755859563039e-01 2.004594754499015e-01 2.001437780458781e-01 1.998284933600597e-01 + 1.995136210083561e-01 1.991991606067601e-01 1.988851117713474e-01 1.985714741182791e-01 1.982582472638028e-01 + 1.979454308242465e-01 1.976330244160291e-01 1.973210276556544e-01 1.970094401597132e-01 1.966982615448829e-01 + 1.963874914279289e-01 1.960771294257064e-01 1.957671751551583e-01 1.954576282333187e-01 1.951484882773101e-01 + 1.948397549043441e-01 1.945314277317271e-01 1.942235063768554e-01 1.939159904572149e-01 1.936088795903877e-01 + 1.933021733940474e-01 1.929958714859586e-01 1.926899734839857e-01 1.923844790060809e-01 1.920793876702963e-01 + 1.917746990947777e-01 1.914704128977669e-01 1.911665286976015e-01 1.908630461127178e-01 1.905599647616479e-01 + 1.902572842630220e-01 1.899550042355709e-01 1.896531242981203e-01 1.893516440695996e-01 1.890505631690352e-01 + 1.887498812155542e-01 1.884495978283856e-01 1.881497126268592e-01 1.878502252304055e-01 1.875511352585610e-01 + 1.872524423309599e-01 1.869541460673424e-01 1.866562460875531e-01 1.863587420115388e-01 1.860616334593531e-01 + 1.857649200511532e-01 1.854686014072012e-01 1.851726771478671e-01 1.848771468936277e-01 1.845820102650653e-01 + 1.842872668828705e-01 1.839929163678404e-01 1.836989583408840e-01 1.834053924230150e-01 1.831122182353590e-01 + 1.828194353991515e-01 1.825270435357385e-01 1.822350422665742e-01 1.819434312132263e-01 1.816522099973743e-01 + 1.813613782408078e-01 1.810709355654329e-01 1.807808815932646e-01 1.804912159464326e-01 1.802019382471817e-01 + 1.799130481178711e-01 1.796245451809731e-01 1.793364290590777e-01 1.790486993748875e-01 1.787613557512253e-01 + 1.784743978110273e-01 1.781878251773486e-01 1.779016374733613e-01 1.776158343223561e-01 1.773304153477404e-01 + 1.770453801730426e-01 1.767607284219088e-01 1.764764597181069e-01 1.761925736855235e-01 1.759090699481650e-01 + 1.756259481301618e-01 1.753432078557638e-01 1.750608487493419e-01 1.747788704353936e-01 1.744972725385343e-01 + 1.742160546835052e-01 1.739352164951711e-01 1.736547575985218e-01 1.733746776186698e-01 1.730949761808543e-01 + 1.728156529104383e-01 1.725367074329127e-01 1.722581393738921e-01 1.719799483591218e-01 1.717021340144699e-01 + 1.714246959659354e-01 1.711476338396430e-01 1.708709472618481e-01 1.705946358589329e-01 1.703186992574095e-01 + 1.700431370839215e-01 1.697679489652405e-01 1.694931345282678e-01 1.692186934000406e-01 1.689446252077205e-01 + 1.686709295786072e-01 1.683976061401281e-01 1.681246545198453e-01 1.678520743454547e-01 1.675798652447849e-01 + 1.673080268457973e-01 1.670365587765881e-01 1.667654606653893e-01 1.664947321405675e-01 1.662243728306242e-01 + 1.659543823641976e-01 1.656847603700607e-01 1.654155064771261e-01 1.651466203144404e-01 1.648781015111888e-01 + 1.646099496966963e-01 1.643421645004236e-01 1.640747455519722e-01 1.638076924810804e-01 1.635410049176291e-01 + 1.632746824916362e-01 1.630087248332611e-01 1.627431315728050e-01 1.624779023407090e-01 1.622130367675548e-01 + 1.619485344840689e-01 1.616843951211176e-01 1.614206183097097e-01 1.611572036809992e-01 1.608941508662823e-01 + 1.606314594969984e-01 1.603691292047335e-01 1.601071596212141e-01 1.598455503783168e-01 1.595843011080587e-01 + 1.593234114426068e-01 1.590628810142718e-01 1.588027094555110e-01 1.585428963989307e-01 1.582834414772816e-01 + 1.580243443234634e-01 1.577656045705255e-01 1.575072218516629e-01 1.572491958002205e-01 1.569915260496939e-01 + 1.567342122337262e-01 1.564772539861107e-01 1.562206509407930e-01 1.559644027318656e-01 1.557085089935767e-01 + 1.554529693603214e-01 1.551977834666502e-01 1.549429509472626e-01 1.546884714370148e-01 1.544343445709106e-01 + 1.541805699841115e-01 1.539271473119310e-01 1.536740761898351e-01 1.534213562534475e-01 1.531689871385418e-01 + 1.529169684810521e-01 1.526652999170645e-01 1.524139810828205e-01 1.521630116147206e-01 1.519123911493179e-01 + 1.516621193233272e-01 1.514121957736151e-01 1.511626201372109e-01 1.509133920512974e-01 1.506645111532185e-01 + 1.504159770804756e-01 1.501677894707288e-01 1.499199479617989e-01 1.496724521916646e-01 1.494253017984652e-01 + 1.491784964205016e-01 1.489320356962336e-01 1.486859192642825e-01 1.484401467634316e-01 1.481947178326258e-01 + 1.479496321109715e-01 1.477048892377380e-01 1.474604888523564e-01 1.472164305944233e-01 1.469727141036952e-01 + 1.467293390200951e-01 1.464863049837090e-01 1.462436116347872e-01 1.460012586137461e-01 1.457592455611657e-01 + 1.455175721177914e-01 1.452762379245358e-01 1.450352426224759e-01 1.447945858528564e-01 1.445542672570878e-01 + 1.443142864767473e-01 1.440746431535827e-01 1.438353369295046e-01 1.435963674465964e-01 1.433577343471059e-01 + 1.431194372734518e-01 1.428814758682225e-01 1.426438497741731e-01 1.424065586342313e-01 1.421696020914927e-01 + 1.419329797892243e-01 1.416966913708630e-01 1.414607364800165e-01 1.412251147604658e-01 1.409898258561601e-01 + 1.407548694112248e-01 1.405202450699524e-01 1.402859524768119e-01 1.400519912764439e-01 1.398183611136620e-01 + 1.395850616334521e-01 1.393520924809771e-01 1.391194533015705e-01 1.388871437407414e-01 1.386551634441747e-01 + 1.384235120577299e-01 1.381921892274393e-01 1.379611945995138e-01 1.377305278203400e-01 1.375001885364792e-01 + 1.372701763946703e-01 1.370404910418271e-01 1.368111321250439e-01 1.365820992915897e-01 1.363533921889112e-01 + 1.361250104646359e-01 1.358969537665659e-01 1.356692217426848e-01 1.354418140411532e-01 1.352147303103111e-01 + 1.349879701986804e-01 1.347615333549586e-01 1.345354194280278e-01 1.343096280669459e-01 1.340841589209544e-01 + 1.338590116394755e-01 1.336341858721121e-01 1.334096812686487e-01 1.331854974790506e-01 1.329616341534668e-01 + 1.327380909422287e-01 1.325148674958476e-01 1.322919634650215e-01 1.320693785006290e-01 1.318471122537333e-01 + 1.316251643755805e-01 1.314035345176021e-01 1.311822223314134e-01 1.309612274688124e-01 1.307405495817848e-01 + 1.305201883224998e-01 1.303001433433125e-01 1.300804142967645e-01 1.298610008355810e-01 1.296419026126762e-01 + 1.294231192811496e-01 1.292046504942865e-01 1.289864959055611e-01 1.287686551686338e-01 1.285511279373531e-01 + 1.283339138657539e-01 1.281170126080619e-01 1.279004238186894e-01 1.276841471522373e-01 1.274681822634963e-01 + 1.272525288074458e-01 1.270371864392537e-01 1.268221548142786e-01 1.266074335880708e-01 1.263930224163674e-01 + 1.261789209550968e-01 1.259651288603813e-01 1.257516457885300e-01 1.255384713960464e-01 1.253256053396227e-01 + 1.251130472761459e-01 1.249007968626926e-01 1.246888537565320e-01 1.244772176151279e-01 1.242658880961349e-01 + 1.240548648574002e-01 1.238441475569647e-01 1.236337358530659e-01 1.234236294041299e-01 1.232138278687805e-01 + 1.230043309058343e-01 1.227951381743024e-01 1.225862493333915e-01 1.223776640425021e-01 1.221693819612323e-01 + 1.219614027493718e-01 1.217537260669099e-01 1.215463515740289e-01 1.213392789311092e-01 1.211325077987263e-01 + 1.209260378376552e-01 1.207198687088635e-01 1.205140000735185e-01 1.203084315929852e-01 1.201031629288251e-01 + 1.198981937427984e-01 1.196935236968631e-01 1.194891524531746e-01 1.192850796740882e-01 1.190813050221577e-01 + 1.188778281601355e-01 1.186746487509728e-01 1.184717664578213e-01 1.182691809440324e-01 1.180668918731571e-01 + 1.178648989089452e-01 1.176632017153500e-01 1.174617999565215e-01 1.172606932968132e-01 1.170598814007804e-01 + 1.168593639331761e-01 1.166591405589578e-01 1.164592109432847e-01 1.162595747515155e-01 1.160602316492138e-01 + 1.158611813021436e-01 1.156624233762728e-01 1.154639575377716e-01 1.152657834530122e-01 1.150679007885711e-01 + 1.148703092112297e-01 1.146730083879698e-01 1.144759979859792e-01 1.142792776726489e-01 1.140828471155749e-01 + 1.138867059825575e-01 1.136908539416020e-01 1.134952906609170e-01 1.133000158089180e-01 1.131050290542250e-01 + 1.129103300656636e-01 1.127159185122662e-01 1.125217940632695e-01 1.123279563881163e-01 1.121344051564576e-01 + 1.119411400381494e-01 1.117481607032550e-01 1.115554668220445e-01 1.113630580649957e-01 1.111709341027919e-01 + 1.109790946063260e-01 1.107875392466987e-01 1.105962676952163e-01 1.104052796233965e-01 1.102145747029618e-01 + 1.100241526058455e-01 1.098340130041892e-01 1.096441555703443e-01 1.094545799768698e-01 1.092652858965334e-01 + 1.090762730023154e-01 1.088875409674015e-01 1.086990894651913e-01 1.085109181692920e-01 1.083230267535224e-01 + 1.081354148919097e-01 1.079480822586931e-01 1.077610285283241e-01 1.075742533754621e-01 1.073877564749799e-01 + 1.072015375019601e-01 1.070155961316977e-01 1.068299320397006e-01 1.066445449016861e-01 1.064594343935852e-01 + 1.062746001915395e-01 1.060900419719054e-01 1.059057594112506e-01 1.057217521863556e-01 1.055380199742137e-01 + 1.053545624520314e-01 1.051713792972292e-01 1.049884701874390e-01 1.048058348005104e-01 1.046234728145017e-01 + 1.044413839076886e-01 1.042595677585606e-01 1.040780240458208e-01 1.038967524483868e-01 1.037157526453901e-01 + 1.035350243161803e-01 1.033545671403173e-01 1.031743807975800e-01 1.029944649679602e-01 1.028148193316664e-01 + 1.026354435691235e-01 1.024563373609702e-01 1.022775003880617e-01 1.020989323314718e-01 1.019206328724871e-01 + 1.017426016926115e-01 1.015648384735688e-01 1.013873428972943e-01 1.012101146459439e-01 1.010331534018912e-01 + 1.008564588477233e-01 1.006800306662469e-01 1.005038685404885e-01 1.003279721536869e-01 1.001523411893049e-01 + 9.997697533101864e-02 9.980187426272516e-02 9.962703766853771e-02 9.945246523278974e-02 9.927815664003249e-02 + 9.910411157503639e-02 9.893032972279052e-02 9.875681076850300e-02 9.858355439760114e-02 9.841056029573188e-02 + 9.823782814876177e-02 9.806535764277639e-02 9.789314846408166e-02 9.772120029920307e-02 9.754951283488653e-02 + 9.737808575809816e-02 9.720691875602414e-02 9.703601151607141e-02 9.686536372586736e-02 9.669497507326044e-02 + 9.652484524631968e-02 9.635497393333559e-02 9.618536082281955e-02 9.601600560350430e-02 9.584690796434402e-02 + 9.567806759451464e-02 9.550948418341407e-02 9.534115742066153e-02 9.517308699609853e-02 9.500527259978861e-02 + 9.483771392201774e-02 9.467041065329437e-02 9.450336248434919e-02 9.433656910613565e-02 9.417003020982988e-02 + 9.400374548683117e-02 9.383771462876191e-02 9.367193732746729e-02 9.350641327501606e-02 9.334114216370001e-02 + 9.317612368603519e-02 9.301135753476049e-02 9.284684340283945e-02 9.268258098345869e-02 9.251856997002937e-02 + 9.235481005618651e-02 9.219130093578967e-02 9.202804230292275e-02 9.186503385189405e-02 9.170227527723651e-02 + 9.153976627370776e-02 9.137750653629045e-02 9.121549576019228e-02 9.105373364084579e-02 9.089221987390889e-02 + 9.073095415526448e-02 9.056993618102163e-02 9.040916564751417e-02 9.024864225130222e-02 9.008836568917117e-02 + 8.992833565813255e-02 8.976855185542380e-02 8.960901397850850e-02 8.944972172507665e-02 8.929067479304419e-02 + 8.913187288055370e-02 8.897331568597408e-02 8.881500290790120e-02 8.865693424515764e-02 8.849910939679254e-02 + 8.834152806208226e-02 8.818418994052980e-02 8.802709473186589e-02 8.787024213604837e-02 8.771363185326221e-02 + 8.755726358391991e-02 8.740113702866148e-02 8.724525188835495e-02 8.708960786409568e-02 8.693420465720718e-02 + 8.677904196924080e-02 8.662411950197585e-02 8.646943695741981e-02 8.631499403780860e-02 8.616079044560648e-02 + 8.600682588350587e-02 8.585310005442794e-02 8.569961266152210e-02 8.554636340816714e-02 8.539335199797021e-02 + 8.524057813476746e-02 8.508804152262386e-02 8.493574186583359e-02 8.478367886892012e-02 8.463185223663587e-02 + 8.448026167396300e-02 8.432890688611272e-02 8.417778757852594e-02 8.402690345687300e-02 8.387625422705414e-02 + 8.372583959519936e-02 8.357565926766836e-02 8.342571295105083e-02 8.327600035216635e-02 8.312652117806492e-02 + 8.297727513602651e-02 8.282826193356142e-02 8.267948127841014e-02 8.253093287854357e-02 8.238261644216330e-02 + 8.223453167770167e-02 8.208667829382124e-02 8.193905599941545e-02 8.179166450360847e-02 8.164450351575571e-02 + 8.149757274544311e-02 8.135087190248798e-02 8.120440069693850e-02 8.105815883907409e-02 8.091214603940539e-02 + 8.076636200867447e-02 8.062080645785484e-02 8.047547909815136e-02 8.033037964100033e-02 8.018550779806972e-02 + 8.004086328125926e-02 7.989644580270065e-02 7.975225507475688e-02 7.960829081002307e-02 7.946455272132630e-02 + 7.932104052172573e-02 7.917775392451239e-02 7.903469264320970e-02 7.889185639157306e-02 7.874924488359017e-02 + 7.860685783348130e-02 7.846469495569872e-02 7.832275596492751e-02 7.818104057608510e-02 7.803954850432152e-02 + 7.789827946501916e-02 7.775723317379361e-02 7.761640934649307e-02 7.747580769919822e-02 7.733542794822296e-02 + 7.719526981011379e-02 7.705533300165053e-02 7.691561723984600e-02 7.677612224194587e-02 7.663684772542909e-02 + 7.649779340800776e-02 7.635895900762736e-02 7.622034424246645e-02 7.608194883093732e-02 7.594377249168530e-02 + 7.580581494358930e-02 7.566807590576162e-02 7.553055509754840e-02 7.539325223852938e-02 7.525616704851762e-02 + 7.511929924756006e-02 7.498264855593739e-02 7.484621469416416e-02 7.470999738298889e-02 7.457399634339364e-02 + 7.443821129659463e-02 7.430264196404189e-02 7.416728806741971e-02 7.403214932864649e-02 7.389722546987440e-02 + 7.376251621348999e-02 7.362802128211388e-02 7.349374039860117e-02 7.335967328604089e-02 7.322581966775676e-02 + 7.309217926730663e-02 7.295875180848267e-02 7.282553701531148e-02 7.269253461205445e-02 7.255974432320725e-02 + 7.242716587350002e-02 7.229479898789765e-02 7.216264339159938e-02 7.203069881003936e-02 7.189896496888648e-02 + 7.176744159404412e-02 7.163612841165044e-02 7.150502514807840e-02 7.137413152993598e-02 7.124344728406562e-02 + 7.111297213754510e-02 7.098270581768674e-02 7.085264805203792e-02 7.072279856838090e-02 7.059315709473316e-02 + 7.046372335934704e-02 7.033449709070999e-02 7.020547801754443e-02 7.007666586880792e-02 6.994806037369332e-02 + 6.981966126162850e-02 6.969146826227654e-02 6.956348110553570e-02 6.943569952153938e-02 6.930812324065640e-02 + 6.918075199349095e-02 6.905358551088225e-02 6.892662352390500e-02 6.879986576386896e-02 6.867331196231985e-02 + 6.854696185103810e-02 6.842081516204020e-02 6.829487162757739e-02 6.816913098013684e-02 6.804359295244085e-02 + 6.791825727744742e-02 6.779312368835012e-02 6.766819191857784e-02 6.754346170179486e-02 6.741893277190122e-02 + 6.729460486303258e-02 6.717047770956004e-02 6.704655104609025e-02 6.692282460746556e-02 6.679929812876369e-02 + 6.667597134529836e-02 6.655284399261858e-02 6.642991580650928e-02 6.630718652299086e-02 6.618465587831937e-02 + 6.606232360898652e-02 6.594018945171992e-02 6.581825314348272e-02 6.569651442147380e-02 6.557497302312755e-02 + 6.545362868611433e-02 6.533248114834017e-02 6.521153014794680e-02 6.509077542331165e-02 6.497021671304791e-02 + 6.484985375600437e-02 6.472968629126585e-02 6.460971405815280e-02 6.448993679622136e-02 6.437035424526340e-02 + 6.425096614530654e-02 6.413177223661443e-02 6.401277225968603e-02 6.389396595525644e-02 6.377535306429641e-02 + 6.365693332801231e-02 6.353870648784636e-02 6.342067228547654e-02 6.330283046281669e-02 6.318518076201632e-02 + 6.306772292546062e-02 6.295045669577035e-02 6.283338181580249e-02 6.271649802864948e-02 6.259980507763958e-02 + 6.248330270633653e-02 6.236699065853995e-02 6.225086867828532e-02 6.213493650984361e-02 6.201919389772171e-02 + 6.190364058666196e-02 6.178827632164257e-02 6.167310084787714e-02 6.155811391081528e-02 6.144331525614224e-02 + 6.132870462977864e-02 6.121428177788096e-02 6.110004644684103e-02 6.098599838328667e-02 6.087213733408119e-02 + 6.075846304632337e-02 6.064497526734748e-02 6.053167374472351e-02 6.041855822625698e-02 6.030562845998906e-02 + 6.019288419419622e-02 6.008032517739043e-02 5.996795115831921e-02 5.985576188596573e-02 5.974375710954825e-02 + 5.963193657852084e-02 5.952030004257278e-02 5.940884725162871e-02 5.929757795584863e-02 5.918649190562805e-02 + 5.907558885159789e-02 5.896486854462419e-02 5.885433073580830e-02 5.874397517648683e-02 5.863380161823178e-02 + 5.852380981285053e-02 5.841399951238522e-02 5.830437046911355e-02 5.819492243554810e-02 5.808565516443701e-02 + 5.797656840876309e-02 5.786766192174456e-02 5.775893545683458e-02 5.765038876772123e-02 5.754202160832795e-02 + 5.743383373281279e-02 5.732582489556906e-02 5.721799485122488e-02 5.711034335464321e-02 5.700287016092197e-02 + 5.689557502539389e-02 5.678845770362676e-02 5.668151795142282e-02 5.657475552481924e-02 5.646817018008776e-02 + 5.636176167373515e-02 5.625552976250265e-02 5.614947420336616e-02 5.604359475353612e-02 5.593789117045757e-02 + 5.583236321181021e-02 5.572701063550808e-02 5.562183319969987e-02 5.551683066276869e-02 5.541200278333179e-02 + 5.530734932024104e-02 5.520287003258254e-02 5.509856467967701e-02 5.499443302107890e-02 5.489047481657720e-02 + 5.478668982619492e-02 5.468307781018949e-02 5.457963852905232e-02 5.447637174350879e-02 5.437327721451838e-02 + 5.427035470327451e-02 5.416760397120476e-02 5.406502477997029e-02 5.396261689146655e-02 5.386038006782251e-02 + 5.375831407140085e-02 5.365641866479843e-02 5.355469361084533e-02 5.345313867260571e-02 5.335175361337707e-02 + 5.325053819669059e-02 5.314949218631087e-02 5.304861534623614e-02 5.294790744069818e-02 5.284736823416190e-02 + 5.274699749132572e-02 5.264679497712123e-02 5.254676045671341e-02 5.244689369550058e-02 5.234719445911393e-02 + 5.224766251341800e-02 5.214829762451013e-02 5.204909955872108e-02 5.195006808261416e-02 5.185120296298606e-02 + 5.175250396686595e-02 5.165397086151594e-02 5.155560341443095e-02 5.145740139333862e-02 5.135936456619936e-02 + 5.126149270120608e-02 5.116378556678418e-02 5.106624293159172e-02 5.096886456451912e-02 5.087165023468947e-02 + 5.077459971145784e-02 5.067771276441183e-02 5.058098916337114e-02 5.048442867838789e-02 5.038803107974618e-02 + 5.029179613796225e-02 5.019572362378429e-02 5.009981330819241e-02 5.000406496239892e-02 4.990847835784765e-02 + 4.981305326621453e-02 4.971778945940694e-02 4.962268670956418e-02 4.952774478905696e-02 4.943296347048778e-02 + 4.933834252669055e-02 4.924388173073060e-02 4.914958085590466e-02 4.905543967574074e-02 4.896145796399815e-02 + 4.886763549466765e-02 4.877397204197073e-02 4.868046738036017e-02 4.858712128451971e-02 4.849393352936418e-02 + 4.840090389003911e-02 4.830803214192107e-02 4.821531806061723e-02 4.812276142196550e-02 4.803036200203439e-02 + 4.793811957712310e-02 4.784603392376136e-02 4.775410481870915e-02 4.766233203895694e-02 4.757071536172546e-02 + 4.747925456446579e-02 4.738794942485919e-02 4.729679972081684e-02 4.720580523048019e-02 4.711496573222037e-02 + 4.702428100463869e-02 4.693375082656636e-02 4.684337497706406e-02 4.675315323542229e-02 4.666308538116119e-02 + 4.657317119403057e-02 4.648341045400946e-02 4.639380294130664e-02 4.630434843635998e-02 4.621504671983673e-02 + 4.612589757263318e-02 4.603690077587501e-02 4.594805611091687e-02 4.585936335934232e-02 4.577082230296387e-02 + 4.568243272382267e-02 4.559419440418904e-02 4.550610712656177e-02 4.541817067366824e-02 4.533038482846429e-02 + 4.524274937413435e-02 4.515526409409135e-02 4.506792877197622e-02 4.498074319165841e-02 4.489370713723544e-02 + 4.480682039303278e-02 4.472008274360406e-02 4.463349397373079e-02 4.454705386842236e-02 4.446076221291587e-02 + 4.437461879267621e-02 4.428862339339565e-02 4.420277580099421e-02 4.411707580161947e-02 4.403152318164610e-02 + 4.394611772767612e-02 4.386085922653890e-02 4.377574746529085e-02 4.369078223121550e-02 4.360596331182330e-02 + 4.352129049485149e-02 4.343676356826427e-02 4.335238232025253e-02 4.326814653923369e-02 4.318405601385188e-02 + 4.310011053297767e-02 4.301630988570795e-02 4.293265386136576e-02 4.284914224950076e-02 4.276577483988850e-02 + 4.268255142253062e-02 4.259947178765466e-02 4.251653572571404e-02 4.243374302738811e-02 4.235109348358185e-02 + 4.226858688542585e-02 4.218622302427625e-02 4.210400169171455e-02 4.202192267954776e-02 4.193998577980802e-02 + 4.185819078475281e-02 4.177653748686456e-02 4.169502567885080e-02 4.161365515364375e-02 4.153242570440087e-02 + 4.145133712450402e-02 4.137038920755991e-02 4.128958174739959e-02 4.120891453807871e-02 4.112838737387731e-02 + 4.104800004929980e-02 4.096775235907456e-02 4.088764409815419e-02 4.080767506171526e-02 4.072784504515834e-02 + 4.064815384410785e-02 4.056860125441179e-02 4.048918707214187e-02 4.040991109359332e-02 4.033077311528498e-02 + 4.025177293395878e-02 4.017291034658015e-02 4.009418515033757e-02 4.001559714264257e-02 3.993714612112968e-02 + 3.985883188365639e-02 3.978065422830301e-02 3.970261295337231e-02 3.962470785738988e-02 3.954693873910359e-02 + 3.946930539748400e-02 3.939180763172379e-02 3.931444524123784e-02 3.923721802566321e-02 3.916012578485883e-02 + 3.908316831890579e-02 3.900634542810673e-02 3.892965691298622e-02 3.885310257429033e-02 3.877668221298657e-02 + 3.870039563026412e-02 3.862424262753315e-02 3.854822300642537e-02 3.847233656879338e-02 3.839658311671088e-02 + 3.832096245247241e-02 3.824547437859341e-02 3.817011869781013e-02 3.809489521307915e-02 3.801980372757783e-02 + 3.794484404470369e-02 3.787001596807475e-02 3.779531930152918e-02 3.772075384912525e-02 3.764631941514113e-02 + 3.757201580407491e-02 3.749784282064465e-02 3.742380026978778e-02 3.734988795666169e-02 3.727610568664281e-02 + 3.720245326532728e-02 3.712893049853026e-02 3.705553719228626e-02 3.698227315284883e-02 3.690913818669030e-02 + 3.683613210050196e-02 3.676325470119379e-02 3.669050579589443e-02 3.661788519195103e-02 3.654539269692918e-02 + 3.647302811861273e-02 3.640079126500360e-02 3.632868194432207e-02 3.625669996500629e-02 3.618484513571222e-02 + 3.611311726531356e-02 3.604151616290172e-02 3.597004163778571e-02 3.589869349949187e-02 3.582747155776401e-02 + 3.575637562256298e-02 3.568540550406690e-02 3.561456101267067e-02 3.554384195898627e-02 3.547324815384245e-02 + 3.540277940828453e-02 3.533243553357443e-02 3.526221634119041e-02 3.519212164282719e-02 3.512215125039573e-02 + 3.505230497602298e-02 3.498258263205189e-02 3.491298403104130e-02 3.484350898576590e-02 3.477415730921593e-02 + 3.470492881459724e-02 3.463582331533102e-02 3.456684062505390e-02 3.449798055761750e-02 3.442924292708876e-02 + 3.436062754774946e-02 3.429213423409626e-02 3.422376280084056e-02 3.415551306290821e-02 3.408738483543993e-02 + 3.401937793379058e-02 3.395149217352935e-02 3.388372737043955e-02 3.381608334051850e-02 3.374855989997761e-02 + 3.368115686524207e-02 3.361387405295058e-02 3.354671127995558e-02 3.347966836332283e-02 3.341274512033169e-02 + 3.334594136847438e-02 3.327925692545659e-02 3.321269160919674e-02 3.314624523782615e-02 3.307991762968899e-02 + 3.301370860334199e-02 3.294761797755446e-02 3.288164557130804e-02 3.281579120379658e-02 3.275005469442611e-02 + 3.268443586281482e-02 3.261893452879280e-02 3.255355051240170e-02 3.248828363389508e-02 3.242313371373789e-02 + 3.235810057260664e-02 3.229318403138905e-02 3.222838391118412e-02 3.216370003330182e-02 3.209913221926308e-02 + 3.203468029079967e-02 3.197034406985405e-02 3.190612337857932e-02 3.184201803933896e-02 3.177802787470678e-02 + 3.171415270746669e-02 3.165039236061293e-02 3.158674665734961e-02 3.152321542109057e-02 3.145979847545945e-02 + 3.139649564428939e-02 3.133330675162312e-02 3.127023162171271e-02 3.120727007901931e-02 3.114442194821328e-02 + 3.108168705417383e-02 3.101906522198919e-02 3.095655627695607e-02 3.089416004458002e-02 3.083187635057490e-02 + 3.076970502086291e-02 3.070764588157443e-02 3.064569875904801e-02 3.058386347983027e-02 3.052213987067539e-02 + 3.046052775854542e-02 3.039902697060991e-02 3.033763733424593e-02 3.027635867703792e-02 3.021519082677741e-02 + 3.015413361146298e-02 3.009318685930020e-02 3.003235039870154e-02 2.997162405828597e-02 2.991100766687920e-02 + 2.985050105351323e-02 2.979010404742642e-02 2.972981647806321e-02 2.966963817507422e-02 2.960956896831597e-02 + 2.954960868785063e-02 2.948975716394607e-02 2.943001422707572e-02 2.937037970791839e-02 2.931085343735820e-02 + 2.925143524648428e-02 2.919212496659085e-02 2.913292242917690e-02 2.907382746594631e-02 2.901483990880748e-02 + 2.895595958987329e-02 2.889718634146095e-02 2.883851999609183e-02 2.877996038649156e-02 2.872150734558953e-02 + 2.866316070651908e-02 2.860492030261716e-02 2.854678596742427e-02 2.848875753468431e-02 2.843083483834454e-02 + 2.837301771255538e-02 2.831530599167020e-02 2.825769951024529e-02 2.820019810303964e-02 2.814280160501495e-02 + 2.808550985133541e-02 2.802832267736748e-02 2.797123991867988e-02 2.791426141104341e-02 2.785738699043085e-02 + 2.780061649301673e-02 2.774394975517738e-02 2.768738661349059e-02 2.763092690473550e-02 2.757457046589261e-02 + 2.751831713414358e-02 2.746216674687110e-02 2.740611914165862e-02 2.735017415629041e-02 2.729433162875127e-02 + 2.723859139722653e-02 2.718295330010189e-02 2.712741717596312e-02 2.707198286359613e-02 2.701665020198664e-02 + 2.696141903032028e-02 2.690628918798235e-02 2.685126051455750e-02 2.679633284982989e-02 2.674150603378273e-02 + 2.668677990659863e-02 2.663215430865884e-02 2.657762908054373e-02 2.652320406303206e-02 2.646887909710135e-02 + 2.641465402392736e-02 2.636052868488427e-02 2.630650292154436e-02 2.625257657567788e-02 2.619874948925285e-02 + 2.614502150443508e-02 2.609139246358802e-02 2.603786220927247e-02 2.598443058424655e-02 2.593109743146556e-02 + 2.587786259408169e-02 2.582472591544426e-02 2.577168723909906e-02 2.571874640878874e-02 2.566590326845218e-02 + 2.561315766222468e-02 2.556050943443776e-02 2.550795842961885e-02 2.545550449249149e-02 2.540314746797476e-02 + 2.535088720118349e-02 2.529872353742791e-02 2.524665632221360e-02 2.519468540124147e-02 2.514281062040728e-02 + 2.509103182580184e-02 2.503934886371057e-02 2.498776158061373e-02 2.493626982318600e-02 2.488487343829634e-02 + 2.483357227300793e-02 2.478236617457798e-02 2.473125499045780e-02 2.468023856829222e-02 2.462931675591994e-02 + 2.457848940137299e-02 2.452775635287680e-02 2.447711745885000e-02 2.442657256790431e-02 2.437612152884438e-02 + 2.432576419066761e-02 2.427550040256404e-02 2.422533001391613e-02 2.417525287429883e-02 2.412526883347925e-02 + 2.407537774141649e-02 2.402557944826161e-02 2.397587380435744e-02 2.392626066023842e-02 2.387673986663063e-02 + 2.382731127445123e-02 2.377797473480875e-02 2.372873009900269e-02 2.367957721852357e-02 2.363051594505252e-02 + 2.358154613046147e-02 2.353266762681266e-02 2.348388028635876e-02 2.343518396154248e-02 2.338657850499677e-02 + 2.333806376954439e-02 2.328963960819783e-02 2.324130587415914e-02 2.319306242081988e-02 2.314490910176092e-02 + 2.309684577075237e-02 2.304887228175323e-02 2.300098848891140e-02 2.295319424656354e-02 2.290548940923494e-02 + 2.285787383163918e-02 2.281034736867833e-02 2.276290987544246e-02 2.271556120720964e-02 2.266830121944580e-02 + 2.262112976780462e-02 2.257404670812736e-02 2.252705189644261e-02 2.248014518896624e-02 2.243332644210121e-02 + 2.238659551243751e-02 2.233995225675200e-02 2.229339653200809e-02 2.224692819535572e-02 2.220054710413128e-02 + 2.215425311585740e-02 2.210804608824275e-02 2.206192587918195e-02 2.201589234675537e-02 2.196994534922908e-02 + 2.192408474505462e-02 2.187831039286881e-02 2.183262215149383e-02 2.178701987993675e-02 2.174150343738959e-02 + 2.169607268322908e-02 2.165072747701661e-02 2.160546767849810e-02 2.156029314760360e-02 2.151520374444741e-02 + 2.147019932932778e-02 2.142527976272693e-02 2.138044490531070e-02 2.133569461792854e-02 2.129102876161326e-02 + 2.124644719758092e-02 2.120194978723077e-02 2.115753639214496e-02 2.111320687408851e-02 2.106896109500904e-02 + 2.102479891703673e-02 2.098072020248403e-02 2.093672481384575e-02 2.089281261379874e-02 2.084898346520165e-02 + 2.080523723109499e-02 2.076157377470085e-02 2.071799295942281e-02 2.067449464884577e-02 2.063107870673577e-02 + 2.058774499703986e-02 2.054449338388593e-02 2.050132373158267e-02 2.045823590461929e-02 2.041522976766539e-02 + 2.037230518557083e-02 2.032946202336559e-02 2.028670014625966e-02 2.024401941964271e-02 2.020141970908429e-02 + 2.015890088033322e-02 2.011646279931781e-02 2.007410533214551e-02 2.003182834510287e-02 1.998963170465538e-02 + 1.994751527744720e-02 1.990547893030112e-02 1.986352253021835e-02 1.982164594437845e-02 1.977984904013914e-02 + 1.973813168503609e-02 1.969649374678276e-02 1.965493509327039e-02 1.961345559256778e-02 1.957205511292097e-02 + 1.953073352275343e-02 1.948949069066555e-02 1.944832648543476e-02 1.940724077601515e-02 1.936623343153759e-02 + 1.932530432130933e-02 1.928445331481395e-02 1.924368028171122e-02 1.920298509183688e-02 1.916236761520262e-02 + 1.912182772199579e-02 1.908136528257933e-02 1.904098016749152e-02 1.900067224744593e-02 1.896044139333128e-02 + 1.892028747621124e-02 1.888021036732421e-02 1.884020993808327e-02 1.880028606007596e-02 1.876043860506424e-02 + 1.872066744498415e-02 1.868097245194590e-02 1.864135349823345e-02 1.860181045630455e-02 1.856234319879046e-02 + 1.852295159849598e-02 1.848363552839910e-02 1.844439486165094e-02 1.840522947157557e-02 1.836613923166984e-02 + 1.832712401560333e-02 1.828818369721808e-02 1.824931815052847e-02 1.821052724972111e-02 1.817181086915455e-02 + 1.813316888335939e-02 1.809460116703782e-02 1.805610759506370e-02 1.801768804248227e-02 1.797934238451001e-02 + 1.794107049653466e-02 1.790287225411475e-02 1.786474753297975e-02 1.782669620902970e-02 1.778871815833521e-02 + 1.775081325713719e-02 1.771298138184676e-02 1.767522240904516e-02 1.763753621548338e-02 1.759992267808224e-02 + 1.756238167393205e-02 1.752491308029266e-02 1.748751677459319e-02 1.745019263443174e-02 1.741294053757548e-02 + 1.737576036196036e-02 1.733865198569101e-02 1.730161528704052e-02 1.726465014445036e-02 1.722775643653020e-02 + 1.719093404205767e-02 1.715418283997836e-02 1.711750270940557e-02 1.708089352962019e-02 1.704435518007047e-02 + 1.700788754037200e-02 1.697149049030738e-02 1.693516390982627e-02 1.689890767904510e-02 1.686272167824694e-02 + 1.682660578788130e-02 1.679055988856408e-02 1.675458386107738e-02 1.671867758636927e-02 1.668284094555378e-02 + 1.664707381991056e-02 1.661137609088485e-02 1.657574764008736e-02 1.654018834929395e-02 1.650469810044570e-02 + 1.646927677564851e-02 1.643392425717318e-02 1.639864042745500e-02 1.636342516909392e-02 1.632827836485411e-02 + 1.629319989766394e-02 1.625818965061572e-02 1.622324750696567e-02 1.618837335013375e-02 1.615356706370346e-02 + 1.611882853142167e-02 1.608415763719846e-02 1.604955426510700e-02 1.601501829938349e-02 1.598054962442677e-02 + 1.594614812479838e-02 1.591181368522231e-02 1.587754619058481e-02 1.584334552593432e-02 1.580921157648130e-02 + 1.577514422759805e-02 1.574114336481851e-02 1.570720887383818e-02 1.567334064051392e-02 1.563953855086385e-02 + 1.560580249106715e-02 1.557213234746387e-02 1.553852800655486e-02 1.550498935500152e-02 1.547151627962575e-02 + 1.543810866740975e-02 1.540476640549579e-02 1.537148938118615e-02 1.533827748194293e-02 1.530513059538793e-02 + 1.527204860930242e-02 1.523903141162708e-02 1.520607889046175e-02 1.517319093406532e-02 1.514036743085555e-02 + 1.510760826940899e-02 1.507491333846082e-02 1.504228252690450e-02 1.500971572379185e-02 1.497721281833279e-02 + 1.494477369989521e-02 1.491239825800484e-02 1.488008638234499e-02 1.484783796275648e-02 1.481565288923748e-02 + 1.478353105194336e-02 1.475147234118652e-02 1.471947664743621e-02 1.468754386131840e-02 1.465567387361562e-02 + 1.462386657526681e-02 1.459212185736716e-02 1.456043961116803e-02 1.452881972807659e-02 1.449726209965589e-02 + 1.446576661762453e-02 1.443433317385669e-02 1.440296166038180e-02 1.437165196938448e-02 1.434040399320434e-02 + 1.430921762433581e-02 1.427809275542812e-02 1.424702927928496e-02 1.421602708886446e-02 1.418508607727893e-02 + 1.415420613779475e-02 1.412338716383233e-02 1.409262904896569e-02 1.406193168692261e-02 1.403129497158423e-02 + 1.400071879698503e-02 1.397020305731261e-02 1.393974764690757e-02 1.390935246026342e-02 1.387901739202624e-02 + 1.384874233699467e-02 1.381852719011972e-02 1.378837184650464e-02 1.375827620140476e-02 1.372824015022726e-02 + 1.369826358853107e-02 1.366834641202670e-02 1.363848851657624e-02 1.360868979819285e-02 1.357895015304101e-02 + 1.354926947743606e-02 1.351964766784418e-02 1.349008462088223e-02 1.346058023331756e-02 1.343113440206794e-02 + 1.340174702420126e-02 1.337241799693549e-02 1.334314721763844e-02 1.331393458382775e-02 1.328477999317061e-02 + 1.325568334348356e-02 1.322664453273249e-02 1.319766345903234e-02 1.316874002064708e-02 1.313987411598948e-02 + 1.311106564362092e-02 1.308231450225126e-02 1.305362059073875e-02 1.302498380808982e-02 1.299640405345890e-02 + 1.296788122614836e-02 1.293941522560824e-02 1.291100595143613e-02 1.288265330337708e-02 1.285435718132337e-02 + 1.282611748531444e-02 1.279793411553661e-02 1.276980697232302e-02 1.274173595615342e-02 1.271372096765412e-02 + 1.268576190759773e-02 1.265785867690302e-02 1.263001117663479e-02 1.260221930800367e-02 1.257448297236611e-02 + 1.254680207122399e-02 1.251917650622472e-02 1.249160617916089e-02 1.246409099197018e-02 1.243663084673521e-02 + 1.240922564568344e-02 1.238187529118699e-02 1.235457968576232e-02 1.232733873207036e-02 1.230015233291610e-02 + 1.227302039124866e-02 1.224594281016096e-02 1.221891949288963e-02 1.219195034281487e-02 1.216503526346025e-02 + 1.213817415849263e-02 1.211136693172202e-02 1.208461348710124e-02 1.205791372872596e-02 1.203126756083449e-02 + 1.200467488780763e-02 1.197813561416847e-02 1.195164964458234e-02 1.192521688385649e-02 1.189883723694011e-02 + 1.187251060892405e-02 1.184623690504079e-02 1.182001603066417e-02 1.179384789130927e-02 1.176773239263228e-02 + 1.174166944043031e-02 1.171565894064132e-02 1.168970079934390e-02 1.166379492275707e-02 1.163794121724019e-02 + 1.161213958929281e-02 1.158638994555460e-02 1.156069219280490e-02 1.153504623796298e-02 1.150945198808753e-02 + 1.148390935037670e-02 1.145841823216792e-02 1.143297854093770e-02 1.140759018430152e-02 1.138225307001365e-02 + 1.135696710596701e-02 1.133173220019300e-02 1.130654826086139e-02 1.128141519628015e-02 1.125633291489526e-02 + 1.123130132529056e-02 1.120632033618767e-02 1.118138985644578e-02 1.115650979506149e-02 1.113168006116871e-02 + 1.110690056403841e-02 1.108217121307856e-02 1.105749191783397e-02 1.103286258798611e-02 1.100828313335294e-02 + 1.098375346388878e-02 1.095927348968418e-02 1.093484312096572e-02 1.091046226809591e-02 1.088613084157303e-02 + 1.086184875203089e-02 1.083761591023882e-02 1.081343222710138e-02 1.078929761365834e-02 1.076521198108446e-02 + 1.074117524068926e-02 1.071718730391705e-02 1.069324808234660e-02 1.066935748769109e-02 1.064551543179798e-02 + 1.062172182664878e-02 1.059797658435889e-02 1.057427961717754e-02 1.055063083748758e-02 1.052703015780532e-02 + 1.050347749078044e-02 1.047997274919575e-02 1.045651584596709e-02 1.043310669414316e-02 1.040974520690543e-02 + 1.038643129756791e-02 1.036316487957703e-02 1.033994586651150e-02 1.031677417208210e-02 1.029364971013161e-02 + 1.027057239463471e-02 1.024754213969758e-02 1.022455885955804e-02 1.020162246858519e-02 1.017873288127947e-02 + 1.015589001227220e-02 1.013309377632579e-02 1.011034408833329e-02 1.008764086331842e-02 1.006498401643532e-02 + 1.004237346296849e-02 1.001980911833258e-02 9.997290898072218e-03 9.974818717861923e-03 9.952392493505883e-03 + 9.930012140937906e-03 9.907677576221191e-03 9.885388715548169e-03 9.863145475240401e-03 9.840947771748399e-03 + 9.818795521651500e-03 9.796688641657723e-03 9.774627048603558e-03 9.752610659453861e-03 9.730639391301728e-03 + 9.708713161368289e-03 9.686831887002598e-03 9.664995485681513e-03 9.643203875009446e-03 9.621456972718320e-03 + 9.599754696667311e-03 9.578096964842844e-03 9.556483695358338e-03 9.534914806454065e-03 9.513390216497013e-03 + 9.491909843980732e-03 9.470473607525254e-03 9.449081425876844e-03 9.427733217907887e-03 9.406428902616754e-03 + 9.385168399127635e-03 9.363951626690445e-03 9.342778504680571e-03 9.321648952598819e-03 9.300562890071225e-03 + 9.279520236848889e-03 9.258520912807867e-03 9.237564837949023e-03 9.216651932397842e-03 9.195782116404315e-03 + 9.174955310342753e-03 9.154171434711684e-03 9.133430410133685e-03 9.112732157355261e-03 9.092076597246632e-03 + 9.071463650801645e-03 9.050893239137592e-03 9.030365283495082e-03 9.009879705237934e-03 8.989436425852915e-03 + 8.969035366949703e-03 8.948676450260675e-03 8.928359597640810e-03 8.908084731067483e-03 8.887851772640397e-03 + 8.867660644581360e-03 8.847511269234151e-03 8.827403569064396e-03 8.807337466659444e-03 8.787312884728201e-03 + 8.767329746100899e-03 8.747387973729096e-03 8.727487490685401e-03 8.707628220163447e-03 8.687810085477640e-03 + 8.668033010063060e-03 8.648296917475297e-03 8.628601731390311e-03 8.608947375604362e-03 8.589333774033691e-03 + 8.569760850714552e-03 8.550228529802952e-03 8.530736735574546e-03 8.511285392424493e-03 8.491874424867304e-03 + 8.472503757536729e-03 8.453173315185530e-03 8.433883022685409e-03 8.414632805026837e-03 8.395422587318891e-03 + 8.376252294789189e-03 8.357121852783617e-03 8.338031186766280e-03 8.318980222319316e-03 8.299968885142768e-03 + 8.280997101054465e-03 8.262064795989794e-03 8.243171896001647e-03 8.224318327260172e-03 8.205504016052786e-03 + 8.186728888783848e-03 8.167992871974689e-03 8.149295892263311e-03 8.130637876404329e-03 8.112018751268811e-03 + 8.093438443844168e-03 8.074896881233942e-03 8.056393990657695e-03 8.037929699450875e-03 8.019503935064631e-03 + 8.001116625065760e-03 7.982767697136460e-03 7.964457079074231e-03 7.946184698791745e-03 7.927950484316647e-03 + 7.909754363791531e-03 7.891596265473621e-03 7.873476117734802e-03 7.855393849061353e-03 7.837349388053848e-03 + 7.819342663427053e-03 7.801373604009681e-03 7.783442138744378e-03 7.765548196687471e-03 7.747691707008871e-03 + 7.729872598991918e-03 7.712090802033274e-03 7.694346245642751e-03 7.676638859443155e-03 7.658968573170156e-03 + 7.641335316672129e-03 7.623739019910070e-03 7.606179612957427e-03 7.588657025999902e-03 7.571171189335351e-03 + 7.553722033373645e-03 7.536309488636581e-03 7.518933485757621e-03 7.501593955481839e-03 7.484290828665750e-03 + 7.467024036277173e-03 7.449793509395073e-03 7.432599179209468e-03 7.415440977021247e-03 7.398318834242000e-03 + 7.381232682393959e-03 7.364182453109765e-03 7.347168078132422e-03 7.330189489315081e-03 7.313246618620915e-03 + 7.296339398122996e-03 7.279467760004138e-03 7.262631636556792e-03 7.245830960182821e-03 7.229065663393490e-03 + 7.212335678809187e-03 7.195640939159366e-03 7.178981377282399e-03 7.162356926125394e-03 7.145767518744135e-03 + 7.129213088302841e-03 7.112693568074096e-03 7.096208891438667e-03 7.079758991885411e-03 7.063343803011127e-03 + 7.046963258520364e-03 7.030617292225305e-03 7.014305838045659e-03 6.998028830008511e-03 6.981786202248197e-03 + 6.965577889006057e-03 6.949403824630441e-03 6.933263943576482e-03 6.917158180406024e-03 6.901086469787384e-03 + 6.885048746495307e-03 6.869044945410778e-03 6.853075001520899e-03 6.837138849918717e-03 6.821236425803176e-03 + 6.805367664478877e-03 6.789532501355975e-03 6.773730871950065e-03 6.757962711882002e-03 6.742227956877787e-03 + 6.726526542768467e-03 6.710858405489914e-03 6.695223481082728e-03 6.679621705692114e-03 6.664053015567719e-03 + 6.648517347063549e-03 6.633014636637722e-03 6.617544820852439e-03 6.602107836373775e-03 6.586703619971605e-03 + 6.571332108519391e-03 6.555993238994130e-03 6.540686948476143e-03 6.525413174148969e-03 6.510171853299206e-03 + 6.494962923316428e-03 6.479786321693035e-03 6.464641986024028e-03 6.449529854006977e-03 6.434449863441824e-03 + 6.419401952230821e-03 6.404386058378292e-03 6.389402119990563e-03 6.374450075275801e-03 6.359529862543872e-03 + 6.344641420206272e-03 6.329784686775883e-03 6.314959600866909e-03 6.300166101194727e-03 6.285404126575736e-03 + 6.270673615927232e-03 6.255974508267271e-03 6.241306742714554e-03 6.226670258488255e-03 6.212064994907896e-03 + 6.197490891393223e-03 6.182947887464058e-03 6.168435922740200e-03 6.153954936941238e-03 6.139504869886433e-03 + 6.125085661494602e-03 6.110697251783951e-03 6.096339580872000e-03 6.082012588975373e-03 6.067716216409703e-03 + 6.053450403589500e-03 6.039215091028002e-03 6.025010219337041e-03 6.010835729226964e-03 5.996691561506374e-03 + 5.982577657082122e-03 5.968493956959097e-03 5.954440402240160e-03 5.940416934125928e-03 5.926423493914691e-03 + 5.912460023002273e-03 5.898526462881871e-03 5.884622755143980e-03 5.870748841476215e-03 5.856904663663163e-03 + 5.843090163586282e-03 5.829305283223753e-03 5.815549964650390e-03 5.801824150037414e-03 5.788127781652415e-03 + 5.774460801859160e-03 5.760823153117487e-03 5.747214777983156e-03 5.733635619107724e-03 5.720085619238454e-03 + 5.706564721218082e-03 5.693072867984782e-03 5.679610002571974e-03 5.666176068108235e-03 5.652771007817152e-03 + 5.639394765017163e-03 5.626047283121444e-03 5.612728505637796e-03 5.599438376168483e-03 5.586176838410140e-03 + 5.572943836153581e-03 5.559739313283734e-03 5.546563213779424e-03 5.533415481713368e-03 5.520296061251916e-03 + 5.507204896655006e-03 5.494141932275977e-03 5.481107112561481e-03 5.468100382051311e-03 5.455121685378326e-03 + 5.442170967268271e-03 5.429248172539649e-03 5.416353246103620e-03 5.403486132963839e-03 5.390646778216361e-03 + 5.377835127049491e-03 5.365051124743622e-03 5.352294716671166e-03 5.339565848296375e-03 5.326864465175262e-03 + 5.314190512955379e-03 5.301543937375817e-03 5.288924684266963e-03 5.276332699550417e-03 5.263767929238866e-03 + 5.251230319435947e-03 5.238719816336133e-03 5.226236366224567e-03 5.213779915476957e-03 5.201350410559447e-03 + 5.188947798028486e-03 5.176572024530722e-03 5.164223036802808e-03 5.151900781671349e-03 5.139605206052694e-03 + 5.127336256952900e-03 5.115093881467551e-03 5.102878026781615e-03 5.090688640169328e-03 5.078525668994084e-03 + 5.066389060708316e-03 5.054278762853312e-03 5.042194723059142e-03 5.030136889044504e-03 5.018105208616604e-03 + 5.006099629671015e-03 4.994120100191588e-03 4.982166568250278e-03 4.970238982007036e-03 4.958337289709673e-03 + 4.946461439693746e-03 4.934611380382446e-03 4.922787060286427e-03 4.910988428003705e-03 4.899215432219532e-03 + 4.887468021706251e-03 4.875746145323212e-03 4.864049752016578e-03 4.852378790819279e-03 4.840733210850813e-03 + 4.829112961317145e-03 4.817517991510611e-03 4.805948250809735e-03 4.794403688679162e-03 4.782884254669489e-03 + 4.771389898417148e-03 4.759920569644269e-03 4.748476218158612e-03 4.737056793853376e-03 4.725662246707099e-03 + 4.714292526783511e-03 4.702947584231432e-03 4.691627369284676e-03 4.680331832261850e-03 4.669060923566283e-03 + 4.657814593685892e-03 4.646592793193028e-03 4.635395472744423e-03 4.624222583080958e-03 4.613074075027637e-03 + 4.601949899493409e-03 4.590850007471038e-03 4.579774350037032e-03 4.568722878351464e-03 4.557695543657835e-03 + 4.546692297283038e-03 4.535713090637124e-03 4.524757875213283e-03 4.513826602587606e-03 4.502919224419049e-03 + 4.492035692449303e-03 4.481175958502614e-03 4.470339974485699e-03 4.459527692387636e-03 4.448739064279688e-03 + 4.437974042315252e-03 4.427232578729664e-03 4.416514625840108e-03 4.405820136045509e-03 4.395149061826370e-03 + 4.384501355744704e-03 4.373876970443848e-03 4.363275858648351e-03 4.352697973163931e-03 4.342143266877239e-03 + 4.331611692755795e-03 4.321103203847885e-03 4.310617753282363e-03 4.300155294268639e-03 4.289715780096438e-03 + 4.279299164135761e-03 4.268905399836730e-03 4.258534440729473e-03 4.248186240423979e-03 4.237860752610035e-03 + 4.227557931057034e-03 4.217277729613900e-03 4.207020102208943e-03 4.196785002849734e-03 4.186572385623031e-03 + 4.176382204694577e-03 4.166214414309032e-03 4.156068968789877e-03 4.145945822539207e-03 4.135844930037697e-03 + 4.125766245844418e-03 4.115709724596742e-03 4.105675321010254e-03 4.095662989878551e-03 4.085672686073199e-03 + 4.075704364543564e-03 4.065757980316706e-03 4.055833488497277e-03 4.045930844267375e-03 4.036050002886402e-03 + 4.026190919691028e-03 4.016353550094967e-03 4.006537849588947e-03 3.996743773740504e-03 3.986971278193932e-03 + 3.977220318670143e-03 3.967490850966523e-03 3.957782830956833e-03 3.948096214591102e-03 3.938430957895460e-03 + 3.928787016972093e-03 3.919164347999044e-03 3.909562907230140e-03 3.899982650994866e-03 3.890423535698241e-03 + 3.880885517820684e-03 3.871368553917950e-03 3.861872600620908e-03 3.852397614635554e-03 3.842943552742773e-03 + 3.833510371798289e-03 3.824098028732525e-03 3.814706480550487e-03 3.805335684331633e-03 3.795985597229794e-03 + 3.786656176472997e-03 3.777347379363393e-03 3.768059163277120e-03 3.758791485664180e-03 3.749544304048342e-03 + 3.740317576026997e-03 3.731111259271064e-03 3.721925311524847e-03 3.712759690605930e-03 3.703614354405095e-03 + 3.694489260886115e-03 3.685384368085720e-03 3.676299634113456e-03 3.667235017151547e-03 3.658190475454800e-03 + 3.649165967350471e-03 3.640161451238154e-03 3.631176885589683e-03 3.622212228948985e-03 3.613267439931967e-03 + 3.604342477226425e-03 3.595437299591886e-03 3.586551865859548e-03 3.577686134932097e-03 3.568840065783637e-03 + 3.560013617459559e-03 3.551206749076422e-03 3.542419419821832e-03 3.533651588954349e-03 3.524903215803329e-03 + 3.516174259768869e-03 3.507464680321617e-03 3.498774437002711e-03 3.490103489423643e-03 3.481451797266144e-03 + 3.472819320282057e-03 3.464206018293267e-03 3.455611851191509e-03 3.447036778938326e-03 3.438480761564906e-03 + 3.429943759171973e-03 3.421425731929710e-03 3.412926640077587e-03 3.404446443924284e-03 3.395985103847566e-03 + 3.387542580294149e-03 3.379118833779625e-03 3.370713824888311e-03 3.362327514273136e-03 3.353959862655566e-03 + 3.345610830825430e-03 3.337280379640856e-03 3.328968470028117e-03 3.320675062981532e-03 3.312400119563383e-03 + 3.304143600903741e-03 3.295905468200392e-03 3.287685682718708e-03 3.279484205791541e-03 3.271300998819104e-03 + 3.263136023268861e-03 3.254989240675381e-03 3.246860612640292e-03 3.238750100832104e-03 3.230657666986114e-03 + 3.222583272904310e-03 3.214526880455224e-03 3.206488451573856e-03 3.198467948261535e-03 3.190465332585799e-03 + 3.182480566680315e-03 3.174513612744716e-03 3.166564433044550e-03 3.158632989911110e-03 3.150719245741347e-03 + 3.142823162997754e-03 3.134944704208253e-03 3.127083831966070e-03 3.119240508929662e-03 3.111414697822531e-03 + 3.103606361433195e-03 3.095815462615012e-03 3.088041964286089e-03 3.080285829429188e-03 3.072547021091573e-03 + 3.064825502384924e-03 3.057121236485244e-03 3.049434186632695e-03 3.041764316131526e-03 3.034111588349942e-03 + 3.026475966719995e-03 3.018857414737495e-03 3.011255895961855e-03 3.003671374015994e-03 2.996103812586268e-03 + 2.988553175422279e-03 2.981019426336853e-03 2.973502529205832e-03 2.966002447968035e-03 2.958519146625135e-03 + 2.951052589241517e-03 2.943602739944181e-03 2.936169562922654e-03 2.928753022428834e-03 2.921353082776925e-03 + 2.913969708343289e-03 2.906602863566353e-03 2.899252512946498e-03 2.891918621045925e-03 2.884601152488600e-03 + 2.877300071960075e-03 2.870015344207399e-03 2.862746934039051e-03 2.855494806324768e-03 2.848258925995462e-03 + 2.841039258043119e-03 2.833835767520655e-03 2.826648419541855e-03 2.819477179281210e-03 2.812322011973840e-03 + 2.805182882915378e-03 2.798059757461844e-03 2.790952601029550e-03 2.783861379095001e-03 2.776786057194746e-03 + 2.769726600925314e-03 2.762682975943063e-03 2.755655147964089e-03 2.748643082764142e-03 2.741646746178450e-03 + 2.734666104101670e-03 2.727701122487766e-03 2.720751767349867e-03 2.713818004760198e-03 2.706899800849943e-03 + 2.699997121809142e-03 2.693109933886601e-03 2.686238203389751e-03 2.679381896684550e-03 2.672540980195396e-03 + 2.665715420404972e-03 2.658905183854195e-03 2.652110237142052e-03 2.645330546925513e-03 2.638566079919443e-03 + 2.631816802896449e-03 2.625082682686826e-03 2.618363686178382e-03 2.611659780316376e-03 2.604970932103421e-03 + 2.598297108599321e-03 2.591638276921005e-03 2.584994404242411e-03 2.578365457794361e-03 2.571751404864480e-03 + 2.565152212797062e-03 2.558567848992969e-03 2.551998280909534e-03 2.545443476060437e-03 2.538903402015601e-03 + 2.532378026401107e-03 2.525867316899032e-03 2.519371241247405e-03 2.512889767240049e-03 2.506422862726501e-03 + 2.499970495611896e-03 2.493532633856856e-03 2.487109245477378e-03 2.480700298544751e-03 2.474305761185412e-03 + 2.467925601580873e-03 2.461559787967585e-03 2.455208288636843e-03 2.448871071934690e-03 2.442548106261787e-03 + 2.436239360073327e-03 2.429944801878906e-03 2.423664400242429e-03 2.417398123782019e-03 2.411145941169864e-03 + 2.404907821132154e-03 2.398683732448966e-03 2.392473643954133e-03 2.386277524535164e-03 2.380095343133119e-03 + 2.373927068742512e-03 2.367772670411211e-03 2.361632117240312e-03 2.355505378384043e-03 2.349392423049669e-03 + 2.343293220497356e-03 2.337207740040104e-03 2.331135951043608e-03 2.325077822926148e-03 2.319033325158532e-03 + 2.313002427263929e-03 2.306985098817799e-03 2.300981309447776e-03 2.294991028833562e-03 2.289014226706835e-03 + 2.283050872851113e-03 2.277100937101676e-03 2.271164389345455e-03 2.265241199520909e-03 2.259331337617936e-03 + 2.253434773677782e-03 2.247551477792892e-03 2.241681420106842e-03 2.235824570814227e-03 2.229980900160528e-03 + 2.224150378442063e-03 2.218332976005814e-03 2.212528663249383e-03 2.206737410620847e-03 2.200959188618659e-03 + 2.195193967791568e-03 2.189441718738486e-03 2.183702412108384e-03 2.177976018600220e-03 2.172262508962793e-03 + 2.166561853994664e-03 2.160874024544042e-03 2.155198991508678e-03 2.149536725835775e-03 2.143887198521869e-03 + 2.138250380612715e-03 2.132626243203220e-03 2.127014757437299e-03 2.121415894507804e-03 2.115829625656382e-03 + 2.110255922173405e-03 2.104694755397864e-03 2.099146096717243e-03 2.093609917567424e-03 2.088086189432605e-03 + 2.082574883845158e-03 2.077075972385569e-03 2.071589426682298e-03 2.066115218411688e-03 2.060653319297877e-03 + 2.055203701112664e-03 2.049766335675450e-03 2.044341194853088e-03 2.038928250559797e-03 2.033527474757085e-03 + 2.028138839453613e-03 2.022762316705101e-03 2.017397878614238e-03 2.012045497330558e-03 2.006705145050369e-03 + 2.001376794016614e-03 1.996060416518793e-03 1.990755984892862e-03 1.985463471521111e-03 1.980182848832079e-03 + 1.974914089300464e-03 1.969657165446982e-03 1.964412049838304e-03 1.959178715086935e-03 1.953957133851110e-03 + 1.948747278834722e-03 1.943549122787172e-03 1.938362638503308e-03 1.933187798823315e-03 1.928024576632599e-03 + 1.922872944861707e-03 1.917732876486211e-03 1.912604344526604e-03 1.907487322048233e-03 1.902381782161150e-03 + 1.897287698020044e-03 1.892205042824138e-03 1.887133789817070e-03 1.882073912286828e-03 1.877025383565611e-03 + 1.871988177029750e-03 1.866962266099614e-03 1.861947624239492e-03 1.856944224957520e-03 1.851952041805545e-03 + 1.846971048379054e-03 1.842001218317084e-03 1.837042525302088e-03 1.832094943059861e-03 1.827158445359440e-03 + 1.822233006012990e-03 1.817318598875741e-03 1.812415197845841e-03 1.807522776864295e-03 1.802641309914858e-03 + 1.797770771023926e-03 1.792911134260452e-03 1.788062373735848e-03 1.783224463603877e-03 1.778397378060570e-03 + 1.773581091344110e-03 1.768775577734756e-03 1.763980811554734e-03 1.759196767168146e-03 1.754423418980866e-03 + 1.749660741440457e-03 1.744908709036061e-03 1.740167296298315e-03 1.735436477799244e-03 1.730716228152168e-03 + 1.726006522011628e-03 1.721307334073257e-03 1.716618639073700e-03 1.711940411790533e-03 1.707272627042140e-03 + 1.702615259687655e-03 1.697968284626832e-03 1.693331676799959e-03 1.688705411187798e-03 1.684089462811440e-03 + 1.679483806732252e-03 1.674888418051763e-03 1.670303271911569e-03 1.665728343493267e-03 1.661163608018328e-03 + 1.656609040748022e-03 1.652064616983332e-03 1.647530312064843e-03 1.643006101372675e-03 1.638491960326369e-03 + 1.633987864384806e-03 1.629493789046117e-03 1.625009709847594e-03 1.620535602365585e-03 1.616071442215437e-03 + 1.611617205051357e-03 1.607172866566373e-03 1.602738402492208e-03 1.598313788599207e-03 1.593899000696250e-03 + 1.589494014630655e-03 1.585098806288090e-03 1.580713351592500e-03 1.576337626505996e-03 1.571971607028789e-03 + 1.567615269199088e-03 1.563268589093013e-03 1.558931542824534e-03 1.554604106545345e-03 1.550286256444810e-03 + 1.545977968749859e-03 1.541679219724909e-03 1.537389985671793e-03 1.533110242929643e-03 1.528839967874836e-03 + 1.524579136920900e-03 1.520327726518425e-03 1.516085713154986e-03 1.511853073355062e-03 1.507629783679939e-03 + 1.503415820727658e-03 1.499211161132899e-03 1.495015781566919e-03 1.490829658737473e-03 1.486652769388716e-03 + 1.482485090301152e-03 1.478326598291526e-03 1.474177270212748e-03 1.470037082953845e-03 1.465906013439839e-03 + 1.461784038631697e-03 1.457671135526250e-03 1.453567281156103e-03 1.449472452589580e-03 1.445386626930625e-03 + 1.441309781318738e-03 1.437241892928903e-03 1.433182938971504e-03 1.429132896692253e-03 1.425091743372132e-03 + 1.421059456327291e-03 1.417036012909000e-03 1.413021390503562e-03 1.409015566532247e-03 1.405018518451231e-03 + 1.401030223751493e-03 1.397050659958790e-03 1.393079804633555e-03 1.389117635370832e-03 1.385164129800223e-03 + 1.381219265585802e-03 1.377283020426059e-03 1.373355372053838e-03 1.369436298236250e-03 1.365525776774636e-03 + 1.361623785504473e-03 1.357730302295332e-03 1.353845305050814e-03 1.349968771708470e-03 1.346100680239747e-03 + 1.342241008649943e-03 1.338389734978116e-03 1.334546837297057e-03 1.330712293713202e-03 1.326886082366581e-03 + 1.323068181430784e-03 1.319258569112866e-03 1.315457223653315e-03 1.311664123325994e-03 1.307879246438074e-03 + 1.304102571330003e-03 1.300334076375428e-03 1.296573739981150e-03 1.292821540587085e-03 1.289077456666199e-03 + 1.285341466724457e-03 1.281613549300797e-03 1.277893682967041e-03 1.274181846327896e-03 1.270478018020861e-03 + 1.266782176716218e-03 1.263094301116967e-03 1.259414369958785e-03 1.255742362009999e-03 1.252078256071521e-03 + 1.248422030976817e-03 1.244773665591877e-03 1.241133138815162e-03 1.237500429577569e-03 1.233875516842409e-03 + 1.230258379605347e-03 1.226648996894390e-03 1.223047347769834e-03 1.219453411324249e-03 1.215867166682440e-03 + 1.212288593001413e-03 1.208717669470346e-03 1.205154375310580e-03 1.201598689775564e-03 1.198050592150850e-03 + 1.194510061754058e-03 1.190977077934853e-03 1.187451620074940e-03 1.183933667588021e-03 1.180423199919783e-03 + 1.176920196547893e-03 1.173424636981956e-03 1.169936500763533e-03 1.166455767466093e-03 1.162982416695017e-03 + 1.159516428087600e-03 1.156057781313011e-03 1.152606456072314e-03 1.149162432098436e-03 1.145725689156178e-03 + 1.142296207042214e-03 1.138873965585075e-03 1.135458944645149e-03 1.132051124114701e-03 1.128650483917844e-03 + 1.125257004010582e-03 1.121870664380775e-03 1.118491445048173e-03 1.115119326064418e-03 1.111754287513049e-03 + 1.108396309509520e-03 1.105045372201222e-03 1.101701455767467e-03 1.098364540419554e-03 1.095034606400740e-03 + 1.091711633986298e-03 1.088395603483517e-03 1.085086495231737e-03 1.081784289602370e-03 1.078488966998942e-03 + 1.075200507857104e-03 1.071918892644680e-03 1.068644101861690e-03 1.065376116040399e-03 1.062114915745348e-03 + 1.058860481573393e-03 1.055612794153750e-03 1.052371834148050e-03 1.049137582250364e-03 1.045910019187279e-03 + 1.042689125717927e-03 1.039474882634048e-03 1.036267270760054e-03 1.033066270953071e-03 1.029871864103015e-03 + 1.026684031132645e-03 1.023502752997627e-03 1.020328010686627e-03 1.017159785221338e-03 1.013998057656592e-03 + 1.010842809080414e-03 1.007694020614106e-03 1.004551673412336e-03 1.001415748663209e-03 9.982862275883454e-04 + 9.951630914430032e-04 9.920463215161341e-04 9.889358991304940e-04 9.858318056427387e-04 9.827340224435191e-04 + 9.796425309575967e-04 9.765573126439266e-04 9.734783489957858e-04 9.704056215408804e-04 9.673391118414520e-04 + 9.642788014944001e-04 9.612246721314110e-04 9.581767054190655e-04 9.551348830589791e-04 9.520991867879246e-04 + 9.490695983779663e-04 9.460460996366081e-04 9.430286724069087e-04 9.400172985676444e-04 9.370119600334605e-04 + 9.340126387550004e-04 9.310193167190747e-04 9.280319759488141e-04 9.250505985038272e-04 9.220751664803737e-04 + 9.191056620115199e-04 9.161420672673207e-04 9.131843644549865e-04 9.102325358190642e-04 9.072865636416323e-04 + 9.043464302424672e-04 9.014121179792467e-04 8.984836092477425e-04 8.955608864820149e-04 8.926439321546251e-04 + 8.897327287768275e-04 8.868272588987857e-04 8.839275051098009e-04 8.810334500385090e-04 8.781450763531156e-04 + 8.752623667616279e-04 8.723853040120739e-04 8.695138708927533e-04 8.666480502324669e-04 8.637878249007621e-04 + 8.609331778081941e-04 8.580840919065701e-04 8.552405501892052e-04 8.524025356912048e-04 8.495700314897081e-04 + 8.467430207041795e-04 8.439214864966782e-04 8.411054120721452e-04 8.382947806786894e-04 8.354895756078786e-04 + 8.326897801950465e-04 8.298953778195790e-04 8.271063519052389e-04 8.243226859204696e-04 8.215443633787162e-04 + 8.187713678387469e-04 8.160036829049944e-04 8.132412922278703e-04 8.104841795041216e-04 8.077323284771643e-04 + 8.049857229374433e-04 8.022443467227913e-04 7.995081837187784e-04 7.967772178590831e-04 7.940514331258846e-04 + 7.913308135502152e-04 7.886153432123640e-04 7.859050062422616e-04 7.831997868198731e-04 7.804996691756158e-04 + 7.778046375907538e-04 7.751146763978152e-04 7.724297699810254e-04 7.697499027767166e-04 7.670750592737843e-04 + 7.644052240141052e-04 7.617403815929973e-04 7.590805166596724e-04 7.564256139176881e-04 7.537756581254217e-04 + 7.511306340965478e-04 7.484905267004947e-04 7.458553208629633e-04 7.432250015663922e-04 7.405995538504698e-04 + 7.379789628126455e-04 7.353632136086244e-04 7.327522914529168e-04 7.301461816193337e-04 7.275448694415425e-04 + 7.249483403136044e-04 7.223565796905160e-04 7.197695730887685e-04 7.171873060869209e-04 7.146097643261519e-04 + 7.120369335108511e-04 7.094687994091979e-04 7.069053478537547e-04 7.043465647420749e-04 7.017924360372905e-04 + 6.992429477687458e-04 6.966980860326181e-04 6.941578369925341e-04 6.916221868802212e-04 6.890911219961460e-04 + 6.865646287101673e-04 6.840426934622089e-04 6.815253027629065e-04 6.790124431943022e-04 6.765041014105243e-04 + 6.740002641384718e-04 6.715009181785323e-04 6.690060504052715e-04 6.665156477681531e-04 6.640296972922814e-04 + 6.615481860791069e-04 6.590711013071894e-04 6.565984302329301e-04 6.541301601913344e-04 6.516662785967873e-04 + 6.492067729438071e-04 6.467516308078424e-04 6.443008398460541e-04 6.418543877981128e-04 6.394122624870153e-04 + 6.369744518198842e-04 6.345409437887953e-04 6.321117264716196e-04 6.296867880328447e-04 6.272661167244345e-04 + 6.248497008866846e-04 6.224375289490769e-04 6.200295894311662e-04 6.176258709434476e-04 6.152263621882515e-04 + 6.128310519606457e-04 6.104399291493323e-04 6.080529827375613e-04 6.056702018040650e-04 6.032915755239742e-04 + 6.009170931697627e-04 5.985467441121958e-04 5.961805178212783e-04 5.938184038672286e-04 5.914603919214390e-04 + 5.891064717574551e-04 5.867566332519756e-04 5.844108663858301e-04 5.820691612449991e-04 5.797315080216048e-04 + 5.773978970149492e-04 5.750683186325317e-04 5.727427633910793e-04 5.704212219175993e-04 5.681036849504175e-04 + 5.657901433402401e-04 5.634805880512227e-04 5.611750101620305e-04 5.588734008669272e-04 5.565757514768592e-04 + 5.542820534205412e-04 5.519922982455720e-04 5.497064776195245e-04 5.474245833310661e-04 5.451466072910871e-04 + 5.428725415338165e-04 5.406023782179598e-04 5.383361096278425e-04 5.360737281745471e-04 5.338152263970798e-04 + 5.315605969635125e-04 5.293098326721548e-04 5.270629264527280e-04 5.248198713675304e-04 5.225806606126214e-04 + 5.203452875190134e-04 5.181137455538510e-04 5.158860283216167e-04 5.136621295653204e-04 5.114420431677133e-04 + 5.092257631524941e-04 5.070132836855160e-04 5.048045990760078e-04 5.025997037777986e-04 5.003985923905294e-04 + 4.982012596608911e-04 4.960077004838482e-04 4.938179099038688e-04 4.916318831161700e-04 4.894496154679423e-04 + 4.872711024595963e-04 4.850963397459992e-04 4.829253231377166e-04 4.807580486022647e-04 4.785945122653413e-04 + 4.764347104120705e-04 4.742786394882654e-04 4.721262961016472e-04 4.699776770231128e-04 4.678327791879566e-04 + 4.656915996971294e-04 4.635541358184743e-04 4.614203849879615e-04 4.592903448109291e-04 4.571640130633188e-04 + 4.550413876929031e-04 4.529224668205208e-04 4.508072487412936e-04 4.486957319258494e-04 4.465879150215445e-04 + 4.444837968536653e-04 4.423833764266389e-04 4.402866529252409e-04 4.381936257157713e-04 4.361042943472626e-04 + 4.340186585526459e-04 4.319367182499267e-04 4.298584735433560e-04 4.277839247245788e-04 4.257130722737879e-04 + 4.236459168608553e-04 4.215824593464625e-04 4.195227007832233e-04 4.174666424167804e-04 4.154142856869037e-04 + 4.133656322285796e-04 4.113206838730657e-04 4.092794426489623e-04 4.072419107832454e-04 4.052080907022947e-04 + 4.031779850329171e-04 4.011515966033265e-04 3.991289284441383e-04 3.971099837893318e-04 3.950947660771903e-04 + 3.930832789512367e-04 3.910755262611370e-04 3.890715120635941e-04 3.870712406232216e-04 3.850747164133836e-04 + 3.830819441170283e-04 3.810929286274977e-04 3.791076750492999e-04 3.771261886988812e-04 3.751484751053507e-04 + 3.731745400111936e-04 3.712043893729607e-04 3.692380293619207e-04 3.672754663646915e-04 3.653167069838493e-04 + 3.633617580384936e-04 3.614106265648033e-04 3.594633198165416e-04 3.575198452655453e-04 3.555802106021787e-04 + 3.536444237357472e-04 3.517124927948939e-04 3.497844261279399e-04 3.478602323032118e-04 3.459399201093211e-04 + 3.440234985554071e-04 3.421109768713465e-04 3.402023645079316e-04 3.382976711369872e-04 3.363969066514760e-04 + 3.345000811655402e-04 3.326072050145173e-04 3.307182887549079e-04 3.288333431642967e-04 3.269523792412342e-04 + 3.250754082050812e-04 3.232024414957865e-04 3.213334907736431e-04 3.194685679189784e-04 3.176076850318071e-04 + 3.157508544314351e-04 3.138980886560037e-04 3.120494004619938e-04 3.102048028236815e-04 3.083643089325236e-04 + 3.065279321965175e-04 3.046956862394788e-04 3.028675849002833e-04 3.010436422320546e-04 2.992238725012805e-04 + 2.974082901868850e-04 2.955969099792442e-04 2.937897467791316e-04 2.919868156966190e-04 2.901881320499057e-04 + 2.883937113640927e-04 2.866035693698992e-04 2.848177220023049e-04 2.830361853991480e-04 2.812589758996397e-04 + 2.794861100428266e-04 2.777176045659920e-04 2.759534764029790e-04 2.741937426824542e-04 2.724384207261132e-04 + 2.706875280467976e-04 2.689410823465721e-04 2.671991015147054e-04 2.654616036255998e-04 2.637286069366518e-04 + 2.620001298860284e-04 2.602761910903856e-04 2.585568093425185e-04 2.568420036089220e-04 2.551317930273040e-04 + 2.534261969040036e-04 2.517252347113521e-04 2.500289260849598e-04 2.483372908209174e-04 2.466503488729361e-04 + 2.449681203494164e-04 2.432906255104244e-04 2.416178847646195e-04 2.399499186660811e-04 2.382867479110827e-04 + 2.366283933347842e-04 2.349748759078369e-04 2.333262167329386e-04 2.316824370412873e-04 2.300435581889795e-04 + 2.284096016533290e-04 2.267805890291010e-04 2.251565420246854e-04 2.235374824581899e-04 2.219234322534543e-04 + 2.203144134360031e-04 2.187104481289090e-04 2.171115585485916e-04 2.155177670005515e-04 2.139290958750094e-04 + 2.123455676424941e-04 2.107672048493520e-04 2.091940301131766e-04 2.076260661181851e-04 2.060633356105059e-04 + 2.045058613934101e-04 2.029536663224731e-04 2.014067733006575e-04 1.998652052733419e-04 1.983289852232798e-04 + 1.967981361654851e-04 1.952726811420648e-04 1.937526432169795e-04 1.922380454707444e-04 1.907289109950740e-04 + 1.892252628874529e-04 1.877271242456615e-04 1.862345181622395e-04 1.847474677188843e-04 1.832659959808085e-04 + 1.817901259910281e-04 1.803198807646104e-04 1.788552832828652e-04 1.773963564874827e-04 1.759431232746311e-04 + 1.744956064889993e-04 1.730538289177999e-04 1.716178132847299e-04 1.701875822438821e-04 1.687631583736205e-04 + 1.673445641704270e-04 1.659318220426905e-04 1.645249543044856e-04 1.631239831692970e-04 1.617289307437285e-04 + 1.603398190211818e-04 1.589566698754962e-04 1.575795050545791e-04 1.562083461740089e-04 1.548432147106115e-04 + 1.534841319960310e-04 1.521311192102718e-04 1.507841973752365e-04 1.494433873482522e-04 1.481087098155803e-04 + 1.467801852859277e-04 1.454578340839574e-04 1.441416763437795e-04 1.428317320024697e-04 1.415280207935674e-04 + 1.402305622405927e-04 1.389393756505731e-04 1.376544801075711e-04 1.363758944662350e-04 1.351036373453669e-04 + 1.338377271214972e-04 1.325781819225001e-04 1.313250196212134e-04 1.300782578291012e-04 1.288379138899411e-04 + 1.276040048735375e-04 1.263765475694828e-04 1.251555584809442e-04 1.239410538184992e-04 1.227330494940161e-04 + 1.215315611145692e-04 1.203366039764162e-04 1.191481930590239e-04 1.179663430191405e-04 1.167910681849382e-04 + 1.156223825502033e-04 1.144602997685972e-04 1.133048331479846e-04 1.121559956448188e-04 1.110137998586093e-04 + 1.098782580264597e-04 1.087493820176774e-04 1.076271833284709e-04 1.065116730767186e-04 1.054028619968280e-04 + 1.043007604346849e-04 1.032053783426810e-04 1.021167252748428e-04 1.010348103820536e-04 9.995964240736539e-05 + 9.889122968142069e-05 9.782958011796412e-05 9.677470120946738e-05 9.572660002285777e-05 9.468528319534899e-05 + 9.365075693039483e-05 9.262302699374159e-05 9.160209870960559e-05 9.058797695696633e-05 8.958066616597201e-05 + 8.858017031447301e-05 8.758649292467811e-05 8.659963705992675e-05 8.561960532160170e-05 8.464639984615602e-05 + 8.368002230227816e-05 8.272047388818898e-05 8.176775532906464e-05 8.082186687460081e-05 7.988280829671235e-05 + 7.895057888736329e-05 7.802517745654561e-05 7.710660233038779e-05 7.619485134940996e-05 7.528992186692232e-05 + 7.439181074755863e-05 7.350051436596017e-05 7.261602860560519e-05 7.173834885777512e-05 7.086747002067788e-05 + 7.000338649870708e-05 6.914609220185583e-05 6.829558054527721e-05 6.745184444898630e-05 6.661487633771749e-05 + 6.578466814092885e-05 6.496121129294897e-05 6.414449673328256e-05 6.333451490705303e-05 6.253125576560153e-05 + 6.173470876723337e-05 6.094486287810570e-05 6.016170657327246e-05 5.938522783786698e-05 5.861541416843609e-05 + 5.785225257442225e-05 5.709572957978326e-05 5.634583122476305e-05 5.560254306780529e-05 5.486585018760457e-05 + 5.413573718530735e-05 5.341218818684498e-05 5.269518684541193e-05 5.198471634408232e-05 5.128075939855852e-05 + 5.058329826005981e-05 4.989231471834558e-05 4.920779010486586e-05 4.852970529605069e-05 4.785804071672127e-05 + 4.719277634363360e-05 4.653389170914911e-05 4.588136590502368e-05 4.523517758632414e-05 4.459530497546550e-05 + 4.396172586636035e-05 4.333441762869301e-05 4.271335721230002e-05 4.209852115166751e-05 4.148988557053851e-05 + 4.088742618662300e-05 4.029111831641795e-05 3.970093688012960e-05 3.911685640669207e-05 3.853885103889048e-05 + 3.796689453857244e-05 3.740096029195752e-05 3.684102131503671e-05 3.628705025905535e-05 3.573901941608762e-05 + 3.519690072468710e-05 3.466066577562121e-05 3.413028581768327e-05 3.360573176357403e-05 3.308697419585968e-05 + 3.257398337299743e-05 3.206672923542403e-05 3.156518141171296e-05 3.106930922478571e-05 3.057908169818484e-05 + 3.009446756240164e-05 2.961543526125175e-05 2.914195295830334e-05 2.867398854335129e-05 2.821150963893049e-05 + 2.775448360687515e-05 2.730287755490999e-05 2.685665834327950e-05 2.641579259140865e-05 2.598024668458958e-05 + 2.554998678069716e-05 2.512497881692752e-05 2.470518851655354e-05 2.429058139570310e-05 2.388112277014653e-05 + 2.347677776209982e-05 2.307751130703654e-05 2.268328816050314e-05 2.229407290494254e-05 2.190982995651459e-05 + 2.153052357191726e-05 2.115611785520415e-05 2.078657676459225e-05 2.042186411926256e-05 2.006194360614966e-05 + 1.970677878671296e-05 1.935633310369577e-05 1.901056988786086e-05 1.866945236470675e-05 1.833294366116003e-05 + 1.800100681223881e-05 1.767360476768973e-05 1.735070039859402e-05 1.703225650393799e-05 1.671823581715181e-05 + 1.640860101260710e-05 1.610331471207767e-05 1.580233949115841e-05 1.550563788563895e-05 1.521317239783367e-05 + 1.492490550286458e-05 1.464079965489248e-05 1.436081729330114e-05 1.408492084882477e-05 1.381307274962391e-05 + 1.354523542730492e-05 1.328137132288014e-05 1.302144289267083e-05 1.276541261414933e-05 1.251324299171729e-05 + 1.226489656242331e-05 1.202033590161290e-05 1.177952362851430e-05 1.154242241175703e-05 1.130899497481984e-05 + 1.107920410141205e-05 1.085301264078127e-05 1.063038351295119e-05 1.041127971388670e-05 1.019566432058343e-05 + 9.983500496084821e-06 9.774751494423275e-06 9.569380665483623e-06 9.367351459792183e-06 9.168627433225671e-06 + 8.973172251643503e-06 8.780949695441150e-06 8.591923664022754e-06 8.406058180195186e-06 8.223317394481686e-06 + 8.043665589353297e-06 7.867067183381360e-06 7.693486735306313e-06 7.522888948026158e-06 7.355238672503077e-06 + 7.190500911586492e-06 7.028640823755134e-06 6.869623726776599e-06 6.713415101283138e-06 6.559980594266900e-06 + 6.409286022490674e-06 6.261297375817477e-06 6.115980820457731e-06 5.973302702132995e-06 5.833229549159395e-06 + 5.695728075447326e-06 5.560765183420738e-06 5.428307966854883e-06 5.298323713632066e-06 5.170779908417491e-06 + 5.045644235254726e-06 4.922884580079970e-06 4.802469033158413e-06 4.684365891439682e-06 4.568543660835707e-06 + 4.454971058420297e-06 4.343617014550190e-06 4.234450674909781e-06 4.127441402479353e-06 4.022558779426295e-06 + 3.919772608922426e-06 3.819052916885255e-06 3.720369953646088e-06 3.623694195544675e-06 3.528996346450582e-06 + 3.436247339213261e-06 3.345418337041000e-06 3.256480734808553e-06 3.169406160296344e-06 3.084166475359596e-06 + 3.000733777030156e-06 2.919080398551037e-06 2.839178910343863e-06 2.761002120911402e-06 2.684523077675286e-06 + 2.609715067749243e-06 2.536551618650253e-06 2.465006498946663e-06 2.395053718845667e-06 2.326667530720458e-06 + 2.259822429577368e-06 2.194493153465346e-06 2.130654683827015e-06 2.068282245793597e-06 2.007351308424123e-06 + 1.947837584889302e-06 1.889717032602081e-06 1.832965853295182e-06 1.777560493046226e-06 1.723477642252501e-06 + 1.670694235554950e-06 1.619187451713481e-06 1.568934713434016e-06 1.519913687147974e-06 1.472102282745770e-06 + 1.425478653264967e-06 1.380021194533606e-06 1.335708544770622e-06 1.292519584143177e-06 1.250433434282747e-06 + 1.209429457760506e-06 1.169487257522661e-06 1.130586676287289e-06 1.092707795903240e-06 1.055830936671729e-06 + 1.019936656632314e-06 9.850057508132516e-07 9.510192504478489e-07 9.179584221574209e-07 8.858047671014927e-07 + 8.545400200966135e-07 8.241461487044035e-07 7.946053522894528e-07 7.659000610485429e-07 7.380129350113114e-07 + 7.109268630137866e-07 6.846249616454182e-07 6.590905741701426e-07 6.343072694229160e-07 6.102588406818206e-07 + 5.869293045171036e-07 5.643028996176943e-07 5.423640855958241e-07 5.210975417708616e-07 5.004881659329261e-07 + 4.805210730868909e-07 4.611815941779040e-07 4.424552747986825e-07 4.243278738796913e-07 4.067853623627544e-07 + 3.898139218586617e-07 3.733999432897308e-07 3.575300255178580e-07 3.421909739585923e-07 3.273697991822284e-07 + 3.130537155021659e-07 2.992301395514856e-07 2.858866888482460e-07 2.730111803500024e-07 2.605916289983662e-07 + 2.486162462540818e-07 2.370734386231075e-07 2.259518061745216e-07 2.152401410505174e-07 2.049274259692775e-07 + 1.950028327211637e-07 1.854557206586753e-07 1.762756351808914e-07 1.674523062126709e-07 1.589756466792974e-07 + 1.508357509769722e-07 1.430228934395744e-07 1.355275268022795e-07 1.283402806624190e-07 1.214519599379732e-07 + 1.148535433242769e-07 1.085361817491910e-07 1.024911968272929e-07 9.671007931343055e-08 9.118448755599499e-08 + 8.590624595038432e-08 8.086734339298331e-08 7.605993173598786e-08 7.147632424353159e-08 6.710899404933947e-08 + 6.295057261634440e-08 5.899384819855228e-08 5.523176430544641e-08 5.165741816930062e-08 4.826405921566924e-08 + 4.504508753731864e-08 4.199405237195365e-08 3.910465058392956e-08 3.637072515028429e-08 3.378626365131649e-08 + 3.134539676594339e-08 2.904239677211676e-08 2.687167605250832e-08 2.482778560567275e-08 2.290541356294897e-08 + 2.109938371125715e-08 1.940465402203417e-08 1.781631518648325e-08 1.632958915731169e-08 1.493982769716939e-08 + 1.364251093391979e-08 1.243324592294042e-08 1.130776521659587e-08 1.026192544102716e-08 9.291705880418958e-09 + 8.393207068871047e-09 7.562649389999410e-09 6.796371684408959e-09 6.090829865134629e-09 5.442595541179910e-09 + 4.848354649250771e-09 4.304906093780949e-09 3.809160395351848e-09 3.358138347589271e-09 2.948969682616630e-09 + 2.578891745150586e-09 2.245248175299597e-09 1.945487600140316e-09 1.677162334128434e-09 1.437927088398223e-09 + 1.225537689005639e-09 1.037849804158001e-09 8.728176804699865e-10 7.284928882859528e-10 6.030230760955508e-10 + 4.946507340732279e-10 4.017119667624381e-10 3.226352749223068e-10 2.559403465522512e-10 2.002368571033243e-10 + 1.542232788817623e-10 1.166856996476981e-10 8.649665040559172e-11 6.261394238156016e-11 4.407951317750801e-11 + 3.001828208884473e-11 1.963701456948262e-11 1.222319582353213e-11 7.143913500555690e-12 3.844749467454856e-12 + 1.848680627076238e-12 7.549887505659207e-13 2.381792873531496e-13 4.690911377612711e-14 2.923178492452463e-15 + 0.000000000000000e+00 -5.006820713286318e-02 -1.000090145320395e-01 -1.498225894568735e-01 -1.995090990671400e-01 + -2.490687104230436e-01 -2.985015904852200e-01 -3.478079061147344e-01 -3.969878240730826e-01 -4.460415110221904e-01 + -4.949691335244142e-01 -5.437708580425406e-01 -5.924468509397853e-01 -6.409972784797964e-01 -6.894223068266498e-01 + -7.377221020448543e-01 -7.858968300993463e-01 -8.339466568554940e-01 -8.818717480790957e-01 -9.296722694363804e-01 + -9.773483864940046e-01 -1.024900264719059e+00 -1.072328069479062e+00 -1.119631966041963e+00 -1.166812119576140e+00 + -1.213868695150406e+00 -1.260801857733998e+00 -1.307611772196589e+00 -1.354298603308276e+00 -1.400862515739593e+00 + -1.447303674061498e+00 -1.493622242745386e+00 -1.539818386163074e+00 -1.585892268586817e+00 -1.631844054189294e+00 + -1.677673907043621e+00 -1.723381991123338e+00 -1.768968470302417e+00 -1.814433508355262e+00 -1.859777268956706e+00 + -1.904999915682013e+00 -1.950101612006874e+00 -1.995082521307415e+00 -2.039942806860190e+00 -2.084682631842184e+00 + -2.129302159330809e+00 -2.173801552303911e+00 -2.218180973639766e+00 -2.262440586117080e+00 -2.306580552414984e+00 + -2.350601035113049e+00 -2.394502196691267e+00 -2.438284199530069e+00 -2.481947205910305e+00 -2.525491378013265e+00 + -2.568916877920667e+00 -2.612223867614658e+00 -2.655412508977812e+00 -2.698482963793142e+00 -2.741435393744081e+00 + -2.784269960414501e+00 -2.826986825288698e+00 -2.869586149751399e+00 -2.912068095087767e+00 -2.954432822483390e+00 + -2.996680493024283e+00 -3.038811267696898e+00 -3.080825307388120e+00 -3.122722772885253e+00 -3.164503824876038e+00 + -3.206168623948646e+00 -3.247717330591680e+00 -3.289150105194168e+00 -3.330467108045571e+00 -3.371668499335783e+00 + -3.412754439155127e+00 -3.453725087494349e+00 -3.494580604244637e+00 -3.535321149197600e+00 -3.575946882045281e+00 + -3.616457962380155e+00 -3.656854549695122e+00 -3.697136803383518e+00 -3.737304882739106e+00 -3.777358946956077e+00 + -3.817299155129062e+00 -3.857125666253106e+00 -3.896838639223701e+00 -3.936438232836761e+00 -3.975924605788628e+00 + -4.015297916676078e+00 -4.054558323996317e+00 -4.093705986146982e+00 -4.132741061426137e+00 -4.171663708032280e+00 + -4.210474084064336e+00 -4.249172347521660e+00 -4.287758656304046e+00 -4.326233168211704e+00 -4.364596040945284e+00 + -4.402847432105863e+00 -4.440987499194948e+00 -4.479016399614483e+00 -4.516934290666828e+00 -4.554741329554785e+00 + -4.592437673381585e+00 -4.630023479150889e+00 -4.667498903766779e+00 -4.704864104033777e+00 -4.742119236656837e+00 + -4.779264458241338e+00 -4.816299925293086e+00 -4.853225794218325e+00 -4.890042221323723e+00 -4.926749362816387e+00 + -4.963347374803837e+00 -4.999836413294049e+00 -5.036216634195402e+00 -5.072488193316728e+00 -5.108651246367274e+00 + -5.144705948956722e+00 -5.180652456595185e+00 -5.216490924693209e+00 -5.252221508561761e+00 -5.287844363412249e+00 + -5.323359644356509e+00 -5.358767506406799e+00 -5.394068104475816e+00 -5.429261593376688e+00 -5.464348127822958e+00 + -5.499327862428623e+00 -5.534200951708094e+00 -5.568967550076214e+00 -5.603627811848263e+00 -5.638181891239942e+00 + -5.672629942367392e+00 -5.706972119247172e+00 -5.741208575796287e+00 -5.775339465832159e+00 -5.809364943072646e+00 + -5.843285161136033e+00 -5.877100273541042e+00 -5.910810433706818e+00 -5.944415794952943e+00 -5.977916510499413e+00 + -6.011312733466676e+00 -6.044604616875601e+00 -6.077792313647489e+00 -6.110875976604064e+00 -6.143855758467481e+00 + -6.176731811860341e+00 -6.209504289305658e+00 -6.242173343226881e+00 -6.274739125947890e+00 -6.307201789692997e+00 + -6.339561486586946e+00 -6.371818368654901e+00 -6.403972587822468e+00 -6.436024295915685e+00 -6.467973644660999e+00 + -6.499820785685313e+00 -6.531565870515943e+00 -6.563209050580643e+00 -6.594750477207605e+00 -6.626190301625428e+00 + -6.657528674963161e+00 -6.688765748250275e+00 -6.719901672416680e+00 -6.750936598292705e+00 -6.781870676609118e+00 + -6.812704057997106e+00 -6.843436892988300e+00 -6.874069332014752e+00 -6.904601525408949e+00 -6.935033623403804e+00 + -6.965365776132669e+00 -6.995598133629310e+00 -7.025730845827939e+00 -7.055764062563197e+00 -7.085697933570137e+00 + -7.115532608484265e+00 -7.145268236841510e+00 -7.174904968078224e+00 -7.204442951531195e+00 -7.233882336437644e+00 + -7.263223271935214e+00 -7.292465907061986e+00 -7.321610390756475e+00 -7.350656871857605e+00 -7.379605499104758e+00 + -7.408456421137727e+00 -7.437209786496745e+00 -7.465865743622467e+00 -7.494424440855989e+00 -7.522886026438825e+00 + -7.551250648512927e+00 -7.579518455120681e+00 -7.607689594204888e+00 -7.635764213608793e+00 -7.663742461076068e+00 + -7.691624484250818e+00 -7.719410430677570e+00 -7.747100447801290e+00 -7.774694682967366e+00 -7.802193283421627e+00 + -7.829596396310321e+00 -7.856904168680123e+00 -7.884116747478167e+00 -7.911234279551978e+00 -7.938256911649533e+00 + -7.965184790419241e+00 -7.992018062409932e+00 -8.018756874070876e+00 -8.045401371751767e+00 -8.071951701702716e+00 + -8.098408010074298e+00 -8.124770442917484e+00 -8.151039146183699e+00 -8.177214265724785e+00 -8.203295947293009e+00 + -8.229284336541095e+00 -8.255179579022176e+00 -8.280981820189801e+00 -8.306691205397986e+00 -8.332307879901144e+00 + -8.357831988854150e+00 -8.383263677312277e+00 -8.408603090231253e+00 -8.433850372467212e+00 -8.459005668776756e+00 + -8.484069123816868e+00 -8.509040882145003e+00 -8.533921088219028e+00 -8.558709886397235e+00 -8.583407420938359e+00 + -8.608013836001565e+00 -8.632529275646432e+00 -8.656953883832989e+00 -8.681287804421677e+00 -8.705531181173392e+00 + -8.729684157749432e+00 -8.753746877711547e+00 -8.777719484521905e+00 -8.801602121543104e+00 -8.825394932038181e+00 + -8.849098059170597e+00 -8.872711646004243e+00 -8.896235835503438e+00 -8.919670770532946e+00 -8.943016593857950e+00 + -8.966273448144053e+00 -8.989441475957305e+00 -9.012520819764173e+00 -9.035511621931569e+00 -9.058414024726829e+00 + -9.081228170317713e+00 -9.103954200772408e+00 -9.126592258059556e+00 -9.149142484048202e+00 -9.171605020507837e+00 + -9.193980009108369e+00 -9.216267591420158e+00 -9.238467908913965e+00 -9.260581102961002e+00 -9.282607314832910e+00 + -9.304546685701746e+00 -9.326399356640019e+00 -9.348165468620651e+00 -9.369845162516999e+00 -9.391438579102848e+00 + -9.412945859052428e+00 -9.434367142940385e+00 -9.455702571241789e+00 -9.476952284332143e+00 -9.498116422487408e+00 + -9.519195125883934e+00 -9.540188534598531e+00 -9.561096788608427e+00 -9.581920027791277e+00 -9.602658391925184e+00 + -9.623312020688653e+00 -9.643881053660643e+00 -9.664365630320537e+00 -9.684765890048151e+00 -9.705081972123706e+00 + -9.725314015727891e+00 -9.745462159941807e+00 -9.765526543746988e+00 -9.785507306025387e+00 -9.805404585559403e+00 + -9.825218521031857e+00 -9.844949251026003e+00 -9.864596914025524e+00 -9.884161648414540e+00 -9.903643592477577e+00 + -9.923042884399642e+00 -9.942359662266103e+00 -9.961594064062814e+00 -9.980746227676038e+00 -9.999816290892465e+00 + -1.001880439139924e+01 -1.003771066678389e+01 -1.005653525453442e+01 -1.007527829203923e+01 -1.009393991658719e+01 + -1.011252026536755e+01 -1.013101947547004e+01 -1.014943768388478e+01 -1.016777502750235e+01 -1.018603164311374e+01 + -1.020420766741038e+01 -1.022230323698413e+01 -1.024031848832728e+01 -1.025825355783253e+01 -1.027610858179305e+01 + -1.029388369640242e+01 -1.031157903775464e+01 -1.032919474184415e+01 -1.034673094456582e+01 -1.036418778171495e+01 + -1.038156538898727e+01 -1.039886390197894e+01 -1.041608345618655e+01 -1.043322418700714e+01 -1.045028622973813e+01 + -1.046726971957742e+01 -1.048417479162332e+01 -1.050100158087456e+01 -1.051775022223033e+01 -1.053442085049022e+01 + -1.055101360035426e+01 -1.056752860642293e+01 -1.058396600319711e+01 -1.060032592507812e+01 -1.061660850636773e+01 + -1.063281388126810e+01 -1.064894218388186e+01 -1.066499354821207e+01 -1.068096810816215e+01 -1.069686599753606e+01 + -1.071268735003813e+01 -1.072843229927309e+01 -1.074410097874616e+01 -1.075969352186296e+01 -1.077521006192955e+01 + -1.079065073215242e+01 -1.080601566563847e+01 -1.082130499539506e+01 -1.083651885432996e+01 -1.085165737525140e+01 + -1.086672069086799e+01 -1.088170893378879e+01 -1.089662223652332e+01 -1.091146073148151e+01 -1.092622455097371e+01 + -1.094091382721070e+01 -1.095552869230371e+01 -1.097006927826440e+01 -1.098453571700482e+01 -1.099892814033749e+01 + -1.101324667997537e+01 -1.102749146753181e+01 -1.104166263452061e+01 -1.105576031235601e+01 -1.106978463235267e+01 + -1.108373572572567e+01 -1.109761372359055e+01 -1.111141875696323e+01 -1.112515095676012e+01 -1.113881045379803e+01 + -1.115239737879420e+01 -1.116591186236629e+01 -1.117935403503242e+01 -1.119272402721109e+01 -1.120602196922131e+01 + -1.121924799128244e+01 -1.123240222351432e+01 -1.124548479593719e+01 -1.125849583847174e+01 -1.127143548093909e+01 + -1.128430385306078e+01 -1.129710108445878e+01 -1.130982730465550e+01 -1.132248264307379e+01 -1.133506722903689e+01 + -1.134758119176851e+01 -1.136002466039276e+01 -1.137239776393423e+01 -1.138470063131786e+01 -1.139693339136910e+01 + -1.140909617281379e+01 -1.142118910427822e+01 -1.143321231428907e+01 -1.144516593127349e+01 -1.145705008355906e+01 + -1.146886489937375e+01 -1.148061050684601e+01 -1.149228703400470e+01 -1.150389460877910e+01 -1.151543335899894e+01 + -1.152690341239434e+01 -1.153830489659592e+01 -1.154963793913465e+01 -1.156090266744201e+01 -1.157209920884984e+01 + -1.158322769059045e+01 -1.159428823979657e+01 -1.160528098350138e+01 -1.161620604863843e+01 -1.162706356204179e+01 + -1.163785365044587e+01 -1.164857644048558e+01 -1.165923205869620e+01 -1.166982063151351e+01 -1.168034228527367e+01 + -1.169079714621327e+01 -1.170118534046936e+01 -1.171150699407939e+01 -1.172176223298125e+01 -1.173195118301329e+01 + -1.174207396991424e+01 -1.175213071932329e+01 -1.176212155678006e+01 -1.177204660772459e+01 -1.178190599749735e+01 + -1.179169985133925e+01 -1.180142829439164e+01 -1.181109145169626e+01 -1.182068944819532e+01 -1.183022240873145e+01 + -1.183969045804769e+01 -1.184909372078755e+01 -1.185843232149494e+01 -1.186770638461419e+01 -1.187691603449009e+01 + -1.188606139536785e+01 -1.189514259139310e+01 -1.190415974661191e+01 -1.191311298497079e+01 -1.192200243031666e+01 + -1.193082820639688e+01 -1.193959043685923e+01 -1.194828924525194e+01 -1.195692475502366e+01 -1.196549708952346e+01 + -1.197400637200087e+01 -1.198245272560579e+01 -1.199083627338865e+01 -1.199915713830020e+01 -1.200741544319170e+01 + -1.201561131081479e+01 -1.202374486382157e+01 -1.203181622476458e+01 -1.203982551609674e+01 -1.204777286017145e+01 + -1.205565837924252e+01 -1.206348219546420e+01 -1.207124443089115e+01 -1.207894520747849e+01 -1.208658464708172e+01 + -1.209416287145685e+01 -1.210168000226024e+01 -1.210913616104872e+01 -1.211653146927955e+01 -1.212386604831041e+01 + -1.213114001939943e+01 -1.213835350370513e+01 -1.214550662228650e+01 -1.215259949610295e+01 -1.215963224601432e+01 + -1.216660499278085e+01 -1.217351785706324e+01 -1.218037095942266e+01 -1.218716442032061e+01 -1.219389836011910e+01 + -1.220057289908056e+01 -1.220718815736783e+01 -1.221374425504419e+01 -1.222024131207331e+01 -1.222667944831938e+01 + -1.223305878354696e+01 -1.223937943742103e+01 -1.224564152950702e+01 -1.225184517927080e+01 -1.225799050607866e+01 + -1.226407762919731e+01 -1.227010666779390e+01 -1.227607774093601e+01 -1.228199096759167e+01 -1.228784646662930e+01 + -1.229364435681777e+01 -1.229938475682639e+01 -1.230506778522489e+01 -1.231069356048343e+01 -1.231626220097260e+01 + -1.232177382496342e+01 -1.232722855062735e+01 -1.233262649603627e+01 -1.233796777916249e+01 -1.234325251787875e+01 + -1.234848082995823e+01 -1.235365283307453e+01 -1.235876864480168e+01 -1.236382838261416e+01 -1.236883216388684e+01 + -1.237378010589507e+01 -1.237867232581458e+01 -1.238350894072156e+01 -1.238829006759264e+01 -1.239301582330486e+01 + -1.239768632463568e+01 -1.240230168826303e+01 -1.240686203076523e+01 -1.241136746862106e+01 -1.241581811820969e+01 + -1.242021409581077e+01 -1.242455551760435e+01 -1.242884249967092e+01 -1.243307515799139e+01 -1.243725360844712e+01 + -1.244137796681987e+01 -1.244544834879187e+01 -1.244946486994575e+01 -1.245342764576457e+01 -1.245733679163183e+01 + -1.246119242283147e+01 -1.246499465454785e+01 -1.246874360186574e+01 -1.247243937977038e+01 -1.247608210314742e+01 + -1.247967188678292e+01 -1.248320884536342e+01 -1.248669309347583e+01 -1.249012474560754e+01 -1.249350391614635e+01 + -1.249683071938049e+01 -1.250010526949862e+01 -1.250332768058983e+01 -1.250649806664364e+01 -1.250961654155002e+01 + -1.251268321909933e+01 -1.251569821298239e+01 -1.251866163679046e+01 -1.252157360401520e+01 -1.252443422804870e+01 + -1.252724362218351e+01 -1.253000189961260e+01 -1.253270917342935e+01 -1.253536555662760e+01 -1.253797116210158e+01 + -1.254052610264600e+01 -1.254303049095597e+01 -1.254548443962702e+01 -1.254788806115515e+01 -1.255024146793674e+01 + -1.255254477226865e+01 -1.255479808634813e+01 -1.255700152227289e+01 -1.255915519204104e+01 -1.256125920755116e+01 + -1.256331368060222e+01 -1.256531872289364e+01 -1.256727444602527e+01 -1.256918096149740e+01 -1.257103838071072e+01 + -1.257284681496637e+01 -1.257460637546593e+01 -1.257631717331139e+01 -1.257797931950519e+01 -1.257959292495018e+01 + -1.258115810044966e+01 -1.258267495670733e+01 -1.258414360432737e+01 -1.258556415381434e+01 -1.258693671557324e+01 + -1.258826139990954e+01 -1.258953831702910e+01 -1.259076757703821e+01 -1.259194928994361e+01 -1.259308356565248e+01 + -1.259417051397238e+01 -1.259521024461135e+01 -1.259620286717785e+01 -1.259714849118074e+01 -1.259804722602935e+01 + -1.259889918103342e+01 -1.259970446540313e+01 -1.260046318824908e+01 -1.260117545858230e+01 -1.260184138531425e+01 + -1.260246107725683e+01 -1.260303464312237e+01 -1.260356219152363e+01 -1.260404383097378e+01 -1.260447966988644e+01 + -1.260486981657566e+01 -1.260521437925592e+01 -1.260551346604211e+01 -1.260576718494959e+01 -1.260597564389410e+01 + -1.260613895069186e+01 -1.260625721305949e+01 -1.260633053861404e+01 -1.260635903487301e+01 -1.260634280925431e+01 + -1.260628196907629e+01 -1.260617662155772e+01 -1.260602687381783e+01 -1.260583283287624e+01 -1.260559460565302e+01 + -1.260531229896868e+01 -1.260498601954415e+01 -1.260461587400078e+01 -1.260420196886037e+01 -1.260374441054513e+01 + -1.260324330537771e+01 -1.260269875958120e+01 -1.260211087927911e+01 -1.260147977049538e+01 -1.260080553915438e+01 + -1.260008829108091e+01 -1.259932813200022e+01 -1.259852516753794e+01 -1.259767950322018e+01 -1.259679124447347e+01 + -1.259586049662475e+01 -1.259488736490141e+01 -1.259387195443126e+01 -1.259281437024255e+01 -1.259171471726395e+01 + -1.259057310032456e+01 -1.258938962415391e+01 -1.258816439338199e+01 -1.258689751253917e+01 -1.258558908605629e+01 + -1.258423921826459e+01 -1.258284801339576e+01 -1.258141557558194e+01 -1.257994200885564e+01 -1.257842741714986e+01 + -1.257687190429799e+01 -1.257527557403389e+01 -1.257363852999181e+01 -1.257196087570644e+01 -1.257024271461292e+01 + -1.256848415004682e+01 -1.256668528524411e+01 -1.256484622334120e+01 -1.256296706737496e+01 -1.256104792028266e+01 + -1.255908888490202e+01 -1.255709006397115e+01 -1.255505156012864e+01 -1.255297347591348e+01 -1.255085591376512e+01 + -1.254869897602341e+01 -1.254650276492863e+01 -1.254426738262151e+01 -1.254199293114321e+01 -1.253967951243528e+01 + -1.253732722833976e+01 -1.253493618059909e+01 -1.253250647085613e+01 -1.253003820065419e+01 -1.252753147143700e+01 + -1.252498638454872e+01 -1.252240304123394e+01 -1.251978154263770e+01 -1.251712198980544e+01 -1.251442448368303e+01 + -1.251168912511681e+01 -1.250891601485352e+01 -1.250610525354031e+01 -1.250325694172481e+01 -1.250037117985505e+01 + -1.249744806827949e+01 -1.249448770724703e+01 -1.249149019690698e+01 -1.248845563730912e+01 -1.248538412840362e+01 + -1.248227577004110e+01 -1.247913066197260e+01 -1.247594890384961e+01 -1.247273059522402e+01 -1.246947583554818e+01 + -1.246618472417486e+01 -1.246285736035725e+01 -1.245949384324899e+01 -1.245609427190411e+01 -1.245265874527712e+01 + -1.244918736222294e+01 -1.244568022149691e+01 -1.244213742175481e+01 -1.243855906155285e+01 -1.243494523934768e+01 + -1.243129605349636e+01 -1.242761160225639e+01 -1.242389198378569e+01 -1.242013729614265e+01 -1.241634763728603e+01 + -1.241252310507506e+01 -1.240866379726940e+01 -1.240476981152912e+01 -1.240084124541475e+01 -1.239687819638721e+01 + -1.239288076180789e+01 -1.238884903893857e+01 -1.238478312494150e+01 -1.238068311687935e+01 -1.237654911171519e+01 + -1.237238120631256e+01 -1.236817949743542e+01 -1.236394408174814e+01 -1.235967505581552e+01 -1.235537251610283e+01 + -1.235103655897574e+01 -1.234666728070035e+01 -1.234226477744320e+01 -1.233782914527124e+01 -1.233336048015188e+01 + -1.232885887795295e+01 -1.232432443444269e+01 -1.231975724528979e+01 -1.231515740606338e+01 -1.231052501223300e+01 + -1.230586015916862e+01 -1.230116294214064e+01 -1.229643345631993e+01 -1.229167179677772e+01 -1.228687805848573e+01 + -1.228205233631608e+01 -1.227719472504134e+01 -1.227230531933448e+01 -1.226738421376893e+01 -1.226243150281853e+01 + -1.225744728085757e+01 -1.225243164216077e+01 -1.224738468090325e+01 -1.224230649116058e+01 -1.223719716690876e+01 + -1.223205680202424e+01 -1.222688549028386e+01 -1.222168332536492e+01 -1.221645040084514e+01 -1.221118681020267e+01 + -1.220589264681609e+01 -1.220056800396442e+01 -1.219521297482709e+01 -1.218982765248399e+01 -1.218441212991541e+01 + -1.217896650000207e+01 -1.217349085552516e+01 -1.216798528916626e+01 -1.216244989350739e+01 -1.215688476103101e+01 + -1.215128998412000e+01 -1.214566565505769e+01 -1.214001186602781e+01 -1.213432870911452e+01 -1.212861627630245e+01 + -1.212287465947663e+01 -1.211710395042252e+01 -1.211130424082602e+01 -1.210547562227344e+01 -1.209961818625157e+01 + -1.209373202414756e+01 -1.208781722724905e+01 -1.208187388674408e+01 -1.207590209372113e+01 -1.206990193916910e+01 + -1.206387351397734e+01 -1.205781690893560e+01 -1.205173221473409e+01 -1.204561952196344e+01 -1.203947892111471e+01 + -1.203331050257938e+01 -1.202711435664937e+01 -1.202089057351704e+01 -1.201463924327516e+01 -1.200836045591694e+01 + -1.200205430133602e+01 -1.199572086932648e+01 -1.198936024958280e+01 -1.198297253169993e+01 -1.197655780517322e+01 + -1.197011615939848e+01 -1.196364768367191e+01 -1.195715246719016e+01 -1.195063059905033e+01 -1.194408216824992e+01 + -1.193750726368688e+01 -1.193090597415958e+01 -1.192427838836681e+01 -1.191762459490782e+01 -1.191094468228228e+01 + -1.190423873889025e+01 -1.189750685303229e+01 -1.189074911290933e+01 -1.188396560662277e+01 -1.187715642217442e+01 + -1.187032164746651e+01 -1.186346137030175e+01 -1.185657567838321e+01 -1.184966465931444e+01 -1.184272840059940e+01 + -1.183576698964250e+01 -1.182878051374855e+01 -1.182176906012282e+01 -1.181473271587098e+01 -1.180767156799916e+01 + -1.180058570341391e+01 -1.179347520892220e+01 -1.178634017123144e+01 -1.177918067694946e+01 -1.177199681258455e+01 + -1.176478866454539e+01 -1.175755631914110e+01 -1.175029986258126e+01 -1.174301938097586e+01 -1.173571496033530e+01 + -1.172838668657044e+01 -1.172103464549255e+01 -1.171365892281336e+01 -1.170625960414500e+01 -1.169883677500004e+01 + -1.169139052079148e+01 -1.168392092683276e+01 -1.167642807833772e+01 -1.166891206042068e+01 -1.166137295809633e+01 + -1.165381085627985e+01 -1.164622583978680e+01 -1.163861799333321e+01 -1.163098740153552e+01 -1.162333414891060e+01 + -1.161565831987575e+01 -1.160795999874870e+01 -1.160023926974762e+01 -1.159249621699111e+01 -1.158473092449818e+01 + -1.157694347618829e+01 -1.156913395588133e+01 -1.156130244729762e+01 -1.155344903405789e+01 -1.154557379968331e+01 + -1.153767682759551e+01 -1.152975820111650e+01 -1.152181800346877e+01 -1.151385631777521e+01 -1.150587322705914e+01 + -1.149786881424431e+01 -1.148984316215492e+01 -1.148179635351558e+01 -1.147372847095134e+01 -1.146563959698768e+01 + -1.145752981405050e+01 -1.144939920446616e+01 -1.144124785046140e+01 -1.143307583416343e+01 -1.142488323759988e+01 + -1.141667014269882e+01 -1.140843663128871e+01 -1.140018278509850e+01 -1.139190868575753e+01 -1.138361441479558e+01 + -1.137530005364285e+01 -1.136696568362999e+01 -1.135861138598808e+01 -1.135023724184860e+01 -1.134184333224349e+01 + -1.133342973810512e+01 -1.132499654026627e+01 -1.131654381946018e+01 -1.130807165632049e+01 -1.129958013138127e+01 + -1.129106932507705e+01 -1.128253931774276e+01 -1.127399018961380e+01 -1.126542202082594e+01 -1.125683489141543e+01 + -1.124822888131893e+01 -1.123960407037354e+01 -1.123096053831678e+01 -1.122229836478661e+01 -1.121361762932140e+01 + -1.120491841135999e+01 -1.119620079024160e+01 -1.118746484520592e+01 -1.117871065539305e+01 -1.116993829984354e+01 + -1.116114785749833e+01 -1.115233940719883e+01 -1.114351302768687e+01 -1.113466879760472e+01 -1.112580679549504e+01 + -1.111692709980095e+01 -1.110802978886602e+01 -1.109911494093422e+01 -1.109018263414994e+01 -1.108123294655804e+01 + -1.107226595610378e+01 -1.106328174063287e+01 -1.105428037789141e+01 -1.104526194552599e+01 -1.103622652108358e+01 + -1.102717418201162e+01 -1.101810500565793e+01 -1.100901906927082e+01 1.095742333120336e+02 1.091890922506397e+02 + 1.088047494644702e+02 1.084212070026502e+02 1.080384668830954e+02 1.076565310926508e+02 1.072754015872302e+02 + 1.068950802919558e+02 1.065155691012983e+02 1.061368698792156e+02 1.057589844592950e+02 1.053819146448920e+02 + 1.050056622092723e+02 1.046302288957519e+02 1.042556164178385e+02 1.038818264593726e+02 1.035088606746698e+02 + 1.031367206886610e+02 1.027654080970355e+02 1.023949244663824e+02 1.020252713343332e+02 1.016564502097027e+02 + 1.012884625726335e+02 1.009213098747367e+02 1.005549935392358e+02 1.001895149611079e+02 9.982487550722918e+01 + 9.946107651651391e+01 9.909811930006161e+01 9.873600514129741e+01 9.837473529611611e+01 9.801431099302570e+01 + 9.765473343328934e+01 9.729600379107079e+01 9.693812321357562e+01 9.658109282119615e+01 9.622491370765414e+01 + 9.586958694014419e+01 9.551511355947734e+01 9.516149458022504e+01 9.480873099086142e+01 9.445682375390803e+01 + 9.410577380607617e+01 9.375558205841089e+01 9.340624939643423e+01 9.305777668028868e+01 9.271016474487986e+01 + 9.236341440002082e+01 9.201752643057391e+01 9.167250159659517e+01 9.132834063347644e+01 9.098504425208868e+01 + 9.064261313892513e+01 9.030104795624305e+01 8.996034934220812e+01 8.962051791103538e+01 8.928155425313282e+01 + 8.894345893524311e+01 8.860623250058630e+01 8.826987546900149e+01 8.793438833708932e+01 8.759977157835368e+01 + 8.726602564334334e+01 8.693315095979320e+01 8.660114793276661e+01 8.627001694479561e+01 8.593975835602284e+01 + 8.561037250434198e+01 8.528185970553862e+01 8.495422025343115e+01 8.462745442001052e+01 8.430156245558098e+01 + 8.397654458889973e+01 8.365240102731744e+01 8.332913195691613e+01 8.300673754265118e+01 8.268521792848749e+01 + 8.236457323754136e+01 8.204480357221665e+01 8.172590901434540e+01 8.140788962532415e+01 8.109074544625376e+01 + 8.077447649807563e+01 8.045908278171052e+01 8.014456427819452e+01 7.983092094881752e+01 7.951815273525871e+01 + 7.920625955972369e+01 7.889524132508032e+01 7.858509791499498e+01 7.827582919406832e+01 7.796743500797002e+01 + 7.765991518357451e+01 7.735326952909556e+01 7.704749783422022e+01 7.674259987024432e+01 7.643857539020500e+01 + 7.613542412901498e+01 7.583314580359571e+01 7.553174011301053e+01 7.523120673859677e+01 7.493154534409864e+01 + 7.463275557579887e+01 7.433483706265072e+01 7.403778941640880e+01 7.374161223176058e+01 7.344630508645656e+01 + 7.315186754144133e+01 7.285829914098234e+01 7.256559941280094e+01 7.227376786820042e+01 7.198280400219586e+01 + 7.169270729364189e+01 7.140347720536150e+01 7.111511318427341e+01 7.082761466152007e+01 7.054098105259392e+01 + 7.025521175746491e+01 6.997030616070660e+01 6.968626363162187e+01 6.940308352436870e+01 6.912076517808542e+01 + 6.883930791701528e+01 6.855871105063102e+01 6.827897387375917e+01 6.800009566670299e+01 6.772207569536654e+01 + 6.744491321137666e+01 6.716860745220606e+01 6.689315764129513e+01 6.661856298817349e+01 6.634482268858113e+01 + 6.607193592458968e+01 6.579990186472207e+01 6.552871966407307e+01 6.525838846442876e+01 6.498890739438538e+01 + 6.472027556946816e+01 6.445249209225003e+01 6.418555605246864e+01 6.391946652714522e+01 6.365422258069928e+01 + 6.338982326506804e+01 6.312626761981960e+01 6.286355467227198e+01 6.260168343760468e+01 6.234065291897704e+01 + 6.208046210763982e+01 6.182110998305133e+01 6.156259551298916e+01 6.130491765366473e+01 6.104807534983478e+01 + 6.079206753491451e+01 6.053689313108822e+01 6.028255104942200e+01 6.002904018997318e+01 5.977635944190148e+01 + 5.952450768357906e+01 5.927348378269934e+01 5.902328659638665e+01 5.877391497130421e+01 5.852536774376315e+01 + 5.827764373982899e+01 5.803074177542989e+01 5.778466065646255e+01 5.753939917889900e+01 5.729495612889207e+01 + 5.705133028288137e+01 5.680852040769711e+01 5.656652526066541e+01 5.632534358971191e+01 5.608497413346522e+01 + 5.584541562136003e+01 5.560666677373945e+01 5.536872630195745e+01 5.513159290848020e+01 5.489526528698707e+01 + 5.465974212247187e+01 5.442502209134218e+01 5.419110386151996e+01 5.395798609254010e+01 5.372566743564980e+01 + 5.349414653390611e+01 5.326342202227479e+01 5.303349252772649e+01 5.280435666933466e+01 5.257601305837147e+01 + 5.234846029840359e+01 5.212169698538820e+01 5.189572170776721e+01 5.167053304656269e+01 5.144612957547002e+01 + 5.122250986095211e+01 5.099967246233197e+01 5.077761593188590e+01 5.055633881493489e+01 5.033583964993694e+01 + 5.011611696857801e+01 4.989716929586238e+01 4.967899515020360e+01 4.946159304351324e+01 4.924496148129145e+01 + 4.902909896271443e+01 4.881400398072388e+01 4.859967502211384e+01 4.838611056761913e+01 4.817330909200117e+01 + 4.796126906413538e+01 4.774998894709623e+01 4.753946719824366e+01 4.732970226930699e+01 4.712069260647073e+01 + 4.691243665045725e+01 4.670493283661155e+01 4.649817959498379e+01 4.629217535041175e+01 4.608691852260365e+01 + 4.588240752621901e+01 4.567864077095085e+01 4.547561666160539e+01 4.527333359818314e+01 4.507178997595839e+01 + 4.487098418555856e+01 4.467091461304325e+01 4.447157963998218e+01 4.427297764353383e+01 4.407510699652222e+01 + 4.387796606751465e+01 4.368155322089739e+01 4.348586681695263e+01 4.329090521193334e+01 4.309666675813910e+01 + 4.290314980399007e+01 4.271035269410203e+01 4.251827376935949e+01 4.232691136698923e+01 4.213626382063326e+01 + 4.194632946042123e+01 4.175710661304182e+01 4.156859360181524e+01 4.138078874676327e+01 4.119369036468025e+01 + 4.100729676920334e+01 4.082160627088189e+01 4.063661717724682e+01 4.045232779287926e+01 4.026873641947903e+01 + 4.008584135593230e+01 3.990364089837908e+01 3.972213334028034e+01 3.954131697248416e+01 3.936119008329229e+01 + 3.918175095852517e+01 3.900299788158772e+01 3.882492913353387e+01 3.864754299313046e+01 3.847083773692177e+01 + 3.829481163929241e+01 3.811946297253069e+01 3.794479000689075e+01 3.777079101065516e+01 3.759746425019615e+01 + 3.742480799003711e+01 3.725282049291328e+01 3.708150001983250e+01 3.691084483013415e+01 3.674085318155038e+01 + 3.657152333026306e+01 3.640285353096468e+01 3.623484203691445e+01 3.606748709999813e+01 3.590078697078377e+01 + 3.573473989857984e+01 3.556934413149093e+01 3.540459791647471e+01 3.524049949939685e+01 3.507704712508708e+01 + 3.491423903739331e+01 3.475207347923690e+01 3.459054869266600e+01 3.442966291890982e+01 3.426941439843142e+01 + 3.410980137098086e+01 3.395082207564730e+01 3.379247475091147e+01 3.363475763469679e+01 3.347766896442115e+01 + 3.332120697704713e+01 3.316536990913293e+01 3.301015599688208e+01 3.285556347619318e+01 3.270159058270914e+01 + 3.254823555186591e+01 3.239549661894120e+01 3.224337201910200e+01 3.209185998745292e+01 3.194095875908295e+01 + 3.179066656911253e+01 3.164098165273996e+01 3.149190224528781e+01 3.134342658224822e+01 3.119555289932867e+01 + 3.104827943249648e+01 3.090160441802412e+01 3.075552609253247e+01 3.061004269303567e+01 3.046515245698383e+01 + 3.032085362230664e+01 3.017714442745552e+01 3.003402311144676e+01 2.989148791390274e+01 2.974953707509420e+01 + 2.960816883598093e+01 2.946738143825326e+01 2.932717312437205e+01 2.918754213760924e+01 2.904848672208744e+01 + 2.891000512281954e+01 2.877209558574789e+01 2.863475635778283e+01 2.849798568684103e+01 2.836178182188418e+01 + 2.822614301295585e+01 2.809106751121947e+01 2.795655356899480e+01 2.782259943979526e+01 2.768920337836350e+01 + 2.755636364070825e+01 2.742407848413901e+01 2.729234616730227e+01 2.716116495021560e+01 2.703053309430324e+01 + 2.690044886242927e+01 2.677091051893296e+01 2.664191632966084e+01 2.651346456200151e+01 2.638555348491739e+01 + 2.625818136897839e+01 2.613134648639337e+01 2.600504711104281e+01 2.587928151851019e+01 2.575404798611339e+01 + 2.562934479293576e+01 2.550517021985697e+01 2.538152254958323e+01 2.525840006667763e+01 2.513580105758971e+01 + 2.501372381068511e+01 2.489216661627474e+01 2.477112776664359e+01 2.465060555607932e+01 2.453059828090060e+01 + 2.441110423948500e+01 2.429212173229668e+01 2.417364906191383e+01 2.405568453305550e+01 2.393822645260871e+01 + 2.382127312965485e+01 2.370482287549547e+01 2.358887400367887e+01 2.347342483002508e+01 2.335847367265164e+01 + 2.324401885199828e+01 2.313005869085203e+01 2.301659151437139e+01 2.290361565011063e+01 2.279112942804370e+01 + 2.267913118058794e+01 2.256761924262734e+01 2.245659195153566e+01 2.234604764719905e+01 2.223598467203908e+01 + 2.212640137103443e+01 2.201729609174319e+01 2.190866718432462e+01 2.180051300156056e+01 2.169283189887642e+01 + 2.158562223436261e+01 2.147888236879453e+01 2.137261066565379e+01 2.126680549114772e+01 2.116146521422939e+01 + 2.105658820661780e+01 2.095217284281636e+01 2.084821750013293e+01 2.074472055869795e+01 2.064168040148388e+01 + 2.053909541432278e+01 2.043696398592509e+01 2.033528450789705e+01 2.023405537475913e+01 2.013327498396221e+01 + 2.003294173590621e+01 1.993305403395577e+01 1.983361028445800e+01 1.973460889675795e+01 1.963604828321588e+01 + 1.953792685922242e+01 1.944024304321499e+01 1.934299525669275e+01 1.924618192423242e+01 1.914980147350318e+01 + 1.905385233528146e+01 1.895833294346578e+01 1.886324173509111e+01 1.876857715034283e+01 1.867433763257124e+01 + 1.858052162830484e+01 1.848712758726402e+01 1.839415396237463e+01 1.830159920978082e+01 1.820946178885801e+01 + 1.811774016222579e+01 1.802643279576019e+01 1.793553815860612e+01 1.784505472318926e+01 1.775498096522824e+01 + 1.766531536374604e+01 1.757605640108168e+01 1.748720256290115e+01 1.739875233820900e+01 1.731070421935877e+01 + 1.722305670206386e+01 1.713580828540806e+01 1.704895747185570e+01 1.696250276726197e+01 1.687644268088253e+01 + 1.679077572538347e+01 1.670550041685073e+01 1.662061527479960e+01 1.653611882218367e+01 1.645200958540387e+01 + 1.636828609431745e+01 1.628494688224632e+01 1.620199048598568e+01 1.611941544581217e+01 1.603722030549201e+01 + 1.595540361228890e+01 1.587396391697166e+01 1.579289977382209e+01 1.571220974064174e+01 1.563189237875989e+01 + 1.555194625303991e+01 1.547236993188670e+01 1.539316198725297e+01 1.531432099464603e+01 1.523584553313392e+01 + 1.515773418535218e+01 1.507998553750910e+01 1.500259817939236e+01 1.492557070437417e+01 1.484890170941746e+01 + 1.477258979508065e+01 1.469663356552347e+01 1.462103162851170e+01 1.454578259542232e+01 1.447088508124822e+01 + 1.439633770460305e+01 1.432213908772530e+01 1.424828785648329e+01 1.417478264037872e+01 1.410162207255127e+01 + 1.402880478978222e+01 1.395632943249830e+01 1.388419464477534e+01 1.381239907434186e+01 1.374094137258233e+01 + 1.366982019454020e+01 1.359903419892142e+01 1.352858204809707e+01 1.345846240810619e+01 1.338867394865859e+01 + 1.331921534313727e+01 1.325008526860091e+01 1.318128240578609e+01 1.311280543910948e+01 1.304465305666989e+01 + 1.297682395025014e+01 1.290931681531872e+01 1.284213035103173e+01 1.277526326023402e+01 1.270871424946093e+01 + 1.264248202893941e+01 1.257656531258902e+01 1.251096281802338e+01 1.244567326655073e+01 1.238069538317484e+01 + 1.231602789659573e+01 1.225166953921025e+01 1.218761904711245e+01 1.212387516009399e+01 1.206043662164444e+01 + 1.199730217895122e+01 1.193447058289977e+01 1.187194058807336e+01 1.180971095275303e+01 1.174778043891700e+01 + 1.168614781224052e+01 1.162481184209521e+01 1.156377130154850e+01 1.150302496736286e+01 1.144257161999499e+01 + 1.138241004359477e+01 1.132253902600445e+01 1.126295735875738e+01 1.120366383707674e+01 1.114465725987429e+01 + 1.108593642974891e+01 1.102750015298520e+01 1.096934723955158e+01 1.091147650309896e+01 1.085388676095861e+01 + 1.079657683414050e+01 1.073954554733112e+01 1.068279172889172e+01 1.062631421085569e+01 1.057011182892683e+01 + 1.051418342247659e+01 1.045852783454192e+01 1.040314391182260e+01 1.034803050467887e+01 1.029318646712835e+01 + 1.023861065684387e+01 1.018430193515007e+01 1.013025916702085e+01 1.007648122107627e+01 1.002296696957934e+01 + 9.969715288433109e+00 9.916725057177327e+00 9.863995158985015e+00 9.811524480659330e+00 9.759311912629858e+00 + 9.707356348949318e+00 9.655656687289792e+00 9.604211828939103e+00 9.553020678797028e+00 9.502082145371705e+00 + 9.451395140775308e+00 9.400958580720546e+00 9.350771384516388e+00 9.300832475064002e+00 9.251140778852633e+00 + 9.201695225955437e+00 9.152494750025038e+00 9.103538288289274e+00 9.054824781546845e+00 9.006353174162705e+00 + 8.958122414063579e+00 8.910131452733385e+00 8.862379245208468e+00 8.814864750073108e+00 8.767586929454426e+00 + 8.720544749017799e+00 8.673737177961815e+00 8.627163189013453e+00 8.580821758422868e+00 8.534711865958595e+00 + 8.488832494902175e+00 8.443182632043095e+00 8.397761267673651e+00 8.352567395583405e+00 8.307600013054229e+00 + 8.262858120854517e+00 8.218340723234061e+00 8.174046827918417e+00 8.129975446103403e+00 8.086125592449543e+00 + 8.042496285076346e+00 7.999086545556803e+00 7.955895398911531e+00 7.912921873602911e+00 7.870165001529585e+00 + 7.827623818020228e+00 7.785297361827971e+00 7.743184675124144e+00 7.701284803492651e+00 7.659596795923535e+00 + 7.618119704807238e+00 7.576852585928227e+00 7.535794498459135e+00 7.494944504954242e+00 7.454301671343473e+00 + 7.413865066925971e+00 7.373633764364013e+00 7.333606839676335e+00 7.293783372232051e+00 7.254162444744026e+00 + 7.214743143262609e+00 7.175524557168884e+00 7.136505779168429e+00 7.097685905284505e+00 7.059064034851724e+00 + 7.020639270509109e+00 6.982410718193710e+00 6.944377487133790e+00 6.906538689842107e+00 6.868893442109187e+00 + 6.831440862996516e+00 6.794180074829788e+00 6.757110203191956e+00 6.720230376916457e+00 6.683539728080276e+00 + 6.647037391997038e+00 6.610722507210056e+00 6.574594215485321e+00 6.538651661804496e+00 6.502893994357930e+00 + 6.467320364537604e+00 6.431929926929993e+00 6.396721839309023e+00 6.361695262628876e+00 6.326849361016903e+00 + 6.292183301766418e+00 6.257696255329497e+00 6.223387395309813e+00 6.189255898455296e+00 6.155300944650996e+00 + 6.121521716911671e+00 6.087917401374613e+00 6.054487187292215e+00 6.021230267024790e+00 5.988145836032980e+00 + 5.955233092870585e+00 5.922491239177074e+00 5.889919479670221e+00 5.857517022138617e+00 5.825283077434292e+00 + 5.793216859465198e+00 5.761317585187772e+00 5.729584474599416e+00 5.698016750731056e+00 5.666613639639483e+00 + 5.635374370400022e+00 5.604298175098720e+00 5.573384288825102e+00 5.542631949664288e+00 5.512040398689647e+00 + 5.481608879955014e+00 5.451336640487245e+00 5.421222930278409e+00 5.391267002278394e+00 5.361468112386974e+00 + 5.331825519446474e+00 5.302338485233784e+00 5.273006274452956e+00 5.243828154727328e+00 5.214803396592012e+00 + 5.185931273485972e+00 5.157211061744554e+00 5.128642040591578e+00 5.100223492131724e+00 5.071954701342786e+00 + 5.043834956067872e+00 5.015863547007735e+00 4.988039767713006e+00 4.960362914576438e+00 4.932832286825067e+00 + 4.905447186512594e+00 4.878206918511516e+00 4.851110790505328e+00 4.824158112980828e+00 4.797348199220260e+00 + 4.770680365293596e+00 4.744153930050638e+00 4.717768215113373e+00 4.691522544868047e+00 4.665416246457402e+00 + 4.639448649772945e+00 4.613619087447030e+00 4.587926894845135e+00 4.562371410058041e+00 4.536951973894000e+00 + 4.511667929870956e+00 4.486518624208724e+00 4.461503405821186e+00 4.436621626308437e+00 4.411872639949125e+00 + 4.387255803692453e+00 4.362770477150450e+00 4.338416022590225e+00 4.314191804926077e+00 4.290097191711755e+00 + 4.266131553132637e+00 4.242294261997862e+00 4.218584693732665e+00 4.195002226370486e+00 4.171546240545223e+00 + 4.148216119483425e+00 4.125011248996462e+00 4.101931017472926e+00 4.078974815870523e+00 4.056142037708712e+00 + 4.033432079060574e+00 4.010844338545254e+00 3.988378217320130e+00 3.966033119073097e+00 3.943808450014725e+00 + 3.921703618870680e+00 3.899718036873764e+00 3.877851117756436e+00 3.856102277742808e+00 3.834470935541209e+00 + 3.812956512336161e+00 3.791558431781011e+00 3.770276119989899e+00 3.749109005530341e+00 3.728056519415314e+00 + 3.707118095095711e+00 3.686293168452660e+00 3.665581177789810e+00 3.644981563825650e+00 3.624493769685945e+00 + 3.604117240896058e+00 3.583851425373289e+00 3.563695773419241e+00 3.543649737712268e+00 3.523712773299823e+00 + 3.503884337590815e+00 3.484163890348146e+00 3.464550893681012e+00 3.445044812037336e+00 3.425645112196334e+00 + 3.406351263260748e+00 3.387162736649552e+00 3.368079006090228e+00 3.349099547611309e+00 3.330223839534908e+00 + 3.311451362469163e+00 3.292781599300740e+00 3.274214035187451e+00 3.255748157550641e+00 3.237383456067848e+00 + 3.219119422665309e+00 3.200955551510494e+00 3.182891339004800e+00 3.164926283775986e+00 3.147059886670878e+00 + 3.129291650747972e+00 3.111621081270026e+00 3.094047685696694e+00 3.076570973677211e+00 3.059190457043020e+00 + 3.041905649800503e+00 3.024716068123579e+00 3.007621230346497e+00 2.990620656956472e+00 2.973713870586440e+00 + 2.956900396007833e+00 2.940179760123256e+00 2.923551491959345e+00 2.907015122659452e+00 2.890570185476492e+00 + 2.874216215765744e+00 2.857952750977653e+00 2.841779330650699e+00 2.825695496404166e+00 2.809700791931166e+00 + 2.793794762991262e+00 2.777976957403630e+00 2.762246925039747e+00 2.746604217816465e+00 2.731048389688822e+00 + 2.715578996643088e+00 2.700195596689669e+00 2.684897749856101e+00 2.669685018180058e+00 2.654556965702300e+00 + 2.639513158459792e+00 2.624553164478659e+00 2.609676553767267e+00 2.594882898309313e+00 2.580171772056853e+00 + 2.565542750923481e+00 2.550995412777325e+00 2.536529337434337e+00 2.522144106651267e+00 2.507839304118976e+00 + 2.493614515455497e+00 2.479469328199256e+00 2.465403331802387e+00 2.451416117623762e+00 2.437507278922398e+00 + 2.423676410850646e+00 2.409923110447455e+00 2.396246976631691e+00 2.382647610195405e+00 2.369124613797204e+00 + 2.355677591955569e+00 2.342306151042157e+00 2.329009899275257e+00 2.315788446713120e+00 2.302641405247392e+00 + 2.289568388596529e+00 2.276569012299196e+00 2.263642893707789e+00 2.250789651981874e+00 2.238008908081633e+00 + 2.225300284761460e+00 2.212663406563389e+00 2.200097899810677e+00 2.187603392601391e+00 2.175179514801910e+00 + 2.162825898040590e+00 2.150542175701276e+00 2.138327982917036e+00 2.126182956563733e+00 2.114106735253672e+00 + 2.102098959329351e+00 2.090159270857070e+00 2.078287313620708e+00 2.066482733115378e+00 2.054745176541255e+00 + 2.043074292797288e+00 2.031469732474990e+00 2.019931147852245e+00 2.008458192887110e+00 1.997050523211616e+00 + 1.985707796125752e+00 1.974429670591118e+00 1.963215807225068e+00 1.952065868294312e+00 1.940979517709152e+00 + 1.929956421017174e+00 1.918996245397357e+00 1.908098659653924e+00 1.897263334210502e+00 1.886489941103887e+00 + 1.875778153978382e+00 1.865127648079524e+00 1.854538100248402e+00 1.844009188915572e+00 1.833540594095251e+00 + 1.823131997379413e+00 1.812783081931848e+00 1.802493532482461e+00 1.792263035321314e+00 1.782091278292824e+00 + 1.771977950790108e+00 1.761922743749008e+00 1.751925349642477e+00 1.741985462474776e+00 1.732102777775783e+00 + 1.722276992595250e+00 1.712507805497174e+00 1.702794916554071e+00 1.693138027341377e+00 1.683536840931742e+00 + 1.673991061889518e+00 1.664500396265095e+00 1.655064551589301e+00 1.645683236867940e+00 1.636356162576151e+00 + 1.627083040652930e+00 1.617863584495598e+00 1.608697508954374e+00 1.599584530326805e+00 1.590524366352430e+00 + 1.581516736207239e+00 1.572561360498335e+00 1.563657961258498e+00 1.554806261940791e+00 1.546005987413253e+00 + 1.537256863953506e+00 1.528558619243442e+00 1.519910982363931e+00 1.511313683789489e+00 1.502766455383060e+00 + 1.494269030390716e+00 1.485821143436466e+00 1.477422530516995e+00 1.469072928996472e+00 1.460772077601374e+00 + 1.452519716415337e+00 1.444315586874001e+00 1.436159431759841e+00 1.428050995197124e+00 1.419990022646751e+00 + 1.411976260901214e+00 1.404009458079575e+00 1.396089363622327e+00 1.388215728286465e+00 1.380388304140437e+00 + 1.372606844559193e+00 1.364871104219133e+00 1.357180839093267e+00 1.349535806446210e+00 1.341935764829282e+00 + 1.334380474075582e+00 1.326869695295191e+00 1.319403190870247e+00 1.311980724450058e+00 1.304602060946366e+00 + 1.297266966528488e+00 1.289975208618525e+00 1.282726555886614e+00 1.275520778246108e+00 1.268357646848902e+00 + 1.261236934080685e+00 1.254158413556244e+00 1.247121860114752e+00 1.240127049815109e+00 1.233173759931322e+00 + 1.226261768947806e+00 1.219390856554827e+00 1.212560803643888e+00 1.205771392303081e+00 1.199022405812630e+00 + 1.192313628640254e+00 1.185644764421558e+00 1.178990351639750e+00 1.172330399892134e+00 1.165665076185977e+00 + 1.158994547886723e+00 1.152318982717962e+00 1.145638548761464e+00 1.138953414457149e+00 1.132263748603113e+00 + 1.125569720355613e+00 1.118871499229052e+00 1.112169255096024e+00 1.105463158187270e+00 1.098753379091687e+00 + 1.092040088756353e+00 1.085323458486501e+00 1.078603659945532e+00 1.071880865154992e+00 1.065155246494617e+00 + 1.058426976702292e+00 1.051696228874060e+00 1.044963176464139e+00 1.038227993284906e+00 1.031490853506903e+00 + 1.024751931658828e+00 1.018011402627552e+00 1.011269441658102e+00 1.004526224353673e+00 9.977819266756256e-01 + 9.910367249434791e-01 9.842907958349041e-01 9.775443163857631e-01 9.707974639900548e-01 9.640504163999678e-01 + 9.573033517258169e-01 9.505564484361176e-01 9.438098853575320e-01 9.370638416748861e-01 9.303184969311648e-01 + 9.235740310275239e-01 9.168306242232802e-01 9.100884571359185e-01 9.033477107410752e-01 8.966085663725580e-01 + 8.898712057223411e-01 8.831358108405598e-01 8.764025641354974e-01 8.696716483736328e-01 8.629432466795720e-01 + 8.562175425361152e-01 8.494947197842023e-01 8.427749626229529e-01 8.360584556096414e-01 8.293453836597109e-01 + 8.226359320467608e-01 8.159302864025564e-01 8.092286327170322e-01 8.025311573382813e-01 7.958380469725578e-01 + 7.891494886842815e-01 7.824656698960382e-01 7.757867783885769e-01 7.691130023007959e-01 7.624445301297847e-01 + 7.557815507307692e-01 7.491242533171508e-01 7.424728274605000e-01 7.358274630905332e-01 7.291883504951490e-01 + 7.225556803203927e-01 7.159296435704938e-01 7.093104316078179e-01 7.026982361529110e-01 6.960932492844861e-01 + 6.894956634394138e-01 6.829056714127182e-01 6.763234663576075e-01 6.697492417854324e-01 6.631831915657271e-01 + 6.566255099261625e-01 6.500763914526022e-01 6.435360310890530e-01 6.370046241376988e-01 6.304823662588692e-01 + 6.239694534710725e-01 6.174660821509748e-01 6.109724490334143e-01 6.044887512113705e-01 5.980151861360069e-01 + 5.915519516166453e-01 5.850992458207689e-01 5.786572672740203e-01 5.722262148602113e-01 5.658062878213155e-01 + 5.593976857574735e-01 5.530006086269864e-01 5.466152567463054e-01 5.402418307900632e-01 5.338805317910564e-01 + 5.275315611402337e-01 5.211951205867096e-01 5.148714122377686e-01 5.085606385588554e-01 5.022630023735698e-01 + 4.959787068636863e-01 4.897079555691317e-01 4.834509523880138e-01 4.772079015765874e-01 4.709790077492753e-01 + 4.647644758786674e-01 4.585645112955074e-01 4.523793196887113e-01 4.462091071053609e-01 4.400540799506882e-01 + 4.339144449881029e-01 4.277904093391761e-01 4.216821804836242e-01 4.155899662593477e-01 4.095139748624052e-01 + 4.034544148470172e-01 3.974114951255636e-01 3.913854249685925e-01 3.853764140048108e-01 3.793846722211013e-01 + 3.734104099624901e-01 3.674538379321838e-01 3.615151671915433e-01 3.555946091600967e-01 3.496923756155342e-01 + 3.438086786937040e-01 3.379437308886334e-01 3.320977450524912e-01 3.262709343956299e-01 3.204635124865509e-01 + 3.146756932519229e-01 3.089076909765859e-01 3.031597203035364e-01 2.974319962339260e-01 2.917247341270824e-01 + 2.860381497004926e-01 2.803724590298156e-01 2.747278785488482e-01 2.691046250495761e-01 2.635029156821394e-01 + 2.579229679548448e-01 2.523649997341523e-01 2.468292292446944e-01 2.413158750692667e-01 2.358251561488219e-01 + 2.303572917824847e-01 2.249125016275375e-01 2.194910056994242e-01 2.140930243717585e-01 2.087187783763119e-01 + 2.033684888030171e-01 1.980423770999804e-01 1.927406650734665e-01 1.874635748878940e-01 1.822113290658620e-01 + 1.769841504881194e-01 1.717822623935837e-01 1.666058883793370e-01 1.614552524006169e-01 1.563305787708337e-01 + 1.512320921615583e-01 1.461600176025274e-01 1.411145804816291e-01 1.360960065449308e-01 1.311045218966515e-01 + 1.261403529991834e-01 1.212037266730722e-01 1.162948700970307e-01 1.114140108079402e-01 1.065613767008372e-01 + 1.017371960289264e-01 9.694169740357296e-02 9.217510979430731e-02 8.743766252882926e-02 8.272958529298498e-02 + 7.805110813080124e-02 7.340246144445955e-02 6.878387599431000e-02 6.419557574865301e-02 5.963759094957572e-02 + 5.510973963835383e-02 5.061182861803573e-02 4.614366420134985e-02 4.170505221068580e-02 3.729579797811351e-02 + 3.291570634538348e-02 2.856458166389801e-02 2.424222779475722e-02 1.994844810872277e-02 1.568304548623211e-02 + 1.144582231739328e-02 7.236580501990380e-03 3.055121449483738e-03 -1.098753920994699e-03 -5.225245180644838e-03 + -9.324552390984902e-03 -1.339687610386349e-02 -1.744241736145168e-02 -2.146137769625513e-02 -2.545395913110202e-02 + -2.942036417914124e-02 -3.336079584385580e-02 -3.727545761905192e-02 -4.116455348886275e-02 -4.502828792774839e-02 + -4.886686590049362e-02 -5.268049286221068e-02 -5.646937475834091e-02 -6.023371802464499e-02 -6.397372958722036e-02 + -6.768961686247778e-02 -7.138158775716837e-02 -7.504985066836595e-02 -7.869461448345558e-02 -8.231608858017145e-02 + -8.591448282656117e-02 -8.949000758099987e-02 -9.304287369219175e-02 -9.657329249916882e-02 -1.000814758312822e-01 + -1.035676360082217e-01 -1.070319858399865e-01 -1.104747386269179e-01 -1.138961081596785e-01 -1.172963087192557e-01 + -1.206755550769631e-01 -1.240340624944424e-01 -1.273720467236591e-01 -1.306897240069109e-01 -1.339873110768158e-01 + -1.372650251563196e-01 -1.405230839586962e-01 -1.437617056875474e-01 -1.469811090368015e-01 -1.501815131907033e-01 + -1.533631378238363e-01 -1.565262031011094e-01 -1.596709296777471e-01 -1.627975386993119e-01 -1.659062518016920e-01 + -1.689972911110939e-01 -1.720708792440532e-01 -1.751272393074391e-01 -1.781665948984391e-01 -1.811891701045714e-01 + -1.841951895036779e-01 -1.871848781639314e-01 -1.901584616438275e-01 -1.931161659921838e-01 -1.960582177481569e-01 + -1.989848439412171e-01 -2.018962720911678e-01 -2.047927302081405e-01 -2.076744467925835e-01 -2.105416508352842e-01 + -2.133945718173472e-01 -2.162334397102061e-01 -2.190584849756266e-01 -2.218699385656908e-01 -2.246680319228120e-01 + -2.274529969797319e-01 -2.302250661595188e-01 -2.329844723755599e-01 -2.357314490315819e-01 -2.384662300216220e-01 + -2.411890497300586e-01 -2.439001430315905e-01 -2.465997452912398e-01 -2.492880923643536e-01 -2.519654101942959e-01 + -2.546318052497372e-01 -2.572873073104149e-01 -2.599319449888680e-01 -2.625657469889075e-01 -2.651887421056225e-01 + -2.678009592253646e-01 -2.704024273257758e-01 -2.729931754757585e-01 -2.755732328354941e-01 -2.781426286564347e-01 + -2.807013922813106e-01 -2.832495531441233e-01 -2.857871407701484e-01 -2.883141847759324e-01 -2.908307148693000e-01 + -2.933367608493480e-01 -2.958323526064447e-01 -2.983175201222346e-01 -3.007922934696335e-01 -3.032567028128363e-01 + -3.057107784073052e-01 -3.081545505997775e-01 -3.105880498282647e-01 -3.130113066220582e-01 -3.154243516017117e-01 + -3.178272154790621e-01 -3.202199290572119e-01 -3.226025232305456e-01 -3.249750289847160e-01 -3.273374773966475e-01 + -3.296898996345499e-01 -3.320323269578884e-01 -3.343647907174215e-01 -3.366873223551647e-01 -3.389999534044191e-01 + -3.413027154897497e-01 -3.435956403270046e-01 -3.458787597233008e-01 -3.481521055770276e-01 -3.504157098778479e-01 + -3.526696047067033e-01 -3.549138222358042e-01 -3.571483947286386e-01 -3.593733545399630e-01 -3.615887341158137e-01 + -3.637945659934934e-01 -3.659908828015853e-01 -3.681777172599418e-01 -3.703551021796942e-01 -3.725230704632418e-01 + -3.746816551042570e-01 -3.768308891876943e-01 -3.789708058897726e-01 -3.811014384779884e-01 -3.832228203111127e-01 + -3.853349848391901e-01 -3.874379656035336e-01 -3.895317962367406e-01 -3.916165104626694e-01 -3.936921420964613e-01 + -3.957587250445291e-01 -3.978162933045590e-01 -3.998648809655071e-01 -4.019045222076102e-01 -4.039352513023698e-01 + -4.059571026125726e-01 -4.079701105922696e-01 -4.099743097867899e-01 -4.119697348327328e-01 -4.139564204579759e-01 + -4.159344014816657e-01 -4.179037128142267e-01 -4.198643894573553e-01 -4.218164665040198e-01 -4.237599791384667e-01 + -4.256949626362073e-01 -4.276214523640373e-01 -4.295394837800215e-01 -4.314490924334961e-01 -4.333503139650758e-01 + -4.352431841066424e-01 -4.371277386813615e-01 -4.390040136036591e-01 -4.408720448792462e-01 -4.427318686051023e-01 + -4.445835209694806e-01 -4.464270382519082e-01 -4.482624568231898e-01 -4.500898131453974e-01 -4.519091437718829e-01 + -4.537204798147606e-01 -4.555238198492920e-01 -4.573191505590515e-01 -4.591064586095825e-01 -4.608857306658481e-01 + -4.626569533922454e-01 -4.644201134526012e-01 -4.661751975101729e-01 -4.679221922276425e-01 -4.696610842671291e-01 + -4.713918602901750e-01 -4.731145069577533e-01 -4.748290109302707e-01 -4.765353588675560e-01 -4.782335374288742e-01 + -4.799235332729166e-01 -4.816053330578074e-01 -4.832789234410945e-01 -4.849442910797598e-01 -4.866014226302123e-01 + -4.882503047482938e-01 -4.898909240892701e-01 -4.915232673078448e-01 -4.931473210581402e-01 -4.947630719937180e-01 + -4.963705067675664e-01 -4.979696120320962e-01 -4.995603744391628e-01 -5.011427806400350e-01 -5.027168172854194e-01 + -5.042824710254519e-01 -5.058397285096952e-01 -5.073885763871459e-01 -5.089290013062260e-01 -5.104609899147875e-01 + -5.119845288601143e-01 -5.134996047889188e-01 -5.150062043473380e-01 -5.165043141809486e-01 -5.179939209347486e-01 + -5.194750112531676e-01 -5.209475717800650e-01 -5.224115891587316e-01 -5.238670500318844e-01 -5.253139410416705e-01 + -5.267522488296713e-01 -5.281819600368896e-01 -5.296030613037657e-01 -5.310155392701628e-01 -5.324193805753784e-01 + -5.338145718581361e-01 -5.352010997565921e-01 -5.365789509083312e-01 -5.379481119503635e-01 -5.393085695191379e-01 + -5.406603102505220e-01 -5.420033207798205e-01 -5.433375877417659e-01 -5.446630977705182e-01 -5.459798374996671e-01 + -5.472877935622348e-01 -5.485869525906728e-01 -5.498773012168563e-01 -5.511588260720980e-01 -5.524315137871336e-01 + -5.536953509921333e-01 -5.549503243166927e-01 -5.561964203898389e-01 -5.574336258400313e-01 -5.586619272951509e-01 + -5.598813113825183e-01 -5.610917647288757e-01 -5.622932739603984e-01 -5.634858257026908e-01 -5.646694065807859e-01 + -5.658440032191480e-01 -5.670096022416672e-01 -5.681661902716679e-01 -5.693137539319010e-01 -5.704522798445497e-01 + -5.715817546312214e-01 -5.727021649129574e-01 -5.738134973102289e-01 -5.749157384429343e-01 -5.760088749304029e-01 + -5.770928933913911e-01 -5.781677804440886e-01 -5.792335227061124e-01 -5.802901067945099e-01 -5.813375193257541e-01 + -5.823757469223445e-01 -5.834047955512451e-01 -5.844247330966705e-01 -5.854356399335282e-01 -5.864375966009163e-01 + -5.874306838021331e-01 -5.884149824046725e-01 -5.893905734402166e-01 -5.903575381046516e-01 -5.913159577580464e-01 + -5.922659139246776e-01 -5.932074882930060e-01 -5.941407627156944e-01 -5.950658192095977e-01 -5.959827399557637e-01 + -5.968916072994362e-01 -5.977925037500572e-01 -5.986855119812589e-01 -5.995707148308718e-01 -6.004481953009166e-01 + -6.013180365576126e-01 -6.021803219313749e-01 -6.030351349168105e-01 -6.038825591727214e-01 -6.047226785221047e-01 + -6.055555769521532e-01 -6.063813386142549e-01 -6.072000478239908e-01 -6.080117890611353e-01 -6.088166469696649e-01 + -6.096147063577408e-01 -6.104060521977289e-01 -6.111907696261795e-01 -6.119689439438470e-01 -6.127406606156753e-01 + -6.135060052708066e-01 -6.142650637025721e-01 -6.150179218685041e-01 -6.157646658903273e-01 -6.165053820539590e-01 + -6.172401568095165e-01 -6.179690767713046e-01 -6.186922287178311e-01 -6.194096995917915e-01 -6.201215765000805e-01 + -6.208279467137836e-01 -6.215288976681870e-01 -6.222245169627649e-01 -6.229148923611945e-01 -6.236001117913393e-01 + -6.242802633452607e-01 -6.249554352792182e-01 -6.256257160136589e-01 -6.262911941332352e-01 -6.269519583867845e-01 + -6.276080976873425e-01 -6.282597011121409e-01 -6.289068579026028e-01 -6.295496574643525e-01 -6.301881893672028e-01 + -6.308225433451639e-01 -6.314528092964384e-01 -6.320790772834304e-01 -6.327014375327299e-01 -6.333199804351248e-01 + -6.339347965456040e-01 -6.345459765833412e-01 -6.351536114317133e-01 -6.357577921382875e-01 -6.363586099148234e-01 + -6.369561561372827e-01 -6.375505223458158e-01 -6.381418002447719e-01 -6.387300817026894e-01 -6.393154587523098e-01 + -6.398980235905608e-01 -6.404778685785724e-01 -6.410550862416599e-01 -6.416297692693458e-01 -6.422020105153373e-01 + -6.427719029975411e-01 -6.433395398980565e-01 -6.439050145631807e-01 -6.444684205034020e-01 -6.450298513934040e-01 + -6.455894010720687e-01 -6.461471635424699e-01 -6.467032329718739e-01 -6.472577036917475e-01 -6.478106701977483e-01 + -6.483622271497308e-01 -6.489124689263682e-01 -6.494614485843248e-01 -6.500091446157383e-01 -6.505555276741493e-01 + -6.511005683667010e-01 -6.516442372541374e-01 -6.521865048508032e-01 -6.527273416246404e-01 -6.532667179971965e-01 + -6.538046043436144e-01 -6.543409709926411e-01 -6.548757882266224e-01 -6.554090262815059e-01 -6.559406553468384e-01 + -6.564706455657674e-01 -6.569989670350416e-01 -6.575255898050102e-01 -6.580504838796198e-01 -6.585736192164239e-01 + -6.590949657265709e-01 -6.596144932748126e-01 -6.601321716794977e-01 -6.606479707125806e-01 -6.611618600996129e-01 + -6.616738095197463e-01 -6.621837886057342e-01 -6.626917669439322e-01 -6.631977140742914e-01 -6.637015994903700e-01 + -6.642033926393200e-01 -6.647030629218996e-01 -6.652005796924637e-01 -6.656959122589683e-01 -6.661890298829721e-01 + -6.666799017796324e-01 -6.671684971177059e-01 -6.676547850195518e-01 -6.681387345611322e-01 -6.686203147720026e-01 + -6.690994946353258e-01 -6.695762430878612e-01 -6.700505290199712e-01 -6.705223212756167e-01 -6.709915886523573e-01 + -6.714582999013593e-01 -6.719224237273841e-01 -6.723839287887963e-01 -6.728427836975593e-01 -6.732989570192368e-01 + -6.737524172729955e-01 -6.742031329315991e-01 -6.746510724214173e-01 -6.750962041224116e-01 -6.755384963681527e-01 + -6.759779174458065e-01 -6.764144355961427e-01 -6.768480190135280e-01 -6.772786358459313e-01 -6.777062541949238e-01 + -6.781308421156768e-01 -6.785523676169557e-01 -6.789707986611350e-01 -6.793861031641869e-01 -6.797982489956810e-01 + -6.802072039787928e-01 -6.806129358902915e-01 -6.810154124605543e-01 -6.814146013735531e-01 -6.818104702668614e-01 + -6.822029867316560e-01 -6.825921183127129e-01 -6.829778325084067e-01 -6.833600967707130e-01 -6.837388785052096e-01 + -6.841141450710753e-01 -6.844858637810877e-01 -6.848540019016242e-01 -6.852185266526625e-01 -6.855794052077844e-01 + -6.859366046941693e-01 -6.862900921925965e-01 -6.866398347374477e-01 -6.869857993167028e-01 -6.873279528719466e-01 + -6.876662622983601e-01 -6.880006944447252e-01 -6.883312161134265e-01 -6.886577940604462e-01 -6.889803949953719e-01 + -6.892989855813845e-01 -6.896135324352712e-01 -6.899240028387130e-01 -6.902303819477683e-01 -6.905326737376372e-01 + -6.908308830922284e-01 -6.911250149115886e-01 -6.914150741119037e-01 -6.917010656255024e-01 -6.919829944008472e-01 + -6.922608654025442e-01 -6.925346836113381e-01 -6.928044540241121e-01 -6.930701816538887e-01 -6.933318715298318e-01 + -6.935895286972420e-01 -6.938431582175605e-01 -6.940927651683684e-01 -6.943383546433857e-01 -6.945799317524716e-01 + -6.948175016216248e-01 -6.950510693929839e-01 -6.952806402248272e-01 -6.955062192915704e-01 -6.957278117837701e-01 + -6.959454229081232e-01 -6.961590578874640e-01 -6.963687219607667e-01 -6.965744203831468e-01 -6.967761584258561e-01 + -6.969739413762889e-01 -6.971677745379762e-01 -6.973576632305908e-01 -6.975436127899419e-01 -6.977256285679828e-01 + -6.979037159328020e-01 -6.980778802686266e-01 -6.982481269758282e-01 -6.984144614709118e-01 -6.985768891865279e-01 + -6.987354155714625e-01 -6.988900460906402e-01 -6.990407862251279e-01 -6.991876414721307e-01 -6.993306173449924e-01 + -6.994697193731968e-01 -6.996049531023686e-01 -6.997363240942686e-01 -6.998638379267991e-01 -6.999875001940020e-01 + -7.001073165060578e-01 -7.002232924892878e-01 -7.003354337861495e-01 -7.004437460552433e-01 -7.005482349713070e-01 + -7.006489062252197e-01 -7.007457655239951e-01 -7.008388185907949e-01 -7.009280711649124e-01 -7.010135290017818e-01 + -7.010951978729800e-01 -7.011730835662194e-01 -7.012471918853559e-01 -7.013175286503797e-01 -7.013840996974253e-01 + -7.014469108787638e-01 -7.015059680628057e-01 -7.015612771341031e-01 -7.016128439933442e-01 -7.016606745573603e-01 + -7.017047747591189e-01 -7.017451505477279e-01 -7.017818078884350e-01 -7.018147527626287e-01 -7.018439911678338e-01 + -7.018695291177169e-01 -7.018913726420826e-01 -7.019095277868751e-01 -7.019240006141793e-01 -7.019347972022176e-01 + -7.019419236453552e-01 -7.019453860540911e-01 -7.019451905550682e-01 -7.019413432910677e-01 -7.019338504210091e-01 + -7.019227181199530e-01 -7.019079525790984e-01 -7.018895600057832e-01 -7.018675466234870e-01 -7.018419186718257e-01 + -7.018126824065565e-01 -7.017798440995754e-01 -7.017434100389182e-01 -7.017033854997849e-01 -7.016597645302971e-01 + -7.016125342500635e-01 -7.015616816631596e-01 -7.015071937594616e-01 -7.014490575146457e-01 -7.013872598901904e-01 + -7.013217878333770e-01 -7.012526282772851e-01 -7.011797681407969e-01 -7.011031943285972e-01 -7.010228937311708e-01 + -7.009388532248028e-01 -7.008510596715816e-01 -7.007594999193965e-01 -7.006641608019365e-01 -7.005650291386941e-01 + -7.004620917349607e-01 -7.003553353818325e-01 -7.002447468562033e-01 -7.001303129207704e-01 -7.000120203240311e-01 + -6.998898558002854e-01 -6.997638060696334e-01 -6.996338578379767e-01 -6.994999977970194e-01 -6.993622126242656e-01 + -6.992204889830200e-01 -6.990748135223908e-01 -6.989251728772863e-01 -6.987715536684157e-01 -6.986139425022897e-01 + -6.984523259712216e-01 -6.982866906533242e-01 -6.981170231125128e-01 -6.979433098985026e-01 -6.977655375468121e-01 + -6.975836925787603e-01 -6.973977615014658e-01 -6.972077308078509e-01 -6.970135869766381e-01 -6.968153164723517e-01 + -6.966129057453172e-01 -6.964063412316589e-01 -6.961956093533076e-01 -6.959806965179908e-01 -6.957615891192395e-01 + -6.955382735363851e-01 -6.953107361345612e-01 -6.950789632647010e-01 -6.948429412635411e-01 -6.946026564536184e-01 + -6.943580951432718e-01 -6.941092436266389e-01 -6.938560881836621e-01 -6.935986150800827e-01 -6.933368105674458e-01 + -6.930706608830939e-01 -6.928001522501742e-01 -6.925252708776334e-01 -6.922460029602220e-01 -6.919623346784873e-01 + -6.916742521987818e-01 -6.913817416732587e-01 -6.910847892398710e-01 -6.907833810223739e-01 -6.904775031303247e-01 + -6.901671416590796e-01 -6.898522826897985e-01 -6.895329122894415e-01 -6.892090165107716e-01 -6.888805813923492e-01 + -6.885475929585410e-01 -6.882100372195102e-01 -6.878679001712260e-01 -6.875211677954548e-01 -6.871698260597670e-01 + -6.868138609175327e-01 -6.864532583079246e-01 -6.860880041559145e-01 -6.857180843722795e-01 -6.853434848535938e-01 + -6.849641914822348e-01 -6.845801901263810e-01 -6.841914666400134e-01 -6.837980068629107e-01 -6.833997966206585e-01 + -6.829968217246379e-01 -6.825890679720363e-01 -6.821765211458364e-01 -6.817591670148301e-01 -6.813369913336030e-01 + -6.809099798425464e-01 -6.804781182678532e-01 -6.800413923215153e-01 -6.795997877013248e-01 -6.791532900908800e-01 + -6.787018851595766e-01 -6.782455585626130e-01 -6.777842959409880e-01 -6.773180829215009e-01 -6.768469051167566e-01 + -6.763707481251567e-01 -6.758895975309049e-01 -6.754034389040080e-01 -6.749122578002735e-01 -6.744160397613090e-01 + -6.739147703145253e-01 -6.734084349731322e-01 -6.728970192361421e-01 -6.723805085883696e-01 -6.718588885004291e-01 + -6.713321444287366e-01 -6.708002618155093e-01 -6.702632260887672e-01 -6.697210226623294e-01 -6.691736369358174e-01 + -6.686210542946547e-01 -6.680632601100641e-01 -6.675002397390722e-01 -6.669319785245045e-01 -6.663584617949896e-01 + -6.657796748649568e-01 -6.651956030346358e-01 -6.646062315900594e-01 -6.640115458030599e-01 -6.634115309312728e-01 + -6.628061722181323e-01 -6.621954548928766e-01 -6.615793641705435e-01 -6.609578852519731e-01 -6.603310033238052e-01 + -6.596987035584827e-01 -6.590609711142495e-01 -6.584177911351499e-01 -6.577691487510308e-01 -6.571150290775386e-01 + -6.564554172161221e-01 -6.557902982540311e-01 -6.551196572643182e-01 -6.544434793058350e-01 -6.537617494232353e-01 + -6.530744526469753e-01 -6.523815739933100e-01 -6.516830984642986e-01 -6.509790110477993e-01 -6.502692967174731e-01 + -6.495539404327810e-01 -6.488329271389865e-01 -6.481062417671540e-01 -6.473738692341490e-01 -6.466357944426386e-01 + -6.458920022810900e-01 -6.451424776237736e-01 -6.443872053307601e-01 -6.436261702479216e-01 -6.428593572069313e-01 + -6.420867510252639e-01 -6.413083365061960e-01 -6.405240984388038e-01 -6.397340215979669e-01 -6.389380907443646e-01 + -6.381362906244783e-01 -6.373286059705908e-01 -6.365150215007859e-01 -6.356955219189476e-01 -6.348700919147630e-01 + -6.340387161637204e-01 -6.332013793271084e-01 -6.323580660520165e-01 -6.315087609713372e-01 -6.306534487037636e-01 + -6.297921138537887e-01 -6.289247410117088e-01 -6.280513147536213e-01 -6.271718196414233e-01 -6.262862402228142e-01 + -6.253945610312949e-01 -6.244967665861679e-01 -6.235928413925359e-01 -6.226827699413039e-01 -6.217665367155729e-01 + -6.208441375034160e-01 -6.199156027357733e-01 -6.189809695006110e-01 -6.180402749488378e-01 -6.170935562943042e-01 + -6.161408508138034e-01 -6.151821958470703e-01 -6.142176287967820e-01 -6.132471871285575e-01 -6.122709083709591e-01 + -6.112888301154906e-01 -6.103009900165971e-01 -6.093074257916666e-01 -6.083081752210301e-01 -6.073032761479595e-01 + -6.062927664786690e-01 -6.052766841823158e-01 -6.042550672909993e-01 -6.032279538997601e-01 -6.021953821665817e-01 + -6.011573903123885e-01 -6.001140166210489e-01 -5.990652994393731e-01 -5.980112771771128e-01 -5.969519883069611e-01 + -5.958874713645556e-01 -5.948177649484745e-01 -5.937429077202382e-01 -5.926629384043087e-01 -5.915778957880926e-01 + -5.904878187219365e-01 -5.893927461191291e-01 -5.882927169559019e-01 -5.871877702714293e-01 -5.860779451678273e-01 + -5.849632808101529e-01 -5.838438164264069e-01 -5.827195913075317e-01 -5.815906448074122e-01 -5.804570163428739e-01 + -5.793187453936868e-01 -5.781758715025614e-01 -5.770284342751509e-01 -5.758764733800518e-01 -5.747200285488004e-01 + -5.735591395758767e-01 -5.723938463187022e-01 -5.712241886976424e-01 -5.700502066960027e-01 -5.688719403600314e-01 + -5.676894297989186e-01 -5.665027151847987e-01 -5.653118367527454e-01 -5.641168348007759e-01 -5.629177496898495e-01 + -5.617146218438691e-01 -5.605074917496762e-01 -5.592963999570575e-01 -5.580813870787410e-01 -5.568624937903972e-01 + -5.556397608306384e-01 -5.544132290010181e-01 -5.531829391660344e-01 -5.519489322531255e-01 -5.507112492526723e-01 + -5.494699312179977e-01 -5.482250192653676e-01 -5.469765545739900e-01 -5.457245783860135e-01 -5.444691320065307e-01 + -5.432102568035752e-01 -5.419479942081239e-01 -5.406823857140945e-01 -5.394134728783482e-01 -5.381412973206875e-01 + -5.368659007238572e-01 -5.355873248335447e-01 -5.343056114583787e-01 -5.330208024699312e-01 -5.317329398027154e-01 + -5.304420654541877e-01 -5.291482214847454e-01 -5.278514500177287e-01 -5.265517932394201e-01 -5.252492933990449e-01 + -5.239439928087685e-01 -5.226359338436997e-01 -5.213251589418901e-01 -5.200117106043335e-01 -5.186956313949634e-01 + -5.173769639406588e-01 -5.160557509312390e-01 -5.147320351194659e-01 -5.134058593210434e-01 -5.120772664146175e-01 + -5.107462993417771e-01 -5.094130011070527e-01 -5.080774147779163e-01 -5.067395834847835e-01 -5.053995504210110e-01 + -5.040573588428990e-01 -5.027130520696871e-01 -5.013666734835600e-01 -5.000182665296438e-01 -4.986678747160062e-01 + -4.973155416136568e-01 -4.959613108565477e-01 -4.946052261415742e-01 -4.932473312285729e-01 -4.918876699403218e-01 + -4.905262861625424e-01 -4.891632238438978e-01 -4.877985269959926e-01 -4.864322396933758e-01 -4.850644060735362e-01 + -4.836950703369048e-01 -4.823242767468570e-01 -4.809520696297089e-01 -4.795784933747175e-01 -4.782035924340842e-01 + -4.768274113229517e-01 -4.754499946194056e-01 -4.740713869644713e-01 -4.726916330621188e-01 -4.713107776792598e-01 + -4.699288656457480e-01 -4.685459418543784e-01 -4.671620512608888e-01 -4.657772388839603e-01 -4.643915498052149e-01 + -4.630050291692159e-01 -4.616177221834709e-01 -4.602296741184282e-01 -4.588409303074794e-01 -4.574515361469569e-01 + -4.560615370961361e-01 -4.546709786772349e-01 -4.532799064754127e-01 -4.518883661387709e-01 -4.504964033783537e-01 + -4.491040639681477e-01 -4.477113937450810e-01 -4.463184386090235e-01 -4.449252445227886e-01 -4.435318575121306e-01 + -4.421383236657465e-01 -4.407446891352765e-01 -4.393510001353007e-01 -4.379573029433432e-01 -4.365636438998694e-01 + -4.351700694082881e-01 -4.337766259349479e-01 -4.323833600091420e-01 -4.309903182231045e-01 -4.295975472320123e-01 + -4.282050937539836e-01 -4.268130045700788e-01 -4.254213265243025e-01 -4.240301065235996e-01 -4.226393915378561e-01 + -4.212492285999028e-01 -4.198596648055116e-01 -4.184707473133963e-01 -4.170825233452123e-01 -4.156950401855585e-01 + -4.143083451819750e-01 -4.129224857449452e-01 -4.115375093478933e-01 -4.101534635271858e-01 -4.087703958821329e-01 + -4.073883540749858e-01 -4.060073858309366e-01 -4.046275389381228e-01 -4.032488612476213e-01 -4.018714006734523e-01 + -4.004952051925779e-01 -3.991203228449026e-01 -3.977468017332725e-01 -3.963746900234765e-01 -3.950040359442463e-01 + -3.936348877872538e-01 -3.922672939053318e-01 -3.909013026724667e-01 -3.895369624832951e-01 -3.881743217934062e-01 + -3.868134291212124e-01 -3.854543330479465e-01 -3.840970822176634e-01 -3.827417253372384e-01 -3.813883111763704e-01 + -3.800368885675781e-01 -3.786875064062033e-01 -3.773402136504068e-01 -3.759950593211737e-01 -3.746520925023092e-01 + -3.733113623404410e-01 -3.719729180450170e-01 -3.706368088883079e-01 -3.693030842054051e-01 -3.679717933942230e-01 + -3.666429859154951e-01 -3.653167112927784e-01 -3.639930191124511e-01 -3.626719590237131e-01 -3.613535807385852e-01 + -3.600379340319095e-01 -3.587250687413511e-01 -3.574150347673962e-01 -3.561078820733507e-01 -3.548036606853447e-01 + -3.535024206923281e-01 -3.522042122460736e-01 -3.509090855611747e-01 -3.496170909150462e-01 -3.483282786479246e-01 + -3.470426991628686e-01 -3.457604029257590e-01 -3.444814404652952e-01 -3.432058623730013e-01 -3.419337193032218e-01 + -3.406650619731236e-01 -3.393999411626923e-01 -3.381384077147387e-01 -3.368805125348930e-01 -3.356263065916084e-01 + -3.343758409161574e-01 -3.331291666026359e-01 -3.318863348079613e-01 -3.306473967518724e-01 -3.294124037169284e-01 + -3.281814070485113e-01 -3.269544581548245e-01 -3.257316085068936e-01 -3.245129096385630e-01 -3.232984131465022e-01 + -3.220881706902000e-01 -3.208822339919681e-01 -3.196806548369384e-01 -3.184834850730646e-01 -3.172907766111235e-01 + -3.161025814247124e-01 -3.149189515502489e-01 -3.137399390869744e-01 -3.125655961969506e-01 -3.113959751050614e-01 + -3.102311280990106e-01 -3.090711075293261e-01 -3.079159658093553e-01 -3.067657554152684e-01 -3.056205288860567e-01 + -3.044803388235325e-01 -3.033452378923306e-01 -3.022152788199073e-01 -3.010905143965396e-01 -2.999709974753267e-01 + -2.988567809721892e-01 -2.977479178658694e-01 -2.966444611979316e-01 -2.955464640727601e-01 -2.944539796575623e-01 + -2.933670611823666e-01 -2.922857619400235e-01 -2.912101352862035e-01 -2.901402346394004e-01 -2.890761134809285e-01 + -2.880178253549250e-01 -2.869654238683462e-01 -2.859189626909724e-01 -2.848784955554043e-01 -2.838440762570648e-01 + -2.828157586541971e-01 -2.817935966678673e-01 -2.807776403011932e-01 -2.797678983711091e-01 -2.787643552961879e-01 + -2.777669951470781e-01 -2.767758019639380e-01 -2.757907597564386e-01 -2.748118525037599e-01 -2.738390641545946e-01 + -2.728723786271466e-01 -2.719117798091300e-01 -2.709572515577713e-01 -2.700087776998067e-01 -2.690663420314847e-01 + -2.681299283185645e-01 -2.671995202963172e-01 -2.662751016695233e-01 -2.653566561124761e-01 -2.644441672689796e-01 + -2.635376187523493e-01 -2.626369941454105e-01 -2.617422770005014e-01 -2.608534508394704e-01 -2.599704991536770e-01 + -2.590934054039925e-01 -2.582221530207986e-01 -2.573567254039884e-01 -2.564971059229672e-01 -2.556432779166493e-01 + -2.547952246934622e-01 -2.539529295313435e-01 -2.531163756777425e-01 -2.522855463496190e-01 -2.514604247334445e-01 + -2.506409939852015e-01 -2.498272372303841e-01 -2.490191375639964e-01 -2.482166780505548e-01 -2.474198417240862e-01 + -2.466286115881297e-01 -2.458429706157340e-01 -2.450629017494595e-01 -2.442883879013784e-01 -2.435194119530741e-01 + -2.427559567556404e-01 -2.419980051296822e-01 -2.412455398653161e-01 -2.404985437221700e-01 -2.397569994293826e-01 + -2.390208896856035e-01 -2.382901971589939e-01 -2.375649044872263e-01 -2.368449942774841e-01 -2.361304491064614e-01 + -2.354212515203642e-01 -2.347173840349096e-01 -2.340188291353255e-01 -2.333255692763511e-01 -2.326375868822365e-01 + -2.319548643467434e-01 -2.312773840331450e-01 -2.306051282742244e-01 -2.299380793722769e-01 -2.292762195991088e-01 + -2.286195311960375e-01 -2.279679963738911e-01 -2.273215973130095e-01 -2.266803161632434e-01 -2.260441350439553e-01 + -2.254130360440176e-01 -2.247870012218146e-01 -2.241660126052426e-01 -2.235500521917077e-01 -2.229391019481273e-01 + -2.223331438109310e-01 -2.217321596860585e-01 -2.211361314489613e-01 -2.205450409446016e-01 -2.199588699874530e-01 + -2.193776003615005e-01 -2.188012138202396e-01 -2.182296920866779e-01 -2.176630168533334e-01 -2.171011697822352e-01 + -2.165441325049239e-01 -2.159918866224518e-01 -2.154444137053814e-01 -2.149016952937864e-01 -2.143637128972522e-01 + -2.138304479948756e-01 -2.133018820352637e-01 -2.127779964365351e-01 -2.122587725863196e-01 -2.117441918417587e-01 + -2.112342355295040e-01 -2.107288849457191e-01 -2.102281213560782e-01 -2.097319259957676e-01 -2.092402800694834e-01 + -2.087531647514338e-01 -2.082705611853379e-01 -2.077924504844265e-01 -2.073188137314400e-01 -2.068496319786316e-01 + -2.063848862477651e-01 -2.059245575301156e-01 -2.054686267864688e-01 -2.050170749471222e-01 -2.045698829118839e-01 + -2.041270315500738e-01 -2.036885017005225e-01 -2.032542741715718e-01 -2.028243297410749e-01 -2.023986491563959e-01 + -2.019772131344105e-01 -2.015600023615047e-01 -2.011469974935765e-01 -2.007381791560347e-01 -2.003335279437994e-01 + -1.999330244213018e-01 -1.995366491224841e-01 -1.991443825507996e-01 -1.987562051792136e-01 -1.983720974502014e-01 + -1.979920397757498e-01 -1.976160125373575e-01 -1.972439960860335e-01 -1.968759707422984e-01 -1.965119167961837e-01 + -1.961518145072322e-01 -1.957956441044978e-01 -1.954433857865457e-01 -1.950950197214523e-01 -1.947505260468046e-01 + -1.944098848697016e-01 -1.940730762667529e-01 -1.937400802840795e-01 -1.934108769373132e-01 -1.930854462115976e-01 + -1.927637680615867e-01 -1.924458224114464e-01 -1.921315891548532e-01 -1.918210481549953e-01 -1.915141792445713e-01 + -1.912109622257915e-01 -1.909113768703775e-01 -1.906154029195616e-01 -1.903230200840876e-01 -1.900342080442101e-01 + -1.897489464496954e-01 -1.894672149198206e-01 -1.891889930433740e-01 -1.889142603786549e-01 -1.886429964534740e-01 + -1.883751807651533e-01 -1.881107927805258e-01 -1.878498119359353e-01 -1.875922176372374e-01 -1.873379892597982e-01 + -1.870871061484957e-01 -1.868395476177185e-01 -1.865952929513663e-01 -1.863543214028507e-01 -1.861166121950937e-01 + -1.858821445205286e-01 -1.856508975410998e-01 -1.854228503882634e-01 -1.851979821629864e-01 -1.849762719357465e-01 + -1.847576987465328e-01 -1.845422416048462e-01 -1.843298794896979e-01 -1.841205913496106e-01 -1.839143561026183e-01 + -1.837111526362659e-01 -1.835109598076097e-01 -1.833137564432169e-01 -1.831195213391660e-01 -1.829282332610467e-01 + -1.827398709439599e-01 -1.825544130925175e-01 -1.823718383808428e-01 -1.821921254525699e-01 -1.820152529208443e-01 + -1.818411993683228e-01 -1.816699433471729e-01 -1.815014633790739e-01 -1.813357379552156e-01 -1.811727455362996e-01 + -1.810124645525378e-01 -1.808548734036542e-01 -1.806999504588836e-01 -1.805476740569718e-01 -1.803980225061758e-01 + -1.802509740842639e-01 -1.801065070385154e-01 -1.799645995857210e-01 -1.798252299121824e-01 -1.796883761737124e-01 + -1.795540164956351e-01 -1.794221289727858e-01 -1.792926916695106e-01 -1.791656826196672e-01 -1.790410798266241e-01 + -1.789188612632616e-01 -1.787990048719702e-01 -1.786814885646523e-01 -1.785662902227212e-01 -1.784533876971014e-01 + -1.783427588082284e-01 -1.782343813460491e-01 -1.781282330700215e-01 -1.780242917091149e-01 -1.779225349618093e-01 + -1.778229404960962e-01 -1.777254859494784e-01 -1.776301489289694e-01 -1.775369070110945e-01 -1.774457377418894e-01 + -1.773566186369016e-01 -1.772695271811893e-01 -1.771844408293224e-01 -1.771013370053815e-01 -1.770201931029582e-01 + -1.769409864851561e-01 -1.768636944845889e-01 -1.767882944033823e-01 -1.767147635131728e-01 -1.766430790551081e-01 + -1.765732182398469e-01 -1.765051582475594e-01 -1.764388762279266e-01 -1.763743493001411e-01 -1.763115545529062e-01 + -1.762504690444367e-01 -1.761910698024584e-01 -1.761333338242081e-01 -1.760772380764343e-01 -1.760227594953960e-01 + -1.759698749868639e-01 -1.759185614261194e-01 -1.758687956579554e-01 -1.758205544966758e-01 -1.757738147260959e-01 + -1.757285530995419e-01 -1.756847463398511e-01 -1.756423711393722e-01 -1.756014041599649e-01 -1.755618220330002e-01 + -1.755236013593601e-01 -1.754867187094379e-01 -1.754511506231379e-01 -1.754168736098757e-01 -1.753838641485782e-01 + -1.753520986876830e-01 -1.753215536451393e-01 -1.752922054084075e-01 -1.752640303344584e-01 -1.752370047497750e-01 + -1.752111049503510e-01 -1.751863072016910e-01 -1.751625877388110e-01 -1.751399227662384e-01 -1.751182884580113e-01 + -1.750976609576794e-01 -1.750780163783031e-01 -1.750593308024546e-01 -1.750415802822163e-01 -1.750247408391829e-01 + -1.750087884644595e-01 -1.749936991186622e-01 -1.749794487319192e-01 -1.749660132038691e-01 -1.749533684036614e-01 + -1.749414901699577e-01 -1.749303543109301e-01 -1.749199366042621e-01 -1.749102127971480e-01 -1.749011586062938e-01 + -1.748927497179163e-01 -1.748849617877437e-01 -1.748777704410150e-01 -1.748711512724808e-01 -1.748650798464025e-01 + -1.748595316965529e-01 -1.748544823262158e-01 -1.748499072081863e-01 -1.748457817847704e-01 -1.748420814677855e-01 + -1.748387816385604e-01 -1.748358576479346e-01 -1.748332848162586e-01 -1.748310384333948e-01 -1.748290937587165e-01 + -1.748274260211074e-01 -1.748260104189635e-01 -1.748248221201912e-01 -1.748238362622083e-01 -1.748230279519439e-01 + -1.748223722658380e-01 -1.748218442498419e-01 -1.748214189194180e-01 -1.748210712595399e-01 -1.748207762246925e-01 + -1.748205087388716e-01 -1.748202436955843e-01 -1.748199559578488e-01 -1.748196203581945e-01 -1.748192116986621e-01 + -1.748187047508032e-01 -1.748180742556807e-01 -1.748172949238688e-01 -1.748163414354525e-01 -1.748151884400282e-01 + -1.748138105567034e-01 -1.748121823740970e-01 -1.748102784503386e-01 -1.748080733130694e-01 -1.748055414594414e-01 + -1.748026573561181e-01 -1.747993954392739e-01 -1.747957301145945e-01 -1.747916357572767e-01 -1.747870867120284e-01 + -1.747820572930687e-01 -1.747765217841281e-01 -1.747704544384481e-01 -1.747638294787810e-01 -1.747566210973907e-01 + -1.747488034560524e-01 -1.747403506860518e-01 -1.747312368881864e-01 -1.747214361327647e-01 -1.747109224596061e-01 + -1.746996698780413e-01 -1.746876523669124e-01 -1.746748438745723e-01 -1.746612183188853e-01 -1.746467495872269e-01 + -1.746314115364835e-01 -1.746151779930528e-01 -1.745980227528437e-01 -1.745799195812764e-01 -1.745608422132818e-01 + -1.745407643533024e-01 -1.745196596752916e-01 -1.744975018227143e-01 -1.744742644085462e-01 -1.744499210152745e-01 + -1.744244451948967e-01 -1.743978104689229e-01 -1.743699903283731e-01 -1.743409582337793e-01 -1.743106876151839e-01 + -1.742791518721411e-01 -1.742463243737160e-01 -1.742121784584849e-01 -1.741766874345352e-01 -1.741398245794654e-01 + -1.741015631403853e-01 -1.740618763339160e-01 -1.740207373461894e-01 -1.739781193328489e-01 -1.739339954190487e-01 + -1.738883393830602e-01 -1.738411399121969e-01 -1.737924001993539e-01 -1.737421240418342e-01 -1.736903152430296e-01 + -1.736369776124207e-01 -1.735821149655769e-01 -1.735257311241562e-01 -1.734678299159058e-01 -1.734084151746614e-01 + -1.733474907403475e-01 -1.732850604589775e-01 -1.732211281826538e-01 -1.731556977695672e-01 -1.730887730839974e-01 + -1.730203579963130e-01 -1.729504563829715e-01 -1.728790721265192e-01 -1.728062091155906e-01 -1.727318712449099e-01 + -1.726560624152895e-01 -1.725787865336309e-01 -1.725000475129242e-01 -1.724198492722484e-01 -1.723381957367713e-01 + -1.722550908377493e-01 -1.721705385125281e-01 -1.720845427045416e-01 -1.719971073633129e-01 -1.719082364444538e-01 + -1.718179339096648e-01 -1.717262037267353e-01 -1.716330498695435e-01 -1.715384763180564e-01 -1.714424870583298e-01 + -1.713450860825082e-01 -1.712462773888249e-01 -1.711460649816024e-01 -1.710444528712513e-01 -1.709414450742716e-01 + -1.708370456132518e-01 -1.707312585168692e-01 -1.706240878198903e-01 -1.705155375631696e-01 -1.704056117936514e-01 + -1.702943145643679e-01 -1.701816499344407e-01 -1.700676219690797e-01 -1.699522347395841e-01 -1.698354923233416e-01 + -1.697173988038289e-01 -1.695979582706113e-01 -1.694771748193429e-01 -1.693550525517667e-01 -1.692315955757145e-01 + -1.691068080051071e-01 -1.689806939599535e-01 -1.688532575663521e-01 -1.687245029564898e-01 -1.685944342686426e-01 + -1.684630556471747e-01 -1.683303712425397e-01 -1.681963852112797e-01 -1.680611017160259e-01 -1.679245249254978e-01 + -1.677866590145041e-01 -1.676475081639421e-01 -1.675070765607981e-01 -1.673653683981470e-01 -1.672223878751526e-01 + -1.670781391970675e-01 -1.669326265752331e-01 -1.667858542270794e-01 -1.666378263761256e-01 -1.664885472519793e-01 + -1.663380210903374e-01 -1.661862521329849e-01 -1.660332446277961e-01 -1.658790028287340e-01 -1.657235309958504e-01 + -1.655668333952859e-01 -1.654089142992698e-01 -1.652497779861203e-01 -1.650894287402444e-01 -1.649278708521380e-01 + -1.647651086183854e-01 -1.646011463416602e-01 -1.644359883307245e-01 -1.642696389004292e-01 -1.641021023717143e-01 + -1.639333830716082e-01 -1.637634853332283e-01 -1.635924134957809e-01 -1.634201719045608e-01 -1.632467649109518e-01 + -1.630721968724266e-01 -1.628964721525466e-01 -1.627195951209618e-01 -1.625415701534112e-01 -1.623624016317227e-01 + -1.621820939438130e-01 -1.620006514836872e-01 -1.618180786514395e-01 -1.616343798532529e-01 -1.614495595013996e-01 + -1.612636220142395e-01 -1.610765718162223e-01 -1.608884133378863e-01 -1.606991510158584e-01 -1.605087892928543e-01 + -1.603173326176785e-01 -1.601247854452245e-01 -1.599311522364746e-01 -1.597364374584996e-01 -1.595406455844593e-01 + -1.593437810936023e-01 -1.591458484712660e-01 -1.589468522088766e-01 -1.587467968039490e-01 -1.585456867600870e-01 + -1.583435265869833e-01 -1.581403208004190e-01 -1.579360739222646e-01 -1.577307904804788e-01 -1.575244750091097e-01 + -1.573171320482936e-01 -1.571087661442559e-01 -1.568993818493109e-01 -1.566889837218615e-01 -1.564775763263996e-01 + -1.562651642335056e-01 -1.560517520198489e-01 -1.558373442681878e-01 -1.556219455673693e-01 -1.554055605123290e-01 + -1.551881937040916e-01 -1.549698497497704e-01 -1.547505332625678e-01 -1.545302488617745e-01 -1.543090011727703e-01 + -1.540867948270239e-01 -1.538636344620927e-01 -1.536395247216228e-01 -1.534144702553492e-01 -1.531884757190957e-01 + -1.529615457747749e-01 -1.527336850903880e-01 -1.525048983400254e-01 -1.522751902038660e-01 -1.520445653681776e-01 + -1.518130285253167e-01 -1.515805843737287e-01 -1.513472376179478e-01 -1.511129929685971e-01 -1.508778551423881e-01 + -1.506418288621217e-01 -1.504049188566869e-01 -1.501671298610622e-01 -1.499284666163146e-01 -1.496889338695997e-01 + -1.494485363741621e-01 -1.492072788893351e-01 -1.489651661805412e-01 -1.487222030192911e-01 -1.484783941831845e-01 + -1.482337444559103e-01 -1.479882586272457e-01 -1.477419414930569e-01 -1.474947978552986e-01 -1.472468325220151e-01 + -1.469980503073387e-01 -1.467484560314907e-01 -1.464980545207814e-01 -1.462468506076097e-01 -1.459948491304636e-01 + -1.457420549339193e-01 -1.454884728686425e-01 -1.452341077913872e-01 -1.449789645649965e-01 -1.447230480584021e-01 + -1.444663631466246e-01 -1.442089147107734e-01 -1.439507076380467e-01 -1.436917468217314e-01 -1.434320371612033e-01 + -1.431715835619269e-01 -1.429103909354558e-01 -1.426484641994319e-01 -1.423858082775864e-01 -1.421224280997390e-01 + -1.418583286017983e-01 -1.415935147257617e-01 -1.413279914197154e-01 -1.410617636378342e-01 -1.407948363403820e-01 + -1.405272144937114e-01 -1.402589030702637e-01 -1.399899070485692e-01 -1.397202314132468e-01 -1.394498811550044e-01 + -1.391788612706382e-01 -1.389071767630340e-01 -1.386348326411658e-01 -1.383618339200967e-01 -1.380881856209782e-01 + -1.378138927710512e-01 -1.375389604036449e-01 -1.372633935581775e-01 -1.369871972801560e-01 -1.367103766211762e-01 + -1.364329366389226e-01 -1.361548823971687e-01 -1.358762189657765e-01 -1.355969514206971e-01 -1.353170848439703e-01 + -1.350366243237247e-01 -1.347555749541775e-01 -1.344739418356350e-01 -1.341917300744923e-01 -1.339089447832330e-01 + -1.336255910804298e-01 -1.333416740907438e-01 -1.330571989449255e-01 -1.327721707798138e-01 -1.324865947383364e-01 + -1.322004759695100e-01 -1.319138196284398e-01 -1.316266308763201e-01 -1.313389148804339e-01 -1.310506768141529e-01 + -1.307619218569378e-01 -1.304726551943378e-01 -1.301828820179913e-01 -1.298926075256250e-01 -1.296018369210549e-01 + -1.293105754141855e-01 -1.290188282210102e-01 -1.287266005636111e-01 -1.284338976701593e-01 -1.281407247749145e-01 + -1.278470871182253e-01 -1.275529899465291e-01 -1.272584385123520e-01 -1.269634380743090e-01 -1.266679938971041e-01 + -1.263721112515296e-01 -1.260757954144668e-01 -1.257790516688862e-01 -1.254818853038467e-01 -1.251843016144958e-01 + -1.248863059020704e-01 -1.245879034738957e-01 -1.242890996433862e-01 -1.239898997300443e-01 -1.236903090594621e-01 + -1.233903329633203e-01 -1.230899767793882e-01 -1.227892458515238e-01 -1.224881455296742e-01 -1.221866811698752e-01 + -1.218848581342514e-01 -1.215826817910162e-01 -1.212801575144717e-01 -1.209772906850088e-01 -1.206740866891074e-01 + -1.203705509193362e-01 -1.200666887743523e-01 -1.197625056589020e-01 -1.194580069838203e-01 -1.191531981660311e-01 + -1.188480846285467e-01 -1.185426718004686e-01 -1.182369651169871e-01 -1.179309700193809e-01 -1.176246919550182e-01 + -1.173181363773554e-01 -1.170113087459375e-01 -1.167042145263992e-01 -1.163968591904631e-01 -1.160892482159414e-01 + -1.157813870867344e-01 -1.154732812928312e-01 -1.151649363303106e-01 -1.148563577013393e-01 -1.145475509141727e-01 + -1.142385214831560e-01 -1.139292749287221e-01 -1.136198167773936e-01 -1.133101525617812e-01 -1.130002878205845e-01 + -1.126902280985926e-01 -1.123799789466826e-01 -1.120695459218204e-01 -1.117589345870614e-01 -1.114481505115491e-01 + -1.111371992705165e-01 -1.108260864452845e-01 -1.105148176232633e-01 -1.102033983979523e-01 -1.098918343689388e-01 + -1.095801311418998e-01 -1.092682943286005e-01 -1.089563295468947e-01 -1.086442424207261e-01 -1.083320385801260e-01 + -1.080197236612149e-01 -1.077073033062026e-01 -1.073947831633868e-01 -1.070821688871549e-01 -1.067694661379826e-01 + -1.064566805824341e-01 -1.061438178931633e-01 -1.058308837489121e-01 -1.055178838345113e-01 -1.052048238408811e-01 + -1.048917094650296e-01 -1.045785464100547e-01 -1.042653403851424e-01 -1.039520971055673e-01 -1.036388222926937e-01 + -1.033255216739740e-01 -1.030122009829493e-01 -1.026988659592502e-01 -1.023855223485953e-01 -1.020721759027928e-01 + -1.017588323797391e-01 -1.014454975434192e-01 -1.011321771639078e-01 -1.008188770173676e-01 -1.005056028860506e-01 + -1.001923605582972e-01 -9.987915582853665e-02 -9.956599449728754e-02 -9.925288237115659e-02 -9.893982526283934e-02 + -9.862682899112089e-02 -9.831389938087406e-02 -9.800104226306158e-02 -9.768826347473418e-02 -9.737556885903137e-02 + -9.706296426518225e-02 -9.675045554850391e-02 -9.643804857040231e-02 -9.612574919837290e-02 -9.581356330599895e-02 + -9.550149677295358e-02 -9.518955548499793e-02 -9.487774533398190e-02 -9.456607221784492e-02 -9.425454204061462e-02 + -9.394316071240723e-02 -9.363193414942871e-02 -9.332086827397268e-02 -9.300996901442260e-02 -9.269924230525009e-02 + -9.238869408701537e-02 -9.207833030636840e-02 -9.176815691604708e-02 -9.145817987487818e-02 -9.114840514777790e-02 + -9.083883870575035e-02 -9.052948652588942e-02 -9.022035459137702e-02 -8.991144889148391e-02 -8.960277542157032e-02 + -8.929434018308437e-02 -8.898614918356394e-02 -8.867820843663492e-02 -8.837052396201207e-02 -8.806310178549967e-02 + -8.775594793899004e-02 -8.744906846046427e-02 -8.714246939399310e-02 -8.683615678973500e-02 -8.653013670393818e-02 + -8.622441519893902e-02 -8.591899834316268e-02 -8.561389221112378e-02 -8.530910288342508e-02 -8.500463644675811e-02 + -8.470049899390393e-02 -8.439669662373143e-02 -8.409323544119930e-02 -8.379012155735420e-02 -8.348736108933175e-02 + -8.318496016035699e-02 -8.288292489974303e-02 -8.258126144289184e-02 -8.227997593129487e-02 -8.197907451253141e-02 + -8.167856334027050e-02 -8.137844857426926e-02 -8.107873638037372e-02 -8.077943293051928e-02 -8.048054440272946e-02 + -8.018207698111665e-02 -7.988403685588268e-02 -7.958643022331723e-02 -7.928926328579976e-02 -7.899254225179787e-02 + -7.869627333586779e-02 -7.840046275865548e-02 -7.810511674689456e-02 -7.781024153340860e-02 -7.751584335710898e-02 + -7.722192846299619e-02 -7.692850310215994e-02 -7.663557353177830e-02 -7.634314601511795e-02 -7.605122682153515e-02 + -7.575982222647404e-02 -7.546893851146841e-02 -7.517858196414022e-02 -7.488875887820022e-02 -7.459947555344865e-02 + -7.431073829577386e-02 -7.402255341715304e-02 -7.373492723565277e-02 -7.344786607542758e-02 -7.316137626672170e-02 + -7.287546414586754e-02 -7.259013605528618e-02 -7.230539834348824e-02 -7.202125736507255e-02 -7.173771948072660e-02 + -7.145479105722748e-02 -7.117247846744000e-02 -7.089078809031893e-02 -7.060972631090692e-02 -7.032929952033562e-02 + -7.004951411582597e-02 -6.977037650068689e-02 -6.949189308431707e-02 -6.921407028220326e-02 -6.893691451592099e-02 + -6.866043221313525e-02 -6.838462980759924e-02 -6.810951373915494e-02 -6.783509045373375e-02 -6.756136640335494e-02 + -6.728834804612761e-02 -6.701604184624893e-02 -6.674445427400479e-02 -6.647359180577066e-02 -6.620346092401003e-02 + -6.593406811727537e-02 -6.566541988020837e-02 -6.539752271353887e-02 -6.513038312408626e-02 -6.486400762475807e-02 + -6.459840273455068e-02 -6.433357497854991e-02 -6.406953088792970e-02 -6.380627699995281e-02 -6.354381967338561e-02 + -6.328216150455838e-02 -6.302130157047116e-02 -6.276123881133892e-02 -6.250197216548828e-02 -6.224350056935793e-02 + -6.198582295749760e-02 -6.172893826256860e-02 -6.147284541534430e-02 -6.121754334470900e-02 -6.096303097765919e-02 + -6.070930723930253e-02 -6.045637105285811e-02 -6.020422133965718e-02 -5.995285701914183e-02 -5.970227700886648e-02 + -5.945248022449658e-02 -5.920346557980904e-02 -5.895523198669302e-02 -5.870777835514864e-02 -5.846110359328761e-02 + -5.821520660733366e-02 -5.797008630162153e-02 -5.772574157859814e-02 -5.748217133882149e-02 -5.723937448096104e-02 + -5.699734990179854e-02 -5.675609649622662e-02 -5.651561315724954e-02 -5.627589877598366e-02 -5.603695224165618e-02 + -5.579877244160662e-02 -5.556135826128547e-02 -5.532470858425489e-02 -5.508882229218904e-02 -5.485369826487319e-02 + -5.461933538020406e-02 -5.438573251419067e-02 -5.415288854095272e-02 -5.392080233272230e-02 -5.368947275984246e-02 + -5.345889869076786e-02 -5.322907899206523e-02 -5.300001252841243e-02 -5.277169816259879e-02 -5.254413475552573e-02 + -5.231732116620558e-02 -5.209125625176302e-02 -5.186593886743360e-02 -5.164136786656457e-02 -5.141754210061519e-02 + -5.119446041915571e-02 -5.097212166986852e-02 -5.075052469854709e-02 -5.052966834909649e-02 -5.030955146353391e-02 + -5.009017288198749e-02 -4.987153144269703e-02 -4.965362598201433e-02 -4.943645533440217e-02 -4.922001833243556e-02 + -4.900431380680051e-02 -4.878934058629460e-02 -4.857509749782755e-02 -4.836158336642014e-02 -4.814879701520468e-02 + -4.793673726542550e-02 -4.772540293643798e-02 -4.751479284570964e-02 -4.730490580881906e-02 -4.709574063945637e-02 + -4.688729614942389e-02 -4.667957114863488e-02 -4.647256444511420e-02 -4.626627484499887e-02 -4.606070115253669e-02 + -4.585584217008776e-02 -4.565169669812319e-02 -4.544826353522573e-02 -4.524554147809021e-02 -4.504352932152231e-02 + -4.484222585843990e-02 -4.464162987987204e-02 -4.444174017495933e-02 -4.424255553095430e-02 -4.404407473322077e-02 + -4.384629656523394e-02 -4.364921980858121e-02 -4.345284324296083e-02 -4.325716564618321e-02 -4.306218579416995e-02 + -4.286790246095422e-02 -4.267431441868115e-02 -4.248142043760701e-02 -4.228921928609967e-02 -4.209770973063896e-02 + -4.190689053581576e-02 -4.171676046433306e-02 -4.152731827700496e-02 -4.133856273275718e-02 -4.115049258862742e-02 + -4.096310659976451e-02 -4.077640351942887e-02 -4.059038209899291e-02 -4.040504108794000e-02 -4.022037923386572e-02 + -4.003639528247673e-02 -3.985308797759131e-02 -3.967045606113968e-02 -3.948849827316327e-02 -3.930721335181499e-02 + -3.912660003335985e-02 -3.894665705217377e-02 -3.876738314074488e-02 -3.858877702967239e-02 -3.841083744766712e-02 + -3.823356312155188e-02 -3.805695277626046e-02 -3.788100513483880e-02 -3.770571891844401e-02 -3.753109284634471e-02 + -3.735712563592157e-02 -3.718381600266639e-02 -3.701116266018251e-02 -3.683916432018530e-02 -3.666781969250111e-02 + -3.649712748506845e-02 -3.632708640393694e-02 -3.615769515326780e-02 -3.598895243533422e-02 -3.582085695052056e-02 + -3.565340739732274e-02 -3.548660247234865e-02 -3.532044087031721e-02 -3.515492128405946e-02 -3.499004240451761e-02 + -3.482580292074542e-02 -3.466220151990863e-02 -3.449923688728414e-02 -3.433690770626045e-02 -3.417521265833798e-02 + -3.401415042312823e-02 -3.385371967835477e-02 -3.369391909985236e-02 -3.353474736156733e-02 -3.337620313555797e-02 + -3.321828509199360e-02 -3.306099189915566e-02 -3.290432222343674e-02 -3.274827472934103e-02 -3.259284807948463e-02 + -3.243804093459488e-02 -3.228385195351066e-02 -3.213027979318279e-02 -3.197732310867317e-02 -3.182498055315577e-02 + -3.167325077791576e-02 -3.152213243234985e-02 -3.137162416396674e-02 -3.122172461838628e-02 -3.107243243933992e-02 + -3.092374626867103e-02 -3.077566474633408e-02 -3.062818651039557e-02 -3.048131019703322e-02 -3.033503444053633e-02 + -3.018935787330611e-02 -3.004427912585500e-02 -2.989979682680699e-02 -2.975590960289799e-02 -2.961261607897504e-02 + -2.946991487799718e-02 -2.932780462103471e-02 -2.918628392726946e-02 -2.904535141399520e-02 -2.890500569661691e-02 + -2.876524538865114e-02 -2.862606910172637e-02 -2.848747544558218e-02 -2.834946302807018e-02 -2.821203045515319e-02 + -2.807517633090562e-02 -2.793889925751377e-02 -2.780319783527510e-02 -2.766807066259902e-02 -2.753351633600623e-02 + -2.739953345012899e-02 -2.726612059771145e-02 -2.713327636960897e-02 -2.700099935478855e-02 -2.686928814032903e-02 + -2.673814131142040e-02 -2.660755745136465e-02 -2.647753514157503e-02 -2.634807296157633e-02 -2.621916948900527e-02 + -2.609082329960978e-02 -2.596303296724940e-02 -2.583579706389550e-02 -2.570911415963067e-02 -2.558298282264942e-02 + -2.545740161925755e-02 -2.533236911387244e-02 -2.520788386902333e-02 -2.508394444535071e-02 -2.496054940160667e-02 + -2.483769729465515e-02 -2.471538667947127e-02 -2.459361610914211e-02 -2.447238413486603e-02 -2.435168930595295e-02 + -2.423153016982466e-02 -2.411190527201421e-02 -2.399281315616625e-02 -2.387425236403727e-02 -2.375622143549494e-02 + -2.363871890851889e-02 -2.352174331920003e-02 -2.340529320174085e-02 -2.328936708845568e-02 -2.317396350977004e-02 + -2.305908099422141e-02 -2.294471806845854e-02 -2.283087325724177e-02 -2.271754508344326e-02 -2.260473206804650e-02 + -2.249243273014652e-02 -2.238064558695018e-02 -2.226936915377560e-02 -2.215860194405278e-02 -2.204834246932304e-02 + -2.193858923923927e-02 -2.182934076156617e-02 -2.172059554217978e-02 -2.161235208506771e-02 -2.150460889232937e-02 + -2.139736446417542e-02 -2.129061729892840e-02 -2.118436589302221e-02 -2.107860874100228e-02 -2.097334433552588e-02 + -2.086857116736159e-02 -2.076428772538956e-02 -2.066049249660178e-02 -2.055718396610145e-02 -2.045436061710366e-02 + -2.035202093093487e-02 -2.025016338703306e-02 -2.014878646294806e-02 -2.004788863434091e-02 -1.994746837498458e-02 + -1.984752415676334e-02 -1.974805444967304e-02 -1.964905772182133e-02 -1.955053243942722e-02 -1.945247706682123e-02 + -1.935489006644575e-02 -1.925776989885439e-02 -1.916111502271266e-02 -1.906492389479737e-02 -1.896919496999695e-02 + -1.887392670131158e-02 -1.877911753985283e-02 -1.868476593484379e-02 -1.859087033361938e-02 -1.849742918162579e-02 + -1.840444092242105e-02 -1.831190399767455e-02 -1.821981684716726e-02 -1.812817790879194e-02 -1.803698561855266e-02 + -1.794623841056512e-02 -1.785593471705676e-02 -1.776607296836633e-02 -1.767665159294441e-02 -1.758766901735296e-02 + -1.749912366626548e-02 -1.741101396246730e-02 -1.732333832685505e-02 -1.723609517843697e-02 -1.714928293433304e-02 + -1.706290000977460e-02 -1.697694481810475e-02 -1.689141577077802e-02 -1.680631127736048e-02 -1.672162974552997e-02 + -1.663736958107563e-02 -1.655352918789846e-02 -1.647010696801080e-02 -1.638710132153659e-02 -1.630451064671149e-02 + -1.622233333988258e-02 -1.614056779550848e-02 -1.605921240615960e-02 -1.597826556251764e-02 -1.589772565337612e-02 + -1.581759106563996e-02 -1.573786018432563e-02 -1.565853139256138e-02 -1.557960307158682e-02 -1.550107360075312e-02 + -1.542294135752325e-02 -1.534520471747146e-02 -1.526786205428384e-02 -1.519091173975783e-02 -1.511435214380249e-02 + -1.503818163443859e-02 -1.496239857779832e-02 -1.488700133812540e-02 -1.481198827777534e-02 -1.473735775721495e-02 + -1.466310813502286e-02 -1.458923776788910e-02 -1.451574501061525e-02 -1.444262821611466e-02 -1.436988573541203e-02 + -1.429751591764369e-02 -1.422551711005765e-02 -1.415388765801332e-02 -1.408262590498185e-02 -1.401173019254584e-02 + -1.394119886039942e-02 -1.387103024634847e-02 -1.380122268631025e-02 -1.373177451431374e-02 -1.366268406249938e-02 + -1.359394966111917e-02 -1.352556963853683e-02 -1.345754232122749e-02 -1.338986603377785e-02 -1.332253909888635e-02 + -1.325555983736277e-02 -1.318892656812868e-02 -1.312263760821707e-02 -1.305669127277248e-02 -1.299108587505118e-02 + -1.292581972642087e-02 -1.286089113636079e-02 -1.279629841246194e-02 -1.273203986042665e-02 -1.266811378406904e-02 + -1.260451848531466e-02 -1.254125226420061e-02 -1.247831341887570e-02 -1.241570024560018e-02 -1.235341103874586e-02 + -1.229144409079628e-02 -1.222979769234634e-02 -1.216847013210271e-02 -1.210745969688346e-02 -1.204676467161828e-02 + -1.198638333934852e-02 -1.192631398122695e-02 -1.186655487651807e-02 -1.180710430259781e-02 -1.174796053495369e-02 + -1.168912184718492e-02 -1.163058651100216e-02 -1.157235279622761e-02 -1.151441897079520e-02 -1.145678330075023e-02 + -1.139944405024978e-02 -1.134239948156232e-02 -1.128564785506792e-02 -1.122918742925836e-02 -1.117301646073682e-02 + -1.111713320421809e-02 -1.106153591252863e-02 -1.100622283660632e-02 -1.095119222550075e-02 -1.089644232637298e-02 + -1.084197138449563e-02 -1.078777764325301e-02 -1.073385934414089e-02 -1.068021472676658e-02 -1.062684202884911e-02 + -1.057373948621890e-02 -1.052090533281812e-02 -1.046833780070035e-02 -1.041603512003080e-02 -1.036399551908630e-02 + -1.031221722425518e-02 -1.026069846003733e-02 -1.020943744904430e-02 -1.015843241199908e-02 -1.010768156773639e-02 + -1.005718313320238e-02 -1.000693532345477e-02 -9.956936351663000e-03 -9.907184429107868e-03 -9.857677765181951e-03 + -9.808414567389246e-03 -9.759393041345332e-03 -9.710611390777465e-03 -9.662067817524359e-03 -9.613760521536294e-03 + -9.565687700875250e-03 -9.517847551714602e-03 -9.470238268339455e-03 -9.422858043146373e-03 -9.375705066643484e-03 + -9.328777527450597e-03 -9.282073612298979e-03 -9.235591506031477e-03 -9.189329391602606e-03 -9.143285450078295e-03 + -9.097457860636218e-03 -9.051844800565477e-03 -9.006444445266760e-03 -8.961254968252430e-03 -8.916274541146312e-03 + -8.871501333683798e-03 -8.826933513711962e-03 -8.782569247189285e-03 -8.738406698185989e-03 -8.694444028883737e-03 + -8.650679399575766e-03 -8.607110968666998e-03 -8.563736892673802e-03 -8.520555326224130e-03 -8.477564422057609e-03 + -8.434762331025280e-03 -8.392147202089901e-03 -8.349717182325704e-03 -8.307470416918480e-03 -8.265405049165691e-03 + -8.223519220476237e-03 -8.181811070370719e-03 -8.140278736481221e-03 -8.098920354551366e-03 -8.057734058436473e-03 + -8.016717980103316e-03 -7.975870249630252e-03 -7.935188995207284e-03 -7.894672343135879e-03 -7.854318417829185e-03 + -7.814125341811836e-03 -7.774091235720011e-03 -7.734214218301584e-03 -7.694492406415883e-03 -7.654923915033813e-03 + -7.615506857237942e-03 -7.576239344222277e-03 -7.537119485292531e-03 -7.498145387865876e-03 -7.459315157471062e-03 + -7.420626897748505e-03 -7.382078710450094e-03 -7.343668695439282e-03 -7.305394950691192e-03 -7.267255572292386e-03 + -7.229248654441126e-03 -7.191372289447140e-03 -7.153624567731739e-03 -7.116003624038495e-03 -7.078508474215831e-03 + -7.041138926421179e-03 -7.003894816745242e-03 -6.966775981030504e-03 -6.929782254871301e-03 -6.892913473613651e-03 + -6.856169472355352e-03 -6.819550085946065e-03 -6.783055148987103e-03 -6.746684495831654e-03 -6.710437960584618e-03 + -6.674315377102651e-03 -6.638316578994274e-03 -6.602441399619691e-03 -6.566689672090875e-03 -6.531061229271669e-03 + -6.495555903777570e-03 -6.460173527975952e-03 -6.424913933985890e-03 -6.389776953678226e-03 -6.354762418675658e-03 + -6.319870160352578e-03 -6.285100009835136e-03 -6.250451798001365e-03 -6.215925355480928e-03 -6.181520512655402e-03 + -6.147237099658026e-03 -6.113074946373834e-03 -6.079033882439701e-03 -6.045113737244199e-03 -6.011314339927668e-03 + -5.977635519382314e-03 -5.944077104251991e-03 -5.910638922932446e-03 -5.877320803571107e-03 -5.844122574067189e-03 + -5.811044062071753e-03 -5.778085094987517e-03 -5.745245499969095e-03 -5.712525103922782e-03 -5.679923733506649e-03 + -5.647441215130619e-03 -5.615077374956306e-03 -5.582832038897109e-03 -5.550705032618262e-03 -5.518696181536677e-03 + -5.486805310821138e-03 -5.455032245392131e-03 -5.423376809921901e-03 -5.391838828834562e-03 -5.360418126305904e-03 + -5.329114526263508e-03 -5.297927852386787e-03 -5.266857928106842e-03 -5.235904576606630e-03 -5.205067620820824e-03 + -5.174346883435856e-03 -5.143742186890011e-03 -5.113253353373271e-03 -5.082880204827393e-03 -5.052622562945976e-03 + -5.022480249174292e-03 -4.992453084709495e-03 -4.962540890500427e-03 -4.932743487247710e-03 -4.903060695403810e-03 + -4.873492335172862e-03 -4.844038226510882e-03 -4.814698189125571e-03 -4.785472042476425e-03 -4.756359605774757e-03 + -4.727360697983606e-03 -4.698475137817772e-03 -4.669702743743895e-03 -4.641043333980304e-03 -4.612496726497188e-03 + -4.584062739016438e-03 -4.555741189011722e-03 -4.527531893708544e-03 -4.499434670084120e-03 -4.471449334867432e-03 + -4.443575704539306e-03 -4.415813595332247e-03 -4.388162823230627e-03 -4.360623203970521e-03 -4.333194553039779e-03 + -4.305876685678087e-03 -4.278669416876838e-03 -4.251572561379203e-03 -4.224585933680182e-03 -4.197709348026470e-03 + -4.170942618416615e-03 -4.144285558600877e-03 -4.117737982081285e-03 -4.091299702111709e-03 -4.064970531697724e-03 + -4.038750283596681e-03 -4.012638770317764e-03 -3.986635804121849e-03 -3.960741197021666e-03 -3.934954760781655e-03 + -3.909276306918030e-03 -3.883705646698839e-03 -3.858242591143823e-03 -3.832886951024573e-03 -3.807638536864394e-03 + -3.782497158938364e-03 -3.757462627273395e-03 -3.732534751648109e-03 -3.707713341592904e-03 -3.682998206390007e-03 + -3.658389155073341e-03 -3.633885996428679e-03 -3.609488538993509e-03 -3.585196591057092e-03 -3.561009960660519e-03 + -3.536928455596594e-03 -3.512951883409898e-03 -3.489080051396840e-03 -3.465312766605525e-03 -3.441649835835906e-03 + -3.418091065639654e-03 -3.394636262320213e-03 -3.371285231932853e-03 -3.348037780284563e-03 -3.324893712934104e-03 + -3.301852835192067e-03 -3.278914952120739e-03 -3.256079868534255e-03 -3.233347388998468e-03 -3.210717317831004e-03 + -3.188189459101314e-03 -3.165763616630569e-03 -3.143439593991713e-03 -3.121217194509517e-03 -3.099096221260451e-03 + -3.077076477072833e-03 -3.055157764526695e-03 -3.033339885953845e-03 -3.011622643437919e-03 -2.990005838814249e-03 + -2.968489273670017e-03 -2.947072749344119e-03 -2.925756066927229e-03 -2.904539027261841e-03 -2.883421430942174e-03 + -2.862403078314216e-03 -2.841483769475784e-03 -2.820663304276394e-03 -2.799941482317407e-03 -2.779318102951903e-03 + -2.758792965284737e-03 -2.738365868172586e-03 -2.718036610223848e-03 -2.697804989798697e-03 -2.677670805009128e-03 + -2.657633853718841e-03 -2.637693933543377e-03 -2.617850841850000e-03 -2.598104375757746e-03 -2.578454332137472e-03 + -2.558900507611761e-03 -2.539442698554968e-03 -2.520080701093267e-03 -2.500814311104544e-03 -2.481643324218519e-03 + -2.462567535816638e-03 -2.443586741032121e-03 -2.424700734750005e-03 -2.405909311607039e-03 -2.387212265991808e-03 + -2.368609392044620e-03 -2.350100483657559e-03 -2.331685334474526e-03 -2.313363737891150e-03 -2.295135487054832e-03 + -2.277000374864790e-03 -2.258958193971958e-03 -2.241008736779098e-03 -2.223151795440705e-03 -2.205387161863042e-03 + -2.187714627704191e-03 -2.170133984373964e-03 -2.152645023033946e-03 -2.135247534597534e-03 -2.117941309729843e-03 + -2.100726138847821e-03 -2.083601812120139e-03 -2.066568119467248e-03 -2.049624850561408e-03 -2.032771794826614e-03 + -2.016008741438632e-03 -1.999335479325042e-03 -1.982751797165141e-03 -1.966257483390056e-03 -1.949852326182643e-03 + -1.933536113477534e-03 -1.917308632961171e-03 -1.901169672071730e-03 -1.885119017999159e-03 -1.869156457685220e-03 + -1.853281777823393e-03 -1.837494764858986e-03 -1.821795204989036e-03 -1.806182884162357e-03 -1.790657588079573e-03 + -1.775219102193030e-03 -1.759867211706897e-03 -1.744601701577076e-03 -1.729422356511246e-03 -1.714328960968891e-03 + -1.699321299161236e-03 -1.684399155051274e-03 -1.669562312353811e-03 -1.654810554535375e-03 -1.640143664814315e-03 + -1.625561426160717e-03 -1.611063621296442e-03 -1.596650032695156e-03 -1.582320442582263e-03 -1.568074632934942e-03 + -1.553912385482177e-03 -1.539833481704681e-03 -1.525837702834982e-03 -1.511924829857350e-03 -1.498094643507828e-03 + -1.484346924274261e-03 -1.470681452396238e-03 -1.457098007865118e-03 -1.443596370424068e-03 -1.430176319567981e-03 + -1.416837634543570e-03 -1.403580094349283e-03 -1.390403477735348e-03 -1.377307563203789e-03 -1.364292129008380e-03 + -1.351356953154661e-03 -1.338501813399978e-03 -1.325726487253410e-03 -1.313030751975847e-03 -1.300414384579924e-03 + -1.287877161830047e-03 -1.275418860242425e-03 -1.263039256085000e-03 -1.250738125377527e-03 -1.238515243891503e-03 + -1.226370387150198e-03 -1.214303330428686e-03 -1.202313848753781e-03 -1.190401716904072e-03 -1.178566709409950e-03 + -1.166808600553540e-03 -1.155127164368776e-03 -1.143522174641339e-03 -1.131993404908682e-03 -1.120540628460057e-03 + -1.109163618336462e-03 -1.097862147330669e-03 -1.086635987987250e-03 -1.075484912602510e-03 -1.064408693224567e-03 + -1.053407101653284e-03 -1.042479909440293e-03 -1.031626887889031e-03 -1.020847808054677e-03 -1.010142440744185e-03 + -9.995105565163062e-04 -9.889519256815319e-04 -9.784663183021588e-04 -9.680535041922310e-04 -9.577132529175667e-04 + -9.474453337957800e-04 -9.372495158962260e-04 -9.271255680400646e-04 -9.170732588002046e-04 -9.070923565013267e-04 + -8.971826292199097e-04 -8.873438447841799e-04 -8.775757707741368e-04 -8.678781745215758e-04 -8.582508231100357e-04 + -8.486934833748567e-04 -8.392059219031290e-04 -8.297879050337175e-04 -8.204391988572799e-04 -8.111595692162261e-04 + -8.019487817047374e-04 -7.928066016687911e-04 -7.837327942061071e-04 -7.747271241662072e-04 -7.657893561503652e-04 + -7.569192545116259e-04 -7.481165833548297e-04 -7.393811065365680e-04 -7.307125876652048e-04 -7.221107901008979e-04 + -7.135754769555503e-04 -7.051064110928651e-04 -6.967033551282968e-04 -6.883660714290746e-04 -6.800943221142188e-04 + -6.718878690545024e-04 -6.637464738724734e-04 -6.556698979424691e-04 -6.476579023905757e-04 -6.397102480946771e-04 + -6.318266956844107e-04 -6.240070055411865e-04 -6.162509377982073e-04 -6.085582523404222e-04 -6.009287088045789e-04 + -5.933620665791773e-04 -5.858580848044936e-04 -5.784165223725918e-04 -5.710371379272916e-04 -5.637196898641854e-04 + -5.564639363306571e-04 -5.492696352258383e-04 -5.421365442006567e-04 -5.350644206577972e-04 -5.280530217517155e-04 + -5.211021043886574e-04 -5.142114252266256e-04 -5.073807406753944e-04 -5.006098068965282e-04 -4.938983798033417e-04 + -4.872462150609439e-04 -4.806530680862012e-04 -4.741186940477517e-04 -4.676428478660232e-04 -4.612252842131993e-04 + -4.548657575132373e-04 -4.485640219418825e-04 -4.423198314266320e-04 -4.361329396467764e-04 -4.300031000333636e-04 + -4.239300657692146e-04 -4.179135897889377e-04 -4.119534247788992e-04 -4.060493231772384e-04 -4.002010371738815e-04 + -3.944083187105085e-04 -3.886709194805909e-04 -3.829885909293588e-04 -3.773610842538156e-04 -3.717881504027505e-04 + -3.662695400767078e-04 -3.608050037280220e-04 -3.553942915607872e-04 -3.500371535308705e-04 -3.447333393459244e-04 + -3.394825984653615e-04 -3.342846801003669e-04 -3.291393332139113e-04 -3.240463065207213e-04 -3.190053484873128e-04 + -3.140162073319618e-04 -3.090786310247178e-04 -3.041923672874145e-04 -2.993571635936464e-04 -2.945727671687809e-04 + -2.898389249899699e-04 -2.851553837861224e-04 -2.805218900379357e-04 -2.759381899778680e-04 -2.714040295901505e-04 + -2.669191546107985e-04 -2.624833105275885e-04 -2.580962425800702e-04 -2.537576957595766e-04 -2.494674148091992e-04 + -2.452251442238162e-04 -2.410306282500684e-04 -2.368836108863691e-04 -2.327838358829145e-04 -2.287310467416602e-04 + -2.247249867163479e-04 -2.207653988124818e-04 -2.168520257873393e-04 -2.129846101499799e-04 -2.091628941612264e-04 + -2.053866198336741e-04 -2.016555289317006e-04 -1.979693629714440e-04 -1.943278632208271e-04 -1.907307706995364e-04 + -1.871778261790313e-04 -1.836687701825526e-04 -1.802033429851051e-04 -1.767812846134664e-04 -1.734023348461954e-04 + -1.700662332136125e-04 -1.667727189978217e-04 -1.635215312326916e-04 -1.603124087038639e-04 -1.571450899487605e-04 + -1.540193132565684e-04 -1.509348166682475e-04 -1.478913379765377e-04 -1.448886147259418e-04 -1.419263842127452e-04 + -1.390043834849987e-04 -1.361223493425259e-04 -1.332800183369302e-04 -1.304771267715805e-04 -1.277134107016188e-04 + -1.249886059339665e-04 -1.223024480273087e-04 -1.196546722921121e-04 -1.170450137906095e-04 -1.144732073368067e-04 + -1.119389874964883e-04 -1.094420885872035e-04 -1.069822446782823e-04 -1.045591895908213e-04 -1.021726568976901e-04 + -9.982237992353664e-05 -9.750809174477591e-05 -9.522952518959565e-05 -9.298641283796200e-05 -9.077848702160628e-05 + -8.860547982403997e-05 -8.646712308054170e-05 -8.436314837816317e-05 -8.229328705573368e-05 -8.025727020385026e-05 + -7.825482866488277e-05 -7.628569303297861e-05 -7.434959365405157e-05 -7.244626062579433e-05 -7.057542379766778e-05 + -6.873681277090546e-05 -6.693015689851825e-05 -6.515518528528513e-05 -6.341162678775807e-05 -6.169921001426586e-05 + -6.001766332490451e-05 -5.836671483154818e-05 -5.674609239783972e-05 -5.515552363919479e-05 -5.359473592280566e-05 + -5.206345636763345e-05 -5.056141184441200e-05 -4.908832897565164e-05 -4.764393413563057e-05 -4.622795345040445e-05 + -4.484011279779814e-05 -4.348013780740931e-05 -4.214775386061168e-05 -4.084268609054731e-05 -3.956465938213530e-05 + -3.831339837206426e-05 -3.708862744879563e-05 -3.589007075256655e-05 -3.471745217538389e-05 -3.357049536102736e-05 + -3.244892370505214e-05 -3.135246035478249e-05 -3.028082820931898e-05 -2.923374991953224e-05 -2.821094788806574e-05 + -2.721214426933808e-05 -2.623706096953816e-05 -2.528541964662767e-05 -2.435694171034332e-05 -2.345134832219151e-05 + -2.256836039545436e-05 -2.170769859518446e-05 -2.086908333820728e-05 -2.005223479312296e-05 -1.925687288030239e-05 + -1.848271727188923e-05 -1.772948739180174e-05 -1.699690241572846e-05 -1.628468127113303e-05 -1.559254263725005e-05 + -1.492020494508693e-05 -1.426738637742542e-05 -1.363380486881784e-05 -1.301917810559134e-05 -1.242322352584425e-05 + -1.184565831944769e-05 -1.128619942804690e-05 -1.074456354505845e-05 -1.022046711567169e-05 -9.713626336849962e-06 + -9.223757157327673e-06 -8.750575277613572e-06 -8.293796149987950e-06 -7.853134978503862e-06 -7.428306718988174e-06 + -7.019026079039387e-06 -6.625007518028806e-06 -6.245965247101398e-06 -5.881613229173611e-06 -5.531665178935826e-06 + -5.195834562850272e-06 -4.873834599151940e-06 -4.565378257849335e-06 -4.270178260722902e-06 -3.987947081325860e-06 + -3.718396944984835e-06 -3.461239828798292e-06 -3.216187461638275e-06 -2.982951324148931e-06 -2.761242648747174e-06 + -2.550772419623182e-06 -2.351251372739317e-06 -2.162389995830711e-06 -1.983898528405674e-06 -1.815486961744654e-06 + -1.656865038901390e-06 -1.507742254701937e-06 -1.367827855745113e-06 -1.236830840402796e-06 -1.114459958819160e-06 + -1.000423712911517e-06 -8.944303563696066e-07 -7.961878946559278e-07 -7.054040850059410e-07 -6.217864364275963e-07 + -5.450422097015964e-07 -4.748784173815563e-07 -4.110018237935835e-07 -3.531189450367315e-07 -3.009360489826263e-07 + -2.541591552756423e-07 -2.124940353329939e-07 -1.756462123445103e-07 -1.433209612727655e-07 -1.152233088531395e-07 + -9.105803359364405e-08 -7.052966577510520e-08 -5.334248745101847e-08 -3.920053244762000e-08 -2.780758636390822e-08 + -1.886718657157594e-08 -1.208262221505346e-08 -7.156934211516091e-09 -3.792915250849452e-09 -1.693109795682456e-09 + -5.598140813650329e-10 -9.507611597980245e-11 -6.956803396798233e-13 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 6.300708402644514e-01 1.258388491248958e+00 1.884955395267329e+00 2.509773993118936e+00 3.132846724088722e+00 + 3.754176025947199e+00 4.373764334950449e+00 4.991614085840115e+00 5.607727711843414e+00 6.222107644673127e+00 + 6.834756314527613e+00 7.445676150090785e+00 8.054869578532132e+00 8.662339025506713e+00 9.268086915155155e+00 + 9.872115670103643e+00 1.047442771146394e+01 1.107502545883338e+01 1.167391133029486e+01 1.227108774241684e+01 + 1.286655711025335e+01 1.346032184734400e+01 1.405238436571396e+01 1.464274707587396e+01 1.523141238682031e+01 + 1.581838270603489e+01 1.640366043948514e+01 1.698724799162406e+01 1.756914776539024e+01 1.814936216220782e+01 + 1.872789358198653e+01 1.930474442312163e+01 1.987991708249398e+01 2.045341395547002e+01 2.102523743590170e+01 + 2.159538991612661e+01 2.216387378696785e+01 2.273069143773413e+01 2.329584525621969e+01 2.385933762870439e+01 + 2.442117093995359e+01 2.498134757321828e+01 2.553986991023498e+01 2.609674033122581e+01 2.665196121489842e+01 + 2.720553493844604e+01 2.775746387754749e+01 2.830775040636716e+01 2.885639689755497e+01 2.940340572224641e+01 + 2.994877925006260e+01 3.049251984911019e+01 3.103462988598135e+01 3.157511172575387e+01 3.211396773199114e+01 + 3.265120026674207e+01 3.318681169054110e+01 3.372080436240833e+01 3.425318063984938e+01 3.478394287885543e+01 + 3.531309343390323e+01 3.584063465795514e+01 3.636656890245902e+01 3.689089851734838e+01 3.741362585104220e+01 + 3.793475325044511e+01 3.845428306094727e+01 3.897221762642440e+01 3.948855928923788e+01 4.000331039023449e+01 + 4.051647326874672e+01 4.102805026259256e+01 4.153804370807563e+01 4.204645593998501e+01 4.255328929159545e+01 + 4.305854609466724e+01 4.356222867944623e+01 4.406433937466380e+01 4.456488050753698e+01 4.506385440376831e+01 + 4.556126338754594e+01 4.605710978154350e+01 4.655139590692028e+01 4.704412408332113e+01 4.753529662887644e+01 + 4.802491586020213e+01 4.851298409239977e+01 4.899950363905646e+01 4.948447681224488e+01 4.996790592252322e+01 + 5.044979327893531e+01 5.093014118901052e+01 5.140895195876384e+01 5.188622789269569e+01 5.236197129379220e+01 + 5.283618446352500e+01 5.330886970185136e+01 5.378002930721397e+01 5.424966557654122e+01 5.471778080524703e+01 + 5.518437728723094e+01 5.564945731487789e+01 5.611302317905858e+01 5.657507716912919e+01 5.703562157293147e+01 + 5.749465867679278e+01 5.795219076552594e+01 5.840822012242948e+01 5.886274902928739e+01 5.931577976636935e+01 + 5.976731461243042e+01 6.021735584471138e+01 6.066590573893854e+01 6.111296656932380e+01 6.155854060856456e+01 + 6.200263012784382e+01 6.244523739683018e+01 6.288636468367783e+01 6.332601425502637e+01 6.376418837600115e+01 + 6.420088931021304e+01 6.463611931975845e+01 6.506988066521932e+01 6.550217560566324e+01 6.593300639864331e+01 + 6.636237530019827e+01 6.679028456485231e+01 6.721673644561530e+01 6.764173319398260e+01 6.806527705993526e+01 + 6.848737029193968e+01 6.890801513694807e+01 6.932721384039803e+01 6.974496864621281e+01 7.016128179680126e+01 + 7.057615553305772e+01 7.098959209436208e+01 7.140159371857995e+01 7.181216264206230e+01 7.222130109964584e+01 + 7.262901132465278e+01 7.303529554889086e+01 7.344015600265350e+01 7.384359491471953e+01 7.424561451235350e+01 + 7.464621702130542e+01 7.504540466581099e+01 7.544317966859130e+01 7.583954425085314e+01 7.623450063228886e+01 + 7.662805103107640e+01 7.702019766387909e+01 7.741094274584604e+01 7.780028849061186e+01 7.818823711029674e+01 + 7.857479081550632e+01 7.895995181533196e+01 7.934372231735054e+01 7.972610452762453e+01 8.010710065070185e+01 + 8.048671288961613e+01 8.086494344588648e+01 8.124179451951771e+01 8.161726830899998e+01 8.199136701130918e+01 + 8.236409282190675e+01 8.273544793473971e+01 8.310543454224052e+01 8.347405483532732e+01 8.384131100340379e+01 + 8.420720523435928e+01 8.457173971456858e+01 8.493491662889201e+01 8.529673816067557e+01 8.565720649175083e+01 + 8.601632380243488e+01 8.637409227153034e+01 8.673051407632546e+01 8.708559139259404e+01 8.743932639459553e+01 + 8.779172125507475e+01 8.814277814526224e+01 8.849249923487412e+01 8.884088669211206e+01 8.918794268366315e+01 + 8.953366937470025e+01 8.987806892888170e+01 9.022114350835147e+01 9.056289527373893e+01 9.090332638415920e+01 + 9.124243899721289e+01 9.158023526898621e+01 9.191671735405090e+01 9.225188740546426e+01 9.258574757476919e+01 + 9.291830001199423e+01 9.324954686565330e+01 9.357949028274605e+01 9.390813240875761e+01 9.423547538765884e+01 + 9.456152136190587e+01 9.488627247244064e+01 9.520973085869061e+01 9.553189865856881e+01 9.585277800847372e+01 + 9.617237104328957e+01 9.649067989638601e+01 9.680770669961834e+01 9.712345358332752e+01 9.743792267633980e+01 + 9.775111610596721e+01 9.806303599800732e+01 9.837368447674329e+01 9.868306366494375e+01 9.899117568386295e+01 + 9.929802265324074e+01 9.960360669130256e+01 9.990792991475929e+01 1.002109944388075e+02 1.005128023771292e+02 + 1.008133558418923e+02 1.011126569437498e+02 1.014107077918405e+02 1.017075104937888e+02 1.020030671557048e+02 + 1.022973798821839e+02 1.025904507763071e+02 1.028822819396410e+02 1.031728754722381e+02 1.034622334726359e+02 + 1.037503580378579e+02 1.040372512634128e+02 1.043229152432954e+02 1.046073520699855e+02 1.048905638344488e+02 + 1.051725526261366e+02 1.054533205329854e+02 1.057328696414178e+02 1.060112020363415e+02 1.062883198011500e+02 + 1.065642250177225e+02 1.068389197664233e+02 1.071124061261028e+02 1.073846861740966e+02 1.076557619862260e+02 + 1.079256356367981e+02 1.081943091986050e+02 1.084617847429249e+02 1.087280643395214e+02 1.089931500566436e+02 + 1.092570439610261e+02 1.095197481178893e+02 1.097812645909389e+02 1.100415954423667e+02 1.103007427328492e+02 + 1.105587085215492e+02 1.108154948661148e+02 1.110711038226797e+02 1.113255374458631e+02 1.115787977887699e+02 + 1.118308869029903e+02 1.120818068386006e+02 1.123315596441620e+02 1.125801473667217e+02 1.128275720518125e+02 + 1.130738357434525e+02 1.133189404841455e+02 1.135628883148809e+02 1.138056812751336e+02 1.140473214028642e+02 + 1.142878107345187e+02 1.145271513050287e+02 1.147653451478114e+02 1.150023942947697e+02 1.152383007762920e+02 + 1.154730666212520e+02 1.157066938570092e+02 1.159391845094089e+02 1.161705406027814e+02 1.164007641599431e+02 + 1.166298572021957e+02 1.168578217493265e+02 1.170846598196085e+02 1.173103734297999e+02 1.175349645951450e+02 + 1.177584353293732e+02 1.179807876446999e+02 1.182020235518256e+02 1.184221450599367e+02 1.186411541767050e+02 + 1.188590529082881e+02 1.190758432593288e+02 1.192915272329557e+02 1.195061068307831e+02 1.197195840529107e+02 + 1.199319608979236e+02 1.201432393628928e+02 1.203534214433746e+02 1.205625091334111e+02 1.207705044255297e+02 + 1.209774093107436e+02 1.211832257785516e+02 1.213879558169378e+02 1.215916014123720e+02 1.217941645498098e+02 + 1.219956472126918e+02 1.221960513829450e+02 1.223953790409811e+02 1.225936321656979e+02 1.227908127344787e+02 + 1.229869227231922e+02 1.231819641061928e+02 1.233759388563205e+02 1.235688489449006e+02 1.237606963417445e+02 + 1.239514830151486e+02 1.241412109318951e+02 1.243298820572519e+02 1.245174983549723e+02 1.247040617872951e+02 + 1.248895743149450e+02 1.250740378971319e+02 1.252574544915514e+02 1.254398260543848e+02 1.256211545402988e+02 + 1.258014419024456e+02 1.259806900924633e+02 1.261589010604753e+02 1.263360767550905e+02 1.265122191234037e+02 + 1.266873301109948e+02 1.268614116619298e+02 1.270344657187598e+02 1.272064942225218e+02 1.273774991127381e+02 + 1.275474823274168e+02 1.277164458030516e+02 1.278843914746213e+02 1.280513212755909e+02 1.282172371379106e+02 + 1.283821409920162e+02 1.285460347668291e+02 1.287089203897563e+02 1.288707997866905e+02 1.290316748820096e+02 + 1.291915475985773e+02 1.293504198577430e+02 1.295082935793415e+02 1.296651706816931e+02 1.298210530816038e+02 + 1.299759426943650e+02 1.301298414337541e+02 1.302827512120334e+02 1.304346739399515e+02 1.305856115267418e+02 + 1.307355658801240e+02 1.308845389063029e+02 1.310325325099690e+02 1.311795485942984e+02 1.313255890609527e+02 + 1.314706558100791e+02 1.316147507403105e+02 1.317578757487651e+02 1.319000327310469e+02 1.320412235812452e+02 + 1.321814501919354e+02 1.323207144541778e+02 1.324590182575186e+02 1.325963634899898e+02 1.327327520381085e+02 + 1.328681857868777e+02 1.330026666197858e+02 1.331361964188069e+02 1.332687770644004e+02 1.334004104355117e+02 + 1.335310984095713e+02 1.336608428624958e+02 1.337896456686868e+02 1.339175087010318e+02 1.340444338309039e+02 + 1.341704229281615e+02 1.342954778611490e+02 1.344196004966959e+02 1.345427927001174e+02 1.346650563352146e+02 + 1.347863932642737e+02 1.349068053480668e+02 1.350262944458514e+02 1.351448624153706e+02 1.352625111128531e+02 + 1.353792423930132e+02 1.354950581090507e+02 1.356099601126509e+02 1.357239502539848e+02 1.358370303817091e+02 + 1.359492023429656e+02 1.360604679833822e+02 1.361708291470720e+02 1.362802876766338e+02 1.363888454131521e+02 + 1.364965041961966e+02 1.366032658638230e+02 1.367091322525724e+02 1.368141051974712e+02 1.369181865320318e+02 + 1.370213780882520e+02 1.371236816966150e+02 1.372250991860898e+02 1.373256323841308e+02 1.374252831166782e+02 + 1.375240532081575e+02 1.376219444814799e+02 1.377189587580422e+02 1.378150978577266e+02 1.379103635989012e+02 + 1.380047577984192e+02 1.380982822716198e+02 1.381909388323275e+02 1.382827292928526e+02 1.383736554639907e+02 + 1.384637191550231e+02 1.385529221737167e+02 1.386412663263240e+02 1.387287534175829e+02 1.388153852507169e+02 + 1.389011636274354e+02 1.389860903479328e+02 1.390701672108896e+02 1.391533960134716e+02 1.392357785513302e+02 + 1.393173166186022e+02 1.393980120079105e+02 1.394778665103628e+02 1.395568819155532e+02 1.396350600115606e+02 + 1.397124025849501e+02 1.397889114207719e+02 1.398645883025620e+02 1.399394350123420e+02 1.400134533306189e+02 + 1.400866450363854e+02 1.401590119071197e+02 1.402305557187856e+02 1.403012782458326e+02 1.403711812611954e+02 + 1.404402665362946e+02 1.405085358410364e+02 1.405759909438123e+02 1.406426336114995e+02 1.407084656094608e+02 + 1.407734887015446e+02 1.408377046500847e+02 1.409011152159007e+02 1.409637221582975e+02 1.410255272350659e+02 + 1.410865322024819e+02 1.411467388153074e+02 1.412061488267896e+02 1.412647639886614e+02 1.413225860511414e+02 + 1.413796167629335e+02 1.414358578712273e+02 1.414913111216979e+02 1.415459782585062e+02 1.415998610242983e+02 + 1.416529611602062e+02 1.417052804058473e+02 1.417568204993247e+02 1.418075831772267e+02 1.418575701746277e+02 + 1.419067832250873e+02 1.419552240606508e+02 1.420028944118490e+02 1.420497960076983e+02 1.420959305757007e+02 + 1.421412998418438e+02 1.421859055306007e+02 1.422297493649299e+02 1.422728330662759e+02 1.423151583545685e+02 + 1.423567269482230e+02 1.423975405641403e+02 1.424376009177069e+02 1.424769097227951e+02 1.425154686917625e+02 + 1.425532795354521e+02 1.425903439631929e+02 1.426266636827993e+02 1.426622404005712e+02 1.426970758212940e+02 + 1.427311716482388e+02 1.427645295831623e+02 1.427971513263067e+02 1.428290385763997e+02 1.428601930306546e+02 + 1.428906163847705e+02 1.429203103329318e+02 1.429492765678085e+02 1.429775167805562e+02 1.430050326608160e+02 + 1.430318258967150e+02 1.430578981748652e+02 1.430832511803645e+02 1.431078865967964e+02 1.431318061062300e+02 + 1.431550113892199e+02 1.431775041248061e+02 1.431992859905144e+02 1.432203586623562e+02 1.432407238148283e+02 + 1.432603831209130e+02 1.432793382520785e+02 1.432975908782783e+02 1.433151426679515e+02 1.433319952880228e+02 + 1.433481504039025e+02 1.433636096794865e+02 1.433783747771561e+02 1.433924473577783e+02 1.434058290807056e+02 + 1.434185216037763e+02 1.434305265833140e+02 1.434418456741278e+02 1.434524805295127e+02 1.434624328012490e+02 + 1.434717041396027e+02 1.434802961933252e+02 1.434882106096537e+02 1.434954490343109e+02 1.435020131115049e+02 + 1.435079044839297e+02 1.435131247927644e+02 1.435176756776740e+02 1.435215587768092e+02 1.435247757268060e+02 + 1.435273281627858e+02 1.435292177183560e+02 1.435304460256093e+02 1.435310147151242e+02 1.435309254159644e+02 + 1.435301797556794e+02 1.435287793603044e+02 1.435267258543599e+02 1.435240208608521e+02 1.435206660012728e+02 + 1.435166628955992e+02 1.435120131622943e+02 1.435067184183065e+02 1.435007802790698e+02 1.434942003585039e+02 + 1.434869802690138e+02 1.434791216214903e+02 1.434706260253097e+02 1.434614950883338e+02 1.434517304169103e+02 + 1.434413336158718e+02 1.434303062885371e+02 1.434186500367103e+02 1.434063664606812e+02 1.433934571592249e+02 + 1.433799237296022e+02 1.433657677675597e+02 1.433509908673294e+02 1.433355946216286e+02 1.433195806216605e+02 + 1.433029504571139e+02 1.432857057161631e+02 1.432678479854677e+02 1.432493788501731e+02 1.432302998939104e+02 + 1.432106126987961e+02 1.431903188454322e+02 1.431694199129064e+02 1.431479174787919e+02 1.431258131191476e+02 + 1.431031084085178e+02 1.430798049199323e+02 1.430559042249068e+02 1.430314078934423e+02 1.430063174940254e+02 + 1.429806345936283e+02 1.429543607577087e+02 1.429274975502101e+02 1.429000465335614e+02 1.428720092686770e+02 + 1.428433873149569e+02 1.428141822302868e+02 1.427843955710378e+02 1.427540288920667e+02 1.427230837467158e+02 + 1.426915616868131e+02 1.426594642626719e+02 1.426267930230913e+02 1.425935495153558e+02 1.425597352852356e+02 + 1.425253518769865e+02 1.424904008333497e+02 1.424548836955522e+02 1.424188020033061e+02 1.423821572948099e+02 + 1.423449511067467e+02 1.423071849742859e+02 1.422688604310821e+02 1.422299790092756e+02 1.421905422394923e+02 + 1.421505516508435e+02 1.421100087709262e+02 1.420689151258230e+02 1.420272722401020e+02 1.419850816368168e+02 + 1.419423448375067e+02 1.418990633621966e+02 1.418552387293967e+02 1.418108724561031e+02 1.417659660577972e+02 + 1.417205210484463e+02 1.416745389405029e+02 1.416280212449052e+02 1.415809694710770e+02 1.415333851269278e+02 + 1.414852697188524e+02 1.414366247517312e+02 1.413874517289305e+02 1.413377521523019e+02 1.412875275221824e+02 + 1.412367793373950e+02 1.411855090952479e+02 1.411337182915350e+02 1.410814084205359e+02 1.410285809750155e+02 + 1.409752374462244e+02 1.409213793238989e+02 1.408670080962608e+02 1.408121252500173e+02 1.407567322703613e+02 + 1.407008306409712e+02 1.406444218440110e+02 1.405875073601305e+02 1.405300886684646e+02 1.404721672466342e+02 + 1.404137445707455e+02 1.403548221153905e+02 1.402954013536464e+02 1.402354837570763e+02 1.401750707957289e+02 + 1.401141639381381e+02 1.400527646513238e+02 1.399908744007911e+02 1.399284946505310e+02 1.398656268630199e+02 + 1.398022724992196e+02 1.397384330185777e+02 1.396741098790275e+02 1.396093045369875e+02 1.395440184473619e+02 + 1.394782530635406e+02 1.394120098373991e+02 1.393452902192982e+02 1.392780956580844e+02 1.392104276010898e+02 + 1.391422874941322e+02 1.390736767815147e+02 1.390045969060261e+02 1.389350493089407e+02 1.388650354300186e+02 + 1.387945567075052e+02 1.387236145781316e+02 1.386522104771143e+02 1.385803458381556e+02 1.385080220934433e+02 + 1.384352406736507e+02 1.383620030079367e+02 1.382883105239458e+02 1.382141646478080e+02 1.381395668041390e+02 + 1.380645184160398e+02 1.379890209050974e+02 1.379130756913839e+02 1.378366841934573e+02 1.377598478283609e+02 + 1.376825680116239e+02 1.376048461572608e+02 1.375266836777718e+02 1.374480819841426e+02 1.373690424858444e+02 + 1.372895665908342e+02 1.372096557055544e+02 1.371293112349330e+02 1.370485345823834e+02 1.369673271498050e+02 + 1.368856903375823e+02 1.368036255445856e+02 1.367211341681708e+02 1.366382176041793e+02 1.365548772469381e+02 + 1.364711144892596e+02 1.363869307224420e+02 1.363023273362690e+02 1.362173057190099e+02 1.361318672574193e+02 + 1.360460133367378e+02 1.359597453406913e+02 1.358730646514912e+02 1.357859726498348e+02 1.356984707149045e+02 + 1.356105602243687e+02 1.355222425543812e+02 1.354335190795813e+02 1.353443911730938e+02 1.352548602065295e+02 + 1.351649275499842e+02 1.350745945720396e+02 1.349838626397630e+02 1.348927331187070e+02 1.348012073729101e+02 + 1.347092867648962e+02 1.346169726556746e+02 1.345242664047404e+02 1.344311693700744e+02 1.343376829081425e+02 + 1.342438083738967e+02 1.341495471207740e+02 1.340549005006977e+02 1.339598698640759e+02 1.338644565598027e+02 + 1.337686619352579e+02 1.336724873363063e+02 1.335759341072989e+02 1.334790035910719e+02 1.333816971289471e+02 + 1.332840160607320e+02 1.331859617247196e+02 1.330875354576884e+02 1.329887385949026e+02 1.328895724701119e+02 + 1.327900384155515e+02 1.326901377619423e+02 1.325898718384906e+02 1.324892419728885e+02 1.323882494913135e+02 + 1.322868957184288e+02 1.321851819773829e+02 1.320831095898100e+02 1.319806798758302e+02 1.318778941540486e+02 + 1.317747537415563e+02 1.316712599539298e+02 1.315674141052312e+02 1.314632175080081e+02 1.313586714732937e+02 + 1.312537773106069e+02 1.311485363279519e+02 1.310429498318188e+02 1.309370191271830e+02 1.308307455175056e+02 + 1.307241303047332e+02 1.306171747892980e+02 1.305098802701177e+02 1.304022480445958e+02 1.302942794086211e+02 + 1.301859756565681e+02 1.300773380812968e+02 1.299683679741528e+02 1.298590666249674e+02 1.297494353220572e+02 + 1.296394753522245e+02 1.295291880007573e+02 1.294185745514290e+02 1.293076362864986e+02 1.291963744867108e+02 + 1.290847904312955e+02 1.289728853979686e+02 1.288606606629315e+02 1.287481175008708e+02 1.286352571849591e+02 + 1.285220809868543e+02 1.284085901767001e+02 1.282947860231254e+02 1.281806697932451e+02 1.280662427526594e+02 + 1.279515061654541e+02 1.278364612942007e+02 1.277211093999561e+02 1.276054517422628e+02 1.274894895791490e+02 + 1.273732241671283e+02 1.272566567612000e+02 1.271397886148489e+02 1.270226209800453e+02 1.269051551072453e+02 + 1.267873922453903e+02 1.266693336419074e+02 1.265509805427093e+02 1.264323341921942e+02 1.263133958332459e+02 + 1.261941667072336e+02 1.260746480540126e+02 1.259548411119230e+02 1.258347471177910e+02 1.257143673069283e+02 + 1.255937029131321e+02 1.254727551686851e+02 1.253515253043556e+02 1.252300145493975e+02 1.251082241315504e+02 + 1.249861552770393e+02 1.248638092105747e+02 1.247411871553528e+02 1.246182903330555e+02 1.244951199638499e+02 + 1.243716772663891e+02 1.242479634578113e+02 1.241239797537407e+02 1.239997273682869e+02 1.238752075140449e+02 + 1.237504214020955e+02 1.236253702420050e+02 1.235000552418253e+02 1.233744776080937e+02 1.232486385458333e+02 + 1.231225392585526e+02 1.229961809482458e+02 1.228695648153925e+02 1.227426920589580e+02 1.226155638763932e+02 + 1.224881814636345e+02 1.223605460151038e+02 1.222326587237086e+02 1.221045207808422e+02 1.219761333763830e+02 + 1.218474976986954e+02 1.217186149346293e+02 1.215894862695199e+02 1.214601128871883e+02 1.213304959699409e+02 + 1.212006366985698e+02 1.210705362523527e+02 1.209401958090528e+02 1.208096165449189e+02 1.206787996346854e+02 + 1.205477462515721e+02 1.204164575672845e+02 1.202849347520138e+02 1.201531789744366e+02 1.200211914017149e+02 + 1.198889731994967e+02 1.197565255319153e+02 1.196238495615895e+02 1.194909464496238e+02 1.193578173556082e+02 + 1.192244634376185e+02 1.190908858522157e+02 1.189570857544465e+02 1.188230642978433e+02 1.186888226344241e+02 + 1.185543619146921e+02 1.184196832876364e+02 1.182847879007317e+02 1.181496768999381e+02 1.180143514297012e+02 + 1.178788126329524e+02 1.177430616511085e+02 1.176070996240720e+02 1.174709276902308e+02 1.173345469864585e+02 + 1.171979586481143e+02 1.170611638090428e+02 1.169241636015743e+02 1.167869591565246e+02 1.166495516031952e+02 + 1.165119420693729e+02 1.163741316813304e+02 1.162361215638258e+02 1.160979128401026e+02 1.159595066318902e+02 + 1.158209040594034e+02 1.156821062413426e+02 1.155431142948936e+02 1.154039293357280e+02 1.152645524780030e+02 + 1.151249848343611e+02 1.149852275159305e+02 1.148452816323250e+02 1.147051482916441e+02 1.145648286004727e+02 + 1.144243236638811e+02 1.142836345854255e+02 1.141427624671476e+02 1.140017084095744e+02 1.138604735117188e+02 + 1.137190588710791e+02 1.135774655836392e+02 1.134356947438686e+02 1.132937474447223e+02 1.131516247776408e+02 + 1.130093278325506e+02 1.128668576978631e+02 1.127242154604758e+02 1.125814022057714e+02 1.124384190176186e+02 + 1.122952669783712e+02 1.121519471688689e+02 1.120084606684367e+02 1.118648085548855e+02 1.117209919045116e+02 + 1.115770117920967e+02 1.114328692909082e+02 1.112885654726993e+02 1.111441014077084e+02 1.109994781646597e+02 + 1.108546968107629e+02 1.107097584117132e+02 1.105646640316914e+02 1.104194147333641e+02 1.102740115778830e+02 + 1.101284556248858e+02 1.099827479324956e+02 1.098368895573211e+02 1.096908815544564e+02 1.095447249774814e+02 + 1.093984208784615e+02 1.092519703079476e+02 1.091053743149763e+02 1.089586339470695e+02 1.088117502502351e+02 + 1.086647242689661e+02 1.085175570462414e+02 1.083702496235253e+02 1.082228030407677e+02 1.080752183364042e+02 + 1.079274965473558e+02 1.077796387090291e+02 1.076316458553164e+02 1.074835190185953e+02 1.073352592297292e+02 + 1.071868675180671e+02 1.070383449114433e+02 1.068896924361780e+02 1.067409111170767e+02 1.065920019774305e+02 + 1.064429660390163e+02 1.062938043220964e+02 1.061445178454185e+02 1.059951076262163e+02 1.058455746802086e+02 + 1.056959200216001e+02 1.055461446630809e+02 1.053962496158267e+02 1.052462358894988e+02 1.050961044922441e+02 + 1.049458564306950e+02 1.047954927099695e+02 1.046450143336711e+02 1.044944223038890e+02 1.043437176211978e+02 + 1.041929012846579e+02 1.040419742918150e+02 1.038909376387006e+02 1.037397923198316e+02 1.035885393282105e+02 + 1.034371796553255e+02 1.032857142911503e+02 1.031341442241440e+02 1.029824704412515e+02 1.028306939279031e+02 + 1.026788156680149e+02 1.025268366439883e+02 1.023747578367104e+02 1.022225802255538e+02 1.020703047883768e+02 + 1.019179325015231e+02 1.017654643398222e+02 1.016129012765888e+02 1.014602442836236e+02 1.013074943312125e+02 + 1.011546523881273e+02 1.010017194216250e+02 1.008486963974485e+02 1.006955842798261e+02 1.005423840314716e+02 + 1.003890966135846e+02 1.002357229858501e+02 1.000822641064387e+02 9.992872093200657e+01 9.977509441769536e+01 + 9.962138551713257e+01 9.946759518243087e+01 9.931372436418886e+01 9.915977401149044e+01 9.900574507190525e+01 + 9.885163849148847e+01 9.869745521478075e+01 9.854319618480841e+01 9.838886234308329e+01 9.823445462960282e+01 + 9.807997398284998e+01 9.792542133979333e+01 9.777079763588698e+01 9.761610380507069e+01 9.746134077976963e+01 + 9.730650949089471e+01 9.715161086784227e+01 9.699664583849429e+01 9.684161532921836e+01 9.668652026486750e+01 + 9.653136156878041e+01 9.637614016278137e+01 9.622085696718013e+01 9.606551290077211e+01 9.591010888083821e+01 + 9.575464582314495e+01 9.559912464194447e+01 9.544354624997435e+01 9.528791155845782e+01 9.513222147710371e+01 + 9.497647691410629e+01 9.482067877614557e+01 9.466482796838697e+01 9.450892539448159e+01 9.435297195656602e+01 + 9.419696855526250e+01 9.404091608967873e+01 9.388481545740812e+01 9.372866755452942e+01 9.357247327560728e+01 + 9.341623351369167e+01 9.325994916031811e+01 9.310362110550788e+01 9.294725023776763e+01 9.279083744408979e+01 + 9.263438360995207e+01 9.247788961931805e+01 9.232135635463666e+01 9.216478469684255e+01 9.200817552535575e+01 + 9.185152971808213e+01 9.169484815141283e+01 9.153813170022484e+01 9.138138123788045e+01 9.122459763622776e+01 + 9.106778176560022e+01 9.091093449481704e+01 9.075405669118287e+01 9.059714922048799e+01 9.044021294700819e+01 + 9.028324873350495e+01 9.012625744122512e+01 8.996923992990135e+01 8.981219705775169e+01 8.965512968147981e+01 + 8.949803865627491e+01 8.934092483581189e+01 8.918378907225100e+01 8.902663221623831e+01 8.886945511690526e+01 + 8.871225862186895e+01 8.855504357723201e+01 8.839781082758265e+01 8.824056121599466e+01 8.808329558402740e+01 + 8.792601477172582e+01 8.776871961762036e+01 8.761141095872711e+01 8.745408963054764e+01 8.729675646706922e+01 + 8.713941230076453e+01 8.698205796259197e+01 8.682469428199539e+01 8.666732208690431e+01 8.650994220373366e+01 + 8.635255545738416e+01 8.619516267124189e+01 8.603776466717866e+01 8.588036226555170e+01 8.572295628520395e+01 + 8.556554754346379e+01 8.540813685614532e+01 8.525072503754802e+01 8.509331290045711e+01 8.493590125614324e+01 + 8.477849091436276e+01 8.462108268335747e+01 8.446367736985484e+01 8.430627577906779e+01 8.414887871469494e+01 + 8.399148697892035e+01 8.383410137241380e+01 8.367672269433045e+01 8.351935174231120e+01 8.336198931248241e+01 + 8.320463619945609e+01 8.304729319632969e+01 8.288996109468637e+01 8.273264068459483e+01 8.257533275460922e+01 + 8.241803809176943e+01 8.226075748160076e+01 8.210349170811423e+01 8.194624155380627e+01 8.178900779965905e+01 + 8.163179122514011e+01 8.147459260820276e+01 8.131741272528569e+01 8.116025235131333e+01 8.100311225969554e+01 + 8.084599322232786e+01 8.068889600959132e+01 8.053182139035255e+01 8.037477013196370e+01 8.021774300026262e+01 + 8.006074075957254e+01 7.990376417270242e+01 7.974681400094667e+01 7.958989100408539e+01 7.943299594038415e+01 + 7.927612956659409e+01 7.911929263795197e+01 7.896248590818014e+01 7.880571012948634e+01 7.864896605256419e+01 + 7.849225442659255e+01 7.833557599923610e+01 7.817893151664492e+01 7.802232172345477e+01 7.786574736278688e+01 + 7.770920917624815e+01 7.755270790393094e+01 7.739624428441330e+01 7.723981905475877e+01 7.708343295051642e+01 + 7.692708670572107e+01 7.677078105289279e+01 7.661451672303755e+01 7.645829444564673e+01 7.630211494869724e+01 + 7.614597895865164e+01 7.598988720045803e+01 7.583384039755006e+01 7.567783927184703e+01 7.552188454375366e+01 + 7.536597693216039e+01 7.521011715444310e+01 7.505430592646336e+01 7.489854396256820e+01 7.474283197559029e+01 + 7.458717067684783e+01 7.443156077614464e+01 7.427600298176998e+01 7.412049800049887e+01 7.396504653759173e+01 + 7.380964929679465e+01 7.365430698033923e+01 7.349902028894267e+01 7.334378992180771e+01 7.318861657662274e+01 + 7.303350094956154e+01 7.287844373528371e+01 7.272344562693418e+01 7.256850731614361e+01 7.241362949302810e+01 + 7.225881284618943e+01 7.210405806271493e+01 7.194936582817741e+01 7.179473682663537e+01 7.164017174063279e+01 + 7.148567125119925e+01 7.133123603784988e+01 7.117686677858542e+01 7.102256414989209e+01 7.086832882674184e+01 + 7.071416148259199e+01 7.056006278938563e+01 7.040603341755120e+01 7.025207403600290e+01 7.009818531214037e+01 + 6.994436791184893e+01 6.979062249949932e+01 6.963694973794802e+01 6.948335028853694e+01 6.932982481109363e+01 + 6.917637396393120e+01 6.902299840384831e+01 6.886969878612915e+01 6.871647576454359e+01 6.856332999134696e+01 + 6.841026211728023e+01 6.825727279156986e+01 6.810436266192799e+01 6.795153237455222e+01 6.779878257412578e+01 + 6.764611390381742e+01 6.749352700528156e+01 6.734102251865801e+01 6.718860108257236e+01 6.703626333413560e+01 + 6.688400990894438e+01 6.673184144108089e+01 6.657975856311283e+01 6.642776190609362e+01 6.627585209956207e+01 + 6.612402977154272e+01 6.597229554854552e+01 6.582065005556615e+01 6.566909391608571e+01 6.551762775207096e+01 + 6.536625218397421e+01 6.521496783073333e+01 6.506377530977173e+01 6.491267523699847e+01 6.476166822680808e+01 + 6.461075489208073e+01 6.445993584418208e+01 6.430921169296353e+01 6.415858304676178e+01 6.400805051239938e+01 + 6.385761469518417e+01 6.370727619890986e+01 6.355703562585544e+01 6.340689357678570e+01 6.325685065095082e+01 + 6.310690744608669e+01 6.295706455841461e+01 6.280732258264167e+01 6.265768211196028e+01 6.250814373804862e+01 + 6.235870805107031e+01 6.220937563967463e+01 6.206014709099631e+01 6.191102299065577e+01 6.176200392275896e+01 + 6.161309046989736e+01 6.146428321314807e+01 6.131558273207371e+01 6.116698960472251e+01 6.101850440762821e+01 + 6.087012771581022e+01 6.072186010277339e+01 6.057370214050827e+01 6.042565439949085e+01 6.027771744868281e+01 + 6.012989185553128e+01 5.998217818596908e+01 5.983457700441446e+01 5.968708887377138e+01 5.953971435542925e+01 + 5.939245400926315e+01 5.924530839363363e+01 5.909827806538689e+01 5.895136357985464e+01 5.880456549085422e+01 + 5.865788435068842e+01 5.851132071014579e+01 5.836487511850023e+01 5.821854812351140e+01 5.807234027142437e+01 + 5.792625210696992e+01 5.778028417336427e+01 5.763443701230933e+01 5.748871116399243e+01 5.734310716708664e+01 + 5.719762555875045e+01 5.705226687462802e+01 5.690703164884900e+01 5.676192041402867e+01 5.661693370126787e+01 + 5.647207204015296e+01 5.632733595875593e+01 5.618272598363428e+01 5.603824263983114e+01 5.589388645087514e+01 + 5.574965793878054e+01 5.560555762404712e+01 5.546158602566030e+01 5.531774366109093e+01 5.517403104629560e+01 + 5.503044869571632e+01 5.488699712228079e+01 5.474367683740217e+01 5.460048835097929e+01 5.445743217139644e+01 + 5.431450880552358e+01 5.417171875871616e+01 5.402906253481526e+01 5.388654063614747e+01 5.374415356352502e+01 + 5.360190181624563e+01 5.345978589209265e+01 5.331780628733492e+01 5.317596349672697e+01 5.303425801350876e+01 + 5.289269032940597e+01 5.275126093462967e+01 5.260997031787668e+01 5.246881896632923e+01 5.232780736565524e+01 + 5.218693600000810e+01 5.204620535202689e+01 5.190561590283608e+01 5.176516813204589e+01 5.162486251775203e+01 + 5.148469953653571e+01 5.134467966346387e+01 5.120480337208885e+01 5.106507113444869e+01 5.092548342106686e+01 + 5.078604070095258e+01 5.064674344160046e+01 5.050759210899081e+01 5.036858716758939e+01 5.022972908034766e+01 + 5.009101830870252e+01 4.995245531257654e+01 4.981404055037778e+01 4.967577447899995e+01 4.953765755382224e+01 + 4.939969022870950e+01 4.926187295601203e+01 4.912420618656584e+01 4.898669036969236e+01 4.884932595319873e+01 + 4.871211338337756e+01 4.857505310500706e+01 4.843814556135100e+01 4.830139119415876e+01 4.816479044366521e+01 + 4.802834374859087e+01 4.789205154614175e+01 4.775591427200953e+01 4.761993236037132e+01 4.748410624388995e+01 + 4.734843635371367e+01 4.721292311947641e+01 4.707756696929765e+01 4.694236832978237e+01 4.680732762602122e+01 + 4.667244528159031e+01 4.653772171855141e+01 4.640315735745180e+01 4.626875261732437e+01 4.613450791568750e+01 + 4.600042366854529e+01 4.586650029038721e+01 4.573273819418849e+01 4.559913779140976e+01 4.546569949199737e+01 + 4.533242370438309e+01 4.519931083548441e+01 4.506636129070425e+01 4.493357547393122e+01 4.480095378753936e+01 + 4.466849663238845e+01 4.453620440782364e+01 4.440407751167585e+01 4.427211634026140e+01 4.414032128838230e+01 + 4.400869274932603e+01 4.387723111486573e+01 4.374593677526001e+01 4.361481011925318e+01 4.348385153407495e+01 + 4.335306140544076e+01 4.322244011755150e+01 4.309198805309371e+01 4.296170559323940e+01 4.283159311764631e+01 + 4.270165100445755e+01 4.257187963030194e+01 4.244227937029384e+01 4.231285059803313e+01 4.218359368560534e+01 + 4.205450900358145e+01 4.192559692101814e+01 4.179685780545756e+01 4.166829202292748e+01 4.153989993794121e+01 + 4.141168191349765e+01 4.128363831108125e+01 4.115576949066206e+01 4.102807581069564e+01 4.090055762812319e+01 + 4.077321529837138e+01 4.064604917535259e+01 4.051905961146462e+01 4.039224695759095e+01 4.026561156310054e+01 + 4.013915377584802e+01 4.001287394217346e+01 3.988677240690264e+01 3.976084951334678e+01 3.963510560330277e+01 + 3.950954101705297e+01 3.938415609336541e+01 3.925895116949360e+01 3.913392658117670e+01 3.900908266263934e+01 + 3.888441974659184e+01 3.875993816422995e+01 3.863563824523513e+01 3.851152031777427e+01 3.838758470849993e+01 + 3.826383174255022e+01 3.814026174354878e+01 3.801687503360487e+01 3.789367193331322e+01 3.777065276175429e+01 + 3.764781783649393e+01 3.752516747358370e+01 3.740270198756063e+01 3.728042169144741e+01 3.715832689675219e+01 + 3.703641791346880e+01 3.691469505007653e+01 3.679315861354036e+01 3.667180890931068e+01 3.655064624132363e+01 + 3.642967091200075e+01 3.630888322224930e+01 3.618828347146196e+01 3.606787195751711e+01 3.594764897677859e+01 + 3.582761482409590e+01 3.570776979280402e+01 3.558811417472360e+01 3.546864826016076e+01 3.534937233790725e+01 + 3.523028669524034e+01 3.511139161792294e+01 3.499268739020344e+01 3.487417429481588e+01 3.475585261297979e+01 + 3.463772262440038e+01 3.451978460726826e+01 3.440203883825978e+01 3.428448559253675e+01 3.416712514374659e+01 + 3.404995776402230e+01 3.393298372398237e+01 3.381620329273100e+01 3.369961673785781e+01 3.358322432543807e+01 + 3.346702632003260e+01 3.335102298468780e+01 3.323521458093560e+01 3.311960136879357e+01 3.300418360676475e+01 + 3.288896155183785e+01 3.277393545948706e+01 3.265910558367220e+01 3.254447217683863e+01 3.243003548991729e+01 + 3.231579577232467e+01 3.220175327196286e+01 3.208790823521946e+01 3.197426090696774e+01 3.186081153056639e+01 + 3.174756034785984e+01 3.163450759917793e+01 3.152165352333620e+01 3.140899835763565e+01 3.129654233786293e+01 + 3.118428569829018e+01 3.107222867167521e+01 3.096037148926128e+01 3.084871438077734e+01 3.073725757443779e+01 + 3.062600129694268e+01 3.051494577347760e+01 3.040409122771371e+01 3.029343788180776e+01 3.018298595640201e+01 + 3.007273567062436e+01 2.996268724208821e+01 2.985284088689260e+01 2.974319681962206e+01 2.963375525334677e+01 + 2.952451639962239e+01 2.941548046849025e+01 2.930664766847711e+01 2.919801820659548e+01 2.908959228834326e+01 + 2.898137011770405e+01 2.887335189714690e+01 2.876553782762659e+01 2.865792810858327e+01 2.855052293794284e+01 + 2.844332251211663e+01 2.833632702600164e+01 2.822953667298036e+01 2.812295164492090e+01 2.801657213217691e+01 + 2.791039832358764e+01 2.780443040647786e+01 2.769866856665795e+01 2.759311298842385e+01 2.748776385455705e+01 + 2.738262134632460e+01 2.727768564347918e+01 2.717295692425897e+01 2.706843536538775e+01 2.696412114207484e+01 + 2.686001442801519e+01 2.675611539538925e+01 2.665242421486307e+01 2.654894105558828e+01 2.644566608520204e+01 + 2.634259946982713e+01 2.623974137407184e+01 2.613709196103008e+01 2.603465139228129e+01 2.593241982789051e+01 + 2.583039742640830e+01 2.572858434487086e+01 2.562698073879988e+01 2.552558676220269e+01 2.542440256757213e+01 + 2.532342830588666e+01 2.522266412661024e+01 2.512211017769248e+01 2.502176660556847e+01 2.492163355515898e+01 + 2.482171116987022e+01 2.472199959159408e+01 2.462249896070794e+01 2.452320941607479e+01 2.442413109504316e+01 + 2.432526413344719e+01 2.422660866560654e+01 2.412816482432648e+01 2.402993274089780e+01 2.393191254509692e+01 + 2.383410436518578e+01 2.373650832791191e+01 2.363912455850837e+01 2.354195318069388e+01 2.344499431667258e+01 + 2.334824808713436e+01 2.325171461125452e+01 2.315539400669402e+01 2.305928638959937e+01 2.296339187460259e+01 + 2.286771057482138e+01 2.277224260185888e+01 2.267698806580393e+01 2.258194707523082e+01 2.248711973719949e+01 + 2.239250615725538e+01 2.229810643942959e+01 2.220392068623867e+01 2.210994899868487e+01 2.201619147625588e+01 + 2.192264821692506e+01 2.182931931715126e+01 2.173620487187897e+01 2.164330497453819e+01 2.155061971704453e+01 + 2.145814918979911e+01 2.136589348168871e+01 2.127385268008558e+01 2.118202687084761e+01 2.109041613831823e+01 + 2.099902056532644e+01 2.090784023318678e+01 2.081687522169943e+01 2.072612560915005e+01 2.063559147230996e+01 + 2.054527288643595e+01 2.045516992527048e+01 2.036528266104148e+01 2.027561116446252e+01 2.018615550473271e+01 + 2.009691574953672e+01 2.000789196504483e+01 1.991908421591283e+01 1.983049256528212e+01 1.974211707477964e+01 + 1.965395780451792e+01 1.956601481309504e+01 1.947828815759470e+01 1.939077789358607e+01 1.930348407512398e+01 + 1.921640675474878e+01 1.912954598348641e+01 1.904290181084835e+01 1.895647428483170e+01 1.887026345191906e+01 + 1.878426935707866e+01 1.869849204376425e+01 1.861293155391521e+01 1.852758792795640e+01 1.844246120479831e+01 + 1.835755142183701e+01 1.827285861495410e+01 1.818838281851673e+01 1.810412406537770e+01 1.802008238687527e+01 + 1.793625781283339e+01 1.785265037156146e+01 1.776926008985454e+01 1.768608699299318e+01 1.760313110474359e+01 + 1.752039244735743e+01 1.743787104157206e+01 1.735556690661030e+01 1.727348006018060e+01 1.719161051847695e+01 + 1.710995829617890e+01 1.702852340645164e+01 1.694730586094581e+01 1.686630566979774e+01 1.678552284162922e+01 + 1.670495738354768e+01 1.662460930114609e+01 1.654447859850301e+01 1.646456527818252e+01 1.638486934123434e+01 + 1.630539078719367e+01 1.622612961408138e+01 1.614708581840382e+01 1.606825939515297e+01 1.598965033780631e+01 + 1.591125863832698e+01 1.583308428716358e+01 1.575512727325039e+01 1.567738758400717e+01 1.559986520533931e+01 + 1.552256012163770e+01 1.544547231577888e+01 1.536860176912488e+01 1.529194846152338e+01 1.521551237130752e+01 + 1.513929347529613e+01 1.506329174879352e+01 1.498750716558961e+01 1.491193969795986e+01 1.483658931666533e+01 + 1.476145599095261e+01 1.468653968855391e+01 1.461184037568694e+01 1.453735801705504e+01 1.446309257584711e+01 + 1.438904401373757e+01 1.431521229088648e+01 1.424159736593938e+01 1.416819919602747e+01 1.409501773676744e+01 + 1.402205294226162e+01 1.394930476509783e+01 1.387677315634954e+01 1.380445806557572e+01 1.373235944082095e+01 + 1.366047722861535e+01 1.358881137397464e+01 1.351736182040008e+01 1.344612850987852e+01 1.337511138288234e+01 + 1.330431037836955e+01 1.323372543378366e+01 1.316335648505382e+01 1.309320346659467e+01 1.302326631130648e+01 + 1.295354495057505e+01 1.288403931427179e+01 1.281474933075362e+01 1.274567492686310e+01 1.267681602792827e+01 + 1.260817255776283e+01 1.253974443866598e+01 1.247153159142252e+01 1.240353393530281e+01 1.233575138806278e+01 + 1.226818386594392e+01 1.220083128367332e+01 1.213369355446357e+01 1.206677059001291e+01 1.200006230050511e+01 + 1.193356859460948e+01 1.186728937948095e+01 1.180122456075998e+01 1.173537404257264e+01 1.166973772753050e+01 + 1.160431551673077e+01 1.153910730975617e+01 1.147411300467506e+01 1.140933249804127e+01 1.134476568489430e+01 + 1.128041245875913e+01 1.121627271164637e+01 1.115234633405217e+01 1.108863321495826e+01 1.102513324183191e+01 + 1.096184630062602e+01 1.089877227577898e+01 1.083591105021483e+01 1.077326250534308e+01 1.071082652105891e+01 + 1.064860297574299e+01 1.058659174626161e+01 1.052479270796660e+01 1.046320573469538e+01 1.040183069877089e+01 + 1.034066747100171e+01 1.027971592068191e+01 1.021897591559121e+01 1.015844732199483e+01 1.009813000464360e+01 + 1.003802382677389e+01 9.978128650107653e+00 9.918444334852426e+00 9.858970739701276e+00 9.799707721832871e+00 + 9.740655136911421e+00 9.681812839086733e+00 9.623180680994153e+00 9.564758513754628e+00 9.506546186974631e+00 + 9.448543548746249e+00 9.390750445647093e+00 9.333166722740389e+00 9.275792223574880e+00 9.218626790184928e+00 + 9.161670263090413e+00 9.104922481296834e+00 9.048383282295211e+00 8.992052502062172e+00 8.935929975059876e+00 + 8.880015534236088e+00 8.824309011024104e+00 8.768810235342828e+00 8.713519035596686e+00 8.658435238675722e+00 + 8.603558669955500e+00 8.548889153297198e+00 8.494426511047514e+00 8.440170564038764e+00 8.386121131588787e+00 + 8.332278031501030e+00 8.278641080064466e+00 8.225210092053684e+00 8.171984880728791e+00 8.118965257835516e+00 + 8.066151033605102e+00 8.013542016754393e+00 7.961138014485805e+00 7.908938832487298e+00 7.856944274932425e+00 + 7.805154144480282e+00 7.753568242275560e+00 7.702186367948488e+00 7.651008319614897e+00 7.600033893876155e+00 + 7.549262885819230e+00 7.498695089016620e+00 7.448330295526429e+00 7.398168295892292e+00 7.348208879143454e+00 + 7.298451832794686e+00 7.248896942846365e+00 7.199543993784400e+00 7.150392768580307e+00 7.101443048691126e+00 + 7.052694614059514e+00 7.004147243113651e+00 6.955800712767317e+00 6.907654798419837e+00 6.859709273956130e+00 + 6.811963911746652e+00 6.764418482647465e+00 6.717072756000151e+00 6.669926499631911e+00 6.622979479855476e+00 + 6.576231461469172e+00 6.529682207756860e+00 6.483331480488014e+00 6.437179039917633e+00 6.391224644786305e+00 + 6.345468052320204e+00 6.299909018231028e+00 6.254547296716085e+00 6.209382640458214e+00 6.164414800625865e+00 + 6.119643526873012e+00 6.075068567339238e+00 6.030689668649656e+00 5.986506575914980e+00 5.942519032731461e+00 + 5.898726781180958e+00 5.855129561830853e+00 5.811727113734134e+00 5.768519174429326e+00 5.725505479940550e+00 + 5.682685764777479e+00 5.640059761935358e+00 5.597627202894992e+00 5.555387817622778e+00 5.513341334570648e+00 + 5.471487480676136e+00 5.429825981362312e+00 5.388356560537842e+00 5.347078940596939e+00 5.305992842419399e+00 + 5.265097985370574e+00 5.224394087301403e+00 5.183880864548359e+00 5.143558031933529e+00 5.103425302764519e+00 + 5.063482388834558e+00 5.023729000422384e+00 4.984164846292350e+00 4.944789633694351e+00 4.905603068363858e+00 + 4.866604854521922e+00 4.827794694875140e+00 4.789172290615694e+00 4.750737341421322e+00 4.712489545455345e+00 + 4.674428599366639e+00 4.636554198289648e+00 4.598866035844390e+00 4.561363804136454e+00 4.524047193757008e+00 + 4.486915893782744e+00 4.449969591775966e+00 4.413207973784530e+00 4.376630724341878e+00 4.340237526466974e+00 + 4.304028061664397e+00 4.268002009924276e+00 4.232159049722320e+00 4.196498858019774e+00 4.161021110263481e+00 + 4.125725480385848e+00 4.090611640804862e+00 4.055679262424026e+00 4.020928014632469e+00 3.986357565304866e+00 + 3.951967580801470e+00 3.917757725968066e+00 3.883727664136053e+00 3.849877057122377e+00 3.816205565229567e+00 + 3.782712847245678e+00 3.749398560444380e+00 3.716262360584895e+00 3.683303901912008e+00 3.650522837156093e+00 + 3.617918817533043e+00 3.585491492744375e+00 3.553240510977140e+00 3.521165518903993e+00 3.489266161683089e+00 + 3.457542082958224e+00 3.425992924858724e+00 3.394618327999504e+00 3.363417931481009e+00 3.332391372889291e+00 + 3.301538288295961e+00 3.270858312258202e+00 3.240351077818736e+00 3.210016216505886e+00 3.179853358333530e+00 + 3.149862131801127e+00 3.120042163893671e+00 3.090393080081757e+00 3.060914504321539e+00 3.031606059054747e+00 + 3.002467365208646e+00 2.973498042196106e+00 2.944697707915549e+00 2.916065978750987e+00 2.887602469571952e+00 + 2.859306793733582e+00 2.831178563076582e+00 2.803217387927225e+00 2.775422877097323e+00 2.747794637884290e+00 + 2.720332276071094e+00 2.693035395926285e+00 2.665903600203946e+00 2.638936490143768e+00 2.612133665470991e+00 + 2.585494724396426e+00 2.559019263616461e+00 2.532706878313022e+00 2.506557162153638e+00 2.480569707291391e+00 + 2.454744104364944e+00 2.429079942498493e+00 2.403576809301841e+00 2.378234290870341e+00 2.353051971784930e+00 + 2.328029435112079e+00 2.303166262403859e+00 2.278462033697896e+00 2.253916327517403e+00 2.229528720871120e+00 + 2.205298789253393e+00 2.181226106644123e+00 2.157310245508789e+00 2.133550776798412e+00 2.109947269949605e+00 + 2.086499292884541e+00 2.063206412010974e+00 2.040068192222195e+00 2.017084196897092e+00 1.994253987900111e+00 + 1.971577125581281e+00 1.949053168776160e+00 1.926681674805912e+00 1.904462199477255e+00 1.882394297082488e+00 + 1.860477520399445e+00 1.838711420691566e+00 1.817095547707835e+00 1.795629449682816e+00 1.774312673336646e+00 + 1.753144763875002e+00 1.732125264989162e+00 1.711253718855955e+00 1.690529666137791e+00 1.669952645982623e+00 + 1.649522196023998e+00 1.629237852381020e+00 1.609099149658372e+00 1.589105620946276e+00 1.569256797820558e+00 + 1.549552210342588e+00 1.529991387059324e+00 1.510573855003263e+00 1.491299139692498e+00 1.472166765130677e+00 + 1.453176253807029e+00 1.434327126696326e+00 1.415618903258929e+00 1.397051101440760e+00 1.378623237673323e+00 + 1.360334826873657e+00 1.342185382444405e+00 1.324174416273757e+00 1.306301438735488e+00 1.288565958688910e+00 + 1.270967483478938e+00 1.253505518936037e+00 1.236179569376252e+00 1.218989137601175e+00 1.201933724897982e+00 + 1.185012831039419e+00 1.168225954283792e+00 1.151572591374991e+00 1.135052237542440e+00 1.118664386501169e+00 + 1.102408530451751e+00 1.086284160080351e+00 1.070290764558667e+00 1.054427831544002e+00 1.038694847179201e+00 + 1.023091296092696e+00 1.007616661398469e+00 9.922704246960834e-01 9.770520660706655e-01 9.619610640929175e-01 + 9.469968958190927e-01 9.321590367910279e-01 9.174469610361218e-01 9.028601410673497e-01 8.883980478832394e-01 + 8.740601509678969e-01 8.598459182909971e-01 8.457548163077863e-01 8.317863099590601e-01 8.179398626712029e-01 + 8.042149363561621e-01 7.906109914114554e-01 7.771274867201527e-01 7.637638796509086e-01 7.505196260579413e-01 + 7.373941802810475e-01 7.243869951455646e-01 7.114975219624209e-01 6.987252105281102e-01 6.860695091246874e-01 + 6.735298645197902e-01 6.611057219665998e-01 6.487965252038832e-01 6.366017164559759e-01 6.245207364327776e-01 + 6.125530243297506e-01 6.006980178279347e-01 5.889551530939333e-01 5.773238647799213e-01 5.658035860236345e-01 + 5.543937484483812e-01 5.430937821630419e-01 5.319031157620627e-01 5.208211763254530e-01 5.098473894187909e-01 + 4.989811790932310e-01 4.882219678854953e-01 4.775691768178602e-01 4.670222253981821e-01 4.565805316198835e-01 + 4.462435119619604e-01 4.360105813889603e-01 4.258811533510166e-01 4.158546397838235e-01 4.059304511086452e-01 + 3.961079962323076e-01 3.863866825472127e-01 3.767659159313276e-01 3.672451007481917e-01 3.578236398469018e-01 + 3.485009345621332e-01 3.392763847141235e-01 3.301493886086863e-01 3.211193430371943e-01 3.121856432765866e-01 + 3.033476830893841e-01 2.946048547236655e-01 2.859565489130799e-01 2.774021548768422e-01 2.689410603197377e-01 + 2.605726514321184e-01 2.522963128899138e-01 2.441114278546037e-01 2.360173779732490e-01 2.280135433784793e-01 + 2.200993026884872e-01 2.122740330070330e-01 2.045371099234480e-01 1.968879075126297e-01 1.893257983350504e-01 + 1.818501534367387e-01 1.744603423492983e-01 1.671557330899035e-01 1.599356921612944e-01 1.527995845517754e-01 + 1.457467737352234e-01 1.387766216710824e-01 1.318884888043673e-01 1.250817340656530e-01 1.183557148710898e-01 + 1.117097871223964e-01 1.051433052068581e-01 9.865562199732346e-02 9.224608885221711e-02 8.591405561552515e-02 + 7.965887061681186e-02 7.347988067119260e-02 6.737643107936901e-02 6.134786562760006e-02 5.539352658771372e-02 + 4.951275471711383e-02 4.370488925876222e-02 3.796926794119296e-02 3.230522697851125e-02 2.671210107038961e-02 + 2.118922340206019e-02 1.573592564433688e-02 1.035153795359006e-02 5.035388971769153e-03 -2.131941736216899e-04 + -5.394885869494848e-03 -1.051036201721180e-02 -1.556030003254725e-02 -2.054537884572184e-02 -2.546627890138443e-02 + -3.032368215860822e-02 -3.511827209090943e-02 -3.985073368623094e-02 -4.452175344694893e-02 -4.913201938986640e-02 + -5.368222104622158e-02 -5.817304946168927e-02 -6.260519719637002e-02 -6.697935832479755e-02 -7.129622843593442e-02 + -7.555650463318470e-02 -7.976088553437737e-02 -8.391007127176899e-02 -8.800476349205456e-02 -9.204566535636217e-02 + -9.603348154024814e-02 -9.996891823369970e-02 -1.038526831411359e-01 -1.076854854814134e-01 -1.114680359878148e-01 + -1.152010469080574e-01 -1.188852320042858e-01 -1.225213065530839e-01 -1.261099873454607e-01 -1.296519926868617e-01 + -1.331480423971617e-01 -1.365988578106660e-01 -1.400051617761155e-01 -1.433676786566820e-01 -1.466871343299691e-01 + -1.499642561880073e-01 -1.531997731372656e-01 -1.563944155986450e-01 -1.595489155074689e-01 -1.626640063135047e-01 + -1.657404229809454e-01 -1.687789019884166e-01 -1.717801813289747e-01 -1.747450005101077e-01 -1.776741005537412e-01 + -1.805682239962236e-01 -1.834281148883453e-01 -1.862545187953164e-01 -1.890481827967898e-01 -1.918098554868445e-01 + -1.945402869739935e-01 -1.972402288811781e-01 -1.999104343457795e-01 -2.025516580196005e-01 -2.051646560688824e-01 + -2.077501861742957e-01 -2.103090075309466e-01 -2.128418808483692e-01 -2.153495683505280e-01 -2.178328337758244e-01 + -2.202924423770861e-01 -2.227291609215784e-01 -2.251437576909959e-01 -2.275370024814627e-01 -2.299096666035367e-01 + -2.322625228822095e-01 -2.345963456569018e-01 -2.369119107814674e-01 -2.392099956241902e-01 -2.414913790677904e-01 + -2.437568415094148e-01 -2.460071648606438e-01 -2.482431325474920e-01 -2.504655270232117e-01 -2.526748844850286e-01 + -2.548712870711965e-01 -2.570547682968765e-01 -2.592253617791763e-01 -2.613831012371420e-01 -2.635280204917619e-01 + -2.656601534659672e-01 -2.677795341846346e-01 -2.698861967745758e-01 -2.719801754645503e-01 -2.740615045852588e-01 + -2.761302185693424e-01 -2.781863519513886e-01 -2.802299393679214e-01 -2.822610155574102e-01 -2.842796153602669e-01 + -2.862857737188432e-01 -2.882795256774359e-01 -2.902609063822845e-01 -2.922299510815640e-01 -2.941866951253988e-01 + -2.961311739658543e-01 -2.980634231569381e-01 -2.999834783545930e-01 -3.018913753167161e-01 -3.037871499031358e-01 + -3.056708380756298e-01 -3.075424758979137e-01 -3.094020995356503e-01 -3.112497452564351e-01 -3.130854494298195e-01 + -3.149092485272829e-01 -3.167211791222584e-01 -3.185212778901121e-01 -3.203095816081620e-01 -3.220861271556567e-01 + -3.238509515137969e-01 -3.256040917657230e-01 -3.273455850965125e-01 -3.290754687931897e-01 -3.307937802447237e-01 + -3.325005569420184e-01 -3.341958364779256e-01 -3.358796565472378e-01 -3.375520549466902e-01 -3.392130695749561e-01 + -3.408627384326585e-01 -3.425010996223551e-01 -3.441281913485494e-01 -3.457440519176904e-01 -3.473487197381614e-01 + -3.489422333202930e-01 -3.505246312763572e-01 -3.520959523205696e-01 -3.536562352690858e-01 -3.552055190400044e-01 + -3.567438426533629e-01 -3.582712452311493e-01 -3.597877659972857e-01 -3.612934442776393e-01 -3.627883195000193e-01 + -3.642724311941801e-01 -3.657458189918087e-01 -3.672085226265489e-01 -3.686605819339737e-01 -3.701020368516060e-01 + -3.715329274189085e-01 -3.729532937772823e-01 -3.743631761700783e-01 -3.757626149425822e-01 -3.771516505420279e-01 + -3.785303235175878e-01 -3.798986745203761e-01 -3.812567443034534e-01 -3.826045737218176e-01 -3.839422037324134e-01 + -3.852696753941203e-01 -3.865870298677690e-01 -3.878943084161263e-01 -3.891915524039044e-01 -3.904788032977537e-01 + -3.917561026662737e-01 -3.930234921799964e-01 -3.942810136114071e-01 -3.955287088349253e-01 -3.967666198269124e-01 + -3.979947886656766e-01 -3.992132575314682e-01 -4.004220687064748e-01 -4.016212645748296e-01 -4.028108876226092e-01 + -4.039909804378286e-01 -4.051615857104492e-01 -4.063227462323697e-01 -4.074745048974357e-01 -4.086169047014348e-01 + -4.097499887420910e-01 -4.108738002190759e-01 -4.119883824340023e-01 -4.130937787904256e-01 -4.141900327938422e-01 + -4.152771880516879e-01 -4.163552882733478e-01 -4.174243772701438e-01 -4.184844989553420e-01 -4.195356973441484e-01 + -4.205780165537125e-01 -4.216115008031311e-01 -4.226361944134333e-01 -4.236521418075963e-01 -4.246593875105393e-01 + -4.256579761491247e-01 -4.266479524521539e-01 -4.276293612503697e-01 -4.286022474764645e-01 -4.295666561650646e-01 + -4.305226324527416e-01 -4.314702215780105e-01 -4.324094688813270e-01 -4.333404198050874e-01 -4.342631198936365e-01 + -4.351776147932516e-01 -4.360839502521613e-01 -4.369821721205324e-01 -4.378723263504720e-01 -4.387544589960327e-01 + -4.396286162132076e-01 -4.404948442599332e-01 -4.413531894960860e-01 -4.422036983834877e-01 -4.430464174858989e-01 + -4.438813934690256e-01 -4.447086731005124e-01 -4.455283032499518e-01 -4.463403308888704e-01 -4.471448030907442e-01 + -4.479417670309876e-01 -4.487312699869574e-01 -4.495133593379551e-01 -4.502880825652213e-01 -4.510554872519404e-01 + -4.518156210832407e-01 -4.525685318461865e-01 -4.533142674297914e-01 -4.540528758250075e-01 -4.547844051247295e-01 + -4.555089035237948e-01 -4.562264193189846e-01 -4.569370009090178e-01 -4.576406967945574e-01 -4.583375555782132e-01 + -4.590276259645304e-01 -4.597109567600006e-01 -4.603875968730556e-01 -4.610575953140697e-01 -4.617210011953609e-01 + -4.623778637311872e-01 -4.630282322377504e-01 -4.636721561331947e-01 -4.643096849376037e-01 -4.649408682730050e-01 + -4.655657558633726e-01 -4.661843975346147e-01 -4.667968432145867e-01 -4.674031429330851e-01 -4.680033468218487e-01 + -4.685975051145580e-01 -4.691856681468374e-01 -4.697678863562510e-01 -4.703442102823057e-01 -4.709146905664527e-01 + -4.714793779520823e-01 -4.720383232845285e-01 -4.725915775110693e-01 -4.731391916809215e-01 -4.736812169452462e-01 + -4.742177045571454e-01 -4.747487058716651e-01 -4.752742723457913e-01 -4.757944555384530e-01 -4.763093071105238e-01 + -4.768188788248147e-01 -4.773232225460841e-01 -4.778223902410287e-01 -4.783164339782879e-01 -4.788054059284457e-01 + -4.792893583640244e-01 -4.797683436594932e-01 -4.802424142912594e-01 -4.807116228376762e-01 -4.811760219790331e-01 + -4.816356644975702e-01 -4.820906032774611e-01 -4.825408913048284e-01 -4.829865816677327e-01 -4.834277275561784e-01 + -4.838643822621134e-01 -4.842965991794236e-01 -4.847244318039419e-01 -4.851479337334405e-01 -4.855671586676346e-01 + -4.859821604081808e-01 -4.863929928586808e-01 -4.867997100246730e-01 -4.872023660136441e-01 -4.876010150350191e-01 + -4.879957114001662e-01 -4.883865095223970e-01 -4.887734639169616e-01 -4.891566292010561e-01 -4.895360600938188e-01 + -4.899118114163273e-01 -4.902839380916026e-01 -4.906524951446093e-01 -4.910175377022521e-01 -4.913791209933798e-01 + -4.917373003487839e-01 -4.920921312011933e-01 -4.924436690852851e-01 -4.927919694684308e-01 -4.931370697500577e-01 + -4.934789732803277e-01 -4.938176796607034e-01 -4.941531884991288e-01 -4.944854994100274e-01 -4.948146120143043e-01 + -4.951405259393459e-01 -4.954632408190199e-01 -4.957827562936716e-01 -4.960990720101309e-01 -4.964121876217066e-01 + -4.967221027881895e-01 -4.970288171758501e-01 -4.973323304574402e-01 -4.976326423121929e-01 -4.979297524258209e-01 + -4.982236604905191e-01 -4.985143662049625e-01 -4.988018692743084e-01 -4.990861694101913e-01 -4.993672663307304e-01 + -4.996451597605245e-01 -4.999198494306522e-01 -5.001913350786736e-01 -5.004596164486314e-01 -5.007246932910466e-01 + -5.009865653629215e-01 -5.012452324277392e-01 -5.015006942554656e-01 -5.017529506225463e-01 -5.020020013119061e-01 + -5.022478461129534e-01 -5.024904848215740e-01 -5.027299172401382e-01 -5.029661431774949e-01 -5.031991624489750e-01 + -5.034289748763890e-01 -5.036555802880309e-01 -5.038789785186706e-01 -5.040991694095643e-01 -5.043161528084447e-01 + -5.045299285695296e-01 -5.047404965535127e-01 -5.049478566275719e-01 -5.051520086653672e-01 -5.053529525470344e-01 + -5.055506881591951e-01 -5.057452153949499e-01 -5.059365341538782e-01 -5.061246443420440e-01 -5.063095458719905e-01 + -5.064912386627406e-01 -5.066697226397991e-01 -5.068449977351522e-01 -5.070170638872649e-01 -5.071859210410864e-01 + -5.073515691480434e-01 -5.075140081660454e-01 -5.076732380594819e-01 -5.078292587992228e-01 -5.079820703626219e-01 + -5.081316727335095e-01 -5.082780659021979e-01 -5.084212498654840e-01 -5.085612246266403e-01 -5.086979901954246e-01 + -5.088315465880702e-01 -5.089618938272975e-01 -5.090890319423031e-01 -5.092129609687671e-01 -5.093336809488483e-01 + -5.094511919311879e-01 -5.095654939709076e-01 -5.096765871296097e-01 -5.097844714753774e-01 -5.098891470827758e-01 + -5.099906140328485e-01 -5.100888724131212e-01 -5.101839223176022e-01 -5.102757638467773e-01 -5.103643971076149e-01 + -5.104498222135662e-01 -5.105320392845580e-01 -5.106110484470036e-01 -5.106868498337943e-01 -5.107594435843033e-01 + -5.108288298443812e-01 -5.108950087663650e-01 -5.109579805090687e-01 -5.110177452377883e-01 -5.110743031243012e-01 + -5.111276543468636e-01 -5.111777990902151e-01 -5.112247375455742e-01 -5.112684699106433e-01 -5.113089963895990e-01 + -5.113463171931077e-01 -5.113804325383093e-01 -5.114113426488290e-01 -5.114390477547689e-01 -5.114635480927165e-01 + -5.114848439057363e-01 -5.115029354433764e-01 -5.115178229616629e-01 -5.115295067231062e-01 -5.115379869966949e-01 + -5.115432640578990e-01 -5.115453381886698e-01 -5.115442096774395e-01 -5.115398788191202e-01 -5.115323459151063e-01 + -5.115216112732721e-01 -5.115076752079730e-01 -5.114905380400449e-01 -5.114702000968043e-01 -5.114466617120493e-01 + -5.114199232260599e-01 -5.113899849855943e-01 -5.113568473438934e-01 -5.113205106606783e-01 -5.112809753021507e-01 + -5.112382416409930e-01 -5.111923100563704e-01 -5.111431809339267e-01 -5.110908546657877e-01 -5.110353316505597e-01 + -5.109766122933296e-01 -5.109146970056636e-01 -5.108495862056147e-01 -5.107812803177094e-01 -5.107097797729586e-01 + -5.106350850088536e-01 -5.105571964693675e-01 -5.104761146049527e-01 -5.103918398725427e-01 -5.103043727355524e-01 + -5.102137136638781e-01 -5.101198631338961e-01 -5.100228216284631e-01 -5.099225896369171e-01 -5.098191676550766e-01 + -5.097125561852428e-01 -5.096027557361954e-01 -5.094897668231960e-01 -5.093735899679869e-01 -5.092542256987911e-01 + -5.091316745503129e-01 -5.090059370637366e-01 -5.088770137867293e-01 -5.087449052734349e-01 -5.086096120844843e-01 + -5.084711347869825e-01 -5.083294739545197e-01 -5.081846301671668e-01 -5.080366040114725e-01 -5.078853960804701e-01 + -5.077310069736714e-01 -5.075734372970694e-01 -5.074126876631392e-01 -5.072487586908349e-01 -5.070816510055917e-01 + -5.069113652393276e-01 -5.067379020304392e-01 -5.065612620238058e-01 -5.063814458707846e-01 -5.061984542292185e-01 + -5.060122877634259e-01 -5.058229471442097e-01 -5.056304330488511e-01 -5.054347461611153e-01 -5.052358871712460e-01 + -5.050338567759673e-01 -5.048286556784863e-01 -5.046202845884886e-01 -5.044087442221434e-01 -5.041940353020984e-01 + -5.039761585574816e-01 -5.037551147239044e-01 -5.035309045434582e-01 -5.033035287647140e-01 -5.030729881427247e-01 + -5.028392834390245e-01 -5.026024154216264e-01 -5.023623848650260e-01 -5.021191925501998e-01 -5.018728392646045e-01 + -5.016233258021784e-01 -5.013706529633390e-01 -5.011148215549860e-01 -5.008558323904992e-01 -5.005936862897420e-01 + -5.003283840790533e-01 -5.000599265912575e-01 -4.997883146656586e-01 -4.995135491480405e-01 -4.992356308906681e-01 + -4.989545607522879e-01 -4.986703395981273e-01 -4.983829682998935e-01 -4.980924477357755e-01 -4.977987787904423e-01 + -4.975019623550448e-01 -4.972019993272154e-01 -4.968988906110637e-01 -4.965926371171837e-01 -4.962832397626502e-01 + -4.959706994710163e-01 -4.956550171723184e-01 -4.953361938030729e-01 -4.950142303062757e-01 -4.946891276314051e-01 + -4.943608867344209e-01 -4.940295085777623e-01 -4.936949941303489e-01 -4.933573443675832e-01 -4.930165602713474e-01 + -4.926726428300034e-01 -4.923255930383968e-01 -4.919754118978491e-01 -4.916221004156691e-01 -4.912656595474803e-01 + -4.909060901436411e-01 -4.905433930480749e-01 -4.901775691109031e-01 -4.898086191884409e-01 -4.894365441432043e-01 + -4.890613448439031e-01 -4.886830221654451e-01 -4.883015769889333e-01 -4.879170102016688e-01 -4.875293226971487e-01 + -4.871385153750696e-01 -4.867445891413194e-01 -4.863475449079862e-01 -4.859473835933548e-01 -4.855441061219063e-01 + -4.851377134243184e-01 -4.847282064374647e-01 -4.843155861044175e-01 -4.838998533744423e-01 -4.834810092030068e-01 + -4.830590545517686e-01 -4.826339903885882e-01 -4.822058176875200e-01 -4.817745374288139e-01 -4.813401505989188e-01 + -4.809026581904786e-01 -4.804620612023365e-01 -4.800183606395294e-01 -4.795715575132916e-01 -4.791216528410550e-01 + -4.786686476464476e-01 -4.782125429592951e-01 -4.777533398156186e-01 -4.772910392576365e-01 -4.768256423337643e-01 + -4.763571500986131e-01 -4.758855636129911e-01 -4.754108839439038e-01 -4.749331121645530e-01 -4.744522493543373e-01 + -4.739682965988518e-01 -4.734812549898890e-01 -4.729911256254369e-01 -4.724979096096809e-01 -4.720016080530035e-01 + -4.715022220719825e-01 -4.709997527893953e-01 -4.704942013342114e-01 -4.699855688416024e-01 -4.694738564529316e-01 + -4.689590653157630e-01 -4.684411965838545e-01 -4.679202514171620e-01 -4.673962309818384e-01 -4.668691364502320e-01 + -4.663389690008894e-01 -4.658057298185531e-01 -4.652694200941606e-01 -4.647300410248498e-01 -4.641875938139534e-01 + -4.636420796709999e-01 -4.630934998117145e-01 -4.625418554580214e-01 -4.619871478380395e-01 -4.614293781860850e-01 + -4.608685477426698e-01 -4.603046577545052e-01 -4.597377094744958e-01 -4.591677041617460e-01 -4.585946430815542e-01 + -4.580185275054180e-01 -4.574393587110291e-01 -4.568571379822779e-01 -4.562718666092510e-01 -4.556835458882312e-01 + -4.550921771216984e-01 -4.544977616183299e-01 -4.539003006929986e-01 -4.532997956667733e-01 -4.526962478669231e-01 + -4.520896586269101e-01 -4.514800292863929e-01 -4.508673611912307e-01 -4.502516556934755e-01 -4.496329141513789e-01 + -4.490111379293859e-01 -4.483863283981417e-01 -4.477584869344857e-01 -4.471276149214562e-01 -4.464937137482852e-01 + -4.458567848104038e-01 -4.452168295094399e-01 -4.445738492532161e-01 -4.439278454557549e-01 -4.432788195372706e-01 + -4.426267729241795e-01 -4.419717070490913e-01 -4.413136233508139e-01 -4.406525232743510e-01 -4.399884082709029e-01 + -4.393212797978676e-01 -4.386511393188397e-01 -4.379779883036090e-01 -4.373018282281638e-01 -4.366226605746890e-01 + -4.359404868315642e-01 -4.352553084933674e-01 -4.345671270608737e-01 -4.338759440410541e-01 -4.331817609470751e-01 + -4.324845792983037e-01 -4.317844006202983e-01 -4.310812264448177e-01 -4.303750583098183e-01 -4.296658977594498e-01 + -4.289537463440602e-01 -4.282386056201940e-01 -4.275204771505940e-01 -4.267993625041973e-01 -4.260752632561385e-01 + -4.253481809877495e-01 -4.246181172865585e-01 -4.238850737462907e-01 -4.231490519668675e-01 -4.224100535544074e-01 + -4.216680801212256e-01 -4.209231332858333e-01 -4.201752146729393e-01 -4.194243259134492e-01 -4.186704686444641e-01 + -4.179136445092829e-01 -4.171538551574005e-01 -4.163911022445103e-01 -4.156253874324995e-01 -4.148567123894541e-01 + -4.140850787896555e-01 -4.133104883135836e-01 -4.125329426479130e-01 -4.117524434855167e-01 -4.109689925254623e-01 + -4.101825914730171e-01 -4.093932420396428e-01 -4.086009459429975e-01 -4.078057049069378e-01 -4.070075206615160e-01 + -4.062063949429813e-01 -4.054023294937794e-01 -4.045953260625530e-01 -4.037853864041409e-01 -4.029725122795790e-01 + -4.021567054561020e-01 -4.013379677071356e-01 -4.005163008123089e-01 -3.996917065574437e-01 -3.988641867345587e-01 + -3.980337431418715e-01 -3.972003775837933e-01 -3.963640918709351e-01 -3.955248878201026e-01 -3.946827672542991e-01 + -3.938377320027231e-01 -3.929897839007729e-01 -3.921389247900393e-01 -3.912851565183142e-01 -3.904284809395839e-01 + -3.895688999140299e-01 -3.887064153080338e-01 -3.878410289941716e-01 -3.869727428512165e-01 -3.861015587641390e-01 + -3.852274786241049e-01 -3.843505043284784e-01 -3.834706377808200e-01 -3.825878808908849e-01 -3.817022355746284e-01 + -3.808137037542000e-01 -3.799222873579469e-01 -3.790279883204120e-01 -3.781308085823365e-01 -3.772307500906573e-01 + -3.763278147985076e-01 -3.754220046652185e-01 -3.745133216563163e-01 -3.736017677435267e-01 -3.726873449047683e-01 + -3.717700551241590e-01 -3.708499003920138e-01 -3.699268827048423e-01 -3.690010040653517e-01 -3.680722664824466e-01 + -3.671406719712274e-01 -3.662062225529923e-01 -3.652689202552351e-01 -3.643287671116468e-01 -3.633857651621145e-01 + -3.624399164527238e-01 -3.614912230357539e-01 -3.605396869696840e-01 -3.595853103191879e-01 -3.586280951551368e-01 + -3.576680435545994e-01 -3.567051576008385e-01 -3.557394393833165e-01 -3.547708909976902e-01 -3.537995145458166e-01 + -3.528253121357451e-01 -3.518482858817237e-01 -3.508684379041981e-01 -3.498857703298102e-01 -3.489002852913964e-01 + -3.479119849279925e-01 -3.469208713848299e-01 -3.459269468133379e-01 -3.449302133711402e-01 -3.439306732220585e-01 + -3.429283285361119e-01 -3.419231814895155e-01 -3.409152342646808e-01 -3.399044891240922e-01 -3.388909576234711e-01 + -3.378746695696834e-01 -3.368556569372674e-01 -3.358339517494701e-01 -3.348095860782512e-01 -3.337825920442791e-01 + -3.327530018169333e-01 -3.317208476143024e-01 -3.306861617031868e-01 -3.296489763990950e-01 -3.286093240662493e-01 + -3.275672371175783e-01 -3.265227480147235e-01 -3.254758892680345e-01 -3.244266934365743e-01 -3.233751931281135e-01 + -3.223214209991326e-01 -3.212654097548248e-01 -3.202071921490934e-01 -3.191468009845483e-01 -3.180842691125131e-01 + -3.170196294330217e-01 -3.159529148948164e-01 -3.148841584953504e-01 -3.138133932807884e-01 -3.127406523460040e-01 + -3.116659688345810e-01 -3.105893759388147e-01 -3.095109068997089e-01 -3.084305950069794e-01 -3.073484735990517e-01 + -3.062645760630603e-01 -3.051789358348519e-01 -3.040915863989821e-01 -3.030025612887174e-01 -3.019118940860344e-01 + -3.008196184216195e-01 -2.997257679748703e-01 -2.986303764738948e-01 -2.975334776955088e-01 -2.964351054652418e-01 + -2.953352936573310e-01 -2.942340761947256e-01 -2.931314870490839e-01 -2.920275602407743e-01 -2.909223298388766e-01 + -2.898158299611796e-01 -2.887080947741840e-01 -2.875991584930986e-01 -2.864890553818445e-01 -2.853778197530514e-01 + -2.842654859680610e-01 -2.831520884369235e-01 -2.820376616184002e-01 -2.809222400199627e-01 -2.798058581977935e-01 + -2.786885507567827e-01 -2.775703523505348e-01 -2.764512976813607e-01 -2.753314215002843e-01 -2.742107586070383e-01 + -2.730893438500654e-01 -2.719672121265195e-01 -2.708443983822656e-01 -2.697209376118760e-01 -2.685968648586359e-01 + -2.674722152145396e-01 -2.663470238202928e-01 -2.652213258653101e-01 -2.640951565877162e-01 -2.629685512743472e-01 + -2.618415452607502e-01 -2.607141739311797e-01 -2.595864727186026e-01 -2.584584771046959e-01 -2.573302226198459e-01 + -2.562017448431508e-01 -2.550730794024177e-01 -2.539442619741631e-01 -2.528153282836169e-01 -2.516863141047163e-01 + -2.505572552601097e-01 -2.494281876211562e-01 -2.482991471079246e-01 -2.471701696891947e-01 -2.460412913824551e-01 + -2.449125482539058e-01 -2.437839764184573e-01 -2.426556120397300e-01 -2.415274913300538e-01 -2.403996505504701e-01 + -2.392721260107295e-01 -2.381449540692945e-01 -2.370181711333348e-01 -2.358918136587335e-01 -2.347659181500825e-01 + -2.336405211606846e-01 -2.325156592925516e-01 -2.313913691964065e-01 -2.302676875716830e-01 -2.291446511665247e-01 + -2.280222967777845e-01 -2.269006612510263e-01 -2.257797814805250e-01 -2.246596944092645e-01 -2.235404370289399e-01 + -2.224220463799555e-01 -2.213045595514276e-01 -2.201880136811807e-01 -2.190724459557512e-01 -2.179578936103844e-01 + -2.168443939290369e-01 -2.157319842443758e-01 -2.146207019377772e-01 -2.135105844393282e-01 -2.124016692278261e-01 + -2.112939938307783e-01 -2.101875958244034e-01 -2.090825128336287e-01 -2.079787825320927e-01 -2.068764426421439e-01 + -2.057755309348421e-01 -2.046760852299550e-01 -2.035781433959628e-01 -2.024817433500544e-01 -2.013869230581307e-01 + -2.002937205348012e-01 -1.992021738433861e-01 -1.981123210959167e-01 -1.970242004531340e-01 -1.959378501244885e-01 + -1.948533083681415e-01 -1.937706134909658e-01 -1.926898038485424e-01 -1.916109178451639e-01 -1.905339939338325e-01 + -1.894590706162612e-01 -1.883861864428732e-01 -1.873153800128010e-01 -1.862466899738891e-01 -1.851801550226899e-01 + -1.841158139044691e-01 -1.830537054132000e-01 -1.819938683915671e-01 -1.809363417309657e-01 -1.798811643715000e-01 + -1.788283753019868e-01 -1.777780135599503e-01 -1.767301182316263e-01 -1.756847284519621e-01 -1.746418834046138e-01 + -1.736016223219469e-01 -1.725639844850387e-01 -1.715290092236768e-01 -1.704967359163589e-01 -1.694672039902921e-01 + -1.684404529213940e-01 -1.674165222342935e-01 -1.663954515023288e-01 -1.653772803475477e-01 -1.643620484407104e-01 + -1.633497955012859e-01 -1.623405612974534e-01 -1.613343856461024e-01 -1.603313084128326e-01 -1.593313695119553e-01 + -1.583346089064908e-01 -1.573410666081690e-01 -1.563507826774312e-01 -1.553637972234291e-01 -1.543801504040251e-01 + -1.533998824257884e-01 -1.524230335440032e-01 -1.514496440626612e-01 -1.504797543344657e-01 -1.495134047608281e-01 + -1.485506357918719e-01 -1.475914879264314e-01 -1.466360017120494e-01 -1.456842177449798e-01 -1.447361766701873e-01 + -1.437919191813457e-01 -1.428514860208393e-01 -1.419149179797644e-01 -1.409822558979248e-01 -1.400535406638362e-01 + -1.391288132147245e-01 -1.382081145365265e-01 -1.372914856638863e-01 -1.363789676801621e-01 -1.354706017174204e-01 + -1.345664289564377e-01 -1.336664906267014e-01 -1.327708280064087e-01 -1.318794824224678e-01 -1.309924952504972e-01 + -1.301099079148242e-01 -1.292317618884871e-01 -1.283580986932359e-01 -1.274889598995289e-01 -1.266243871265353e-01 + -1.257644220421348e-01 -1.249091063629176e-01 -1.240584818541837e-01 -1.232125903299432e-01 -1.223714736529164e-01 + -1.215351737345345e-01 -1.207037325349389e-01 -1.198771920629804e-01 -1.190555943762212e-01 -1.182389815809327e-01 + -1.174273958320972e-01 -1.166208793334081e-01 -1.158194743372662e-01 -1.150232231447855e-01 -1.142321681057893e-01 + -1.134463516188113e-01 -1.126658161310944e-01 -1.118906041385928e-01 -1.111207580592128e-01 -1.103563030399700e-01 + -1.095972294856779e-01 -1.088435236237969e-01 -1.080951716557306e-01 -1.073521597568238e-01 -1.066144740763626e-01 + -1.058821007375770e-01 -1.051550258376368e-01 -1.044332354476568e-01 -1.037167156126906e-01 -1.030054523517362e-01 + -1.022994316577330e-01 -1.015986394975621e-01 -1.009030618120472e-01 -1.002126845159536e-01 -9.952749349798928e-02 + -9.884747462080391e-02 -9.817261372098827e-02 -9.750289660907772e-02 -9.683830906954688e-02 -9.617883686081484e-02 + -9.552446571524055e-02 -9.487518133912685e-02 -9.423096941271773e-02 -9.359181559019859e-02 -9.295770549969964e-02 + -9.232862474328989e-02 -9.170455889698172e-02 -9.108549351073042e-02 -9.047141410843230e-02 -8.986230618792572e-02 + -8.925815522099179e-02 -8.865894665335301e-02 -8.806466590467464e-02 -8.747529836856352e-02 -8.689082941256832e-02 + -8.631124437818068e-02 -8.573652858083373e-02 -8.516666730990187e-02 -8.460164582870369e-02 -8.404144937449774e-02 + -8.348606315848589e-02 -8.293547236581121e-02 -8.238966215555951e-02 -8.184861766075854e-02 -8.131232398837807e-02 + -8.078076621932968e-02 -8.025392940846719e-02 -7.973179858458698e-02 -7.921435875042727e-02 -7.870159488266719e-02 + -7.819349193192929e-02 -7.769003482277825e-02 -7.719120845372023e-02 -7.669699769720294e-02 -7.620738739961790e-02 + -7.572236238129665e-02 -7.524190743651436e-02 -7.476600733348754e-02 -7.429464681437474e-02 -7.382781059527700e-02 + -7.336548336623708e-02 -7.290764979124002e-02 -7.245429450821239e-02 -7.200540212902415e-02 -7.156095723948547e-02 + -7.112094439935036e-02 -7.068534814231391e-02 -7.025415297601266e-02 -6.982734338202747e-02 -6.940490381587879e-02 + -6.898681870703055e-02 -6.857307245888851e-02 -6.816364944880030e-02 -6.775853402805561e-02 -6.735771052188588e-02 + -6.696116322946633e-02 -6.656887642391168e-02 -6.618083435228060e-02 -6.579702123557324e-02 -6.541742126873129e-02 + -6.504201862063971e-02 -6.467079743412460e-02 -6.430374182595408e-02 -6.394083588683934e-02 -6.358206368143199e-02 + -6.322740924832777e-02 -6.287685660006267e-02 -6.253038972311581e-02 -6.218799257790769e-02 -6.184964909880128e-02 + -6.151534319410173e-02 -6.118505874605594e-02 -6.085877961085313e-02 -6.053648961862503e-02 -6.021817257344446e-02 + -5.990381225332641e-02 -5.959339241022858e-02 -5.928689677005062e-02 -5.898430903263375e-02 -5.868561287176224e-02 + -5.839079193516150e-02 -5.809982984449834e-02 -5.781271019538430e-02 -5.752941655737000e-02 -5.724993247395017e-02 + -5.697424146256005e-02 -5.670232701457875e-02 -5.643417259532568e-02 -5.616976164406363e-02 -5.590907757399646e-02 + -5.565210377227119e-02 -5.539882359997556e-02 -5.514922039214058e-02 -5.490327745773887e-02 -5.466097807968524e-02 + -5.442230551483596e-02 -5.418724299399008e-02 -5.395577372188879e-02 -5.372788087721490e-02 -5.350354761259298e-02 + -5.328275705459106e-02 -5.306549230371770e-02 -5.285173643442421e-02 -5.264147249510410e-02 -5.243468350809263e-02 + -5.223135246966721e-02 -5.203146235004738e-02 -5.183499609339515e-02 -5.164193661781392e-02 -5.145226681534910e-02 + -5.126596955198919e-02 -5.108302766766345e-02 -5.090342397624392e-02 -5.072714126554530e-02 -5.055416229732317e-02 + -5.038446980727572e-02 -5.021804650504294e-02 -5.005487507420807e-02 -4.989493817229461e-02 -4.973821843076898e-02 + -4.958469845504058e-02 -4.943436082445898e-02 -4.928718809231755e-02 -4.914316278585072e-02 -4.900226740623531e-02 + -4.886448442859043e-02 -4.872979630197701e-02 -4.859818544939779e-02 -4.846963426779843e-02 -4.834412512806511e-02 + -4.822164037502821e-02 -4.810216232745815e-02 -4.798567327806872e-02 -4.787215549351514e-02 -4.776159121439538e-02 + -4.765396265524856e-02 -4.754925200455663e-02 -4.744744142474315e-02 -4.734851305217417e-02 -4.725244899715729e-02 + -4.715923134394241e-02 -4.706884215072226e-02 -4.698126344962978e-02 -4.689647724674189e-02 -4.681446552207644e-02 + -4.673521022959411e-02 -4.665869329719723e-02 -4.658489662672994e-02 -4.651380209397887e-02 -4.644539154867277e-02 + -4.637964681448228e-02 -4.631654968901974e-02 -4.625608194384049e-02 -4.619822532444104e-02 -4.614296155026026e-02 + -4.609027231467942e-02 -4.604013928502133e-02 -4.599254410255174e-02 -4.594746838247692e-02 -4.590489371394704e-02 + -4.586480166005283e-02 -4.582717375782803e-02 -4.579199151824809e-02 -4.575923642623080e-02 -4.572888994063520e-02 + -4.570093349426384e-02 -4.567534849385974e-02 -4.565211632010924e-02 -4.563121832763993e-02 -4.561263584502235e-02 + -4.559635017476785e-02 -4.558234259333096e-02 -4.557059435110807e-02 -4.556108667243703e-02 -4.555380075559848e-02 + -4.554871777281451e-02 -4.554581887025032e-02 -4.554508516801196e-02 -4.554649776014763e-02 -4.555003771464908e-02 + -4.555568607344834e-02 -4.556342385242043e-02 -4.557323204138237e-02 -4.558509160409307e-02 -4.559898347825361e-02 + -4.561488857550701e-02 -4.563278778143871e-02 -4.565266195557557e-02 -4.567449193138737e-02 -4.569825851628551e-02 + -4.572394249162302e-02 -4.575152461269611e-02 -4.578098560874158e-02 -4.581230618293993e-02 -4.584546701241252e-02 + -4.588044874822327e-02 -4.591723201537812e-02 -4.595579741282468e-02 -4.599612553126343e-02 -4.603819958888227e-02 + -4.608200822855005e-02 -4.612754074601674e-02 -4.617478642183866e-02 -4.622373452137555e-02 -4.627437429479427e-02 + -4.632669497706596e-02 -4.638068578796747e-02 -4.643633593207989e-02 -4.649363459879098e-02 -4.655257096229238e-02 + -4.661313418158206e-02 -4.667531340046226e-02 -4.673909774754132e-02 -4.680447633623230e-02 -4.687143826475323e-02 + -4.693997261612849e-02 -4.701006845818637e-02 -4.708171484356120e-02 -4.715490080969203e-02 -4.722961537882377e-02 + -4.730584755800606e-02 -4.738358633909383e-02 -4.746282069874740e-02 -4.754353959843263e-02 -4.762573198441958e-02 + -4.770938678778461e-02 -4.779449292440897e-02 -4.788103929497883e-02 -4.796901478498600e-02 -4.805840826472685e-02 + -4.814920858930432e-02 -4.824140459862558e-02 -4.833498511740262e-02 -4.842993895515365e-02 -4.852625490620165e-02 + -4.862392174967479e-02 -4.872292824950700e-02 -4.882326315443630e-02 -4.892491519800726e-02 -4.902787309856885e-02 + -4.913212555927533e-02 -4.923766126808662e-02 -4.934446889776740e-02 -4.945253710588811e-02 -4.956185453482363e-02 + -4.967240981175504e-02 -4.978419154866780e-02 -4.989718834235286e-02 -5.001138877440701e-02 -5.012678141123111e-02 + -5.024335480403259e-02 -5.036109748882279e-02 -5.047999798641945e-02 -5.060004480244453e-02 -5.072122642732593e-02 + -5.084353133629661e-02 -5.096694798939461e-02 -5.109146483146323e-02 -5.121707029215106e-02 -5.134375278591204e-02 + -5.147150071200497e-02 -5.160030245449465e-02 -5.173014638225041e-02 -5.186102084894674e-02 -5.199291419306361e-02 + -5.212581473788663e-02 -5.225971079150563e-02 -5.239459064681706e-02 -5.253044258152125e-02 -5.266725485812461e-02 + -5.280501572393839e-02 -5.294371341107913e-02 -5.308333613646873e-02 -5.322387210183441e-02 -5.336530949370843e-02 + -5.350763648342804e-02 -5.365084122713625e-02 -5.379491186578100e-02 -5.393983652511563e-02 -5.408560331569828e-02 + -5.423220033289279e-02 -5.437961565686808e-02 -5.452783735259868e-02 -5.467685346986328e-02 -5.482665204324703e-02 + -5.497722109213951e-02 -5.512854862073599e-02 -5.528062261803655e-02 -5.543343105784692e-02 -5.558696189877778e-02 + -5.574120308424490e-02 -5.589614254246995e-02 -5.605176818647938e-02 -5.620806791410445e-02 -5.636502960798254e-02 + -5.652264113555545e-02 -5.668089034907062e-02 -5.683976508558103e-02 -5.699925316694435e-02 -5.715934239982345e-02 + -5.732002057568688e-02 -5.748127547080814e-02 -5.764309484626595e-02 -5.780546644794443e-02 -5.796837800653255e-02 + -5.813181723752531e-02 -5.829577184122200e-02 -5.846022950272761e-02 -5.862517789195237e-02 -5.879060466361177e-02 + -5.895649745722636e-02 -5.912284389712197e-02 -5.928963159242978e-02 -5.945684813708586e-02 -5.962448110983204e-02 + -5.979251807421530e-02 -5.996094657858712e-02 -6.012975415610502e-02 -6.029892832473165e-02 -6.046845658723475e-02 + -6.063832643118684e-02 -6.080852532896638e-02 -6.097904073775703e-02 -6.114986009954686e-02 -6.132097084113042e-02 + -6.149236037410596e-02 -6.166401609487874e-02 -6.183592538465794e-02 -6.200807560945800e-02 -6.218045412009953e-02 + -6.235304825220750e-02 -6.252584532621236e-02 -6.269883264734992e-02 -6.287199750566128e-02 -6.304532717599257e-02 + -6.321880891799513e-02 -6.339242997612540e-02 -6.356617757964569e-02 -6.374003894262310e-02 -6.391400126392957e-02 + -6.408805172724284e-02 -6.426217750104599e-02 -6.443636573862684e-02 -6.461060357807871e-02 -6.478487814230008e-02 + -6.495917653899470e-02 -6.513348586067155e-02 -6.530779318464484e-02 -6.548208557303412e-02 -6.565635007276348e-02 + -6.583057371556379e-02 -6.600474351796955e-02 -6.617884648132101e-02 -6.635286959176406e-02 -6.652679982024941e-02 + -6.670062412253321e-02 -6.687432943917676e-02 -6.704790269554646e-02 -6.722133080181408e-02 -6.739460065295644e-02 + -6.756769912875632e-02 -6.774061309380047e-02 -6.791332939748188e-02 -6.808583487399848e-02 -6.825811634235358e-02 + -6.843016060635501e-02 -6.860195445461703e-02 -6.877348466055777e-02 -6.894473798240189e-02 -6.911570116317851e-02 + -6.928636093072213e-02 -6.945670399767230e-02 -6.962671706147434e-02 -6.979638680437854e-02 -6.996569989343975e-02 + -7.013464298051925e-02 -7.030320270228291e-02 -7.047136568020168e-02 -7.063911852055195e-02 -7.080644781441524e-02 + -7.097334013767881e-02 -7.113978205103440e-02 -7.130576009997919e-02 -7.147126081481613e-02 -7.163627071065262e-02 + -7.180077628740186e-02 -7.196476402978207e-02 -7.212822040731649e-02 -7.229113187433424e-02 -7.245348486996882e-02 + -7.261526581815979e-02 -7.277646112765103e-02 -7.293705719199277e-02 -7.309704038953937e-02 -7.325639708345130e-02 + -7.341511362169335e-02 -7.357317633703662e-02 -7.373057154705676e-02 -7.388728555413464e-02 -7.404330464545623e-02 + -7.419861509301372e-02 -7.435320315360332e-02 -7.450705506882686e-02 -7.466015706509196e-02 -7.481249535361083e-02 + -7.496405613040087e-02 -7.511482557628525e-02 -7.526478985689185e-02 -7.541393512265426e-02 -7.556224750881071e-02 + -7.570971313540517e-02 -7.585631810728671e-02 -7.600204851410963e-02 -7.614689043033303e-02 -7.629082991522224e-02 + -7.643385301284661e-02 -7.657594575208172e-02 -7.671709414660781e-02 -7.685728422312665e-02 -7.699650659350404e-02 + -7.713476151839789e-02 -7.727205047768211e-02 -7.740837495398235e-02 -7.754373643267592e-02 -7.767813640189289e-02 + -7.781157635251477e-02 -7.794405777817540e-02 -7.807558217526045e-02 -7.820615104290810e-02 -7.833576588300777e-02 + -7.846442820020204e-02 -7.859213950188429e-02 -7.871890129820040e-02 -7.884471510204899e-02 -7.896958242907975e-02 + -7.909350479769470e-02 -7.921648372904805e-02 -7.933852074704602e-02 -7.945961737834681e-02 -7.957977515236062e-02 + -7.969899560124950e-02 -7.981728025992833e-02 -7.993463066606307e-02 -8.005104836007192e-02 -8.016653488512572e-02 + -8.028109178714649e-02 -8.039472061480910e-02 -8.050742291953990e-02 -8.061920025551730e-02 -8.073005417967212e-02 + -8.083998625168703e-02 -8.094899803399656e-02 -8.105709109178735e-02 -8.116426699299814e-02 -8.127052730831993e-02 + -8.137587361119540e-02 -8.148030747781937e-02 -8.158383048713848e-02 -8.168644422085204e-02 -8.178815026341084e-02 + -8.188895020201793e-02 -8.198884562662824e-02 -8.208783812994880e-02 -8.218592930743872e-02 -8.228312075730933e-02 + -8.237941408052364e-02 -8.247481088079674e-02 -8.256931276459598e-02 -8.266292134114070e-02 -8.275563822240199e-02 + -8.284746502310350e-02 -8.293840336072032e-02 -8.302845485548017e-02 -8.311762113036217e-02 -8.320590381109803e-02 + -8.329330452617120e-02 -8.337982490681714e-02 -8.346546658702368e-02 -8.355023120353025e-02 -8.363412039582881e-02 + -8.371713580616265e-02 -8.379927907952758e-02 -8.388055186367158e-02 -8.396095580909445e-02 -8.404049256904787e-02 + -8.411916379953582e-02 -8.419697115931422e-02 -8.427391630989078e-02 -8.435000091552609e-02 -8.442522664323152e-02 + -8.449959516277131e-02 -8.457310814666183e-02 -8.464576727017102e-02 -8.471757421131908e-02 -8.478853065087791e-02 + -8.485863827237218e-02 -8.492789876207806e-02 -8.499631380902384e-02 -8.506388510498973e-02 -8.513061434450822e-02 + -8.519650322486376e-02 -8.526155344609279e-02 -8.532576671098366e-02 -8.538914472507693e-02 -8.545168919666535e-02 + -8.551340183679337e-02 -8.557428435925767e-02 -8.563433848060682e-02 -8.569356592014157e-02 -8.575196839991472e-02 + -8.580954764473099e-02 -8.586630538214737e-02 -8.592224334247232e-02 -8.597736325876712e-02 -8.603166686684437e-02 + -8.608515590526915e-02 -8.613783211535850e-02 -8.618969724118136e-02 -8.624075302955898e-02 -8.629100123006424e-02 + -8.634044359502220e-02 -8.638908187951025e-02 -8.643691784135762e-02 -8.648395324114533e-02 -8.653018984220677e-02 + -8.657562941062728e-02 -8.662027371524418e-02 -8.666412452764680e-02 -8.670718362217662e-02 -8.674945277592711e-02 + -8.679093376874379e-02 -8.683162838322392e-02 -8.687153840471740e-02 -8.691066562132557e-02 -8.694901182390223e-02 + -8.698657880605309e-02 -8.702336836413561e-02 -8.705938229725983e-02 -8.709462240728726e-02 -8.712909049883176e-02 + -8.716278837925941e-02 -8.719571785868774e-02 -8.722788074998704e-02 -8.725927886877895e-02 -8.728991403343762e-02 + -8.731978806508907e-02 -8.734890278761125e-02 -8.737726002763439e-02 -8.740486161454065e-02 -8.743170938046393e-02 + -8.745780516029074e-02 -8.748315079165922e-02 -8.750774811495955e-02 -8.753159897333428e-02 -8.755470521267746e-02 + -8.757706868163553e-02 -8.759869123160711e-02 -8.761957471674260e-02 -8.763972099394432e-02 -8.765913192286698e-02 + -8.767780936591689e-02 -8.769575518825297e-02 -8.771297125778563e-02 -8.772945944517767e-02 -8.774522162384372e-02 + -8.776025966995045e-02 -8.777457546241675e-02 -8.778817088291344e-02 -8.780104781586337e-02 -8.781320814844132e-02 + -8.782465377057433e-02 -8.783538657494126e-02 -8.784540845697324e-02 -8.785472131485304e-02 -8.786332704951594e-02 + -8.787122756464896e-02 -8.787842476669123e-02 -8.788492056483410e-02 -8.789071687102047e-02 -8.789581559994569e-02 + -8.790021866905713e-02 -8.790392799855402e-02 -8.790694551138790e-02 -8.790927313326173e-02 -8.791091279263129e-02 + -8.791186642070403e-02 -8.791213595143924e-02 -8.791172332154859e-02 -8.791063047049545e-02 -8.790885934049569e-02 + -8.790641187651689e-02 -8.790329002627867e-02 -8.789949574025258e-02 -8.789503097166264e-02 -8.788989767648445e-02 + -8.788409781344578e-02 -8.787763334402661e-02 -8.787050623245890e-02 -8.786271844572627e-02 -8.785427195356502e-02 + -8.784516872846285e-02 -8.783541074565988e-02 -8.782499998314838e-02 -8.781393842167212e-02 -8.780222804472751e-02 + -8.778987083856249e-02 -8.777686879217751e-02 -8.776322389732452e-02 -8.774893814850804e-02 -8.773401354298431e-02 + -8.771845208076164e-02 -8.770225576460042e-02 -8.768542660001302e-02 -8.766796659526424e-02 -8.764987776137005e-02 + -8.763116211209938e-02 -8.761182166397265e-02 -8.759185843626241e-02 -8.757127445099329e-02 -8.755007173294212e-02 + -8.752825230963746e-02 -8.750581821136007e-02 -8.748277147114268e-02 -8.745911412477023e-02 -8.743484821077964e-02 + -8.740997577045952e-02 -8.738449884785099e-02 -8.735841948974700e-02 -8.733173974569233e-02 -8.730446166798436e-02 + -8.727658731167202e-02 -8.724811873455625e-02 -8.721905799719029e-02 -8.718940716287940e-02 -8.715916829768057e-02 + -8.712834347040335e-02 -8.709693475260882e-02 -8.706494421861027e-02 -8.703237394527798e-02 -8.699922597728088e-02 + -8.696550228694298e-02 -8.693120483950313e-02 -8.689633560282184e-02 -8.686089654738119e-02 -8.682488964628460e-02 + -8.678831687525709e-02 -8.675118021264554e-02 -8.671348163941769e-02 -8.667522313916365e-02 -8.663640669809433e-02 + -8.659703430504258e-02 -8.655710795146269e-02 -8.651662963143043e-02 -8.647560134164323e-02 -8.643402508141988e-02 + -8.639190285270071e-02 -8.634923666004790e-02 -8.630602851064474e-02 -8.626228041429627e-02 -8.621799438342929e-02 + -8.617317243309158e-02 -8.612781658095285e-02 -8.608192884730434e-02 -8.603551125505852e-02 -8.598856582974977e-02 + -8.594109459953399e-02 -8.589309959518819e-02 -8.584458285011133e-02 -8.579554640032372e-02 -8.574599228446739e-02 + -8.569592254380567e-02 -8.564533922222330e-02 -8.559424436622716e-02 -8.554264002494505e-02 -8.549052825012649e-02 + -8.543791109614272e-02 -8.538479061998627e-02 -8.533116888127143e-02 -8.527704794223386e-02 -8.522242986773053e-02 + -8.516731672524055e-02 -8.511171058486407e-02 -8.505561351932295e-02 -8.499902760396066e-02 -8.494195491674167e-02 + -8.488439753825300e-02 -8.482635755170224e-02 -8.476783704291904e-02 -8.470883810035439e-02 -8.464936281508087e-02 + -8.458941328079266e-02 -8.452899159380531e-02 -8.446809985305584e-02 -8.440674016010333e-02 -8.434491461912776e-02 + -8.428262533693086e-02 -8.421987442293621e-02 -8.415666398918835e-02 -8.409299615035390e-02 -8.402887302372071e-02 + -8.396429672919803e-02 -8.389926938931712e-02 -8.383379312923028e-02 -8.376787007671167e-02 -8.370150236215682e-02 + -8.363469211858295e-02 -8.356744148162856e-02 -8.349975258955392e-02 -8.343162758324070e-02 -8.336306860619228e-02 + -8.329407780453330e-02 -8.322465732701009e-02 -8.315480932499064e-02 -8.308453595246411e-02 -8.301383936604165e-02 + -8.294272172495556e-02 -8.287118519105992e-02 -8.279923192883029e-02 -8.272686410536352e-02 -8.265408389037840e-02 + -8.258089345621501e-02 -8.250729497783500e-02 -8.243329063282155e-02 -8.235888260137945e-02 -8.228407306633484e-02 + -8.220886421313565e-02 -8.213325822985104e-02 -8.205725730717205e-02 -8.198086363841110e-02 -8.190407941950181e-02 + -8.182690684900011e-02 -8.174934812808263e-02 -8.167140546054813e-02 -8.159308105281646e-02 -8.151437711392934e-02 + -8.143529585555001e-02 -8.135583949196296e-02 -8.127601024007444e-02 -8.119581031941231e-02 -8.111524195212577e-02 + -8.103430736298553e-02 -8.095300877938404e-02 -8.087134843133519e-02 -8.078932855147432e-02 -8.070695137505837e-02 + -8.062421913996586e-02 -8.054113408669680e-02 -8.045769845837270e-02 -8.037391450073657e-02 -8.028978446215321e-02 + -8.020531059360861e-02 -8.012049514871061e-02 -8.003534038368824e-02 -7.994984855739226e-02 -7.986402193129513e-02 + -7.977786276949053e-02 -7.969137333869381e-02 -7.960455590824192e-02 -7.951741275009318e-02 -7.942994613882769e-02 + -7.934215835164679e-02 -7.925405166837354e-02 -7.916562837145256e-02 -7.907689074594990e-02 -7.898784107955314e-02 + -7.889848166257149e-02 -7.880881478793558e-02 -7.871884275119778e-02 -7.862856785053178e-02 -7.853799238673270e-02 + -7.844711866321756e-02 -7.835594898602459e-02 -7.826448566381393e-02 -7.817273100786679e-02 -7.808068733208609e-02 + -7.798835695299659e-02 -7.789574218974403e-02 -7.780284536409605e-02 -7.770966880044193e-02 -7.761621482579208e-02 + -7.752248576977877e-02 -7.742848396465576e-02 -7.733421174529810e-02 -7.723967144920280e-02 -7.714486541648802e-02 + -7.704979598989352e-02 -7.695446551478080e-02 -7.685887633913265e-02 -7.676303081355373e-02 -7.666693129126989e-02 + -7.657058012812851e-02 -7.647397968259878e-02 -7.637713231577122e-02 -7.628004039135795e-02 -7.618270627569269e-02 + -7.608513233773045e-02 -7.598732094904816e-02 -7.588927448384383e-02 -7.579099531893732e-02 -7.569248583377011e-02 + -7.559374841040481e-02 -7.549478543352595e-02 -7.539559929043944e-02 -7.529619237107257e-02 -7.519656706797456e-02 + -7.509672577631583e-02 -7.499667089388827e-02 -7.489640482110571e-02 -7.479592996100309e-02 -7.469524871923723e-02 + -7.459436350408617e-02 -7.449327672644970e-02 -7.439199079984912e-02 -7.429050814042711e-02 -7.418883116694795e-02 + -7.408696230079777e-02 -7.398490396598369e-02 -7.388265858913480e-02 -7.378022859950155e-02 -7.367761642895564e-02 + -7.357482451199110e-02 -7.347185528572267e-02 -7.336871118988687e-02 -7.326539466684208e-02 -7.316190816156776e-02 + -7.305825412166529e-02 -7.295443499735729e-02 -7.285045324148795e-02 -7.274631130952323e-02 -7.264201165955037e-02 + -7.253755675227827e-02 -7.243294905103739e-02 -7.232819102177949e-02 -7.222328513307825e-02 -7.211823385612862e-02 + -7.201303966474694e-02 -7.190770503537158e-02 -7.180223244706187e-02 -7.169662438149921e-02 -7.159088332298612e-02 + -7.148501175844676e-02 -7.137901217742702e-02 -7.127288707209412e-02 -7.116663893723675e-02 -7.106027027026546e-02 + -7.095378357121199e-02 -7.084718134272981e-02 -7.074046609009386e-02 -7.063364032120049e-02 -7.052670654656798e-02 + -7.041966727933570e-02 -7.031252503526468e-02 -7.020528233273769e-02 -7.009794169275867e-02 -6.999050563895366e-02 + -6.988297669756957e-02 -6.977535739747522e-02 -6.966765027016092e-02 -6.955985784650019e-02 -6.945198202039787e-02 + -6.934402328282341e-02 -6.923598193856043e-02 -6.912785829271997e-02 -6.901965265074038e-02 -6.891136531838719e-02 + -6.880299660175361e-02 -6.869454680725975e-02 -6.858601624165350e-02 -6.847740521200983e-02 -6.836871402573100e-02 + -6.825994299054693e-02 -6.815109241451449e-02 -6.804216260601807e-02 -6.793315387376948e-02 -6.782406652680775e-02 + -6.771490087449940e-02 -6.760565722653805e-02 -6.749633589294474e-02 -6.738693718406810e-02 -6.727746141058376e-02 + -6.716790888349479e-02 -6.705827991413178e-02 -6.694857481415233e-02 -6.683879389554183e-02 -6.672893747061263e-02 + -6.661900585200442e-02 -6.650899935268449e-02 -6.639891828594741e-02 -6.628876296541475e-02 -6.617853370503593e-02 + -6.606823081908735e-02 -6.595785462217293e-02 -6.584740542922383e-02 -6.573688355549850e-02 -6.562628931658299e-02 + -6.551562302839033e-02 -6.540488500716121e-02 -6.529407556946355e-02 -6.518319503219243e-02 -6.507224371257057e-02 + -6.496122192814785e-02 -6.485012999680138e-02 -6.473896823673603e-02 -6.462773696648344e-02 -6.451643650490320e-02 + -6.440506717118179e-02 -6.429362928483297e-02 -6.418212316569837e-02 -6.407054913394643e-02 -6.395890751007313e-02 + -6.384719861490194e-02 -6.373542276958327e-02 -6.362358029559541e-02 -6.351167151474350e-02 -6.339969674916027e-02 + -6.328765632130577e-02 -6.317555055396738e-02 -6.306337977025966e-02 -6.295114429362485e-02 -6.283884444783211e-02 + -6.272648055697842e-02 -6.261405294548769e-02 -6.250156193811127e-02 -6.238900785992807e-02 -6.227639103634401e-02 + -6.216371179309262e-02 -6.205097045623469e-02 -6.193816735215815e-02 -6.182530280757861e-02 -6.171237714953885e-02 + -6.159939070540884e-02 -6.148634380288628e-02 -6.137323676999570e-02 -6.126006993508951e-02 -6.114684362684713e-02 + -6.103355817427517e-02 -6.092021390670813e-02 -6.080681115380732e-02 -6.069335024556154e-02 -6.057983151228719e-02 + -6.046625528462752e-02 -6.035262189355362e-02 -6.023893167036368e-02 -6.012518494668311e-02 -6.001138205446489e-02 + -5.989752332598935e-02 -5.978360909386377e-02 -5.966963969102337e-02 -5.955561545073018e-02 -5.944153670657401e-02 + -5.932740379247161e-02 -5.921321704266727e-02 -5.909897679173264e-02 -5.898468337456673e-02 -5.887033712639567e-02 + -5.875593838277331e-02 -5.864148747958035e-02 -5.852698475302542e-02 -5.841243053964397e-02 -5.829782517629895e-02 + -5.818316900018088e-02 -5.806846234880725e-02 -5.795370556002318e-02 -5.783889897200110e-02 -5.772404292324044e-02 + -5.760913775256857e-02 -5.749418379913960e-02 -5.737918140243532e-02 -5.726413090226490e-02 -5.714903263876454e-02 + -5.703388695239814e-02 -5.691869418395674e-02 -5.680345467455867e-02 -5.668816876564980e-02 -5.657283679900319e-02 + -5.645745911671918e-02 -5.634203606122576e-02 -5.622656797527780e-02 -5.611105520195799e-02 -5.599549808467602e-02 + -5.587989696716892e-02 -5.576425219350140e-02 -5.564856410806515e-02 -5.553283305557923e-02 -5.541705938109036e-02 + -5.530124342997220e-02 -5.518538554792607e-02 -5.506948608098045e-02 -5.495354537549102e-02 -5.483756377814131e-02 + -5.472154163594165e-02 -5.460547929622987e-02 -5.448937710667139e-02 -5.437323541525856e-02 -5.425705457031151e-02 + -5.414083492047734e-02 -5.402457681473059e-02 -5.390828060237331e-02 -5.379194663303465e-02 -5.367557525667133e-02 + -5.355916682356726e-02 -5.344272168433360e-02 -5.332624018990918e-02 -5.320972269155985e-02 -5.309316954087884e-02 + -5.297658108978699e-02 -5.285995769053210e-02 -5.274329969568963e-02 -5.262660745816224e-02 -5.250988133117977e-02 + -5.239312166829981e-02 -5.227632882340692e-02 -5.215950315071305e-02 -5.204264500475772e-02 -5.192575474040752e-02 + -5.180883271285662e-02 -5.169187927762634e-02 -5.157489479056533e-02 -5.145787960784985e-02 -5.134083408598318e-02 + -5.122375858179602e-02 -5.110665345244662e-02 -5.098951905542025e-02 -5.087235574852982e-02 -5.075516388991539e-02 + -5.063794383804430e-02 -5.052069595171155e-02 -5.040342059003908e-02 -5.028611811247651e-02 -5.016878887880065e-02 + -5.005143324911544e-02 -4.993405158385265e-02 -4.981664424377098e-02 -4.969921158995654e-02 -4.958175398382301e-02 + -4.946427178711104e-02 -4.934676536188908e-02 -4.922923507055249e-02 -4.911168127582409e-02 -4.899410434075429e-02 + -4.887650462872051e-02 -4.875888250342764e-02 -4.864123832890802e-02 -4.852357246952108e-02 -4.840588528995391e-02 + -4.828817715522068e-02 -4.817044843066291e-02 -4.805269948194966e-02 -4.793493067507718e-02 -4.781714237636900e-02 + -4.769933495247625e-02 -4.758150877037703e-02 -4.746366419737715e-02 -4.734580160110952e-02 -4.722792134953439e-02 + -4.711002381093956e-02 -4.699210935393997e-02 -4.687417834747784e-02 -4.675623116082310e-02 -4.663826816357249e-02 + -4.652028972565064e-02 -4.640229621730910e-02 -4.628428800912687e-02 -4.616626547201049e-02 -4.604822897719350e-02 + -4.593017889623716e-02 -4.581211560102976e-02 -4.569403946378698e-02 -4.557595085705204e-02 -4.545785015369530e-02 + -4.533973772691447e-02 -4.522161395023479e-02 -4.510347919750854e-02 -4.498533384291566e-02 -4.486717826096327e-02 + -4.474901282648561e-02 -4.463083791464479e-02 -4.451265390092980e-02 -4.439446116156419e-02 -4.427626016218135e-02 + -4.415805156899697e-02 -4.403983607613995e-02 -4.392161437837425e-02 -4.380338717109913e-02 -4.368515515034960e-02 + -4.356691901279580e-02 -4.344867945574318e-02 -4.333043717713282e-02 -4.321219287554092e-02 -4.309394725017942e-02 + -4.297570100089526e-02 -4.285745482817090e-02 -4.273920943312434e-02 -4.262096551750877e-02 -4.250272378371273e-02 + -4.238448493476039e-02 -4.226624967431102e-02 -4.214801870665959e-02 -4.202979273673614e-02 -4.191157247010616e-02 + -4.179335861297077e-02 -4.167515187216610e-02 -4.155695295516404e-02 -4.143876257007161e-02 -4.132058142563113e-02 + -4.120241023122069e-02 -4.108424969685343e-02 -4.096610053317787e-02 -4.084796345147822e-02 -4.072983916367363e-02 + -4.061172838231913e-02 -4.049363182060472e-02 -4.037555019235591e-02 -4.025748421203375e-02 -4.013943459473451e-02 + -4.002140205618971e-02 -3.990338731276668e-02 -3.978539108146766e-02 -3.966741407993069e-02 -3.954945702642890e-02 + -3.943152063987078e-02 -3.931360563980052e-02 -3.919571274639742e-02 -3.907784268047614e-02 -3.895999616348697e-02 + -3.884217391751530e-02 -3.872437666528219e-02 -3.860660513014387e-02 -3.848886003609187e-02 -3.837114210775351e-02 + -3.825345207039098e-02 -3.813579064990232e-02 -3.801815857282063e-02 -3.790055656631443e-02 -3.778298535818789e-02 + -3.766544567688026e-02 -3.754793825146618e-02 -3.743046381165597e-02 -3.731302308779497e-02 -3.719561681086424e-02 + -3.707824571247997e-02 -3.696091052489375e-02 -3.684361198099276e-02 -3.672635081429939e-02 -3.660912775897134e-02 + -3.649194354980197e-02 -3.637479892221968e-02 -3.625769461228862e-02 -3.614063135670806e-02 -3.602360989281263e-02 + -3.590663095857260e-02 -3.578969529259339e-02 -3.567280363411582e-02 -3.555595672301627e-02 -3.543915529980625e-02 + -3.532240010563296e-02 -3.520569188227871e-02 -3.508903137216125e-02 -3.497241931833388e-02 -3.485585646448511e-02 + -3.473934355493880e-02 -3.462288133465444e-02 -3.450647054922656e-02 -3.439011194488546e-02 -3.427380626849654e-02 + -3.415755426756054e-02 -3.404135669021390e-02 -3.392521428522807e-02 -3.380912780201027e-02 -3.369309799060278e-02 + -3.357712560168329e-02 -3.346121138656516e-02 -3.334535609719685e-02 -3.322956048616219e-02 -3.311382530668069e-02 + -3.299815131260684e-02 -3.288253925843095e-02 -3.276698989927835e-02 -3.265150399090982e-02 -3.253608228972178e-02 + -3.242072555274576e-02 -3.230543453764866e-02 -3.219021000273301e-02 -3.207505270693645e-02 -3.195996340983229e-02 + -3.184494287162900e-02 -3.172999185317035e-02 -3.161511111593586e-02 -3.150030142204013e-02 -3.138556353423311e-02 + -3.127089821590046e-02 -3.115630623106283e-02 -3.104178834437658e-02 -3.092734532113327e-02 -3.081297792725978e-02 + -3.069868692931866e-02 -3.058447309450758e-02 -3.047033719065956e-02 -3.035627998624332e-02 -3.024230225036257e-02 + -3.012840475275679e-02 -3.001458826380056e-02 -2.990085355450384e-02 -2.978720139651223e-02 -2.967363256210639e-02 + -2.956014782420270e-02 -2.944674795635266e-02 -2.933343373274314e-02 -2.922020592819668e-02 -2.910706531817093e-02 + -2.899401267875893e-02 -2.888104878668935e-02 -2.876817441932589e-02 -2.865539035466803e-02 -2.854269737135031e-02 + -2.843009624864269e-02 -2.831758776645077e-02 -2.820517270531528e-02 -2.809285184641228e-02 -2.798062597155357e-02 + -2.786849586318588e-02 -2.775646230439178e-02 -2.764452607888885e-02 -2.753268797103016e-02 -2.742094876580434e-02 + -2.730930924883518e-02 -2.719777020638186e-02 -2.708633242533919e-02 -2.697499669323703e-02 -2.686376379824094e-02 + -2.675263452915165e-02 -2.664160967540522e-02 -2.653069002707341e-02 -2.641987637486295e-02 -2.630916951011639e-02 + -2.619857022481131e-02 -2.608807931156073e-02 -2.597769756361329e-02 -2.586742577485278e-02 -2.575726473979834e-02 + -2.564721525360478e-02 -2.553727811206192e-02 -2.542745411159534e-02 -2.531774404926573e-02 -2.520814872276915e-02 + -2.509866893043734e-02 -2.498930547123711e-02 -2.488005914477072e-02 -2.477093075127600e-02 -2.466192109162587e-02 + -2.455303096732897e-02 -2.444426118052904e-02 -2.433561253400525e-02 -2.422708583117236e-02 -2.411868187608028e-02 + -2.401040147341432e-02 -2.390224542849538e-02 -2.379421454727947e-02 -2.368630963635826e-02 -2.357853150295861e-02 + -2.347088095494270e-02 -2.336335880080839e-02 -2.325596584968866e-02 -2.314870291135187e-02 -2.304157079620200e-02 + -2.293457031527812e-02 -2.282770228025499e-02 -2.272096750344251e-02 -2.261436679778594e-02 -2.250790097686621e-02 + -2.240157085489928e-02 -2.229537724673683e-02 -2.218932096786568e-02 -2.208340283440801e-02 -2.197762366312167e-02 + -2.187198427139962e-02 -2.176648547727019e-02 -2.166112809939739e-02 -2.155591295708024e-02 -2.145084087025348e-02 + -2.134591265948700e-02 -2.124112914598606e-02 -2.113649115159157e-02 -2.103199949877955e-02 -2.092765501066142e-02 + -2.082345851098424e-02 -2.071941082413009e-02 -2.061551277511681e-02 -2.051176518959732e-02 -2.040816889385997e-02 + -2.030472471482873e-02 -2.020143348006270e-02 -2.009829601775636e-02 -1.999531315673983e-02 -1.989248572647826e-02 + -1.978981455707255e-02 -1.968730047925873e-02 -1.958494432440819e-02 -1.948274692469593e-02 -1.938070915384443e-02 + -1.927883198029905e-02 -1.917711638643049e-02 -1.907556335538169e-02 -1.897417387106797e-02 -1.887294891817665e-02 + -1.877188948216719e-02 -1.867099654927154e-02 -1.857027110649347e-02 -1.846971414160931e-02 -1.836932664316731e-02 + -1.826910960048793e-02 -1.816906400366405e-02 -1.806919084356051e-02 -1.796949111181436e-02 -1.786996580083505e-02 + -1.777061590380392e-02 -1.767144241467483e-02 -1.757244632817358e-02 -1.747362863979817e-02 -1.737499034581904e-02 + -1.727653244327855e-02 -1.717825592999131e-02 -1.708016180454431e-02 -1.698225106629644e-02 -1.688452471537910e-02 + -1.678698375269563e-02 -1.668962917992158e-02 -1.659246199950492e-02 -1.649548321466558e-02 -1.639869382939569e-02 + -1.630209484845979e-02 -1.620568727739433e-02 -1.610947212250823e-02 -1.601345039088239e-02 -1.591762309036990e-02 + -1.582199122959627e-02 -1.572655581795891e-02 -1.563131786562771e-02 -1.553627838354454e-02 -1.544143838342345e-02 + -1.534679887775091e-02 -1.525236087978538e-02 -1.515812540355748e-02 -1.506409346387027e-02 -1.497026607629869e-02 + -1.487664425719019e-02 -1.478322902366419e-02 -1.469002139361226e-02 -1.459702238569844e-02 -1.450423301935871e-02 + -1.441165431480125e-02 -1.431928729300667e-02 -1.422713297572744e-02 -1.413519238548856e-02 -1.404346654558698e-02 + -1.395195648009184e-02 -1.386066321384470e-02 -1.376958777245910e-02 -1.367873118232077e-02 -1.358809447058783e-02 + -1.349767866519034e-02 -1.340748479483081e-02 -1.331751388898374e-02 -1.322776697789583e-02 -1.313824509258617e-02 + -1.304894926484586e-02 -1.295988052723814e-02 -1.287103991309871e-02 -1.278242845653516e-02 -1.269404719242754e-02 + -1.260589715642790e-02 -1.251797938496049e-02 -1.243029491522193e-02 -1.234284478518080e-02 -1.225563003357810e-02 + -1.216865169992686e-02 -1.208191082451227e-02 -1.199540844839196e-02 -1.190914561339549e-02 -1.182312336212465e-02 + -1.173734273795365e-02 -1.165180478502856e-02 -1.156651054826796e-02 -1.148146107336241e-02 -1.139665740677465e-02 + -1.131210059573983e-02 -1.122779168826510e-02 -1.114373173312977e-02 -1.105992177988558e-02 -1.097636287885616e-02 + -1.089305608113763e-02 -1.081000243859810e-02 -1.072720300387785e-02 -1.064465883038958e-02 -1.056237097231796e-02 + -1.048034048461987e-02 -1.039856842302458e-02 -1.031705584403328e-02 -1.023580380491962e-02 -1.015481336372925e-02 + -1.007408557928002e-02 -9.993621511162145e-03 -9.913422219737792e-03 -9.833488766141573e-03 -9.753822212280107e-03 + -9.674423620832193e-03 -9.595294055249034e-03 -9.516434579753808e-03 -9.437846259341916e-03 -9.359530159781118e-03 + -9.281487347611131e-03 -9.203718890144106e-03 -9.126225855464203e-03 -9.049009312427773e-03 -8.972070330663551e-03 + -8.895409980572274e-03 -8.819029333326877e-03 -8.742929460872666e-03 -8.667111435926907e-03 -8.591576331979283e-03 + -8.516325223291508e-03 -8.441359184897480e-03 -8.366679292603471e-03 -8.292286622987761e-03 -8.218182253400836e-03 + -8.144367261965546e-03 -8.070842727576693e-03 -7.997609729901515e-03 -7.924669349379259e-03 -7.852022667221374e-03 + -7.779670765411674e-03 -7.707614726705985e-03 -7.635855634632334e-03 -7.564394573491114e-03 -7.493232628354679e-03 + -7.422370885067802e-03 -7.351810430247282e-03 -7.281552351282106e-03 -7.211597736333631e-03 -7.141947674335181e-03 + -7.072603254992488e-03 -7.003565568783322e-03 -6.934835706957635e-03 -6.866414761537744e-03 -6.798303825317996e-03 + -6.730503991864924e-03 -6.663016355517424e-03 -6.595842011386363e-03 -6.528982055355023e-03 -6.462437584078710e-03 + -6.396209694984930e-03 -6.330299486273537e-03 -6.264708056916423e-03 -6.199436506657668e-03 -6.134485936013709e-03 + -6.069857446272964e-03 -6.005552139496247e-03 -5.941571118516416e-03 -5.877915486938524e-03 -5.814586349139964e-03 + -5.751584810270169e-03 -5.688911976250773e-03 -5.626568953775749e-03 -5.564556850311063e-03 -5.502876774095071e-03 + -5.441529834138177e-03 -5.380517140222976e-03 -5.319839802904406e-03 -5.259498933509443e-03 -5.199495644137271e-03 + -5.139831047659399e-03 -5.080506257719342e-03 -5.021522388732999e-03 -4.962880555888315e-03 -4.904581875145436e-03 + -4.846627463236837e-03 -4.789018437667000e-03 -4.731755916712783e-03 -4.674841019423105e-03 -4.618274865619072e-03 + -4.562058575894123e-03 -4.506193271613753e-03 -4.450680074915650e-03 -4.395520108709830e-03 -4.340714496678322e-03 + -4.286264363275529e-03 -4.232170833727910e-03 -4.178435034034121e-03 -4.125058090965139e-03 -4.072041132064007e-03 + -4.019385285645958e-03 -3.967091680798546e-03 -3.915161447381354e-03 -3.863595716026320e-03 -3.812395618137451e-03 + -3.761562285890948e-03 -3.711096852235330e-03 -3.661000450891184e-03 -3.611274216351290e-03 -3.561919283880745e-03 + -3.512936789516676e-03 -3.464327870068561e-03 -3.416093663117957e-03 -3.368235307018608e-03 -3.320753940896576e-03 + -3.273650704649951e-03 -3.226926738949178e-03 -3.180583185236778e-03 -3.134621185727464e-03 -3.089041883408256e-03 + -3.043846422038254e-03 -2.999035946148752e-03 -2.954611601043348e-03 -2.910574532797684e-03 -2.866925888259744e-03 + -2.823666815049592e-03 -2.780798461559491e-03 -2.738321976953999e-03 -2.696238508373619e-03 -2.654548441671276e-03 + -2.613250370457768e-03 -2.572342629415666e-03 -2.531823551528605e-03 -2.491691468081058e-03 -2.451944708658432e-03 + -2.412581601147166e-03 -2.373600471734536e-03 -2.334999644908753e-03 -2.296777443459060e-03 -2.258932188475506e-03 + -2.221462199349202e-03 -2.184365793772097e-03 -2.147641287737080e-03 -2.111286995538061e-03 -2.075301229769797e-03 + -2.039682301327979e-03 -2.004428519409321e-03 -1.969538191511356e-03 -1.935009623432664e-03 -1.900841119272678e-03 + -1.867030981431763e-03 -1.833577510611304e-03 -1.800479005813509e-03 -1.767733764341631e-03 -1.735340081799775e-03 + -1.703296252092982e-03 -1.671600567427307e-03 -1.640251318309660e-03 -1.609246793547888e-03 -1.578585280250846e-03 + -1.548265063828226e-03 -1.518284427990752e-03 -1.488641654750009e-03 -1.459335024418519e-03 -1.430362815609809e-03 + -1.401723305238268e-03 -1.373414768519222e-03 -1.345435478969000e-03 -1.317783708404775e-03 -1.290457726944745e-03 + -1.263455803007974e-03 -1.236776203314463e-03 -1.210417192885211e-03 -1.184377035042087e-03 -1.158653991407897e-03 + -1.133246321906444e-03 -1.108152284762381e-03 -1.083370136501379e-03 -1.058898131949982e-03 -1.034734524235670e-03 + -1.010877564786915e-03 -9.873255033330667e-04 -9.640765879044092e-04 -9.411290648322183e-04 -9.184811787486289e-04 + -8.961311725867850e-04 -8.740772875807100e-04 -8.523177632653630e-04 -8.308508374766898e-04 -8.096747463515024e-04 + -7.887877243276144e-04 -7.681880041437243e-04 -7.478738168394655e-04 -7.278433917554549e-04 -7.080949565331957e-04 + -6.886267371151258e-04 -6.694369577446642e-04 -6.505238409661040e-04 -6.318856076247330e-04 -6.135204768667287e-04 + -5.954266661392027e-04 -5.776023911902466e-04 -5.600458660688418e-04 -5.427553031249055e-04 -5.257289130093312e-04 + -5.089649046738917e-04 -4.924614853713492e-04 -4.762168606553596e-04 -4.602292343805147e-04 -4.444968087023787e-04 + -4.290177840774126e-04 -4.137903592630125e-04 -3.988127313175460e-04 -3.840830956002659e-04 -3.695996457714088e-04 + -3.553605737921095e-04 -3.413640699244384e-04 -3.276083227314343e-04 -3.140915190770257e-04 -3.008118441261203e-04 + -2.877674813445269e-04 -2.749566124989906e-04 -2.623774176572213e-04 -2.500280751878325e-04 -2.379067617603739e-04 + -2.260116523453583e-04 -2.143409202141946e-04 -2.028927369392646e-04 -1.916652723938562e-04 -1.806566947521926e-04 + -1.698651704894585e-04 -1.592888643817466e-04 -1.489259395060843e-04 -1.387745572404594e-04 -1.288328772637608e-04 + -1.190990575558447e-04 -1.095712543974777e-04 -1.002476223703619e-04 -9.112631435715619e-05 -8.220548154143184e-05 + -7.348327340769540e-05 -6.495783774140863e-05 -5.662732062894079e-05 -4.848986645762257e-05 -4.054361791569914e-05 + -3.278671599235110e-05 -2.521729997771223e-05 -1.783350746283223e-05 -1.063347433969600e-05 -3.615334801240493e-06 + 3.222778658685659e-06 9.882735245276752e-06 1.636640586280917e-05 2.267566311462389e-05 2.881238130311222e-05 + 3.477843642975067e-05 4.057570619506181e-05 4.620606999864783e-05 5.167140893917587e-05 5.697360581436525e-05 + 6.211454512101381e-05 6.709611305498441e-05 7.192019751119294e-05 7.658868808363676e-05 8.110347606536316e-05 + 8.546645444849607e-05 8.967951792422436e-05 9.374456288279199e-05 9.766348741351855e-05 1.014381913047887e-04 + 1.050705760440430e-04 1.085625448177996e-04 1.119160025116305e-04 1.151328557101812e-04 1.182150126971625e-04 + 1.211643834553430e-04 1.239828796665641e-04 1.266724147117321e-04 1.292349036708124e-04 1.316722633228438e-04 + 1.339864121459228e-04 1.361792703172170e-04 1.382527597129589e-04 1.402088039084416e-04 1.420493281780282e-04 + 1.437762594951472e-04 1.453915265322880e-04 1.468970596610109e-04 1.482947909519366e-04 1.495866541747544e-04 + 1.507745847982190e-04 1.518605199901477e-04 1.528463986174264e-04 1.537341612460032e-04 1.545257501408940e-04 + 1.552231092661798e-04 1.558281842850050e-04 1.563429225595813e-04 1.567692731511856e-04 1.571091868201587e-04 + 1.573646160259084e-04 1.575375149269067e-04 1.576298393806915e-04 1.576435469438660e-04 1.575805968720984e-04 + 1.574429501201228e-04 1.572325693417381e-04 1.569514188898089e-04 1.566014648162647e-04 1.561846748721012e-04 + 1.557030185073786e-04 1.551584668712223e-04 1.545529928118244e-04 1.538885708764409e-04 1.531671773113931e-04 + 1.523907900620694e-04 1.515613887729210e-04 1.506809547874672e-04 1.497514711482905e-04 1.487749225970387e-04 + 1.477532955744273e-04 1.466885782202338e-04 1.455827603733046e-04 1.444378335715486e-04 1.432557910519404e-04 + 1.420386277505224e-04 1.407883403023994e-04 1.395069270417419e-04 1.381963880017885e-04 1.368587249148390e-04 + 1.354959412122630e-04 1.341100420244920e-04 1.327030341810229e-04 1.312769262104213e-04 1.298337283403146e-04 + 1.283754524973959e-04 1.269041123074267e-04 1.254217230952293e-04 1.239303018846964e-04 1.224318673987819e-04 + 1.209284400595055e-04 1.194220419879556e-04 1.179146970042824e-04 1.164084306277015e-04 1.149052700764973e-04 + 1.134072442680149e-04 1.119163838186694e-04 1.104347210439378e-04 1.089642881482521e-04 1.075065638036360e-04 + 1.060616917058919e-04 1.046296187405764e-04 1.032102917416885e-04 1.018036574916611e-04 1.004096627213706e-04 + 9.902825411012883e-05 9.765937828568638e-05 9.630298182423587e-05 9.495901125040440e-05 9.362741303726210e-05 + 9.230813360631472e-05 9.100111932750678e-05 8.970631651922477e-05 8.842367144829072e-05 8.715313032996555e-05 + 8.589463932795203e-05 8.464814455438756e-05 8.341359206985246e-05 8.219092788336273e-05 8.098009795237320e-05 + 7.978104818278043e-05 7.859372442891682e-05 7.741807249355357e-05 7.625403812790351e-05 7.510156703161450e-05 + 7.396060485277686e-05 7.283109718791694e-05 7.171298958199990e-05 7.060622752843238e-05 6.951075646905706e-05 + 6.842652179415550e-05 6.735346884245057e-05 6.629154290110056e-05 6.524068920570583e-05 6.420085294030309e-05 + 6.317197923736776e-05 6.215401317781660e-05 6.114689979100181e-05 6.015058405471764e-05 5.916501089519467e-05 + 5.819012518710231e-05 5.722587175355111e-05 5.627219536608801e-05 5.532904074469879e-05 5.439635255781028e-05 + 5.347407542228503e-05 5.256215390342745e-05 5.166053251497838e-05 5.076915571911755e-05 4.988796792646560e-05 + 4.901691349607979e-05 4.815593673545620e-05 4.730498190053175e-05 4.646399319567940e-05 4.563291477371359e-05 + 4.481169073588553e-05 4.400026513188523e-05 4.319858195984344e-05 4.240658516632771e-05 4.162421864634442e-05 + 4.085142624334061e-05 4.008815174919960e-05 3.933433890424594e-05 3.858993139724115e-05 3.785487286538551e-05 + 3.712910689431992e-05 3.641257701812220e-05 3.570522671930905e-05 3.500699942883761e-05 3.431783852610154e-05 + 3.363768733893555e-05 3.296648914361141e-05 3.230418716483976e-05 3.165072457577154e-05 3.100604449799441e-05 + 3.037009000153688e-05 2.974280410486467e-05 2.912412977488233e-05 2.851400992693466e-05 2.791238742480376e-05 + 2.731920508071050e-05 2.673440565531601e-05 2.615793185771826e-05 2.558972634545591e-05 2.502973172450496e-05 + 2.447789054928025e-05 2.393414532263671e-05 2.339843849586672e-05 2.287071246870147e-05 2.235090958931219e-05 + 2.183897215430722e-05 2.133484240873532e-05 2.083846254608280e-05 2.034977470827478e-05 1.986872098567633e-05 + 1.939524341709012e-05 1.892928398975761e-05 1.847078463936019e-05 1.801968725001651e-05 1.757593365428549e-05 + 1.713946563316372e-05 1.671022491608660e-05 1.628815318092935e-05 1.587319205400491e-05 1.546528311006504e-05 + 1.506436787230126e-05 1.467038781234256e-05 1.428328435025799e-05 1.390299885455444e-05 1.352947264217759e-05 + 1.316264697851278e-05 1.280246307738298e-05 1.244886210105108e-05 1.210178516021787e-05 1.176117331402298e-05 + 1.142696757004559e-05 1.109910888430288e-05 1.077753816125079e-05 1.046219625378485e-05 1.015302396323831e-05 + 9.849962039384228e-06 9.552951180433689e-06 9.261932033036575e-06 8.976845192282242e-06 8.697631201698131e-06 + 8.424230553250473e-06 8.156583687344937e-06 7.894630992825108e-06 7.638312806974195e-06 7.387569415513559e-06 + 7.142341052603349e-06 6.902567900843093e-06 6.668190091270500e-06 6.439147703362075e-06 6.215380765033656e-06 + 5.996829252639130e-06 5.783433090971875e-06 5.575132153263523e-06 5.371866261184496e-06 5.173575184844488e-06 + 4.980198642791325e-06 4.791676302012246e-06 4.607947777932794e-06 4.428952634417314e-06 4.254630383769357e-06 + 4.084920486730822e-06 3.919762352482401e-06 3.759095338643961e-06 3.602858751273628e-06 3.450991844868813e-06 + 3.303433822365331e-06 3.160123835137790e-06 3.021000982999921e-06 2.886004314203887e-06 2.755072825440644e-06 + 2.628145461840243e-06 2.505161116971098e-06 2.386058632840807e-06 2.270776799895446e-06 2.159254357019885e-06 + 2.051429991538041e-06 1.947242339212340e-06 1.846629984243999e-06 1.749531459273255e-06 1.655885245378809e-06 + 1.565629772078447e-06 1.478703417328506e-06 1.395044507524116e-06 1.314591317499384e-06 1.237282070526997e-06 + 1.163054938318428e-06 1.091848041024111e-06 1.023599447233023e-06 9.582471739731455e-07 8.957291867110747e-07 + 8.359833993521945e-07 7.789476742408122e-07 7.245598221598258e-07 6.727576023310933e-07 6.234787224151194e-07 + 5.766608385111964e-07 5.322415551575088e-07 4.901584253309060e-07 4.503489504470246e-07 4.127505803603769e-07 + 3.773007133641286e-07 3.439366961903442e-07 3.125958240097801e-07 2.832153404319796e-07 2.557324375053353e-07 + 2.300842557169480e-07 2.062078839927037e-07 1.840403596973251e-07 1.635186686342403e-07 1.445797450457257e-07 + 1.271604716127872e-07 1.111976794552151e-07 9.662814813161721e-08 8.338860563934195e-08 7.141572841452154e-08 + 6.064614133209616e-08 5.101641770574893e-08 4.246307928797547e-08 3.492259627002727e-08 2.833138728193873e-08 + 2.262581939253933e-08 1.774220810942188e-08 1.361681737896142e-08 1.018585958632224e-08 7.385495555435938e-09 + 5.151834549023854e-09 3.420934268579909e-09 2.128800854379248e-09 1.211388885479524e-09 6.046013797143454e-10 + 2.442897936994365e-10 6.625402282856779e-11 6.242401275686175e-12 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 3.092962653460343e+01 6.144686330752435e+01 9.155581481450724e+01 1.212605495644046e+02 + 1.505651003731359e+02 1.794734646553439e+02 2.079896047137684e+02 2.361174480263539e+02 2.638608875311071e+02 + 2.912237819087242e+02 3.182099558630060e+02 3.448232003990666e+02 3.710672730993720e+02 3.969458983976072e+02 + 4.224627678503969e+02 4.476215404068967e+02 4.724258426762635e+02 4.968792691930342e+02 5.209853826804200e+02 + 5.447477143115200e+02 5.681697639685108e+02 5.912550004997697e+02 6.140068619750015e+02 6.364287559383409e+02 + 6.585240596594875e+02 6.802961203828419e+02 7.017482555747055e+02 7.228837531685164e+02 7.437058718081711e+02 + 7.642178410894217e+02 7.844228617993766e+02 8.043241061541186e+02 8.239247180344421e+02 8.432278132197488e+02 + 8.622364796200891e+02 8.809537775063659e+02 8.993827397387644e+02 9.175263719933142e+02 9.353876529867381e+02 + 9.529695346994749e+02 9.702749425969594e+02 9.873067758491643e+02 1.004067907548403e+03 1.020561184925392e+03 + 1.036789429563668e+03 1.052755437612222e+03 1.068461979996528e+03 1.083911802627899e+03 1.099107626611110e+03 + 1.114052148450492e+03 1.128748040254316e+03 1.143197949937570e+03 1.157404501423190e+03 1.171370294841618e+03 + 1.185097906728818e+03 1.198589890222757e+03 1.211848775258258e+03 1.224877068760366e+03 1.237677254836173e+03 + 1.250251794965091e+03 1.262603128187657e+03 1.274733671292826e+03 1.286645819003753e+03 1.298341944162134e+03 + 1.309824397911100e+03 1.321095509876596e+03 1.332157588347371e+03 1.343012920453519e+03 1.353663772343643e+03 + 1.364112389360511e+03 1.374360996215446e+03 1.384411797161216e+03 1.394266976163637e+03 1.403928697071726e+03 + 1.413399103786597e+03 1.422680320428930e+03 1.431774451505151e+03 1.440683582072250e+03 1.449409777901377e+03 + 1.457955085640010e+03 1.466321532972905e+03 1.474511128781773e+03 1.482525863303651e+03 1.490367708288016e+03 + 1.498038617152631e+03 1.505540525138221e+03 1.512875349461808e+03 1.520044989468906e+03 1.527051326784430e+03 + 1.533896225462498e+03 1.540581532134944e+03 1.547109076158651e+03 1.553480669761788e+03 1.559698108188795e+03 + 1.565763169844206e+03 1.571677616435426e+03 1.577443193114195e+03 1.583061628617119e+03 1.588534635404881e+03 + 1.593863909800465e+03 1.599051132126279e+03 1.604097966840042e+03 1.609006062669763e+03 1.613777052747505e+03 + 1.618412554742131e+03 1.622914170990993e+03 1.627283488630499e+03 1.631522079725746e+03 1.635631501398992e+03 + 1.639613295957194e+03 1.643468991018444e+03 1.647200099637420e+03 1.650808120429859e+03 1.654294537696007e+03 + 1.657660821543028e+03 1.660908428006512e+03 1.664038799170929e+03 1.667053363289175e+03 1.669953534901140e+03 + 1.672740714951283e+03 1.675416290905264e+03 1.677981636865718e+03 1.680438113687010e+03 1.682787069089082e+03 + 1.685029837770386e+03 1.687167741519947e+03 1.689202089328419e+03 1.691134177498399e+03 1.692965289753662e+03 + 1.694696697347702e+03 1.696329659171241e+03 1.697865421858981e+03 1.699305219895413e+03 1.700650275719819e+03 + 1.701901799830410e+03 1.703060990887614e+03 1.704129035816525e+03 1.705107109908571e+03 1.705996376922253e+03 + 1.706797989183223e+03 1.707513087683354e+03 1.708142802179180e+03 1.708688251289497e+03 1.709150542592057e+03 + 1.709530772719652e+03 1.709830027455300e+03 1.710049381826671e+03 1.710189900199788e+03 1.710252636371925e+03 + 1.710238633663830e+03 1.710148925011067e+03 1.709984533054660e+03 1.709746470231138e+03 1.709435738861639e+03 + 1.709053331240390e+03 1.708600229722532e+03 1.708077406811055e+03 1.707485825243189e+03 1.706826438076018e+03 + 1.706100188771399e+03 1.705308011280191e+03 1.704450830125807e+03 1.703529560487073e+03 1.702545108280416e+03 + 1.701498370241383e+03 1.700390234005469e+03 1.699221578188345e+03 1.697993272465343e+03 1.696706177650369e+03 + 1.695361145774132e+03 1.693959020161727e+03 1.692500635509617e+03 1.690986817961938e+03 1.689418385186218e+03 + 1.687796146448464e+03 1.686120902687609e+03 1.684393446589397e+03 1.682614562659610e+03 1.680785027296721e+03 + 1.678905608863965e+03 1.676977067760778e+03 1.675000156493683e+03 1.672975619746570e+03 1.670904194450420e+03 + 1.668786609852442e+03 1.666623587584642e+03 1.664415841731817e+03 1.662164078899028e+03 1.659868998278457e+03 + 1.657531291715782e+03 1.655151643775929e+03 1.652730731808349e+03 1.650269226011727e+03 1.647767789498148e+03 + 1.645227078356745e+03 1.642647741716828e+03 1.640030421810476e+03 1.637375754034628e+03 1.634684367012638e+03 + 1.631956882655341e+03 1.629193916221616e+03 1.626396076378419e+03 1.623563965260361e+03 1.620698178528749e+03 + 1.617799305430168e+03 1.614867928854573e+03 1.611904625392882e+03 1.608909965394110e+03 1.605884513022022e+03 + 1.602828826311309e+03 1.599743457223311e+03 1.596628951701260e+03 1.593485849725083e+03 1.590314685365736e+03 + 1.587115986839081e+03 1.583890276559329e+03 1.580638071192037e+03 1.577359881706643e+03 1.574056213428595e+03 + 1.570727566091011e+03 1.567374433885939e+03 1.563997305515167e+03 1.560596664240627e+03 1.557172987934351e+03 + 1.553726749128049e+03 1.550258415062232e+03 1.546768447734961e+03 1.543257303950145e+03 1.539725435365481e+03 + 1.536173288539968e+03 1.532601304981016e+03 1.529009921191181e+03 1.525399568714497e+03 1.521770674182409e+03 + 1.518123659359349e+03 1.514458941187898e+03 1.510776931833586e+03 1.507078038729322e+03 1.503362664619425e+03 + 1.499631207603318e+03 1.495884061178825e+03 1.492121614285112e+03 1.488344251345293e+03 1.484552352308622e+03 + 1.480746292692387e+03 1.476926443623421e+03 1.473093171879253e+03 1.469246839928947e+03 1.465387805973555e+03 + 1.461516423986262e+03 1.457633043752176e+03 1.453738010907779e+03 1.449831666980049e+03 1.445914349425263e+03 + 1.441986391667444e+03 1.438048123136507e+03 1.434099869306064e+03 1.430141951730933e+03 1.426174688084298e+03 + 1.422198392194570e+03 1.418213374081942e+03 1.414219939994621e+03 1.410218392444747e+03 1.406209030244037e+03 + 1.402192148539080e+03 1.398168038846371e+03 1.394136989087032e+03 1.390099283621229e+03 1.386055203282308e+03 + 1.382005025410638e+03 1.377949023887155e+03 1.373887469166645e+03 1.369820628310697e+03 1.365748765020423e+03 + 1.361672139668884e+03 1.357591009333204e+03 1.353505627826470e+03 1.349416245729308e+03 1.345323110421204e+03 + 1.341226466111576e+03 1.337126553870547e+03 1.333023611659482e+03 1.328917874361243e+03 1.324809573810189e+03 + 1.320698938821944e+03 1.316586195222853e+03 1.312471565879238e+03 1.308355270726382e+03 1.304237526797265e+03 + 1.300118548251028e+03 1.295998546401260e+03 1.291877729743943e+03 1.287756303985249e+03 1.283634472069033e+03 + 1.279512434204123e+03 1.275390387891361e+03 1.271268527950413e+03 1.267147046546335e+03 1.263026133215942e+03 + 1.258905974893897e+03 1.254786755938636e+03 1.250668658158009e+03 1.246551860834739e+03 1.242436540751643e+03 + 1.238322872216631e+03 1.234211027087508e+03 1.230101174796523e+03 1.225993482374751e+03 1.221888114476225e+03 + 1.217785233401870e+03 1.213684999123240e+03 1.209587569306029e+03 1.205493099333387e+03 1.201401742329029e+03 + 1.197313649180157e+03 1.193228968560143e+03 1.189147846951068e+03 1.185070428666013e+03 1.180996855871180e+03 + 1.176927268607833e+03 1.172861804813996e+03 1.168800600346028e+03 1.164743788999946e+03 1.160691502532607e+03 + 1.156643870682680e+03 1.152601021191433e+03 1.148563079823344e+03 1.144530170386546e+03 1.140502414753048e+03 + 1.136479932878823e+03 1.132462842823694e+03 1.128451260771050e+03 1.124445301047389e+03 1.120445076141689e+03 + 1.116450696724609e+03 1.112462271667503e+03 1.108479908061300e+03 1.104503711235176e+03 1.100533784775090e+03 + 1.096570230542151e+03 1.092613148690810e+03 1.088662637686885e+03 1.084718794325463e+03 1.080781713748597e+03 + 1.076851489462869e+03 1.072928213356805e+03 1.069011975718097e+03 1.065102865250726e+03 1.061200969091874e+03 + 1.057306372828737e+03 1.053419160515154e+03 1.049539414688086e+03 1.045667216383984e+03 1.041802645154960e+03 + 1.037945779084844e+03 1.034096694805093e+03 1.030255467510566e+03 1.026422170975116e+03 1.022596877567097e+03 + 1.018779658264699e+03 1.014970582671133e+03 1.011169719029728e+03 1.007377134238838e+03 1.003592893866644e+03 + 9.998170621658138e+02 9.960497020880292e+02 9.922908752984000e+02 9.885406421896960e+02 9.847990618965104e+02 + 9.810661923092763e+02 9.773420900881137e+02 9.736268106766209e+02 9.699204083154823e+02 9.662229360559834e+02 + 9.625344457733954e+02 9.588549881802285e+02 9.551846128393778e+02 9.515233681771427e+02 9.478713014961278e+02 + 9.442284589880252e+02 9.405948857462781e+02 9.369706257786315e+02 9.333557220195848e+02 9.297502163426675e+02 + 9.261541495726940e+02 9.225675614978380e+02 9.189904908816102e+02 9.154229754747445e+02 9.118650520269592e+02 + 9.083167562985963e+02 9.047781230721992e+02 9.012491861639268e+02 8.977299784348994e+02 8.942205318024285e+02 + 8.907208772511476e+02 8.872310448440229e+02 8.837510637332788e+02 8.802809621712227e+02 8.768207675209613e+02 + 8.733705062670168e+02 8.699302040258366e+02 8.664998855562388e+02 8.630795747697115e+02 8.596692947406563e+02 + 8.562690677165112e+02 8.528789151277964e+02 8.494988575980467e+02 8.461289149536703e+02 8.427691062337059e+02 + 8.394194496994758e+02 8.360799628441765e+02 8.327506624023558e+02 8.294315643593045e+02 8.261226839603659e+02 + 8.228240357201580e+02 8.195356334317065e+02 8.162574901754649e+02 8.129896183283118e+02 8.097320295723989e+02 + 8.064847349039516e+02 8.032477446419666e+02 8.000210684368377e+02 7.968047152789097e+02 7.935986935069204e+02 + 7.904030108163937e+02 7.872176742679235e+02 7.840426902954115e+02 7.808780647141936e+02 7.777238027291124e+02 + 7.745799089424941e+02 7.714463873620609e+02 7.683232414087729e+02 7.652104739245605e+02 7.621080871800449e+02 + 7.590160828821087e+02 7.559344621814480e+02 7.528632256800425e+02 7.498023734385237e+02 7.467519049835197e+02 + 7.437118193148774e+02 7.406821149128448e+02 7.376627897451922e+02 7.346538412742362e+02 7.316552664638124e+02 + 7.286670617861776e+02 7.256892232288341e+02 7.227217463013135e+02 7.197646260418561e+02 7.168178570240622e+02 + 7.138814333634584e+02 7.109553487239909e+02 7.080395963244840e+02 7.051341689449872e+02 7.022390589331357e+02 + 6.993542582103496e+02 6.964797582780715e+02 6.936155502238555e+02 6.907616247274542e+02 6.879179720668335e+02 + 6.850845821241022e+02 6.822614443914007e+02 6.794485479767509e+02 6.766458816097985e+02 6.738534336475631e+02 + 6.710711920800450e+02 6.682991445358737e+02 6.655372782878109e+02 6.627855802582736e+02 6.600440370247364e+02 + 6.573126348251241e+02 6.545913595631246e+02 6.518801968134759e+02 6.491791318271637e+02 6.464881495365782e+02 + 6.438072345606571e+02 6.411363712099002e+02 6.384755434914192e+02 6.358247351138504e+02 6.331839294922936e+02 + 6.305531097531517e+02 6.279322587389352e+02 6.253213590130168e+02 6.227203928643426e+02 6.201293423120818e+02 + 6.175481891102481e+02 6.149769147522601e+02 6.124155004754302e+02 6.098639272654723e+02 6.073221758609059e+02 + 6.047902267574146e+02 6.022680602121961e+02 5.997556562482570e+02 5.972529946586116e+02 5.947600550105284e+02 + 5.922768166496420e+02 5.898032587040741e+02 5.873393600885071e+02 5.848850995081896e+02 5.824404554629220e+02 + 5.800054062510060e+02 5.775799299731178e+02 5.751640045361754e+02 5.727576076571369e+02 5.703607168668038e+02 + 5.679733095135196e+02 5.655953627668734e+02 5.632268536213569e+02 5.608677588999769e+02 5.585180552578101e+02 + 5.561777191855749e+02 5.538467270130913e+02 5.515250549127653e+02 5.492126789029992e+02 5.469095748515771e+02 + 5.446157184790180e+02 5.423310853618807e+02 5.400556509360428e+02 5.377893904999387e+02 5.355322792177595e+02 + 5.332842921226277e+02 5.310454041197257e+02 5.288155899893949e+02 5.265948243902002e+02 5.243830818619641e+02 + 5.221803368287563e+02 5.199865636018615e+02 5.178017363827072e+02 5.156258292657639e+02 5.134588162414060e+02 + 5.113006711987428e+02 5.091513679284308e+02 5.070108801254233e+02 5.048791813917245e+02 5.027562452390878e+02 + 5.006420450916906e+02 4.985365542887848e+02 4.964397460873062e+02 4.943515936644623e+02 4.922720701202861e+02 + 4.902011484801621e+02 4.881388016973193e+02 4.860850026553053e+02 4.840397241704212e+02 4.820029389941294e+02 + 4.799746198154425e+02 4.779547392632712e+02 4.759432699087556e+02 4.739401842675587e+02 4.719454548021483e+02 + 4.699590539240335e+02 4.679809539959847e+02 4.660111273342323e+02 4.640495462106243e+02 4.620961828547734e+02 + 4.601510094561671e+02 4.582139981662578e+02 4.562851211005278e+02 4.543643503405294e+02 4.524516579358937e+02 + 4.505470159063264e+02 4.486503962435701e+02 4.467617709133452e+02 4.448811118572694e+02 4.430083909947464e+02 + 4.411435802248437e+02 4.392866514281351e+02 4.374375764685219e+02 4.355963271950445e+02 4.337628754436469e+02 + 4.319371930389445e+02 4.301192517959559e+02 4.283090235218090e+02 4.265064800174407e+02 4.247115930792582e+02 + 4.229243345007924e+02 4.211446760743199e+02 4.193725895924705e+02 4.176080468498113e+02 4.158510196444142e+02 + 4.141014797793932e+02 4.123593990644333e+02 4.106247493172935e+02 4.088975023652878e+02 4.071776300467535e+02 + 4.054651042124924e+02 4.037598967271958e+02 4.020619794708562e+02 4.003713243401487e+02 3.986879032498043e+02 + 3.970116881339567e+02 3.953426509474766e+02 3.936807636672835e+02 3.920259982936424e+02 3.903783268514428e+02 + 3.887377213914565e+02 3.871041539915799e+02 3.854775967580615e+02 3.838580218267089e+02 3.822454013640786e+02 + 3.806397075686534e+02 3.790409126719930e+02 3.774489889398832e+02 3.758639086734535e+02 3.742856442102916e+02 + 3.727141679255294e+02 3.711494522329202e+02 3.695914695859045e+02 3.680401924786487e+02 3.664955934470753e+02 + 3.649576450698805e+02 3.634263199695284e+02 3.619015908132385e+02 3.603834303139520e+02 3.588718112312852e+02 + 3.573667063724722e+02 3.558680885932878e+02 3.543759307989556e+02 3.528902059450506e+02 3.514108870383753e+02 + 3.499379471378335e+02 3.484713593552798e+02 3.470110968563633e+02 3.455571328613559e+02 3.441094406459656e+02 + 3.426679935421353e+02 3.412327649388330e+02 3.398037282828261e+02 3.383808570794424e+02 3.369641248933206e+02 + 3.355535053491417e+02 3.341489721323600e+02 3.327504989899118e+02 3.313580597309123e+02 3.299716282273449e+02 + 3.285911784147361e+02 3.272166842928202e+02 3.258481199261851e+02 3.244854594449200e+02 3.231286770452364e+02 + 3.217777469900885e+02 3.204326436097790e+02 3.190933413025524e+02 3.177598145351745e+02 3.164320378435100e+02 + 3.151099858330820e+02 3.137936331796195e+02 3.124829546296009e+02 3.111779250007793e+02 3.098785191827064e+02 + 3.085847121372355e+02 3.072964788990210e+02 3.060137945760084e+02 3.047366343499109e+02 3.034649734766738e+02 + 3.021987872869389e+02 3.009380511864902e+02 2.996827406566881e+02 2.984328312549063e+02 2.971882986149424e+02 + 2.959491184474387e+02 2.947152665402733e+02 2.934867187589564e+02 2.922634510470140e+02 2.910454394263584e+02 + 2.898326599976570e+02 2.886250889406855e+02 2.874227025146713e+02 2.862254770586421e+02 2.850333889917466e+02 + 2.838464148135824e+02 2.826645311045047e+02 2.814877145259334e+02 2.803159418206503e+02 2.791491898130870e+02 + 2.779874354096040e+02 2.768306555987662e+02 2.756788274516064e+02 2.745319281218831e+02 2.733899348463269e+02 + 2.722528249448854e+02 2.711205758209550e+02 2.699931649616105e+02 2.688705699378216e+02 2.677527684046641e+02 + 2.666397381015296e+02 2.655314568523168e+02 2.644279025656263e+02 2.633290532349408e+02 2.622348869388057e+02 + 2.611453818409966e+02 2.600605161906776e+02 2.589802683225653e+02 2.579046166570756e+02 2.568335397004630e+02 + 2.557670160449610e+02 2.547050243689091e+02 2.536475434368802e+02 2.525945520997950e+02 2.515460292950299e+02 + 2.505019540465310e+02 2.494623054649030e+02 2.484270627475080e+02 2.473962051785518e+02 2.463697121291584e+02 + 2.453475630574538e+02 2.443297375086299e+02 2.433162151150099e+02 2.423069755961045e+02 2.413019987586639e+02 + 2.403012644967265e+02 2.393047527916599e+02 2.383124437121921e+02 2.373243174144503e+02 2.363403541419774e+02 + 2.353605342257561e+02 2.343848380842254e+02 2.334132462232840e+02 2.324457392362996e+02 2.314822978041100e+02 + 2.305229026950092e+02 2.295675347647456e+02 2.286161749565050e+02 2.276688043008849e+02 2.267254039158775e+02 + 2.257859550068329e+02 2.248504388664312e+02 2.239188368746394e+02 2.229911304986700e+02 2.220673012929327e+02 + 2.211473308989816e+02 2.202312010454613e+02 2.193188935480400e+02 2.184103903093521e+02 2.175056733189223e+02 + 2.166047246530964e+02 2.157075264749590e+02 2.148140610342565e+02 2.139243106673059e+02 2.130382577969103e+02 + 2.121558849322625e+02 2.112771746688434e+02 2.104021096883284e+02 2.095306727584750e+02 2.086628467330155e+02 + 2.077986145515480e+02 2.069379592394108e+02 2.060808639075709e+02 2.052273117524977e+02 2.043772860560301e+02 + 2.035307701852530e+02 2.026877475923597e+02 2.018482018145116e+02 2.010121164737013e+02 2.001794752766043e+02 + 1.993502620144317e+02 1.985244605627833e+02 1.977020548814834e+02 1.968830290144333e+02 1.960673670894455e+02 + 1.952550533180796e+02 1.944460719954783e+02 1.936404075001901e+02 1.928380442940064e+02 1.920389669217757e+02 + 1.912431600112318e+02 1.904506082728075e+02 1.896612964994507e+02 1.888752095664395e+02 1.880923324311883e+02 + 1.873126501330530e+02 1.865361477931425e+02 1.857628106141124e+02 1.849926238799683e+02 1.842255729558594e+02 + 1.834616432878745e+02 1.827008204028278e+02 1.819430899080554e+02 1.811884374911939e+02 1.804368489199680e+02 + 1.796883100419685e+02 1.789428067844352e+02 1.782003251540284e+02 1.774608512366059e+02 1.767243711969932e+02 + 1.759908712787550e+02 1.752603378039561e+02 1.745327571729353e+02 1.738081158640630e+02 1.730864004334984e+02 + 1.723675975149561e+02 1.716516938194546e+02 1.709386761350746e+02 1.702285313267106e+02 1.695212463358197e+02 + 1.688168081801711e+02 1.681152039535912e+02 1.674164208257089e+02 1.667204460416968e+02 1.660272669220106e+02 + 1.653368708621301e+02 1.646492453322947e+02 1.639643778772380e+02 1.632822561159195e+02 1.626028677412604e+02 + 1.619262005198663e+02 1.612522422917625e+02 1.605809809701119e+02 1.599124045409490e+02 1.592465010628942e+02 + 1.585832586668785e+02 1.579226655558653e+02 1.572647100045635e+02 1.566093803591464e+02 1.559566650369704e+02 + 1.553065525262796e+02 1.546590313859273e+02 1.540140902450774e+02 1.533717178029232e+02 1.527319028283855e+02 + 1.520946341598244e+02 1.514599007047433e+02 1.508276914394908e+02 1.501979954089635e+02 1.495708017263079e+02 + 1.489460995726196e+02 1.483238781966386e+02 1.477041269144485e+02 1.470868351091738e+02 1.464719922306726e+02 + 1.458595877952284e+02 1.452496113852426e+02 1.446420526489307e+02 1.440369013000031e+02 1.434341471173618e+02 + 1.428337799447829e+02 1.422357896906033e+02 1.416401663274088e+02 1.410468998917186e+02 1.404559804836624e+02 + 1.398673982666719e+02 1.392811434671528e+02 1.386972063741724e+02 1.381155773391332e+02 1.375362467754556e+02 + 1.369592051582511e+02 1.363844430240045e+02 1.358119509702414e+02 1.352417196552113e+02 1.346737397975527e+02 + 1.341080021759751e+02 1.335444976289218e+02 1.329832170542489e+02 1.324241514088906e+02 1.318672917085310e+02 + 1.313126290272713e+02 1.307601544973014e+02 1.302098593085606e+02 1.296617347084112e+02 1.291157720012986e+02 + 1.285719625484201e+02 1.280302977673866e+02 1.274907691318894e+02 1.269533681713578e+02 1.264180864706295e+02 + 1.258849156696004e+02 1.253538474629000e+02 1.248248735995387e+02 1.242979858825762e+02 1.237731761687761e+02 + 1.232504363682666e+02 1.227297584441980e+02 1.222111344123981e+02 1.216945563410326e+02 1.211800163502591e+02 + 1.206675066118835e+02 1.201570193490145e+02 1.196485468357202e+02 1.191420813966794e+02 1.186376154068378e+02 + 1.181351412910617e+02 1.176346515237882e+02 1.171361386286800e+02 1.166395951782744e+02 1.161450137936409e+02 + 1.156523871440253e+02 1.151617079465030e+02 1.146729689656315e+02 1.141861630130967e+02 1.137012829473650e+02 + 1.132183216733316e+02 1.127372721419683e+02 1.122581273499750e+02 1.117808803394231e+02 1.113055241974073e+02 + 1.108320520556904e+02 1.103604570903540e+02 1.098907325214407e+02 1.094228716126026e+02 1.089568676707503e+02 + 1.084927140456933e+02 1.080304041297915e+02 1.075699313575957e+02 1.071112892054973e+02 1.066544711913678e+02 + 1.061994708742094e+02 1.057462818537971e+02 1.052948977703194e+02 1.048453123040287e+02 1.043975191748812e+02 + 1.039515121421794e+02 1.035072850042212e+02 1.030648315979378e+02 1.026241457985365e+02 1.021852215191508e+02 + 1.017480527104723e+02 1.013126333604036e+02 1.008789574936956e+02 1.004470191715887e+02 1.000168124914595e+02 + 9.958833158645952e+01 9.916157062515755e+01 9.873652381118313e+01 9.831318538286747e+01 9.789154961288472e+01 + 9.747161080789462e+01 9.705336330818174e+01 9.663680148730151e+01 9.622191975171600e+01 9.580871254043927e+01 + 9.539717432467799e+01 9.498729960747015e+01 9.457908292333019e+01 9.417251883788728e+01 9.376760194752592e+01 + 9.336432687903158e+01 9.296268828922541e+01 9.256268086460973e+01 9.216429932100861e+01 9.176753840320588e+01 + 9.137239288459003e+01 9.097885756679371e+01 9.058692727933247e+01 9.019659687925129e+01 8.980786125075915e+01 + 8.942071530487537e+01 8.903515397906827e+01 8.865117223689539e+01 8.826876506764837e+01 8.788792748599066e+01 + 8.750865453159915e+01 8.713094126880934e+01 8.675478278625070e+01 8.638017419649346e+01 8.600711063568782e+01 + 8.563558726320450e+01 8.526559926127953e+01 8.489714183465328e+01 8.453021021021326e+01 8.416479963663750e+01 + 8.380090538403297e+01 8.343852274358191e+01 8.307764702718154e+01 8.271827356708731e+01 8.236039771555478e+01 + 8.200401484448335e+01 8.164912034505645e+01 8.129570962738794e+01 8.094377812016226e+01 8.059332127027876e+01 + 8.024433454249494e+01 7.989681341906731e+01 7.955075339940062e+01 7.920614999968431e+01 7.886299875254197e+01 + 7.852129520667269e+01 7.818103492649431e+01 7.784221349179018e+01 7.750482649735231e+01 7.716886955262360e+01 + 7.683433828134812e+01 7.650122832120968e+01 7.616953532348127e+01 7.583925495266870e+01 7.551038288615457e+01 + 7.518291481384722e+01 7.485684643782369e+01 7.453217347197594e+01 7.420889164165929e+01 7.388699668333484e+01 + 7.356648434421936e+01 7.324735038193101e+01 7.292959056413389e+01 7.261320066819054e+01 7.229817648080265e+01 + 7.198451379766323e+01 7.167220842310338e+01 7.136125616973801e+01 7.105165285811691e+01 7.074339431637192e+01 + 7.043647637986339e+01 7.013089489083404e+01 6.982664569805181e+01 6.952372465646366e+01 6.922212762684383e+01 + 6.892185047544091e+01 6.862288907363180e+01 6.832523929756968e+01 6.802889702783402e+01 6.773385814908231e+01 + 6.744011854969933e+01 6.714767412144998e+01 6.685652075912981e+01 6.656665436021596e+01 6.627807082452031e+01 + 6.599076605384013e+01 6.570473595161044e+01 6.541997642255764e+01 6.513648337235190e+01 6.485425270725899e+01 + 6.457328033379579e+01 6.429356215838057e+01 6.401509408699029e+01 6.373787202481275e+01 6.346189187589996e+01 + 6.318714954282635e+01 6.291364092633813e+01 6.264136192501348e+01 6.237030843491549e+01 6.210047634924629e+01 + 6.183186155800770e+01 6.156445994765167e+01 6.129826740074021e+01 6.103327979560234e+01 6.076949300598739e+01 + 6.050690290072706e+01 6.024550534338968e+01 5.998529619193805e+01 5.972627129839049e+01 5.946842650847431e+01 + 5.921175766128842e+01 5.895626058896132e+01 5.870193111630790e+01 5.844876506049278e+01 5.819675823068683e+01 + 5.794590642772724e+01 5.769620544378167e+01 5.744765106200295e+01 5.720023905619436e+01 5.695396519046973e+01 + 5.670882521891257e+01 5.646481488524140e+01 5.622192992246893e+01 5.598016605256586e+01 5.573951898612282e+01 + 5.549998442201218e+01 5.526155804705347e+01 5.502423553567544e+01 5.478801254957932e+01 5.455288473740384e+01 + 5.431884773438952e+01 5.408589716204126e+01 5.385402862779639e+01 5.362323772468734e+01 5.339352003100851e+01 + 5.316487110998134e+01 5.293728650941941e+01 5.271076176139810e+01 5.248529238191697e+01 5.226087387056952e+01 + 5.203750171021004e+01 5.181517136661937e+01 5.159387828817555e+01 5.137361790552005e+01 5.115438563122540e+01 + 5.093617685946728e+01 5.071898696568911e+01 5.050281130627462e+01 5.028764521821723e+01 5.007348401878689e+01 + 4.986032300520461e+01 4.964815745431017e+01 4.943698262223258e+01 4.922679374406444e+01 4.901758603352890e+01 + 4.880935468265444e+01 4.860209486144674e+01 4.839580171755819e+01 4.819047037596423e+01 4.798609593863436e+01 + 4.778267348427748e+01 4.758019807629763e+01 4.737866479163073e+01 4.717806873174889e+01 4.697840502276303e+01 + 4.677966881532046e+01 4.658185528450561e+01 4.638495962973613e+01 4.618897707466358e+01 4.599390286707413e+01 + 4.579973227878514e+01 4.560646060554886e+01 4.541408316695004e+01 4.522259530630871e+01 4.503199239057944e+01 + 4.484226981025409e+01 4.465342297926174e+01 4.446544733487283e+01 4.427833833759906e+01 4.409209147109787e+01 + 4.390670224207366e+01 4.372216618018147e+01 4.353847883793086e+01 4.335563579058883e+01 4.317363263608402e+01 + 4.299246499491191e+01 4.281212851003678e+01 4.263261884680019e+01 4.245393169282373e+01 4.227606275791384e+01 + 4.209900777397110e+01 4.192276249489183e+01 4.174732269647760e+01 4.157268417634100e+01 4.139884275381124e+01 + 4.122579426984368e+01 4.105353458692623e+01 4.088205958898575e+01 4.071136518129959e+01 4.054144729039989e+01 + 4.037230186398577e+01 4.020392487083053e+01 4.003631230069028e+01 3.986946016421615e+01 3.970336449286102e+01 + 3.953802133879138e+01 3.937342677479865e+01 3.920957689420662e+01 3.904646781078663e+01 3.888409565866561e+01 + 3.872245659223881e+01 3.856154678608295e+01 3.840136243486580e+01 3.824189975326037e+01 3.808315497585828e+01 + 3.792512435707974e+01 3.776780417109072e+01 3.761119071171368e+01 3.745528029234323e+01 3.730006924585913e+01 + 3.714555392454046e+01 3.699173069998185e+01 3.683859596300791e+01 3.668614612358731e+01 3.653437761074975e+01 + 3.638328687250168e+01 3.623287037574122e+01 3.608312460617633e+01 3.593404606824011e+01 3.578563128500823e+01 + 3.563787679811730e+01 3.549077916767894e+01 3.534433497220277e+01 3.519854080850950e+01 3.505339329165233e+01 + 3.490888905483502e+01 3.476502474932935e+01 3.462179704439669e+01 3.447920262720543e+01 3.433723820275100e+01 + 3.419590049377793e+01 3.405518624069644e+01 3.391509220150648e+01 3.377561515171676e+01 3.363675188426559e+01 + 3.349849920944334e+01 3.336085395481351e+01 3.322381296513372e+01 3.308737310228052e+01 3.295153124516820e+01 + 3.281628428967440e+01 3.268162914856177e+01 3.254756275140060e+01 3.241408204449431e+01 3.228118399080125e+01 + 3.214886556985902e+01 3.201712377771043e+01 3.188595562682539e+01 3.175535814602785e+01 3.162532838041991e+01 + 3.149586339130665e+01 3.136696025612331e+01 3.123861606835929e+01 3.111082793748575e+01 3.098359298888095e+01 + 3.085690836375689e+01 3.073077121908688e+01 3.060517872753190e+01 3.048012807736892e+01 3.035561647241710e+01 + 3.023164113196741e+01 3.010819929070847e+01 2.998528819865743e+01 2.986290512108675e+01 2.974104733845435e+01 + 2.961971214633204e+01 2.949889685533427e+01 2.937859879104928e+01 2.925881529396803e+01 2.913954371941418e+01 + 2.902078143747566e+01 2.890252583293294e+01 2.878477430519257e+01 2.866752426821674e+01 2.855077315045408e+01 + 2.843451839477398e+01 2.831875745839480e+01 2.820348781281816e+01 2.808870694376161e+01 2.797441235108905e+01 + 2.786060154874598e+01 2.774727206469090e+01 2.763442144082869e+01 2.752204723294561e+01 2.741014701064096e+01 + 2.729871835726216e+01 2.718775886983967e+01 2.707726615901925e+01 2.696723784899922e+01 2.685767157746369e+01 + 2.674856499551823e+01 2.663991576762553e+01 2.653172157153985e+01 2.642398009824459e+01 2.631668905188727e+01 + 2.620984614971545e+01 2.610344912201526e+01 2.599749571204509e+01 2.589198367597526e+01 2.578691078282447e+01 + 2.568227481439560e+01 2.557807356521632e+01 2.547430484247440e+01 2.537096646595726e+01 2.526805626799004e+01 + 2.516557209337314e+01 2.506351179932266e+01 2.496187325540830e+01 2.486065434349264e+01 2.475985295767104e+01 + 2.465946700421117e+01 2.455949440149201e+01 2.445993307994512e+01 2.436078098199462e+01 2.426203606199725e+01 + 2.416369628618369e+01 2.406575963259863e+01 2.396822409104309e+01 2.387108766301533e+01 2.377434836165120e+01 + 2.367800421166865e+01 2.358205324930685e+01 2.348649352227018e+01 2.339132308967058e+01 2.329654002196842e+01 + 2.320214240091826e+01 2.310812831950909e+01 2.301449588190930e+01 2.292124320341003e+01 2.282836841036737e+01 + 2.273586964014822e+01 2.264374504107307e+01 2.255199277236002e+01 2.246061100407142e+01 2.236959791705531e+01 + 2.227895170289277e+01 2.218867056384243e+01 2.209875271278441e+01 2.200919637316795e+01 2.191999977895575e+01 + 2.183116117456954e+01 2.174267881483753e+01 2.165455096493913e+01 2.156677590035239e+01 2.147935190680054e+01 + 2.139227728019779e+01 2.130555032659852e+01 2.121916936214230e+01 2.113313271300244e+01 2.104743871533337e+01 + 2.096208571521848e+01 2.087707206861785e+01 2.079239614131691e+01 2.070805630887438e+01 2.062405095657110e+01 + 2.054037847935875e+01 2.045703728180795e+01 2.037402577805884e+01 2.029134239176940e+01 2.020898555606515e+01 + 2.012695371348894e+01 2.004524531594988e+01 1.996385882467528e+01 1.988279271015912e+01 1.980204545211288e+01 + 1.972161553941679e+01 1.964150147006926e+01 1.956170175113956e+01 1.948221489871736e+01 1.940303943786429e+01 + 1.932417390256672e+01 1.924561683568553e+01 1.916736678890893e+01 1.908942232270466e+01 1.901178200627124e+01 + 1.893444441749112e+01 1.885740814288330e+01 1.878067177755435e+01 1.870423392515415e+01 1.862809319782575e+01 + 1.855224821616109e+01 1.847669760915306e+01 1.840144001414873e+01 1.832647407680444e+01 1.825179845103846e+01 + 1.817741179898477e+01 1.810331279094931e+01 1.802950010536141e+01 1.795597242873052e+01 1.788272845560025e+01 + 1.780976688850256e+01 1.773708643791399e+01 1.766468582220978e+01 1.759256376761964e+01 1.752071900818367e+01 + 1.744915028570691e+01 1.737785634971626e+01 1.730683595741593e+01 1.723608787364351e+01 1.716561087082691e+01 + 1.709540372893938e+01 1.702546523545782e+01 1.695579418531889e+01 1.688638938087523e+01 1.681724963185347e+01 + 1.674837375531105e+01 1.667976057559365e+01 1.661140892429247e+01 1.654331764020266e+01 1.647548556928057e+01 + 1.640791156460172e+01 1.634059448631862e+01 1.627353320162037e+01 1.620672658468987e+01 1.614017351666211e+01 + 1.607387288558495e+01 1.600782358637546e+01 1.594202452078044e+01 1.587647459733565e+01 1.581117273132388e+01 + 1.574611784473628e+01 1.568130886623052e+01 1.561674473109037e+01 1.555242438118775e+01 1.548834676493970e+01 + 1.542451083727116e+01 1.536091555957380e+01 1.529755989966674e+01 1.523444283175813e+01 1.517156333640412e+01 + 1.510892040047163e+01 1.504651301709817e+01 1.498434018565289e+01 1.492240091169903e+01 1.486069420695437e+01 + 1.479921908925268e+01 1.473797458250679e+01 1.467695971666844e+01 1.461617352769189e+01 1.455561505749549e+01 + 1.449528335392335e+01 1.443517747070885e+01 1.437529646743628e+01 1.431563940950381e+01 1.425620536808641e+01 + 1.419699342009801e+01 1.413800264815566e+01 1.407923214054198e+01 1.402068099116856e+01 1.396234829953952e+01 + 1.390423317071502e+01 1.384633471527466e+01 1.378865204928180e+01 1.373118429424718e+01 1.367393057709300e+01 + 1.361689003011738e+01 1.356006179095783e+01 1.350344500255701e+01 1.344703881312631e+01 1.339084237611040e+01 + 1.333485485015340e+01 1.327907539906173e+01 1.322350319177116e+01 1.316813740231076e+01 1.311297720976823e+01 + 1.305802179825650e+01 1.300327035687748e+01 1.294872207968904e+01 1.289437616567058e+01 1.284023181868810e+01 + 1.278628824746134e+01 1.273254466552937e+01 1.267900029121625e+01 1.262565434759896e+01 1.257250606247206e+01 + 1.251955466831549e+01 1.246679940226097e+01 1.241423950605828e+01 1.236187422604329e+01 1.230970281310408e+01 + 1.225772452264810e+01 1.220593861457051e+01 1.215434435321999e+01 1.210294100736743e+01 1.205172785017332e+01 + 1.200070415915468e+01 1.194986921615408e+01 1.189922230730676e+01 1.184876272300869e+01 1.179848975788548e+01 + 1.174840271075949e+01 1.169850088461910e+01 1.164878358658695e+01 1.159925012788824e+01 1.154989982381994e+01 + 1.150073199371877e+01 1.145174596093103e+01 1.140294105278105e+01 1.135431660054040e+01 1.130587193939725e+01 + 1.125760640842545e+01 1.120951935055388e+01 1.116161011253638e+01 1.111387804492112e+01 1.106632250202031e+01 + 1.101894284188014e+01 1.097173842625026e+01 1.092470862055458e+01 1.087785279386097e+01 1.083117031885094e+01 + 1.078466057179144e+01 1.073832293250347e+01 1.069215678433397e+01 1.064616151412611e+01 1.060033651218915e+01 + 1.055468117227067e+01 1.050919489152657e+01 1.046387707049183e+01 1.041872711305291e+01 1.037374442641723e+01 + 1.032892842108565e+01 1.028427851082384e+01 1.023979411263260e+01 1.019547464672112e+01 1.015131953647739e+01 + 1.010732820844006e+01 1.006350009227138e+01 1.001983462072746e+01 9.976331229631647e+00 9.932989357846212e+00 + 9.889808447244027e+00 9.846787942682189e+00 9.803927291972784e+00 9.761225945856612e+00 9.718683357975344e+00 + 9.676298984843685e+00 9.634072285823148e+00 9.592002723093975e+00 9.550089761628675e+00 9.508332869164528e+00 + 9.466731516176942e+00 9.425285175852649e+00 9.383993324063075e+00 9.342855439337340e+00 9.301871002835986e+00 + 9.261039498324518e+00 9.220360412146626e+00 9.179833233198364e+00 9.139457452901739e+00 9.099232565178442e+00 + 9.059158066424072e+00 9.019233455481517e+00 8.979458233615983e+00 8.939831904488598e+00 8.900353974130358e+00 + 8.861023950917733e+00 8.821841345545399e+00 8.782805671002095e+00 8.743916442544743e+00 8.705173177672609e+00 + 8.666575396103097e+00 8.628122619745710e+00 8.589814372677068e+00 8.551650181116766e+00 8.513629573400662e+00 + 8.475752079957974e+00 8.438017233285317e+00 8.400424567921805e+00 8.362973620425777e+00 8.325663929348474e+00 + 8.288495035210829e+00 8.251466480478744e+00 8.214577809538207e+00 8.177828568671869e+00 8.141218306034384e+00 + 8.104746571628061e+00 8.068412917279733e+00 8.032216896615568e+00 7.996158065038109e+00 7.960235979702305e+00 + 7.924450199491049e+00 7.888800284992562e+00 7.853285798476120e+00 7.817906303868561e+00 7.782661366731131e+00 + 7.747550554235553e+00 7.712573435141304e+00 7.677729579772075e+00 7.643018559992464e+00 7.608439949185289e+00 + 7.573993322227730e+00 7.539678255469305e+00 7.505494326708374e+00 7.471441115169445e+00 7.437518201480396e+00 + 7.403725167649897e+00 7.370061597044244e+00 7.336527074365638e+00 7.303121185628912e+00 7.269843518139517e+00 + 7.236693660471105e+00 7.203671202442854e+00 7.170775735097676e+00 7.138006850679947e+00 7.105364142612978e+00 + 7.072847205477794e+00 7.040455634990108e+00 7.008189027979162e+00 6.976046982365775e+00 6.944029097139913e+00 + 6.912134972339915e+00 6.880364209030189e+00 6.848716409279452e+00 6.817191176140028e+00 6.785788113625245e+00 + 6.754506826688816e+00 6.723346921203356e+00 6.692308003938471e+00 6.661389682540523e+00 6.630591565510550e+00 + 6.599913262183454e+00 6.569354382707374e+00 6.538914538021731e+00 6.508593339837104e+00 6.478390400614194e+00 + 6.448305333542394e+00 6.418337752519895e+00 6.388487272132469e+00 6.358753507632562e+00 6.329136074919584e+00 + 6.299634590518303e+00 6.270248671559087e+00 6.240977935757176e+00 6.211822001392469e+00 6.182780487289014e+00 + 6.153853012794830e+00 6.125039197761667e+00 6.096338662525123e+00 6.067751027884117e+00 6.039275915081143e+00 + 6.010912945782210e+00 5.982661742056677e+00 5.954521926357831e+00 5.926493121502772e+00 5.898574950652534e+00 + 5.870767037292838e+00 5.843069005213625e+00 5.815480478490322e+00 5.788001081463795e+00 5.760630438720564e+00 + 5.733368175074372e+00 5.706213915545522e+00 5.679167285342282e+00 5.652227909841657e+00 5.625395414569441e+00 + 5.598669425181816e+00 5.572049567445784e+00 5.545535467219844e+00 5.519126750435792e+00 5.492823043078544e+00 + 5.466623971168135e+00 5.440529160740564e+00 5.414538237828422e+00 5.388650828442925e+00 5.362866558554671e+00 + 5.337185054074683e+00 5.311605940836664e+00 5.286128844577174e+00 5.260753390918180e+00 5.235479205347759e+00 + 5.210305913201912e+00 5.185233139646423e+00 5.160260509657849e+00 5.135387648005725e+00 5.110614179234218e+00 + 5.085939727643384e+00 5.061363917271827e+00 5.036886371877756e+00 5.012506714921395e+00 4.988224569546780e+00 + 4.964039558563505e+00 4.939951304429113e+00 4.915959429231121e+00 4.892063554668883e+00 4.868263302036166e+00 + 4.844558292202816e+00 4.820948145597548e+00 4.797432482189943e+00 4.774010921472941e+00 4.750683082445052e+00 + 4.727448583593064e+00 4.704307042874011e+00 4.681258077698364e+00 4.658301304912094e+00 4.635436340779192e+00 + 4.612662800984437e+00 4.589980301311781e+00 4.567388459118002e+00 4.544886893662785e+00 4.522475226100447e+00 + 4.500153079471392e+00 4.477920078691954e+00 4.455775850545454e+00 4.433720023673174e+00 4.411752228564562e+00 + 4.389872097548642e+00 4.368079264784613e+00 4.346373366252480e+00 4.324754039744810e+00 4.303220924856724e+00 + 4.281773662977624e+00 4.260411897282061e+00 4.239135272720528e+00 4.217943436011168e+00 4.196836035630533e+00 + 4.175812721804735e+00 4.154873146501309e+00 4.134016963419636e+00 4.113243827982917e+00 4.092553397329378e+00 + 4.071945330303371e+00 4.051419287447337e+00 4.030974930992876e+00 4.010611924852291e+00 3.990329934610572e+00 + 3.970128627516233e+00 3.950007672473622e+00 3.929966740034229e+00 3.910005502388334e+00 3.890123633357151e+00 + 3.870320808383910e+00 3.850596704526304e+00 3.830951000447895e+00 3.811383376410359e+00 3.791893514264968e+00 + 3.772481097444870e+00 3.753145810956778e+00 3.733887341373201e+00 3.714705376824528e+00 3.695599606990787e+00 + 3.676569723094194e+00 3.657615417890649e+00 3.638736385662737e+00 3.619932322211342e+00 3.601202924847866e+00 + 3.582547892387094e+00 3.563966925138796e+00 3.545459724900460e+00 3.527025994949696e+00 3.508665440036192e+00 + 3.490377766374898e+00 3.472162681637859e+00 3.454019894946770e+00 3.435949116866093e+00 3.417950059394822e+00 + 3.400022435959661e+00 3.382165961407408e+00 3.364380351997492e+00 3.346665325395070e+00 3.329020600663389e+00 + 3.311445898256423e+00 3.293940940012313e+00 3.276505449145376e+00 3.259139150239444e+00 3.241841769240601e+00 + 3.224613033449911e+00 3.207452671516806e+00 3.190360413431512e+00 3.173335990518376e+00 3.156379135428829e+00 + 3.139489582134207e+00 3.122667065919253e+00 3.105911323374844e+00 3.089222092391304e+00 3.072599112151467e+00 + 3.056042123124052e+00 3.039550867056602e+00 3.023125086969060e+00 3.006764527146631e+00 2.990468933133598e+00 + 2.974238051726276e+00 2.958071630966291e+00 2.941969420134504e+00 2.925931169743829e+00 2.909956631532982e+00 + 2.894045558459915e+00 2.878197704695192e+00 2.862412825615752e+00 2.846690677798200e+00 2.831031019012456e+00 + 2.815433608215537e+00 2.799898205544946e+00 2.784424572312442e+00 2.769012470997656e+00 2.753661665241841e+00 + 2.738371919841735e+00 2.723143000743114e+00 2.707974675034452e+00 2.692866710941310e+00 2.677818877819492e+00 + 2.662830946149358e+00 2.647902687529500e+00 2.633033874670541e+00 2.618224281389629e+00 2.603473682603599e+00 + 2.588781854323581e+00 2.574148573648829e+00 2.559573618760405e+00 2.545056768915928e+00 2.530597804443031e+00 + 2.516196506733719e+00 2.501852658238634e+00 2.487566042460900e+00 2.473336443950497e+00 2.459163648298495e+00 + 2.445047442131045e+00 2.430987613104020e+00 2.416983949896873e+00 2.403036242207069e+00 2.389144280744604e+00 + 2.375307857226069e+00 2.361526764369182e+00 2.347800795887102e+00 2.334129746482714e+00 2.320513411843401e+00 + 2.306951588635250e+00 2.293444074497272e+00 2.279990668036662e+00 2.266591168822486e+00 2.253245377380730e+00 + 2.239953095188698e+00 2.226714124669427e+00 2.213528269186815e+00 2.200395333039660e+00 2.187315121456555e+00 + 2.174287440590724e+00 2.161312097514302e+00 2.148388900213576e+00 2.135517657583172e+00 2.122698179421138e+00 + 2.109930276423767e+00 2.097213760180145e+00 2.084548443167107e+00 2.071934138744207e+00 2.059370661148065e+00 + 2.046857825488010e+00 2.034395447740410e+00 2.021983344743568e+00 2.009621334193179e+00 1.997309234636694e+00 + 1.985046865468656e+00 1.972834046925575e+00 1.960670600080829e+00 1.948556346840064e+00 1.936491109935845e+00 + 1.924474712922881e+00 1.912506980173293e+00 1.900587736871379e+00 1.888716809009021e+00 1.876894023380785e+00 + 1.865119207578901e+00 1.853392189988783e+00 1.841712799784000e+00 1.830080866921366e+00 1.818496222136643e+00 + 1.806958696939369e+00 1.795468123608344e+00 1.784024335186931e+00 1.772627165478091e+00 1.761276449040270e+00 + 1.749972021182240e+00 1.738713717958681e+00 1.727501376165632e+00 1.716334833335623e+00 1.705213927733501e+00 + 1.694138498351584e+00 1.683108384905034e+00 1.672123427827729e+00 1.661183468267390e+00 1.650288348081216e+00 + 1.639437909831426e+00 1.628631996780848e+00 1.617870452888298e+00 1.607153122804353e+00 1.596479851866879e+00 + 1.585850486096622e+00 1.575264872192821e+00 1.564722857528934e+00 1.554224290148171e+00 1.543769018759317e+00 + 1.533356892732311e+00 1.522987762094010e+00 1.512661477523924e+00 1.502377890349857e+00 1.492136852543834e+00 + 1.481938216717736e+00 1.471781836119155e+00 1.461667564627161e+00 1.451595256748155e+00 1.441564767611692e+00 + 1.431575952966374e+00 1.421628669175570e+00 1.411722773213510e+00 1.401858122661042e+00 1.392034575701590e+00 + 1.382251991117042e+00 1.372510228283810e+00 1.362809147168584e+00 1.353148608324488e+00 1.343528472887046e+00 + 1.333948602570079e+00 1.324408859661822e+00 1.314909107020905e+00 1.305449208072446e+00 1.296029026804035e+00 + 1.286648427761911e+00 1.277307276046963e+00 1.268005437310909e+00 1.258742777752323e+00 1.249519164112858e+00 + 1.240334463673355e+00 1.231188544250033e+00 1.222081274190547e+00 1.213012522370361e+00 1.203982158188807e+00 + 1.194990051565381e+00 1.186036072935901e+00 1.177120093248810e+00 1.168241983961418e+00 1.159401617036181e+00 + 1.150598864936961e+00 1.141833600625332e+00 1.133105697556927e+00 1.124415029677647e+00 1.115761471420175e+00 + 1.107144897700175e+00 1.098565183912732e+00 1.090022205928715e+00 1.081515840091119e+00 1.073045963211572e+00 + 1.064612452566622e+00 1.056215185894267e+00 1.047854041390364e+00 1.039528897705007e+00 1.031239633939121e+00 + 1.022986129640866e+00 1.014768264802145e+00 1.006585919855045e+00 9.984389756684801e-01 9.903273135446030e-01 + 9.822508152154082e-01 9.742093628392352e-01 9.662028389973587e-01 9.582311266906002e-01 9.502941093358241e-01 + 9.423916707626767e-01 9.345236952100229e-01 9.266900673227085e-01 9.188906721481011e-01 9.111253951328451e-01 + 9.033941221194010e-01 8.956967393427846e-01 8.880331334272610e-01 8.804031913829442e-01 8.728068006026135e-01 + 8.652438488583921e-01 8.577142242984056e-01 8.502178154436311e-01 8.427545111845509e-01 8.353242007779756e-01 + 8.279267738437964e-01 8.205621203617139e-01 8.132301306681471e-01 8.059306954529140e-01 7.986637057561503e-01 + 7.914290529650345e-01 7.842266288107618e-01 7.770563253651749e-01 7.699180350378541e-01 7.628116505728531e-01 + 7.557370650456214e-01 7.486941718598701e-01 7.416828647444645e-01 7.347030377503992e-01 7.277545852476291e-01 + 7.208374019220541e-01 7.139513827724407e-01 7.070964231074183e-01 7.002724185423663e-01 6.934792649964288e-01 + 6.867168586895047e-01 6.799850961392301e-01 6.732838741579268e-01 6.666130898497350e-01 6.599726406074945e-01 + 6.533624241098983e-01 6.467823383184316e-01 6.402322814744908e-01 6.337121520964275e-01 6.272218489766089e-01 + 6.207612711784971e-01 6.143303180337611e-01 6.079288891393009e-01 6.015568843544575e-01 5.952142037980943e-01 + 5.889007478456828e-01 5.826164171264790e-01 5.763611125206967e-01 5.701347351565679e-01 5.639371864075745e-01 + 5.577683678896429e-01 5.516281814582515e-01 5.455165292057105e-01 5.394333134582663e-01 5.333784367733995e-01 + 5.273518019369698e-01 5.213533119605117e-01 5.153828700784110e-01 5.094403797451691e-01 5.035257446326564e-01 + 4.976388686274215e-01 4.917796558278603e-01 4.859480105415648e-01 4.801438372826372e-01 4.743670407689158e-01 + 4.686175259193253e-01 4.628951978511510e-01 4.571999618774475e-01 4.515317235042200e-01 4.458903884279151e-01 + 4.402758625327055e-01 4.346880518878101e-01 4.291268627449178e-01 4.235922015354998e-01 4.180839748682681e-01 + 4.126020895264665e-01 4.071464524653613e-01 4.017169708095674e-01 3.963135518504945e-01 3.909361030438095e-01 + 3.855845320067642e-01 3.802587465157333e-01 3.749586545035676e-01 3.696841640571185e-01 3.644351834146782e-01 + 3.592116209633923e-01 3.540133852368759e-01 3.488403849124828e-01 3.436925288089546e-01 3.385697258838968e-01 + 3.334718852312641e-01 3.283989160788470e-01 3.233507277858437e-01 3.183272298403194e-01 3.133283318568030e-01 + 3.083539435738327e-01 3.034039748514419e-01 2.984783356687986e-01 2.935769361216686e-01 2.886996864201087e-01 + 2.838464968859363e-01 2.790172779503823e-01 2.742119401516568e-01 2.694303941325703e-01 2.646725506380950e-01 + 2.599383205130464e-01 2.552276146996211e-01 2.505403442351217e-01 2.458764202495218e-01 2.412357539631229e-01 + 2.366182566842129e-01 2.320238398067430e-01 2.274524148079101e-01 2.229038932459355e-01 2.183781867576622e-01 + 2.138752070562706e-01 2.093948659289587e-01 2.049370752346371e-01 2.005017469016403e-01 1.960887929254289e-01 + 1.916981253663058e-01 1.873296563471624e-01 1.829832980511424e-01 1.786589627194394e-01 1.743565626490449e-01 + 1.700760101904446e-01 1.658172177454271e-01 1.615800977647709e-01 1.573645627461043e-01 1.531705252316189e-01 + 1.489978978058863e-01 1.448465930935696e-01 1.407165237573240e-01 1.366076024955152e-01 1.325197420400579e-01 + 1.284528551770627e-01 1.244068549109786e-01 1.203816545835814e-01 1.163771678794684e-01 1.123933088248479e-01 + 1.084299917859774e-01 1.044871314678827e-01 1.005646429129689e-01 9.666244149962336e-02 9.278044294093042e-02 + 8.891856328326010e-02 8.507671890495247e-02 8.125482651492469e-02 7.745280315142496e-02 7.367056618064396e-02 + 6.990803329539529e-02 6.616512251382445e-02 6.244175217805844e-02 5.873784095293907e-02 5.505330782471297e-02 + 5.138807209970360e-02 4.774205340306011e-02 4.411517167746844e-02 4.050734718187685e-02 3.691850049018999e-02 + 3.334855249003175e-02 2.979742438148665e-02 2.626503767583784e-02 2.275131419427759e-02 1.925617606672326e-02 + 1.577954573055541e-02 1.232134592935888e-02 8.881499711726960e-03 5.459930430004230e-03 2.056561739096700e-03 + -1.328682404767517e-03 -4.695877745199581e-03 -8.045099726958113e-03 -1.137642349700526e-02 -1.468992390581868e-02 + -1.798567550849994e-02 -2.126375256604388e-02 -2.452422904642609e-02 -2.776717862581702e-02 -3.099267468976436e-02 + -3.420079033433134e-02 -3.739159836725407e-02 -4.056517130915015e-02 -4.372158139458357e-02 -4.686090057326460e-02 + -4.998320051114372e-02 -5.308855259161664e-02 -5.617702791657462e-02 -5.924869730760597e-02 -6.230363130703898e-02 + -6.534190017910750e-02 -6.836357391105545e-02 -7.136872221419481e-02 -7.435741452511502e-02 -7.732972000665117e-02 + -8.028570754904664e-02 -8.322544577103416e-02 -8.614900302092927e-02 -8.905644737765582e-02 -9.194784665187250e-02 + -9.482326838702702e-02 -9.768277986039825e-02 -1.005264480841977e-01 -1.033543398065786e-01 -1.061665215127225e-01 + -1.089630594258708e-01 -1.117440195083512e-01 -1.145094674626706e-01 -1.172594687324688e-01 -1.199940885036170e-01 + -1.227133917051920e-01 -1.254174430105297e-01 -1.281063068382317e-01 -1.307800473531549e-01 -1.334387284674846e-01 + -1.360824138416465e-01 -1.387111668853625e-01 -1.413250507586487e-01 -1.439241283727702e-01 -1.465084623912609e-01 + -1.490781152308980e-01 -1.516331490626576e-01 -1.541736258127362e-01 -1.566996071634631e-01 -1.592111545543137e-01 + -1.617083291828272e-01 -1.641911920056306e-01 -1.666598037393228e-01 -1.691142248614502e-01 -1.715545156114835e-01 + -1.739807359916819e-01 -1.763929457681409e-01 -1.787912044716221e-01 -1.811755713985734e-01 -1.835461056119560e-01 + -1.859028659422536e-01 -1.882459109883583e-01 -1.905752991184608e-01 -1.928910884710336e-01 -1.951933369556478e-01 + -1.974821022539397e-01 -1.997574418204710e-01 -2.020194128836759e-01 -2.042680724467016e-01 -2.065034772883179e-01 + -2.087256839637963e-01 -2.109347488058004e-01 -2.131307279252683e-01 -2.153136772122745e-01 -2.174836523368936e-01 + -2.196407087500562e-01 -2.217849016844791e-01 -2.239162861554468e-01 -2.260349169616924e-01 -2.281408486862806e-01 + -2.302341356974058e-01 -2.323148321492708e-01 -2.343829919829198e-01 -2.364386689270964e-01 -2.384819164990271e-01 + -2.405127880053071e-01 -2.425313365426985e-01 -2.445376149989555e-01 -2.465316760536560e-01 -2.485135721790400e-01 + -2.504833556407610e-01 -2.524410784987640e-01 -2.543867926080461e-01 -2.563205496194905e-01 -2.582424009806452e-01 + -2.601523979365374e-01 -2.620505915304850e-01 -2.639370326048261e-01 -2.658117718017723e-01 -2.676748595641544e-01 + -2.695263461362243e-01 -2.713662815644113e-01 -2.731947156981301e-01 -2.750116981905363e-01 -2.768172784992608e-01 + -2.786115058872192e-01 -2.803944294233929e-01 -2.821660979835196e-01 -2.839265602509042e-01 -2.856758647171534e-01 + -2.874140596829106e-01 -2.891411932586440e-01 -2.908573133653345e-01 -2.925624677352915e-01 -2.942567039128065e-01 + -2.959400692549439e-01 -2.976126109322416e-01 -2.992743759294846e-01 -3.009254110463699e-01 -3.025657628982811e-01 + -3.041954779169662e-01 -3.058146023512905e-01 -3.074231822679283e-01 -3.090212635520883e-01 -3.106088919082178e-01 + -3.121861128606702e-01 -3.137529717544789e-01 -3.153095137560057e-01 -3.168557838536582e-01 -3.183918268585680e-01 + -3.199176874052821e-01 -3.214334099524758e-01 -3.229390387836064e-01 -3.244346180076274e-01 -3.259201915596340e-01 + -3.273958032015747e-01 -3.288614965228901e-01 -3.303173149412112e-01 -3.317633017030133e-01 -3.331994998843112e-01 + -3.346259523912713e-01 -3.360427019609168e-01 -3.374497911617634e-01 -3.388472623944848e-01 -3.402351578925532e-01 + -3.416135197229017e-01 -3.429823897865841e-01 -3.443418098193779e-01 -3.456918213924676e-01 -3.470324659130598e-01 + -3.483637846250315e-01 -3.496858186095617e-01 -3.509986087857613e-01 -3.523021959113238e-01 -3.535966205831011e-01 + -3.548819232377647e-01 -3.561581441524522e-01 -3.574253234453196e-01 -3.586835010762260e-01 -3.599327168472828e-01 + -3.611730104035293e-01 -3.624044212334842e-01 -3.636269886698147e-01 -3.648407518898746e-01 -3.660457499163503e-01 + -3.672420216178365e-01 -3.684296057094698e-01 -3.696085407534776e-01 -3.707788651597906e-01 -3.719406171866457e-01 + -3.730938349411396e-01 -3.742385563798445e-01 -3.753748193093961e-01 -3.765026613870533e-01 -3.776221201212621e-01 + -3.787332328722756e-01 -3.798360368526863e-01 -3.809305691280234e-01 -3.820168666173251e-01 -3.830949660936693e-01 + -3.841649041847720e-01 -3.852267173735459e-01 -3.862804419986352e-01 -3.873261142550198e-01 -3.883637701945205e-01 + -3.893934457263795e-01 -3.904151766178028e-01 -3.914289984945251e-01 -3.924349468413246e-01 -3.934330570025930e-01 + -3.944233641828842e-01 -3.954059034474297e-01 -3.963807097226779e-01 -3.973478177968615e-01 -3.983072623204877e-01 + -3.992590778069047e-01 -4.002032986328107e-01 -4.011399590387960e-01 -4.020690931298508e-01 -4.029907348759087e-01 + -4.039049181123409e-01 -4.048116765404994e-01 -4.057110437282286e-01 -4.066030531103722e-01 -4.074877379892861e-01 + -4.083651315353587e-01 -4.092352667875090e-01 -4.100981766537065e-01 -4.109538939114675e-01 -4.118024512083461e-01 + -4.126438810624441e-01 -4.134782158629402e-01 -4.143054878705253e-01 -4.151257292179480e-01 -4.159389719104870e-01 + -4.167452478264305e-01 -4.175445887176054e-01 -4.183370262098177e-01 -4.191225918033580e-01 -4.199013168735009e-01 + -4.206732326709396e-01 -4.214383703223147e-01 -4.221967608306660e-01 -4.229484350759363e-01 -4.236934238153774e-01 + -4.244317576840932e-01 -4.251634671954816e-01 -4.258885827416927e-01 -4.266071345941294e-01 -4.273191529038617e-01 + -4.280246677021214e-01 -4.287237089007595e-01 -4.294163062927144e-01 -4.301024895524314e-01 -4.307822882363627e-01 + -4.314557317833937e-01 -4.321228495152951e-01 -4.327836706371986e-01 -4.334382242379995e-01 -4.340865392908534e-01 + -4.347286446535799e-01 -4.353645690691347e-01 -4.359943411660291e-01 -4.366179894587786e-01 -4.372355423483457e-01 + -4.378470281225629e-01 -4.384524749565775e-01 -4.390519109132727e-01 -4.396453639437279e-01 -4.402328618876056e-01 + -4.408144324736016e-01 -4.413901033198709e-01 -4.419599019344536e-01 -4.425238557156836e-01 -4.430819919526221e-01 + -4.436343378254720e-01 -4.441809204059955e-01 -4.447217666579382e-01 -4.452569034374185e-01 -4.457863574933799e-01 + -4.463101554679531e-01 -4.468283238969095e-01 -4.473408892100464e-01 -4.478478777315916e-01 -4.483493156806204e-01 + -4.488452291714454e-01 -4.493356442140187e-01 -4.498205867143624e-01 -4.503000824749173e-01 -4.507741571949616e-01 + -4.512428364710219e-01 -4.517061457972442e-01 -4.521641105657935e-01 -4.526167560672623e-01 -4.530641074910190e-01 + -4.535061899256283e-01 -4.539430283592286e-01 -4.543746476799236e-01 -4.548010726761367e-01 -4.552223280370362e-01 + -4.556384383528748e-01 -4.560494281153836e-01 -4.564553217181717e-01 -4.568561434570674e-01 -4.572519175304953e-01 + -4.576426680398754e-01 -4.580284189899756e-01 -4.584091942892721e-01 -4.587850177503439e-01 -4.591559130902201e-01 + -4.595219039307485e-01 -4.598830137989582e-01 -4.602392661274434e-01 -4.605906842546850e-01 -4.609372914254449e-01 + -4.612791107911075e-01 -4.616161654100372e-01 -4.619484782479524e-01 -4.622760721782430e-01 -4.625989699823694e-01 + -4.629171943501736e-01 -4.632307678802506e-01 -4.635397130802937e-01 -4.638440523674353e-01 -4.641438080686026e-01 + -4.644390024208574e-01 -4.647296575717468e-01 -4.650157955796300e-01 -4.652974384140222e-01 -4.655746079559532e-01 + -4.658473259982778e-01 -4.661156142460532e-01 -4.663794943168157e-01 -4.666389877409668e-01 -4.668941159620683e-01 + -4.671449003372185e-01 -4.673913621373426e-01 -4.676335225475269e-01 -4.678714026673784e-01 -4.681050235112959e-01 + -4.683344060088593e-01 -4.685595710051007e-01 -4.687805392608567e-01 -4.689973314530860e-01 -4.692099681751815e-01 + -4.694184699372852e-01 -4.696228571666247e-01 -4.698231502078187e-01 -4.700193693231891e-01 -4.702115346930843e-01 + -4.703996664161776e-01 -4.705837845097923e-01 -4.707639089102184e-01 -4.709400594729968e-01 -4.711122559732588e-01 + -4.712805181059950e-01 -4.714448654864083e-01 -4.716053176501748e-01 -4.717618940537731e-01 -4.719146140747824e-01 + -4.720634970121747e-01 -4.722085620866210e-01 -4.723498284407942e-01 -4.724873151396647e-01 -4.726210411707873e-01 + -4.727510254446071e-01 -4.728772867947550e-01 -4.729998439783352e-01 -4.731187156762063e-01 -4.732339204933063e-01 + -4.733454769589109e-01 -4.734534035269299e-01 -4.735577185761909e-01 -4.736584404107488e-01 -4.737555872601465e-01 + -4.738491772796940e-01 -4.739392285507956e-01 -4.740257590811688e-01 -4.741087868051752e-01 -4.741883295840841e-01 + -4.742644052063367e-01 -4.743370313878497e-01 -4.744062257722810e-01 -4.744720059313051e-01 -4.745343893648669e-01 + -4.745933935014941e-01 -4.746490356985626e-01 -4.747013332425246e-01 -4.747503033492410e-01 -4.747959631642038e-01 + -4.748383297628252e-01 -4.748774201507002e-01 -4.749132512638847e-01 -4.749458399691437e-01 -4.749752030642187e-01 + -4.750013572780920e-01 -4.750243192712693e-01 -4.750441056360086e-01 -4.750607328965978e-01 -4.750742175096198e-01 + -4.750845758641872e-01 -4.750918242822288e-01 -4.750959790187394e-01 -4.750970562620120e-01 -4.750950721339195e-01 + -4.750900426901474e-01 -4.750819839204654e-01 -4.750709117489764e-01 -4.750568420343447e-01 -4.750397905700711e-01 + -4.750197730847343e-01 -4.749968052422330e-01 -4.749709026420343e-01 -4.749420808194326e-01 -4.749103552457691e-01 + -4.748757413286987e-01 -4.748382544124283e-01 -4.747979097779449e-01 -4.747547226432774e-01 -4.747087081637295e-01 + -4.746598814321030e-01 -4.746082574789627e-01 -4.745538512728568e-01 -4.744966777205579e-01 -4.744367516673028e-01 + -4.743740878970119e-01 -4.743087011325590e-01 -4.742406060359583e-01 -4.741698172086285e-01 -4.740963491916135e-01 + -4.740202164658138e-01 -4.739414334522169e-01 -4.738600145121280e-01 -4.737759739473920e-01 -4.736893260006224e-01 + -4.736000848554337e-01 -4.735082646366681e-01 -4.734138794106005e-01 -4.733169431851845e-01 -4.732174699102648e-01 + -4.731154734778030e-01 -4.730109677220866e-01 -4.729039664199755e-01 -4.727944832910970e-01 -4.726825319980685e-01 + -4.725681261467200e-01 -4.724512792863214e-01 -4.723320049097726e-01 -4.722103164538504e-01 -4.720862272993950e-01 + -4.719597507715304e-01 -4.718309001398912e-01 -4.716996886188288e-01 -4.715661293676178e-01 -4.714302354906563e-01 + -4.712920200377031e-01 -4.711514960040607e-01 -4.710086763307934e-01 -4.708635739049467e-01 -4.707162015597322e-01 + -4.705665720747447e-01 -4.704146981761608e-01 -4.702605925369638e-01 -4.701042677771201e-01 -4.699457364637905e-01 + -4.697850111115414e-01 -4.696221041825355e-01 -4.694570280867417e-01 -4.692897951821250e-01 -4.691204177748465e-01 + -4.689489081194748e-01 -4.687752784191629e-01 -4.685995408258664e-01 -4.684217074405129e-01 -4.682417903132262e-01 + -4.680598014435052e-01 -4.678757527804068e-01 -4.676896562227751e-01 -4.675015236193920e-01 -4.673113667691884e-01 + -4.671191974214435e-01 -4.669250272759565e-01 -4.667288679832497e-01 -4.665307311447420e-01 -4.663306283129641e-01 + -4.661285709917151e-01 -4.659245706362672e-01 -4.657186386535465e-01 -4.655107864023225e-01 -4.653010251933785e-01 + -4.650893662897153e-01 -4.648758209067220e-01 -4.646604002123618e-01 -4.644431153273494e-01 -4.642239773253394e-01 + -4.640029972330991e-01 -4.637801860307005e-01 -4.635555546516759e-01 -4.633291139832276e-01 -4.631008748663768e-01 + -4.628708480961548e-01 -4.626390444217817e-01 -4.624054745468394e-01 -4.621701491294375e-01 -4.619330787824019e-01 + -4.616942740734386e-01 -4.614537455253082e-01 -4.612115036160014e-01 -4.609675587789148e-01 -4.607219214030117e-01 + -4.604746018329950e-01 -4.602256103694822e-01 -4.599749572691766e-01 -4.597226527450231e-01 -4.594687069663918e-01 + -4.592131300592309e-01 -4.589559321062432e-01 -4.586971231470549e-01 -4.584367131783647e-01 -4.581747121541278e-01 + -4.579111299857050e-01 -4.576459765420438e-01 -4.573792616498222e-01 -4.571109950936174e-01 -4.568411866160735e-01 + -4.565698459180598e-01 -4.562969826588261e-01 -4.560226064561707e-01 -4.557467268865966e-01 -4.554693534854669e-01 + -4.551904957471677e-01 -4.549101631252565e-01 -4.546283650326408e-01 -4.543451108417039e-01 -4.540604098844917e-01 + -4.537742714528391e-01 -4.534867047985492e-01 -4.531977191335333e-01 -4.529073236299647e-01 -4.526155274204399e-01 + -4.523223395981290e-01 -4.520277692169113e-01 -4.517318252915524e-01 -4.514345167978363e-01 -4.511358526727233e-01 + -4.508358418144944e-01 -4.505344930829079e-01 -4.502318152993443e-01 -4.499278172469504e-01 -4.496225076707799e-01 + -4.493158952779696e-01 -4.490079887378519e-01 -4.486987966821160e-01 -4.483883277049593e-01 -4.480765903632109e-01 + -4.477635931765017e-01 -4.474493446273838e-01 -4.471338531614995e-01 -4.468171271876915e-01 -4.464991750781740e-01 + -4.461800051686558e-01 -4.458596257584943e-01 -4.455380451108262e-01 -4.452152714527109e-01 -4.448913129752649e-01 + -4.445661778338122e-01 -4.442398741480117e-01 -4.439124100019932e-01 -4.435837934445122e-01 -4.432540324890672e-01 + -4.429231351140376e-01 -4.425911092628348e-01 -4.422579628440284e-01 -4.419237037314669e-01 -4.415883397644404e-01 + -4.412518787477896e-01 -4.409143284520474e-01 -4.405756966135796e-01 -4.402359909347059e-01 -4.398952190838318e-01 + -4.395533886955935e-01 -4.392105073709716e-01 -4.388665826774278e-01 -4.385216221490429e-01 -4.381756332866276e-01 + -4.378286235578683e-01 -4.374806003974559e-01 -4.371315712071950e-01 -4.367815433561539e-01 -4.364305241807742e-01 + -4.360785209850022e-01 -4.357255410404288e-01 -4.353715915863917e-01 -4.350166798301134e-01 -4.346608129468261e-01 + -4.343039980798920e-01 -4.339462423409317e-01 -4.335875528099410e-01 -4.332279365354222e-01 -4.328674005344869e-01 + -4.325059517930095e-01 -4.321435972657188e-01 -4.317803438763408e-01 -4.314161985177001e-01 -4.310511680518516e-01 + -4.306852593102004e-01 -4.303184790936203e-01 -4.299508341725593e-01 -4.295823312871853e-01 -4.292129771474699e-01 + -4.288427784333342e-01 -4.284717417947512e-01 -4.280998738518690e-01 -4.277271811951201e-01 -4.273536703853397e-01 + -4.269793479538845e-01 -4.266042204027427e-01 -4.262282942046541e-01 -4.258515758032150e-01 -4.254740716129992e-01 + -4.250957880196697e-01 -4.247167313800879e-01 -4.243369080224274e-01 -4.239563242462950e-01 -4.235749863228220e-01 + -4.231929004947953e-01 -4.228100729767542e-01 -4.224265099551086e-01 -4.220422175882484e-01 -4.216572020066444e-01 + -4.212714693129675e-01 -4.208850255821933e-01 -4.204978768617071e-01 -4.201100291714192e-01 -4.197214885038574e-01 + -4.193322608242989e-01 -4.189423520708486e-01 -4.185517681545620e-01 -4.181605149595555e-01 -4.177685983430907e-01 + -4.173760241357025e-01 -4.169827981412855e-01 -4.165889261372134e-01 -4.161944138744371e-01 -4.157992670775694e-01 + -4.154034914450244e-01 -4.150070926490952e-01 -4.146100763360574e-01 -4.142124481262816e-01 -4.138142136143196e-01 + -4.134153783690241e-01 -4.130159479336332e-01 -4.126159278258805e-01 -4.122153235380931e-01 -4.118141405372848e-01 + -4.114123842652692e-01 -4.110100601387416e-01 -4.106071735493937e-01 -4.102037298639951e-01 -4.097997344245059e-01 + -4.093951925481660e-01 -4.089901095275951e-01 -4.085844906308891e-01 -4.081783411017212e-01 -4.077716661594177e-01 + -4.073644709990864e-01 -4.069567607916758e-01 -4.065485406841069e-01 -4.061398157993360e-01 -4.057305912364691e-01 + -4.053208720708403e-01 -4.049106633541245e-01 -4.044999701144098e-01 -4.040887973563111e-01 -4.036771500610402e-01 + -4.032650331865167e-01 -4.028524516674513e-01 -4.024394104154334e-01 -4.020259143190380e-01 -4.016119682438973e-01 + -4.011975770327985e-01 -4.007827455057827e-01 -4.003674784602204e-01 -3.999517806709105e-01 -3.995356568901643e-01 + -3.991191118478982e-01 -3.987021502517233e-01 -3.982847767870198e-01 -3.978669961170498e-01 -3.974488128830166e-01 + -3.970302317041749e-01 -3.966112571779090e-01 -3.961918938798134e-01 -3.957721463637840e-01 -3.953520191621047e-01 + -3.949315167855397e-01 -3.945106437234024e-01 -3.940894044436516e-01 -3.936678033929785e-01 -3.932458449968794e-01 + -3.928235336597472e-01 -3.924008737649589e-01 -3.919778696749529e-01 -3.915545257313107e-01 -3.911308462548441e-01 + -3.907068355456779e-01 -3.902824978833218e-01 -3.898578375267718e-01 -3.894328587145747e-01 -3.890075656649072e-01 + -3.885819625756786e-01 -3.881560536245893e-01 -3.877298429692143e-01 -3.873033347471000e-01 -3.868765330758216e-01 + -3.864494420530757e-01 -3.860220657567540e-01 -3.855944082450307e-01 -3.851664735564277e-01 -3.847382657099024e-01 + -3.843097887049221e-01 -3.838810465215466e-01 -3.834520431204942e-01 -3.830227824432340e-01 -3.825932684120454e-01 + -3.821635049301154e-01 -3.817334958815909e-01 -3.813032451316750e-01 -3.808727565266886e-01 -3.804420338941629e-01 + -3.800110810428943e-01 -3.795799017630236e-01 -3.791484998261256e-01 -3.787168789852677e-01 -3.782850429750875e-01 + -3.778529955118761e-01 -3.774207402936319e-01 -3.769882810001542e-01 -3.765556212930997e-01 -3.761227648160705e-01 + -3.756897151946748e-01 -3.752564760365993e-01 -3.748230509316866e-01 -3.743894434520073e-01 -3.739556571519255e-01 + -3.735216955681692e-01 -3.730875622199170e-01 -3.726532606088387e-01 -3.722187942191943e-01 -3.717841665178908e-01 + -3.713493809545508e-01 -3.709144409615882e-01 -3.704793499542680e-01 -3.700441113307890e-01 -3.696087284723371e-01 + -3.691732047431630e-01 -3.687375434906512e-01 -3.683017480453854e-01 -3.678658217212094e-01 -3.674297678153078e-01 + -3.669935896082615e-01 -3.665572903641225e-01 -3.661208733304759e-01 -3.656843417385093e-01 -3.652476988030719e-01 + -3.648109477227537e-01 -3.643740916799328e-01 -3.639371338408637e-01 -3.635000773557227e-01 -3.630629253586778e-01 + -3.626256809679619e-01 -3.621883472859287e-01 -3.617509273991160e-01 -3.613134243783145e-01 -3.608758412786324e-01 + -3.604381811395513e-01 -3.600004469850010e-01 -3.595626418234094e-01 -3.591247686477773e-01 -3.586868304357299e-01 + -3.582488301495880e-01 -3.578107707364258e-01 -3.573726551281340e-01 -3.569344862414776e-01 -3.564962669781689e-01 + -3.560580002249100e-01 -3.556196888534721e-01 -3.551813357207421e-01 -3.547429436687960e-01 -3.543045155249455e-01 + -3.538660541018055e-01 -3.534275621973603e-01 -3.529890425950065e-01 -3.525504980636283e-01 -3.521119313576445e-01 + -3.516733452170775e-01 -3.512347423676107e-01 -3.507961255206355e-01 -3.503574973733246e-01 -3.499188606086763e-01 + -3.494802178955826e-01 -3.490415718888917e-01 -3.486029252294393e-01 -3.481642805441431e-01 -3.477256404460241e-01 + -3.472870075342870e-01 -3.468483843943664e-01 -3.464097735979946e-01 -3.459711777032332e-01 -3.455325992545595e-01 + -3.450940407828988e-01 -3.446555048056859e-01 -3.442169938269355e-01 -3.437785103372727e-01 -3.433400568140066e-01 + -3.429016357211739e-01 -3.424632495095972e-01 -3.420249006169416e-01 -3.415865914677697e-01 -3.411483244735898e-01 + -3.407101020329076e-01 -3.402719265312936e-01 -3.398338003414163e-01 -3.393957258231169e-01 -3.389577053234419e-01 + -3.385197411767087e-01 -3.380818357045552e-01 -3.376439912159923e-01 -3.372062100074474e-01 -3.367684943628340e-01 + -3.363308465535850e-01 -3.358932688387101e-01 -3.354557634648621e-01 -3.350183326663648e-01 -3.345809786652706e-01 + -3.341437036714240e-01 -3.337065098824968e-01 -3.332693994840455e-01 -3.328323746495603e-01 -3.323954375405185e-01 + -3.319585903064250e-01 -3.315218350848725e-01 -3.310851740015786e-01 -3.306486091704498e-01 -3.302121426936186e-01 + -3.297757766615052e-01 -3.293395131528417e-01 -3.289033542347531e-01 -3.284673019627791e-01 -3.280313583809329e-01 + -3.275955255217547e-01 -3.271598054063429e-01 -3.267242000444232e-01 -3.262887114343770e-01 -3.258533415632922e-01 + -3.254180924070263e-01 -3.249829659302321e-01 -3.245479640864183e-01 -3.241130888179846e-01 -3.236783420562795e-01 + -3.232437257216423e-01 -3.228092417234450e-01 -3.223748919601409e-01 -3.219406783193167e-01 -3.215066026777184e-01 + -3.210726669013282e-01 -3.206388728453769e-01 -3.202052223544093e-01 -3.197717172623216e-01 -3.193383593924082e-01 + -3.189051505574045e-01 -3.184720925595313e-01 -3.180391871905422e-01 -3.176064362317638e-01 -3.171738414541382e-01 + -3.167414046182712e-01 -3.163091274744734e-01 -3.158770117628028e-01 -3.154450592131086e-01 -3.150132715450760e-01 + -3.145816504682646e-01 -3.141501976821553e-01 -3.137189148761902e-01 -3.132878037298163e-01 -3.128568659125269e-01 + -3.124261030839030e-01 -3.119955168936583e-01 -3.115651089816756e-01 -3.111348809780509e-01 -3.107048345031392e-01 + -3.102749711675883e-01 -3.098452925723818e-01 -3.094158003088841e-01 -3.089864959588767e-01 -3.085573810946008e-01 + -3.081284572787977e-01 -3.076997260647473e-01 -3.072711889963102e-01 -3.068428476079669e-01 -3.064147034248588e-01 + -3.059867579628250e-01 -3.055590127284453e-01 -3.051314692190763e-01 -3.047041289228922e-01 -3.042769933189233e-01 + -3.038500638770990e-01 -3.034233420582801e-01 -3.029968293142994e-01 -3.025705270880027e-01 -3.021444368132851e-01 + -3.017185599151295e-01 -3.012928978096455e-01 -3.008674519041057e-01 -3.004422235969845e-01 -3.000172142779951e-01 + -2.995924253281280e-01 -2.991678581196876e-01 -2.987435140163288e-01 -2.983193943730953e-01 -2.978955005364570e-01 + -2.974718338443422e-01 -2.970483956261805e-01 -2.966251872029370e-01 -2.962022098871464e-01 -2.957794649829509e-01 + -2.953569537861376e-01 -2.949346775841717e-01 -2.945126376562342e-01 -2.940908352732579e-01 -2.936692716979604e-01 + -2.932479481848828e-01 -2.928268659804223e-01 -2.924060263228685e-01 -2.919854304424380e-01 -2.915650795613108e-01 + -2.911449748936619e-01 -2.907251176456982e-01 -2.903055090156925e-01 -2.898861501940171e-01 -2.894670423631824e-01 + -2.890481866978607e-01 -2.886295843649317e-01 -2.882112365235086e-01 -2.877931443249761e-01 -2.873753089130213e-01 + -2.869577314236684e-01 -2.865404129853113e-01 -2.861233547187471e-01 -2.857065577372088e-01 -2.852900231464002e-01 + -2.848737520445255e-01 -2.844577455223233e-01 -2.840420046631011e-01 -2.836265305427633e-01 -2.832113242298477e-01 + -2.827963867855557e-01 -2.823817192637871e-01 -2.819673227111654e-01 -2.815531981670761e-01 -2.811393466636966e-01 + -2.807257692260255e-01 -2.803124668719179e-01 -2.798994406121131e-01 -2.794866914502679e-01 -2.790742203829868e-01 + -2.786620283998533e-01 -2.782501164834605e-01 -2.778384856094426e-01 -2.774271367465044e-01 -2.770160708564514e-01 + -2.766052888942225e-01 -2.761947918079178e-01 -2.757845805388300e-01 -2.753746560214738e-01 -2.749650191836171e-01 + -2.745556709463089e-01 -2.741466122239097e-01 -2.737378439241217e-01 -2.733293669480180e-01 -2.729211821900704e-01 + -2.725132905381809e-01 -2.721056928737112e-01 -2.716983900715075e-01 -2.712913829999344e-01 -2.708846725209002e-01 + -2.704782594898876e-01 -2.700721447559801e-01 -2.696663291618944e-01 -2.692608135440029e-01 -2.688555987323694e-01 + -2.684506855507684e-01 -2.680460748167207e-01 -2.676417673415175e-01 -2.672377639302478e-01 -2.668340653818301e-01 + -2.664306724890348e-01 -2.660275860385143e-01 -2.656248068108309e-01 -2.652223355804827e-01 -2.648201731159316e-01 + -2.644183201796296e-01 -2.640167775280468e-01 -2.636155459116970e-01 -2.632146260751655e-01 -2.628140187571352e-01 + -2.624137246904130e-01 -2.620137446019571e-01 -2.616140792129022e-01 -2.612147292385862e-01 -2.608156953885770e-01 + -2.604169783666967e-01 -2.600185788710496e-01 -2.596204975940467e-01 -2.592227352224323e-01 -2.588252924373090e-01 + -2.584281699141626e-01 -2.580313683228896e-01 -2.576348883278203e-01 -2.572387305877447e-01 -2.568428957559388e-01 + -2.564473844801885e-01 -2.560521974028147e-01 -2.556573351606972e-01 -2.552627983853024e-01 -2.548685877027041e-01 + -2.544747037336113e-01 -2.540811470933900e-01 -2.536879183920906e-01 -2.532950182344688e-01 -2.529024472200115e-01 + -2.525102059429617e-01 -2.521182949923413e-01 -2.517267149519750e-01 -2.513354664005141e-01 -2.509445499114610e-01 + -2.505539660531915e-01 -2.501637153889796e-01 -2.497737984770205e-01 -2.493842158704539e-01 -2.489949681173868e-01 + -2.486060557609173e-01 -2.482174793391575e-01 -2.478292393852558e-01 -2.474413364274212e-01 -2.470537709889451e-01 + -2.466665435882237e-01 -2.462796547387821e-01 -2.458931049492936e-01 -2.455068947236079e-01 -2.451210245607670e-01 + -2.447354949550318e-01 -2.443503063959022e-01 -2.439654593681407e-01 -2.435809543517927e-01 -2.431967918222100e-01 + -2.428129722500717e-01 -2.424294961014064e-01 -2.420463638376137e-01 -2.416635759154854e-01 -2.412811327872276e-01 + -2.408990349004822e-01 -2.405172826983475e-01 -2.401358766193997e-01 -2.397548170977153e-01 -2.393741045628887e-01 + -2.389937394400589e-01 -2.386137221499250e-01 -2.382340531087699e-01 -2.378547327284790e-01 -2.374757614165634e-01 + -2.370971395761802e-01 -2.367188676061497e-01 -2.363409459009800e-01 -2.359633748508849e-01 -2.355861548418050e-01 + -2.352092862554274e-01 -2.348327694692066e-01 -2.344566048563836e-01 -2.340807927860066e-01 -2.337053336229509e-01 + -2.333302277279365e-01 -2.329554754575520e-01 -2.325810771642715e-01 -2.322070331964739e-01 -2.318333438984625e-01 + -2.314600096104864e-01 -2.310870306687571e-01 -2.307144074054706e-01 -2.303421401488229e-01 -2.299702292230336e-01 + -2.295986749483609e-01 -2.292274776411229e-01 -2.288566376137156e-01 -2.284861551746319e-01 -2.281160306284802e-01 + -2.277462642760038e-01 -2.273768564140987e-01 -2.270078073358302e-01 -2.266391173304571e-01 -2.262707866834436e-01 + -2.259028156764818e-01 -2.255352045875075e-01 -2.251679536907193e-01 -2.248010632565976e-01 -2.244345335519208e-01 + -2.240683648397851e-01 -2.237025573796202e-01 -2.233371114272088e-01 -2.229720272347043e-01 -2.226073050506472e-01 + -2.222429451199837e-01 -2.218789476840825e-01 -2.215153129807539e-01 -2.211520412442639e-01 -2.207891327053545e-01 + -2.204265875912613e-01 -2.200644061257277e-01 -2.197025885290234e-01 -2.193411350179623e-01 -2.189800458059190e-01 + -2.186193211028446e-01 -2.182589611152858e-01 -2.178989660463983e-01 -2.175393360959674e-01 -2.171800714604211e-01 + -2.168211723328495e-01 -2.164626389030186e-01 -2.161044713573895e-01 -2.157466698791329e-01 -2.153892346481456e-01 + -2.150321658410667e-01 -2.146754636312947e-01 -2.143191281890032e-01 -2.139631596811566e-01 -2.136075582715250e-01 + -2.132523241207026e-01 -2.128974573861219e-01 -2.125429582220694e-01 -2.121888267797019e-01 -2.118350632070627e-01 + -2.114816676490955e-01 -2.111286402476608e-01 -2.107759811415524e-01 -2.104236904665113e-01 -2.100717683552412e-01 + -2.097202149374249e-01 -2.093690303397391e-01 -2.090182146858671e-01 -2.086677680965194e-01 -2.083176906894425e-01 + -2.079679825794374e-01 -2.076186438783759e-01 -2.072696746952102e-01 -2.069210751359945e-01 -2.065728453038921e-01 + -2.062249852991982e-01 -2.058774952193466e-01 -2.055303751589314e-01 -2.051836252097179e-01 -2.048372454606540e-01 + -2.044912359978923e-01 -2.041455969047963e-01 -2.038003282619618e-01 -2.034554301472254e-01 -2.031109026356815e-01 + -2.027667457996974e-01 -2.024229597089233e-01 -2.020795444303100e-01 -2.017365000281230e-01 -2.013938265639525e-01 + -2.010515240967322e-01 -2.007095926827479e-01 -2.003680323756568e-01 -2.000268432264951e-01 -1.996860252836979e-01 + -1.993455785931075e-01 -1.990055031979886e-01 -1.986657991390446e-01 -1.983264664544254e-01 -1.979875051797450e-01 + -1.976489153480950e-01 -1.973106969900530e-01 -1.969728501337024e-01 -1.966353748046406e-01 -1.962982710259927e-01 + -1.959615388184280e-01 -1.956251782001677e-01 -1.952891891870023e-01 -1.949535717923007e-01 -1.946183260270268e-01 + -1.942834518997504e-01 -1.939489494166578e-01 -1.936148185815682e-01 -1.932810593959428e-01 -1.929476718589016e-01 + -1.926146559672303e-01 -1.922820117153978e-01 -1.919497390955665e-01 -1.916178380976027e-01 -1.912863087090930e-01 + -1.909551509153535e-01 -1.906243646994417e-01 -1.902939500421716e-01 -1.899639069221225e-01 -1.896342353156533e-01 + -1.893049351969122e-01 -1.889760065378515e-01 -1.886474493082383e-01 -1.883192634756632e-01 -1.879914490055588e-01 + -1.876640058612039e-01 -1.873369340037414e-01 -1.870102333921864e-01 -1.866839039834378e-01 -1.863579457322928e-01 + -1.860323585914543e-01 -1.857071425115452e-01 -1.853822974411203e-01 -1.850578233266736e-01 -1.847337201126558e-01 + -1.844099877414779e-01 -1.840866261535306e-01 -1.837636352871888e-01 -1.834410150788265e-01 -1.831187654628282e-01 + -1.827968863715948e-01 -1.824753777355620e-01 -1.821542394832048e-01 -1.818334715410532e-01 -1.815130738337002e-01 + -1.811930462838119e-01 -1.808733888121427e-01 -1.805541013375400e-01 -1.802351837769593e-01 -1.799166360454745e-01 + -1.795984580562850e-01 -1.792806497207312e-01 -1.789632109482995e-01 -1.786461416466387e-01 -1.783294417215646e-01 + -1.780131110770756e-01 -1.776971496153594e-01 -1.773815572368036e-01 -1.770663338400089e-01 -1.767514793217949e-01 + -1.764369935772136e-01 -1.761228764995591e-01 -1.758091279803753e-01 -1.754957479094692e-01 -1.751827361749187e-01 + -1.748700926630821e-01 -1.745578172586112e-01 -1.742459098444563e-01 -1.739343703018815e-01 -1.736231985104690e-01 + -1.733123943481338e-01 -1.730019576911291e-01 -1.726918884140597e-01 -1.723821863898890e-01 -1.720728514899485e-01 + -1.717638835839505e-01 -1.714552825399934e-01 -1.711470482245734e-01 -1.708391805025952e-01 -1.705316792373770e-01 + -1.702245442906654e-01 -1.699177755226406e-01 -1.696113727919261e-01 -1.693053359556013e-01 -1.689996648692055e-01 + -1.686943593867512e-01 -1.683894193607310e-01 -1.680848446421283e-01 -1.677806350804243e-01 -1.674767905236083e-01 + -1.671733108181880e-01 -1.668701958091941e-01 -1.665674453401943e-01 -1.662650592532987e-01 -1.659630373891692e-01 + -1.656613795870303e-01 -1.653600856846742e-01 -1.650591555184729e-01 -1.647585889233856e-01 -1.644583857329657e-01 + -1.641585457793737e-01 -1.638590688933790e-01 -1.635599549043759e-01 -1.632612036403860e-01 -1.629628149280711e-01 + -1.626647885927384e-01 -1.623671244583497e-01 -1.620698223475319e-01 -1.617728820815814e-01 -1.614763034804761e-01 + -1.611800863628813e-01 -1.608842305461582e-01 -1.605887358463735e-01 -1.602936020783054e-01 -1.599988290554530e-01 + -1.597044165900449e-01 -1.594103644930448e-01 -1.591166725741633e-01 -1.588233406418607e-01 -1.585303685033609e-01 + -1.582377559646535e-01 -1.579455028305067e-01 -1.576536089044716e-01 -1.573620739888905e-01 -1.570708978849073e-01 + -1.567800803924707e-01 -1.564896213103463e-01 -1.561995204361223e-01 -1.559097775662154e-01 -1.556203924958829e-01 + -1.553313650192242e-01 -1.550426949291940e-01 -1.547543820176073e-01 -1.544664260751459e-01 -1.541788268913674e-01 + -1.538915842547115e-01 -1.536046979525093e-01 -1.533181677709874e-01 -1.530319934952784e-01 -1.527461749094267e-01 + -1.524607117963948e-01 -1.521756039380729e-01 -1.518908511152837e-01 -1.516064531077906e-01 -1.513224096943057e-01 + -1.510387206524943e-01 -1.507553857589859e-01 -1.504724047893760e-01 -1.501897775182381e-01 -1.499075037191284e-01 + -1.496255831645918e-01 -1.493440156261709e-01 -1.490628008744107e-01 -1.487819386788679e-01 -1.485014288081154e-01 + -1.482212710297503e-01 -1.479414651104009e-01 -1.476620108157320e-01 -1.473829079104534e-01 -1.471041561583254e-01 + -1.468257553221648e-01 -1.465477051638543e-01 -1.462700054443453e-01 -1.459926559236677e-01 -1.457156563609338e-01 + -1.454390065143472e-01 -1.451627061412083e-01 -1.448867549979187e-01 -1.446111528399917e-01 -1.443358994220543e-01 + -1.440609944978579e-01 -1.437864378202811e-01 -1.435122291413369e-01 -1.432383682121806e-01 -1.429648547831135e-01 + -1.426916886035918e-01 -1.424188694222307e-01 -1.421463969868109e-01 -1.418742710442860e-01 -1.416024913407869e-01 + -1.413310576216288e-01 -1.410599696313183e-01 -1.407892271135563e-01 -1.405188298112483e-01 -1.402487774665055e-01 + -1.399790698206557e-01 -1.397097066142447e-01 -1.394406875870463e-01 -1.391720124780649e-01 -1.389036810255427e-01 + -1.386356929669664e-01 -1.383680480390708e-01 -1.381007459778466e-01 -1.378337865185455e-01 -1.375671693956849e-01 + -1.373008943430559e-01 -1.370349610937257e-01 -1.367693693800464e-01 -1.365041189336596e-01 -1.362392094855003e-01 + -1.359746407658051e-01 -1.357104125041158e-01 -1.354465244292862e-01 -1.351829762694863e-01 -1.349197677522090e-01 + -1.346568986042754e-01 -1.343943685518389e-01 -1.341321773203925e-01 -1.338703246347729e-01 -1.336088102191656e-01 + -1.333476337971123e-01 -1.330867950915129e-01 -1.328262938246346e-01 -1.325661297181127e-01 -1.323063024929607e-01 + -1.320468118695722e-01 -1.317876575677267e-01 -1.315288393065955e-01 -1.312703568047456e-01 -1.310122097801473e-01 + -1.307543979501760e-01 -1.304969210316195e-01 -1.302397787406830e-01 -1.299829707929926e-01 -1.297264969036023e-01 + -1.294703567869974e-01 -1.292145501570996e-01 -1.289590767272740e-01 -1.287039362103305e-01 -1.284491283185321e-01 + -1.281946527635968e-01 -1.279405092567057e-01 -1.276866975085055e-01 -1.274332172291124e-01 -1.271800681281207e-01 + -1.269272499146033e-01 -1.266747622971198e-01 -1.264226049837194e-01 -1.261707776819453e-01 -1.259192800988412e-01 + -1.256681119409541e-01 -1.254172729143400e-01 -1.251667627245687e-01 -1.249165810767267e-01 -1.246667276754247e-01 + -1.244172022247991e-01 -1.241680044285187e-01 -1.239191339897878e-01 -1.236705906113518e-01 -1.234223739955020e-01 + -1.231744838440772e-01 -1.229269198584726e-01 -1.226796817396398e-01 -1.224327691880948e-01 -1.221861819039203e-01 + -1.219399195867699e-01 -1.216939819358743e-01 -1.214483686500435e-01 -1.212030794276726e-01 -1.209581139667457e-01 + -1.207134719648391e-01 -1.204691531191281e-01 -1.202251571263871e-01 -1.199814836829988e-01 -1.197381324849542e-01 + -1.194951032278594e-01 -1.192523956069385e-01 -1.190100093170375e-01 -1.187679440526300e-01 -1.185261995078193e-01 + -1.182847753763436e-01 -1.180436713515807e-01 -1.178028871265498e-01 -1.175624223939182e-01 -1.173222768460035e-01 + -1.170824501747778e-01 -1.168429420718731e-01 -1.166037522285827e-01 -1.163648803358681e-01 -1.161263260843597e-01 + -1.158880891643642e-01 -1.156501692658650e-01 -1.154125660785291e-01 -1.151752792917090e-01 -1.149383085944468e-01 + -1.147016536754793e-01 -1.144653142232397e-01 -1.142292899258630e-01 -1.139935804711898e-01 -1.137581855467683e-01 + -1.135231048398606e-01 -1.132883380374441e-01 -1.130538848262161e-01 -1.128197448925984e-01 -1.125859179227391e-01 + -1.123524036025177e-01 -1.121192016175480e-01 -1.118863116531826e-01 -1.116537333945148e-01 -1.114214665263841e-01 + -1.111895107333788e-01 -1.109578656998389e-01 -1.107265311098615e-01 -1.104955066473025e-01 -1.102647919957804e-01 + -1.100343868386814e-01 -1.098042908591604e-01 -1.095745037401462e-01 -1.093450251643448e-01 -1.091158548142417e-01 + -1.088869923721068e-01 -1.086584375199964e-01 -1.084301899397577e-01 -1.082022493130312e-01 -1.079746153212554e-01 + -1.077472876456682e-01 -1.075202659673118e-01 -1.072935499670358e-01 -1.070671393254994e-01 -1.068410337231763e-01 + -1.066152328403565e-01 -1.063897363571499e-01 -1.061645439534909e-01 -1.059396553091392e-01 -1.057150701036848e-01 + -1.054907880165511e-01 -1.052668087269966e-01 -1.050431319141205e-01 -1.048197572568629e-01 -1.045966844340107e-01 + -1.043739131241984e-01 -1.041514430059134e-01 -1.039292737574973e-01 -1.037074050571494e-01 -1.034858365829310e-01 + -1.032645680127662e-01 -1.030435990244467e-01 -1.028229292956349e-01 -1.026025585038652e-01 -1.023824863265493e-01 + -1.021627124409765e-01 -1.019432365243193e-01 -1.017240582536351e-01 -1.015051773058686e-01 -1.012865933578560e-01 + -1.010683060863265e-01 -1.008503151679069e-01 -1.006326202791228e-01 -1.004152210964028e-01 -1.001981172960805e-01 + -9.998130855439724e-02 -9.976479454750635e-02 -9.954857495147398e-02 -9.933264944228326e-02 -9.911701769583717e-02 + -9.890167938796006e-02 -9.868663419440192e-02 -9.847188179084039e-02 -9.825742185288304e-02 -9.804325405607164e-02 + -9.782937807588299e-02 -9.761579358773328e-02 -9.740250026697927e-02 -9.718949778892289e-02 -9.697678582881185e-02 + -9.676436406184359e-02 -9.655223216316815e-02 -9.634038980788918e-02 -9.612883667106893e-02 -9.591757242772889e-02 + -9.570659675285302e-02 -9.549590932139113e-02 -9.528550980826019e-02 -9.507539788834761e-02 -9.486557323651432e-02 + -9.465603552759584e-02 -9.444678443640674e-02 -9.423781963774079e-02 -9.402914080637620e-02 -9.382074761707584e-02 + -9.361263974459134e-02 -9.340481686366436e-02 -9.319727864902985e-02 -9.299002477541853e-02 -9.278305491755856e-02 + -9.257636875017922e-02 -9.236996594801218e-02 -9.216384618579432e-02 -9.195800913827107e-02 -9.175245448019674e-02 + -9.154718188633910e-02 -9.134219103148082e-02 -9.113748159042141e-02 -9.093305323798015e-02 -9.072890564899867e-02 + -9.052503849834266e-02 -9.032145146090452e-02 -9.011814421160608e-02 -8.991511642539991e-02 -8.971236777727276e-02 + -8.950989794224710e-02 -8.930770659538365e-02 -8.910579341178385e-02 -8.890415806659205e-02 -8.870280023499666e-02 + -8.850171959223517e-02 -8.830091581359277e-02 -8.810038857440815e-02 -8.790013755007317e-02 -8.770016241603540e-02 + -8.750046284780240e-02 -8.730103852094080e-02 -8.710188911108085e-02 -8.690301429391804e-02 -8.670441374521456e-02 + -8.650608714080221e-02 -8.630803415658442e-02 -8.611025446853803e-02 -8.591274775271590e-02 -8.571551368524873e-02 + -8.551855194234738e-02 -8.532186220030495e-02 -8.512544413549852e-02 -8.492929742439195e-02 -8.473342174353733e-02 + -8.453781676957732e-02 -8.434248217924739e-02 -8.414741764937748e-02 -8.395262285689459e-02 -8.375809747882426e-02 + -8.356384119229299e-02 -8.336985367453020e-02 -8.317613460287014e-02 -8.298268365475410e-02 -8.278950050773234e-02 + -8.259658483946590e-02 -8.240393632772910e-02 -8.221155465041115e-02 -8.201943948551735e-02 -8.182759051117357e-02 + -8.163600740562495e-02 -8.144468984724014e-02 -8.125363751451327e-02 -8.106285008606355e-02 -8.087232724064090e-02 + -8.068206865712409e-02 -8.049207401452541e-02 -8.030234299199146e-02 -8.011287526880512e-02 -7.992367052438763e-02 + -7.973472843830046e-02 -7.954604869024703e-02 -7.935763096007500e-02 -7.916947492777775e-02 -7.898158027349619e-02 + -7.879394667752138e-02 -7.860657382029515e-02 -7.841946138241353e-02 -7.823260904462691e-02 -7.804601648784307e-02 + -7.785968339312893e-02 -7.767360944171170e-02 -7.748779431498121e-02 -7.730223769449183e-02 -7.711693926196400e-02 + -7.693189869928606e-02 -7.674711568851642e-02 -7.656258991188467e-02 -7.637832105179426e-02 -7.619430879082359e-02 + -7.601055281172753e-02 -7.582705279744090e-02 -7.564380843107761e-02 -7.546081939593530e-02 -7.527808537549445e-02 + -7.509560605342164e-02 -7.491338111357190e-02 -7.473141023998829e-02 -7.454969311690561e-02 -7.436822942875146e-02 + -7.418701886014781e-02 -7.400606109591290e-02 -7.382535582106312e-02 -7.364490272081420e-02 -7.346470148058371e-02 + -7.328475178599214e-02 -7.310505332286485e-02 -7.292560577723380e-02 -7.274640883533894e-02 -7.256746218363058e-02 + -7.238876550877037e-02 -7.221031849763318e-02 -7.203212083730927e-02 -7.185417221510518e-02 -7.167647231854611e-02 + -7.149902083537708e-02 -7.132181745356483e-02 -7.114486186129959e-02 -7.096815374699660e-02 -7.079169279929715e-02 + -7.061547870707195e-02 -7.043951115942092e-02 -7.026378984567593e-02 -7.008831445540203e-02 -6.991308467839864e-02 + -6.973810020470302e-02 -6.956336072458917e-02 -6.938886592857167e-02 -6.921461550740687e-02 -6.904060915209301e-02 + -6.886684655387453e-02 -6.869332740424071e-02 -6.852005139492971e-02 -6.834701821792888e-02 -6.817422756547681e-02 + -6.800167913006469e-02 -6.782937260443844e-02 -6.765730768159947e-02 -6.748548405480710e-02 -6.731390141757970e-02 + -6.714255946369635e-02 -6.697145788719877e-02 -6.680059638239219e-02 -6.662997464384778e-02 -6.645959236640377e-02 + -6.628944924516680e-02 -6.611954497551432e-02 -6.594987925309541e-02 -6.578045177383249e-02 -6.561126223392347e-02 + -6.544231032984232e-02 -6.527359575834187e-02 -6.510511821645427e-02 -6.493687740149323e-02 -6.476887301105551e-02 + -6.460110474302228e-02 -6.443357229556029e-02 -6.426627536712527e-02 -6.409921365646068e-02 -6.393238686260214e-02 + -6.376579468487653e-02 -6.359943682290510e-02 -6.343331297660525e-02 -6.326742284619029e-02 -6.310176613217290e-02 + -6.293634253536604e-02 -6.277115175688401e-02 -6.260619349814485e-02 -6.244146746087131e-02 -6.227697334709256e-02 + -6.211271085914612e-02 -6.194867969967865e-02 -6.178487957164851e-02 -6.162131017832639e-02 -6.145797122329738e-02 + -6.129486241046261e-02 -6.113198344404047e-02 -6.096933402856833e-02 -6.080691386890433e-02 -6.064472267022855e-02 + -6.048276013804487e-02 -6.032102597818248e-02 -6.015951989679733e-02 -5.999824160037390e-02 -5.983719079572667e-02 + -5.967636719000121e-02 -5.951577049067714e-02 -5.935540040556803e-02 -5.919525664282421e-02 -5.903533891093370e-02 + -5.887564691872354e-02 -5.871618037536289e-02 -5.855693899036241e-02 -5.839792247357751e-02 -5.823913053520943e-02 + -5.808056288580656e-02 -5.792221923626675e-02 -5.776409929783770e-02 -5.760620278211965e-02 -5.744852940106681e-02 + -5.729107886698840e-02 -5.713385089255062e-02 -5.697684519077859e-02 -5.682006147505722e-02 -5.666349945913349e-02 + -5.650715885711753e-02 -5.635103938348464e-02 -5.619514075307676e-02 -5.603946268110403e-02 -5.588400488314652e-02 + -5.572876707515578e-02 -5.557374897345647e-02 -5.541895029474816e-02 -5.526437075610667e-02 -5.511001007498591e-02 + -5.495586796921968e-02 -5.480194415702282e-02 -5.464823835699349e-02 -5.449475028811439e-02 -5.434147966975414e-02 + -5.418842622167024e-02 -5.403558966400920e-02 -5.388296971730867e-02 -5.373056610250022e-02 -5.357837854090890e-02 + -5.342640675425744e-02 -5.327465046466552e-02 -5.312310939465317e-02 -5.297178326714188e-02 -5.282067180545613e-02 + -5.266977473332533e-02 -5.251909177488574e-02 -5.236862265468156e-02 -5.221836709766746e-02 -5.206832482920958e-02 + -5.191849557508763e-02 -5.176887906149681e-02 -5.161947501504924e-02 -5.147028316277562e-02 -5.132130323212749e-02 + -5.117253495097853e-02 -5.102397804762664e-02 -5.087563225079554e-02 -5.072749728963640e-02 -5.057957289373026e-02 + -5.043185879308894e-02 -5.028435471815778e-02 -5.013706039981668e-02 -4.998997556938225e-02 -4.984309995860983e-02 + -4.969643329969506e-02 -4.954997532527535e-02 -4.940372576843306e-02 -4.925768436269536e-02 -4.911185084203830e-02 + -4.896622494088697e-02 -4.882080639411765e-02 -4.867559493706110e-02 -4.853059030550239e-02 -4.838579223568414e-02 + -4.824120046430847e-02 -4.809681472853804e-02 -4.795263476599886e-02 -4.780866031478179e-02 -4.766489111344439e-02 + -4.752132690101333e-02 -4.737796741698598e-02 -4.723481240133236e-02 -4.709186159449758e-02 -4.694911473740318e-02 + -4.680657157144977e-02 -4.666423183851851e-02 -4.652209528097345e-02 -4.638016164166363e-02 -4.623843066392466e-02 + -4.609690209158148e-02 -4.595557566894978e-02 -4.581445114083834e-02 -4.567352825255137e-02 -4.553280674989000e-02 + -4.539228637915495e-02 -4.525196688714849e-02 -4.511184802117626e-02 -4.497192952905004e-02 -4.483221115908929e-02 + -4.469269266012334e-02 -4.455337378149452e-02 -4.441425427305880e-02 -4.427533388518908e-02 -4.413661236877770e-02 + -4.399808947523695e-02 -4.385976495650377e-02 -4.372163856503956e-02 -4.358371005383412e-02 -4.344597917640734e-02 + -4.330844568681144e-02 -4.317110933963330e-02 -4.303396988999707e-02 -4.289702709356590e-02 -4.276028070654499e-02 + -4.262373048568340e-02 -4.248737618827656e-02 -4.235121757216900e-02 -4.221525439575612e-02 -4.207948641798718e-02 + -4.194391339836749e-02 -4.180853509696072e-02 -4.167335127439166e-02 -4.153836169184843e-02 -4.140356611108501e-02 + -4.126896429442399e-02 -4.113455600475870e-02 -4.100034100555621e-02 -4.086631906085937e-02 -4.073248993528966e-02 + -4.059885339404996e-02 -4.046540920292682e-02 -4.033215712829277e-02 -4.019909693711025e-02 -4.006622839693247e-02 + -3.993355127590775e-02 -3.980106534278111e-02 -3.966877036689691e-02 -3.953666611820295e-02 -3.940475236725126e-02 + -3.927302888520231e-02 -3.914149544382729e-02 -3.901015181551078e-02 -3.887899777325385e-02 -3.874803309067659e-02 + -3.861725754202115e-02 -3.848667090215465e-02 -3.835627294657192e-02 -3.822606345139837e-02 -3.809604219339326e-02 + -3.796620894995215e-02 -3.783656349911038e-02 -3.770710561954563e-02 -3.757783509058106e-02 -3.744875169218861e-02 + -3.731985520499156e-02 -3.719114541026812e-02 -3.706262208995407e-02 -3.693428502664607e-02 -3.680613400360501e-02 + -3.667816880475874e-02 -3.655038921470551e-02 -3.642279501871729e-02 -3.629538600274256e-02 -3.616816195341019e-02 + -3.604112265803210e-02 -3.591426790460662e-02 -3.578759748182270e-02 -3.566111117906178e-02 -3.553480878640223e-02 + -3.540869009462283e-02 -3.528275489520500e-02 -3.515700298033788e-02 -3.503143414292030e-02 -3.490604817656512e-02 + -3.478084487560273e-02 -3.465582403508421e-02 -3.453098545078508e-02 -3.440632891920906e-02 -3.428185423759133e-02 + -3.415756120390259e-02 -3.403344961685233e-02 -3.390951927589271e-02 -3.378576998122253e-02 -3.366220153379052e-02 + -3.353881373529932e-02 -3.341560638820955e-02 -3.329257929574313e-02 -3.316973226188768e-02 -3.304706509140001e-02 + -3.292457758981015e-02 -3.280226956342555e-02 -3.268014081933460e-02 -3.255819116541119e-02 -3.243642041031825e-02 + -3.231482836351200e-02 -3.219341483524633e-02 -3.207217963657656e-02 -3.195112257936341e-02 -3.183024347627830e-02 + -3.170954214080586e-02 -3.158901838725005e-02 -3.146867203073680e-02 -3.134850288721926e-02 -3.122851077348239e-02 + -3.110869550714630e-02 -3.098905690667157e-02 -3.086959479136355e-02 -3.075030898137644e-02 -3.063119929771844e-02 + -3.051226556225569e-02 -3.039350759771719e-02 -3.027492522769960e-02 -3.015651827667144e-02 -3.003828656997806e-02 + -2.992022993384653e-02 -2.980234819539000e-02 -2.968464118261300e-02 -2.956710872441579e-02 -2.944975065059949e-02 + -2.933256679187121e-02 -2.921555697984856e-02 -2.909872104706485e-02 -2.898205882697435e-02 -2.886557015395689e-02 + -2.874925486332348e-02 -2.863311279132110e-02 -2.851714377513768e-02 -2.840134765290829e-02 -2.828572426371925e-02 + -2.817027344761419e-02 -2.805499504559913e-02 -2.793988889964762e-02 -2.782495485270706e-02 -2.771019274870294e-02 + -2.759560243254532e-02 -2.748118375013410e-02 -2.736693654836429e-02 -2.725286067513244e-02 -2.713895597934131e-02 + -2.702522231090628e-02 -2.691165952076120e-02 -2.679826746086374e-02 -2.668504598420148e-02 -2.657199494479807e-02 + -2.645911419771867e-02 -2.634640359907651e-02 -2.623386300603842e-02 -2.612149227683125e-02 -2.600929127074803e-02 + -2.589725984815394e-02 -2.578539787049261e-02 -2.567370520029266e-02 -2.556218170117359e-02 -2.545082723785264e-02 + -2.533964167615078e-02 -2.522862488299943e-02 -2.511777672644707e-02 -2.500709707566550e-02 -2.489658580095689e-02 + -2.478624277376009e-02 -2.467606786665730e-02 -2.456606095338160e-02 -2.445622190882286e-02 -2.434655060903484e-02 + -2.423704693124290e-02 -2.412771075384968e-02 -2.401854195644356e-02 -2.390954041980448e-02 -2.380070602591181e-02 + -2.369203865795182e-02 -2.358353820032401e-02 -2.347520453864915e-02 -2.336703755977662e-02 -2.325903715179145e-02 + -2.315120320402223e-02 -2.304353560704835e-02 -2.293603425270768e-02 -2.282869903410443e-02 -2.272152984561651e-02 + -2.261452658290355e-02 -2.250768914291477e-02 -2.240101742389659e-02 -2.229451132540097e-02 -2.218817074829306e-02 + -2.208199559475941e-02 -2.197598576831630e-02 -2.187014117381756e-02 -2.176446171746304e-02 -2.165894730680704e-02 + -2.155359785076634e-02 -2.144841325962906e-02 -2.134339344506284e-02 -2.123853832012328e-02 -2.113384779926332e-02 + -2.102932179834098e-02 -2.092496023462881e-02 -2.082076302682234e-02 -2.071673009504891e-02 -2.061286136087732e-02 + -2.050915674732579e-02 -2.040561617887180e-02 -2.030223958146114e-02 -2.019902688251676e-02 -2.009597801094874e-02 + -1.999309289716272e-02 -1.989037147307007e-02 -1.978781367209724e-02 -1.968541942919503e-02 -1.958318868084845e-02 + -1.948112136508650e-02 -1.937921742149162e-02 -1.927747679120996e-02 -1.917589941696089e-02 -1.907448524304713e-02 + -1.897323421536502e-02 -1.887214628141428e-02 -1.877122139030839e-02 -1.867045949278500e-02 -1.856986054121593e-02 + -1.846942448961797e-02 -1.836915129366308e-02 -1.826904091068901e-02 -1.816909329971016e-02 -1.806930842142803e-02 + -1.796968623824190e-02 -1.787022671426039e-02 -1.777092981531131e-02 -1.767179550895386e-02 -1.757282376448880e-02 + -1.747401455296980e-02 -1.737536784721538e-02 -1.727688362181908e-02 -1.717856185316207e-02 -1.708040251942355e-02 + -1.698240560059297e-02 -1.688457107848166e-02 -1.678689893673415e-02 -1.668938916084023e-02 -1.659204173814691e-02 + -1.649485665787010e-02 -1.639783391110693e-02 -1.630097349084761e-02 -1.620427539198769e-02 -1.610773961134063e-02 + -1.601136614764962e-02 -1.591515500160041e-02 -1.581910617583384e-02 -1.572321967495808e-02 -1.562749550556182e-02 + -1.553193367622655e-02 -1.543653419753962e-02 -1.534129708210738e-02 -1.524622234456776e-02 -1.515131000160358e-02 + -1.505656007195594e-02 -1.496197257643698e-02 -1.486754753794375e-02 -1.477328498147130e-02 -1.467918493412604e-02 + -1.458524742514012e-02 -1.449147248588392e-02 -1.439786014988101e-02 -1.430441045282114e-02 -1.421112343257432e-02 + -1.411799912920542e-02 -1.402503758498742e-02 -1.393223884441606e-02 -1.383960295422426e-02 -1.374712996339592e-02 + -1.365481992318098e-02 -1.356267288710944e-02 -1.347068891100612e-02 -1.337886805300558e-02 -1.328721037356649e-02 + -1.319571593548674e-02 -1.310438480391837e-02 -1.301321704638244e-02 -1.292221273278438e-02 -1.283137193542886e-02 + -1.274069472903526e-02 -1.265018119075315e-02 -1.255983140017740e-02 -1.246964543936386e-02 -1.237962339284519e-02 + -1.228976534764605e-02 -1.220007139329937e-02 -1.211054162186186e-02 -1.202117612793000e-02 -1.193197500865632e-02 + -1.184293836376514e-02 -1.175406629556871e-02 -1.166535890898409e-02 -1.157681631154850e-02 -1.148843861343677e-02 + -1.140022592747694e-02 -1.131217836916727e-02 -1.122429605669314e-02 -1.113657911094299e-02 -1.104902765552609e-02 + -1.096164181678851e-02 -1.087442172383067e-02 -1.078736750852424e-02 -1.070047930552907e-02 -1.061375725231052e-02 + -1.052720148915676e-02 -1.044081215919585e-02 -1.035458940841347e-02 -1.026853338567008e-02 -1.018264424271852e-02 + -1.009692213422185e-02 -1.001136721777072e-02 -9.925979653901159e-03 -9.840759606112626e-03 -9.755707240885522e-03 + -9.670822727699450e-03 -9.586106239050924e-03 -9.501557950471560e-03 -9.417178040546344e-03 -9.332966690931560e-03 + -9.248924086372937e-03 -9.165050414724527e-03 -9.081345866966314e-03 -8.997810637223158e-03 -8.914444922782970e-03 + -8.831248924115170e-03 -8.748222844889714e-03 -8.665366891995012e-03 -8.582681275557029e-03 -8.500166208958122e-03 + -8.417821908855101e-03 -8.335648595198940e-03 -8.253646491252729e-03 -8.171815823611048e-03 -8.090156822218860e-03 + -8.008669720390157e-03 -7.927354754827256e-03 -7.846212165639513e-03 -7.765242196362458e-03 -7.684445093977035e-03 + -7.603821108928328e-03 -7.523370495144868e-03 -7.443093510057851e-03 -7.362990414619966e-03 -7.283061473324916e-03 + -7.203306954226238e-03 -7.123727128956636e-03 -7.044322272747305e-03 -6.965092664446849e-03 -6.886038586540548e-03 + -6.807160325169744e-03 -6.728458170150698e-03 -6.649932414994114e-03 -6.571583356923983e-03 -6.493411296896896e-03 + -6.415416539621302e-03 -6.337599393576400e-03 -6.259960171031202e-03 -6.182499188064097e-03 -6.105216764581120e-03 + -6.028113224335783e-03 -5.951188894947315e-03 -5.874444107920001e-03 -5.797879198662241e-03 -5.721494506504752e-03 + -5.645290374720152e-03 -5.569267150541013e-03 -5.493425185178914e-03 -5.417764833843053e-03 -5.342286455758625e-03 + -5.266990414185321e-03 -5.191877076435930e-03 -5.116946813894334e-03 -5.042200002034095e-03 -4.967637020436223e-03 + -4.893258252807416e-03 -4.819064086998137e-03 -4.745054915020129e-03 -4.671231133064316e-03 -4.597593141518521e-03 + -4.524141344984670e-03 -4.450876152296473e-03 -4.377797976536381e-03 -4.304907235052755e-03 -4.232204349477008e-03 + -4.159689745740107e-03 -4.087363854089246e-03 -4.015227109104714e-03 -3.943279949715627e-03 -3.871522819216546e-03 + -3.799956165283142e-03 -3.728580439987945e-03 -3.657396099816350e-03 -3.586403605681349e-03 -3.515603422939109e-03 + -3.444996021403955e-03 -3.374581875362747e-03 -3.304361463589896e-03 -3.234335269361021e-03 -3.164503780467372e-03 + -3.094867489229636e-03 -3.025426892511071e-03 -2.956182491731163e-03 -2.887134792878260e-03 -2.818284306522359e-03 + -2.749631547827641e-03 -2.681177036564269e-03 -2.612921297120292e-03 -2.544864858513237e-03 -2.477008254400915e-03 + -2.409352023092537e-03 -2.341896707558912e-03 -2.274642855442539e-03 -2.207591019067590e-03 -2.140741755448887e-03 + -2.074095626301048e-03 -2.007653198047128e-03 -1.941415041826543e-03 -1.875381733503055e-03 -1.809553853671891e-03 + -1.743931987666610e-03 -1.678516725565853e-03 -1.613308662198919e-03 -1.548308397151321e-03 -1.483516534770199e-03 + -1.418933684168201e-03 -1.354560459228225e-03 -1.290397478606248e-03 -1.226445365734724e-03 -1.162704748824981e-03 + -1.099176260868878e-03 -1.035860539640533e-03 -9.727582276965400e-04 -9.098699723765095e-04 -8.471964258025965e-04 + -7.847382448782223e-04 -7.224960912864980e-04 -6.604706314880008e-04 -5.986625367175086e-04 -5.370724829806470e-04 + -4.757011510492407e-04 -4.145492264564160e-04 -3.536173994909142e-04 -2.929063651903851e-04 -2.324168233342844e-04 + -1.721494784359630e-04 -1.121050397336399e-04 -5.228422118118529e-05 7.312258562537011e-06 6.668367614472029e-05 + 1.258293035304972e-04 1.847484080160393e-04 2.434402522422229e-04 3.019040942089412e-04 3.601391872911717e-04 + 4.181447802547929e-04 4.759201172743947e-04 5.334644379514759e-04 5.907769773334388e-04 6.478569659342782e-04 + 7.047036297555762e-04 7.613161903087368e-04 8.176938646385349e-04 8.738358653471887e-04 9.297414006200733e-04 + 9.854096742521116e-04 1.040839885675338e-03 1.096031229987883e-03 1.150982897983637e-03 1.205694076183533e-03 + 1.260163946867738e-03 1.314391688108996e-03 1.368376473807523e-03 1.422117473726844e-03 1.475613853530856e-03 + 1.528864774822529e-03 1.581869395183454e-03 1.634626868215116e-03 1.687136343581233e-03 1.739396967051454e-03 + 1.791407880546731e-03 1.843168222185764e-03 1.894677126332894e-03 1.945933723647804e-03 1.996937141136074e-03 + 2.047686502201836e-03 2.098180926701572e-03 2.148419530999293e-03 2.198401428023835e-03 2.248125727327171e-03 + 2.297591535144351e-03 2.346797954455627e-03 2.395744085049238e-03 2.444429023586900e-03 2.492851863670104e-03 + 2.541011695908512e-03 2.588907607990088e-03 2.636538684752841e-03 2.683904008258234e-03 2.731002657866706e-03 + 2.777833710314490e-03 2.824396239792773e-03 2.870689318028338e-03 2.916712014366061e-03 2.962463395853612e-03 + 3.007942527327589e-03 3.053148471502013e-03 3.098080289058467e-03 3.142737038738218e-03 3.187117777436551e-03 + 3.231221560298816e-03 3.275047440818590e-03 3.318594470938026e-03 3.361861701149986e-03 3.404848180602511e-03 + 3.447552957205244e-03 3.489975077737895e-03 3.532113587961082e-03 3.573967532729171e-03 3.615535956105055e-03 + 3.656817901477772e-03 3.697812411681450e-03 3.738518529117300e-03 3.778935295877380e-03 3.819061753870491e-03 + 3.858896944950944e-03 3.898439911048962e-03 3.937689694303696e-03 3.976645337198643e-03 4.015305882699081e-03 + 4.053670374392235e-03 4.091737856629464e-03 4.129507374670966e-03 4.166977974832951e-03 4.204148704636970e-03 + 4.241018612961951e-03 4.277586750198417e-03 4.313852168405170e-03 4.349813921468553e-03 4.385471065264042e-03 + 4.420822657820209e-03 4.455867759485419e-03 4.490605433096665e-03 4.525034744151175e-03 4.559154760980325e-03 + 4.592964554926026e-03 4.626463200519748e-03 4.659649775663930e-03 4.692523361815823e-03 4.725083044174078e-03 + 4.757327911867453e-03 4.789257058146435e-03 4.820869580577110e-03 4.852164581237406e-03 4.883141166916277e-03 + 4.913798449314911e-03 4.944135545250574e-03 4.974151576863181e-03 5.003845671823821e-03 5.033216963546343e-03 + 5.062264591400896e-03 5.090987700930113e-03 5.119385444067834e-03 5.147456979360052e-03 5.175201472188294e-03 + 5.202618094995565e-03 5.229706027514399e-03 5.256464456997498e-03 5.282892578450547e-03 5.308989594867383e-03 + 5.334754717467548e-03 5.360187165935911e-03 5.385286168664767e-03 5.410050962997998e-03 5.434480795477384e-03 + 5.458574922091267e-03 5.482332608525188e-03 5.505753130414606e-03 5.528835773599793e-03 5.551579834382676e-03 + 5.573984619785690e-03 5.596049447812612e-03 5.617773647711185e-03 5.639156560237815e-03 5.660197537923954e-03 + 5.680895945344178e-03 5.701251159386312e-03 5.721262569522823e-03 5.740929578084275e-03 5.760251600534003e-03 + 5.779228065744467e-03 5.797858416275215e-03 5.816142108651984e-03 5.834078613647327e-03 5.851667416562558e-03 + 5.868908017510778e-03 5.885799931701252e-03 5.902342689724711e-03 5.918535837839785e-03 5.934378938260394e-03 + 5.949871569443969e-03 5.965013326380511e-03 5.979803820882426e-03 5.994242681874894e-03 6.008329555686982e-03 + 6.022064106343124e-03 6.035446015855033e-03 6.048474984513949e-03 6.061150731183149e-03 6.073472993590540e-03 + 6.085441528621329e-03 6.097056112610684e-03 6.108316541636205e-03 6.119222631810211e-03 6.129774219571577e-03 + 6.139971161977335e-03 6.149813336993524e-03 6.159300643785511e-03 6.168433003007593e-03 6.177210357091542e-03 + 6.185632670534472e-03 6.193699930185336e-03 6.201412145530417e-03 6.208769348977418e-03 6.215771596138094e-03 + 6.222418966109484e-03 6.228711561753234e-03 6.234649509973336e-03 6.240232961991823e-03 6.245462093622483e-03 + 6.250337105542366e-03 6.254858223560998e-03 6.259025698887188e-03 6.262839808393247e-03 6.266300854876523e-03 + 6.269409167318096e-03 6.272165101138567e-03 6.274569038450663e-03 6.276621388308685e-03 6.278322586954520e-03 + 6.279673098060217e-03 6.280673412966835e-03 6.281324050919529e-03 6.281625559298736e-03 6.281578513847229e-03 + 6.281183518893000e-03 6.280441207567743e-03 6.279352242020880e-03 6.277917313628864e-03 6.276137143199786e-03 + 6.274012481172964e-03 6.271544107813464e-03 6.268732833401463e-03 6.265579498416101e-03 6.262084973713996e-03 + 6.258250160701909e-03 6.254075991503755e-03 6.249563429121589e-03 6.244713467590510e-03 6.239527132127365e-03 + 6.234005479272982e-03 6.228149597028035e-03 6.221960604982105e-03 6.215439654436012e-03 6.208587928517263e-03 + 6.201406642288269e-03 6.193897042847537e-03 6.186060409423412e-03 6.177898053460347e-03 6.169411318697623e-03 + 6.160601581240277e-03 6.151470249622179e-03 6.142018764861197e-03 6.132248600506080e-03 6.122161262675341e-03 + 6.111758290087551e-03 6.101041254083344e-03 6.090011758638783e-03 6.078671440369980e-03 6.067021968529001e-03 + 6.055065044990821e-03 6.042802404231264e-03 6.030235813295874e-03 6.017367071759540e-03 6.004198011676843e-03 + 5.990730497523066e-03 5.976966426125610e-03 5.962907726585963e-03 5.948556360192070e-03 5.933914320320834e-03 + 5.918983632331027e-03 5.903766353446232e-03 5.888264572627926e-03 5.872480410438644e-03 5.856416018895028e-03 + 5.840073581310876e-03 5.823455312130147e-03 5.806563456749623e-03 5.789400291331647e-03 5.771968122606398e-03 + 5.754269287664086e-03 5.736306153736910e-03 5.718081117970546e-03 5.699596607185591e-03 5.680855077628598e-03 + 5.661859014712783e-03 5.642610932748597e-03 5.623113374663840e-03 5.603368911713689e-03 5.583380143180451e-03 + 5.563149696062998e-03 5.542680224756250e-03 5.521974410720293e-03 5.501034962139584e-03 5.479864613572119e-03 + 5.458466125588458e-03 5.436842284401028e-03 5.414995901483513e-03 5.392929813180388e-03 5.370646880306936e-03 + 5.348149987739460e-03 5.325442043996103e-03 5.302525980808295e-03 5.279404752682704e-03 5.256081336454115e-03 + 5.232558730829293e-03 5.208839955921597e-03 5.184928052777090e-03 5.160826082891643e-03 5.136537127719627e-03 + 5.112064288174192e-03 5.087410684119092e-03 5.062579453852527e-03 5.037573753583049e-03 5.012396756897426e-03 + 4.987051654221181e-03 4.961541652271382e-03 4.935869973502331e-03 4.910039855544162e-03 4.884054550634324e-03 + 4.857917325042674e-03 4.831631458489727e-03 4.805200243558812e-03 4.778626985102139e-03 4.751914999640778e-03 + 4.725067614759165e-03 4.698088168494137e-03 4.670980008718599e-03 4.643746492520417e-03 4.616390985576316e-03 + 4.588916861521444e-03 4.561327501314625e-03 4.533626292599419e-03 4.505816629061563e-03 4.477901909782873e-03 + 4.449885538591616e-03 4.421770923410249e-03 4.393561475599933e-03 4.365260609302857e-03 4.336871740782245e-03 + 4.308398287760196e-03 4.279843668753976e-03 4.251211302410877e-03 4.222504606841648e-03 4.193726998953342e-03 + 4.164881893781172e-03 4.135972703820228e-03 4.107002838357087e-03 4.077975702801365e-03 4.048894698017951e-03 + 4.019763219659929e-03 3.990584657502267e-03 3.961362394777132e-03 3.932099807510353e-03 3.902800263859975e-03 + 3.873467123456830e-03 3.844103736747289e-03 3.814713444338926e-03 3.785299576348754e-03 3.755865451754834e-03 + 3.726414377751284e-03 3.696949649106788e-03 3.667474547527225e-03 3.637992341022506e-03 3.608506283277637e-03 + 3.579019613028819e-03 3.549535553444169e-03 3.520057311509854e-03 3.490588077421712e-03 3.461131023982289e-03 + 3.431689306004067e-03 3.402266059718800e-03 3.372864402193044e-03 3.343487430750612e-03 3.314138222401533e-03 + 3.284819833278287e-03 3.255535298079296e-03 3.226287629519699e-03 3.197079817789972e-03 3.167914830022467e-03 + 3.138795609765740e-03 3.109725076467529e-03 3.080706124965778e-03 3.051741624988552e-03 3.022834420662728e-03 + 2.993987330031421e-03 2.965203144580787e-03 2.936484628776042e-03 2.907834519606748e-03 2.879255526141974e-03 + 2.850750329094847e-03 2.822321580397184e-03 2.793971902784097e-03 2.765703889388480e-03 2.737520103346034e-03 + 2.709423077410307e-03 2.681415313578364e-03 2.653499282727002e-03 2.625677424259379e-03 2.597952145762542e-03 + 2.570325822675754e-03 2.542800797969441e-03 2.515379381835416e-03 2.488063851387724e-03 2.460856450374792e-03 + 2.433759388902625e-03 2.406774843168965e-03 2.379904955208794e-03 2.353151832651051e-03 2.326517548486333e-03 + 2.300004140846178e-03 2.273613612793262e-03 2.247347932123073e-03 2.221209031176842e-03 2.195198806665528e-03 + 2.169319119505244e-03 2.143571794663890e-03 2.117958621018790e-03 2.092481351225809e-03 2.067141701599282e-03 + 2.041941352003283e-03 2.016881945753895e-03 1.991965089532339e-03 1.967192353309303e-03 1.942565270279887e-03 + 1.918085336809581e-03 1.893754012390954e-03 1.869572719610900e-03 1.845542844128613e-03 1.821665734664115e-03 + 1.797942702996993e-03 1.774375023975780e-03 1.750963935537270e-03 1.727710638736181e-03 1.704616297784842e-03 + 1.681682040102634e-03 1.658908956375422e-03 1.636298100624674e-03 1.613850490285986e-03 1.591567106297326e-03 + 1.569448893196340e-03 1.547496759227043e-03 1.525711576455575e-03 1.504094180894730e-03 1.482645372637442e-03 + 1.461365915998935e-03 1.440256539667195e-03 1.419317936862095e-03 1.398550765502459e-03 1.377955648381393e-03 + 1.357533173349522e-03 1.337283893505855e-03 1.317208327396403e-03 1.297306959220269e-03 1.277580239042869e-03 + 1.258028583016533e-03 1.238652373607859e-03 1.219451959832033e-03 1.200427657493816e-03 1.181579749434877e-03 + 1.162908485787667e-03 1.144414084235259e-03 1.126096730277324e-03 1.107956577501947e-03 1.089993747862990e-03 + 1.072208331963084e-03 1.054600389341971e-03 1.037169948769867e-03 1.019917008546065e-03 1.002841536802149e-03 + 9.859434718100526e-04 9.692227222946143e-04 9.526791677503715e-04 9.363126587626644e-04 9.201230173327627e-04 + 9.041100372067323e-04 8.882734842081940e-04 8.726130965744384e-04 8.571285852960571e-04 8.418196344598013e-04 + 8.266859015943920e-04 8.117270180193747e-04 7.969425891967278e-04 7.823321950849648e-04 7.678953904958790e-04 + 7.536317054534213e-04 7.395406455548635e-04 7.256216923339795e-04 7.118743036259867e-04 6.982979139343934e-04 + 6.848919347992675e-04 6.716557551670789e-04 6.585887417618500e-04 6.456902394574002e-04 6.329595716507376e-04 + 6.203960406363686e-04 6.079989279813001e-04 5.957674949008586e-04 5.837009826349057e-04 5.717986128245709e-04 + 5.600595878892871e-04 5.484830914039218e-04 5.370682884760683e-04 5.258143261232883e-04 5.147203336501132e-04 + 5.037854230249154e-04 4.930086892562821e-04 4.823892107690053e-04 4.719260497795006e-04 4.616182526704748e-04 + 4.514648503649116e-04 4.414648586991889e-04 4.316172787951653e-04 4.219210974313495e-04 4.123752874128185e-04 + 4.029788079400074e-04 3.937306049762028e-04 3.846296116135940e-04 3.756747484379464e-04 3.668649238917453e-04 + 3.581990346356721e-04 3.496759659085209e-04 3.412945918852737e-04 3.330537760334478e-04 3.249523714675749e-04 + 3.169892213016947e-04 3.091631589999605e-04 3.014730087251123e-04 2.939175856849205e-04 2.864956964764824e-04 + 2.792061394282732e-04 2.720477049400076e-04 2.650191758202157e-04 2.581193276214311e-04 2.513469289730929e-04 + 2.447007419119545e-04 2.381795222101023e-04 2.317820197004901e-04 2.255069785999124e-04 2.193531378294815e-04 + 2.133192313325263e-04 2.074039883898426e-04 2.016061339323889e-04 1.959243888512612e-04 1.903574703050431e-04 + 1.849040920244638e-04 1.795629646143069e-04 1.743327958526344e-04 1.692122909872684e-04 1.642001530294800e-04 + 1.592950830449735e-04 1.544957804420376e-04 1.498009432569547e-04 1.452092684366188e-04 1.407194521183276e-04 + 1.363301899068101e-04 1.320401771484540e-04 1.278481092026973e-04 1.237526817106717e-04 1.197525908609973e-04 + 1.158465336528160e-04 1.120332081560328e-04 1.083113137687417e-04 1.046795514719200e-04 1.011366240813059e-04 + 9.768123649654712e-05 9.431209594759674e-05 9.102791223834493e-05 8.782739798754946e-05 8.470926886705128e-05 + 8.167224383726544e-05 7.871504538002631e-05 7.583639972872691e-05 7.303503709583344e-05 7.030969189776491e-05 + 6.765910297713939e-05 6.508201382244567e-05 6.257717278513996e-05 6.014333329416893e-05 5.777925406799124e-05 + 5.548369932406064e-05 5.325543898584204e-05 5.109324888736495e-05 4.899591097532181e-05 4.696221350876977e-05 + 4.499095125644300e-05 4.308092569168689e-05 4.123094518507985e-05 3.943982519472248e-05 3.770638845426000e-05 + 3.602946515864968e-05 3.440789314768766e-05 3.284051808735814e-05 3.132619364899296e-05 2.986378168630368e-05 + 2.845215241030175e-05 2.709018456212618e-05 2.577676558382972e-05 2.451079178714253e-05 2.329116852023303e-05 + 2.211681033252280e-05 2.098664113755493e-05 1.989959437397193e-05 1.885461316462301e-05 1.785065047382453e-05 + 1.688666926282032e-05 1.596164264346408e-05 1.507455403014788e-05 1.422439729002680e-05 1.341017689154798e-05 + 1.263090805133382e-05 1.188561687944210e-05 1.117334052302906e-05 1.049312730845735e-05 9.844036881873609e-06 + 9.225140348281083e-06 8.635520409151336e-06 8.074271498589526e-06 7.540499918096467e-06 7.033323969951824e-06 + 6.551874089244981e-06 6.095292974591078e-06 5.662735717557114e-06 5.253369930824445e-06 4.866375875125262e-06 + 4.500946584971578e-06 4.156287993213561e-06 3.831619054451844e-06 3.526171867329301e-06 3.239191795736605e-06 + 2.969937588951011e-06 2.717681500741784e-06 2.481709407466100e-06 2.261320925180209e-06 2.055829525795500e-06 + 1.864562652302898e-06 1.686861833089476e-06 1.522082795376040e-06 1.369595577795470e-06 1.228784642139583e-06 + 1.099048984296453e-06 9.798022444005176e-07 8.704728162202638e-07 7.705039558045239e-07 6.793538894085495e-07 + 5.964959207232716e-07 5.214185374261972e-07 4.536255170762997e-07 3.926360323718992e-07 3.379847557905782e-07 + 2.892219636309980e-07 2.459136394743678e-07 2.076415770831476e-07 1.740034827551796e-07 1.446130771489680e-07 + 1.191001965971448e-07 9.711089392338240e-08 7.830753877772406e-08 6.236891750520262e-08 4.899033256143233e-08 + 3.788370148843949e-08 2.877765546375461e-08 2.141763743456902e-08 1.556599984873186e-08 1.100210199335999e-08 + 7.522406951322013e-09 4.940578185333285e-09 3.087575758547594e-09 1.811752200079959e-09 9.789480231116246e-10 + 4.725869026137805e-10 1.937705190701948e-10 6.137307387111768e-11 1.213548138731746e-11 7.592420426160233e-13 diff --git a/examples/mc/in.sgcmc.eam b/examples/mc/in.sgcmc.eam new file mode 100644 index 0000000000..c649da8e8f --- /dev/null +++ b/examples/mc/in.sgcmc.eam @@ -0,0 +1,48 @@ +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +create_box 2 box +create_atoms 1 box +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +velocity all create ${double_temp} 428459 dist gaussian + +# what and how to run +fix integrate all npt & + temp ${temperature} ${temperature} 1.7 & + aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} & + randseed 324234 & + variance ${kappa} ${target_concentration} + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press & + lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 diff --git a/examples/mc/log.13Dec22.sgcmc.eam.g++.1 b/examples/mc/log.13Dec22.sgcmc.eam.g++.1 new file mode 100644 index 0000000000..4c242f266a --- /dev/null +++ b/examples/mc/log.13Dec22.sgcmc.eam.g++.1 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) + using 1 OpenMP thread(s) per MPI task +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable temperature_mc equal 700 +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +Lattice spacing in x,y,z = 2.88 2.88 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +region box block 0 20 0 ${size} 0 ${size} +region box block 0 20 0 20 0 ${size} +region box block 0 20 0 20 0 20 +create_box 2 box +Created orthogonal box = (0 0 0) to (57.6 57.6 57.6) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 16000 atoms + using lattice units in orthogonal box = (0 0 0) to (57.6 57.6 57.6) + create_atoms CPU = 0.001 seconds +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +variable double_temp equal 700*2 +velocity all create ${double_temp} 428459 dist gaussian +velocity all create 1400 428459 dist gaussian + +# what and how to run +fix integrate all npt temp ${temperature} ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 700 1.7 aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 0.02 + SGC - Number of MD timesteps: 100 + SGC - Fraction of swap atoms: 0.2 + SGC - Temperature: %f + SGC - Chemical potential of species 2: -0.7 + SGC - Random number seed: 324234 + SGC - Kappa: 1000 + SGC - Target concentration of species 2: 0.02 + SGC - Target concentration of species 1: 0.98 + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 + SGC - Interaction radius: 5.50679 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.50679 + ghost atom cutoff = 7.50679 + binsize = 3.753395, bins = 16 16 16 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/fs, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) fix sgcmc, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 25.06 | 25.06 | 25.06 Mbytes + Step Temp Atoms PotEng Press Lx Ly Lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] + 0 1400 16000 -65889.786 -28854.541 57.6 57.6 57.6 0 0 1 0 + 100 734.32713 16000 -64514.143 5439.4277 57.327173 57.322333 57.318848 12 3188 0.99925 0.00075 + 200 678.63428 16000 -64386.224 -920.7819 57.423954 57.409111 57.412727 22 3178 0.997875 0.002125 + 300 683.24749 16000 -64370.598 -1609.0429 57.427441 57.424568 57.426831 20 3180 0.996625 0.003375 + 400 689.28007 16000 -64359.115 2489.3933 57.376537 57.379856 57.372895 27 3173 0.9949375 0.0050625 + 500 693.85333 16000 -64337.222 -1935.9815 57.435754 57.43493 57.427453 18 3182 0.9938125 0.0061875 + 600 693.52855 16000 -64314.465 380.8264 57.410314 57.397604 57.408337 21 3179 0.9925 0.0075 + 700 690.62721 16000 -64284.369 208.21986 57.412407 57.407285 57.410684 31 3169 0.9905625 0.0094375 + 800 687.08129 16000 -64244.443 -936.31731 57.425765 57.438983 57.421321 31 3169 0.988625 0.011375 + 900 696.07347 16000 -64230.523 932.65537 57.414588 57.413865 57.402817 27 3173 0.9869375 0.0130625 + 1000 691.70667 16000 -64194.151 -690.02055 57.429033 57.420053 57.443245 23 3177 0.9855 0.0145 + 1100 691.21797 16000 -64169.016 -86.623524 57.42147 57.424262 57.436841 35 3165 0.9833125 0.0166875 + 1200 691.27155 16000 -64134.443 411.68129 57.425111 57.432481 57.4118 42 3158 0.9806875 0.0193125 + 1300 693.76194 16000 -64098.615 -943.9013 57.446704 57.448382 57.440727 64 3136 0.9800625 0.0199375 + 1400 691.16411 16000 -64080.423 1248.7921 57.417118 57.409651 57.435099 104 3096 0.9799375 0.0200625 + 1500 694.49681 16000 -64084.428 -179.5269 57.440533 57.432581 57.434409 68 3132 0.9799375 0.0200625 + 1600 697.58329 16000 -64089.682 -761.14401 57.450616 57.450654 57.422293 97 3103 0.98 0.02 + 1700 697.57549 16000 -64090.2 1370.3938 57.399319 57.423969 57.426788 85 3115 0.9801875 0.0198125 + 1800 694.18435 16000 -64083.812 -1381.5398 57.446114 57.438096 57.475109 84 3116 0.9799375 0.0200625 + 1900 702.82577 16000 -64096.005 918.83968 57.452789 57.404638 57.408161 70 3130 0.9799375 0.0200625 + 2000 696.02963 16000 -64080.059 276.99031 57.443085 57.452012 57.403928 81 3119 0.980125 0.019875 +Loop time of 48.793 on 1 procs for 2000 steps with 16000 atoms + +Performance: 8.854 ns/day, 2.711 hours/ns, 40.989 timesteps/s, 655.831 katom-step/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 47.46 | 47.46 | 47.46 | 0.0 | 97.27 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.13269 | 0.13269 | 0.13269 | 0.0 | 0.27 +Output | 0.0011432 | 0.0011432 | 0.0011432 | 0.0 | 0.00 +Modify | 1.0996 | 1.0996 | 1.0996 | 0.0 | 2.25 +Other | | 0.0993 | | | 0.20 + +Nlocal: 16000 ave 16000 max 16000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 17201 ave 17201 max 17201 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.344e+06 ave 1.344e+06 max 1.344e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 2.688e+06 ave 2.688e+06 max 2.688e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2688000 +Ave neighs/atom = 168 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:48 diff --git a/examples/mc/log.13Dec22.sgcmc.eam.g++.4 b/examples/mc/log.13Dec22.sgcmc.eam.g++.4 new file mode 100644 index 0000000000..403a40ebae --- /dev/null +++ b/examples/mc/log.13Dec22.sgcmc.eam.g++.4 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) + using 1 OpenMP thread(s) per MPI task +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable temperature_mc equal 700 +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +Lattice spacing in x,y,z = 2.88 2.88 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +region box block 0 20 0 ${size} 0 ${size} +region box block 0 20 0 20 0 ${size} +region box block 0 20 0 20 0 20 +create_box 2 box +Created orthogonal box = (0 0 0) to (57.6 57.6 57.6) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 16000 atoms + using lattice units in orthogonal box = (0 0 0) to (57.6 57.6 57.6) + create_atoms CPU = 0.001 seconds +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +variable double_temp equal 700*2 +velocity all create ${double_temp} 428459 dist gaussian +velocity all create 1400 428459 dist gaussian + +# what and how to run +fix integrate all npt temp ${temperature} ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 700 1.7 aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 0.02 + SGC - Number of MD timesteps: 100 + SGC - Fraction of swap atoms: 0.2 + SGC - Temperature: %f + SGC - Chemical potential of species 2: -0.7 + SGC - Random number seed: 324234 + SGC - Kappa: 1000 + SGC - Target concentration of species 2: 0.02 + SGC - Target concentration of species 1: 0.98 + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 + SGC - Interaction radius: 5.50679 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.50679 + ghost atom cutoff = 7.50679 + binsize = 3.753395, bins = 16 16 16 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/fs, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) fix sgcmc, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.809 | 7.809 | 7.809 Mbytes + Step Temp Atoms PotEng Press Lx Ly Lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] + 0 1400 16000 -65889.786 -28854.541 57.6 57.6 57.6 0 0 1 0 + 100 741.39222 16000 -64528.923 5317.2919 57.324639 57.32318 57.314928 19 3181 0.9988125 0.0011875 + 200 691.21024 16000 -64405.429 -1238.5107 57.421346 57.415516 57.412006 16 3184 0.9978125 0.0021875 + 300 686.85178 16000 -64377.312 -1816.799 57.424469 57.424335 57.425065 25 3175 0.996375 0.003625 + 400 690.93203 16000 -64358.609 2211.7763 57.376246 57.38185 57.381742 16 3184 0.995375 0.004625 + 500 696.77972 16000 -64350.3 -1583.8383 57.432929 57.426928 57.425935 22 3178 0.994125 0.005875 + 600 694.13567 16000 -64320.831 144.2514 57.420097 57.403531 57.401394 19 3181 0.9930625 0.0069375 + 700 691.79625 16000 -64295.155 384.47869 57.410637 57.412957 57.40707 25 3175 0.991625 0.008375 + 800 692.12887 16000 -64270.053 -764.91901 57.415576 57.43037 57.428708 21 3179 0.9903125 0.0096875 + 900 693.26555 16000 -64249.904 666.65335 57.408245 57.407059 57.417437 34 3166 0.9885625 0.0114375 + 1000 697.97016 16000 -64230.234 -562.91022 57.432317 57.424316 57.423668 28 3172 0.9868125 0.0131875 + 1100 686.52149 16000 -64177.536 -267.21801 57.429 57.434594 57.419878 35 3165 0.984875 0.015125 + 1200 691.55047 16000 -64156.268 810.17844 57.422282 57.413529 57.422883 37 3163 0.9828125 0.0171875 + 1300 691.91944 16000 -64124.602 -1012.7184 57.441793 57.433848 57.446947 32 3168 0.9810625 0.0189375 + 1400 701.78807 16000 -64116.475 180.93518 57.425156 57.438679 57.419575 76 3124 0.9799375 0.0200625 + 1500 692.75501 16000 -64080.481 176.96902 57.429275 57.442405 57.426519 81 3119 0.980125 0.019875 + 1600 694.11818 16000 -64083.435 -785.49617 57.442143 57.432114 57.458304 86 3114 0.98 0.02 + 1700 697.72576 16000 -64088.874 1227.5194 57.423225 57.408678 57.427056 75 3125 0.9800625 0.0199375 + 1800 697.24171 16000 -64086.742 -1166.4832 57.447168 57.47416 57.425229 67 3133 0.98025 0.01975 + 1900 699.53558 16000 -64092.97 214.99908 57.425459 57.437864 57.431139 86 3114 0.98025 0.01975 + 2000 699.00277 16000 -64089.117 978.69672 57.429266 57.39107 57.448289 81 3119 0.9798125 0.0201875 +Loop time of 15.2907 on 4 procs for 2000 steps with 16000 atoms + +Performance: 28.252 ns/day, 0.849 hours/ns, 130.798 timesteps/s, 2.093 Matom-step/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 14.31 | 14.404 | 14.479 | 1.6 | 94.20 +Neigh | 0.090756 | 0.091006 | 0.091258 | 0.1 | 0.60 +Comm | 0.27623 | 0.35113 | 0.44457 | 10.4 | 2.30 +Output | 0.0006002 | 0.0013338 | 0.0035331 | 3.5 | 0.01 +Modify | 0.38023 | 0.38128 | 0.38228 | 0.2 | 2.49 +Other | | 0.06148 | | | 0.40 + +Nlocal: 4000 ave 4017 max 3970 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 8274.75 ave 8305 max 8257 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Neighs: 311257 ave 313506 max 308273 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +FullNghs: 622514 ave 626251 max 616896 min +Histogram: 1 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 2490056 +Ave neighs/atom = 155.6285 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:00:15 From 998f41b8f4cabd154c2d20d305b7593563132d51 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 16:39:18 -0500 Subject: [PATCH 38/46] fix typo --- src/MC/fix_sgcmc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp index 280c0b6f53..6f115d034f 100644 --- a/src/MC/fix_sgcmc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -111,7 +111,7 @@ FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *lmp, int narg, char **a iarg++; double temperature = atof(arg[iarg]); if (comm->me == 0) - utils::logmesg(lmp, " SGC - Temperature: %f\n", temperature); + utils::logmesg(lmp, " SGC - Temperature: {}\n", temperature); if(temperature <= 0) error->all(FLERR, "Illegal fix sgcmc command. Temperature invalid."); double kb = 8.617343e-5; From b2b21540bff87606af13f9c353b8f2a10a05c25b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 17:07:43 -0500 Subject: [PATCH 39/46] import docs for fix sgcmc --- doc/src/Commands_fix.rst | 1 + doc/src/fix.rst | 1 + doc/src/fix_sgcmc.rst | 171 +++++++++++++++++++++++++++++++++++++++ src/MC/fix_sgcmc.h | 2 +- 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 doc/src/fix_sgcmc.rst diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index f9ff8355ba..ff6e402a2e 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -213,6 +213,7 @@ OPT. * :doc:`saed/vtk ` * :doc:`setforce (k) ` * :doc:`setforce/spin ` + * :doc:`sgcmc ` * :doc:`shake (k) ` * :doc:`shardlow (k) ` * :doc:`smd ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 5b4505459e..9017666417 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -360,6 +360,7 @@ accelerated styles exist. * :doc:`saed/vtk ` - time-average the intensities from :doc:`compute saed ` * :doc:`setforce ` - set the force on each atom * :doc:`setforce/spin ` - set magnetic precession vectors on each atom +* :doc:`sgcmc ` - fix for hybrid semi-grandcanonical MD/MC simulations * :doc:`shake ` - SHAKE constraints on bonds and/or angles * :doc:`shardlow ` - integration of DPD equations of motion using the Shardlow splitting * :doc:`smd ` - applied a steered MD force to a group diff --git a/doc/src/fix_sgcmc.rst b/doc/src/fix_sgcmc.rst new file mode 100644 index 0000000000..b51aed6b60 --- /dev/null +++ b/doc/src/fix_sgcmc.rst @@ -0,0 +1,171 @@ +.. index:: fix sgcmc + +fix sgcmc command +================= + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID sgcmc every_nsteps swap_fraction temperature deltamu ... + +* ID, group-ID are documented in :doc:`fix ` command +* sgcmc = style name of this fix command +* every_nsteps = number of MD steps between MC cycles +* swap_fraction = fraction of a full MC cycle carried out at each call (a value of 1.0 will perform as many trial moves as there are atoms) +* temperature = temperature that enters Boltzmann factor in Metropolis criterion (usually the same as MD temperature) +* deltamu = chemical potential difference(s) (`N-1` values must be provided, with `N` being the number of elements) +* Zero or more keyword/value pairs may be appended to fix definition line: + + .. parsed-literal:: + + keyword = *variance* or *randseed* or *window_moves* or *window_size* + *variance* kappa conc1 [conc2] ... [concN] + kappa = variance constraint parameter + conc1,conc2,... = target concentration(s) in the range 0.0-1.0 (*N-1* values must be provided, with *N* being the number of elements) + *randseed* N + N = seed for pseudo random number generator + *window_moves* N + N = number of times sampling window is moved during one MC cycle + *window_size* frac + frac = size of sampling window (must be between 0.5 and 1.0) + + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix mc all sgcmc 50 0.1 400.0 -0.55 + fix vc all sgcmc 20 0.2 700.0 -0.7 randseed 324234 variance 2000.0 0.05 + fix 2 all sgcmc 20 0.1 700.0 -0.7 window_moves 20 + +Description +""""""""""" + +.. versionadded:: TBD + +This command allows to carry out parallel hybrid molecular +dynamics/Monte Carlo (MD/MC) simulations using the algorithms described +in [SadErhStu12]_. Simulations can be carried out in either the +semi-grandcanonical (SGC) or variance constrained semi-grandcanonical +(VC-SGC) ensemble [SadErh12]_. Only atom type swaps are performed by the +SGCMC fix. Relaxations are accounted for by the molecular dynamics +integration steps. + +This fix can be used with standard multi-element EAM potentials +(:doc:`pair styles eam/alloy or eam/fs `) + +The SGCMC fix can handle Finnis/Sinclair type EAM potentials where +:math:`\rho(r)` is atom-type specific, such that different elements can +contribute differently to the total electron density at an atomic site +depending on the identity of the element at that atomic site. + +------------ + +If this fix is applied, the regular MD simulation will be interrupted in +defined intervals to carry out a fraction of a Monte Carlo (MC) +cycle. The interval is set using the parameter *every_nsteps* which +determines how many MD integrator steps are taken between subsequent +calls to the MC routine. + +It is possible to carry out pure lattice MC simulations by setting +*every_nsteps* to 1 and not defining an integration fix such as NVE, +NPT etc. In that case, the particles will not move and only the MC +routine will be called to perform atom type swaps. + +The parameter *swap_fraction* determines how many MC trial steps are carried +out every time the MC routine is entered. It is measured in units of full MC +cycles where one full cycle, *swap_fraction=1*, corresponds to as many MC +trial steps as there are atoms. + +------------ + +The parameter *temperature* specifies the temperature that is used +to evaluate the Metropolis acceptance criterion. While it usually +should be set to the same value as the MD temperature there are cases +when it can be useful to use two different values for at least part of +the simulation, e.g., to speed up equilibration at low temperatures. + +------------ + +The parameter *deltamu* is used to set the chemical potential +difference in the SGC MC algorithm (see Eq. 16 in [SadErhStu12]_). By convention +it is the difference of the chemical potentials of elements `B`, `C` +..., with respect to element A. When the simulation includes `N` +elements, `N-1` values must be specified. + +------------ + +The variance-constrained SGC MC algorithm is activated if the keyword +*variance* is used. In that case the fix parameter *deltamu* +determines the effective average constraint in the parallel VC-SGC MC +algorithm (parameter :math:`\delta\mu_0` in Eq. (20) of [SadErhStu12]_). The +parameter *kappa* specifies the variance contraint (see Eqs. (20-21) +in [SadErhStu12]_). + +The parameter *conc* sets the target concentration (parameter +:math:`c_0` in Eqs. (20-21) of [SadErhStu12]_). The atomic concentrations refer +to components `B`, `C` ..., with `A` being set automatically. When the +simulation includes `N` elements, `N-1` concentration values must be +specified. + +------------ + +There are several technical parameters that can be set via optional flags. + +*randseed* is expected to be a positive integer number and is used +to initialize the random number generator on each processor. + +*window_size* controls the size of the sampling window in a parallel +MC simulation. The size has to lie between 0.5 and 1.0. Normally, this +parameter should be left unspecified which instructs the code to +choose the optimal window size automatically (see Sect. III.B and +Figure 6 in [SadErhStu12]_ for details). + +The number of times the window is moved during a MC cycle is set using the +parameter *window_moves* (see Sect. III.B in [SadErhStu12]_ for details). + +------------ + +Restart, fix_modify, output, run start/stop, minimize info +========================================================== + +No information about this fix is written to restart files. + +The MC routine keeps track of the global concentration(s) as well as the +number of accepted and rejected trial swaps during each MC step. These +values are provided by the sgcmc fix in the form of a global vector that +can be accessed by various :doc:`output commands ` +components of the vector represent the following quantities: + +* 1 = The absolute number of accepted trial swaps during the last MC step +* 2 = The absolute number of rejected trial swaps during the last MC step +* 3 = The current global concentration of species *A* (= number of atoms of type 1 / total number of atoms) +* 4 = The current global concentration of species *B* (= number of atoms of type 2 / total number of atoms) +* ... +* N+2: The current global concentration of species *X* (= number of atoms of type *N* / total number of atoms) + +Restrictions +============ + +At present the fix provides optimized subroutines for EAM and CD-EAM type potentials +(see above) that calculate potential energy changes due to *local* atom type swaps +very efficiently. +Other potentials are supported by using the generic potential functions. This, +however, will lead to exceedingly slow simulations since the it implies that the +energy of the *entire* system is recomputed at each MC trial step. +If other potentials are to be used it is strongly recommended to modify and optimize +the existing generic potential functions for this purpose. + +------------ + +Default +======= + +The optional parameters default to the following values: + +* *randseed* = 324234 +* *window_moves* = 8 +* *window_size* = automatic diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h index fd1f67baee..51bfb792bc 100644 --- a/src/MC/fix_sgcmc.h +++ b/src/MC/fix_sgcmc.h @@ -15,7 +15,7 @@ * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). * - * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a + * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a * description of the algorithm. * * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) From fdb9a7571422e16bcfbf68f456731e8ce1305cf2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 20:36:12 -0500 Subject: [PATCH 40/46] programming style updates - partially enable clang-format - reindent - update parsing of numeric arguments - update handling of error messages - add blank after "if", "for", "while" where needed - silence compiler warnings --- src/MC/fix_sgcmc.cpp | 1315 +++++++++++++++++++++--------------------- src/MC/fix_sgcmc.h | 2 - 2 files changed, 648 insertions(+), 669 deletions(-) diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp index 6f115d034f..1cdb023450 100644 --- a/src/MC/fix_sgcmc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -26,32 +25,32 @@ #include "fix_sgcmc.h" -#include "atom.h" -#include "update.h" -#include "error.h" -#include "modify.h" -#include "comm.h" -#include "domain.h" -#include "universe.h" -#include "force.h" -#include "compute.h" -#include "memory.h" -#include "bond.h" #include "angle.h" +#include "atom.h" +#include "bond.h" +#include "comm.h" +#include "compute.h" #include "dihedral.h" +#include "domain.h" +#include "error.h" +#include "force.h" #include "improper.h" -#include "kspace.h" -#include "pair.h" -#include "neighbor.h" -#include "neigh_request.h" -#include "neigh_list.h" #include "integrate.h" +#include "kspace.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "universe.h" +#include "update.h" #include "pair_eam.h" #include "random_park.h" +#include +#include #include -#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -60,161 +59,149 @@ using namespace FixConst; * Constructs the fix object and parses the input parameters * that control the Monte Carlo routine. *********************************************************************/ -FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), random(nullptr), localRandom(nullptr), neighborList(nullptr), - samplingWindowUserSize(0), samplingWindowPosition(5), nAcceptedSwaps(0), nRejectedSwaps(0), - kappa(0), serialMode(false), compute_pe(nullptr), pairEAM(nullptr) +FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *_lmp, int narg, char **arg) : + Fix(_lmp, narg, arg), random(nullptr), localRandom(nullptr), neighborList(nullptr), + pairEAM(nullptr), compute_pe(nullptr) { - this->scalar_flag = 0; - this->vector_flag = 1; - this->extvector = 0; - this->global_freq = 1; + scalar_flag = 0; + vector_flag = 1; + extvector = 0; + global_freq = 1; - // Specifies the number of output fields this fix produces for thermo output. - // It calculates the - // - Number of accepted trial moves - // - Number of rejected trial moves - // - Atom counts for each species. - this->size_vector = 2 + atom->ntypes; + // Specifies the number of output fields this fix produces for thermo output. + // It calculates the + // - Number of accepted trial moves + // - Number of rejected trial moves + // - Atom counts for each species. + size_vector = 2 + atom->ntypes; - // Let LAMMPS know the number of data values per atom to transfer in MPI communication. - this->comm_forward = 4; - this->comm_reverse = 3; + // Let LAMMPS know the number of data values per atom to transfer in MPI communication. + comm_forward = 4; + comm_reverse = 3; - if(domain->triclinic) - error->all(FLERR, "Fix sgcmc does not support non-orthogonal simulation boxes."); + samplingWindowUserSize = 0; + samplingWindowPosition = 5; + nAcceptedSwaps = 0; + nRejectedSwaps = 0; + kappa = 0; + serialMode = false; - // Parse fix parameters from input file. - if(narg < 6) - error->all(FLERR, "Illegal fix sgcmc command. Not enough parameters."); + if (domain->triclinic) + error->all(FLERR, "Fix sgcmc does not support non-orthogonal simulation boxes."); - // Counter for reading parameters. - int iarg = 2; + if (narg < 6) utils::missing_cmd_args(FLERR, "fix sgcmc", error); - // Parse the number of MD timesteps to do between MC. - iarg++; - nevery_mdsteps = atoi(arg[iarg]); + // Parse the number of MD timesteps to do between MC. + nevery_mdsteps = utils::inumeric(FLERR, arg[3], false, lmp); + if (nevery_mdsteps <= 0) error->all(FLERR, "Invalid number of MD timesteps {}", nevery_mdsteps); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Number of MD timesteps: {}\n", nevery_mdsteps); + + // Parse the fraction of atoms swaps attempted during each cycle. + swap_fraction = utils::numeric(FLERR, arg[4], false, lmp); + if ((swap_fraction < 0.0) || (swap_fraction > 1.0)) + error->all(FLERR, "Invalid fraction {} of swap atoms", swap_fraction); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Fraction of swap atoms: {}\n", swap_fraction); + + // Parse temperature for MC. + double temperature = utils::numeric(FLERR, arg[5], false, lmp); + if (temperature <= 0) error->all(FLERR, "Temperature {} invalid", temperature); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Temperature: {}\n", temperature); + beta = 1.0 / (force->boltz * temperature); + + // Parse chemical potentials. + int iarg = 6; + deltamu.resize(atom->ntypes + 1); + deltamu[0] = 0.0; + deltamu[1] = 0.0; + if (atom->ntypes < 2) + error->all(FLERR, "Fix sgcmc can only be used in simulations with at least two atom types."); + for (int i = 2; i <= atom->ntypes; i++, iarg++) { + if (iarg >= narg) error->all(FLERR, "Too few chemical potentials specified"); + deltamu[i] = utils::numeric(FLERR, arg[iarg], false, lmp); if (comm->me == 0) - utils::logmesg(lmp, " SGC - Number of MD timesteps: {}\n", nevery_mdsteps); - if(nevery_mdsteps <= 0) - error->all(FLERR, "Illegal fix sgcmc command. Invalid number of MD timesteps."); + utils::logmesg(lmp, " SGC - Chemical potential of species {}: {}\n", i, deltamu[i]); + } - // Parse the fraction of atoms swaps attempted during each cycle. - iarg++; - swap_fraction = atof(arg[iarg]); - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Fraction of swap atoms: {}\n", swap_fraction); - if(swap_fraction < 0 || swap_fraction > 1.0) - error->all(FLERR, "Illegal fix sgcmc command. Invalid fraction of swap atoms."); + // Default values for optional parameters (where applicable). + numSamplingWindowMoves = 8; + seed = 324234; - // Parse temperature for MC. - iarg++; - double temperature = atof(arg[iarg]); - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Temperature: {}\n", temperature); - if(temperature <= 0) - error->all(FLERR, "Illegal fix sgcmc command. Temperature invalid."); - double kb = 8.617343e-5; - beta = 1.0 / ( kb * temperature ); + // Parse extra/optional parameters + while (iarg < narg) { - // Parse chemical potentials. - iarg++; - deltamu.resize(atom->ntypes + 1); - deltamu[0] = 0.0; - deltamu[1] = 0.0; - if(atom->ntypes < 2) - error->all(FLERR, "Illegal fix sgcmc command. Fix can only be used in simulations with at least two atom types."); - for(int i=2; i<=atom->ntypes; i++, iarg++) { - if(iarg >= narg) - error->all(FLERR, "Illegal fix sgcmc command. Too few chemical potentials specified."); - deltamu[i] = atof(arg[iarg]); + if (strcmp(arg[iarg], "randseed") == 0) { + // Random number seed. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc randseed", error); + seed = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); + if (seed <= 0) error->all(FLERR, "Random number seed {} must be positive", seed); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Random number seed: {}\n", seed); + iarg += 2; + + } else if (strcmp(arg[iarg], "window_moves") == 0) { + // Parse number of window moves. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc window_moves", error); + numSamplingWindowMoves = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); + if (numSamplingWindowMoves <= 0) + error->all(FLERR, "Invalid number {} of sampling window moves", numSamplingWindowMoves); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Number of sampling window moves: {}\n", + numSamplingWindowMoves); + iarg += 2; + + } else if (strcmp(arg[iarg], "window_size") == 0) { + // Parse sampling window size parameter. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc window_moves", error); + samplingWindowUserSize = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + if ((samplingWindowUserSize < 0.5) || (samplingWindowUserSize > 1.0)) + error->all(FLERR, "Sampling window size {} is out of range.", samplingWindowUserSize); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Sampling window size: {}\n", samplingWindowUserSize); + iarg += 2; + + } else if (strcmp(arg[iarg], "variance") == 0) { + // Parse parameters for variance constraint ensemble. + if (iarg + 1 + atom->ntypes > narg) + utils::missing_cmd_args(FLERR, "fix sgcmc variance", error); + iarg++; + + kappa = utils::numeric(FLERR, arg[iarg], false, lmp); + if (kappa < 0) error->all(FLERR, "Variance constraint parameter must not be negative."); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Kappa: {}\n", kappa); + iarg++; + + targetConcentration.resize(atom->ntypes + 1); + targetConcentration[0] = 1.0; + targetConcentration[1] = 1.0; + for (int i = 2; i <= atom->ntypes; i++, iarg++) { + targetConcentration[i] = utils::numeric(FLERR, arg[iarg], false, lmp); + targetConcentration[1] -= targetConcentration[i]; + } + for (int i = 1; i <= atom->ntypes; i++, iarg++) { + if ((targetConcentration[i] < 0.0) || (targetConcentration[i] > 1.0)) + error->all(FLERR, "Target concentration {} for species {} is out of range", + targetConcentration[i], i); if (comm->me == 0) - utils::logmesg(lmp, " SGC - Chemical potential of species {}: {}\n", i, deltamu[i]); + utils::logmesg(lmp, " SGC - Target concentration of species {}: {}\n", i, + targetConcentration[i]); + } + + } else if (strcmp(arg[iarg], "serial") == 0) { + // Switch off second rejection. + serialMode = true; + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using serial MC version without second rejection.\n"); + iarg++; + + if (comm->nprocs != 1) + error->all(FLERR, "Cannot use serial mode Monte Carlo in a parallel simulation."); + } else { + error->all(FLERR, "Unknown fix sgcmc keyword: {}", arg[iarg]); } + } - // Default values for optional parameters (where applicable). - numSamplingWindowMoves = 8; - seed = 324234; - - // Parse extra/optional parameters - while(iarg < narg) { - - if(strcmp(arg[iarg], "randseed") == 0) { - // Random number seed. - if(iarg + 2 > narg) error->all(FLERR, "Illegal fix sgcmc command. Missing parameter after keyword 'randseed'."); - seed = atoi(arg[iarg+1]); - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Random number seed: {}\n", seed); - if(seed <= 0) - error->all(FLERR, "Illegal fix sgcmc command. Random number seed must be positive."); - iarg += 2; - - } - else if(strcmp(arg[iarg], "window_moves") == 0) { - // Parse number of window moves. - if(iarg + 2 > narg) error->all(FLERR, "Illegal fix sgcmc command. Missing parameter after keyword 'window_moves'."); - numSamplingWindowMoves = atoi(arg[iarg+1]); - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Number of sampling window moves: {}\n", numSamplingWindowMoves); - if(numSamplingWindowMoves <= 0) - error->all(FLERR, "Illegal fix sgcmc command. Invalid number of sampling window moves."); - iarg += 2; - - } - else if(strcmp(arg[iarg], "window_size") == 0) { - // Parse sampling window size parameter. - if(iarg + 2 > narg) error->all(FLERR, "Missing parameter after keyword 'window_size'."); - samplingWindowUserSize = atof(arg[iarg+1]); - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Sampling window size: {}\n", samplingWindowUserSize); - if(samplingWindowUserSize < 0.5 || samplingWindowUserSize > 1.0) - error->all(FLERR, "Illegal fix sgcmc command. Sampling window size is out of range."); - iarg += 2; - } - else if(strcmp(arg[iarg], "variance") == 0) { - // Parse parameters for variance constraint ensemble. - if(iarg + 1 + atom->ntypes > narg) - error->all(FLERR, "Illegal fix sgcmc command. Too few parameters after keyword 'variance'."); - iarg++; - - kappa = atof(arg[iarg]); - if (comm->me == 0) utils::logmesg(lmp, " SGC - Kappa: {}\n", kappa); - if(kappa < 0) - error->all(FLERR, "Illegal fix sgcmc command. Variance constraint parameter must not be negative."); - iarg++; - - targetConcentration.resize(atom->ntypes + 1); - targetConcentration[0] = 1.0; - targetConcentration[1] = 1.0; - for(int i=2; i<=atom->ntypes; i++, iarg++) { - targetConcentration[i] = atof(arg[iarg]); - targetConcentration[1] -= targetConcentration[i]; - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Target concentration of species {}: {}\n", i, targetConcentration[i]); - if(targetConcentration[i] < 0 || targetConcentration[i] > 1.0) - error->all(FLERR, "Illegal fix sgcmc command. Target concentration is out of range."); - } - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Target concentration of species 1: {}\n", targetConcentration[1]); - if(targetConcentration[1] < 0) - error->all(FLERR, "Illegal fix sgcmc command. Target concentration is out of range."); - } - else if(strcmp(arg[iarg], "serial") == 0) { - // Switch off second rejection. - serialMode = true; - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Using serial MC version without second rejection.\n"); - iarg++; - - if(comm->nprocs != 1) - error->all(FLERR, "Illegal fix sgcmc command. Cannot use serial mode Monte Carlo in a parallel simulation."); - } - else error->all(FLERR, "Illegal fix sgcmc command. Unknown optional parameter."); - } - - // Initialize random number generators. - random = new RanPark(lmp, seed); - localRandom = new RanPark(lmp, seed + universe->me); + // Initialize random number generators. + random = new RanPark(lmp, seed); + localRandom = new RanPark(lmp, seed + universe->me); } /********************************************************************* @@ -222,25 +209,26 @@ FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *lmp, int narg, char **a *********************************************************************/ FixSemiGrandCanonicalMC::~FixSemiGrandCanonicalMC() { - delete random; - delete localRandom; - + delete random; + delete localRandom; } +// clang-format off + /********************************************************************* * The return value of this method specifies at which points the * fix is invoked during the simulation. *********************************************************************/ int FixSemiGrandCanonicalMC::setmask() { - // We want the MC routine to be called in between the MD steps. - // We need the electron densities for each atom, so after the - // EAM potential has computed them in the force routine is a good - // time to invoke the MC routine. - int mask = 0; - mask |= POST_FORCE; - mask |= POST_FORCE_RESPA; - return mask; + // We want the MC routine to be called in between the MD steps. + // We need the electron densities for each atom, so after the + // EAM potential has computed them in the force routine is a good + // time to invoke the MC routine. + int mask = 0; + mask |= POST_FORCE; + mask |= POST_FORCE_RESPA; + return mask; } /********************************************************************* @@ -248,43 +236,43 @@ int FixSemiGrandCanonicalMC::setmask() *********************************************************************/ void FixSemiGrandCanonicalMC::init() { - // Make sure the user has defined only one Monte-Carlo fix. - int count = 0; - for(int i = 0; i < modify->nfix; i++) - if(strcmp(modify->fix[i]->style,"sgcmc") == 0) count++; - if(count > 1) error->all(FLERR, "More than one fix sgcmc defined."); + // Make sure the user has defined only one Monte-Carlo fix. + int count = 0; + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"sgcmc") == 0) count++; + if (count > 1) error->all(FLERR, "More than one fix sgcmc defined."); - // Save a pointer to the EAM potential. - pairEAM = dynamic_cast(force->pair); - if (!pairEAM) { - if (comm->me == 0) - utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); + // Save a pointer to the EAM potential. + pairEAM = dynamic_cast(force->pair); + if (!pairEAM) { + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); - // Create a compute that will provide the total energy of the system. - // This is needed by computeTotalEnergy(). - char* id_pe = (char*)"thermo_pe"; - int ipe = modify->find_compute(id_pe); - compute_pe = modify->compute[ipe]; - } - interactionRadius = force->pair->cutforce; - if (comm->me == 0) utils::logmesg(lmp, " SGC - Interaction radius: {}\n", interactionRadius); + // Create a compute that will provide the total energy of the system. + // This is needed by computeTotalEnergy(). + char* id_pe = (char*)"thermo_pe"; + int ipe = modify->find_compute(id_pe); + compute_pe = modify->compute[ipe]; + } + interactionRadius = force->pair->cutforce; + if (comm->me == 0) utils::logmesg(lmp, " SGC - Interaction radius: {}\n", interactionRadius); - // This fix needs a full neighbor list. - neighbor->add_request(this, NeighConst::REQ_FULL); + // This fix needs a full neighbor list. + neighbor->add_request(this, NeighConst::REQ_FULL); - // Count local number of atoms from each species. - const int *type = atom->type; - const int *mask = atom->mask; - std::vector localSpeciesCounts(atom->ntypes+1, 0); - for(int i = 0; i < atom->nlocal; i++, ++type) { - if(mask[i] & groupbit) - localSpeciesCounts[*type]++; - } + // Count local number of atoms from each species. + const int *type = atom->type; + const int *mask = atom->mask; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for (int i = 0; i < atom->nlocal; i++, ++type) { + if (mask[i] & groupbit) + localSpeciesCounts[*type]++; + } - // MPI sum to get global concentrations. - speciesCounts.resize(atom->ntypes+1); - MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), - MPI_INT, MPI_SUM, world); + // MPI sum to get global concentrations. + speciesCounts.resize(atom->ntypes+1); + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), + MPI_INT, MPI_SUM, world); } /********************************************************************* @@ -292,7 +280,7 @@ void FixSemiGrandCanonicalMC::init() *********************************************************************/ void FixSemiGrandCanonicalMC::init_list(int /*id*/, NeighList *ptr) { - this->neighborList = ptr; + neighborList = ptr; } /********************************************************************* @@ -301,8 +289,8 @@ void FixSemiGrandCanonicalMC::init_list(int /*id*/, NeighList *ptr) *********************************************************************/ void FixSemiGrandCanonicalMC::post_force(int /*vflag*/) { - if((update->ntimestep % nevery_mdsteps) == 0) - doMC(); + if ((update->ntimestep % nevery_mdsteps) == 0) + doMC(); } /********************************************************************* @@ -310,203 +298,194 @@ void FixSemiGrandCanonicalMC::post_force(int /*vflag*/) *********************************************************************/ void FixSemiGrandCanonicalMC::doMC() { - /// Reset energy variable to signal the energy calculation routine that - /// it need to recompute the current total energy. - totalPotentialEnergy = 0; + /// Reset energy variable to signal the energy calculation routine that + /// it need to recompute the current total energy. + totalPotentialEnergy = 0; - // Allocate array memory. - changedAtoms.resize(atom->nmax); + // Allocate array memory. + changedAtoms.resize(atom->nmax); - // During the last MD timestep the EAM potential routine has computed the - // electron densities for all atoms that belong to this processor. - // They are stored in the rho array of the PairEAM class. - // But computing the energy change caused by flipping one atom of this processor - // might require the electron densities of atoms that belong to other processors. - // So we first need to fetch those electron densities for our ghost atoms now. - fetchGhostAtomElectronDensities(); + // During the last MD timestep the EAM potential routine has computed the + // electron densities for all atoms that belong to this processor. + // They are stored in the rho array of the PairEAM class. + // But computing the energy change caused by flipping one atom of this processor + // might require the electron densities of atoms that belong to other processors. + // So we first need to fetch those electron densities for our ghost atoms now. + fetchGhostAtomElectronDensities(); - const int *mask = atom->mask; + const int *mask = atom->mask; - // Reset counters. - int nAcceptedSwapsLocal = 0; - int nRejectedSwapsLocal = 0; + // Reset counters. + int nAcceptedSwapsLocal = 0; + int nRejectedSwapsLocal = 0; - int oldSpecies, newSpecies; - std::vector deltaN(atom->ntypes+1, 0); //< Local change in number of atoms of each species. - std::vector deltaNGlobal(atom->ntypes+1, 0); //< Global change in number of atoms of each species. + int oldSpecies, newSpecies; + std::vector deltaN(atom->ntypes+1, 0); //< Local change in number of atoms of each species. + std::vector deltaNGlobal(atom->ntypes+1, 0); //< Global change in number of atoms of each species. - for(int i = 0; i < numSamplingWindowMoves; i++) { + for (int i = 0; i < numSamplingWindowMoves; i++) { - // Reset flag array that keeps track of changed per-atom quantities. - std::fill(changedAtoms.begin(), changedAtoms.end(), false); + // Reset flag array that keeps track of changed per-atom quantities. + std::fill(changedAtoms.begin(), changedAtoms.end(), false); - // Position the sampling window within the node's boundaries. - // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. - // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect - // the same atoms in the region between the two sampling windows. - // For debugging purposes the sampling window can be chosen larger than the default size. Then it is - // considered an 'oversize' window and we have to exchange atom information after each and - // and every swap step, which is very slow. - bool oversizeWindow = placeSamplingWindow(); + // Position the sampling window within the node's boundaries. + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window and we have to exchange atom information after each and + // and every swap step, which is very slow. + bool oversizeWindow = placeSamplingWindow(); - /// The number of times we want to swap an atom. - int nDice = (int)(swap_fraction * numFixAtomsLocal / numSamplingWindowMoves); + /// The number of times we want to swap an atom. + int nDice = (int)(swap_fraction * numFixAtomsLocal / numSamplingWindowMoves); - // This number must be synchronized with the other nodes. We take the largest - // of all nodes and skip trial moves later. - int largestnDice; - MPI_Allreduce(&nDice, &largestnDice, 1, MPI_INT, MPI_MAX, world); + // This number must be synchronized with the other nodes. We take the largest + // of all nodes and skip trial moves later. + int largestnDice; + MPI_Allreduce(&nDice, &largestnDice, 1, MPI_INT, MPI_MAX, world); - // The probability to do one swap step. - double diceProbability = (double)nDice / (double)largestnDice; + // The probability to do one swap step. + double diceProbability = (double)nDice / (double)largestnDice; - // Inner MC loop that swaps atom types. - for(int j = 0; j < largestnDice; j++) { + // Inner MC loop that swaps atom types. + for (int j = 0; j < largestnDice; j++) { - double deltaE = 0; + double deltaE = 0; + std::fill(deltaN.begin(), deltaN.end(), 0); + int selectedAtom = -1, selectedAtomNL = -1; + + // As already said above, we have to do swap steps only with a certain probability + // to keep nodes in sync. + if (localRandom->uniform() <= diceProbability) { + + // Choose a random atom from the pool of atoms that are inside the sampling window. + int index = (int)(localRandom->uniform() * (double)samplingWindowAtoms.size()); + selectedAtomNL = samplingWindowAtoms[index]; + + // Get the real atom index. + selectedAtom = neighborList->ilist[selectedAtomNL]; + oldSpecies = atom->type[selectedAtom]; + + // Choose the new type for the swapping atom by random. + if (atom->ntypes > 2) { + // Use a random number to choose the new species if there are three or more atom types. + newSpecies = (int)(localRandom->uniform() * (atom->ntypes-1)) + 1; + if (newSpecies >= oldSpecies) newSpecies++; + } + else { + // If there are only two atom types, then the decision is clear. + newSpecies = (oldSpecies == 1) ? 2 : 1; + } + deltaN[oldSpecies] = -1; + deltaN[newSpecies] = +1; + + // Compute the energy difference that swapping this atom would cost or gain. + if (pairEAM) { + deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } else { + // Generic case: + deltaE = computeEnergyChangeGeneric(selectedAtom, oldSpecies, newSpecies); + } + + // Perform inner MC acceptance test. + double dm = 0.0; + if (serialMode && kappa != 0.0) { + for (int i = 2; i <= atom->ntypes; i++) + dm += (deltamu[i] + kappa / atom->natoms * (2.0 * speciesCounts[i] + deltaN[i])) * deltaN[i]; + } + else { + for (int i = 2; i <= atom->ntypes; i++) + dm += deltamu[i] * deltaN[i]; + } + double deltaB = -(deltaE + dm) * beta; + if (deltaB < 0.0) { + if (deltaB < log(localRandom->uniform())) { std::fill(deltaN.begin(), deltaN.end(), 0); - int selectedAtom = -1, selectedAtomNL = -1; + selectedAtom = -1; + deltaE = 0; + } + } + } - // This is only needed for debugging purposes: - int selectedAtomDebug = -1; - double deltaEDebug = 0; + if (kappa != 0.0 && serialMode == false) { - // As already said above, we have to do swap steps only with a certain probability - // to keep nodes in sync. - if(localRandom->uniform() <= diceProbability) { + // What follows is the second rejection test for the variance-constrained + // semi-grandcanonical method. - // Choose a random atom from the pool of atoms that are inside the sampling window. - int index = (int)(localRandom->uniform() * (double)samplingWindowAtoms.size()); - selectedAtomNL = samplingWindowAtoms[index]; + // MPI sum of total change in number of particles. + MPI_Allreduce(&deltaN.front(), &deltaNGlobal.front(), deltaN.size(), MPI_INT, MPI_SUM, world); - // Get the real atom index. - selectedAtom = neighborList->ilist[selectedAtomNL]; - oldSpecies = atom->type[selectedAtom]; - - // Choose the new type for the swapping atom by random. - if(atom->ntypes > 2) { - // Use a random number to choose the new species if there are three or more atom types. - newSpecies = (int)(localRandom->uniform() * (atom->ntypes-1)) + 1; - if(newSpecies >= oldSpecies) newSpecies++; - } - else { - // If there are only two atom types, then the decision is clear. - newSpecies = (oldSpecies == 1) ? 2 : 1; - } - deltaN[oldSpecies] = -1; - deltaN[newSpecies] = +1; - - // Compute the energy difference that swapping this atom would cost or gain. - if(pairEAM) { - deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - } else { - // Generic case: - deltaE = computeEnergyChangeGeneric(selectedAtom, oldSpecies, newSpecies); - } - - // This is only needed for debugging purposes. - // Save the values so they can later be checked. - selectedAtomDebug = selectedAtom; - deltaEDebug = deltaE; - - // Perform inner MC acceptance test. - double dm = 0.0; - if(serialMode && kappa != 0.0) { - for(int i = 2; i <= atom->ntypes; i++) - dm += (deltamu[i] + kappa / atom->natoms * (2.0 * speciesCounts[i] + deltaN[i])) * deltaN[i]; - } - else { - for(int i = 2; i <= atom->ntypes; i++) - dm += deltamu[i] * deltaN[i]; - } - double deltaB = -(deltaE + dm) * beta; - if(deltaB < 0.0) { - if(deltaB < log(localRandom->uniform())) { - std::fill(deltaN.begin(), deltaN.end(), 0); - selectedAtom = -1; - deltaE = 0; - } - } - } - - if(kappa != 0.0 && serialMode == false) { - - // What follows is the second rejection test for the variance-constrained - // semi-grandcanonical method. - - // MPI sum of total change in number of particles. - MPI_Allreduce(&deltaN.front(), &deltaNGlobal.front(), deltaN.size(), MPI_INT, MPI_SUM, world); - - // Perform outer MC acceptance test. - // This is done in sync by all processors. - double A = 0.0; - for(int i = 1; i <= atom->ntypes; i++) { - A += deltaNGlobal[i] * deltaNGlobal[i]; - A += 2.0 * deltaNGlobal[i] * (speciesCounts[i] - (int)(targetConcentration[i] * atom->natoms)); - } - double deltaB = -(kappa / atom->natoms) * A; - if(deltaB < 0.0) { - if(deltaB < log(random->uniform())) { - std::fill(deltaN.begin(), deltaN.end(), 0); - std::fill(deltaNGlobal.begin(), deltaNGlobal.end(), 0); - selectedAtom = -1; - } - } - - // Update global species counters. - for(int i = 1; i <= atom->ntypes; i++) - speciesCounts[i] += deltaNGlobal[i]; - } - else if(serialMode) { - // Update the local species counters. - for(int i = 1; i <= atom->ntypes; i++) - speciesCounts[i] += deltaN[i]; - } - - // Make accepted atom swap permanent. - if(selectedAtom >= 0) { - if(pairEAM) - flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); - else - flipAtomGeneric(selectedAtom, oldSpecies, newSpecies); - nAcceptedSwapsLocal++; - } - else { - nRejectedSwapsLocal++; - } - - // Update variable that keeps track of the current total energy. - totalPotentialEnergy += deltaE; - - if(oversizeWindow) { - // In case of an oversized sampling window we have to exchange the atom types and all other - // per-atom quantities after each and every swap step. This is very slow and should only be used - // for debugging purposes. - communicateRhoAndTypes(); - } + // Perform outer MC acceptance test. + // This is done in sync by all processors. + double A = 0.0; + for (int i = 1; i <= atom->ntypes; i++) { + A += deltaNGlobal[i] * deltaNGlobal[i]; + A += 2.0 * deltaNGlobal[i] * (speciesCounts[i] - (int)(targetConcentration[i] * atom->natoms)); + } + double deltaB = -(kappa / atom->natoms) * A; + if (deltaB < 0.0) { + if (deltaB < log(random->uniform())) { + std::fill(deltaN.begin(), deltaN.end(), 0); + std::fill(deltaNGlobal.begin(), deltaNGlobal.end(), 0); + selectedAtom = -1; + } } - // Finally the changed electron densities and atom types must be exchanged before - // the sampling window is moved. - if(!oversizeWindow) - communicateRhoAndTypes(); + // Update global species counters. + for (int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaNGlobal[i]; + } + else if (serialMode) { + // Update the local species counters. + for (int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaN[i]; + } + + // Make accepted atom swap permanent. + if (selectedAtom >= 0) { + if (pairEAM) + flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + else + flipAtomGeneric(selectedAtom, oldSpecies, newSpecies); + nAcceptedSwapsLocal++; + } + else { + nRejectedSwapsLocal++; + } + + // Update variable that keeps track of the current total energy. + totalPotentialEnergy += deltaE; + + if (oversizeWindow) { + // In case of an oversized sampling window we have to exchange the atom types and all other + // per-atom quantities after each and every swap step. This is very slow and should only be used + // for debugging purposes. + communicateRhoAndTypes(); + } } - // MPI sum total number of accepted/rejected swaps. - MPI_Allreduce(&nAcceptedSwapsLocal, &nAcceptedSwaps, 1, MPI_INT, MPI_SUM, world); - MPI_Allreduce(&nRejectedSwapsLocal, &nRejectedSwaps, 1, MPI_INT, MPI_SUM, world); + // Finally the changed electron densities and atom types must be exchanged before + // the sampling window is moved. + if (!oversizeWindow) + communicateRhoAndTypes(); + } - // For (parallelized) semi-grandcanonical MC we have to determine the current concentrations now. - // For the serial version and variance-constrained MC it has already been done in the loop. - if(kappa == 0.0 && serialMode == false) { - const int *type = atom->type; - std::vector localSpeciesCounts(atom->ntypes+1, 0); - for(int i = 0; i < atom->nlocal; i++, ++type) { - if(mask[i] & groupbit) - localSpeciesCounts[*type]++; - } - MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + // MPI sum total number of accepted/rejected swaps. + MPI_Allreduce(&nAcceptedSwapsLocal, &nAcceptedSwaps, 1, MPI_INT, MPI_SUM, world); + MPI_Allreduce(&nRejectedSwapsLocal, &nRejectedSwaps, 1, MPI_INT, MPI_SUM, world); + + // For (parallelized) semi-grandcanonical MC we have to determine the current concentrations now. + // For the serial version and variance-constrained MC it has already been done in the loop. + if (kappa == 0.0 && serialMode == false) { + const int *type = atom->type; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for (int i = 0; i < atom->nlocal; i++, ++type) { + if (mask[i] & groupbit) + localSpeciesCounts[*type]++; } + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + } } /********************************************************************* @@ -515,11 +494,11 @@ void FixSemiGrandCanonicalMC::doMC() *********************************************************************/ void FixSemiGrandCanonicalMC::fetchGhostAtomElectronDensities() { - if(pairEAM) { - // Transfer original EAM rho values. - communicationStage = 1; - comm->forward_comm(this); - } + if (pairEAM) { + // Transfer original EAM rho values. + communicationStage = 1; + comm->forward_comm(this); + } } /********************************************************************* @@ -528,46 +507,47 @@ void FixSemiGrandCanonicalMC::fetchGhostAtomElectronDensities() *********************************************************************/ void FixSemiGrandCanonicalMC::communicateRhoAndTypes() { - // Electron densities can have changed for real atoms as well as ghost atoms during the last MC step. - // So we have to perform a forward and a reverse communication to keep everything in sync. - // In the array changedAtoms we kept track of which rhos have been changed by the MC. This helps us - // here to not overwrite values when doing the bidirectional exchange. + // Electron densities can have changed for real atoms as well as ghost atoms during the last MC step. + // So we have to perform a forward and a reverse communication to keep everything in sync. + // In the array changedAtoms we kept track of which rhos have been changed by the MC. This helps us + // here to not overwrite values when doing the bidirectional exchange. - if(pairEAM) { - // Transfer changed electron densities of ghost atoms to the real atoms. - communicationStage = 2; - comm->reverse_comm(this); - } + if (pairEAM) { + // Transfer changed electron densities of ghost atoms to the real atoms. + communicationStage = 2; + comm->reverse_comm(this); + } - // Transfer changed atom types and electron densities of the real atoms to the ghost atoms. - communicationStage = 3; - comm->forward_comm(this); + // Transfer changed atom types and electron densities of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); } /********************************************************************* * This is for MPI communication with neighbor nodes. *********************************************************************/ -int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int* list, double* buf, int pbc_flag, int* pbc) +int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, + int * /*pbc*/) { - int m = 0; - if(communicationStage == 1) { - // Send electron densities of local atoms to neighbors. - for(int i = 0; i < n; i++) buf[m++] = pairEAM->rho[list[i]]; - } else if(communicationStage == 3) { - if(pairEAM) { - // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. - for(int i = 0; i < n; i++) { - buf[m++] = atom->type[list[i]]; - buf[m++] = pairEAM->rho[list[i]]; - } - } else { - // Generic potential case: - for(int i = 0; i < n; i++) { - buf[m++] = atom->type[list[i]]; - } + int m = 0; + if (communicationStage == 1) { + // Send electron densities of local atoms to neighbors. + for (int i = 0; i < n; i++) buf[m++] = pairEAM->rho[list[i]]; + } else if (communicationStage == 3) { + if (pairEAM) { + // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. + for (int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + buf[m++] = pairEAM->rho[list[i]]; + } + } else { + // Generic potential case: + for (int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; } } - return m; + } + return m; } /********************************************************************* @@ -575,25 +555,25 @@ int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int* list, double* buf, in *********************************************************************/ void FixSemiGrandCanonicalMC::unpack_forward_comm(int n, int first, double* buf) { - if(communicationStage == 1) { + if (communicationStage == 1) { // Receive electron densities of ghost atoms from neighbors. int last = first + n; - for(int i = first; i < last; i++) pairEAM->rho[i] = *buf++; - } else if(communicationStage == 3) { + for (int i = first; i < last; i++) pairEAM->rho[i] = *buf++; + } else if (communicationStage == 3) { int last = first + n; - if(pairEAM) { + if (pairEAM) { // Receive types and rhos of real atoms of the neighbor proc and assign them // to the local ghost atoms. - for(int i = first; i < last; i++, buf += 2) { + for (int i = first; i < last; i++, buf += 2) { atom->type[i] = (int)buf[0]; // We have to make sure that rhos changed locally do not get overridden by the rhos // sent by the neighbor procs. - if(!changedAtoms[i]) + if (!changedAtoms[i]) pairEAM->rho[i] = buf[1]; } } else { // Generic potential case: - for(int i = first; i < last; i++, buf += 1) { + for (int i = first; i < last; i++, buf += 1) { atom->type[i] = (int)buf[0]; } } @@ -609,7 +589,7 @@ int FixSemiGrandCanonicalMC::pack_reverse_comm(int n, int first, double* buf) // Send changed electron densities of ghost atoms to the real atoms of neighbor procs. int last = first + n; - for(int i = first; i < last; i++) buf[m++] = pairEAM->rho[i]; + for (int i = first; i < last; i++) buf[m++] = pairEAM->rho[i]; return m; } @@ -620,10 +600,10 @@ void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) { // Received changed electron densities of ghost atoms of neighbor procs and assign them to our // real atoms. - for(int i = 0; i < n; i++, buf++) { + for (int i = 0; i < n; i++, buf++) { // We have to make sure that rhos changed locally do not get overridden by the rhos // sent by the neighbor procs. - if(!changedAtoms[list[i]]) + if (!changedAtoms[list[i]]) pairEAM->rho[list[i]] = *buf; } } @@ -633,80 +613,80 @@ void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) *********************************************************************/ bool FixSemiGrandCanonicalMC::placeSamplingWindow() { - // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. - // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect - // the same atoms in the region between the two sampling windows. - // For debugging purposes the sampling window can be chosen larger than the default size. Then it is - // considered an 'oversize' window. - bool oversizeWindow = false; + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window. + bool oversizeWindow = false; - // Align the sampling window to one of the 8 corners of the processor cell. - double samplingWindowLo[3]; - double samplingWindowHi[3]; - double margin[3]; - for(int i = 0; i < 3; i++) { + // Align the sampling window to one of the 8 corners of the processor cell. + double samplingWindowLo[3]; + double samplingWindowHi[3]; + double margin[3]; + for (int i = 0; i < 3; i++) { - margin[i] = interactionRadius * 2.0; - if(samplingWindowUserSize > 0.0) { - margin[i] = (domain->subhi[i] - domain->sublo[i]) * (1.0 - samplingWindowUserSize); - if(margin[i] < interactionRadius * 2.0) - oversizeWindow = true; - } - - double shift = (double)((samplingWindowPosition >> i) & 1) * margin[i]; - samplingWindowLo[i] = domain->sublo[i] + shift; - samplingWindowHi[i] = domain->subhi[i] + shift - margin[i]; - - // Check if processor cells are large enough. - // Node bounds must be at least four times as large as the atom interaction radius. - // Sampling window must be at least half as wise as the processor cell to cover the cell completely. - if(samplingWindowHi[i] - samplingWindowLo[i] + 1e-6 < (domain->subhi[i] - domain->sublo[i]) * 0.5) { - error->one(FLERR, "Per-node simulation cell is too small for fix sgcmc. Processor cell size must be at least 4 times cutoff radius."); - } - } - // Increase counter by one. - // Since we are only using the lower 3 bits of the integer value the alignment will - // be the same after 8 iterations. - samplingWindowPosition += 1; - - // Compile a list of atoms that are inside the sampling window. - samplingWindowAtoms.resize(0); - samplingWindowAtoms.reserve(atom->nlocal); - numSamplingWindowAtoms = 0; - numFixAtomsLocal = 0; - - const int *mask = atom->mask; - for(int ii = 0; ii < neighborList->inum; ii++) { - int i = neighborList->ilist[ii]; - if(mask[i] & groupbit) { - numFixAtomsLocal++; - const double* x = atom->x[i]; - // Is atom inside window region? - if(x[0] >= samplingWindowLo[0] && x[0] < samplingWindowHi[0] && - x[1] >= samplingWindowLo[1] && x[1] < samplingWindowHi[1] && - x[2] >= samplingWindowLo[2] && x[2] < samplingWindowHi[2]) - { - // Atoms within a distance of two times the interaction radius from the cell border - // are less often inside the sampling window than atoms in the center of the node cell, - // which are always inside the window. - // We therefore have to increase their probability here to make them chosen - // as often as the core atoms. - int multiplicity = 1; - for(int k=0; k < 3; k++) { - if(x[k] < domain->sublo[k] + margin[k] || - x[k] > domain->subhi[k] - margin[k]) - multiplicity *= 2; - } - - for(int m = 0; m < multiplicity; m++) - samplingWindowAtoms.push_back(ii); - - numSamplingWindowAtoms++; - } - } + margin[i] = interactionRadius * 2.0; + if (samplingWindowUserSize > 0.0) { + margin[i] = (domain->subhi[i] - domain->sublo[i]) * (1.0 - samplingWindowUserSize); + if (margin[i] < interactionRadius * 2.0) + oversizeWindow = true; } - return oversizeWindow; + double shift = (double)((samplingWindowPosition >> i) & 1) * margin[i]; + samplingWindowLo[i] = domain->sublo[i] + shift; + samplingWindowHi[i] = domain->subhi[i] + shift - margin[i]; + + // Check if processor cells are large enough. + // Node bounds must be at least four times as large as the atom interaction radius. + // Sampling window must be at least half as wise as the processor cell to cover the cell completely. + if (samplingWindowHi[i] - samplingWindowLo[i] + 1e-6 < (domain->subhi[i] - domain->sublo[i]) * 0.5) { + error->one(FLERR, "Per-node simulation cell is too small for fix sgcmc. Processor cell size must be at least 4 times cutoff radius."); + } + } + // Increase counter by one. + // Since we are only using the lower 3 bits of the integer value the alignment will + // be the same after 8 iterations. + samplingWindowPosition += 1; + + // Compile a list of atoms that are inside the sampling window. + samplingWindowAtoms.resize(0); + samplingWindowAtoms.reserve(atom->nlocal); + numSamplingWindowAtoms = 0; + numFixAtomsLocal = 0; + + const int *mask = atom->mask; + for (int ii = 0; ii < neighborList->inum; ii++) { + int i = neighborList->ilist[ii]; + if (mask[i] & groupbit) { + numFixAtomsLocal++; + const double* x = atom->x[i]; + // Is atom inside window region? + if (x[0] >= samplingWindowLo[0] && x[0] < samplingWindowHi[0] && + x[1] >= samplingWindowLo[1] && x[1] < samplingWindowHi[1] && + x[2] >= samplingWindowLo[2] && x[2] < samplingWindowHi[2]) + { + // Atoms within a distance of two times the interaction radius from the cell border + // are less often inside the sampling window than atoms in the center of the node cell, + // which are always inside the window. + // We therefore have to increase their probability here to make them chosen + // as often as the core atoms. + int multiplicity = 1; + for (int k=0; k < 3; k++) { + if (x[k] < domain->sublo[k] + margin[k] || + x[k] > domain->subhi[k] - margin[k]) + multiplicity *= 2; + } + + for (int m = 0; m < multiplicity; m++) + samplingWindowAtoms.push_back(ii); + + numSamplingWindowAtoms++; + } + } + } + + return oversizeWindow; } /********************************************************************* @@ -732,101 +712,101 @@ bool FixSemiGrandCanonicalMC::placeSamplingWindow() *********************************************************************/ double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) { - double p; - int m; - double const* rho = pairEAM->rho; - double* coeff; - double new_total_rho_i = 0.0; - double deltaE = 0.0; + double p; + int m; + double const* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + double deltaE = 0.0; - // Calculate change of electron density at the surrounding - // sites induced by the swapped atom. Then calculate the change of embedding energy for each neighbor atom. - // Also recalculate the total electron density at the site of the swapped atom. + // Calculate change of electron density at the surrounding + // sites induced by the swapped atom. Then calculate the change of embedding energy for each neighbor atom. + // Also recalculate the total electron density at the site of the swapped atom. - double xi = atom->x[flipAtom][0]; - double yi = atom->x[flipAtom][1]; - double zi = atom->x[flipAtom][2]; + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; - // Loop over all neighbors of the selected atom. - int* jlist = neighborList->firstneigh[flipAtomNL]; - int jnum = neighborList->numneigh[flipAtomNL]; - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; - double delx = xi - atom->x[j][0]; - double dely = yi - atom->x[j][1]; - double delz = zi - atom->x[j][2]; - double rsq = delx*delx + dely*dely + delz*delz; - if(rsq >= pairEAM->cutforcesq) continue; + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq >= pairEAM->cutforcesq) continue; - int jtype = atom->type[j]; - double r = sqrt(rsq); + int jtype = atom->type[j]; + double r = sqrt(rsq); - p = r * pairEAM->rdr + 1.0; - m = static_cast(p); - m = MIN(m, pairEAM->nr - 1); - p -= m; - p = MIN(p, 1.0); + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); - // Calculate change of pair energy ij. - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; - double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; - double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - deltaE += (newz2 - oldz2) / r; + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; + double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; + double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + deltaE += (newz2 - oldz2) / r; - // Calculate change of electron density at site j. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; - double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; - double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - double delta_rho = newrho_contr - oldrho_contr; + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; - // Sum total rho at site of swapped atom. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; - new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - // Calculate old embedding energy of atom j. - p = rho[j] * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; - double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - // Calculate new embedding energy of atom j. - p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; - m = static_cast(p); - m = MAX(1, MIN(m, pairEAM->nrho - 1)); - p -= m; - p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; - double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - - deltaE += newF - oldF; - } - - // Compute the change in embedding energy of the changing atom. - p = rho[flipAtom] * pairEAM->rdrho + 1.0; + // Calculate old embedding energy of atom j. + p = rho[j] * pairEAM->rdrho + 1.0; m = static_cast(p); m = MAX(1, MIN(m, pairEAM->nrho - 1)); p -= m; p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - p = new_total_rho_i * pairEAM->rdrho + 1.0; + // Calculate new embedding energy of atom j. + p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; m = static_cast(p); m = MAX(1, MIN(m, pairEAM->nrho - 1)); p -= m; p = MIN(p, 1.0); - coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; deltaE += newF - oldF; + } - return deltaE; + // Compute the change in embedding energy of the changing atom. + p = rho[flipAtom] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + p = new_total_rho_i * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + + return deltaE; } /********************************************************************* @@ -852,36 +832,36 @@ double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAto *********************************************************************/ double FixSemiGrandCanonicalMC::computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies) { - // This routine is called even when no trial move is being performed during the - // the current iteration to keep the parallel processors in sync. If no trial - // move is performed then the energy is calculated twice for the same state of the system. - if(flipAtom >= 0) { - // Change system. Perform trial move. - atom->type[flipAtom] = newSpecies; - } - // Transfer changed atom types of the real atoms to the ghost atoms. - communicationStage = 3; - comm->forward_comm(this); + // This routine is called even when no trial move is being performed during the + // the current iteration to keep the parallel processors in sync. If no trial + // move is performed then the energy is calculated twice for the same state of the system. + if (flipAtom >= 0) { + // Change system. Perform trial move. + atom->type[flipAtom] = newSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); - // Calculate new total energy. - double newEnergy = computeTotalEnergy(); + // Calculate new total energy. + double newEnergy = computeTotalEnergy(); - // Undo trial move. Restore old system state. - if(flipAtom >= 0) { - atom->type[flipAtom] = oldSpecies; - } - // Transfer changed atom types of the real atoms to the ghost atoms. - communicationStage = 3; - comm->forward_comm(this); + // Undo trial move. Restore old system state. + if (flipAtom >= 0) { + atom->type[flipAtom] = oldSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); - // Calculate old total energy. - double oldEnergy = computeTotalEnergy(); + // Calculate old total energy. + double oldEnergy = computeTotalEnergy(); - // Restore the correct electron densities and forces. - update->integrate->setup_minimal(0); - fetchGhostAtomElectronDensities(); + // Restore the correct electron densities and forces. + update->integrate->setup_minimal(0); + fetchGhostAtomElectronDensities(); - return newEnergy - oldEnergy; + return newEnergy - oldEnergy; } /********************************************************************* @@ -889,22 +869,22 @@ double FixSemiGrandCanonicalMC::computeEnergyChangeGeneric(int flipAtom, int old *********************************************************************/ double FixSemiGrandCanonicalMC::computeTotalEnergy() { - int eflag = 1; - int vflag = 0; + int eflag = 1; + int vflag = 0; - if(force->pair) force->pair->compute(eflag,vflag); + if (force->pair) force->pair->compute(eflag,vflag); - if(atom->molecular) { - if(force->bond) force->bond->compute(eflag,vflag); - if(force->angle) force->angle->compute(eflag,vflag); - if(force->dihedral) force->dihedral->compute(eflag,vflag); - if(force->improper) force->improper->compute(eflag,vflag); - } + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + } - if(force->kspace) force->kspace->compute(eflag,vflag); + if (force->kspace) force->kspace->compute(eflag,vflag); - update->eflag_global = update->ntimestep; - return compute_pe->compute_scalar(); + update->eflag_global = update->ntimestep; + return compute_pe->compute_scalar(); } /********************************************************************* @@ -928,66 +908,66 @@ double FixSemiGrandCanonicalMC::computeTotalEnergy() *********************************************************************/ void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) { - double p; - int m; - double* rho = pairEAM->rho; - double* coeff; - double new_total_rho_i = 0.0; + double p; + int m; + double* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; - // Change atom's type and mark it for exchange. - atom->type[flipAtom] = newSpecies; - changedAtoms[flipAtom] = true; + // Change atom's type and mark it for exchange. + atom->type[flipAtom] = newSpecies; + changedAtoms[flipAtom] = true; - // Rescale particle velocity vector to conserve kinetic energy. - double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); - atom->v[flipAtom][0] *= vScaleFactor; - atom->v[flipAtom][1] *= vScaleFactor; - atom->v[flipAtom][2] *= vScaleFactor; + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; - double xi = atom->x[flipAtom][0]; - double yi = atom->x[flipAtom][1]; - double zi = atom->x[flipAtom][2]; + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; - // Loop over all neighbors of the selected atom. - int* jlist = neighborList->firstneigh[flipAtomNL]; - int jnum = neighborList->numneigh[flipAtomNL]; - for(int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; - double delx = xi - atom->x[j][0]; - double dely = yi - atom->x[j][1]; - double delz = zi - atom->x[j][2]; - double rsq = delx*delx + dely*dely + delz*delz; - if(rsq >= pairEAM->cutforcesq) continue; + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq >= pairEAM->cutforcesq) continue; - int jtype = atom->type[j]; - double r = sqrt(rsq); - p = r * pairEAM->rdr + 1.0; - m = static_cast(p); - m = MIN(m, pairEAM->nr - 1); - p -= m; - p = MIN(p, 1.0); + int jtype = atom->type[j]; + double r = sqrt(rsq); + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); - // Calculate change of electron density at site j. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; - double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; - double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - double delta_rho = newrho_contr - oldrho_contr; + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; - rho[j] += delta_rho; + rho[j] += delta_rho; - // Sum total rho at site of swapped atom. - coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; - new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; - // Set the flag for this atom to indicate that its rho has changed and needs - // to be transfered at end of MC step. - changedAtoms[j] = true; - } + // Set the flag for this atom to indicate that its rho has changed and needs + // to be transfered at end of MC step. + changedAtoms[j] = true; + } - // Store newly calculated electron density at swapped atom site. - rho[flipAtom] = new_total_rho_i; + // Store newly calculated electron density at swapped atom site. + rho[flipAtom] = new_total_rho_i; } /********************************************************************* @@ -1007,15 +987,15 @@ void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldS *********************************************************************/ void FixSemiGrandCanonicalMC::flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies) { - atom->type[flipAtom] = newSpecies; + atom->type[flipAtom] = newSpecies; - // Rescale particle velocity vector to conserve kinetic energy. - double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); - atom->v[flipAtom][0] *= vScaleFactor; - atom->v[flipAtom][1] *= vScaleFactor; - atom->v[flipAtom][2] *= vScaleFactor; + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; - changedAtoms[flipAtom] = true; + changedAtoms[flipAtom] = true; } /********************************************************************* @@ -1023,14 +1003,15 @@ void FixSemiGrandCanonicalMC::flipAtomGeneric(int flipAtom, int oldSpecies, int *********************************************************************/ double FixSemiGrandCanonicalMC::compute_vector(int index) { - if(index == 0) return nAcceptedSwaps; - if(index == 1) return nRejectedSwaps; - index -= 1; - int totalAtoms = 0; - for(int i = 0; i < (int)speciesCounts.size(); i++) - totalAtoms += speciesCounts[i]; - if(index <= atom->ntypes) return (double)speciesCounts[index] / (totalAtoms > 0 ? totalAtoms : 1); - return 0.0; + if (index == 0) return nAcceptedSwaps; + if (index == 1) return nRejectedSwaps; + index -= 1; + int totalAtoms = 0; + for (int i = 0; i < (int)speciesCounts.size(); i++) + totalAtoms += speciesCounts[i]; + if (index <= atom->ntypes) + return (double)speciesCounts[index] / (totalAtoms > 0 ? totalAtoms : 1); + return 0.0; } /********************************************************************* @@ -1038,7 +1019,7 @@ double FixSemiGrandCanonicalMC::compute_vector(int index) *********************************************************************/ double FixSemiGrandCanonicalMC::memory_usage() { - return (changedAtoms.size() * sizeof(bool)) + - (samplingWindowAtoms.size() * sizeof(int)); + return (changedAtoms.size() * sizeof(bool)) + + (samplingWindowAtoms.size() * sizeof(int)); } diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h index 51bfb792bc..53620f8285 100644 --- a/src/MC/fix_sgcmc.h +++ b/src/MC/fix_sgcmc.h @@ -32,8 +32,6 @@ FixStyle(sgcmc,FixSemiGrandCanonicalMC); #include "fix.h" -#include - namespace LAMMPS_NS { class FixSemiGrandCanonicalMC : public Fix { From cf0a16a33c6449cac1f91e055abc3f15b2a579b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 20:42:19 -0500 Subject: [PATCH 41/46] remove comments for known functions --- src/MC/fix_sgcmc.h | 143 +++++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 82 deletions(-) diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h index 53620f8285..7a02141564 100644 --- a/src/MC/fix_sgcmc.h +++ b/src/MC/fix_sgcmc.h @@ -36,176 +36,155 @@ namespace LAMMPS_NS { class FixSemiGrandCanonicalMC : public Fix { public: - /// Fix class constructor. FixSemiGrandCanonicalMC(class LAMMPS *, int, char **); - /// Fix class destructor. ~FixSemiGrandCanonicalMC() override; - /******************** Virtual methods from Fix base class ************************/ - - /// The return value of this method specifies at which points the fix is invoked during the simulation. int setmask() override; - - /// This gets called by the system before the simulation starts. void init() override; - - /// Assigns the requested neighbor list to the fix. void init_list(int id, NeighList *ptr) override; - - /// Called after the EAM force calculation during each timestep. - /// This method triggers the MC routine from time to time. void post_force(int vflag) override; - - /// Lets the fix report one of its internal state variables to LAMMPS. double compute_vector(int index) override; - /// This is for MPI communication with neighbor nodes. int pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) override; void unpack_forward_comm(int n, int first, double *buf) override; int pack_reverse_comm(int n, int first, double *buf) override; void unpack_reverse_comm(int n, int *list, double *buf) override; - /// Reports the memory usage of this fix to LAMMPS. double memory_usage() override; /******************** Monte-Carlo routines ************************/ - /// This routine does one full MC step. + // This routine does one full MC step. void doMC(); - /// Fetches the electron densities for the local ghost atoms from the neighbor nodes. + // Fetches the electron densities for the local ghost atoms from the neighbor nodes. void fetchGhostAtomElectronDensities(); - /// Positions the sampling window inside the node's bounding box. + // Positions the sampling window inside the node's bounding box. bool placeSamplingWindow(); - /// Calculates the change in energy that swapping the given atom would produce. - /// This routine is for the case of a standard EAM potential. + // Calculates the change in energy that swapping the given atom would produce. + // This routine is for the case of a standard EAM potential. double computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); - /// Calculates the change in energy that swapping the given atom would produce. - /// This routine is for the general case of an arbitrary potential and - /// IS VERY SLOW! It computes the total energies of the system for the unmodified state - /// and for the modified state and then returns the difference of both values. - /// This routine should only be used for debugging purposes. + // Calculates the change in energy that swapping the given atom would produce. + // This routine is for the general case of an arbitrary potential and + // IS VERY SLOW! It computes the total energies of the system for the unmodified state + // and for the modified state and then returns the difference of both values. + // This routine should only be used for debugging purposes. double computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies); - /// Lets LAMMPS calculate the total potential energy of the system. + // Lets LAMMPS calculate the total potential energy of the system. double computeTotalEnergy(); - /// Flips the type of one atom and changes the electron densities of nearby atoms accordingly. - /// This routine is for the case of a standard EAM potential. + // Flips the type of one atom and changes the electron densities of nearby atoms accordingly. + // This routine is for the case of a standard EAM potential. void flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); - /// Flips the type of one atom and changes the electron densities and D values of nearby atoms accordingly. - /// This routine is for the case of the concentration dependent CD-EAM potential. - void flipAtomCDEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); - - /// Flips the type of one atom. - /// This routine is for the generic case. + // Flips the type of one atom. + // This routine is for the generic case. void flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies); - /// Transfers the locally changed electron densities and atom types to the neighbors. + // Transfers the locally changed electron densities and atom types to the neighbors. void communicateRhoAndTypes(); private: - /// The number of MD steps between each MC cycle. + // The number of MD steps between each MC cycle. int nevery_mdsteps; - /// The number of times the sampling window should be repositioned during - /// one MC cycle. + // The number of times the sampling window should be repositioned during one MC cycle. int numSamplingWindowMoves; - /// The fraction of atoms that should be swapped per MC step. + // The fraction of atoms that should be swapped per MC step. double swap_fraction; - /// The maximum interaction radius of all potentials. + // The maximum interaction radius of all potentials. double interactionRadius; - /// The inverse MC temperature. + // The inverse MC temperature. double beta; - /// Chemical potential differences for all species. The differences are relative to the chemical - /// potential of the first species. Note that this array is based on index 1 (not 0 as normal C arrays). - /// This means the first two elements of this vector are always zero. + // Chemical potential differences for all species. The differences are relative to the chemical + // potential of the first species. Note that this array is based on index 1 (not 0 as normal C arrays). + // This means the first two elements of this vector are always zero. std::vector deltamu; - /// Enables serial implementation without second rejection in the VCSGC ensemble. + // Enables serial implementation without second rejection in the VCSGC ensemble. bool serialMode; - /// The MC variance constraint parameter. + // The MC variance constraint parameter. double kappa; - /// The target concentration values for each species. The concentration of first species is - /// implicitely defined as one minues all other concentrations. Please note that this vector - /// is based on index 1. The first element at index 0 is not used. + // The target concentration values for each species. The concentration of first species is + // implicitely defined as one minues all other concentrations. Please note that this vector + // is based on index 1. The first element at index 0 is not used. std::vector targetConcentration; - /// The master seed value for the random number generators on all nodes. + // The master seed value for the random number generators on all nodes. int seed; - /// The random number generator that is in sync with all other nodes. + // The random number generator that is in sync with all other nodes. class RanPark *random; - /// The local random number generator for this proc only. + // The local random number generator for this proc only. class RanPark *localRandom; - /// The total number of atoms of the different species in the whole system. - /// Divide this by the total number of atoms to get the global concentration. - /// Since LAMMPS atom types start at index 1 this array is also based on index 1. - /// The first array element at index 0 is not used. + // The total number of atoms of the different species in the whole system. + // Divide this by the total number of atoms to get the global concentration. + // Since LAMMPS atom types start at index 1 this array is also based on index 1. + // The first array element at index 0 is not used. std::vector speciesCounts; - /// The full neighbor list used by this fix. + // The full neighbor list used by this fix. class NeighList *neighborList; - /// The user-defined size of the sampling window. It is specified as a fraction - /// of the processor's cell boundaries. - /// If this parameter is 0 then the default sampling window size is used. + // The user-defined size of the sampling window. It is specified as a fraction + // of the processor's cell boundaries. + // If this parameter is 0 then the default sampling window size is used. double samplingWindowUserSize; - /// This counter is increased each time the sampling window is repositioned. - /// The lowest 3 bits of this integer value specify the alignment of the sampling window in - /// the processor cell. That means that after 8 iterations the 8 corners have been sampled - /// and it starts at the first corner again. + // This counter is increased each time the sampling window is repositioned. + // The lowest 3 bits of this integer value specify the alignment of the sampling window in + // the processor cell. That means that after 8 iterations the 8 corners have been sampled + // and it starts at the first corner again. int samplingWindowPosition; - /// Array with indices of all atoms that are within the sampling window. - /// Note 1: that an atom can be more than once in this array if its multiplicity is greater than one. - /// Note 2: Indices are into the I array of the neighbor list and not into the atoms array. + // Array with indices of all atoms that are within the sampling window. + // Note 1: that an atom can be more than once in this array if its multiplicity is greater than on. + // Note 2: Indices are into the I array of the neighbor list and not into the atoms array. std::vector samplingWindowAtoms; - /// The number of atoms inside the sampling window. Counting each atom only once. + // The number of atoms inside the sampling window. Counting each atom only once. int numSamplingWindowAtoms; - /// The number of local atoms that are in the fix group. + // The number of local atoms that are in the fix group. int numFixAtomsLocal; - /// Pointer to the EAM potential class. - /// This is required to access the Rho arrays calculated by the potential class and its potential tables. + // Pointer to the EAM potential class. + // This is required to access the Rho arrays calculated by the potential class and its potential tables. class PairEAM *pairEAM; - /// This array contains a boolean value per atom (real and ghosts) that indicates whether - /// the electron density or another property at that site has been affected by one of the accepted MC swaps. + // This array contains a boolean value per atom (real and ghosts) that indicates whether + // the electron density or another property at that site has been affected by one of the accepted MC swaps. std::vector changedAtoms; - /// This counter indicates the current MPI communication stage to let the - /// pack/unpack routines know which data is being transmitted. + // This counter indicates the current MPI communication stage to let the + // pack/unpack routines know which data is being transmitted. int communicationStage; - /// The total number of accepted swaps during the last MC step. + // The total number of accepted swaps during the last MC step. int nAcceptedSwaps; - /// The total number of rejected swaps during the last MC step. + // The total number of rejected swaps during the last MC step. int nRejectedSwaps; - /// Keeps track of the current total potential energy. - /// This is only used when no routine is available that can efficiently calculate the - /// local energy change due to an atom swap. + // Keeps track of the current total potential energy. + // This is only used when no routine is available that can efficiently calculate the + // local energy change due to an atom swap. double totalPotentialEnergy; - /// A compute used to compute the total potential energy of the system. + // A compute used to compute the total potential energy of the system. class Compute *compute_pe; }; } // namespace LAMMPS_NS From 08a257c361cd60783b660a0849cfc05bad1e51eb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Dec 2022 20:55:53 -0500 Subject: [PATCH 42/46] small IWYU fix --- src/MC/fix_sgcmc.cpp | 1 - src/MC/fix_sgcmc.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp index 1cdb023450..a1a2931725 100644 --- a/src/MC/fix_sgcmc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -50,7 +50,6 @@ #include #include #include -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h index 7a02141564..e2cd15ec2f 100644 --- a/src/MC/fix_sgcmc.h +++ b/src/MC/fix_sgcmc.h @@ -42,7 +42,7 @@ class FixSemiGrandCanonicalMC : public Fix { int setmask() override; void init() override; - void init_list(int id, NeighList *ptr) override; + void init_list(int id, class NeighList *ptr) override; void post_force(int vflag) override; double compute_vector(int index) override; From d8b404cc428d7f35d9dcaf217e1dc98b076bf997 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Dec 2022 10:21:10 -0500 Subject: [PATCH 43/46] update docs, fix references, correct spelling issues --- doc/src/fix.rst | 2 +- doc/src/fix_sgcmc.rst | 83 ++++++++++++--------- doc/utils/sphinx-config/false_positives.txt | 3 + 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 9017666417..bd3c2eca8e 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -360,7 +360,7 @@ accelerated styles exist. * :doc:`saed/vtk ` - time-average the intensities from :doc:`compute saed ` * :doc:`setforce ` - set the force on each atom * :doc:`setforce/spin ` - set magnetic precession vectors on each atom -* :doc:`sgcmc ` - fix for hybrid semi-grandcanonical MD/MC simulations +* :doc:`sgcmc ` - fix for hybrid semi-grand canonical MD/MC simulations * :doc:`shake ` - SHAKE constraints on bonds and/or angles * :doc:`shardlow ` - integration of DPD equations of motion using the Shardlow splitting * :doc:`smd ` - applied a steered MD force to a group diff --git a/doc/src/fix_sgcmc.rst b/doc/src/fix_sgcmc.rst index b51aed6b60..c9a5df2e98 100644 --- a/doc/src/fix_sgcmc.rst +++ b/doc/src/fix_sgcmc.rst @@ -48,11 +48,11 @@ Description This command allows to carry out parallel hybrid molecular dynamics/Monte Carlo (MD/MC) simulations using the algorithms described -in [SadErhStu12]_. Simulations can be carried out in either the -semi-grandcanonical (SGC) or variance constrained semi-grandcanonical -(VC-SGC) ensemble [SadErh12]_. Only atom type swaps are performed by the -SGCMC fix. Relaxations are accounted for by the molecular dynamics -integration steps. +in :ref:`(Sadigh1) `. Simulations can be carried out in either +the semi-grand canonical (SGC) or variance constrained semi-grand +canonical (VC-SGC) ensemble :ref:`(Sadigh2) `. Only atom type +swaps are performed by the SGCMC fix. Relaxations are accounted for by +the molecular dynamics integration steps. This fix can be used with standard multi-element EAM potentials (:doc:`pair styles eam/alloy or eam/fs `) @@ -90,26 +90,26 @@ the simulation, e.g., to speed up equilibration at low temperatures. ------------ -The parameter *deltamu* is used to set the chemical potential -difference in the SGC MC algorithm (see Eq. 16 in [SadErhStu12]_). By convention -it is the difference of the chemical potentials of elements `B`, `C` -..., with respect to element A. When the simulation includes `N` -elements, `N-1` values must be specified. +The parameter *deltamu* is used to set the chemical potential difference +in the SGC MC algorithm (see Eq. 16 in :ref:`Sadigh1 `). By +convention it is the difference of the chemical potentials of elements +`B`, `C` ..., with respect to element A. When the simulation includes +`N` elements, `N-1` values must be specified. ------------ The variance-constrained SGC MC algorithm is activated if the keyword -*variance* is used. In that case the fix parameter *deltamu* -determines the effective average constraint in the parallel VC-SGC MC -algorithm (parameter :math:`\delta\mu_0` in Eq. (20) of [SadErhStu12]_). The -parameter *kappa* specifies the variance contraint (see Eqs. (20-21) -in [SadErhStu12]_). +*variance* is used. In that case the fix parameter *deltamu* determines +the effective average constraint in the parallel VC-SGC MC algorithm +(parameter :math:`\delta\mu_0` in Eq. (20) of :ref:`Sadigh1 +`). The parameter *kappa* specifies the variance constraint +(see Eqs. (20-21) in :ref:`Sadigh1 `). The parameter *conc* sets the target concentration (parameter -:math:`c_0` in Eqs. (20-21) of [SadErhStu12]_). The atomic concentrations refer -to components `B`, `C` ..., with `A` being set automatically. When the -simulation includes `N` elements, `N-1` concentration values must be -specified. +:math:`c_0` in Eqs. (20-21) of :ref:`Sadigh1 `). The atomic +concentrations refer to components `B`, `C` ..., with `A` being set +automatically. When the simulation includes `N` elements, `N-1` +concentration values must be specified. ------------ @@ -118,14 +118,15 @@ There are several technical parameters that can be set via optional flags. *randseed* is expected to be a positive integer number and is used to initialize the random number generator on each processor. -*window_size* controls the size of the sampling window in a parallel -MC simulation. The size has to lie between 0.5 and 1.0. Normally, this -parameter should be left unspecified which instructs the code to -choose the optimal window size automatically (see Sect. III.B and -Figure 6 in [SadErhStu12]_ for details). +*window_size* controls the size of the sampling window in a parallel MC +simulation. The size has to lie between 0.5 and 1.0. Normally, this +parameter should be left unspecified which instructs the code to choose +the optimal window size automatically (see Sect. III.B and Figure 6 in +:ref:`Sadigh1 ` for details). -The number of times the window is moved during a MC cycle is set using the -parameter *window_moves* (see Sect. III.B in [SadErhStu12]_ for details). +The number of times the window is moved during a MC cycle is set using +the parameter *window_moves* (see Sect. III.B in :ref:`Sadigh1 +` for details). ------------ @@ -150,14 +151,18 @@ components of the vector represent the following quantities: Restrictions ============ -At present the fix provides optimized subroutines for EAM and CD-EAM type potentials -(see above) that calculate potential energy changes due to *local* atom type swaps -very efficiently. -Other potentials are supported by using the generic potential functions. This, -however, will lead to exceedingly slow simulations since the it implies that the -energy of the *entire* system is recomputed at each MC trial step. -If other potentials are to be used it is strongly recommended to modify and optimize -the existing generic potential functions for this purpose. +This fix is part of the MC package. It is only enabled if LAMMPS was +built with that package. See the :doc:`Build package ` +page for more info. + +At present the fix provides optimized subroutines for EAM type +potentials (see above) that calculate potential energy changes due to +*local* atom type swaps very efficiently. Other potentials are +supported by using the generic potential functions. This, however, will +lead to exceedingly slow simulations since the it implies that the +energy of the *entire* system is recomputed at each MC trial step. If +other potentials are to be used it is strongly recommended to modify and +optimize the existing generic potential functions for this purpose. ------------ @@ -169,3 +174,13 @@ The optional parameters default to the following values: * *randseed* = 324234 * *window_moves* = 8 * *window_size* = automatic + +------------ + +.. _Sadigh1: + +**(Sadigh1)** B. Sadigh, P. Erhart, A. Stukowski, A. Caro, E. Martinez, and L. Zepeda-Ruiz, Phys. Rev. B **85**, 184203 (2012) + +.. _Sadigh2: + +**(Sadigh2)** B. Sadigh and P. Erhart, Phys. Rev. B **86**, 134204 (2012) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index ec7a54349d..faf8afdb31 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -692,6 +692,7 @@ delocalized Delong delr deltaHf +deltamu dem Dendrimer dendritic @@ -2500,6 +2501,7 @@ Nstart nstats Nstep Nsteps +nsteps nsteplast Nstop nsub @@ -3213,6 +3215,7 @@ setvel sfftw sfree Sg +sgcmc Shan Shanno Shapeev From 26ad12e2af34cf93765511f05d5d8ecedc4f0415 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Dec 2022 12:28:20 -0500 Subject: [PATCH 44/46] add code owner for gcmc and sgcmc fixes --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d31d157858..116812b649 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -64,6 +64,8 @@ src/MANYBODY/pair_atm.* @sergeylishchuk src/REPLICA/*_grem.* @dstelter92 src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel src/MISC/*_tracker.* @jtclemm +src/MC/fix_gcmc.* @athomps +src/MC/fix_sgcmc.* @athomps # core LAMMPS classes src/lammps.* @sjplimp From b70d60ef4897a63749c2461fa5f523545176cefb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Dec 2022 13:44:42 -0500 Subject: [PATCH 45/46] small documentation tweak --- doc/src/Packages_details.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index ecbc54233a..d90ee68b75 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -1486,8 +1486,9 @@ MC package Several fixes and a pair style that have Monte Carlo (MC) or MC-like attributes. These include fixes for creating, breaking, and swapping -bonds, for performing atomic swaps, and performing grand-canonical MC -(GCMC) or similar processes in conjunction with dynamics. +bonds, for performing atomic swaps, and performing grand canonical +MC (GCMC), semi-grand canonical MC (SGCMC), or similar processes in +conjunction with molecular dynamics (MD). **Supporting info:** @@ -1499,6 +1500,7 @@ bonds, for performing atomic swaps, and performing grand-canonical MC * :doc:`fix bond/swap ` * :doc:`fix charge/regulation ` * :doc:`fix gcmc ` +* :doc:`fix sgcmc ` * :doc:`fix tfmc ` * :doc:`fix widom ` * :doc:`pair_style dsmc ` From d2c77f1d0c59e27506a461b9aa8f4af98c357922 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Dec 2022 15:19:07 -0500 Subject: [PATCH 46/46] small tweaks from @athomps --- doc/src/fix_sgcmc.rst | 4 +++- src/MC/fix_sgcmc.cpp | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/src/fix_sgcmc.rst b/doc/src/fix_sgcmc.rst index c9a5df2e98..214c461a7c 100644 --- a/doc/src/fix_sgcmc.rst +++ b/doc/src/fix_sgcmc.rst @@ -159,10 +159,12 @@ At present the fix provides optimized subroutines for EAM type potentials (see above) that calculate potential energy changes due to *local* atom type swaps very efficiently. Other potentials are supported by using the generic potential functions. This, however, will -lead to exceedingly slow simulations since the it implies that the +lead to exceedingly slow simulations since it implies that the energy of the *entire* system is recomputed at each MC trial step. If other potentials are to be used it is strongly recommended to modify and optimize the existing generic potential functions for this purpose. +Also, the generic energy calculation can not be used for parallel +execution i.e. it only works with a single MPI process. ------------ diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp index a1a2931725..e03ad6cedc 100644 --- a/src/MC/fix_sgcmc.cpp +++ b/src/MC/fix_sgcmc.cpp @@ -247,6 +247,9 @@ void FixSemiGrandCanonicalMC::init() if (comm->me == 0) utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); + if (comm->nprocs > 1) + error->all(FLERR, "Can not run fix vcsgc with naive total energy calculation and more than one MPI process."); + // Create a compute that will provide the total energy of the system. // This is needed by computeTotalEnergy(). char* id_pe = (char*)"thermo_pe";