From 284c1f2d04ac002333085b767ea1fc4c4eecaa01 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 30 Jan 2007 00:31:11 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@255 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/CLASS2/pair_lj_class2_coul_long.h | 51 + src/DPD/atom_vec_dpd.cpp | 212 ++ src/DPD/atom_vec_dpd.h | 37 + src/GRANULAR/atom_vec_granular.cpp | 744 +++++ src/GRANULAR/atom_vec_granular.h | 63 + src/KSPACE/pair_lj_charmm_coul_long.h | 66 + src/MAKE/Makefile.g++_meam | 45 + src/MAKE/Makefile.linux_meam | 45 + src/MANYBODY/pair_eam.h | 106 + src/MOLECULE/atom_vec_angle.cpp | 694 +++++ src/MOLECULE/atom_vec_angle.h | 61 + src/MOLECULE/atom_vec_bond.cpp | 619 ++++ src/MOLECULE/atom_vec_bond.h | 58 + src/MOLECULE/atom_vec_molecular.cpp | 887 ++++++ src/MOLECULE/atom_vec_molecular.h | 68 + src/Notes | 2954 ++++++++++++++++++ src/OPT/Install.csh | 40 + src/OPT/pair_eam_alloy_opt.cpp | 24 + src/OPT/pair_eam_alloy_opt.h | 33 + src/OPT/pair_eam_fs_opt.cpp | 24 + src/OPT/pair_eam_fs_opt.h | 34 + src/OPT/pair_eam_opt.cpp | 69 + src/OPT/pair_eam_opt.h | 345 +++ src/OPT/pair_lj_charmm_coul_long_opt.cpp | 64 + src/OPT/pair_lj_charmm_coul_long_opt.h | 363 +++ src/OPT/pair_lj_cut_opt.cpp | 63 + src/OPT/pair_lj_cut_opt.h | 226 ++ src/OPT/pair_morse_opt.cpp | 63 + src/OPT/pair_morse_opt.h | 232 ++ src/OPT/style_opt.h | 30 + src/atom_vec.cpp | 42 + src/atom_vec.h | 83 + src/atom_vec_atomic.cpp | 455 +++ src/atom_vec_atomic.h | 51 + src/atom_vec_charge.cpp | 520 ++++ src/atom_vec_charge.h | 55 + src/atom_vec_hybrid.cpp | 466 +++ src/atom_vec_hybrid.h | 58 + src/compute.cpp | 89 + src/compute.h | 71 + src/compute_centro_atom.cpp | 290 ++ src/compute_centro_atom.h | 41 + src/compute_epair_atom.cpp | 203 ++ src/compute_epair_atom.h | 38 + src/compute_etotal_atom.cpp | 124 + src/compute_etotal_atom.h | 37 + src/compute_ke_atom.cpp | 104 + src/compute_ke_atom.h | 36 + src/compute_pressure.cpp | 210 ++ src/compute_pressure.h | 44 + src/compute_rotate_dipole.cpp | 95 + src/compute_rotate_dipole.h | 34 + src/compute_rotate_gran.cpp | 68 + src/compute_rotate_gran.h | 33 + src/compute_stress_atom.cpp | 255 ++ src/compute_stress_atom.h | 39 + src/compute_temp.cpp | 128 + src/compute_temp.h | 38 + src/compute_temp_partial.cpp | 134 + src/compute_temp_partial.h | 39 + src/compute_temp_ramp.cpp | 213 ++ src/compute_temp_ramp.h | 42 + src/compute_temp_region.cpp | 133 + src/compute_temp_region.h | 35 + src/fix_shear_history.cpp | 284 ++ src/nialhjea_fs | 3608 ++++++++++++++++++++++ src/niu3.eam | 304 ++ src/pointers.h | 79 + src/style_meam.h | 0 src/style_opt.h | 0 70 files changed, 16898 insertions(+) create mode 100644 src/CLASS2/pair_lj_class2_coul_long.h create mode 100644 src/DPD/atom_vec_dpd.cpp create mode 100644 src/DPD/atom_vec_dpd.h create mode 100644 src/GRANULAR/atom_vec_granular.cpp create mode 100644 src/GRANULAR/atom_vec_granular.h create mode 100644 src/KSPACE/pair_lj_charmm_coul_long.h create mode 100755 src/MAKE/Makefile.g++_meam create mode 100755 src/MAKE/Makefile.linux_meam create mode 100644 src/MANYBODY/pair_eam.h create mode 100644 src/MOLECULE/atom_vec_angle.cpp create mode 100644 src/MOLECULE/atom_vec_angle.h create mode 100644 src/MOLECULE/atom_vec_bond.cpp create mode 100644 src/MOLECULE/atom_vec_bond.h create mode 100644 src/MOLECULE/atom_vec_molecular.cpp create mode 100644 src/MOLECULE/atom_vec_molecular.h create mode 100644 src/Notes create mode 100644 src/OPT/Install.csh create mode 100644 src/OPT/pair_eam_alloy_opt.cpp create mode 100644 src/OPT/pair_eam_alloy_opt.h create mode 100644 src/OPT/pair_eam_fs_opt.cpp create mode 100644 src/OPT/pair_eam_fs_opt.h create mode 100644 src/OPT/pair_eam_opt.cpp create mode 100644 src/OPT/pair_eam_opt.h create mode 100644 src/OPT/pair_lj_charmm_coul_long_opt.cpp create mode 100644 src/OPT/pair_lj_charmm_coul_long_opt.h create mode 100644 src/OPT/pair_lj_cut_opt.cpp create mode 100644 src/OPT/pair_lj_cut_opt.h create mode 100644 src/OPT/pair_morse_opt.cpp create mode 100644 src/OPT/pair_morse_opt.h create mode 100644 src/OPT/style_opt.h create mode 100644 src/atom_vec.cpp create mode 100644 src/atom_vec.h create mode 100644 src/atom_vec_atomic.cpp create mode 100644 src/atom_vec_atomic.h create mode 100644 src/atom_vec_charge.cpp create mode 100644 src/atom_vec_charge.h create mode 100644 src/atom_vec_hybrid.cpp create mode 100644 src/atom_vec_hybrid.h create mode 100644 src/compute.cpp create mode 100644 src/compute.h create mode 100644 src/compute_centro_atom.cpp create mode 100644 src/compute_centro_atom.h create mode 100644 src/compute_epair_atom.cpp create mode 100644 src/compute_epair_atom.h create mode 100644 src/compute_etotal_atom.cpp create mode 100644 src/compute_etotal_atom.h create mode 100644 src/compute_ke_atom.cpp create mode 100644 src/compute_ke_atom.h create mode 100644 src/compute_pressure.cpp create mode 100644 src/compute_pressure.h create mode 100644 src/compute_rotate_dipole.cpp create mode 100644 src/compute_rotate_dipole.h create mode 100644 src/compute_rotate_gran.cpp create mode 100644 src/compute_rotate_gran.h create mode 100644 src/compute_stress_atom.cpp create mode 100644 src/compute_stress_atom.h create mode 100644 src/compute_temp.cpp create mode 100644 src/compute_temp.h create mode 100644 src/compute_temp_partial.cpp create mode 100644 src/compute_temp_partial.h create mode 100644 src/compute_temp_ramp.cpp create mode 100644 src/compute_temp_ramp.h create mode 100644 src/compute_temp_region.cpp create mode 100644 src/compute_temp_region.h create mode 100644 src/fix_shear_history.cpp create mode 100644 src/nialhjea_fs create mode 100755 src/niu3.eam create mode 100644 src/pointers.h create mode 100644 src/style_meam.h create mode 100644 src/style_opt.h diff --git a/src/CLASS2/pair_lj_class2_coul_long.h b/src/CLASS2/pair_lj_class2_coul_long.h new file mode 100644 index 0000000000..b087963bc3 --- /dev/null +++ b/src/CLASS2/pair_lj_class2_coul_long.h @@ -0,0 +1,51 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef PAIR_LJ_CLASS2_COUL_LONG_H +#define PAIR_LJ_CLASS2_COUL_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJClass2CoulLong : public Pair { + public: + PairLJClass2CoulLong(class LAMMPS *); + ~PairLJClass2CoulLong(); + void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + void single(int, int, int, int, double, double, double, int, One &); + + void extract_long(double *); + + private: + double cut_lj_global; + double **cut_lj,**cut_ljsq; + double cut_coul,cut_coulsq; + double **epsilon,**sigma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double g_ewald; + + void allocate(); +}; + +} + +#endif diff --git a/src/DPD/atom_vec_dpd.cpp b/src/DPD/atom_vec_dpd.cpp new file mode 100644 index 0000000000..51d476cd13 --- /dev/null +++ b/src/DPD/atom_vec_dpd.cpp @@ -0,0 +1,212 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_dpd.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecDPD::AtomVecDPD(LAMMPS *lmp, int narg, char **arg) : + AtomVecAtomic(lmp, narg, arg) +{ + mass_type = 1; + comm_x_only = 0; + size_comm = 6; + size_reverse = 3; + size_border = 9; + size_data_atom = 5; + size_data_vel = 4; + xcol_data = 3; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecDPD::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + v[i][0] = 0.0; + v[i][1] = 0.0; + v[i][2] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::pack_comm_one(int i, double *buf) +{ + buf[0] = v[i][0]; + buf[1] = v[i][1]; + buf[2] = v[i][2]; + return 3; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecDPD::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::unpack_comm_one(int i, double *buf) +{ + v[i][0] = buf[0]; + v[i][1] = buf[1]; + v[i][2] = buf[2]; + return 3; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::pack_border_one(int i, double *buf) +{ + buf[0] = v[i][0]; + buf[1] = v[i][1]; + buf[2] = v[i][2]; + return 3; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecDPD::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecDPD::unpack_border_one(int i, double *buf) +{ + v[i][0] = buf[0]; + v[i][1] = buf[1]; + v[i][2] = buf[2]; + return 3; +} + diff --git a/src/DPD/atom_vec_dpd.h b/src/DPD/atom_vec_dpd.h new file mode 100644 index 0000000000..726f752cd5 --- /dev/null +++ b/src/DPD/atom_vec_dpd.h @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_DPD_H +#define ATOM_VEC_DPD_H + +#include "atom_vec_atomic.h" + +namespace LAMMPS_NS { + +class AtomVecDPD : public AtomVecAtomic { + public: + AtomVecDPD(class LAMMPS *, int, char **); + void zero_ghost(int, int); + int pack_comm(int, int *, double *, int *); + int pack_comm_one(int, double *); + void unpack_comm(int, int, double *); + int unpack_comm_one(int, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); +}; + +} + +#endif diff --git a/src/GRANULAR/atom_vec_granular.cpp b/src/GRANULAR/atom_vec_granular.cpp new file mode 100644 index 0000000000..8744d79c8f --- /dev/null +++ b/src/GRANULAR/atom_vec_granular.cpp @@ -0,0 +1,744 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "math.h" +#include "stdlib.h" +#include "atom_vec_granular.h" +#include "atom.h" +#include "domain.h" +#include "force.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecGranular::AtomVecGranular(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + comm_x_only = comm_f_only = 0; + size_comm = 9; + size_reverse = 6; + size_border = 14; + size_data_atom = 7; + size_data_vel = 7; + xcol_data = 5; + + PI = 4.0*atan(1.0); +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecGranular::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + radius = atom->radius = (double *) + memory->srealloc(atom->radius,nmax*sizeof(double),"atom:radius"); + density = atom->density = (double *) + memory->srealloc(atom->density,nmax*sizeof(double),"atom:density"); + rmass = atom->rmass = (double *) + memory->srealloc(atom->rmass,nmax*sizeof(double),"atom:rmass"); + + phix = atom->phix = + memory->grow_2d_double_array(atom->phix,nmax,3,"atom:phix"); + phiv = atom->phiv = + memory->grow_2d_double_array(atom->phiv,nmax,3,"atom:phiv"); + phia = atom->phia = + memory->grow_2d_double_array(atom->phia,nmax,3,"atom:phia"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecGranular::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + radius = atom->radius; + density = atom->density; + rmass = atom->rmass; + phix = atom->phix; + phiv = atom->phiv; + phia = atom->phia; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for owned atom I + data in copy(), not including tag,type,mask,image,x,v +------------------------------------------------------------------------- */ + +void AtomVecGranular::zero_owned(int i) +{ + radius[i] = 0.0; + density[i] = 0.0; + rmass[i] = 0.0; + phix[i][0] = 0.0; + phix[i][1] = 0.0; + phix[i][2] = 0.0; + phiv[i][0] = 0.0; + phiv[i][1] = 0.0; + phiv[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecGranular::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + v[i][0] = 0.0; + v[i][1] = 0.0; + v[i][2] = 0.0; + radius[i] = 0.0; + rmass[i] = 0.0; + phiv[i][0] = 0.0; + phiv[i][1] = 0.0; + phiv[i][2] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecGranular::copy(int i, int j) +{ + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + radius[j] = radius[i]; + density[j] = density[i]; + rmass[j] = rmass[i]; + phix[j][0] = phix[i][0]; + phix[j][1] = phix[i][1]; + phix[j][2] = phix[i][2]; + phiv[j][0] = phiv[i][0]; + phiv[j][1] = phiv[i][1]; + phiv[j][2] = phiv[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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + buf[m++] = phiv[j][0]; + buf[m++] = phiv[j][1]; + buf[m++] = phiv[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + buf[m++] = phiv[j][0]; + buf[m++] = phiv[j][1]; + buf[m++] = phiv[j][2]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_comm_one(int i, double *buf) +{ + buf[0] = v[i][0]; + buf[1] = v[i][1]; + buf[2] = v[i][2]; + buf[3] = phiv[i][0]; + buf[4] = phiv[i][1]; + buf[5] = phiv[i][2]; + return 6; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecGranular::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + phiv[i][0] = buf[m++]; + phiv[i][1] = buf[m++]; + phiv[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::unpack_comm_one(int i, double *buf) +{ + v[i][0] = buf[0]; + v[i][1] = buf[1]; + v[i][2] = buf[2]; + phiv[i][0] = buf[3]; + phiv[i][1] = buf[4]; + phiv[i][2] = buf[5]; + return 6; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + buf[m++] = phia[i][0]; + buf[m++] = phia[i][1]; + buf[m++] = phia[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_reverse_one(int i, double *buf) +{ + buf[0] = phia[i][0]; + buf[1] = phia[i][1]; + buf[2] = phia[i][2]; + return 3; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecGranular::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + phia[j][0] += buf[m++]; + phia[j][1] += buf[m++]; + phia[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::unpack_reverse_one(int i, double *buf) +{ + phia[i][0] = buf[0]; + phia[i][1] = buf[1]; + phia[i][2] = buf[2]; + return 3; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + buf[m++] = radius[j]; + buf[m++] = rmass[j]; + buf[m++] = phiv[j][0]; + buf[m++] = phiv[j][1]; + buf[m++] = phiv[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + buf[m++] = radius[j]; + buf[m++] = rmass[j]; + buf[m++] = phiv[j][0]; + buf[m++] = phiv[j][1]; + buf[m++] = phiv[j][2]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::pack_border_one(int i, double *buf) +{ + buf[0] = v[i][0]; + buf[1] = v[i][1]; + buf[2] = v[i][2]; + buf[3] = radius[i]; + buf[4] = rmass[i]; + buf[5] = phiv[i][0]; + buf[6] = phiv[i][1]; + buf[7] = phiv[i][2]; + return 8; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecGranular::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + radius[i] = buf[m++]; + rmass[i] = buf[m++]; + phiv[i][0] = buf[m++]; + phiv[i][1] = buf[m++]; + phiv[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::unpack_border_one(int i, double *buf) +{ + v[i][0] = buf[0]; + v[i][1] = buf[1]; + v[i][2] = buf[2]; + radius[i] = buf[3]; + rmass[i] = buf[4]; + phiv[i][0] = buf[5]; + phiv[i][1] = buf[6]; + phiv[i][2] = buf[7]; + return 8; +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecGranular::pack_exchange(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + + buf[m++] = radius[i]; + buf[m++] = density[i]; + buf[m++] = rmass[i]; + buf[m++] = phix[i][0]; + buf[m++] = phix[i][1]; + buf[m++] = phix[i][2]; + buf[m++] = phiv[i][0]; + buf[m++] = phiv[i][1]; + buf[m++] = phiv[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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecGranular::unpack_exchange(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + + radius[nlocal] = buf[m++]; + density[nlocal] = buf[m++]; + rmass[nlocal] = buf[m++]; + phix[nlocal][0] = buf[m++]; + phix[nlocal][1] = buf[m++]; + phix[nlocal][2] = buf[m++]; + phiv[nlocal][0] = buf[m++]; + phiv[nlocal][1] = buf[m++]; + phiv[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]); + + atom->nlocal++; + return m; +} + +/* ---------------------------------------------------------------------- + size of restart data for all atoms owned by this proc + include extra data stored by fixes +------------------------------------------------------------------------- */ + +int AtomVecGranular::size_restart() +{ + int i; + + int nlocal = atom->nlocal; + int n = 19 * 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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecGranular::size_restart_one(int i) +{ + return 19; +} + +/* ---------------------------------------------------------------------- + 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 AtomVecGranular::pack_restart(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + buf[m++] = radius[i]; + buf[m++] = density[i]; + buf[m++] = phix[i][0]; + buf[m++] = phix[i][1]; + buf[m++] = phix[i][2]; + buf[m++] = phiv[i][0]; + buf[m++] = phiv[i][1]; + buf[m++] = phiv[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 AtomVecGranular::unpack_restart(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + radius[nlocal] = buf[m++]; + density[nlocal] = buf[m++]; + if (force->dimension == 3) + rmass[nlocal] = 4.0*PI/3.0 * + radius[nlocal]*radius[nlocal]*radius[nlocal] * density[nlocal]; + else + rmass[nlocal] = PI * radius[nlocal]*radius[nlocal] * density[nlocal]; + + phix[nlocal][0] = buf[m++]; + phix[nlocal][1] = buf[m++]; + phix[nlocal][2] = buf[m++]; + phiv[nlocal][0] = buf[m++]; + phiv[nlocal][1] = buf[m++]; + phiv[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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecGranular::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + radius[nlocal] = 0.5; + density[nlocal] = 1.0; + if (force->dimension == 3) + rmass[nlocal] = 4.0*PI/3.0 * + radius[nlocal]*radius[nlocal]*radius[nlocal] * density[nlocal]; + else + rmass[nlocal] = PI * radius[nlocal]*radius[nlocal] * density[nlocal]; + phix[nlocal][0] = 0.0; + phix[nlocal][1] = 0.0; + phix[nlocal][2] = 0.0; + phiv[nlocal][0] = 0.0; + phiv[nlocal][1] = 0.0; + phiv[nlocal][2] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecGranular::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + type[nlocal] = atoi(values[1]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + radius[nlocal] = 0.5 * atof(values[2]); + density[nlocal] = atof(values[3]); + if (force->dimension == 3) + rmass[nlocal] = 4.0*PI/3.0 * + radius[nlocal]*radius[nlocal]*radius[nlocal] * density[nlocal]; + else + rmass[nlocal] = PI * radius[nlocal]*radius[nlocal] * density[nlocal]; + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + phix[nlocal][0] = 0.0; + phix[nlocal][1] = 0.0; + phix[nlocal][2] = 0.0; + phiv[nlocal][0] = 0.0; + phiv[nlocal][1] = 0.0; + phiv[nlocal][2] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack a single line from Velocity section of data file +------------------------------------------------------------------------- */ + +void AtomVecGranular::data_vel(int m, char *line, int ihybrid) +{ + int tmp; + sscanf(line,"%d %lg %lg %lg %lg %lg %lg", + &tmp,&v[m][0],&v[m][1],&v[m][2],&phiv[m][0],&phiv[m][1],&phiv[m][2]); +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecGranular::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + if (atom->memcheck("radius")) bytes += nmax * sizeof(double); + if (atom->memcheck("density")) bytes += nmax * sizeof(double); + if (atom->memcheck("rmass")) bytes += nmax * sizeof(double); + if (atom->memcheck("phix")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("phiv")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("phia")) bytes += nmax*3 * sizeof(double); + + return bytes; +} diff --git a/src/GRANULAR/atom_vec_granular.h b/src/GRANULAR/atom_vec_granular.h new file mode 100644 index 0000000000..30987ef710 --- /dev/null +++ b/src/GRANULAR/atom_vec_granular.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_GRANULAR_H +#define ATOM_VEC_GRANULAR_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecGranular : public AtomVec { + public: + AtomVecGranular(class LAMMPS *, int, char **); + ~AtomVecGranular() {} + void grow(int); + void reset_ptrs(); + void zero_owned(int); + void zero_ghost(int, int); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + int pack_comm_one(int, double *); + void unpack_comm(int, int, double *); + int unpack_comm_one(int, double *); + int pack_reverse(int, int, double *); + int pack_reverse_one(int, double *); + void unpack_reverse(int, int *, double *); + int unpack_reverse_one(int, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + void data_vel(int, char *, int); + int memory_usage(); + + private: + double PI; + int *tag,*type,*mask,*image; + double **x,**v,**f; + double *radius,*density,*rmass; + double **phix,**phiv,**phia; +}; + +} + +#endif diff --git a/src/KSPACE/pair_lj_charmm_coul_long.h b/src/KSPACE/pair_lj_charmm_coul_long.h new file mode 100644 index 0000000000..13dc9526a9 --- /dev/null +++ b/src/KSPACE/pair_lj_charmm_coul_long.h @@ -0,0 +1,66 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef PAIR_LJ_CHARMM_COUL_LONG_H +#define PAIR_LJ_CHARMM_COUL_LONG_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJCharmmCoulLong : public Pair { + public: + PairLJCharmmCoulLong(class LAMMPS *); + ~PairLJCharmmCoulLong(); + void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + void single(int, int, int, int, double, double, double, int, One &); + + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); + void extract_charmm(double ***, double ***, double ***, double ***, int *); + void extract_long(double *); + + protected: + double cut_lj_inner,cut_lj; + double cut_lj_innersq,cut_ljsq; + double cut_coul,cut_coulsq; + double cut_bothsq; + double denom_lj; + double **epsilon,**sigma,**eps14,**sigma14; + double **lj1,**lj2,**lj3,**lj4,**offset; + double **lj14_1,**lj14_2,**lj14_3,**lj14_4; + double *cut_respa; + double g_ewald; + + double tabinnersq; + double *rtable,*drtable,*ftable,*dftable,*ctable,*dctable; + double *etable,*detable,*ptable,*dptable,*vtable,*dvtable; + int ncoulshiftbits,ncoulmask; + + void allocate(); + void init_tables(); + void free_tables(); +}; + +} + +#endif diff --git a/src/MAKE/Makefile.g++_meam b/src/MAKE/Makefile.g++_meam new file mode 100755 index 0000000000..3e5ac6771a --- /dev/null +++ b/src/MAKE/Makefile.g++_meam @@ -0,0 +1,45 @@ +# g++_meam = RedHat Linux box, g++, MPICH, FFTW, MEAM + +SHELL = /bin/sh +#.IGNORE: + +# System-specific settings + +CC = g++ +CCFLAGS = -g -O -I/home/sjplimp/tools/mpich/include \ + -I/home/sjplimp/tools/fftw/include -DFFT_FFTW -DGZIP +DEPFLAGS = -M +LINK = g++ +LINKFLAGS = -g -O -L/home/sjplimp/tools/mpich/lib \ + -L/home/sjplimp/tools/fftw/lib \ + -L/home/sjplimp/lammps/lib/meam \ + -L/opt/intel/fc/9.0/lib +USRLIB = -lfftw -lmpich -lmeam +SYSLIB = -lifcore +ARCHIVE = ar +ARFLAGS = -rc +SIZE = size + +# Link target + +$(EXE): $(OBJ) + $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE) + $(SIZE) $(EXE) + +# Library target + +lib: $(OBJ) + $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) + +# Compilation rules + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< + +%.d:%.cpp + $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@ + +# Individual dependencies + +DEPENDS = $(OBJ:.o=.d) +include $(DEPENDS) diff --git a/src/MAKE/Makefile.linux_meam b/src/MAKE/Makefile.linux_meam new file mode 100755 index 0000000000..2de4f47fcd --- /dev/null +++ b/src/MAKE/Makefile.linux_meam @@ -0,0 +1,45 @@ +# linux = RedHat Linux box, Intel icc, MPICH, FFTW, MEAM + +SHELL = /bin/sh +#.IGNORE: + +# System-specific settings + +CC = icc +CCFLAGS = -O -I/home/sjplimp/tools/mpich/include \ + -I/home/sjplimp/tools/fftw/include -DFFT_FFTW -DGZIP +DEPFLAGS = -M +LINK = icc +LINKFLAGS = -O -L/home/sjplimp/tools/mpich/lib \ + -L/home/sjplimp/tools/fftw/lib \ + -L/home/sjplimp/lammps/lib/meam \ + -L/opt/intel/fc/9.0/lib +USRLIB = -lfftw -lmpich -lmeam +SYSLIB = -lcxa -lunwind -lstdc++ -lifcore +ARCHIVE = ar +ARFLAGS = -rc +SIZE = size + +# Link target + +$(EXE): $(OBJ) + $(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE) + $(SIZE) $(EXE) + +# Library target + +lib: $(OBJ) + $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) + +# Compilation rules + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< + +%.d:%.cpp + $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@ + +# Individual dependencies + +DEPENDS = $(OBJ:.o=.d) +include $(DEPENDS) diff --git a/src/MANYBODY/pair_eam.h b/src/MANYBODY/pair_eam.h new file mode 100644 index 0000000000..82717adaad --- /dev/null +++ b/src/MANYBODY/pair_eam.h @@ -0,0 +1,106 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef PAIR_EAM_H +#define PAIR_EAM_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairEAM : public Pair { + public: + PairEAM(class LAMMPS *); + virtual ~PairEAM(); + void compute(int, int); + void settings(int, char **); + virtual void coeff(int, char **); + double init_one(int, int); + void init_style(); + void single(int, int, int, int, double, double, double, int, One &); + + void single_embed(int, int, double &); + + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + int memory_usage(); + + void extract_eam(double *, double **); + + void foo(); + + protected: + double cutforcesq,cutmax; + + // per-atom arrays + + int nmax; + double *rho,*fp; + + // potentials as file data + + int *map; // which element each atom type maps to + + struct Funcfl { + char *file; + int nrho,nr; + double drho,dr,cut,mass; + double *frho,*rhor,*zr; + }; + Funcfl *funcfl; + int nfuncfl; + + struct Setfl { + char **elements; + int nelements,nrho,nr; + double drho,dr,cut; + double *mass; + double **frho,**rhor,***z2r; + }; + Setfl *setfl; + + struct Fs { + char **elements; + int nelements,nrho,nr; + double drho,dr,cut; + double *mass; + double **frho,***rhor,***z2r; + }; + Fs *fs; + + // potentials as array data + + int nrho,nr; + int nfrho,nrhor,nz2r; + double **frho,**rhor,**z2r; + int *type2frho,**type2rhor,**type2z2r; + + // potentials in spline form used for force computation + + double dr,rdr,drho,rdrho; + double ***rhor_spline,***frho_spline,***z2r_spline; + + void allocate(); + void array2spline(); + void interpolate(int, double, double *, double **); + void grab(FILE *, int, double *); + + virtual void read_file(char *); + virtual void file2array(); +}; + +} + +#endif diff --git a/src/MOLECULE/atom_vec_angle.cpp b/src/MOLECULE/atom_vec_angle.cpp new file mode 100644 index 0000000000..ec86151237 --- /dev/null +++ b/src/MOLECULE/atom_vec_angle.cpp @@ -0,0 +1,694 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_angle.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(A,B) ((A) < (B)) ? (A) : (B) +#define MAX(A,B) ((A) > (B)) ? (A) : (B) + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecAngle::AtomVecAngle(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + molecular = 1; + bonds_allow = 1; + angles_allow = 1; + mass_type = 1; + size_comm = 3; + size_reverse = 3; + size_border = 7; + size_data_atom = 6; + size_data_vel = 4; + xcol_data = 4; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecAngle::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + molecule = atom->molecule = (int *) + memory->srealloc(atom->molecule,nmax*sizeof(int),"atom:molecule"); + + nspecial = atom->nspecial = + memory->grow_2d_int_array(atom->nspecial,nmax,3,"atom:nspecial"); + special = atom->special = + memory->grow_2d_int_array(atom->special,nmax,atom->maxspecial, + "atom:special"); + + num_bond = atom->num_bond = (int *) + memory->srealloc(atom->num_bond,nmax*sizeof(int),"atom:num_bond"); + bond_type = atom->bond_type = + memory->grow_2d_int_array(atom->bond_type,nmax,atom->bond_per_atom, + "atom:bond_type"); + bond_atom = atom->bond_atom = + memory->grow_2d_int_array(atom->bond_atom,nmax,atom->bond_per_atom, + "atom:bond_atom"); + + num_angle = atom->num_angle = (int *) + memory->srealloc(atom->num_angle,nmax*sizeof(int),"atom:num_angle"); + angle_type = atom->angle_type = + memory->grow_2d_int_array(atom->angle_type,nmax,atom->angle_per_atom, + "atom:angle_type"); + angle_atom1 = atom->angle_atom1 = + memory->grow_2d_int_array(atom->angle_atom1,nmax,atom->angle_per_atom, + "atom:angle_atom1"); + angle_atom2 = atom->angle_atom2 = + memory->grow_2d_int_array(atom->angle_atom2,nmax,atom->angle_per_atom, + "atom:angle_atom2"); + angle_atom3 = atom->angle_atom3 = + memory->grow_2d_int_array(atom->angle_atom3,nmax,atom->angle_per_atom, + "atom:angle_atom3"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAngle::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + molecule = atom->molecule; + nspecial = atom->nspecial; + special = atom->special; + + num_bond = atom->num_bond; + bond_type = atom->bond_type; + bond_atom = atom->bond_atom; + + num_angle = atom->num_angle; + angle_type = atom->angle_type; + angle_atom1 = atom->angle_atom1; + angle_atom2 = atom->angle_atom2; + angle_atom3 = atom->angle_atom3; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for owned atom I + data in copy(), not including tag,type,mask,image,x,v +------------------------------------------------------------------------- */ + +void AtomVecAngle::zero_owned(int i) +{ + molecule[i] = 0; + num_bond[i] = 0; + num_angle[i] = 0; + nspecial[i][0] = 0; + nspecial[i][1] = 0; + nspecial[i][2] = 0; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecAngle::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + molecule[i] = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAngle::copy(int i, int j) +{ + int k; + + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + molecule[j] = molecule[i]; + + num_bond[j] = num_bond[i]; + for (k = 0; k < num_bond[j]; k++) { + bond_type[j][k] = bond_type[i][k]; + bond_atom[j][k] = bond_atom[i][k]; + } + + num_angle[j] = num_angle[i]; + for (k = 0; k < num_angle[j]; k++) { + angle_type[j][k] = angle_type[i][k]; + angle_atom1[j][k] = angle_atom1[i][k]; + angle_atom2[j][k] = angle_atom2[i][k]; + angle_atom3[j][k] = angle_atom3[i][k]; + } + + nspecial[j][0] = nspecial[i][0]; + nspecial[j][1] = nspecial[i][1]; + nspecial[j][2] = nspecial[i][2]; + for (k = 0; k < nspecial[j][2]; k++) special[j][k] = 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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAngle::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAngle::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = molecule[j]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = molecule[j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::pack_border_one(int i, double *buf) +{ + buf[0] = v[i][0]; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAngle::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + molecule[i] = static_cast (buf[m++]); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::unpack_border_one(int i, double *buf) +{ + molecule[i] = static_cast (buf[0]); + return 1; +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecAngle::pack_exchange(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = bond_type[i][k]; + buf[m++] = bond_atom[i][k]; + } + + buf[m++] = num_angle[i]; + for (k = 0; k < num_angle[i]; k++) { + buf[m++] = angle_type[i][k]; + buf[m++] = angle_atom1[i][k]; + buf[m++] = angle_atom2[i][k]; + buf[m++] = angle_atom3[i][k]; + } + + buf[m++] = nspecial[i][0]; + buf[m++] = nspecial[i][1]; + buf[m++] = nspecial[i][2]; + for (k = 0; k < nspecial[i][2]; k++) buf[m++] = special[i][k]; + + 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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAngle::unpack_exchange(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (buf[m++]); + } + + num_angle[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_angle[nlocal]; k++) { + angle_type[nlocal][k] = static_cast (buf[m++]); + angle_atom1[nlocal][k] = static_cast (buf[m++]); + angle_atom2[nlocal][k] = static_cast (buf[m++]); + angle_atom3[nlocal][k] = static_cast (buf[m++]); + } + + nspecial[nlocal][0] = static_cast (buf[m++]); + nspecial[nlocal][1] = static_cast (buf[m++]); + nspecial[nlocal][2] = static_cast (buf[m++]); + for (k = 0; k < nspecial[nlocal][2]; k++) + special[nlocal][k] = static_cast (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 AtomVecAngle::size_restart() +{ + int i; + + int nlocal = atom->nlocal; + int n = 0; + for (i = 0; i < nlocal; i++) + n += 14 + 2*num_bond[i] + 4*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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecAngle::size_restart_one(int i) +{ + int n = 14 + 2*num_bond[i] + 4*num_angle[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 AtomVecAngle::pack_restart(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = MAX(bond_type[i][k],-bond_type[i][k]); + buf[m++] = bond_atom[i][k]; + } + + buf[m++] = num_angle[i]; + for (k = 0; k < num_angle[i]; k++) { + buf[m++] = MAX(angle_type[i][k],-angle_type[i][k]); + buf[m++] = angle_atom1[i][k]; + buf[m++] = angle_atom2[i][k]; + buf[m++] = angle_atom3[i][k]; + } + + 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 AtomVecAngle::unpack_restart(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (buf[m++]); + } + + num_angle[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_angle[nlocal]; k++) { + angle_type[nlocal][k] = static_cast (buf[m++]); + angle_atom1[nlocal][k] = static_cast (buf[m++]); + angle_atom2[nlocal][k] = static_cast (buf[m++]); + angle_atom3[nlocal][k] = static_cast (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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecAngle::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + molecule[nlocal] = 0; + num_bond[nlocal] = 0; + num_angle[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecAngle::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + molecule[nlocal] = atoi(values[1]); + + type[nlocal] = atoi(values[2]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + num_bond[nlocal] = 0; + num_angle[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecAngle::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + if (atom->memcheck("molecule")) bytes += nmax * sizeof(int); + if (atom->memcheck("nspecial")) bytes += nmax*3 * sizeof(int); + if (atom->memcheck("special")) bytes += nmax*atom->maxspecial * sizeof(int); + + if (atom->memcheck("num_bond")) bytes += nmax * sizeof(int); + if (atom->memcheck("bond_type")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + if (atom->memcheck("bond_atom")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + + if (atom->memcheck("num_angle")) bytes += nmax * sizeof(int); + if (atom->memcheck("angle_type")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom1")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom2")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom3")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + + return bytes; +} diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h new file mode 100644 index 0000000000..d81a05a998 --- /dev/null +++ b/src/MOLECULE/atom_vec_angle.h @@ -0,0 +1,61 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_ANGLE_H +#define ATOM_VEC_ANGLE_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecAngle : public AtomVec { + public: + AtomVecAngle(class LAMMPS *, int, char **); + void grow(int); + void reset_ptrs(); + void zero_owned(int); + void zero_ghost(int, int); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + int memory_usage(); + + private: + int *tag,*type,*mask,*image; + double **x,**v,**f; + int *molecule; + int **nspecial,**special; + int *num_bond; + int **bond_type,**bond_atom; + int *num_angle; + int **angle_type; + int **angle_atom1,**angle_atom2,**angle_atom3; +}; + +} + +#endif diff --git a/src/MOLECULE/atom_vec_bond.cpp b/src/MOLECULE/atom_vec_bond.cpp new file mode 100644 index 0000000000..5fe1144095 --- /dev/null +++ b/src/MOLECULE/atom_vec_bond.cpp @@ -0,0 +1,619 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_bond.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(A,B) ((A) < (B)) ? (A) : (B) +#define MAX(A,B) ((A) > (B)) ? (A) : (B) + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecBond::AtomVecBond(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + molecular = 1; + bonds_allow = 1; + mass_type = 1; + size_comm = 3; + size_reverse = 3; + size_border = 7; + size_data_atom = 6; + size_data_vel = 4; + xcol_data = 4; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecBond::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + molecule = atom->molecule = (int *) + memory->srealloc(atom->molecule,nmax*sizeof(int),"atom:molecule"); + + nspecial = atom->nspecial = + memory->grow_2d_int_array(atom->nspecial,nmax,3,"atom:nspecial"); + special = atom->special = + memory->grow_2d_int_array(atom->special,nmax,atom->maxspecial, + "atom:special"); + + num_bond = atom->num_bond = (int *) + memory->srealloc(atom->num_bond,nmax*sizeof(int),"atom:num_bond"); + bond_type = atom->bond_type = + memory->grow_2d_int_array(atom->bond_type,nmax,atom->bond_per_atom, + "atom:bond_type"); + bond_atom = atom->bond_atom = + memory->grow_2d_int_array(atom->bond_atom,nmax,atom->bond_per_atom, + "atom:bond_atom"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecBond::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + molecule = atom->molecule; + nspecial = atom->nspecial; + special = atom->special; + + num_bond = atom->num_bond; + bond_type = atom->bond_type; + bond_atom = atom->bond_atom; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for owned atom I + data in copy(), not including tag,type,mask,image,x,v +------------------------------------------------------------------------- */ + +void AtomVecBond::zero_owned(int i) +{ + molecule[i] = 0; + num_bond[i] = 0; + nspecial[i][0] = 0; + nspecial[i][1] = 0; + nspecial[i][2] = 0; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecBond::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + molecule[i] = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecBond::copy(int i, int j) +{ + int k; + + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + molecule[j] = molecule[i]; + + num_bond[j] = num_bond[i]; + for (k = 0; k < num_bond[j]; k++) { + bond_type[j][k] = bond_type[i][k]; + bond_atom[j][k] = bond_atom[i][k]; + } + + nspecial[j][0] = nspecial[i][0]; + nspecial[j][1] = nspecial[i][1]; + nspecial[j][2] = nspecial[i][2]; + for (k = 0; k < nspecial[j][2]; k++) special[j][k] = 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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecBond::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecBond::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = molecule[j]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = molecule[j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::pack_border_one(int i, double *buf) +{ + buf[0] = molecule[i]; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecBond::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + molecule[i] = static_cast (buf[m++]); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::unpack_border_one(int i, double *buf) +{ + molecule[i] = static_cast (buf[0]); + return 1; +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecBond::pack_exchange(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = bond_type[i][k]; + buf[m++] = bond_atom[i][k]; + } + + buf[m++] = nspecial[i][0]; + buf[m++] = nspecial[i][1]; + buf[m++] = nspecial[i][2]; + for (k = 0; k < nspecial[i][2]; k++) buf[m++] = special[i][k]; + + 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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecBond::unpack_exchange(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (buf[m++]); + } + + nspecial[nlocal][0] = static_cast (buf[m++]); + nspecial[nlocal][1] = static_cast (buf[m++]); + nspecial[nlocal][2] = static_cast (buf[m++]); + for (k = 0; k < nspecial[nlocal][2]; k++) + special[nlocal][k] = static_cast (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 AtomVecBond::size_restart() +{ + int i; + + int nlocal = atom->nlocal; + int n = 0; + for (i = 0; i < nlocal; i++) + n += 13 + 2*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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecBond::size_restart_one(int i) +{ + int n = 13 + 2*num_bond[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 AtomVecBond::pack_restart(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = MAX(bond_type[i][k],-bond_type[i][k]); + buf[m++] = bond_atom[i][k]; + } + + 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 AtomVecBond::unpack_restart(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecBond::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + molecule[nlocal] = 0; + num_bond[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecBond::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + molecule[nlocal] = atoi(values[1]); + + type[nlocal] = atoi(values[2]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + num_bond[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecBond::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + if (atom->memcheck("molecule")) bytes += nmax * sizeof(int); + if (atom->memcheck("nspecial")) bytes += nmax*3 * sizeof(int); + if (atom->memcheck("special")) bytes += nmax*atom->maxspecial * sizeof(int); + + if (atom->memcheck("num_bond")) bytes += nmax * sizeof(int); + if (atom->memcheck("bond_type")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + if (atom->memcheck("bond_atom")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + + return bytes; +} diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h new file mode 100644 index 0000000000..96f69b98ce --- /dev/null +++ b/src/MOLECULE/atom_vec_bond.h @@ -0,0 +1,58 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_BOND_H +#define ATOM_VEC_BOND_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecBond : public AtomVec { + public: + AtomVecBond(class LAMMPS *, int, char **); + void grow(int); + void reset_ptrs(); + void zero_owned(int); + void zero_ghost(int, int); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + int memory_usage(); + + private: + int *tag,*type,*mask,*image; + double **x,**v,**f; + int *molecule; + int **nspecial,**special; + int *num_bond; + int **bond_type,**bond_atom; +}; + +} + +#endif diff --git a/src/MOLECULE/atom_vec_molecular.cpp b/src/MOLECULE/atom_vec_molecular.cpp new file mode 100644 index 0000000000..3e878edd39 --- /dev/null +++ b/src/MOLECULE/atom_vec_molecular.cpp @@ -0,0 +1,887 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_molecular.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(A,B) ((A) < (B)) ? (A) : (B) +#define MAX(A,B) ((A) > (B)) ? (A) : (B) + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecMolecular::AtomVecMolecular(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + molecular = 1; + bonds_allow = 1; + angles_allow = 1; + dihedrals_allow = 1; + impropers_allow = 1; + mass_type = 1; + size_comm = 3; + size_reverse = 3; + size_border = 8; + size_data_atom = 7; + size_data_vel = 4; + xcol_data = 5; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecMolecular::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + q = atom->q = (double *) + memory->srealloc(atom->q,nmax*sizeof(double),"atom:q"); + molecule = atom->molecule = (int *) + memory->srealloc(atom->molecule,nmax*sizeof(int),"atom:molecule"); + + nspecial = atom->nspecial = + memory->grow_2d_int_array(atom->nspecial,nmax,3,"atom:nspecial"); + special = atom->special = + memory->grow_2d_int_array(atom->special,nmax,atom->maxspecial, + "atom:special"); + + num_bond = atom->num_bond = (int *) + memory->srealloc(atom->num_bond,nmax*sizeof(int),"atom:num_bond"); + bond_type = atom->bond_type = + memory->grow_2d_int_array(atom->bond_type,nmax,atom->bond_per_atom, + "atom:bond_type"); + bond_atom = atom->bond_atom = + memory->grow_2d_int_array(atom->bond_atom,nmax,atom->bond_per_atom, + "atom:bond_atom"); + + num_angle = atom->num_angle = (int *) + memory->srealloc(atom->num_angle,nmax*sizeof(int),"atom:num_angle"); + angle_type = atom->angle_type = + memory->grow_2d_int_array(atom->angle_type,nmax,atom->angle_per_atom, + "atom:angle_type"); + angle_atom1 = atom->angle_atom1 = + memory->grow_2d_int_array(atom->angle_atom1,nmax,atom->angle_per_atom, + "atom:angle_atom1"); + angle_atom2 = atom->angle_atom2 = + memory->grow_2d_int_array(atom->angle_atom2,nmax,atom->angle_per_atom, + "atom:angle_atom2"); + angle_atom3 = atom->angle_atom3 = + memory->grow_2d_int_array(atom->angle_atom3,nmax,atom->angle_per_atom, + "atom:angle_atom3"); + + num_dihedral = atom->num_dihedral = (int *) + memory->srealloc(atom->num_dihedral,nmax*sizeof(int),"atom:num_dihedral"); + dihedral_type = atom->dihedral_type = + memory->grow_2d_int_array(atom->dihedral_type,nmax,atom->dihedral_per_atom, + "atom:dihedral_type"); + dihedral_atom1 = atom->dihedral_atom1 = + memory->grow_2d_int_array(atom->dihedral_atom1,nmax, + atom->dihedral_per_atom,"atom:dihedral_atom1"); + dihedral_atom2 = atom->dihedral_atom2 = + memory->grow_2d_int_array(atom->dihedral_atom2,nmax, + atom->dihedral_per_atom,"atom:dihedral_atom2"); + dihedral_atom3 = atom->dihedral_atom3 = + memory->grow_2d_int_array(atom->dihedral_atom3,nmax, + atom->dihedral_per_atom,"atom:dihedral_atom3"); + dihedral_atom4 = atom->dihedral_atom4 = + memory->grow_2d_int_array(atom->dihedral_atom4,nmax, + atom->dihedral_per_atom,"atom:dihedral_atom4"); + + num_improper = atom->num_improper = (int *) + memory->srealloc(atom->num_improper,nmax*sizeof(int),"atom:num_improper"); + improper_type = atom->improper_type = + memory->grow_2d_int_array(atom->improper_type,nmax,atom->improper_per_atom, + "atom:improper_type"); + improper_atom1 = atom->improper_atom1 = + memory->grow_2d_int_array(atom->improper_atom1,nmax, + atom->improper_per_atom,"atom:improper_atom1"); + improper_atom2 = atom->improper_atom2 = + memory->grow_2d_int_array(atom->improper_atom2,nmax, + atom->improper_per_atom,"atom:improper_atom2"); + improper_atom3 = atom->improper_atom3 = + memory->grow_2d_int_array(atom->improper_atom3,nmax, + atom->improper_per_atom,"atom:improper_atom3"); + improper_atom4 = atom->improper_atom4 = + memory->grow_2d_int_array(atom->improper_atom4,nmax, + atom->improper_per_atom,"atom:improper_atom4"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecMolecular::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + q = atom->q; + molecule = atom->molecule; + nspecial = atom->nspecial; + special = atom->special; + + num_bond = atom->num_bond; + bond_type = atom->bond_type; + bond_atom = atom->bond_atom; + + num_angle = atom->num_angle; + angle_type = atom->angle_type; + angle_atom1 = atom->angle_atom1; + angle_atom2 = atom->angle_atom2; + angle_atom3 = atom->angle_atom3; + + num_dihedral = atom->num_dihedral; + dihedral_type = atom->dihedral_type; + dihedral_atom1 = atom->dihedral_atom1; + dihedral_atom2 = atom->dihedral_atom2; + dihedral_atom3 = atom->dihedral_atom3; + dihedral_atom4 = atom->dihedral_atom4; + + num_improper = atom->num_improper; + improper_type = atom->improper_type; + improper_atom1 = atom->improper_atom1; + improper_atom2 = atom->improper_atom2; + improper_atom3 = atom->improper_atom3; + improper_atom4 = atom->improper_atom4; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for owned atom I + data in copy(), not including tag,type,mask,image,x,v +------------------------------------------------------------------------- */ + +void AtomVecMolecular::zero_owned(int i) +{ + q[i] = 0.0; + molecule[i] = 0; + num_bond[i] = 0; + num_angle[i] = 0; + num_dihedral[i] = 0; + num_improper[i] = 0; + nspecial[i][0] = 0; + nspecial[i][1] = 0; + nspecial[i][2] = 0; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecMolecular::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + q[i] = 0.0; + molecule[i] = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecMolecular::copy(int i, int j) +{ + int k; + + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + q[j] = q[i]; + molecule[j] = molecule[i]; + + num_bond[j] = num_bond[i]; + for (k = 0; k < num_bond[j]; k++) { + bond_type[j][k] = bond_type[i][k]; + bond_atom[j][k] = bond_atom[i][k]; + } + + num_angle[j] = num_angle[i]; + for (k = 0; k < num_angle[j]; k++) { + angle_type[j][k] = angle_type[i][k]; + angle_atom1[j][k] = angle_atom1[i][k]; + angle_atom2[j][k] = angle_atom2[i][k]; + angle_atom3[j][k] = angle_atom3[i][k]; + } + + num_dihedral[j] = num_dihedral[i]; + for (k = 0; k < num_dihedral[j]; k++) { + dihedral_type[j][k] = dihedral_type[i][k]; + dihedral_atom1[j][k] = dihedral_atom1[i][k]; + dihedral_atom2[j][k] = dihedral_atom2[i][k]; + dihedral_atom3[j][k] = dihedral_atom3[i][k]; + dihedral_atom4[j][k] = dihedral_atom4[i][k]; + } + + num_improper[j] = num_improper[i]; + for (k = 0; k < num_improper[j]; k++) { + improper_type[j][k] = improper_type[i][k]; + improper_atom1[j][k] = improper_atom1[i][k]; + improper_atom2[j][k] = improper_atom2[i][k]; + improper_atom3[j][k] = improper_atom3[i][k]; + improper_atom4[j][k] = improper_atom4[i][k]; + } + + nspecial[j][0] = nspecial[i][0]; + nspecial[j][1] = nspecial[i][1]; + nspecial[j][2] = nspecial[i][2]; + for (k = 0; k < nspecial[j][2]; k++) special[j][k] = 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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecMolecular::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecMolecular::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_border(int n, int *list, double *buf, + int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = q[j]; + buf[m++] = molecule[j]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = q[j]; + buf[m++] = molecule[j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_border_one(int i, double *buf) +{ + buf[0] = q[i]; + buf[1] = molecule[i]; + return 2; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecMolecular::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + q[i] = buf[m++]; + molecule[i] = static_cast (buf[m++]); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::unpack_border_one(int i, double *buf) +{ + q[i] = buf[0]; + molecule[i] = static_cast (buf[1]); + return 2; +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecMolecular::pack_exchange(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + + buf[m++] = q[i]; + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = bond_type[i][k]; + buf[m++] = bond_atom[i][k]; + } + + buf[m++] = num_angle[i]; + for (k = 0; k < num_angle[i]; k++) { + buf[m++] = angle_type[i][k]; + buf[m++] = angle_atom1[i][k]; + buf[m++] = angle_atom2[i][k]; + buf[m++] = angle_atom3[i][k]; + } + + buf[m++] = num_dihedral[i]; + for (k = 0; k < num_dihedral[i]; k++) { + buf[m++] = dihedral_type[i][k]; + buf[m++] = dihedral_atom1[i][k]; + buf[m++] = dihedral_atom2[i][k]; + buf[m++] = dihedral_atom3[i][k]; + buf[m++] = dihedral_atom4[i][k]; + } + + buf[m++] = num_improper[i]; + for (k = 0; k < num_improper[i]; k++) { + buf[m++] = improper_type[i][k]; + buf[m++] = improper_atom1[i][k]; + buf[m++] = improper_atom2[i][k]; + buf[m++] = improper_atom3[i][k]; + buf[m++] = improper_atom4[i][k]; + } + + buf[m++] = nspecial[i][0]; + buf[m++] = nspecial[i][1]; + buf[m++] = nspecial[i][2]; + for (k = 0; k < nspecial[i][2]; k++) buf[m++] = special[i][k]; + + 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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecMolecular::unpack_exchange(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + + q[nlocal] = buf[m++]; + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (buf[m++]); + } + + num_angle[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_angle[nlocal]; k++) { + angle_type[nlocal][k] = static_cast (buf[m++]); + angle_atom1[nlocal][k] = static_cast (buf[m++]); + angle_atom2[nlocal][k] = static_cast (buf[m++]); + angle_atom3[nlocal][k] = static_cast (buf[m++]); + } + + num_dihedral[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_dihedral[nlocal]; k++) { + dihedral_type[nlocal][k] = static_cast (buf[m++]); + dihedral_atom1[nlocal][k] = static_cast (buf[m++]); + dihedral_atom2[nlocal][k] = static_cast (buf[m++]); + dihedral_atom3[nlocal][k] = static_cast (buf[m++]); + dihedral_atom4[nlocal][k] = static_cast (buf[m++]); + } + + num_improper[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_improper[nlocal]; k++) { + improper_type[nlocal][k] = static_cast (buf[m++]); + improper_atom1[nlocal][k] = static_cast (buf[m++]); + improper_atom2[nlocal][k] = static_cast (buf[m++]); + improper_atom3[nlocal][k] = static_cast (buf[m++]); + improper_atom4[nlocal][k] = static_cast (buf[m++]); + } + + nspecial[nlocal][0] = static_cast (buf[m++]); + nspecial[nlocal][1] = static_cast (buf[m++]); + nspecial[nlocal][2] = static_cast (buf[m++]); + for (k = 0; k < nspecial[nlocal][2]; k++) + special[nlocal][k] = static_cast (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 AtomVecMolecular::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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecMolecular::size_restart_one(int i) +{ + int n = 17 + 2*num_bond[i] + 4*num_angle[i] + + 5*num_dihedral[i] + 5*num_improper[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 AtomVecMolecular::pack_restart(int i, double *buf) +{ + int k; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + buf[m++] = q[i]; + buf[m++] = molecule[i]; + + buf[m++] = num_bond[i]; + for (k = 0; k < num_bond[i]; k++) { + buf[m++] = MAX(bond_type[i][k],-bond_type[i][k]); + buf[m++] = bond_atom[i][k]; + } + + buf[m++] = num_angle[i]; + for (k = 0; k < num_angle[i]; k++) { + buf[m++] = MAX(angle_type[i][k],-angle_type[i][k]); + buf[m++] = angle_atom1[i][k]; + buf[m++] = angle_atom2[i][k]; + buf[m++] = angle_atom3[i][k]; + } + + buf[m++] = num_dihedral[i]; + for (k = 0; k < num_dihedral[i]; k++) { + buf[m++] = MAX(dihedral_type[i][k],-dihedral_type[i][k]); + buf[m++] = dihedral_atom1[i][k]; + buf[m++] = dihedral_atom2[i][k]; + buf[m++] = dihedral_atom3[i][k]; + buf[m++] = dihedral_atom4[i][k]; + } + + buf[m++] = num_improper[i]; + for (k = 0; k < num_improper[i]; k++) { + buf[m++] = MAX(improper_type[i][k],-improper_type[i][k]); + buf[m++] = improper_atom1[i][k]; + buf[m++] = improper_atom2[i][k]; + buf[m++] = improper_atom3[i][k]; + buf[m++] = improper_atom4[i][k]; + } + + 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 AtomVecMolecular::unpack_restart(double *buf) +{ + int k; + + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + q[nlocal] = buf[m++]; + molecule[nlocal] = static_cast (buf[m++]); + + num_bond[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_bond[nlocal]; k++) { + bond_type[nlocal][k] = static_cast (buf[m++]); + bond_atom[nlocal][k] = static_cast (buf[m++]); + } + + num_angle[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_angle[nlocal]; k++) { + angle_type[nlocal][k] = static_cast (buf[m++]); + angle_atom1[nlocal][k] = static_cast (buf[m++]); + angle_atom2[nlocal][k] = static_cast (buf[m++]); + angle_atom3[nlocal][k] = static_cast (buf[m++]); + } + + num_dihedral[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_dihedral[nlocal]; k++) { + dihedral_type[nlocal][k] = static_cast (buf[m++]); + dihedral_atom1[nlocal][k] = static_cast (buf[m++]); + dihedral_atom2[nlocal][k] = static_cast (buf[m++]); + dihedral_atom3[nlocal][k] = static_cast (buf[m++]); + dihedral_atom4[nlocal][k] = static_cast (buf[m++]); + } + + num_improper[nlocal] = static_cast (buf[m++]); + for (k = 0; k < num_improper[nlocal]; k++) { + improper_type[nlocal][k] = static_cast (buf[m++]); + improper_atom1[nlocal][k] = static_cast (buf[m++]); + improper_atom2[nlocal][k] = static_cast (buf[m++]); + improper_atom3[nlocal][k] = static_cast (buf[m++]); + improper_atom4[nlocal][k] = static_cast (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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecMolecular::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + q[nlocal] = 0.0; + molecule[nlocal] = 0; + num_bond[nlocal] = 0; + num_angle[nlocal] = 0; + num_dihedral[nlocal] = 0; + num_improper[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecMolecular::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + molecule[nlocal] = atoi(values[1]); + + type[nlocal] = atoi(values[2]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + q[nlocal] = atof(values[3]); + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + num_bond[nlocal] = 0; + num_angle[nlocal] = 0; + num_dihedral[nlocal] = 0; + num_improper[nlocal] = 0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecMolecular::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + if (atom->memcheck("molecule")) bytes += nmax * sizeof(int); + if (atom->memcheck("nspecial")) bytes += nmax*3 * sizeof(int); + if (atom->memcheck("special")) bytes += nmax*atom->maxspecial * sizeof(int); + + if (atom->memcheck("num_bond")) bytes += nmax * sizeof(int); + if (atom->memcheck("bond_type")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + if (atom->memcheck("bond_atom")) + bytes += nmax*atom->bond_per_atom * sizeof(int); + + if (atom->memcheck("num_angle")) bytes += nmax * sizeof(int); + if (atom->memcheck("angle_type")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom1")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom2")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + if (atom->memcheck("angle_atom3")) + bytes += nmax*atom->angle_per_atom * sizeof(int); + + if (atom->memcheck("num_dihedral")) bytes += nmax * sizeof(int); + if (atom->memcheck("dihedral_type")) + bytes += nmax*atom->dihedral_per_atom * sizeof(int); + if (atom->memcheck("dihedral_atom1")) + bytes += nmax*atom->dihedral_per_atom * sizeof(int); + if (atom->memcheck("dihedral_atom2")) + bytes += nmax*atom->dihedral_per_atom * sizeof(int); + if (atom->memcheck("dihedral_atom3")) + bytes += nmax*atom->dihedral_per_atom * sizeof(int); + if (atom->memcheck("dihedral_atom4")) + bytes += nmax*atom->dihedral_per_atom * sizeof(int); + + if (atom->memcheck("num_improper")) bytes += nmax * sizeof(int); + if (atom->memcheck("improper_type")) + bytes += nmax*atom->improper_per_atom * sizeof(int); + if (atom->memcheck("improper_atom1")) + bytes += nmax*atom->improper_per_atom * sizeof(int); + if (atom->memcheck("improper_atom2")) + bytes += nmax*atom->improper_per_atom * sizeof(int); + if (atom->memcheck("improper_atom3")) + bytes += nmax*atom->improper_per_atom * sizeof(int); + if (atom->memcheck("improper_atom4")) + bytes += nmax*atom->improper_per_atom * sizeof(int); + + return bytes; +} diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h new file mode 100644 index 0000000000..a8175f9b13 --- /dev/null +++ b/src/MOLECULE/atom_vec_molecular.h @@ -0,0 +1,68 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_MOLECULAR_H +#define ATOM_VEC_MOLECULAR_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecMolecular : public AtomVec { + public: + AtomVecMolecular(class LAMMPS *, int, char **); + void grow(int); + void reset_ptrs(); + void zero_owned(int); + void zero_ghost(int, int); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + int memory_usage(); + + private: + int *tag,*type,*mask,*image; + double **x,**v,**f; + double *q; + int *molecule; + int **nspecial,**special; + int *num_bond; + int **bond_type,**bond_atom; + int *num_angle; + int **angle_type; + int **angle_atom1,**angle_atom2,**angle_atom3; + int *num_dihedral; + int **dihedral_type; + int **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; + int *num_improper; + int **improper_type; + int **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; +}; + +} + +#endif diff --git a/src/Notes b/src/Notes new file mode 100644 index 0000000000..71431f5ab1 --- /dev/null +++ b/src/Notes @@ -0,0 +1,2954 @@ +Documentation and other notes on LAMMPS + +-------------------------------------------- +valgrind run: + +valgrind --leak-check=yes --show-reachable=yes --num-callers=10 lmp_g++ < in.* + +-------------------------------------------- +10 Jan 2007 +size of LAMMPS + +85K lines, 63K are in style which is 75% +rest is "core" of LAMMPS + +-------------------------------------------- +1 Dec 2006 +features wish list + +Pieter's new stuff: +-fix: Cross-linking scheme (including updating angles, torsions, etc.) +-pair_style: Ewald summation for various types of LJ and Buckingham +-pair_style: interaction between spheres made of solid LJ-ium +-box: triclinic PBCs +-fix: SLLOD algorithm for NEMD (requries triclinic PBCs) +-fix: 1D density and velocity profiles + +speed optimizations: tune individual kernels (pair potentials, +neighbor list construction), learn from GROMACS how they are so fast +(assembler, better lo-level data structures), implement kernels for +multi-core nodes or vector (SIMD-style) nodes + +parallel scalability enhancements: implement some of IBM or DE Shaw +algorithmic ideas to enable better scaling for small problems +on large numbers of processors + +triclinic boundary conditions: non-orthogonal simulation boxes, +ability to model crystalline lattices with those asymmetries, do bulk +shear viscosity modeling + +point-dipole force fields: short-range is done, but +long-range (Ewald and PPPM) is challenging + +aspherical particle models: ellipsoidal, multiple glued spheres, DEM - +working on with Schunk/Grest groups (CRADA, NNEDC, LDRD) + +colliodal systems mixed with small-particle solvents: new potentials, +atom types, long-range interactions, efficiency issues for mixed-size +systems - working on with Schunk/Grest groups + +atom-fluid hybrid models: how to model particles in a background fluid +(i.e. nanoparticle suspensions), have to couple to an efficient fluid +solver - working on with Schunk/Grest groups + +coupling LAMMPS to GAMESS (quantum) or FE (continuum) codes: work with +coarse-grain continuum particles (PeriDynamics) and directly coupling +to FE meshes (various methods exist, Lehoucq MICS project, Mark +Robbins (JHU) work) + +other coarse-grain particle models that could be supported by LAMMPS: +DSMC, SPH + +add modified EAM (MEAM) potential: working with Greg Wagner + +add universal REAXX potential: Aidan working with Bill Goddard group + +add charge-equilibration ability: GRASP feature that Aidan wants +to port to LAMMPS + +polarizable force field: several variants exist + +AI-REBO force field for C nanotubes and their interaction with CH +surroundings: worked on by Ase Henry (summer student) but not finished + + +-------------------------------------------- +10 Oct 2006 +new WWW site and source-code repository + +For changing just doc and/or www pages: + +a) check all changes in doc,www into the repository +b) run lmpwww.py + +For fixing a bug w/ a new tarball: + +a) check all bug fix src,doc,tools,etc changes into the repository + make SURE that "make package-check" shows all package dirs in sync + repository contains NO installed packages and NO package files in src dir, + so changes should ALWAYS only go into package dirs + NEVER do "svn add" for a package file that is in the top-level src dir +b) edit www/bug.txt to describe the new patch and run txt2html on it +c) run lmptar.py to create the new tarball which will push it onto the + WWW server, and put patch files in my dir +d) svn add the 2 patch files to the repository +e) check in www/bug.txt/html and the 2 patch files from www/patch + into the repository +f) run lmpwww.py to update the WWW with the bug fix + +useful SVN commands (from any level within lammps dir) + +svn help command get help on a command and its options +svn -qu status * files are different in repository + M files are different on my machine + -u show update info, -q = print as little as possible +svn add file.cpp add a file, so repository will know about it +svn delete file.cpp delete a file, so repository will know it's gone +svn diff file.cpp local diff of my changed file versus version I checked out +svn -r N diff file.cpp diff of my file versus current repos (get N from stat) +svn update grab newer files from repository and overwrite mine +svn ci -m "" check in my changed files into repository with NULL comment + +WWW interface to LAMMP repository: +https://development.sandia.gov/viewvc/lammps + +-------------------------------------------- +21 Sept 2006 +how setflag works in pair potentials + +setflag only used for i >= j (half of all i,j) + +what top-level pair.cpp does with setflag: + when init(), checks that setflag i,i is set for all atom types + leaves it up to init_one(i,j) to check setflag i,j values + +most pair styles: + setflag is created in allocate() and all i,j set to 0 + happens when 1st coeff command is called by data file or input script + when pair_style command is re-invoked (allocation already done): + if setflag i,j is set, cut_i,j is reset to new global cut + when coeff() is called with range of i,j: + setflag i,j is set for each i,j in range + when init_one is called for i,j: + if setflag i,j = 0, mixing is performed + when writing restart file: + loop over all i,j, only write coeffs if setflag i,j is set + +some pair styles do not allow mixing (have to specify i,j explicitly): + buck, buck/coul/cut, buck/coul/long, dpd, morse, peri, table + +table pair style: + destroys setflag when pair_style is re-invoked: + this forces user to reset all coeffs + +granular pair styles: + coeff() is illegal to call, so when pair_style is called + it sets all i,j setflag values for all atom types + in hybrid mode, this is not just types gran is used for + since it has no idea of these since coeff() is not called + but it should be OK to set setflag for all i,j + +pair eam: + only sets i,i values of setflag in coeff + also sets mass for i,i calls to coeff + it will mix i,j, but isn't done until init_style, + after all i,j calls to init_one(i,j) + so init_one for i,j call tests if setflag i,i and j,j are set + else an error since won't be able to mix later + +potentials that requires one call to coeff with * * and allows + some elements to be masked out: + eam/alloy, eam/fs, sw, tersoff, airebo + coeff() also requires a mapping list of atom types to elements + clears setflag every time coeff() is called + sets setflag only if I,J are both non-NULL in mapping list + also sets mass if I = J + +pair hybrid: + destroys setflag when pair_style is re-invoked: + this forces user to reset all coeffs + if coeff() called with one_coeff sub-style (requires * * and uses + type maps), then unsets all I,J previously set to that sub-style + this is so a 2nd * * eam/alloy call will wipe out settings from 1st one + coeff() calls sub-style with same range of I.J args it was called with + coeff() loops over I,J it called with and only sets setflag I,J + if the sub-style set I,J or if sub-styly = "none" (NULL) + sets setflag for NULL, so that "pair_coeff I J none" can be used + and all setflag values will be set by entirety of pair_coeff commands + +-------------------------------------------- +11 Sept 2006 +reworking of neighbor lists in LAMMPS to allow 1/2 and full together + +neighbor.cpp and its children (half, full, etc) all got changed + half routines always do build in half data structs + full routines always do build in full data structs + neigh_half, neigh_full flag whether half/full are ever built + knows which (or both) to build every N steps + has setup/cleanup to allow half/full to be called even if not init() + e.g. by delete_atoms +pair routines now flag what kind of neigh list they want + neigh_half_every, neigh_full_every + never needs to call neigh build since neigh will always build them + pair hybrid might set both + it also accesses correct neigh list when building sub-list + pair peri sets neither + pair airebo sets full + pair sw sets full +fix routines can flag what kind of neigh list they want + neigh_half_every, neigh_half_once, neigh_full_once, neigh_full_every + then calls neigh build if needed + fix centro wants full once + fix energy and fix stress and fix rdf want half once + fix orient/fcc wants full every +delete_atoms needs a half list + so calls build_setup and cleanup (if neighbor doesn't do half) + also calls build_half directly + +-------------------------------------------- +1 Sept 2006 +discussion with Aidan about LAMMPS + GRASP + +Hi Steve, + +Good analysis. I put some comments below. I like the idea in principle, +because there are lots of productivity gains. It was good for me to write my +own MD code, because I learned a lot, I had a lot of flexibility to try new +things, and it got me a lot of visibility. All of these things are still +arguments for continuing GRASP, but the benefits are diminishing. + +The thing that worries me is the transition process. The worst case +scenario is that I might end up supporting two codes. + +Also, I don't want to upset existing GRASP users. + +I need to figure out a transition path that will mimimize the risk of +getting stuck in a big hole, and it can't get in the way of my existing +near-term commitments. The two big items are: + +- Implement a pressure calculation for ReaxFF +- Shock simulation capability: + * Threebody force field (in GRASP, not in LAMMPS) + * Special initial/boundary conditions (not in GRASP, probably in LAMMPS) + * On-the-fly analysis (not in either) + +I am thinking that for now, I will continue to use GRASP for ReaxFF and I +will continue to primarily suppport GRASP. But I would like to get the +threebody force field into LAMMPS. That should be relatively easy, and it +will be a good test case. It will also take care of those people at Sandia +who currently use GRASP for Stillinger-Weber Silicon. + +Depending on how that goes, we can then consider porting Tersoff, Charge +Equilibration and ReaxFF, at which point GRASP can be moth-balled. + +If we port ReaxFF to LAMMPS, there might be a lot of things we want to do +differently (including ditching the FORTRAN code and making ReaxFF open +source). So it is good to know all the issues first. + +So for now, let's not publicize a possible merger/buy-out, but just say that +we will port the threebody force field from GRASP to LAMMPS. + +Aidan + +> Aidan - I thought some more about what it would mean to have all of +> LAMMPS + GRASP in one code. Did you think of more features in +> GRASP that would be important to have in the combined code? +> +> My thoughts are below. +> +> Steve +> +> ---------------------- +> +> LAMMPS + GRASP +> +> 1) Main benefits +> +> One code to maintain, advertise, distribute, attract users to. +> One code with all features so we and others can do more problems. +> One code with all these features becomes more unique, valuable. + +Agreed. + +> +> 2) Political issues +> +> What to name the combined code? +> LAMMPS, LAMMPS/GRASP, some new name, etc +> My vote would be just LAMMPS since it is now a reasonably well-known +> MD code, but that is a biased view. +> It could be bad for you and GRASP if it loses its separate identity. +> We need to somehow make it clear the new code is +> significantly different/enhanced beyond the original LAMMPS. + +So here are the features that would make LAMMPS "new and improved" + +Non-optional stuff (things I must support): +-ReaxFF +-Charge Equilibration (required for ReaxFF, but indepenendent of it) +-Threebody: requires complete neighbor list +-Tersoff (each ij pair interaction is modified by a function that is a sum +of ijk interactions, j != k) + +Optional stuff: +-Triclinic pbc's (or is it in LAMMPS now?) +I think a lot of the special features in GRASP (e.g. initializing atom +positions based on a density profile, selective thermostatting) are in +LAMMPS or could be added fairly easily using existing framework. + +> +> Who "owns" the new code? +> Simple answer: all of the developers in 1400 (you, Paul, me). +> Make the new code's WWW page not be Plimpton-centric. +> I.e. on the home page and "Authors" +> page we list all of our names (me, you, Paul) as having created +> the code and as contacts with email addresses, etc. +> We all could monitor the mail list, etc. + +This is still tricky, for two usual reasons: credit and work. First, +everyone likes to get recognized for individual accomplishments, and this is +harder to do if the code has a collective ownership. Second, just +maintaining the code will require on-going work, and there will have to be +some way to divide this up. I am happy to field questions and fix bugs +related to the GRASP force fields, but then what happens when someone wants +to use charge equilibration with CHARMM? + +> This would also be the story we tell to management. I.e. We have combined +> the codes to make one new MD code with all the features of both. +> It is now no longer Plimpton's code, but 1400s. +> +> 3) Technical issues: +> +> Hooking in new pair potentials (SW, Tersoff, REAXX) to LAMMPS is +> potentially easy, if they can be massaged into the following interface +> by which LAMMPS uses all its pair potentials: +> +> input commands: +> pair_style tersoff arg1 arg2 ... +> args are any global settings, e.g. cutoff +> pair_coeff i j file 1 2 3 4 (similar to EAM potentials) +> i,j are atom types, can be *,* to specify all types +> file could be one or more files that specify the force field +> 1,2,3,4 are a "mapping" that maps LAMMPS atom types to elements +> in the force field, e.g. Si for Tersoff, or something else in REAXX +> +ReadInteractions() + +> setup routines: +> one-time setup of potential +> i.e. read files, do pre-computation +> +SetupInteractions() + +> init() +> setup the potential each time before a run +> usually just checks that all pair_coef settings have been made +> and figures out cutoffs for each atom type pair +> +SetupNeighbor() + +> compute() +> called every timestep +> has a neighbor list (half, full, whatever) that it loops over +> computes force on each atom, energy (optional), virial (optional) +ApplyForce() + +> single() +> called by diagnostic functions that compute per-atom energy, stress +> compute the I-J interaction (force, energy) for 2 atoms +> probably ignore this for complicated many-body potentials +Good idea, currently per-atom energy is done (or not) in the energy +calculation. + +> restart() +> called by restart files +> how to read/write the potential parameters to a restart file +> probably ignore this for a complicated potential +GRASP does not have this + +> +> 4) Distributing REAXX: +> +> My vote would be to hook LAMMPS to REAXX via library calls and to +> treat it in LAMMPS as an optional "package". This is what we do +> already for the external package POEMS (rigid body dynamics). Thus +> REAXX could be distributed with LAMMPS in a separate directory (or +> not, if the CalTech people don't want it to be). +> +> So if someone wants to use REAXX, they first build REAXX (with its own +> Makefile) as a library. Then they include the LAMMPS REAXX package +> and build LAMMPS, linking to the library. There would be a thin +> pair_reaxx.cpp class in LAMMPS that made calls to the REAXX library. +> +> I think this would also avoid any issues with REAXX being Fortran, +> since once it is built as a library, LAMMPS doesn't care what language +> it is written in - it just has a callable interface. + +Sounds good. + +-------------------------------------------- +21 Jul 2006 +special bond treatment in LAMMPS vs other packages + +see email exchange with Paul and Naveen and Marcus in NOTES/special_bonds + +answer: CHAMM always applies 1-2,1-3,1-4 weighting based on bond topology, +not on which angle, dihedrals happen to be defined + +for 1-4, it actually applies a weighting that depends on the types of +the 2 atoms (and possibly on what comes in between?, though this +doesn't make sense) + +it has no ambiguity in 5- or 6-atom rings, since the 2 atoms are either +a 1-3 or 1-4 and the correct weighting gets applied directly + +in LAMMPS, we apply the pairwise weighting based on bond topology as +well, however we apply the speical weighting as part of the dihedral +interaction - we read in the special sigma/epsilon as part of pair +coeffs (and it gets mixed there), but it gets computed in the dihedral +with an additional weighting term that is an added dihedral coeff + +the CHARMM pre-proc takes care to do this correctly in special cases: + a) defines a K = 0 dihedral if there needs to be a 1-4 LJ term + but there is no dihedral defined + b) 5- and 6-atom rings - e.g. in the 6-atom case, the 1-4 atoms appear + in 2 dihedrals, but the LJ term should only apppear once, so the + dihedral weight is set to 1/2 its value + +-------------------------------------------- +20 Jul 2006 +neighbor binning details + +we use global bin numbering scheme + this lets us fit more, smaller bins than if tried to have integer + # of bins in each proc's sub-domain + +global bin numbering scheme in each dim: + 0 = 0.0 to binsize + 1 = binsize to 2*binsize + nbin-1 = prd-binsize to binsize + nbin = prd to prd+binsize, etc + -1 = -binsize to 0.0, etc + +mbinlo in each dim for each proc must be leftmost bin that a owned + or ghost particle will ever be in at time neigh lists are formed + doesn't matter that mbinlo or bin #'s go negative since + each proc will treat mbinlo as a local zero + and difference its bins from mbinlo to yield a positive integer index + +then I add 1 to extend mbinlo and mbinhi by 1 to cover stencil bins + this is to insure a stencil bin index never gets generated that would + be outside mbinlo/hi when applied to the bin of an owned atom + not sure why delta = 1 is the correct value + if move to center-of-interaction algorithm for communicating 1/2 + the cutoff distance, then will generated stencil bins around + ghost atom bins and will likely need to extend mbinlo/hi by more + than 1 + best way would be to check that stencil is fully contained in mbinxlo/hi + after compute it, for any owned (or ghost) atom + +choose bin size to be roughly 1/2 of cutneigh, b/c it appears to be + roughly optimal in terms of stencil size + if bins are much smaller, then bins have few or no atoms and loop + over stencil for each atom is too costly + if bins are much bigger, then bins have lots of atoms and are testing + on many atoms that are too far away when form neighbor list + note that code should work no matter what bin size is chosen since + next(xyz) and stencil extend to accommodate any bin size + this is why even if box size is tiny and cutoff is huge the code + still forms correct neighbor lists + in this case, the bin size has to be >= 1, and binsize will be < cut/2 + but next(xyz) will then be large and the stencil will extend for many + bins to find all the neighbors + +MUST be exactly integer # of bins in each box dimension + this is b/c of the way bins are used in the neighbor-list formation + i.e. loop over 13 or 26 bins, check atoms to the right and above, etc + bin usage requires that 2 neighboring procs always think the bin + boundary is in same place + this is obviously the case for interior bins since a global bin system + is used + also needs to be the case for procs at end of box that are neighbors + thru PBC + if weren't the case, here is example that breaks code for newton bin + if an integer # of bins is not enforced: + imagine 2 nearby atoms, straddling PBC in x, with the righmost one + having a smaller z value + the proc on the left end will not consider them neighbors, b/c + the ghost atom is in a bin to the left, and thus not looped over + the proc on the right end will not consider them neighbors if the 2 + atoms are in the same bin, b/c the rightmost atom has a smaller + z coord + the proc on the right end will consider them neighbors IF the + ghost atom (rightmost) is in a different bin + this implies that the bin boundary must be at the right edge + of the box, to be consistent with the bin boundary at the left edge + of the box + +this is also why there is a careful test in coord2bin to insure + atoms get put in the correct bins even when there might be round-off errors + this test is based on there being exactly an integer # of bins that + fit in the periodic box + any atom with coord >= boxhi must be a ghost atom + any atom with coord < boxlo must be a ghost atom + so put those kinds of atoms directly in ghost bins + put atoms in between (owned atoms) directly in non-ghost bins + +-------------------------------------------- +12 Jul 2006 +PPPM variable details + +set_grid() sets nx_pppm, ny_pppm, nz_pppm = size of PPPM grid + includes slab size, since zprd is scaled by slab size + +nxlo_in,nxhi_in +nylo_in,nyhi_in +nzlo_in,zyhi_in = extent of PPPM grid that I own + z values done for smaller zprd grid, not zprd_slab + +nxlo_out,nxhi_out +nylo_out,nyhi_out +nzlo_out,zyhi_out = extent of PPPM grid that my particles contribute charge to + z values done for smaller zprd grid, not zprd_slab + +upper end +z procs have their nzhi_in and nzhi_out reset to nz_pppm-1 + +nxlo_ghost,nxhi_ghost +nylo_ghost,nyhi_ghost +nzlo_ghost,nzhi_ghost = # of planes I recv from each dir + to overlay domain I own + +-z proc sends to +z proc, but not vice versa + +-------------------------------------------- +5 Jun 2006 +output rules for LAMMPS + +3 kinds of output: + thermo = always 1st/last/every-N step + never repeat an output twice in same run + dump = always 1st/last/every-N but never repeat a step in file + restart = not-1st/last/every-N + can also do anytime via write_restart command in input script + special cases to test these outputs for + 0-step run, non-N run, N-run, N-exit min, early-exit min, 0-iter min + thermo N with N = 0 or N > 0 + using reset_timestep between runs/min to change timesteps + never double print thermo or dump or restart + +-------------------------------------------- +17 May 2006 +humorous email requests + +Also, When I tried downloading LAMMPS simulator software it did in +.TAR format. I'm not able to find software to untar the tar files. Can +you please suggest any software for that? + +-------------------------------------------- +14 May 2006 +temperature usage + +places in LAMMPS that a Temperature class is defined and how it is used: + +force templist + defines "default" when code starts up + any input script "temperature" command creates new one, added to templist + any fix command that calls add_temp uses flag = 1 to allow for overwrite + of existing one + this is needed if fix in unfix, then recreated, since temp ID will be same + ditto if fix is redefined + none of entries in templist are ever deleted + don't want to do this since don't know all classes which are storing + ptrs to that temp (e.g. thermo, other fixes, etc) + force does init of all in templist every run, deletes them at end + +fix nph, npt, nvt, temp/rescale + each define a new temperature in force::templist when created via add_temp + nph, npt = temperature fix-ID all full + nvt = temperature fix-ID fix-group-ID full + temp/rescale = temperature fix-ID fix-group-ID full/region + full/region depends on if fix parameter region was used + if user later specifies fix_modify temp ID then internal temperature ptr + is changed to point to new one from templist + init/delete on temp never called, let force do it + +velocity + only used for duration of single command + creates/deletes its own (temporarily) as temperature temp vel-group full + or uses one from force->templist if user specifies + calls init() on whichever one it is + this means fixes that subtract dof need to already be defined + e.g. fix shake or fix rigid + +thermo + uses force->templist[0] = default by default + user can override this with thermo_modify temp ID + creates/deletes/init on temperature never called, let force do it + only calls t->compute() and t->dof() + used for fields: temp, ke, press, total E + is user error if assigns T to thermo that is inconsistent with global P + can also do thermo print out of any T by using keyword t_ID + this just calls t->compute for that temp in force->templist + +pressure + just gets passed in by whoever calls press + pressure does not define it's own temperature + pressure is defined/used by: + force - the master definition + fix npt, nph (pass their own or user-defined T to pressure) + thermo (passes default T to pressure) + +-------------------------------------------- +14 May 2006 +dump features + +y = supported +- = ignored (not implemented, but not an error) +err = throws an error + +style atom bond custom dcd xtc xyz + +format y y y - - y +scale y - - - - - +image y - - - - - +flush y y y y - y +every y y y err y y +region - - y - - - +thresh - - y - - - + +.bin y - y - - - +.gz y y y - - y +per-proc y y y - - - +per-snap y y y - - y + + only only +group any any any all all any +sorted no no no y y y (if group = all) + +-------------------------------------------- +2 May 2006 +how to use gprof + +compile/link with -g -pg -O (e.g. in Makefile.g++) +run a sample input script (in.lj) which produces gmon.out.* files +gprof lmp_g++ gmon.out.* > gprof.report + +-------------------------------------------- +17 Apr 2006 +lattice usage + +xlattice, ylattice, zlattice only used as distane conversion + factors from box <-> lattice units by a few commands: + +domain.cpp - creates settings and maps lattice <-> box with them +displace_atoms.cpp +fix_indent.cpp +region.cpp +temperature.cpp +velocity.cpp +create_atoms.cpp - uses implicitly since it calls box2lattice and lattice2box + +-------------------------------------------- +17 Apr 2006 +discussion w/ Gary Grest about viscosity drag term + +Steve, I am not sure how most people think of the drag term. In all the +bead-spring polymer simulations, gamma is used - partially since people +follow what Kurt and I did. In BD for macro particles, I suspect people +think of the drag in terms of eta. Maybe easiest to leave a gamma but +in notes define gamma in terms of eta so people can do the conversion if +they wish. + + For a LJ fluid, T=epsilson/k_B, eta is of order 1 in dimensionless +units. (For T=1, pure repulsion, rho=0.85, eta=0.7. Slightly higher +with r_c=2.5). + +Gary + +Gary - a follow up to the discussion on adding a drag term to LAMMPS +for implicit solvent effects. + +F_drag = - gamma velocity + +I understand that gamma = 6 pi eta diameter +where eta = viscosity of the solvent + +which comes from gamma = kT / Dm + and D = kT / (6 pi eta diameter) + +What would be the typical way a user would want to specify +this term. To specify the viscosity and then scale gamma for +different size particles? Do you know what dimensionless viscosity +is for LJ systems? + +Or just to specify gamma in units of force/velocity for sigma = 1 +particles, and then perhaps scale up gamma for larger/smaller +particles? + +Any ideas on the normal way to think about the units of this term? + +Steve + +-------------------------------------------- +22 March 2006 +derived classes, rules that are used in LAMMPS +from talking with Roscoe Bartlett + +assume what is wanted is for child to override some subset of methods +no matter what calls what, have child's version called if it exists, + else parent's version + +how to do this in parent class: + public methods and protected methods + protected = child can invoke them + anything that may be overridden by any child is declared a virtual method + others are not virutal + no pure virtual = 0 classes if parent is stand-alone + data (double, int, etc) can be in public or protected section + +how to do this in child (derived class): + just implement the methods that are new + can define own variables (but can only refer to them in child class) + +one exception is destructor: + both child and parent will be called + is always virtual in parent class + but parent destructor cannot call child routines (e.g. deallocate) + at least ones that override parent ones + this is b/c child may have already gone away + so parent destructor will always call parent version + thus need to insure child destructor calls the right thing + see pair_eam and its FS child for example + +-------------------------------------------- +21 March 2006 +conjugate gradient for eng min + +discussion in Ch 10 of Numerical Recipes is good + +CG requires good line min +BFGS (quasi-Newton) does not + stores NxN where N can be small + +CG: + maintain g = dowhnill gradient (- Grad phi = force vec) + h = search dir for line min + basic idea is get a new search dir in outer loop at each iteration + use h to do linemin to new pt in inner iteration + linemin does bracketing, then 1s search via Brents method (use deriv info) + h0 = g0 + doing a linemin gives you new gi+1 at new point + hi+1 = gi+1 + gamma hi + gamma = FR or PR forms + gamma = gi+1 dot gi+1 / gi dot gi for FR + +-------------------------------------------- +14 March 2006 +box vs lattice default + +thought about changing lattice default to box default, but it would + require lots of people to change their input scripts (i.e. region + command) + +and code is good now b/c it assumes lattice, so if someone doesn't + specify a lattice then they get an error + +commands affected: + velocity (set/ramp), temperature, region, displace_atoms, fix indent + +-------------------------------------------- +10 Jan 2006 +instrumentation to LAMMPS to look at Red Storm performance in detail + +finish.cpp + add histogram section on pair performance that is in this dir + to finish.cpp + +atom.cpp, neigh_bond.cpp + DELTA, BONDDELTA settings are 10000 by default + get big change on Red Storm if change DELTA + +Makefile.storm (catamount, -D) + +thermo_one.cpp + change to no output during timestep loop, will get non-discrete + timings on Red Storm + just to screen I think, OK to logfile + +timer.cpp + comment in syncho timings if want + +in.lj + can change neighbor page and one settings to get different memory + allocation and performance + +-------------------------------------------- +6 Dec 2005 +use of map array in atom.cpp + +** Routines in atom: + +atom::map_init() + free old map() array + allocate map(1:maxtag+1) array + fill it with -1 on each proc + called by create_atoms, delete_atoms, read_data, read_restart, replicate, + velocity (tmp) + +atom::map_clear() + set map[] to -1 for all my owned and ghost atoms + called by comm, special (for scratch) + +atom::map_set() + set map[] for my own + ghost atoms in reverse order + called by comm, create_atoms, delete_atoms, read_data, read_restart, + repliacte, special (for scratch), velocity (tmp) + +atom::map_delete() + free memory for map[] + called by read_data (tmp), velocity (tmp) + +add int atom::map(i) + id = global ID + return -1 or local ID + +** Speed-critical usages of map array: + +comm::exchange() + at beginning, if (atom->molecular) atom->map_clear() + at end, if (atom->molecular) atom->map_set() +dump_bond::count() and pack() + map lookup of each bond of each atom to check if bonded atom is + in dump group, if so then global atom ID is output +fix_shake stores int *map in class so can do lots of lookups + shake_atom[][] stores global IDs of atoms in SHAKE cluster + find_clusters() called when fix is invoked + uses map() to find atoms in bond lists + pre_neighbor() uses map() to lookup local IDs of those atoms + also stores atom->map in local int *map + shake2(), etc uses map() to find atoms in shake_atom[][] +neigh_bond uses map lookups to find atoms in bond_atom, angle_atom, etc + and build bond, angle, etc neighbor lists + +** Non-critical usages of map array: + +atom::unpack_vels() + map lookup of tag of atom in each line to see if I should store vel +atom::unpack_bonds(), angles, dihedrals, impropers + map lookup of tag of each atom in bond, etc to see if I should store bond +atom::memory_usage() + accounts for memory in map array via maxmap +create_atoms::create + at end of create, if atom->molecular: atom->map_init(), atom->map_set(); +delete_atoms::delete + at end of delete, if atom->molecular + atom->nghost = 0 - no ghosts, so old ghosts won't be mapped + atom->map_init(), atom->map_set(); +fix_tmd::readfile() + uses map lookup to find atoms listed by global ID in TMD input file +read_data::atoms() + after atoms are read from data file, if (atom->molecular): + atom->map_init(), atom->map_set(); +read_data::velocities() + before vels are read, if (atom->molecular == 0) + atom->map_init(), atom->map_set(); + after vels are read and assigned: + if (atom->molecular == 0) atom->map_delete(); +read_restart::read() + at end of file read and setup, if (atom->molecular) + atom->map_init(), atom->map_set() +replicate:: + at end of setup of replicated problem, if (atom->molecular) + atom->map_init(), atom->map_set() +set::set() + uses map lookup to bond_atom, etc to verify that all atoms in a + bond, angle, etc are in the set group +special::build() + uses map lookup to find atoms in bonds and circulate unsatisfied to + other procs +special::combine() + at beginning, atom->map_clear() to allow use of map as scratch space + at end, atom->map_set() to recreate the map +velocity::create() + for loop_flag = ALL, need map to find atoms I own + at beginning, if (atom->molecular == 0) + atom->map_init(), atom->map_set() + at end, if (atom->molecular == 0) atom->map_delete() + +-------------------------------------------- +6 Nov 2005 +Bob Skeel visit and talk + +induced dipoles and fluctuating dipoles are same thing + +he has 2005 JCC paper on fast dipole solver for fluctuating dipole model +CHARMM has dipole option now + +"shadow" energy is a way to monitor energy conservation very + accurately - he has recent paper on this + +a symplectic integrator is a phase-space volume-preserving integrator +energy-conserving is a weaker criterion +Dan Negrut at U Wisc (formerly Argonne) has worked on this recently + (for rigid body integrators?) + +-------------------------------------------- +30 Sept 05 +meaning of open source, GPL from a Slashdot discussion + +(Score:5, Insightful) by TrentC (11023) on +Friday September 30, @03:23AM (#13682722) +(http://www.crystalwind.org/) + +The GPL, in fact, guarantees that if GPL'd software is used in another +product, both products then become infected by the GPL and the +resulting work is then covered by the GPL. + +This is, sadly, a common misunderstanding when it comes to the GPL. By +using the term "infected", you are either misinformed or attempting to +misinform; I'll assume the former... + +If you use code licensed by the GPL in your closed-source work and you +get "caught" distributing it, you have four options: + + 1. You can try to obtain an exception to the GPL from the copyright + holder(s) of the GPLed code for your particular work. + + 2. You can change the license of your work to the GPL (or, + possibly, one of the licenses deemed "GPL-compatible"; IANAL, so + consult a lawyer first). + + 3. You can rewrite the affected portion to remove the GPLed code + from your work. + + 4. You can stop distributing your work so long as it contains the + GPLed code. + +The copyright holder of the GPLed code can not force you to pick any +particular one of the options (except, by the definition of the GPL, +you must do #4 if you can't or won't do #1, #2 or #3). You are the +copyright holder of your code, and cannot have your license changed +against your will any more than they can have the license of their +work changed against their will. + +Jay (= + +-------------------------------------------- +26 Aug 05 +bulliten board ideas + +"Roman Voronov" +As far as the message board goes, I like websites that use +http://www.phpbb.com software(if you click on the Community link you can see +it at work). However, I have not had any personal experience with running +it. I would like to see a message board over a mailing list, because it +would be convenient to share experience with other users, instead of bugging +you with my emails. Thanks. + +could do sourceforce - Marcus has an account there for Towhee + +-------------------------------------------- +26 Aug 05 +PPPM notes + +when hardwire Gewald and mesh size: + want mesh spacing (in Angstroms) times Gewald to be ~ 0.25 + +error in PPPM part is proportional to Q^2 (h alpha) ^ order + where Q = size of one Q or size of one Q^2 ?? + h = mesh spacing + alpha = G_ewald + order = 5 typically +so if make charges 10x bigger (due to dipole separation) + then error goes up by 100, so need to adjust h (in one dimension) + to compensate + +differences between PPPM and PME and SPME + PPPM is more accurate than PME for same grid spacing + SPME reduces the gap, gets closer to PPPM, but not quite as good + if do 2 FFTs instead of 4 (e.g. in SPME) then lose some accuracy + but may be more parallel, since less FFTs + we could do 2 FFTs instead of 4 in PPPM, but with same trade-off + Gaussian real-space PME may be kind of like multipole + paper claims it is now as accurate as SPME for 1st time + but maybe not better yet + +-------------------------------------------- +23 Aug 05 +notes on dipole testing + +erf(x) = 2/sqrt(pi) x as x -> 0 + +E-field due to point charge: + Z = - grad V = - grad (q/r) + = q/r^3 rij (i.e. it points away from a positive charge + and falls off as r^2) + +E-field due to point dipole + Z = - grad V = - grad (1/r^3 p dot rij) + = 3/r^5 (p dot rij) rij - 1/r^3 p + so on horizontal axis = -1/r^3 p + on vertical axis = 2/r^3 p + +** run in 3 modes and compare: + +a) convert each dipole into separated charges with bond + run with pair lj/cut/coul/long and pppm +b) convert each dipole into separated charges with bond + run with pair dipole/long and pppm/dipole +c) treat each dipole as true point dipole + run with pair dipole/long and pppm/dipole + +compare energy, force, torque on each particle (or pair of particles) + +** energy correction factor for one dipole in a periodic box + +e_ij = qi qj / r +f = weighting factor on a bond = 0 to 1 +when no bond: E_nb = e_ij erfc + E_long +with bond: E_b = E_nb - e_ij (1 - f) +when f = 0: E_b = e_ij (erfc - 1) + E_long +true dipole: E_d = 0 (short range) + E_long (with separated charges) + +our dipole is like 2 charges with f = 0 bond (full exclusion of charge-charge) +so the E_long for dipole we compute in pppm_dipole.cpp + needs to reproduce E_b formula when f = 0 + means for each dipole, should add in e_ij (erfc - 1) + to match short range contribution of 2 point charges + +this is done in init() of pppm_dipole.cpp to compute eng_correct + +** other energy and virial correction factors + +for energy in pppm_dipole: + +** one dipole in 20^3 box, sep = 0.1, +PPPM accuracy = 0.0001, mesh = 64^3, gewald = 1.0 + +a) Etot = -0.00046063816, Ecoul = 112.463 +b) Ecoul = 112.46297, E_long = -112.46343, Etot = -0.00046063816 +c) Ecoul = 0.0, E_long = Etot = -0.00046063816 + E_pppm = -112.463, E_correct = 112.463 + +so good agreement + +** two dipoles in 20^3 box, sep = 0.1, placed at -1 and 1 in x +PPPM accuracy = 0.0001, mesh = 64^3, gewald = 1.0, RMS = 0.00546 + +a) Etot = -0.25182084, Ecoul = 224.872 + Fx = -2.33651736274 + 2.71299369315 = 0.376476330410 +b) Ecoul = 224.87238, E_long = -225.1242, Etot = -0.25181978 + Fx = -2.33652035228 + 2.71299585767 = 0.376475505390 +c) Ecoul = -0.052836928, E_long = -0.19826378, Etot = -0.25110071 + Epppm = -225.124, E_correct = 224.926 + Fx = 0.374021405918 + +good agreement, better in eng than force +could disagreement be in short-range, not long-range ?? + +** two dipoles in 20^3 box, sep = 0.02, placed at -1 and 1 in x +PPPM accuracy = 0.0001, mesh = 128^3, gewald = 2.0, RMS = 0.00413 + +a) Etot = -0.21246041, Ecoul = 11277.8 + Fx = -13.1373720414 + 13.5124040759 = 0.37503203449999845 +b) Ecoul = 11277.811, E_long = -11278.024, Etot = -0.21246041 + Fx = -13.1380970108 + 13.5131290459 = 0.37503203510000027 +c) Ecoul = -2.162565e-06, E_long = -0.21245823, Etot = -0.21246039 + Fx = 0.375031760716 + +even better agreement, but could be b/c of higher gewald + pushing more computation into long-range + +** one dipole at -1, one pt charge at +1 +dipole on top of point charge +two dipoles with 2 point charges + +good agreement in all cases for energy and forcesbetween 3 +virial close but small so not perfect agreement + +need to check on virial as run bigger systems + +bugs I found: 1/2 factor in separation in pppm_dipole + didn't have q and dipole included in rho_map and unmap + needed E correction due to paired-charge term no longer computed in + pairwise + +-------------------------------------------- +21 Jun 05 +Seel notes on LJ + EAM via hybrid vs modifying EAM to do LJ: + +You'll be happy to know that the LJ + EAM hybrid capability gives the +exact same energy/pressures as doing the same with a SETFL, but the +hybrid method is 30% faster. In order to get exactly the same answers +(mostly because of the funniness of putting a LJ into a SETFL) I had +to use shifted and smoothed (ie., derivative=0 at rcut) LJ potentials +for both the hybrid and SETFL runs, which necessitated using +"pair_style table". I've attached all the input scripts, data files, +and output dumps for your enjoyment. + +-------------------------------------------- +21 Jun 05 +notes on NVT and NPT + +FS = Frenkel Smit book on Understanding Molecular Simulation +Mel = Melchionna 1993 paper on NPT w/ center-of-mass +Mar = Martyana 1995 paper on NVT/NPT in exp() notation for hierarchical steps + +** Nose/Hoover NVT (FS eq 6.1.24-6.1.27, Mel eq 7 w/out pressure part) + +dx/dt = v +dv/dt = F/m - eta v +d(eta)/dt = v_T^2 (T/T_ext - 1) + +** Verlet form of N/H NVT (straightforward differencing) + +eta' = eta + dt/2 v_T^2 (T/T_ext - 1) +v' = v + dt/2 (F/m - eta' v) +x_new = x + dt v' +F_new = force(x_new) +v_new = v' + dt/2 (F_new/m - eta' v') +T_new = temperature(v_new) +eta_new = eta' + dt/2 v_T^2 (T_new/T_ext - 1) + +** NVT with exp() operators (Mar eqs 26,35 and Appendix A) + +no chains, set NNOS = w = nresn = nyosh = 1, Nf = 3N deg of freedom + +is just 2 scalings of v on either side of NVE velocity Verlet + +v = v * scale +v' = v + dt/2m F +x_new = x + dt v +F_new = force(x_new) +v_new = v' + dt/2m F_new +v_new = v_new * scale + +scale computation: + +KE = sum (m v^2) +GLOGS = (KE - 3NkT_ext) / Q +VLOGS += dt/4 GLOGS +scale = exp(-dt/2 VLOGS) (roughly 1 - dt/2 VLOGS) + +** LAMMPS NVT (fix_nvt.cpp) + +f_eta = v_T^2 (T/T_ext - 1) +eta_dot' = eta_dot + dt/2 f_eta +factor = exp(-dt/2 eta_dot') (roughly 1 - dt/2 eta_dot') +v' = v * factor + dt/2m F (roughly v' += dt/2m F - dt/2 eta_dot') +x_new = x + dt v' + +F_new = force(x_new) + +v_new = (v' + dt/2m F_new) * factor (factor applied to both terms) +T_new = temperature(v_new) +f_eta = v_T^2 (T_new/T_ext - 1) +eta_dot_new = eta_dot' + dt/2 f_eta + +** Comparison of all NVT options + +LAMMPS NVT is similar to Verlet form of N/H + if exp(-dt/2 eta_dot') = 1 - dt/2 eta' + which it should be for small eta_dot + will eta_dot ever accumulate (after many timesteps) to large value + only if T_actual stays larger (or smaller) than T_desired for a long time + LAMMPS applies old factor to (v' + F) + maybe that is like applying eta_new in Verlet difference ?? + Verlet has ambiguity in that eta_new requires T_new which requires + v_new which requires eta_new - so not sure which to use when +LAMMPS NVT is similar to Martyana NVT with exp() operators + if VLOGS = eta_dot + so GLOGS/2 = f_eta + and KE - 3NkT_ext / 2Q = v_T^2 (T/T_ext - 1) + since sum (m v^2) = KE = 3NkT + thus v_T^2 = 3/2 NkT_ext / Q + Martyana (p 1121) says Q = 3NkT / w^2 where w is freq of T oscillations + so v_T^2 = w^2 / 2 + not sure if w is frequency or radians/sec + but if former, the 2 methods match within a factor of sqrt(2) + one difference: Martyana computes KE (T_new) in 2nd scale based on current v, + which means it has been updated by F_new but not 2nd eta, that + quantity is never available in LAMMPS b/c v is updated all at once + +** Nose/Hoover NPT (Mel eq 7), in center-of-mass form + +dx/dt = v + omega (x - X0) (X0 is center-of-mass) +dv/dt = F/m - (eta + omega) v +d(eta)/dt = v_T^2 (T/T_ext - 1) +d(omega)/dt = v_P^2 (Vol/NkT_ext) (P - P_ext) (Vol/NkT is like 1/P_ext) +d(Vol)/dt = 3 Vol omega + +** Verlet form of N/H NPT (straightforward differencing) + +eta' = eta + dt/2 v_T^2 (T/T_ext - 1) +omega' = omega + dt/2 v_P^2 (Vol/NkT_ext) (P - P_ext) +v' = v + dt/2 (F/m - (eta' + omega') v) +Vol' = Vol + dt/2 (3 Vol omega') +x_new = x + dt v' + +F_new = force(x_new) + +Vol_new = Vol' + dt/2 (3 Vol' omega') +v_new = v' + dt/2 (F_new/m - (eta' + omega') v') +T_new = temperature(v_new) +eta_new = eta' + dt/2 v_T^2 (T_new/T_ext - 1) +P_new = pressure(x_new,Vol_new,virial_new,T_new) +omega_new = omega' + dt/2 v_P^2 (Vol_new/NkT_ext) (P_new - P_ext) + +** NPT with exp() operators (Mar eq 39 and Appendix B) + +no chains, set NNOS = w = nresn = nyosh = 1, Nf = 3N deg of freedom + +is just 2 scalings of v on either side of NVE velocity Verlet +plus box rescaling of coords and volume + +v = v * scale +v' = v + dt/2m F +AA2 = exp(dt VLOGV) +x_new = x * AA2 + dt v (actually modified more for box velocity) +F_new = force(x_new) +v_new = v' + dt/2m F_new +v_new = v_new * scale + +scale computation: + +KE = sum (m v^2) +GLOGS = (KE + VMASS*VLOGV*VLOGV - (3N+1)kT_ext) / Q +GLOGV = [(1 + 1/N) * KE + 3 (P_int - P_ext) * Vol ] / VMASS +VLOGS += dt/4 GLOGS +AA = exp(-dt/8) +VLOGV = VLOGV AA AA + dt/4 GLOGV AA +AA = exp(-dt/2 (VLOGS + (1 + 1/N) VLOGV)) +scale = AA +KE = KE AA AA +GLOGV = [(1 + 1/N) * KE + 3 (P_int - P_ext) * Vol ] / VMASS +AA = exp(-dt/8 VLOGS) +VLOGV = VLOGV AA AA + dt/4 DLOGV AA + +** LAMMPS NPT (fix_npt.cpp) + +f_eta = v_T^2 (T/T_ext - 1) +eta_dot' = eta_dot + dt/2 f_eta +f_omega = v_P^2 (Vol/NkT_ext) (P - P_ext) +omega_dot' = omega_dot + dt/2 f_omega +factor = exp(-dt/2 (eta_dot' + omega_dot')) +dilation = exp(dt/2 omega_dot') +v' = v * factor + dt/2m F +xprd' = xprd * dilation (box dilation) +x_new = x + dt v' + +F_new = force(x_new) + +xprd_new = xprd' * dilation (box dilation) +v_new = (v' + dt/2m F_new) * factor (factor applied to both terms) +T_new = temperature(v_new) +f_eta = v_t^2 (T_new/T_ext - 1) +eta_dot_new = eta_dot' + dt/2 f_eta +P_new = pressure(x_new,xprd_new,virial_new,T_new) +f_omega = v_P^2 (Vol_new/NkT_ext) (P_new - P_ext) +omega_dot_new = omega_dot' + dt/2 f_omega + +-------------------------------------------- +28 Apr 05 +new NPT ideas for better pressure equilibration + +see NOTES/npt_ideas +plots from Jon Z of problems with NPT Nose/Hoover for metals +2 fix_npt_pr files he started to allow Parinello/Rahman algorithm instead + +-------------------------------------------- +14 Mar 2005 +how EAM files are read/interpolated in original LAMMPS 2004 version + +simulation is either all funcl, or all setfl (single file, all types mapped) + +** funcfl (one element): + +read_funcl: once for each pair_coeff command + mass, nrho, drho, nr, dr, cut + arrays: frho(nrho), zr(nr), rhor(nr) + +if i = j (in pair_coeff) + set global mass + store_funcl: + stores read-in values in [type][nr or nrho] arrays + so this is done just for each type + +convert_funcfl (called once by init for all ntypes): + cutforce = max of all cuts + ditto for dr,drho + set global nr,nrho based on dr,drho and longest potential range + interp frho[itype][nrho] + interp rhor[itype][nr] + interp zrtmp[itype][nr] from zr + set z2r[type][jtype] = 27.2*0.529 * zrtmp[i] * zrtmp[j] + +spline coeff interp from frho,rhor,z2r + +set cutsq[i][j] to cutforce^2 +cutforcesq = cutforce^2, used in compute() for all pairs + +** setfl (multi-element): + +read_setfl: one time + mass[itype], nrho, nr, drho, dr, cut + arrays: frho[itype], rhor[itype], z2r[itype][jtype] for itype <= jtype + copy z2r values for itype > jtype + +create map[itype] = arg in pair_coeff command +set global mass of all types + +global nr,nrho,dr,drho,cutforce set from setfl file values + +copy frho,rhor,z2r file values into arrays used by interpolate() + +spline coeff interp from frho,rhor,z2r + +set cutsq[i][j] to cutforce^2 +cutforcesq = cutforce^2, used in compute() for all pairs + +-------------------------------------------- +25 Jan 2005 +how to scan directory for filenames + +works on Linux, Tflop, should soon work on other machines + +#include +#include +#include + +int main (void) +{ + DIR *dp; + struct dirent *ep; + + dp = opendir ("./"); + if (dp != NULL) + { + while (ep = readdir (dp)) + puts (ep->d_name); + (void) closedir (dp); + } + else + perror ("Couldn't open the directory"); + + return 0; +} + +-------------------------------------------- +25 Jan 2005 +PPPM and PME discussion with Paul + +used to be that Ewald used beta (Ewald G-vector) and PPPM used G/sqrt(2) + see Roy paper on PPPM - uses G/sqrt(2) + +Paul changed it so that both Ewald and PPPM just use G + consistent with PME papers of Darden, etc + did this by changing how G is set in PPPM setup + +PME formulations can be done to do 2 FFTs instead of 4 like we do in PPPM + done by analytic form of derivatives + Darden dipole paper has some discussion of PME variants like this + Paul has paper that carefully compared PME/PPPM and these variants + for charge system (no dipoles) + concluded PPPM is better than PME + smoothing can be done for PME or PPPM (in different way) + trade-off in accuracy vs FFTs + 4 FFTs is more accurate so fair comparison is against 2 FFTs of larger grid + in parallel, the FFTs hurt, so may be better to do 2 FFT version + +-------------------------------------------- +18 Jan 2005 +Pair routine and bond routine forces + +r = scalar distance between atoms i and j +rij = vector = R_i - R_j, delx = x_i - x_j = vector from j to i +E(r) is given for pair, bond, etc +F = -Grad_i E(r) = - dE/dr Grad r +Grad r = dr/dx i + dr/dy j + ... +dr/dx = 1/r (x_i - x_j) +so Grad r = 1/r rij +so F = -1/r dE/dr rij + +in pair routines: + forcelj variable (lj/cut) = - r dE/dr + fforce variable (all pair routines) = - 1/r dE/dr + delx = x_i - x_j + Fij_x = x-force on atom i due to atom j = fforce * delx + +in bond routines: + fforce variable = - 1/r dE/dr + +-------------------------------------------- +17 Jan 2005 +Releasing a new version of LAMMPS + +do these steps in order + +lammps/src: + pur (to get rid of old files) + make package-check to insure all src files are current with + master copies in package sub-dirs + take out any changes/files/packages that are not ready for release + include style files and package/Install.csh in this check + +tests: + don't have regression set yet - so skip for now + idea: run all tests and compare to old files to see if they work + +lammps/tools: + is restart2data up-to-date with all potentials and atom style in src + is replicate.c up-to-date with any new atom styles + +lammps/doc: + pur (to get rid of old files) + txt2html *.txt + Section_intro.txt + update feature sub-section (see WWW page version) + Section_history.txt + update future plans sub-section (see WWW page future list) + Setion_errors.txt + run error.py to insure error list and source code agree + make sure all packages are included in src for this operation + browse Section_errors.html to insure haven't left off a tag + make sure all Eqs are up-to-date by running Script (update Script as well) + if necessary, re-import to JPG, clip, at 33% from xpdf display + +lammpsdist.sh 17Jan05 '17 Jan 2005' (one year is 2-digit, other is 4) + if are any new packages, examples, bench, tools, doc, lib files, etc then + edit bin/lammpsdist.sh to include them + include ALL packages in src so will be able to run benchmarks & examples + run lammpsdist.sh to create a new tar file temporarily + this will change date in all src files before running bench & examples + will need to re-create this tar file after run bench & examples + +bench: + create a new bench/Log dir with the new date + update Script.compare, Script.pack, Script.unpack + make new executables for linux and liberty, etc + run 5 benchmarks on 1 and P procs, using new executables + run Script.pack to pack benchmark files for any machine + edit and use Script.linux.1, nqs.liberty.8, etc + put log file results in new Log_date dir + run Script.unpack to put those log files back into Lj, Eam, Chute, etc + run Script.compare to see if answers/timing changed + log.*date* files in Lj, Chute, Chain, Eam, Rhodo are ones copied to + new dist, so make sure new dated copies are in those 5 dirs + +examples: + update Script.compare, Script.pack, Script.unpack + run Script.pack to pack example files into HOLD, xfer to whatever machine + re-run all examples with new version via Script.linux.1 and Script.liberty.4 + set date and executable in scripts first + need to run liberty one as interactive batch else change dir seems to fail + copy log* and dump* files back from parallel machines into HOLD + run Script.unpack to put log* and dump* files back into example dirs + run Script.compare to see if answers/timing changed + viz any movies from new dump files if worried answers not the same + gzip all the dump* files + all log.*date* files will get put in distribution + clean up and make sure they are current with new version + +lammpsdist.sh 17Jan05 '17 Jan 2005' (one year is 2-digit, other is 4) + final build of tar file with all examples and bench runs + first whack previous tar file and dir in lammps/versions + make no-PACKAGE for any packages not to be included by default + cp tar file into tmp dir, unpack and build LAMMPS to make sure it works + look thru unpacked dir to insure everything is there + new packages, new examples, new versions of README files, etc + check new Manual.pdf + add list.17Jan05 as empty file to lammps/patches + make sure package dirs are listed correctly (including new ones) in + bin/patch.py + +2001: + make new release if necessary + save old tar file in versions/2001 with date + create tar file in versions/2001 + put date of new release in download.txt and size of new 2001 tar file + +text/www/ + index.txt + set new date for current LAMMPS version + create a "New.gif" bullet for the new release + change hi-lite to a new picture or movie, test all links + abstract and pic links need to be different + store line in old hi-lites at bottom + bug.txt + set new date for current LAMMPS version + collapse all old patches into a file like bug.1Sept04 + make an entry on release date with list of all major changes + put in line count for new version + download.txt + set new date for current LAMMPS version (2) + set size of new tar file + save WWW:download.log file on my machine + update count of downloads + count.py download.log LMP 600 0 (10 min delay) + count.py download.log.2004-6 LMP -1 0 (infinite delay) + also add in SF downloads to count + also do ALL to get non-LAMMPS downloads for my WWW download page + features.txt - update it (see Section_intro of doc) + future.txt - update it (see Section_history of doc) + txt2html *.txt in both text/www and text/www/lammps + +actual update: + www.py -dist lammps 17Jan05 + see www.py header for full info + puts all doc files in text/www and onto WWW server + puts tar file and new soft-link on WWW server + on WWW in tars: cp lammps-17Jan05.tar.gz lammps-upgrade.tar.gz + text/www + www.py -p download.txt download.html lammps.txt lammps.html lammps_new.* + text/www/lammps + www.py -p *.txt *.html + put new 2001 tar file onto barky if changed + try to do a download from WWW site myself + put new tar file on SourceForge + click on "file releases" under admin + click on "add release" at bottom of page + new release name = lammps-3Jun05 + no release notes or change log, click submit + goto Step 2 + upload tar file via anon ftp and select it to add the file to release + ftp to upload.sourceforge.net, cd to incoming, upload the file + click on refresh to see new file, select it, click on add file + should see File Updated + goto Step 3 + processor release date = Any + file type update = Source .gz + click on update/refresh + can then test a download + send email to lammps-users mail list if desired via Gmail + +-------------------------------------------- +3 Jan 2005 +fix rigid integration and accuracy vs SHAKE + +see NOTES/fix_rigid +graphs of temperature, energy, pressure for 2 runs of same system +a box of a few 100 waters, held rigid by SHAKE or fix rigid +pressure does not agree on 1st timestep + +bad to integrate with just normal NVE w/ velocity Verlet + energy is not conserved + issue of when to renormalize Q + issues of dq/dt = 1/2 q w_body + w_body depends on q, so aren't being consistent about where + in timestep each quantity is when do update + think it becomes 1st order with these errors, hence very bad energy conserve + options: Richardson extrapolation or Nic Martys solution + we used Richardson because it was cheap and as good as an iterative + solver in Nic Martys paper + is also a question of when to stop iterations + +put code for other fix rigid integrators we didn't end up using + in NOTES/fix_rigid +vanilla = old bad one +iterate = Nic Martys style one + +Paul's tests that justify use of Richardson + +Here are the energy conservation results. + +Method log(ave abs of energy fluctuation) +shake -3.913702852 +vanilla -0.625317489 +rich -3.538767441 +iterate.2 -3.48685072 +iterate.3 -3.518183999 +iterate.4 -3.569168296 +iterate.5 -3.587866192 +iterate.10 -3.573231918 + +Timings were essentially the same. This was for a 10 ps run of 216 +waters. My conclusions: +1) shake gives the best energy conservation +2) all the others except vanilla give good energy conservation +3) more than 4 iterations doesn't substantially improve E conservation + +So, I vote for releasing it with either rich or 4 or 5 on the iteration +method. + +-------------------------------------------- +3 Jan 2005 +Paul's graphs for bit-mapped table performance for long-range Coulombics + +see NOTES/tables_coulomb +graphs of CPU performance and RMS error bounds + +-------------------------------------------- +22 Dec 2004 +Dipoles + +ways that dipole length is used: + +atom_dipole::init() - normalizes each atom's dipole +dump - just dumps it +integrator nve - renormalizes each atom to dipole length +set_type - creates a dipole of proper length +initial data file - just reads it +create atoms - sets dipole to zero + +-------------------------------------------- +14 Dec 2004 +Force tabling for coul long + +code for how I did lookup, linear, spline before Paul chose just +linear with bitmap is in NOTES/table_coulomb + +-------------------------------------------- +7 Dec 2004 +Full neighbor lists - and how to use them + +added neigh_full routines to construct neighbor lists where + all the neighbors of each atom are listed + +changes to neighbor class: + init: + full flag is 0 if only one regular list is maintained + full flag is 1 if only one full list is maintained + full flag is 2 if an extra full list is maintained + looks at fixes, dumps to decide what to set full flag to + 2 versions of neigh_full routines: nsq and bin + neigh_full works using regular neigh list variables (pages, firstneigh, etc) + build_full calls nsq or bin version of neigh_full, but swaps + regular vars with full vars (pages_full, etc) so neigh_full constructs + list in extra memory + can construct full list in regular memory by setting pair_build fn ptr + to neigh_full nsq or bin + setup_bins constructs a stencil for full neighbor list if full + rest of neighbor routines manages memory for 2 sets of list if full flag = 1 + +used by Si potentials (3-body) + only 1 neighbor list: full + call directly from neighbor->build() directly by setting ptr +used by Koen in his fix to compute extra forces due to atom neighborhood + he will want updated list every timestep + rest of LAMMPS needs normal list + neighbor::init() looks for named fix (koen) to set full flag = 2 (extra list) + fix calls neighbor::build_full() when neighbor->ago is 0 + fix uses firstneigh_full and numneigh_full to access full list +used by dump of centro symmetry (CENTRO fix) + fix needs full list every 100 steps (or thereabouts) + rest of LAMMPS needs normal list + neighbor::init() sets full flag = 2 if a fix centro is defined + fix calls neighbor::build_full() each time it is invoked at end-of-step + fix uses firstneigh_full and numneigh_full to access full list + will be inefficient if 2 or more dumps use CENTRO + will be inefficient if dump is called (nearly) every step + +-------------------------------------------- +26 Oct 2004 +Changes vs F90 LAMMPS + +in F90, force units in dump are not good +in F90, -3 dof in temp is not done in velocity creation, nor is SHAKE dof + do it right in 2003 +in SHAKE, the shake_update in src F90 version uses full dt for + unconstrained update even when dtsq_factor is 1/2 - this seems + incorrect +use of PI in code is inexact in F90 LAMMPS, look for 3.14159 thruout code +shouldn't need extra param in Temp creation + # of degrees of freedom to subtract +Langevin should not be pegged to Marsaglia RNG +way fix_Langevin calls initial seed with proc ID +langevin is different in LAMMPS 2001 when done with fix via temp rescale + in former case, no call is done from start routine (itime = 0) + not sure which is correct for restarting - in new LAMMPS there is + only one kind of langevin fix, so need to make pre() correct for both + ways - with call in pre(), matches temp rescale in LAMMPS 2001, + without call in pre(), matches fix langevin in LAMMPS 2001 + think about which way is correct! + +-------------------------------------------- +25 Oct 2004 +User question about LAMMPS + +Here is the kind of "help me" email you get when you put +your code on the WWW for anyone to grab ... + +Maybe I'll tell him to send mail to Microsoft asking why +there isn't a "run" command in Linux ... + +I already built LAMMPS by=20 +"make serial" +command and then I got lmp_serial fiel in src directory. +Then I copy it to example/melt directory and command=20 + +"run lmp_serial < in.melt". + +But I only got a message +"bash: run: command not found". + +-------------------------------------------- +15 Oct 2004 +What GPL license means for another code: + +HTMLDOC is provided under the GNU General Public License ("GPL") with +a license exception for the OpenSSL toolkit. A copy of the exception +and license follows this introduction. + +For those not familiar with the GNU GPL, the license basically allows you to: + + * Use the HTMLDOC software at no charge. + * Distribute verbatim copies of the software in source or binary form. + * Sell verbatim copies of the software for a media fee, + or sell support for the software. + * Distribute or sell your own modified version of HTMLDOC so long as + the source code is made available under the GPL. + +What this license does not allow you to do is make changes or add +features to HTMLDOC and then sell a binary distribution without source +code. You must provide source for any changes or additions to the +software, and all code must be provided under the GPL. + +-------------------------------------------- +10 Sept 2004 +EAM in LAMMPS vs Warp vs ParaDyn + +why is ParaDyn so slow + +Here are some quick timings (CPU secs for 100 steps) I did for this +32K atom problem on Tflops (ross is down, I don't think it would be +much different, just faster): + +Procs ParaDyn LAMMPS Warp +1 618 176 155 +8 73.6 23.9 20.3 +64 10.4 3.60 3.03 + +All the codes scale OK. ParaDyn probably gets a bit of a boost from +cache usage as the speed-up from 1->8 procs is unrealistic. Warp is a +little faster than LAMMPS, b/c it is a much more streamlined code. + +The real issue is how much slower ParaDyn is on one-proc. This goes +back to when Warp was written - both it and Pdyn are Fortran (f77 and +f90). I thought I just took ParaDyn code for force evaluation and +stuck it into Warp, but I went back and looked at my Warp notes and +benchmarks. It was 3-4x faster than ParaDyn on all machines from the +start. Don't remember why. I must have done something faster than +ParaDyn with how neighbor lists are used and forces are computed in a +pairwise sense. That carried over into LAMMPS as I lifted code from +Warp for LAMMPS (converting to C++, which doesn't change performance +much). + +-------------------------------------------- +20 Aug 2004 +Tool for auto-generate of a distribution + +** tool that you give distribution date to + +set version_str in universe.cpp +set new date in Manual.txt +set date on download page +set date on bug page +anyplace else in DOC or lammps WWW site that date is? +run txt2html on doc dir +copy Doc files to lammps/doc +create a new Makefile.explicit + +** create Distribution dir and tar it: + +lammps_4Sept2004 + +README - look in doc - you should have N dirs and 2 files - point to LWS - go to Manual.html + go to Sec_start.html, Sec_intro to learn about LAMMPS, my email +LICENSE +potentials + README - DYNAMO format - no DOC - see pair_style EAM + cuu3 +bench + README - how to run them, send them to me - see Benchmaarg Page of LWS + in.eam + data.chain + in.chain + in.chain.P + log.chain.linux.1 + log.chain.tflop.8 + all 5 +doc + Eqs - just gif + Manula.html + Sec.html + command.html + all *.txt +src + MAKE/Makefile.* + Makefile + Makefile.explicit + *.cpp + *.h + STUBS dir +examples + README - see Section_examples - how to run each of 8 (plus 2) + flow + in.flow + log.flow.linux.1 + log.flow.tflop.8 + friction + all 8 +tools + Makefile + top-level tools + dirs of package tools + +** set of WWW pages + +top-level + main.html + *.html + lammps.html + download.html + download.pl + abstracts + papers + pictures + movies ? + doc (for all but LAMMPS) + tars (tarballs) - for each download + *.txt for each html +lammps + FAQ.html + *.html + *.txt + abstracts + movies + pictures + doc - identical to tarball + inputs + for bench + for examples + +-------------------------------------------- +14 Aug 2004 +Aidan comments on NPT in LAMMPS + +I went through the derivation of the Nose-Hoover style barostat +and obtained a slightly different version than what is in +LAMMPS. When I tried both versions in GRASP, the LAMMPS version +showed poorer conservation of the psuedo-Hamiltonian. +I pointed this out to Mark Stevens, but he did not pursue it. +I really don't know if it is a big deal, since there are other issues +with those equations of motion anyway. But I think it +would be good to report conserved quantities in LAMMPS, +as a sanity check for users running extended-system simulations. + +-------------------------------------------- +5 Aug 2004 +Mark Stevens interest in large LAMMPS simulations on Red Storm + +Note: the adhesives sim would require bond breaking and formation + +I have some interest in running some large adhesive simulation. +With Tom Woolf, I am interested in doing some large scale simulations of +membrane fusion. + +>Mark & Gary - +> +>2 things I've heard about the new Red Storm machine that may be of +>interest to you. +> +>(1) 1/4 of it (10 Tflops) should be up and running by Oct. The full +>machine not until next spring or summer. +> +>(2) There will be a bias in the policies towards large jobs (1000s of +>procs). Since the individual procs will also be fast, this translates +>into large LAMMPS runs. So you might want to be thinking about big +>problems that would be cool to try out before the machine gets +>overloaded. Also, the new LAMMPS has the option to grab 1000 procs +>and run 100 10-proc jobs under the covers, but that probably isn't what +>they have in mind ... +> +>Steve +> +> + +-------------------------------------------- +3 Aug 2004 +broken LADERA link + +Under Publications, the link to LADERA is broken. +Dynamics of Exchange at Gas-Zeolite Interfaces I: Pure Component Butane +and Isobutane, M. Chandross, E. B. Webb III, G. S. Grest, M. G. Martin, +A. Thompson, and M. Roth, J Phys Chem B 105, 5700 (2001). (this paper +used LADERA , a MC/MD +code which uses LAMMPS for its MD portion). + +-------------------------------------------- +21 Jun 2004 +Paul's response to rRESPA + +Looks great! + +I don't see a problem with having SHAKE constrained at every level of +respa, because typically, our innermost time step would be 2.0 fs if +we're running SHAKE, and that's the same as the non-respa time step that +I'm currently using. It won't be any slower. All it will do is allow us +to take a bigger time step on the slowly changing long-range forces, +which will allow the simulation to proceed faster. + +The fix rigid we'll probably need to change so that it don't change +positions, just velocities in the spirit of that paper I sent. We can +think of it in terms of an impulse "kick" that pushes the bodies by +altering the velocities of the individual atoms that make up the body. + +I like the idea of the outermost timestep being the one that the user +specifies and having the neighborhood lists trigger off of it. The inner +neighbor lists could either be updated every time the outer forces are +computed, or else have a trigger of their own. But for efficiency, we'll +probably want to update the inner lists only when the outer forces are +computed. + +If the langevin forces are inexpensive and need to be updated +frequently, the inner only may be the right place for them? In fact, any +of these that are cheap could be done on the innermost level only, +without substantial slowdown. + +I'm not sure on the NPT and NVT ensembles. It may be adequate to do +these on the innermost level only. + +Paul + +-------------------------------------------- +21 Jun 2004 +rRESPA notes + +** Input specification + +run_style verlet # the usual velocity-Verlet +run_style respa N 2 2 2 2 angle 2 pair 4 kspace 5 + + N = # of levels + 2 2 2 2 = loop factor between levels, specify N-1 values + rest or args are optional - assign a force to a level (1 to N) + + there are 6 kinds of forces to assign to levels + bond, angle, dihedral, improper, pair, kspace + (could add more like pair/inner, pair/outer, etc) + by default bond is assigned to 1st level (inner-most) + by default pair is assigned to Nth level (outer-most) + be default angle is assigned to bond's level + be default dihedral is assigned to angle's level + be default improper is assigned to dihedral's level + be default kspace is assigned to pair's level + +timestep 10.0 # dt for outermost level +run 1000 # 1000 steps of outermost level + +** Fixes in rRESPA + +each level has 3 places to call fixes: + +INITIAL_INTEGRATE (typically where v,x are updated) +POST_FORCE (right after forces are computed) +FINAL_INTEGRATE (typically where v is updated) + +additionally, the entire hierarchy has these calls: + +END_OF_STEP (at outer-most level) +PRE_NEIGHBOR and PRE_EXCHANGE (before neighbor lists are rebuilt) + +** Where to apply fixes in rRESPA + +*addforce = POST_FORCE, outer only +*aveforce = POST_FORCE, every level + do ave at every level, only add in extra force at outermost +*com = END_OF_STEP +*drag = POST_FORCE, outer only +*enforce2d = POST_FORCE, every level +*freeze = none (no respa with granular) +*gravity = none (no respa with granular) +*gran/diag = none (no respa with granular) +*indent = POST_FORCE, outer only +*insert = none (no respa with granular) +*langevin = POST_FORCE, outer only +*lineforce = POST_FORCE, every level +*msd = END_OF_STEP +*npt = INITIAL & FINAL INTEGRATE, every level +*nvt = INITIAL & FINAL INTEGRATE, every level +*nve = INITIAL & FINAL INTEGRATE, every level +*nve/granular = none (no respa with granular) +*planeforce = POST_FORCE, every level +*setforce = POST_FORCE, every level, + set f = 0 on all inner, set to full value on outermost only +*shake = PRE_NEIGHBOR, whenever pair-wise neighbor lists re-built + POST_FORCE at innermost level +*spring = POST_FORCE, outer only +*temp/rescale = END_OF_STEP +*viscous = POST_FORCE, outer only +*vol/rescale = END_OF_STEP +*wall/gran = none (no respa with granular) +*wall/lj93 = POST_FORCE, outer only +*wiggle = POST_FORCE, outer only + +-------------------------------------------- +18 Jun 2004 +Debye-Huckle notes + +E(r) = q q / r * exp(-Kr) where K = kappa = user input coeff +used in place of standard Coulomics +usual leading dielectric coeff +used with typical additional LJ term + +F = - Grad (E) +in pair routines: fforce = -1/r * dE/dr +so that Fxi = x force on atom i = delx*fforce where delx = xi - xj +gives correct sign of forces for 2 +q charges separated in x, + with x1 to the right of x2, i.e. atom 1 has +Fx, atom 2 has -Fx + since dE/dr = -q q / r^2 + +E(r) = q q / r * exp(-Kr) +dE/dr = q q [ -K exp(-Kr) / r + exp(-Kr) (-1/r^2) ] + = - q q K / r exp(-Kr) - q q / r^2 exp(-Kr) + = - q q exp(-Kr) [ K/r + 1/r^2 ] +fforce = q q / r^2 exp(-Kr) [K + 1/r] + +-------------------------------------------- +8 Jun 2004 +Langevin units notes + +force = gamma_1 velocity + gamma_2 + +gamma_1 = units of mass / time +force->ftm2v converts ft/m to v +thus f_1 = gamma_1 / ftm2v * velocity +divide gamma_1 in code by ftm2v + +gamma_2 = units of sqrt(m) sqrt(E/t^2) +force->mvv2e converts mv^2 to eng +thus gamma_2 = mv/t sqrt(1/mvv2e) +thus f_2 = gamma_2 / ftm2v / sqrt(mvv2e) +divide gamma_2 in code by ftm2v*sqrt(mvv2e) + +-------------------------------------------- +8 Jun 2004 +Units notes + +for lj, all conversions = 1 +for real & metal, convert both to cgs and set equal, solve for c + +(0) Boltzmann factor + +should be set to eng/temperature for that set of units + +* metal: + +want kB in eV/K +kB = 8.617e-5 eV/K + +* real: + +want kB in Kcal/mole/K +kB = 0.001987191 ~= (8.617e-5 eV/K) (1 Kcal / 2.613e22 eV) (6.023 atoms/mole) + +(1) force to velocity conversion (in integrator) + +v = c (tf/m) +c = force->ftm2v = converts ft/m to velocity + +* real: + +ft/m is Kcal/mole-Ang fmsec/(g/mole) +v is Ang/fmsec + +ft/m (cgs) = ft/m (4.184E10 erg / Kcal) (sec / E15 fmsec) (E8 Ang / cm) +v (cgs) = v (cm / E8 Ang) (E15 fmsec / sec) + +c = 4.184 E-4 = 1 / (48.88821 * 48.88821) + +* metal: + +ft/m is eV/Ang psec/(g/mole) +v is Ang/psec + +ft/m (cgs) = ft/m (1.60219E-12 erg / eV) (sec / E12 psec) + (6.022E23 atoms / mole) (E8 Ang / cm) +v (cgs) = v (cm / E8 Ang) (E12 psec / sec) + +c = 9.648388E3 = 1 / 1.036443E-4 + +(2) mv^2 to KE conversion (in thermo) + +boltz T = c (m v^2) +c = force->mvv2e = converts mv^2 to energy + +* real: + +mv^2 is g/mole Ang^2/fmsec^2 +eng = Kcal/mole + +mv^2 (cgs) = mv^2 (mole / 6.022E23 atoms) (cm^2 / E16 Ang^2) + (E30 fmsec^2 / sec^2) +eng (cgs) = eng (4.184E10 erg / Kcal) (mole / 6.022E23 atoms) + +c = 2390.057 = 48.88821 * 48.888821 + +* metal: + +mv^2 is g/mole Ang^2/psec^2 +eng = eV + +mv^2 (cgs) = mv^2 (mole / 6.022E23 atoms) (cm^2 / E16 Ang^2) + (E24 psec^2 / sec^2) +eng (cgs) = eng (1.60219E-12 erg / eV) + +c = 1.036443E-4 + +(3) NkT/V to pressure conversion (in thermo and NPT integrator) + +P = c (NkT/V) +c = force->nktv2p = converts NkT/V to pressure + +* real: + +NkT/V is Kcal/mole-K K/Ang^3 +P is atm + +NkT/V (cgs) = NkT/V (mole / 6.022E23 atoms) (4.184E10 erg / Kcal) + (E24 Ang^3 / cm^3) +P (cgs) = P (1.013E6 dyne/cm^2 / atm) + +c = 68586.95 + +* metal: + +NkT/V is eV/K K/Ang^3 +P is bar + +NkT/V (cgs) = NkT/V (1.60219E-12 erg / eV) (E24 Ang^3 / cm^3) +P (cgs) = P (E6 dyne/cm^2 / bar) + +c = 1.60219E6 + +(4) q^2/r to energy conversion (in pair potential) + +E = c (q^2 / r) +c = force->qqr2e = converts q^2/r to energy + +* real: + +q^2/r is e^2/Ang +eng is Kcal/mole + +q^2/r (cgs) = q^2/r (E8 Ang / cm) (1.60219E-19 Coul / e)^2 + (statCoul / 3.3356E-10 Coul)^2 +E (cgs) = E (4.184E10 erg / Kcal) (mole / 6.022E23 atoms) + +(statCoul is cgs unit of charge) +c = 332.0697 + +* metal: + +q^2/r is e^2/Ang +eng is eV + +q^2/r (cgs) = q^2/r (E8 Ang / cm) (1.60219E-19 Coul / e)^2 + (statCoul / 3.3356E-10 Coul)^2 +E (cgs) = E (1.60219E-12 erg / eV) + +(statCoul is cgs unit of charge) +c = 14.40659 + +(5) qE to force conversion (in fix efield) + +F = c (q E) +c = force->qe2f = converts qE to force + +* real: + +qE is e Volt/Ang = e joule/Coulomb-Ang, since Volt = joule/Coulomb +F is Kcal/mole-Ang + +qE (cgs) = qE (1.60219E-19 Coul / e) (statCoul / 3.3356E-10 Coul) + (1.0E8 Ang / cm) (1.0E7 erg / joule) (3.3356E-10 Coul / statCoul) +F (cgs) = F (4.184E10 erg / Kcal) (mole / 6.022E23 atoms) (1.0E8 Ang / cm) + +(statCoul is cgs unit of charge) +c = 1.0E-3 * 1.60219E-19 * 6.022E23 / 4.184 = 23.0602 + +* metal: + +qE is e Volt/Ang = e joule/Coulomb-Ang, since Volt = joule/Coulomb +F is eV/Ang + +qE (cgs) = qE (1.60219E-19 Coul / e) (statCoul / 3.3356E-10 Coul) + (1.0E8 Ang / cm) (1.0E7 erg / joule) (3.3356E-10 Coul / statCoul) +F (cgs) = F (1.60219E-12 erg / eV) (1.0E8 Ang / cm) + +(statCoul is cgs unit of charge) +c = 1.0E7 * 1.60219E-19 / 1.60219E-12 = 1.0 + +-------------------------------------------- +1 Jun 2004 +Roy Pollock on non-neutral systems via PPPM + +>Hi Roy - quick question on charge-neutrality in PPPM, that someone is +>asking about. Here is my understanding of what PPPM (or standard +>Ewald) does - is this correct ? +> +>Thanks, +>Steve +> +>------------- +> +>qsum = sum of user-specified charges +> +>* If the user specifies a charge-neutral system: +> +>the energy as computed in PPPM is: +> +> e_long = e_long - gewald*qsqsum/1.772453851D0 - +> $ 0.5D0*pi*qsum*qsum/(gewald*gewald*xprd*yprd*zprd_slab) +> +>and qsum = 0.0, so the last term is 0.0 +> +>* If the user specifies a non-neutral system: +> +>then a compensating uniform background charge (opposite sign) is added +>by LAMMPS, else the system energy blows up. Qsum is non-zero and the +>last term in the above formula is the energy term due to the +>compensating background charge. +> +>The forces on each atom are the same in both cases since a non-neutral +>system has the same forces on each atom ... +> +Steve, + +Yes, Sounds correct to me. Since we're treating an infinite (periodic) +system you need the charge +neutralizing background. + + Treating either electrons (or ions) as a smeared uniform +background is done in a lot of condensed matter or plasma physics +models but not, I guess, in biological systems. + +Roy + + If you want a quick numerical check on PPPM for the uniform +background case (OCP) +a couple of static lattice Coulomb energies are: + +U/N=-1.41865 Z**2/r_nn/r_nn for a simple cubic lattice + and +U/N = -1.57583 Z**2/r_nn for a bcc lattice + + where r_nn is the nearest neighbor distance. + + If it gets that right for the uniform background case then its +probably coded correctly. +If not I'm going into the witness protection program. (I may do it anyway). + +Roy + +-------------------------------------------- +26 Apr 2004 +PPPM for dipoles with Roy + + I haven't permanently forgotten your inquiry about PPPM dipoles. +I'm presently in over my head trying to finish off a paper on nuclear +reaction rates in plasmas (more interesting than it sounds actually) +but do want to eventually incorporate dipoles into the PPPM +algorithm. The main theoretical bit is, probably, to derive the modified +Green's function to compensate for using the non-Gaussian assignment +function in assigning moments to grid points ? + Hope this was a long term project. +Roy + +told him I'd let him know how my 2-particle implementation went + +>So I presume I should have each dipole contribute 2 Q^2 to the summed +>squared charge calculation, as it affects G_ewald ?? + + Yes. The 2 charges, Q and -Q, are just 2 independent charges as far +as the formula is concerned. If you analytically take the limit of +the spacing going to zero you'll just rederive the Ewald (Korngold, +Kornblatt, somebody?) formula for dipoles. + + You want the 2 charges representing a dipole to look like a pure +dipole at the nearest neighbors. Just writing down the potential from +the 2 charges and expanding in their separation, call it a, this +requires a/Rnn<<1 (Rnn nearest neighbor distance). The charge Q +doesn't affect the inequality based on the ratio ratio of dipole to +higher multipoles in the expansion. + +-------------------------------------------- +5 Jan 2004 +John Carpenter ideas + +wants to create a LAMMPS users group + + It would be really good if we could get a LAMMPS User Group + going. It could a rallying point for users to contribute + software (i.e., useful diagnostic routines, other converter + programs, dump file analysis routines, etc.). I would be + willing to help in organizing such a Group and maybe even + maintaining a FTP server for contributed software, etc. + What do you think? + + Having a User Group doesn't necessarily put + a demand on you, but a User Group that the + code author doesn't participate in is probably + stillborn. One might imagine a possible User + Group meeting associated with a national + scientific meeting as consisting of a short + talk by you about the next version and maybe + a few short talks by other users. It would + mainly be a chance for users to meet one + another and exchange ideas and possibly code. + +bug in 2001 with ndof in KE vs temp vs velocity creation + + In particular, in the test job class2/in.class2 + (which I don't have on my system - early version of + LAMMPS 2001?) the input file specifies an initial + temperature of 300, but the initial temperature + (step 0) printed out comes up with 313 versus + 300 in the reference log file, but the kinetic + energy for both agreed. We got them to agree by + deleting the (-3) from the ndof calculation in + thermo.f + +3M desire for COMPASS ff + + I've gone to 3M a couple of times and got them + going. They had some trouble with msi2lmp and + lmp2arc. They also had some misconceptions about + a given atom interacting with images of itself + outside the box, i.e., if you put a single water + molecule inside a small box, you should get the energy + of crystalline water. Incidentally, the minimizer + core dumps on this. I haven't had a chance to + track that down yet. Nevertheless, they are up and + running now. They have plans to implement the + COMPASS forcefield in LAMMPS. COMPASS is the Class II + field developed at Cal Tech for the polymer sciences + group at Accelys. 3M was dismayed that LAMMPS 2003 does + not yet support Class II forcefields. I have a copy of + the COMPASS paper and Sanat Mohanty at 3M and I will + discuss the tasks that are needed to do that. There + are two tricky parts: a msi2lmp equivalent and the + H bond terms in the forcefield. Other than that the + rest of the terms are all there. + +-------------------------------------------- +1 Jan 2004 +Crack simulations by Chris Kimmer at SNL/CA + +using MD - see Seminars + +-------------------------------------------- +1 Jan 2004 +PreWarp, MEAM comments from Greg Wagner + +I think the main tool you're refering to is Prewarp, which is a C++ code +that's mainly the work of Phil Gullett. Phil's in the middle of moving +to a faculty position at Mississippi State (aka "Sandia South"), but I'm +cc'ing him in case he can help. + +I haven't spent much time looking at the Prewarp code, but since it's a +C++ code it would probably be pretty easy to copy some classes from +LAMMPS into Prewarp to handle output to a format that LAMMPS can read. +Phil, is this reasonable? + +As for MEAM, I'm finding that I just don't use it much anymore, since I +never did get a good set of Ni-H parameters working. It's too bad, +since I did spend quite a bit of time on it. Have you had many requests +for it in LAMMPS? + +I said: +I recall you made some other additions to Warp, that might be good +to put into the new LAMMPS - e.g. Ensight output format, etc. Don't know +what they all were, however ... + +Anyone who's asked me for MEAM, I've referred to you. I thought the +LANL folks used it quite a bit, but I haven't talked to Srini in many +months. I guess we should wait until someone (SNL or outside) is +motivated to add it themselves. + +-------------------------------------------- +1 Jan 2004 +Goddard work with LAMMPS and Dreiding ff + +Jang04.pdf paper + +from Paul: +Steve, I was surprised to see that they are using LAMMPS with the +Dreiding FF. I wonder if we could persuade them to share their "upgrade" +of LAMMPS with us. It would be nice to include the Dreiding FF with +LAMMPS. Did you know about this work? + +I assumed that the functional forms were different because they said +they modified LAMMPS to handle their FF. Is the factor of 2 in the EvdW +what they are talking about? That seems to be non-standard LJ potential. +The table of coeffs for this particular system are included in the +paper. It would be nice to have all of their parameters though. -Paul + +-------------------------------------------- +1 Jan 2004 +divergence with F90 GranFlow + +see emails from Gary - 13 Apr 04 +they have a few new features and attractive potential and analysis +are working on lattice Boltzmann or pseudospectral in serial +Jeremy Lechman (jblechm) is new guy + +So far as F90 vs C++, here is the status. The new version of LAMMPS +is C++ and I've put many of the F90 GranFlow code features into it: +granular potentials, boundary conditions, etc. However there are some +features not yet working - like storing shear history in restart +files, that I haven't had time to code up. Also, Gary indicated there +are some new GranFlow features that I haven't seen - so it may take a +bit of work to get the C++ version up to full functionality. + +I don't know how comfortable you are with C++ vs F90, so that's +another issue. + +Having said that, I would still vote to add new functionality (like PS +or lattice-Boltzmann) to the C++ version. I think it will be easier +to add and more supported in the long run. But I'm open to discussing +the trade-offs. One thing I would like to do is get you or Gray to +use the granular features in the new LAMMPS so you can test/break +things and give me feedback ... + +-------------------------------------------- +1 Jan 2004 +classes that create & manage their own atom-based arrays + +via callbacks (so are all nmax in length): + +fix_shake: shake_flag, shake_atom, shake_type, xshake +fix_shear_history: npartner, partner, shear +fix_rigid: displace +fix_wiggle: original +diag_diff: xoriginal + +within the class (so can be nlocal or nmax in length): + +verlet: f_pair[nmax] +neighbor: bins[nmax], numneigh[nlocal], firstneigh[nlocal], xhold[nlocal] +ewald & pppm: several arrays that are [nlocal] in length + +-------------------------------------------- +1 Jan 2004 +Overloaded classes that are derived from parents + +pair_lj_charmm_coul_charmm_implicit from pair_lj_charmm_coul_charmm +pair_gran_no_history from pair_gran_history +pair_gran_hertzian from pair_gran_history +pair_lj_cut_coul_dh from pair_lj_cut_coul_cut + +-------------------------------------------- +1 Jan 2004 +Code locations where I have to know type of child class +instead of just using generic parent + +in temper.cpp: + set FixNVT or FixLangevin to get at reset_target() +in temperature.cpp: + set FixShake to get at dof() +in pressure.cpp: + set FixShake to get at virial array +in fix_nve_dipole.cpp + set PairDipole to get at sigma array +in dihedral_charmm.cpp::init() + set pair to one of 3 pair styles to grab lj14 coeffs +in fix_wall_gran.cpp + set PairGranHistory (and other 2) to get at xkk,xkkt +in pair_gran_history.cpp + set FixInsert to get at radius_hi +in fix_insert.cpp + access FixShearHistory fix to get at its npartner array +in fix_gran_diag.cpp + set PairGranHistory (and other 2) to get at xkk,xkkt,etc +in neighbor.cpp + set FixShearHistory to get at npartner,partner in pair_granular fns + +-------------------------------------------- +1 Jan 2004 +how bond types (angle, dihedral, improper) are set to 0 or negative +for breaking, turning off, etc + +functions that alter bond type + +delete_bonds sets all of them negative + if specify remove, it removes anything <= 0 +fix_shake sets bond,angle negative + when class is deleted (unfix or exit), sets them back positive +bond_quartic sets bonds to 0 when a bond breaks + also skips computation of any bond that is <= 0 +neighbor tests if any bonds are <= 0 now or could be during run + if so, calls bond_partial function + bond_partial: if bond type <= 0, does not store bond in bond neigh list +restart prints all bonds, but always writes out bondtype as >= 0 + so would have to reset the fix_shake or delete_bonds + but deleted bond_quartic would still be in restart file +dump bond prints out any bond with type != 0, including negative types + +-------------------------------------------- +1 Jan 2004 +hard-to-fix "bug" with SHAKE and NPT + +the SHAKE virial is not set until SHAKE is called the 1st time +the setup in verlet, calls the setup for all fixes +if NPT appears before SHAKE in the input script then + NPT setup will call pressure which expects SHAKE virial to be set + to keep from using non-init variable, I set shake virial = 0.0 + when shake fix is created +if NPT appears after SHAKE in input script then + all is correct + SHAKE setup occurs 1st and virial is computed + +so only "bug" is that the initial pressure computed by NPT setup + is slightly different depending on order of fixes in input script +doesn't look different on timestep 0 thermo printout, but + will probably affect dynamics slightly via NPT + +only way to correct this, would be to order the setup invocations + depending on what fixes the user had defined (force NPT after SHAKE) + don't really want to mess with dependencies like that + +-------------------------------------------- +1 Jan 2004 +use of temperature class + +used by 3 fixes (nvt, temp/rescale, npt) + not by Langevin since it doesn't compute a temp + fix_modify will change what temp ID is used in these commands + warn if temp group != fix group + when fix is created: + if group is all, uses default temp + else creates group with fictitious name (FixNVT + id + group-name) + and temp style "full" + if fictitious name already exists, just point to that one +used by 2 velocity (create and scale) + velocity args can change what temp ID is used + if temp arg not specified, then velocity uses default temp + but changes the group setting inside temp to those of the velocity group + changes them back at end of velocity command +used by thermo + thermo_modify will change what temp ID is used + +when defined a temp class has both a style (full, partial, etc) + and a group - is given a name by user +default = style full and group all + +all temps are init once (from within force) when a simulation starts + +whenever a temp is init, it checks for a SHAKE fix and counts SHAKE dof + only done in its group + means that velocity must have SHAKE fix defined before it + else will miss those dof when computing temp + +no easy way to delete a temperature: + would have to repack the other ones + this would change ptrs + they are all deleted by force at LAMMPS exit + +-------------------------------------------- +1 Jan 2004 +General C++ questions (ask Roscoe): + +made atom,memory,etc as static members of globally-inherited System class + this is so there will be only one copy and everyone can see it + is this best way or only way to do it? + makes lammps.cpp and system.cpp and system.h kind of ugly + any other way to make top-level System visible in lammps.cpp + +when to use virtual classes versus just derived classes + for nonbond, integrate, fix, dump, etc + why not just have atom be a regular class with dummy defs for its + functions (including some fns that are only in some child classes, like + eam) + +doing neighbor styles with fn ptrs in Neighbor class + any way to make a sub-class on the fly from within Neighbor, + that inherits access to Neighbor data (e.g. pages) + +is it efficient/legal in read_data.cpp to say Atom &atom = *sys.atom; + why can't put Atom &atom in read_data.h? + can do it with pre-initializer in constructor is only way + +using a fn pointer (or class, e.g. pair->compute()) to replace + a big if test in F90 - is that efficient in C++ + +-------------------------------------------- +1 Jan 2004 +Version comparisons: + +any NPT & vol_rescale will not agree in pair energy, since f90 computes at end + of timestep, C++ computes at middle (box size is different) + does this mean long eng is different too? + +in.lj.nve matches for 1000, then diverges slowly +in.lj.npt does not agree in energy (see above) +in.lj.langevin - have to comment out fix_langevin::pre() call to force() + to get agreement with F90 version +in.bead - have to invoke fix_langevin::pre() call to force() + to get agreement with F90 version +in.lc.small.periodic - slight diff in pressure at step 100 +in.lc.small.nonperiodic - seem OK for 1000 steps +in.stouch (with NVT) - slight diff in pressure at step 100 +in.stouch (with NPT) - seems to be drifting faster than would expect + already different a bit by 10 timesteps +in.polymer.chain.a - match to 1000 steps, different at 2000, diverges after +in.polymer.chain.ab - starts to unmatch about 1000 steps +in.lj.volume - does not agree in eng (see above) or when re-neigh +in.lipid - OK for 1st few 100 steps - slower on Linux, OK on tflops + +-------------------------------------------- +1 Jan 2004 +Catching a new error: + +this will fail gracefully on huge malloc request + +#include "stdio.h" +#include "stdlib.h" +#include +//using namespace std; + +main (int argc, char **argv) +{ + int n = atoi(argv[1]); + printf("New on %d ints\n",n); + + int *a = NULL; + try { + a = new int[n]; + } + catch (std::bad_alloc xa) { + printf("ERROR: Failed malloc %p\n",a); + } + + printf("Ptr to array = %p\n",a); + // a[0] = 1; + //a[n-1] = n; + //printf("Array values %d %d\n",a[0],a[n-1]); + delete [] a; +} + +-------------------------------------------- +1 Jan 2004 +ideas for a presentation on new LAMMPS + +motivation: + (1) working on LDRD to add dipoles + what that affected w/in LAMMPS (integrator, new atom fields, comm, thermo) + always worry when add something that + a) something else will break + b) code will slow down, become less parallel + LAMMPS had global vars, reasonably modular, but big and unwieldy + (2) maintain 3 codes: warp, LAMMPS, Gran - similar in basics, but + all different atom styles/arays, force fields, BC, file formats + LAMMPS 2001 = 34700 lines + Warp = 11600 lines + ParaDyn = 6200 lines + GranFlow = 10100 lines + (3) working on C++ in other projects, started to know enough to be dangerous + +C++ lets me combine features of all 3 codes in modular way: + my C++ is C underneath, C++ at top to organize it + basic code architecture: + system class inherited by everyone + contains neighbor, force, atom ptrs visible to all + +nice C++ (or C) features for a code like LAMMPS: + might be ways to do some of these in F90, not saying is impossible + some cases are possible, just aren't the way people write Fortran + some cases is clunky in F90, or I just don't know how + fn ptrs or class instances: + big if test in integrator over pair potentials replaced by one statement + pair->compute + show code snippet from integrate routine in src vs new + everything about a new option is in one place, one file + in F90 all info was scattered thru code - input, start, fix + dynamic memory - neighbor lists - realloc + totally dynamic memory (should never run out in mid-run) + multiple instances of things: + several RNG in code, several temperatures, etc + easy in C++, not so easy in F90 + a class can have one interface which rest of code knows + underneath it can morph into lots of things + this is inheritance, not possible in F90 + examples: atom, update, dump + talk about what interface is to those + an atom needs to know: + how to read from file + how to allocate/grow arrays for them + how to pack/unpack for moving to new proc + what to communicate + a fix needs to know: + what to do at various stages of timestep + large # of MD options can be cast as a fix + give examples: nve, npt, aveforce, gravity, wall, shake, bondswap + integrator doesn't need to know how they work, when to call + simplifies integrator greatly + dump needs to know: + how to write header + how to package up + how to write a line to a file (format, specific info) + +new features of LAMMPS you may like: + a couple of these are "Grest mode" features + heard Gary was submitting jobs from his hospital bed + meant he was editing files, didn't want him to die in mid keystroke + these features will let him re-submit jobs with less effort, editing + read restart from file* + cd, jump, clear + groups: used for BC & fixes, output, init of velocity + can have multiple NVT groups - e.g. a McDLT fix (hot/cold on 2 sides) + can make several output dumps of different atoms and different + quantities to different files + variable (2 kinds), next, proc clusters + show simple examples + will let you run 8 jobs of 16-each procs on 128 procs + and run 100 jobs on those 8 clusters, one after the other + will let you grab 128 procs for one week from now, fill in + low-level script later + tempering (with M Sears) + tell how it works + show plots of overlapping PE + how it works on a peptide or protein complex, Garcia-like results + have ability to take PDB file and solvate it, convert into LAMMPS input + xmovie - available if you want it + little animator in Qt - available if you want it + not competitor to Rasmol, Raster3d, or VMD + post-processing converts also available for those + rigid fixes + +advantages of LAMMPS in this mode: + easy for me or user to add to without impacting anything else + don't have to know C++ to do it, just use another as template, write C + things that can easily be added: + force field + atom style + new integrator + new thermo (temp, press) + new dump + new BC (fix, ensemble) + new diagnostic (is it a fix?) + one code base, code can do all that other 3 codes did + illustrate w/ simple movie of 3-4 kinds of calculations + size of new code versus sum of old 3 + could add hybrid force field (EAM + CHARMM) - tell how + +is it as fast as before: + show some timing curves + serial and parallel + low-level routine is C instead of F90 + kept all LAMMPS speed-effects + neighbor lists + ghost atoms + 6-way communication (cuts corners, still true even for long cutoffs) + +what it can't do: + other parallel styles of comm (force, atom) (ParaDyn) + load-balancing + reactive FF + reacXX is a very complex "pair" potential + charge equil + talk about how similar/different to GRASP + not doing multiple force fields & neighbor lists on sub-groups of atoms + +what I miss from F90: + multi-dim arrays - e.g. allocate(f(3,n),bonds(2,3,n)) + cs(-4:4,3,1000) + +----------------------------------------- +1 Jan 2004 +Class overview + +0. LAMMPS + +1. system - all next-level classes inherit from it + static ptr to single instance of these: + atom, modify, force, update, neighbor, comm, domain, + group, output, timer, error, memory + these ptrs are initialized within lammps.cpp + + 1a. atom - contains all atom-based data + + 1b. update - integrators/minimizers + integrate - one of these + minimize - one of these + + 1b1. integrate: + virtual class, derived ones are Verlet, respa + + 1b2. minimize: + virtual class, derived ones are CG, HTFN + + 1c. force - all force and energy routines + nonbond - one of these + bond - one of these + + 1c1. nonbond - nonbond force routine + virtual class, derived ones are LJ, soft, etc + + 1c2. bond - bond force routine + virtual class, derived ones are FENE, harmonic, etc + + 1d. modify - ensemble, fix routines + fix - array of these + + 1d1. fix - any routine that changes v,f,x + virtual class, derived ones are NVE, NPT, umbrella, etc + + 1e. neighbor - neighbor list routines + + 1f. comm - communication routines + + 1g. domain - physical simlation box + + 1h. group - defined groups of atoms + + 1i. output - all output to screen/files + dump - array of these + thermo - one of these + + 1i1. dump - output of vel, atom, force + virtual class, derived ones are atom, velocity, force, etc + generic write function in virtual class + write_header, pack, write_data are specific to derived classes + + 1i2. thermo - thermodynamic computations + temperature - one of these + pressure - one of these + + 1i2a. temperature - compute temp, need to be virtual? + 1i2b. pressure - compute pressure, need to be virtual? + + 1j. timer - CPU timings + + 1k. error - error handlers + + 1l. memory - memory allocation routines + +2. input - grab and parse lines from input script + created/deleted in lammps.cpp, used nowhere else + returns next command to execute + +3. read_data - reads input data file + created/deleted in lammps.cpp + +4. velocity - sets velocity of some atoms + created/deleted in lammps.cpp + +5. random - RNG + created/deleted within Velocity class + +6. special - create molecular topology + created/deleted within ReadData class + +----------------------------------------- +1 Jan 2004 +General documentation + +How to run without (potentially) gigantic map() array in atom.cpp +only OK to do for LJ or EAM problems that are non-molecular +and don't use map() in special or SHAKE or ?? + +in atom.cpp, are 3 routines: map_init(), map_clear(), map_set() +comment out the code in each of these 3 routines +then LAMMPS will not allocate this array + +My question on bond frequencies: + +> I'm looking for bond frequency/periods - I found a table that lists +> their absorption spectra in units of inverse-cm. E.g. C-H = 2900 +> 1/cm, O-H = 3000 1/cm. +> +> Do you know the conversion to time units? E.g. I want 10 fmsec for +> the characteristic bond period. + +Answer, from Paul: + +Just multiply cm^(-1) by c to get per-sec = frequency + +e.g. 1/(3*10^10 cm/s * 3000 cm^-1) = 11.11 fs + +Also see: +http://www.chem.umd.edu/courses/manoso/Lectures/IR.pdf + +C-O = 2143 cm-1 +NO = 1875 cm-1 +CC = 1200 cm-1 + +------------ +Documentation for screen and logfile settings + +depends on -screen and -log command-line args, 1 vs multi world, + which proc I am in universe and local world + +uscreen = universe::uscreen +screen = system::screen +ulogfile = universe::ulogfile +logfile = system::logfile +N = which world (0 to nworld-1) + +universe has 1 world: + + universe proc 0 + uscreen = stdout + if -screen, uscreen = file (NULL if none) + ulogfile = log.lammps + if -log, ulogfile = file (NULL if none) + universe proc 1-N + uscreen = stdout + if -screen, uscreen = NULL + ulogfile = NULL + world proc 0 + screen = stdout + if -screen, screen = file (NULL if none) + logfile = log.lammps + if -log, logfile = file (NULL if none) + world proc 1-N + screen = stdout + if -screen, screen = NULL + logfile = NULL + +multi-world universe: + + universe proc 0 + uscreen = stdout + if -screen, uscreen = file (NULL if none) + ulogfile = log.lammps + if -log, ulogfile = file (NULL if none) + universe proc 1-N + uscreen = stdout + if -screen, uscreen = NULL + ulogfile = NULL + world proc 0 + screen = screen.N + if -screen, screen = file.N (NULL if none) + logfile = log.lammps.N + if -log, logfile = file.N (NULL if none) + world proc 1-N + screen = NULL + logfile = NULL + +the "log" command simply closes logfile on each world 0 + reopens the system::logfile with the specific name only on world proc 0 + does not change universe::ulogfile + +-------------------------- +1 Jan 2004 +NAMD benchmark + + 3 bonds per water makes SHAKE not work with "m" switch + NVE vs NVT + reneigh criterion + 64^3 mesh is too hi precision + run on Lemeiux, is 2002 Lem same as now? + set temp to not include SHAKE so get accurate temp at initial step + +----------------------- +1 Jan 2004 +Aidan ideas + + multiple neighbor lists (for diff force fields, cutoffs) + only applied to some atoms + could I do that for REPSA short range (bond only) + also need diff comm for diff neighbor distances + have multiple force fields (a, b, hybrid ab) + also only applied to some atoms diff --git a/src/OPT/Install.csh b/src/OPT/Install.csh new file mode 100644 index 0000000000..0a42aeff25 --- /dev/null +++ b/src/OPT/Install.csh @@ -0,0 +1,40 @@ +# Install/unInstall package classes in LAMMPS + +if ($1 == 1) then + + cp style_opt.h .. + + cp pair_eam_opt.cpp .. + cp pair_eam_alloy_opt.cpp .. + cp pair_eam_fs_opt.cpp .. + cp pair_lj_charmm_coul_long_opt.cpp .. + cp pair_lj_cut_opt.cpp .. + cp pair_morse_opt.cpp .. + + cp pair_eam_opt.h .. + cp pair_eam_alloy_opt.h .. + cp pair_eam_fs_opt.h .. + cp pair_lj_charmm_coul_long_opt.h .. + cp pair_lj_cut_opt.h .. + cp pair_morse_opt.h .. + +else if ($1 == 0) then + + rm ../style_opt.h + touch ../style_opt.h + + rm ../pair_eam_opt.cpp + rm ../pair_eam_alloy_opt.cpp + rm ../pair_eam_fs_opt.cpp + rm ../pair_lj_charmm_coul_long_opt.cpp + rm ../pair_lj_cut_opt.cpp + rm ../pair_morse_opt.cpp + + rm ../pair_eam_opt.h + rm ../pair_eam_alloy_opt.h + rm ../pair_eam_fs_opt.h + rm ../pair_lj_charmm_coul_long_opt.h + rm ../pair_lj_cut_opt.h + rm ../pair_morse_opt.h + +endif diff --git a/src/OPT/pair_eam_alloy_opt.cpp b/src/OPT/pair_eam_alloy_opt.cpp new file mode 100644 index 0000000000..8bf4acfe04 --- /dev/null +++ b/src/OPT/pair_eam_alloy_opt.cpp @@ -0,0 +1,24 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "pair_eam_alloy_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- + multiple inheritance from two parent classes + invoke constructor of grandparent class, then of each parent +------------------------------------------------------------------------- */ + +PairEAMAlloyOpt::PairEAMAlloyOpt(LAMMPS *lmp) : + PairEAM(lmp), PairEAMAlloy(lmp), PairEAMOpt(lmp) {} diff --git a/src/OPT/pair_eam_alloy_opt.h b/src/OPT/pair_eam_alloy_opt.h new file mode 100644 index 0000000000..961f987eab --- /dev/null +++ b/src/OPT/pair_eam_alloy_opt.h @@ -0,0 +1,33 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef PAIR_EAM_ALLOY_OPT_H +#define PAIR_EAM_ALLOY_OPT_H + +#include "pair_eam_alloy.h" +#include "pair_eam_opt.h" + +namespace LAMMPS_NS { + +// multiple inheritance from two parent classes +// optimized compute() from PairEAMOpt +// everything else from PairEAMAlloy + +class PairEAMAlloyOpt : public PairEAMAlloy, public PairEAMOpt { + public: + PairEAMAlloyOpt(class LAMMPS *); +}; + +} + +#endif diff --git a/src/OPT/pair_eam_fs_opt.cpp b/src/OPT/pair_eam_fs_opt.cpp new file mode 100644 index 0000000000..11e8b222d6 --- /dev/null +++ b/src/OPT/pair_eam_fs_opt.cpp @@ -0,0 +1,24 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "pair_eam_fs_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- + multiple inheritance from two parent classes + invoke constructor of grandparent class, then of each parent +------------------------------------------------------------------------- */ + +PairEAMFSOpt::PairEAMFSOpt(LAMMPS *lmp) : + PairEAM(lmp), PairEAMFS(lmp), PairEAMOpt(lmp) {} diff --git a/src/OPT/pair_eam_fs_opt.h b/src/OPT/pair_eam_fs_opt.h new file mode 100644 index 0000000000..8f04159190 --- /dev/null +++ b/src/OPT/pair_eam_fs_opt.h @@ -0,0 +1,34 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef PAIR_EAM_FS_OPT_H +#define PAIR_EAM_FS_OPT_H + +#include "pair_eam_fs.h" +#include "pair_eam_opt.h" + +namespace LAMMPS_NS { + +// multiple inheritance from two parent classes +// optimized compute() from PairEAMOpt +// everything else from PairEAMFS + +class PairEAMFSOpt : public PairEAMFS, public PairEAMOpt { + public: + PairEAMFSOpt(class LAMMPS *); +}; + +} + +#endif + diff --git a/src/OPT/pair_eam_opt.cpp b/src/OPT/pair_eam_opt.cpp new file mode 100644 index 0000000000..f115ca1014 --- /dev/null +++ b/src/OPT/pair_eam_opt.cpp @@ -0,0 +1,69 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + Charles Cornwell, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#include "pair_eam_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairEAMOpt::PairEAMOpt(LAMMPS *lmp) : PairEAM(lmp) +{ + rhor_ = NULL; + frho_ = NULL; + z2r_ = NULL; +} + +/* ---------------------------------------------------------------------- */ + +void PairEAMOpt::compute(int eflag, int vflag) +{ + if (eflag) { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<1,0,1>(); + case 1: return eval<1,1,1>(); + case 2: return eval<1,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<1,0,0>(); + case 1: return eval<1,1,0>(); + case 2: return eval<1,2,0>(); + } + } + + } else { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<0,0,1>(); + case 1: return eval<0,1,1>(); + case 2: return eval<0,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<0,0,0>(); + case 1: return eval<0,1,0>(); + case 2: return eval<0,2,0>(); + } + } + } +} diff --git a/src/OPT/pair_eam_opt.h b/src/OPT/pair_eam_opt.h new file mode 100644 index 0000000000..8c5be44cb3 --- /dev/null +++ b/src/OPT/pair_eam_opt.h @@ -0,0 +1,345 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + Charles Cornwell, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#ifndef PAIR_EAM_OPT_H +#define PAIR_EAM_OPT_H + +#include "math.h" +#include "stdlib.h" +#include "pair_eam.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "neighbor.h" +#include "comm.h" +#include "memory.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +namespace LAMMPS_NS { + +// use virtual public since this class is parent in multiple inheritance + +class PairEAMOpt : virtual public PairEAM { + public: + PairEAMOpt(class LAMMPS *); + virtual ~PairEAMOpt() {} + void compute(int, int); + + protected: + double* restrict rhor_; + double* restrict frho_; + double* restrict z2r_; + + template < int EFLAG, int VFLAG, int NEWTON_PAIR > void eval(); +}; + +template < int EFLAG, int VFLAG, int NEWTON_PAIR > +void PairEAMOpt::eval() +{ + typedef struct { double x,y,z; } vec3_t; + + typedef struct { + double rhor0i,rhor1i,rhor2i,rhor3i; + double rhor0j,rhor1j,rhor2j,rhor3j; + } fast_alpha_t; + + typedef struct { + double frho0,frho1,frho2,frho3,frho4,frho5,frho6; + double _pad[1]; + } fast_beta_t; + + typedef struct { + double rhor4i,rhor5i,rhor6i; + double rhor4j,rhor5j,rhor6j; + double z2r0,z2r1,z2r2,z2r3,z2r4,z2r5,z2r6; + double _pad[3]; + } fast_gamma_t; + + double** restrict f; + double* restrict coeff; + + // grow energy array if necessary + + if (atom->nmax > nmax) { + memory->sfree(rho); + memory->sfree(fp); + nmax = atom->nmax; + rho = (double *) memory->smalloc(nmax*sizeof(double),"pair:rho"); + fp = (double *) memory->smalloc(nmax*sizeof(double),"pair:fp"); + } + + eng_vdwl = 0.0; + if (VFLAG) for (int i = 0; i < 6; i++) virial[i] = 0.0; + + if (VFLAG == 2) f = update->f_pair; + else f = atom->f; + + double** restrict x = atom->x; + int* restrict type = atom->type; + int nlocal = atom->nlocal; + + vec3_t* restrict xx = (vec3_t*)x[0]; + vec3_t* restrict ff = (vec3_t*)f[0]; + + double tmp_cutforcesq = cutforcesq; + double tmp_rdr = rdr; + int nr2 = nr-2; + int nr1 = nr-1; + + int** restrict firstneigh = neighbor->firstneigh; + int* restrict num = neighbor->numneigh; + + int ntypes = atom->ntypes; + int ntypes2 = ntypes*ntypes; + + fast_alpha_t* restrict fast_alpha = + (fast_alpha_t*) malloc(ntypes2*(nr+1)*sizeof(fast_alpha_t)); + for( int i = 0; i < ntypes; i++) for( int j = 0; j < ntypes; j++) { + fast_alpha_t* restrict tab = &fast_alpha[i*ntypes*nr+j*nr]; + for(int m = 1; m <= nr; m++) { + tab[m].rhor0i = rhor_spline[type2rhor[i+1][j+1]][m][6]; + tab[m].rhor1i = rhor_spline[type2rhor[i+1][j+1]][m][5]; + tab[m].rhor2i = rhor_spline[type2rhor[i+1][j+1]][m][4]; + tab[m].rhor3i = rhor_spline[type2rhor[i+1][j+1]][m][3]; + tab[m].rhor0j = rhor_spline[type2rhor[j+1][i+1]][m][6]; + tab[m].rhor1j = rhor_spline[type2rhor[j+1][i+1]][m][5]; + tab[m].rhor2j = rhor_spline[type2rhor[j+1][i+1]][m][4]; + tab[m].rhor3j = rhor_spline[type2rhor[j+1][i+1]][m][3]; + } + } + fast_alpha_t* restrict tabeight = fast_alpha; + + fast_gamma_t* restrict fast_gamma = + (fast_gamma_t*) malloc(ntypes2*(nr+1)*sizeof(fast_gamma_t)); + for( int i = 0; i < ntypes; i++) for( int j = 0; j < ntypes; j++) { + fast_gamma_t* restrict tab = &fast_gamma[i*ntypes*nr+j*nr]; + for(int m = 1; m <= nr; m++) { + tab[m].rhor4i = rhor_spline[type2rhor[i+1][j+1]][m][2]; + tab[m].rhor5i = rhor_spline[type2rhor[i+1][j+1]][m][1]; + tab[m].rhor6i = rhor_spline[type2rhor[i+1][j+1]][m][0]; + tab[m].rhor4j = rhor_spline[type2rhor[j+1][i+1]][m][2]; + tab[m].rhor5j = rhor_spline[type2rhor[j+1][i+1]][m][1]; + tab[m].rhor6j = rhor_spline[type2rhor[j+1][i+1]][m][0]; + tab[m].z2r0 = z2r_spline[type2z2r[i+1][j+1]][m][6]; + tab[m].z2r1 = z2r_spline[type2z2r[i+1][j+1]][m][5]; + tab[m].z2r2 = z2r_spline[type2z2r[i+1][j+1]][m][4]; + tab[m].z2r3 = z2r_spline[type2z2r[i+1][j+1]][m][3]; + tab[m].z2r4 = z2r_spline[type2z2r[i+1][j+1]][m][2]; + tab[m].z2r5 = z2r_spline[type2z2r[i+1][j+1]][m][1]; + tab[m].z2r6 = z2r_spline[type2z2r[i+1][j+1]][m][0]; + } + } + fast_gamma_t* restrict tabss = fast_gamma; + + // zero out density + + if (NEWTON_PAIR) { + int m = nlocal + atom->nghost; + for (int i = 0; i < m; i++) rho[i] = 0.0; + } else for (int i = 0; i < nlocal; i++) rho[i] = 0.0; + + // rho = density at each atom + // loop over neighbors of my atoms + + for (int i = 0; i < nlocal; i++) { + double xtmp = xx[i].x; + double ytmp = xx[i].y; + double ztmp = xx[i].z; + int itype = type[i] - 1; + int* restrict neighs = firstneigh[i]; + int numneigh = num[i]; + + double tmprho = rho[i]; + + fast_alpha_t* restrict tabeighti = &tabeight[itype*ntypes*nr]; + for (int k = 0; k < numneigh; k++) { + int j = neighs[k]; + + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < tmp_cutforcesq) { + + int jtype = type[j] - 1; + + double p = sqrt(rsq)*tmp_rdr; + if ( (int)p <= nr2 ) { + int m = (int)p + 1; + p -= (double)((int)p); + fast_alpha_t& a = tabeighti[jtype*nr+m]; + tmprho += ((a.rhor3j*p+a.rhor2j)*p+a.rhor1j)*p+a.rhor0j; + if (NEWTON_PAIR || j < nlocal) { + rho[j] += ((a.rhor3i*p+a.rhor2i)*p+a.rhor1i)*p+a.rhor0i; + } + } else { + fast_alpha_t& a = tabeighti[jtype*nr+nr1]; + tmprho += a.rhor3j+a.rhor2j+a.rhor1j+a.rhor0j; + if (NEWTON_PAIR || j < nlocal) { + rho[j] += a.rhor3i+a.rhor2i+a.rhor1i+a.rhor0i; + } + + } + + } + } + rho[i] = tmprho; + } + + // communicate and sum densities + + if (NEWTON_PAIR) comm->reverse_comm_pair(this); + + // fp = derivative of embedding energy at each atom + // phi = embedding energy at each atom + + for (int i = 0; i < nlocal; i++) { + int itype = type[i]; + double p = rho[i]*rdrho; + int m = MIN((int)p,nrho-2); + p -= (double)m; + ++m; + coeff = frho_spline[type2frho[type[i]]][m]; + fp[i] = (coeff[0]*p + coeff[1])*p + coeff[2]; + if (EFLAG) eng_vdwl += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + } + + // communicate derivative of embedding function + + comm->comm_pair(this); + + // compute forces on each atom + // loop over neighbors of my atoms + + for (int i = 0; i < nlocal; i++) { + double xtmp = xx[i].x; + double ytmp = xx[i].y; + double ztmp = xx[i].z; + int itype = type[i]; + int itype1 = type[i] - 1; + int* restrict neighs = firstneigh[i]; + int numneigh = num[i]; + + double tmpfx = 0.0; + double tmpfy = 0.0; + double tmpfz = 0.0; + + double fpi = fp[i]; + + fast_gamma_t* restrict tabssi = &tabss[itype1*ntypes*nr]; + for (int k = 0; k < numneigh; k++) { + int j = neighs[k]; + + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < tmp_cutforcesq) { + int jtype = type[j] -1; + double r = sqrt(rsq); + double rhoip,rhojp,z2,z2p; + double p = r*tmp_rdr; + if ( (int)p <= nr2 ) { + int m = (int)p + 1; + p -= (double)((int)p); + + fast_gamma_t& a = tabssi[jtype*nr+m]; + rhoip = (a.rhor6i*p + a.rhor5i)*p + a.rhor4i; + rhojp = (a.rhor6j*p + a.rhor5j)*p + a.rhor4j; + z2 = ((a.z2r3*p + a.z2r2)*p + a.z2r1)*p + a.z2r0; + z2p = (a.z2r6*p + a.z2r5)*p + a.z2r4; + + } else { + + fast_gamma_t& a = tabssi[jtype*nr+nr1]; + rhoip = a.rhor6i + a.rhor5i + a.rhor4i; + rhojp = a.rhor6j + a.rhor5j + a.rhor4j; + z2 = a.z2r3 + a.z2r2 + a.z2r1 + a.z2r0; + z2p = a.z2r6 + a.z2r5 + a.z2r4; + } + + // rhoip = derivative of (density at atom j due to atom i) + // rhojp = derivative of (density at atom i due to atom j) + // phi = pair potential energy + // phip = phi' + // z2 = phi * r + // z2p = (phi * r)' = (phi' r) + phi + // psip needs both fp[i] and fp[j] terms since r_ij appears in two + // terms of embed eng: Fi(sum rho_ij) and Fj(sum rho_ji) + // hence embed' = Fi(sum rho_ij) rhojp + Fj(sum rho_ji) rhoip + + double recip = 1.0/r; + double phi = z2*recip; + double phip = z2p*recip - phi*recip; + double psip = fp[i]*rhojp + fp[j]*rhoip + phip; + double fforce = psip*recip; + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x += delx*fforce; + ff[j].y += dely*fforce; + ff[j].z += delz*fforce; + } + + if (EFLAG) { + if (NEWTON_PAIR || j < nlocal) eng_vdwl += phi; + else eng_vdwl += 0.5*phi; + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] -= delx*delx*fforce; + virial[1] -= dely*dely*fforce; + virial[2] -= delz*delz*fforce; + virial[3] -= delx*dely*fforce; + virial[4] -= delx*delz*fforce; + virial[5] -= dely*delz*fforce; + } else { + virial[0] -= 0.5*delx*delx*fforce; + virial[1] -= 0.5*dely*dely*fforce; + virial[2] -= 0.5*delz*delz*fforce; + virial[3] -= 0.5*delx*dely*fforce; + virial[4] -= 0.5*delx*delz*fforce; + virial[5] -= 0.5*dely*delz*fforce; + } + } + } + } + ff[i].x -= tmpfx; + ff[i].y -= tmpfy; + ff[i].z -= tmpfz; + } + + free(fast_alpha); fast_alpha = 0; + free(fast_gamma); fast_gamma = 0; + + if (VFLAG == 2) virial_compute(); +} + +} + +#endif diff --git a/src/OPT/pair_lj_charmm_coul_long_opt.cpp b/src/OPT/pair_lj_charmm_coul_long_opt.cpp new file mode 100644 index 0000000000..e1fd216d37 --- /dev/null +++ b/src/OPT/pair_lj_charmm_coul_long_opt.cpp @@ -0,0 +1,64 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#include "pair_lj_charmm_coul_long_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairLJCharmmCoulLongOpt::PairLJCharmmCoulLongOpt(LAMMPS *lmp) : + PairLJCharmmCoulLong(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void PairLJCharmmCoulLongOpt::compute(int eflag, int vflag) +{ + if (eflag) { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<1,0,1>(); + case 1: return eval<1,1,1>(); + case 2: return eval<1,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<1,0,0>(); + case 1: return eval<1,1,0>(); + case 2: return eval<1,2,0>(); + } + } + + } else { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<0,0,1>(); + case 1: return eval<0,1,1>(); + case 2: return eval<0,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<0,0,0>(); + case 1: return eval<0,1,0>(); + case 2: return eval<0,2,0>(); + } + } + } +} diff --git a/src/OPT/pair_lj_charmm_coul_long_opt.h b/src/OPT/pair_lj_charmm_coul_long_opt.h new file mode 100644 index 0000000000..cba795782e --- /dev/null +++ b/src/OPT/pair_lj_charmm_coul_long_opt.h @@ -0,0 +1,363 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#ifndef PAIR_LJ_CHARMM_COUL_LONG_OPT_H +#define PAIR_LJ_CHARMM_COUL_LONG_OPT_H + +#include "pair_lj_charmm_coul_long.h" +#include "math.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "kspace.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "memory.h" +#include "neighbor.h" +#include "error.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +namespace LAMMPS_NS { + +class PairLJCharmmCoulLongOpt : public PairLJCharmmCoulLong { + public: + PairLJCharmmCoulLongOpt(class LAMMPS *); + void compute(int, int); + + private: + template < int EFLAG, int VFLAG, int NEWTON_PAIR > void eval(); +}; + +template < int EFLAG, int VFLAG, int NEWTON_PAIR > +void PairLJCharmmCoulLongOpt::eval() +{ + typedef struct { double x,y,z; } vec3_t; + + typedef struct { + double cutsq,lj1,lj2,lj3,lj4,offset; + double _pad[2]; + } fast_alpha_t; + + int i,j,k,numneigh,itype,jtype,itable; + double fraction,table; + double r,r2inv,r6inv,forcecoul,forcelj,fforce,factor_coul,factor_lj; + double grij,expm2,prefactor,t,erfc; + double factor,phicoul,philj,switch1,switch2; + + int* restrict neighs; + double** restrict f; + + float rsq; + int *int_rsq = (int *) &rsq; + + eng_vdwl = eng_coul = 0.0; + if (VFLAG) for (i = 0; i < 6; i++) virial[i] = 0.0; + + if (VFLAG == 2) f = update->f_pair; + else f = atom->f; + + double** restrict x = atom->x; + double* restrict q = atom->q; + int* restrict type = atom->type; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + double* restrict special_coul = force->special_coul; + double* restrict special_lj = force->special_lj; + double qqrd2e = force->qqrd2e; + int** restrict firstneigh = neighbor->firstneigh; + int* restrict num = neighbor->numneigh; + + vec3_t* restrict xx = (vec3_t*)x[0]; + vec3_t* restrict ff = (vec3_t*)f[0]; + + int ntypes = atom->ntypes; + int ntypes2 = ntypes*ntypes; + + double tmp_coef1 = 1.0/denom_lj; + double tmp_coef2 = cut_ljsq - 3.0*cut_lj_innersq; + + fast_alpha_t* restrict fast_alpha = + (fast_alpha_t*)malloc(ntypes2*sizeof(fast_alpha_t)); + for( int i = 0; i < ntypes; i++) for( int j = 0; j < ntypes; j++) { + fast_alpha_t& a = fast_alpha[i*ntypes+j]; + a.cutsq = cutsq[i+1][j+1]; + a.lj1 = lj1[i+1][j+1]; + a.lj2 = lj2[i+1][j+1]; + a.lj3 = lj3[i+1][j+1]; + a.lj4 = lj4[i+1][j+1]; + } + fast_alpha_t* restrict tabsix = fast_alpha; + + // loop over neighbors of my atoms + + for (i = 0; i < nlocal; i++) { + double qtmp = q[i]; + double xtmp = xx[i].x; + double ytmp = xx[i].y; + double ztmp = xx[i].z; + itype = type[i] - 1; + int* restrict neighs = firstneigh[i]; + int numneigh = num[i]; + + double tmpfx = 0.0; + double tmpfy = 0.0; + double tmpfz = 0.0; + + fast_alpha_t* restrict tabsixi = (fast_alpha_t*) &tabsix[itype*ntypes]; + for (k = 0; k < numneigh; k++) { + j = neighs[k]; + + if (j < nall) { + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + rsq = delx*delx + dely*dely + delz*delz; + double tmp_coef3 = qtmp*q[j]; + + if (rsq < cut_bothsq) { + r2inv = 1.0/rsq; + + forcecoul = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrtf(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * tmp_coef3/r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + } else { + itable = *int_rsq & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = tmp_coef3 * table; + } + } + + forcelj = 0.0; + if (rsq < cut_ljsq) { + r6inv = r2inv*r2inv*r2inv; + jtype = type[j] - 1; + fast_alpha_t& a = tabsixi[jtype]; + forcelj = r6inv * (a.lj1*r6inv - a.lj2); + if (rsq > cut_lj_innersq) { + switch1 = (cut_ljsq-rsq) * (cut_ljsq-rsq) * + (tmp_coef2 + 2.0*rsq) * tmp_coef1; + switch2 = 12.0*rsq * (cut_ljsq-rsq) * + (rsq-cut_lj_innersq) * tmp_coef1; + philj = r6inv * (a.lj3*r6inv - a.lj4); + forcelj = forcelj*switch1 + philj*switch2; + } + } + + fforce = (forcecoul + forcelj) * r2inv; + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (EFLAG) { + if (NEWTON_PAIR || j < nlocal) factor = 1.0; + else factor = 0.5; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = tmp_coef3 * table; + } + eng_coul += factor*phicoul; + } + if (rsq < cut_ljsq) { + fast_alpha_t& a = tabsixi[jtype]; + philj = r6inv*(a.lj3*r6inv-a.lj4); + if (rsq > cut_lj_innersq) { + switch1 = (cut_ljsq-rsq) * (cut_ljsq-rsq) * + (tmp_coef2 + 2.0*rsq) * tmp_coef1; + philj *= switch1; + } + eng_vdwl += factor*philj; + } + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + } else { + factor_coul = special_coul[j/nall]; + factor_lj = special_lj[j/nall]; + j %= nall; + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + rsq = delx*delx + dely*dely + delz*delz; + double tmp_coef3 = qtmp*q[j]; + + if (rsq < cut_bothsq) { + r2inv = 1.0/rsq; + + forcecoul = 0.0; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrtf(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * tmp_coef3/r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + if (factor_coul < 1.0) { + forcecoul -= (1.0-factor_coul)*prefactor; + } + } else { + itable = *int_rsq & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = tmp_coef3 * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = tmp_coef3 * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } + + forcelj = 0.0; + if (rsq < cut_ljsq) { + r6inv = r2inv*r2inv*r2inv; + jtype = type[j] - 1; + fast_alpha_t& a = tabsixi[jtype]; + forcelj = r6inv * (a.lj1*r6inv - a.lj2); + if (rsq > cut_lj_innersq) { + switch1 = (cut_ljsq-rsq) * (cut_ljsq-rsq) * + (tmp_coef2 + 2.0*rsq) * tmp_coef1; + switch2 = 12.0*rsq * (cut_ljsq-rsq) * + (rsq-cut_lj_innersq) * tmp_coef1; + fast_alpha_t& a = tabsixi[jtype]; + philj = r6inv * (a.lj3*r6inv - a.lj4); + forcelj = forcelj*switch1 + philj*switch2; + } + } + + fforce = (forcecoul + factor_lj*forcelj) * r2inv; + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (EFLAG) { + if (NEWTON_PAIR || j < nlocal) factor = 1.0; + else factor = 0.5; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + phicoul = prefactor*erfc; + else { + table = etable[itable] + fraction*detable[itable]; + phicoul = tmp_coef3 * table; + } + if (factor_coul < 1.0) + phicoul -= (1.0-factor_coul)*prefactor; + eng_coul += factor*phicoul; + } + if (rsq < cut_ljsq) { + fast_alpha_t& a = tabsixi[jtype]; + philj = r6inv*(a.lj3*r6inv-a.lj4); + if (rsq > cut_lj_innersq) { + switch1 = (cut_ljsq-rsq) * (cut_ljsq-rsq) * + (tmp_coef2 + 2.0*rsq) * tmp_coef1; + philj *= switch1; + } + eng_vdwl += factor*factor_lj*philj; + } + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + } + } + ff[i].x += tmpfx; + ff[i].y += tmpfy; + ff[i].z += tmpfz; + } + if (VFLAG == 2) virial_compute(); + free(fast_alpha); fast_alpha = 0; +} + +} + +#endif diff --git a/src/OPT/pair_lj_cut_opt.cpp b/src/OPT/pair_lj_cut_opt.cpp new file mode 100644 index 0000000000..37789d3e57 --- /dev/null +++ b/src/OPT/pair_lj_cut_opt.cpp @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#include "pair_lj_cut_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairLJCutOpt::PairLJCutOpt(LAMMPS *lmp) : PairLJCut(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void PairLJCutOpt::compute(int eflag, int vflag) +{ + if (eflag) { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<1,0,1>(); + case 1: return eval<1,1,1>(); + case 2: return eval<1,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<1,0,0>(); + case 1: return eval<1,1,0>(); + case 2: return eval<1,2,0>(); + } + } + + } else { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<0,0,1>(); + case 1: return eval<0,1,1>(); + case 2: return eval<0,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<0,0,0>(); + case 1: return eval<0,1,0>(); + case 2: return eval<0,2,0>(); + } + } + } +} diff --git a/src/OPT/pair_lj_cut_opt.h b/src/OPT/pair_lj_cut_opt.h new file mode 100644 index 0000000000..9afdfefe07 --- /dev/null +++ b/src/OPT/pair_lj_cut_opt.h @@ -0,0 +1,226 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#ifndef PAIR_LJ_CUT_OPT_H +#define PAIR_LJ_CUT_OPT_H + +#include "stdlib.h" +#include "pair_lj_cut.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "neighbor.h" + +namespace LAMMPS_NS { + +class PairLJCutOpt : public PairLJCut { + public: + PairLJCutOpt(class LAMMPS *); + void compute(int, int); + + private: + template < int EFLAG, int VFLAG, int NEWTON_PAIR > void eval(); +}; + +template < int EFLAG, int VFLAG, int NEWTON_PAIR > +void PairLJCutOpt::eval() +{ + typedef struct { double x,y,z; } vec3_t; + + typedef struct { + double cutsq,lj1,lj2,lj3,lj4,offset; + double _pad[2]; + } fast_alpha_t; + + int* restrict neighs; + double** restrict f; + + eng_vdwl = 0.0; + if (VFLAG) for (int i = 0; i < 6; i++) virial[i] = 0.0; + + if (VFLAG == 2) f = update->f_pair; + else f = atom->f; + + double** restrict x = atom->x; + int* restrict type = atom->type; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + double* restrict special_lj = force->special_lj; + int** restrict firstneigh = neighbor->firstneigh; + int* restrict num = neighbor->numneigh; + + vec3_t* restrict xx = (vec3_t*)x[0]; + vec3_t* restrict ff = (vec3_t*)f[0]; + + int ntypes = atom->ntypes; + int ntypes2 = ntypes*ntypes; + + fast_alpha_t* restrict fast_alpha = + (fast_alpha_t*) malloc(ntypes2*sizeof(fast_alpha_t)); + for( int i = 0; i < ntypes; i++) for( int j = 0; j < ntypes; j++) { + fast_alpha_t& a = fast_alpha[i*ntypes+j]; + a.cutsq = cutsq[i+1][j+1]; + a.lj1 = lj1[i+1][j+1]; + a.lj2 = lj2[i+1][j+1]; + a.lj3 = lj3[i+1][j+1]; + a.lj4 = lj4[i+1][j+1]; + a.offset = offset[i+1][j+1]; + } + fast_alpha_t* restrict tabsix = fast_alpha; + + // loop over neighbors of my atoms + + for (int i = 0; i < nlocal; i++) { + double xtmp = xx[i].x; + double ytmp = xx[i].y; + double ztmp = xx[i].z; + int itype = type[i] - 1; + int* restrict neighs = firstneigh[i]; + int numneigh = num[i]; + + double tmpfx = 0.0; + double tmpfy = 0.0; + double tmpfz = 0.0; + + fast_alpha_t* restrict tabsixi = (fast_alpha_t*)&tabsix[itype*ntypes]; + + for (int k = 0; k < numneigh; k++) { + int j = neighs[k]; + double factor_lj; + + if (j < nall) { + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + int jtype = type[j] - 1; + + fast_alpha_t& a = tabsixi[jtype]; + + if (rsq < a.cutsq) { + double r2inv = 1.0/rsq; + double r6inv = r2inv*r2inv*r2inv; + double forcelj = r6inv * (a.lj1*r6inv - a.lj2); + if (EFLAG) { + double philj = r6inv*(a.lj3*r6inv-a.lj4) - a.offset; + if (NEWTON_PAIR || j < nlocal) eng_vdwl += philj; + else eng_vdwl += 0.5*philj; + } + double fforce = forcelj*r2inv; + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + + } else { + + factor_lj = special_lj[j/nall]; + j = j % nall; + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + int jtype1 = type[j]; + int jtype = jtype1 - 1; + + fast_alpha_t& a = tabsixi[jtype]; + if (rsq < a.cutsq) { + + double r2inv = 1.0/rsq; + double r6inv = r2inv*r2inv*r2inv; + + fast_alpha_t& a = tabsixi[jtype]; + double forcelj = r6inv * (a.lj1*r6inv - a.lj2); + if (EFLAG) { + double philj = r6inv*(a.lj3*r6inv-a.lj4) - a.offset; + if (NEWTON_PAIR || j < nlocal) eng_vdwl += factor_lj*philj; + else eng_vdwl += 0.5*factor_lj*philj; + } + + double fforce = factor_lj*forcelj*r2inv; + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + } + } + ff[i].x += tmpfx; + ff[i].y += tmpfy; + ff[i].z += tmpfz; + } + + if (VFLAG == 2) virial_compute(); + + free(fast_alpha); fast_alpha = 0; +} + +} + +#endif diff --git a/src/OPT/pair_morse_opt.cpp b/src/OPT/pair_morse_opt.cpp new file mode 100644 index 0000000000..3d5712da3a --- /dev/null +++ b/src/OPT/pair_morse_opt.cpp @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#include "pair_morse_opt.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairMorseOpt::PairMorseOpt(LAMMPS *lmp) : PairMorse(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void PairMorseOpt::compute(int eflag, int vflag) +{ + if (eflag) { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<1,0,1>(); + case 1: return eval<1,1,1>(); + case 2: return eval<1,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<1,0,0>(); + case 1: return eval<1,1,0>(); + case 2: return eval<1,2,0>(); + } + } + + } else { + if (force->newton_pair) { + switch (vflag) { + case 0: return eval<0,0,1>(); + case 1: return eval<0,1,1>(); + case 2: return eval<0,2,1>(); + } + } else { + switch (vflag) { + case 0: return eval<0,0,0>(); + case 1: return eval<0,1,0>(); + case 2: return eval<0,2,0>(); + } + } + } +} diff --git a/src/OPT/pair_morse_opt.h b/src/OPT/pair_morse_opt.h new file mode 100644 index 0000000000..c5e443326f --- /dev/null +++ b/src/OPT/pair_morse_opt.h @@ -0,0 +1,232 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + James Fischer, High Performance Technologies, Inc. + David Richie, Stone Ridge Technology + Vincent Natol, Stone Ridge Technology +------------------------------------------------------------------------- */ + +#ifndef PAIR_MORSE_OPT_H +#define PAIR_MORSE_OPT_H + +#include "math.h" +#include "stdio.h" +#include "stdlib.h" +#include "pair_morse.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "update.h" +#include "memory.h" +#include "neighbor.h" +#include "error.h" + +namespace LAMMPS_NS { + +class PairMorseOpt : public PairMorse { + public: + PairMorseOpt(class LAMMPS *); + void compute(int, int); + + private: + template < int EFLAG, int VFLAG, int NEWTON_PAIR > void eval(); +}; + +template < int EFLAG, int VFLAG, int NEWTON_PAIR > +void PairMorseOpt::eval() +{ + typedef struct { double x,y,z; } vec3_t; + + typedef struct { + double cutsq,r0,alpha,morse1,d0,offset; + double _pad[2]; + } fast_alpha_t; + + int* restrict neighs; + double** restrict f; + + eng_vdwl = 0.0; + if (VFLAG) for (int i = 0; i < 6; i++) virial[i] = 0.0; + + if (VFLAG == 2) f = update->f_pair; + else f = atom->f; + + double** restrict x = atom->x; + int* restrict type = atom->type; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + double* restrict special_lj = force->special_lj; + + int** restrict firstneigh = neighbor->firstneigh; + int* restrict num = neighbor->numneigh; + + vec3_t* restrict xx = (vec3_t*)x[0]; + vec3_t* restrict ff = (vec3_t*)f[0]; + + int ntypes = atom->ntypes; + int ntypes2 = ntypes*ntypes; + + fast_alpha_t* restrict fast_alpha = + (fast_alpha_t*) malloc(ntypes2*sizeof(fast_alpha_t)); + for( int i = 0; i < ntypes; i++) for( int j = 0; j < ntypes; j++) { + fast_alpha_t& a = fast_alpha[i*ntypes+j]; + a.cutsq = cutsq[i+1][j+1]; + a.r0 = r0[i+1][j+1]; + a.alpha = alpha[i+1][j+1]; + a.morse1 = morse1[i+1][j+1]; + a.d0 = d0[i+1][j+1]; + a.offset = offset[i+1][j+1]; + } + fast_alpha_t* restrict tabsix = fast_alpha; + + // loop over neighbors of my atoms + + for (int i = 0; i < nlocal; i++) { + double xtmp = xx[i].x; + double ytmp = xx[i].y; + double ztmp = xx[i].z; + int itype = type[i] - 1; + int* restrict neighs = firstneigh[i]; + int numneigh = num[i]; + + double tmpfx = 0.0; + double tmpfy = 0.0; + double tmpfz = 0.0; + + fast_alpha_t* restrict tabsixi = (fast_alpha_t*)&tabsix[itype*ntypes]; + + for (int k = 0; k < numneigh; k++) { + int j = neighs[k]; + + double factor_lj; + if (j < nall) { + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + int jtype = type[j] - 1; + + fast_alpha_t& a = tabsixi[jtype]; + if (rsq < a.cutsq) { + double r = sqrt(rsq); + double dr = r - a.r0; + double dexp = exp(-a.alpha * dr); + double fforce = a.morse1 * (dexp*dexp - dexp) / r; + if (EFLAG) { + double phi = a.d0 * (dexp*dexp - 2.0*dexp) - a.offset; + if (NEWTON_PAIR || j < nlocal) { + eng_vdwl += phi; + } else { + eng_vdwl += 0.5*phi; + } + } + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + } else { + factor_lj = special_lj[j/nall]; + j = j % nall; + + double delx = xtmp - xx[j].x; + double dely = ytmp - xx[j].y; + double delz = ztmp - xx[j].z; + double rsq = delx*delx + dely*dely + delz*delz; + + int jtype = type[j] - 1; + + fast_alpha_t& a = tabsixi[jtype]; + if (rsq < a.cutsq) { + double r = sqrt(rsq); + double dr = r - a.r0; + double dexp = exp(-a.alpha * dr); + double fforce = factor_lj * a.morse1 * (dexp*dexp - dexp) / r; + if (EFLAG) { + double phi = a.d0 * (dexp*dexp - 2.0*dexp) - a.offset; + if (NEWTON_PAIR || j < nlocal) { + eng_vdwl += factor_lj*phi; + } else { + eng_vdwl += 0.5*factor_lj*phi; + } + } + + tmpfx += delx*fforce; + tmpfy += dely*fforce; + tmpfz += delz*fforce; + if (NEWTON_PAIR || j < nlocal) { + ff[j].x -= delx*fforce; + ff[j].y -= dely*fforce; + ff[j].z -= delz*fforce; + } + + if (VFLAG == 1) { + if (NEWTON_PAIR || j < nlocal) { + virial[0] += delx*delx*fforce; + virial[1] += dely*dely*fforce; + virial[2] += delz*delz*fforce; + virial[3] += delx*dely*fforce; + virial[4] += delx*delz*fforce; + virial[5] += dely*delz*fforce; + } else { + virial[0] += 0.5*delx*delx*fforce; + virial[1] += 0.5*dely*dely*fforce; + virial[2] += 0.5*delz*delz*fforce; + virial[3] += 0.5*delx*dely*fforce; + virial[4] += 0.5*delx*delz*fforce; + virial[5] += 0.5*dely*delz*fforce; + } + } + } + } + } + ff[i].x += tmpfx; + ff[i].y += tmpfy; + ff[i].z += tmpfz; + } + + if (VFLAG == 2) virial_compute(); + + free(fast_alpha); fast_alpha = 0; + +} + +} + +#endif diff --git a/src/OPT/style_opt.h b/src/OPT/style_opt.h new file mode 100644 index 0000000000..061816e136 --- /dev/null +++ b/src/OPT/style_opt.h @@ -0,0 +1,30 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PairInclude +#include "pair_eam_opt.h" +#include "pair_eam_alloy_opt.h" +#include "pair_eam_fs_opt.h" +#include "pair_lj_charmm_coul_long_opt.h" +#include "pair_lj_cut_opt.h" +#include "pair_morse_opt.h" +#endif + +#ifdef PairClass +PairStyle(eam/opt,PairEAMOpt) +PairStyle(eam/alloy/opt,PairEAMAlloyOpt) +PairStyle(eam/fs/opt,PairEAMFSOpt) +PairStyle(lj/cut/opt,PairLJCutOpt) +PairStyle(lj/charmm/coul/long/opt,PairLJCharmmCoulLongOpt) +PairStyle(morse/opt,PairMorseOpt) +#endif diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp new file mode 100644 index 0000000000..539e8570bd --- /dev/null +++ b/src/atom_vec.cpp @@ -0,0 +1,42 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "atom_vec.h" +#include "atom.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +AtomVec::AtomVec(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +{ + nmax = 0; + molecular = 0; + bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 0; + mass_type = dipole_type = 0; + comm_x_only = comm_f_only = 1; + size_comm = size_reverse = size_border = 0; +} + +/* ---------------------------------------------------------------------- + unpack a single line from Velocity section of data file + individual style may override this +------------------------------------------------------------------------- */ + +void AtomVec::data_vel(int m, char *line, int ihybrid) +{ + int tmp; + double **v = atom->v; + sscanf(line,"%d %lg %lg %lg",&tmp,&v[m][0],&v[m][1],&v[m][2]); +} diff --git a/src/atom_vec.h b/src/atom_vec.h new file mode 100644 index 0000000000..e23950c888 --- /dev/null +++ b/src/atom_vec.h @@ -0,0 +1,83 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef FOO_H +#define FOO_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class AtomVec : protected Pointers { + public: + int molecular; // 0 = atomic, 1 = molecular system + int bonds_allow,angles_allow; // 1 if bonds, angles are used + int dihedrals_allow,impropers_allow; // 1 if dihedrals, impropers used + int mass_type; // 1 if per-type masses + int dipole_type; // 1 if per-type dipole moments + int comm_x_only; // 1 if only exchange x in forward comm + int comm_f_only; // 1 if only exchange f in reverse comm + int size_comm; // # of values per atom in comm + int size_reverse; // # in reverse comm + int size_border; // # in border comm + int size_data_atom; // number of values in Atom line + int size_data_vel; // number of values in Velocity line + int xcol_data; // column (1-N) where x is in Atom line + + AtomVec(class LAMMPS *, int, char **); + virtual ~AtomVec() {} + virtual void init() {} + + virtual void grow(int) = 0; + virtual void reset_ptrs() = 0; + virtual void zero_owned(int) {} + virtual void zero_ghost(int,int) {} + virtual void copy(int, int) = 0; + + virtual int pack_comm(int, int *, double *, int *) = 0; + virtual int pack_comm_one(int, double *) {return 0;} + virtual void unpack_comm(int, int, double *) = 0; + virtual int unpack_comm_one(int, double *) {return 0;} + + virtual int pack_reverse(int, int, double *) = 0; + virtual int pack_reverse_one(int, double *) {return 0;} + virtual void unpack_reverse(int, int *, double *) = 0; + virtual int unpack_reverse_one(int, double *) {return 0;} + + virtual int pack_border(int, int *, double *, int *) = 0; + virtual int pack_border_one(int, double *) {return 0;} + virtual void unpack_border(int, int, double *) = 0; + virtual int unpack_border_one(int, double *) {return 0;} + + virtual int pack_exchange(int, double *) = 0; + virtual int unpack_exchange(double *) = 0; + + virtual int size_restart() = 0; + virtual int size_restart_one(int) = 0; + virtual int pack_restart(int, double *) = 0; + virtual int unpack_restart(double *) = 0; + + virtual void create_atom(int, double, double, double, int) = 0; + virtual void data_atom(double, double, double, int, char **, int) = 0; + virtual void data_vel(int, char *, int); + virtual void data_params(int) {} + + virtual int memory_usage() = 0; + + protected: + int nmax; // local copy of atom->nmax +}; + +} + +#endif diff --git a/src/atom_vec_atomic.cpp b/src/atom_vec_atomic.cpp new file mode 100644 index 0000000000..4c8fa7333a --- /dev/null +++ b/src/atom_vec_atomic.cpp @@ -0,0 +1,455 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_atomic.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecAtomic::AtomVecAtomic(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + mass_type = 1; + size_comm = 3; + size_reverse = 3; + size_border = 6; + size_data_atom = 5; + size_data_vel = 4; + xcol_data = 3; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecAtomic::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAtomic::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAtomic::copy(int i, int j) +{ + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = 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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAtomic::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAtomic::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAtomic::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAtomic::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAtomic::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecAtomic::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + } +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecAtomic::pack_exchange(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecAtomic::unpack_exchange(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (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 AtomVecAtomic::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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecAtomic::size_restart_one(int i) +{ + return 11; +} + +/* ---------------------------------------------------------------------- + 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 AtomVecAtomic::pack_restart(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = 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 AtomVecAtomic::unpack_restart(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + 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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecAtomic::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecAtomic::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + type[nlocal] = atoi(values[1]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecAtomic::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + return bytes; +} diff --git a/src/atom_vec_atomic.h b/src/atom_vec_atomic.h new file mode 100644 index 0000000000..ba98432b51 --- /dev/null +++ b/src/atom_vec_atomic.h @@ -0,0 +1,51 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_ATOMIC_H +#define ATOM_VEC_ATOMIC_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecAtomic : public AtomVec { + public: + AtomVecAtomic(class LAMMPS *, int, char **); + virtual ~AtomVecAtomic() {} + void grow(int); + void reset_ptrs(); + void copy(int, int); + virtual int pack_comm(int, int *, double *, int *); + virtual void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + virtual int pack_border(int, int *, double *, int *); + virtual void unpack_border(int, int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + int memory_usage(); + + protected: + int *tag,*type,*mask,*image; + double **x,**v,**f; +}; + +} + +#endif diff --git a/src/atom_vec_charge.cpp b/src/atom_vec_charge.cpp new file mode 100644 index 0000000000..7d073afcff --- /dev/null +++ b/src/atom_vec_charge.cpp @@ -0,0 +1,520 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "stdlib.h" +#include "atom_vec_charge.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecCharge::AtomVecCharge(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + mass_type = 1; + size_comm = 3; + size_reverse = 3; + size_border = 7; + size_data_atom = 6; + size_data_vel = 4; + xcol_data = 4; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecCharge::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + tag = atom->tag = (int *) + memory->srealloc(atom->tag,nmax*sizeof(int),"atom:tag"); + type = atom->type = (int *) + memory->srealloc(atom->type,nmax*sizeof(int),"atom:type"); + mask = atom->mask = (int *) + memory->srealloc(atom->mask,nmax*sizeof(int),"atom:mask"); + image = atom->image = (int *) + memory->srealloc(atom->image,nmax*sizeof(int),"atom:image"); + x = atom->x = memory->grow_2d_double_array(atom->x,nmax,3,"atom:x"); + v = atom->v = memory->grow_2d_double_array(atom->v,nmax,3,"atom:v"); + f = atom->f = memory->grow_2d_double_array(atom->f,nmax,3,"atom:f"); + + q = atom->q = (double *) + memory->srealloc(atom->q,nmax*sizeof(double),"atom:q"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecCharge::reset_ptrs() +{ + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + q = atom->q; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for owned atom I + data in copy(), not including tag,type,mask,image,x,v +------------------------------------------------------------------------- */ + +void AtomVecCharge::zero_owned(int i) +{ + q[i] = 0.0; +} + +/* ---------------------------------------------------------------------- + zero auxiliary data for n ghost atoms + data in border(), not including x,tag,type,mask + grow() is here since zero_ghost called first in hybrid::unpack_border() +------------------------------------------------------------------------- */ + +void AtomVecCharge::zero_ghost(int n, int first) +{ + int last = first + n; + for (int i = first; i < last; i++) { + if (i == nmax) atom->avec->grow(0); + q[i] = 0.0; + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecCharge::copy(int i, int j) +{ + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + q[j] = 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); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecCharge::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecCharge::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = q[j]; + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = q[j]; + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::pack_border_one(int i, double *buf) +{ + buf[0] = q[i]; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecCharge::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); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + q[i] = buf[m++]; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::unpack_border_one(int i, double *buf) +{ + q[i] = buf[0]; + return 1; +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVecCharge::pack_exchange(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + + buf[m++] = 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; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecCharge::unpack_exchange(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + + 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 AtomVecCharge::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; +} + +/* ---------------------------------------------------------------------- + size of restart data for atom I + do not include extra data stored by fixes, included by caller +------------------------------------------------------------------------- */ + +int AtomVecCharge::size_restart_one(int i) +{ + return 12; +} + +/* ---------------------------------------------------------------------- + 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 AtomVecCharge::pack_restart(int i, double *buf) +{ + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = tag[i]; + buf[m++] = type[i]; + buf[m++] = mask[i]; + buf[m++] = image[i]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + buf[m++] = 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 AtomVecCharge::unpack_restart(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = static_cast (buf[m++]); + type[nlocal] = static_cast (buf[m++]); + mask[nlocal] = static_cast (buf[m++]); + image[nlocal] = static_cast (buf[m++]); + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + 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 type itype at x0,y0,z0 + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecCharge::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = x0; + x[nlocal][1] = y0; + x[nlocal][2] = z0; + mask[nlocal] = 1; + image[nlocal] = (512 << 20) | (512 << 10) | 512; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + q[nlocal] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecCharge::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = atoi(values[0]); + if (tag[nlocal] <= 0) + error->one("Invalid atom ID in Atoms section of data file"); + + type[nlocal] = atoi(values[1]); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one("Invalid atom type in Atoms section of data file"); + + q[nlocal] = atof(values[2]); + + x[nlocal][0] = xtmp; + x[nlocal][1] = ytmp; + x[nlocal][2] = ztmp; + + image[nlocal] = imagetmp; + + mask[nlocal] = 1; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecCharge::memory_usage() +{ + int bytes = 0; + + if (atom->memcheck("tag")) bytes += nmax * sizeof(int); + if (atom->memcheck("type")) bytes += nmax * sizeof(int); + if (atom->memcheck("mask")) bytes += nmax * sizeof(int); + if (atom->memcheck("image")) bytes += nmax * sizeof(int); + if (atom->memcheck("x")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("v")) bytes += nmax*3 * sizeof(double); + if (atom->memcheck("f")) bytes += nmax*3 * sizeof(double); + + if (atom->memcheck("q")) bytes += nmax * sizeof(double); + + return bytes; +} diff --git a/src/atom_vec_charge.h b/src/atom_vec_charge.h new file mode 100644 index 0000000000..bca54faa67 --- /dev/null +++ b/src/atom_vec_charge.h @@ -0,0 +1,55 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_CHARGE_H +#define ATOM_VEC_CHARGE_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecCharge : public AtomVec { + public: + AtomVecCharge(class LAMMPS *, int, char **); + void grow(int); + void reset_ptrs(); + void zero_owned(int); + void zero_ghost(int, int); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + int pack_border(int, int *, double *, int *); + int pack_border_one(int, double *); + void unpack_border(int, int, double *); + int unpack_border_one(int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + int memory_usage(); + + private: + int *tag,*type,*mask,*image; + double **x,**v,**f; + double *q; +}; + +} + +#endif diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp new file mode 100644 index 0000000000..ff46cb824e --- /dev/null +++ b/src/atom_vec_hybrid.cpp @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "atom_vec_hybrid.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(A,B) ((A) < (B)) ? (A) : (B) +#define MAX(A,B) ((A) > (B)) ? (A) : (B) + +#define DELTA 10000 + +/* ---------------------------------------------------------------------- */ + +AtomVecHybrid::AtomVecHybrid(LAMMPS *lmp, int narg, char **arg) : + AtomVec(lmp, narg, arg) +{ + int i,m; + + if (narg < 1) error->all("Illegal atom_style command"); + + // create sub-styles + + nstyles = narg; + styles = new AtomVec*[nstyles]; + keywords = new char*[nstyles]; + + for (i = 0; i < narg; i++) { + for (m = 0; m < i; m++) + if (strcmp(arg[i],keywords[m]) == 0) + error->all("Atom style hybrid cannot use same atom style twice"); + if (strcmp(arg[i],"hybrid") == 0) + error->all("Atom style hybrid cannot have hybrid as an argument"); + styles[i] = atom->new_avec(arg[i],0,NULL); + keywords[i] = new char[strlen(arg[i])+1]; + strcpy(keywords[i],arg[i]); + } + + // hybrid settings are MAX or MIN of sub-style settings + // size_border has +1 for hybrid[] value that is also communicated + + for (m = 0; m < nstyles; m++) { + molecular = MAX(molecular,styles[m]->molecular); + bonds_allow = MAX(bonds_allow,styles[m]->bonds_allow); + angles_allow = MAX(angles_allow,styles[m]->angles_allow); + dihedrals_allow = MAX(dihedrals_allow,styles[m]->dihedrals_allow); + impropers_allow = MAX(impropers_allow,styles[m]->impropers_allow); + mass_type = MAX(mass_type,styles[m]->mass_type); + dipole_type = MAX(dipole_type,styles[m]->dipole_type); + comm_x_only = MIN(comm_x_only,styles[m]->comm_x_only); + comm_f_only = MIN(comm_f_only,styles[m]->comm_f_only); + size_comm = MAX(size_comm,styles[m]->size_comm); + size_reverse = MAX(size_reverse,styles[m]->size_reverse); + size_border = MAX(size_border,styles[m]->size_border) + 1; + } +} + +/* ---------------------------------------------------------------------- */ + +AtomVecHybrid::~AtomVecHybrid() +{ + for (int m = 0; m < nstyles; m++) delete styles[m]; + delete [] styles; + for (int m = 0; m < nstyles; m++) delete [] keywords[m]; + delete [] keywords; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by DELTA + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecHybrid::grow(int n) +{ + if (n == 0) nmax += DELTA; + else nmax = n; + atom->nmax = nmax; + + int tmp = atom->nextra_grow; + for (int m = 0; m < nstyles; m++) { + atom->nextra_grow = 0; + styles[m]->grow(nmax); + atom->nextra_grow = tmp; + } + + // pointers for arrays used directly by hybrid style + + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + hybrid = atom->hybrid = (int *) + memory->srealloc(atom->hybrid,nmax*sizeof(int),"atom:hybrid"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecHybrid::reset_ptrs() +{ + for (int m = 0; m < nstyles; m++) styles[m]->reset_ptrs(); + + tag = atom->tag; + type = atom->type; + mask = atom->mask; + image = atom->image; + x = atom->x; + v = atom->v; + f = atom->f; + + hybrid = atom->hybrid; +} + +/* ---------------------------------------------------------------------- + copy array values based on hybrid style of atom i + zero auxiliary arrays for all other styles before copy +------------------------------------------------------------------------- */ + +void AtomVecHybrid::copy(int i, int j) +{ + int ihybrid = hybrid[i]; + for (int m = 0; m < nstyles; m++) + if (m != ihybrid) styles[m]->zero_owned(j); + styles[ihybrid]->copy(i,j); + hybrid[j] = ihybrid; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecHybrid::pack_comm(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + m += styles[hybrid[j]]->pack_comm_one(j,&buf[m]); + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + m += styles[hybrid[j]]->pack_comm_one(j,&buf[m]); + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecHybrid::unpack_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + m += styles[hybrid[i]]->unpack_comm_one(i,&buf[m]); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecHybrid::pack_reverse(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + m += styles[hybrid[i]]->pack_reverse_one(i,&buf[m]); + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecHybrid::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + m += styles[hybrid[j]]->unpack_reverse_one(j,&buf[m]); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecHybrid::pack_border(int n, int *list, double *buf, int *pbc_flags) +{ + int i,j,m; + + m = 0; + if (pbc_flags[0] == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = hybrid[j]; + m += styles[hybrid[j]]->pack_border_one(j,&buf[m]); + } + } else { + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + pbc_flags[1]*xprd; + buf[m++] = x[j][1] + pbc_flags[2]*yprd; + buf[m++] = x[j][2] + pbc_flags[3]*zprd; + buf[m++] = tag[j]; + buf[m++] = type[j]; + buf[m++] = mask[j]; + buf[m++] = hybrid[j]; + m += styles[hybrid[j]]->pack_border_one(j,&buf[m]); + } + } + return m; +} + +/* ---------------------------------------------------------------------- + unpack border ghost atom data + zero auxiliary ghost arrays for all styles before unpack + grow() is called in zero_ghost() and here (in case zero_ghost is no-op) +------------------------------------------------------------------------- */ + +void AtomVecHybrid::unpack_border(int n, int first, double *buf) +{ + int i,m,last; + + for (m = 0; m < nstyles; m++) styles[m]->zero_ghost(n,first); + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + if (i == nmax) grow(0); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = static_cast (buf[m++]); + type[i] = static_cast (buf[m++]); + mask[i] = static_cast (buf[m++]); + hybrid[i] = static_cast (buf[m++]); + m += styles[hybrid[i]]->unpack_border_one(i,&buf[m]); + } +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + sub-style does packing + append hybrid[i] and increment count stored in buf[0] +------------------------------------------------------------------------- */ + +int AtomVecHybrid::pack_exchange(int i, double *buf) +{ + int m = styles[hybrid[i]]->pack_exchange(i,buf); + buf[m++] = hybrid[i]; + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- + unpack data for single atom received from another proc + sub-style does unpacking + grow() must occur here so arrays for all sub-styles are grown + extract hybrid[nlocal] from end of buf +------------------------------------------------------------------------- */ + +int AtomVecHybrid::unpack_exchange(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = static_cast (buf[0]); + hybrid[nlocal] = static_cast (buf[m-1]); + int tmp = styles[hybrid[nlocal]]->unpack_exchange(buf); + return m; +} + +/* ---------------------------------------------------------------------- + size of restart data for all atoms owned by this proc + include extra data stored by fixes +------------------------------------------------------------------------- */ + +int AtomVecHybrid::size_restart() +{ + int i; + int nlocal = atom->nlocal; + + int n = 0; + for (i = 0; i < nlocal; i++) + n += styles[hybrid[i]]->size_restart_one(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 + sub-style does packing + append hybrid[i] and increment count stored in buf[0] +------------------------------------------------------------------------- */ + +int AtomVecHybrid::pack_restart(int i, double *buf) +{ + int m = styles[hybrid[i]]->pack_restart(i,buf); + buf[m++] = hybrid[i]; + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- + unpack data for one atom from restart file including extra quantities + sub-style does unpacking + grow() must occur here so arrays for all sub-styles are grown + zero auxiliary arrays for all other styles before unpack + extract hybrid[nlocal] from end of buf +------------------------------------------------------------------------- */ + +int AtomVecHybrid::unpack_restart(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + atom->extra = memory->grow_2d_double_array(atom->extra,nmax, + atom->nextra_store, + "atom:extra"); + } + + int m = static_cast (buf[0]); + int ihybrid = static_cast (buf[m-1]); + for (int m = 0; m < nstyles; m++) + if (m != ihybrid) styles[m]->zero_owned(nlocal); + hybrid[nlocal] = ihybrid; + + // size of extra unpack in sub-style includes end-of-buf entry of hybrid + // avoid this by resetting buf[0] to one less + + buf[0] = m-1; + int tmp = styles[ihybrid]->unpack_restart(buf); + return m; +} + +/* ---------------------------------------------------------------------- + create one atom of type itype at x0,y0,z0 for ihybrid style + sub-style does create + grow() must occur here so arrays for all sub-styles are grown + zero auxiliary arrays for all other styles before create +------------------------------------------------------------------------- */ + +void AtomVecHybrid::create_atom(int itype, double x0, double y0, double z0, + int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + for (int m = 0; m < nstyles; m++) + if (m != ihybrid) styles[m]->zero_owned(nlocal); + hybrid[nlocal] = ihybrid; + styles[ihybrid]->create_atom(itype,x0,y0,z0,0); +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + zero auxiliary arrays for all other styles before unpack + sub-style will increment nlocal +------------------------------------------------------------------------- */ + +void AtomVecHybrid::data_atom(double xtmp, double ytmp, double ztmp, + int imagetmp, char **values, int ihybrid) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + for (int m = 0; m < nstyles; m++) + if (m != ihybrid) styles[m]->zero_owned(nlocal); + hybrid[nlocal] = ihybrid; + styles[ihybrid]->data_atom(xtmp,ytmp,ztmp,imagetmp,values,0); +} + +/* ---------------------------------------------------------------------- + unpack one line from Velocities section of data file +------------------------------------------------------------------------- */ + +void AtomVecHybrid::data_vel(int m, char *line, int ihybrid) +{ + styles[ihybrid]->data_vel(m,line,0); +} + +/* ---------------------------------------------------------------------- + set data file parameters for ihybrid sub-style +------------------------------------------------------------------------- */ + +void AtomVecHybrid::data_params(int ihybrid) +{ + size_data_atom = styles[ihybrid]->size_data_atom; + size_data_vel = styles[ihybrid]->size_data_vel; + xcol_data = styles[ihybrid]->xcol_data; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +int AtomVecHybrid::memory_usage() +{ + int bytes = 0; + for (int m = 0; m < nstyles; m++) + bytes += styles[m]->memory_usage(); + if (atom->memcheck("hybrid")) bytes += nmax * sizeof(int); + return bytes; +} diff --git a/src/atom_vec_hybrid.h b/src/atom_vec_hybrid.h new file mode 100644 index 0000000000..66b4025128 --- /dev/null +++ b/src/atom_vec_hybrid.h @@ -0,0 +1,58 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef ATOM_VEC_HYBRID_H +#define ATOM_VEC_HYBRID_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecHybrid : public AtomVec { + public: + int nstyles; + class AtomVec **styles; + char **keywords; + + AtomVecHybrid(class LAMMPS *, int, char **); + ~AtomVecHybrid(); + void grow(int); + void reset_ptrs(); + void copy(int, int); + int pack_comm(int, int *, double *, int *); + void unpack_comm(int, int, double *); + int pack_reverse(int, int, double *); + void unpack_reverse(int, int *, double *); + int pack_border(int, int *, double *, int *); + void unpack_border(int, int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int size_restart_one(int) {return 0;} + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double, double, double, int); + void data_atom(double, double, double, int, char **, int); + void data_vel(int, char *, int); + void data_params(int); + int memory_usage(); + + private: + int *tag,*type,*mask,*image; + double **x,**v,**f; + int *hybrid; +}; + +} + +#endif diff --git a/src/compute.cpp b/src/compute.cpp new file mode 100644 index 0000000000..0a6312068e --- /dev/null +++ b/src/compute.cpp @@ -0,0 +1,89 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. // +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "stdlib.h" +#include "string.h" +#include "compute.h" +#include "group.h" +#include "domain.h" +#include "lattice.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +Compute::Compute(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +{ + if (narg < 3) error->all("Illegal compute command"); + + // compute ID, group, and style + + int n = strlen(arg[0]) + 1; + id = new char[n]; + strcpy(id,arg[0]); + + igroup = group->find(arg[1]); + groupbit = group->bitmask[igroup]; + + n = strlen(arg[2]) + 1; + style = new char[n]; + strcpy(style,arg[2]); + + // set child class defaults + + vector = NULL; + scalar_atom = NULL; + vector_atom = NULL; + + scalar_flag = vector_flag = peratom_flag = 0; + tempflag = pressflag = 0; + id_pre = NULL; + comm_forward = comm_reverse = 0; + neigh_half_once = neigh_full_once = 0; + + // set modify defaults + + extra_dof = 3; + dynamic = 0; +} + +/* ---------------------------------------------------------------------- */ + +Compute::~Compute() +{ + delete [] id; + delete [] style; +} + +/* ---------------------------------------------------------------------- */ + +void Compute::modify_params(int narg, char **arg) +{ + if (narg == 0) error->all("Illegal compute_modify command"); + + int iarg = 0; while (iarg < narg) { + if (strcmp(arg[iarg],"extra") == 0) { + if (iarg+2 > narg) error->all("Illegal compute_modify command"); + extra_dof = atoi(arg[iarg+1]); + iarg += 2; + } else if (strcmp(arg[iarg],"dynamic") == 0) { + if (iarg+2 > narg) error->all("Illegal compute_modify command"); + if (strcmp(arg[iarg+1],"no") == 0) dynamic = 0; + else if (strcmp(arg[iarg+1],"yes") == 0) dynamic = 1; + else error->all("Illegal compute_modify command"); + iarg += 2; + } else error->all("Illegal compute_modify command"); + } +} diff --git a/src/compute.h b/src/compute.h new file mode 100644 index 0000000000..49cb3903c1 --- /dev/null +++ b/src/compute.h @@ -0,0 +1,71 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_H +#define COMPUTE_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Compute : protected Pointers { + public: + char *id,*style; + int igroup,groupbit; + + double scalar; // computed scalar + double *vector; // computed vector + double *scalar_atom; // computed per-atom scalar + double **vector_atom; // computed per-atom vector + + int scalar_flag; // 0/1 if compute_scalar() function exists + int vector_flag; // 0/1 if compute_vector() function exists + int peratom_flag; // 0/1 if compute_peratom() function exists + int size_vector; // N = size of vector + int size_peratom; // 0 = just scalar_atom, N = size of vector_atom + + int extensive; // 0/1 if scalar,vector are intensive/extensive values + int tempflag; // 1 if Compute can be used as temperature + // must have both compute_scalar, compute_vector + int pressflag; // 1 if Compute can be used as pressure (uses virial) + // must have both compute_scalar, compute_vector + char *id_pre; // ID of Compute that needs to be computed before this + double dof; // degrees-of-freedom for temperature + + int comm_forward; // size of forward communication (0 if none) + int comm_reverse; // size of reverse communication (0 if none) + int neigh_half_once; // 1 if requires half neighbor lists + int neigh_full_once; // 1 if requires full neighbor lists + + Compute(class LAMMPS *, int, char **); + virtual ~Compute(); + void modify_params(int, char **); + virtual void init() = 0; + virtual double compute_scalar() {return 0.0;} + virtual void compute_vector() {} + virtual void compute_peratom() {} + + virtual int pack_comm(int, int *, double *, int *) {return 0;} + virtual void unpack_comm(int, int, double *) {} + virtual int pack_reverse_comm(int, int, double *) {return 0;} + virtual void unpack_reverse_comm(int, int *, double *) {} + + virtual int memory_usage() {return 0;} + + protected: + int extra_dof,dynamic; +}; + +} + +#endif diff --git a/src/compute_centro_atom.cpp b/src/compute_centro_atom.cpp new file mode 100644 index 0000000000..e9779fd45e --- /dev/null +++ b/src/compute_centro_atom.cpp @@ -0,0 +1,290 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "compute_centro_atom.h" +#include "atom.h" +#include "modify.h" +#include "update.h" +#include "neighbor.h" +#include "force.h" +#include "pair.h" +#include "comm.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeCentroAtom::ComputeCentroAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute centro/atom command"); + + peratom_flag = 1; + size_peratom = 0; + neigh_full_once = 1; + + nmax = 0; + centro = NULL; + maxneigh = 0; + distsq = NULL; + nearest = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeCentroAtom::~ComputeCentroAtom() +{ + memory->sfree(centro); + memory->sfree(distsq); + memory->sfree(nearest); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCentroAtom::init() +{ + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"centro/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning("More than one compute centro/atom defined"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCentroAtom::compute_peratom() +{ + int j,k,jj,kk,n,numneigh; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq,value; + int *neighs; + double pairs[66]; + + // grow centro array if necessary + + if (atom->nlocal > nmax) { + memory->sfree(centro); + nmax = atom->nmax; + centro = (double *) + memory->smalloc(nmax*sizeof(double),"compute/centro/atom:centro"); + scalar_atom = centro; + } + + // if needed, build a full neighbor list + + if (!neighbor->full_every) neighbor->build_full(); + + // compute centro-symmetry parameter for each atom in group + // use full neighbor list + + double **x = atom->x; + int *mask = atom->mask; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + double cutsq = force->pair->cutforce * force->pair->cutforce; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + neighs = neighbor->firstneigh_full[i]; + numneigh = neighbor->numneigh_full[i]; + + // insure distsq and nearest arrays are long enough + + if (numneigh > maxneigh) { + memory->sfree(distsq); + memory->sfree(nearest); + maxneigh = numneigh; + distsq = (double *) memory->smalloc(maxneigh*sizeof(double), + "compute/centro/atom:distsq"); + nearest = (int *) memory->smalloc(maxneigh*sizeof(int), + "compute/centro/atom:nearest"); + } + + // loop over list of all neighbors within force cutoff + // distsq[] = distance sq to each + // nearest[] = atom indices of neighbors + + n = 0; + for (k = 0; k < numneigh; k++) { + j = neighs[k]; + if (j >= nall) j %= nall; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) { + distsq[n] = rsq; + nearest[n++] = j; + } + } + + // if not 12 neighbors, centro = 0.0 + + if (n < 12) { + centro[i] = 0.0; + continue; + } + + // store 12 nearest neighs in 1st 12 locations of distsq and nearest + + select2(12,n,distsq,nearest); + + // R = Ri + Rj for each of 66 i,j pairs among 12 neighbors + // pairs = squared length of each R + + n = 0; + for (j = 0; j < 12; j++) { + jj = nearest[j]; + for (k = j+1; k < 12; k++) { + kk = nearest[k]; + delx = x[jj][0] + x[kk][0] - 2.0*xtmp; + dely = x[jj][1] + x[kk][1] - 2.0*ytmp; + delz = x[jj][2] + x[kk][2] - 2.0*ztmp; + pairs[n++] = delx*delx + dely*dely + delz*delz; + } + } + + // store 6 smallest pair distances in 1st 6 locations of pairs + + select(6,66,pairs); + + // centrosymmetry = sum of 6 smallest squared values + + value = 0.0; + for (j = 0; j < 6; j++) value += pairs[j]; + centro[i] = value; + } +} + +/* ---------------------------------------------------------------------- + 2 select routines from Numerical Recipes (slightly modified) + find k smallest values in array of length n + 2nd routine sorts auxiliary array at same time +------------------------------------------------------------------------- */ + +#define SWAP(a,b) tmp = a; a = b; b = tmp; +#define ISWAP(a,b) itmp = a; a = b; b = itmp; + +void ComputeCentroAtom::select(int k, int n, double *arr) +{ + int i,ir,j,l,mid; + double a,tmp; + + arr--; + l = 1; + ir = n; + for (;;) { + if (ir <= l+1) { + if (ir == l+1 && arr[ir] < arr[l]) { + SWAP(arr[l],arr[ir]) + } + return; + } else { + mid=(l+ir) >> 1; + SWAP(arr[mid],arr[l+1]) + if (arr[l] > arr[ir]) { + SWAP(arr[l],arr[ir]) + } + if (arr[l+1] > arr[ir]) { + SWAP(arr[l+1],arr[ir]) + } + if (arr[l] > arr[l+1]) { + SWAP(arr[l],arr[l+1]) + } + i = l+1; + j = ir; + a = arr[l+1]; + for (;;) { + do i++; while (arr[i] < a); + do j--; while (arr[j] > a); + if (j < i) break; + SWAP(arr[i],arr[j]) + } + arr[l+1] = arr[j]; + arr[j] = a; + if (j >= k) ir = j-1; + if (j <= k) l = i; + } + } +} + +/* ---------------------------------------------------------------------- */ + +void ComputeCentroAtom::select2(int k, int n, double *arr, int *iarr) +{ + int i,ir,j,l,mid,ia,itmp; + double a,tmp; + + arr--; + iarr--; + l = 1; + ir = n; + for (;;) { + if (ir <= l+1) { + if (ir == l+1 && arr[ir] < arr[l]) { + SWAP(arr[l],arr[ir]) + ISWAP(iarr[l],iarr[ir]) + } + return; + } else { + mid=(l+ir) >> 1; + SWAP(arr[mid],arr[l+1]) + ISWAP(iarr[mid],iarr[l+1]) + if (arr[l] > arr[ir]) { + SWAP(arr[l],arr[ir]) + ISWAP(iarr[l],iarr[ir]) + } + if (arr[l+1] > arr[ir]) { + SWAP(arr[l+1],arr[ir]) + ISWAP(iarr[l+1],iarr[ir]) + } + if (arr[l] > arr[l+1]) { + SWAP(arr[l],arr[l+1]) + ISWAP(iarr[l],iarr[l+1]) + } + i = l+1; + j = ir; + a = arr[l+1]; + ia = iarr[l+1]; + for (;;) { + do i++; while (arr[i] < a); + do j--; while (arr[j] > a); + if (j < i) break; + SWAP(arr[i],arr[j]) + ISWAP(iarr[i],iarr[j]) + } + arr[l+1] = arr[j]; + arr[j] = a; + iarr[l+1] = iarr[j]; + iarr[j] = ia; + if (j >= k) ir = j-1; + if (j <= k) l = i; + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +int ComputeCentroAtom::memory_usage() +{ + int bytes = nmax * sizeof(double); + return bytes; +} diff --git a/src/compute_centro_atom.h b/src/compute_centro_atom.h new file mode 100644 index 0000000000..6a16d7c059 --- /dev/null +++ b/src/compute_centro_atom.h @@ -0,0 +1,41 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_CENTRO_ATOM_H +#define COMPUTE_CENTRO_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeCentroAtom : public Compute { + public: + ComputeCentroAtom(class LAMMPS *, int, char **); + ~ComputeCentroAtom(); + void init(); + void compute_peratom(); + int memory_usage(); + + private: + int nmax,maxneigh; + double *distsq; + int *nearest; + double *centro; + + void select(int, int, double *); + void select2(int, int, double *, int *); +}; + +} + +#endif diff --git a/src/compute_epair_atom.cpp b/src/compute_epair_atom.cpp new file mode 100644 index 0000000000..31e05f22c8 --- /dev/null +++ b/src/compute_epair_atom.cpp @@ -0,0 +1,203 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "compute_epair_atom.h" +#include "atom.h" +#include "neighbor.h" +#include "modify.h" +#include "comm.h" +#include "update.h" +#include "force.h" +#include "pair.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +/* ---------------------------------------------------------------------- */ + +ComputeEpairAtom::ComputeEpairAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute epair/atom command"); + + peratom_flag = 1; + size_peratom = 0; + comm_reverse = 1; + neigh_half_once = 1; + + nmax = 0; + energy = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeEpairAtom::~ComputeEpairAtom() +{ + memory->sfree(energy); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEpairAtom::init() +{ + if (force->pair == NULL || force->pair->single_enable == 0) + error->all("Pair style does not support computing per-atom energy"); + + if (force->pair_match("eam")) eamstyle = 1; + else eamstyle = 0; + + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"epair/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning("More than one compute epair/atom defined"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEpairAtom::compute_peratom() +{ + int i,j,k,n,itype,jtype,numneigh; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + double factor_coul,factor_lj,e; + int *neighs; + + // grow energy array if necessary + + if (atom->nmax > nmax) { + memory->sfree(energy); + nmax = atom->nmax; + energy = (double *) + memory->smalloc(nmax*sizeof(double),"compute/epair/atom:energy"); + scalar_atom = energy; + } + + // clear energy array + // n includes ghosts only if newton_pair flag is set + + if (force->newton_pair) n = atom->nlocal + atom->nghost; + else n = atom->nlocal; + + for (i = 0; i < n; i++) energy[i] = 0.0; + + // if needed, build a half neighbor list + + if (!neighbor->half_every) neighbor->build_half(); + + // compute pairwise energy for all atoms via pair->single() + // ignore compute group, since using half neighbor list + + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + double **cutsq = force->pair->cutsq; + + double **x = atom->x; + int *type = atom->type; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + Pair::One one; + + for (i = 0; i < nlocal; i++) { + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + neighs = neighbor->firstneigh[i]; + numneigh = neighbor->numneigh[i]; + + for (k = 0; k < numneigh; k++) { + j = neighs[k]; + + if (j < nall) factor_coul = factor_lj = 1.0; + else { + factor_coul = special_coul[j/nall]; + factor_lj = special_lj[j/nall]; + j %= nall; + } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + force->pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,1,one); + e = one.eng_coul + one.eng_vdwl; + energy[i] += e; + energy[j] += e; + } + } + } + + // communicate energy between neigchbor procs + + if (force->newton_pair) comm->reverse_comm_compute(this); + + // remove double counting of per-atom energy + + for (i = 0; i < nlocal; i++) energy[i] *= 0.5; + + // for EAM, include embedding function contribution to energy + + if (eamstyle) { + int *type = atom->type; + double etmp = 0.0; + + for (i = 0; i < nlocal; i++) { + force->pair->single_embed(i,type[i],etmp); + energy[i] += etmp; + } + } +} + +/* ---------------------------------------------------------------------- */ + +int ComputeEpairAtom::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) buf[m++] = energy[i]; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEpairAtom::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + energy[j] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +int ComputeEpairAtom::memory_usage() +{ + int bytes = nmax * sizeof(double); + return bytes; +} diff --git a/src/compute_epair_atom.h b/src/compute_epair_atom.h new file mode 100644 index 0000000000..6ead5058f5 --- /dev/null +++ b/src/compute_epair_atom.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_EPAIR_ATOM_H +#define COMPUTE_EPAIR_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeEpairAtom : public Compute { + public: + ComputeEpairAtom(class LAMMPS *, int, char **); + ~ComputeEpairAtom(); + void init(); + void compute_peratom(); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + int memory_usage(); + + private: + int nmax,eamstyle; + double *energy; +}; + +} + +#endif diff --git a/src/compute_etotal_atom.cpp b/src/compute_etotal_atom.cpp new file mode 100644 index 0000000000..bc460b77bf --- /dev/null +++ b/src/compute_etotal_atom.cpp @@ -0,0 +1,124 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "compute_etotal_atom.h" +#include "atom.h" +#include "modify.h" +#include "force.h" +#include "comm.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeEtotalAtom::ComputeEtotalAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 4) error->all("Illegal compute etotal/atom command"); + + // store epair ID used by energy computation + + int n = strlen(arg[3]) + 1; + id_pre = new char[n]; + strcpy(id_pre,arg[3]); + + peratom_flag = 1; + size_peratom = 0; + + nmax = 0; + etotal = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeEtotalAtom::~ComputeEtotalAtom() +{ + delete [] id_pre; + memory->sfree(etotal); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEtotalAtom::init() +{ + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"etotal/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning("More than one compute etotal/atom defined"); + + // set epair Compute used by this compute + + int icompute = modify->find_compute(id_pre); + if (icompute < 0) + error->all("Could not find compute etotal/atom pre-compute ID"); + compute_epair = modify->compute[icompute]; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeEtotalAtom::compute_peratom() +{ + // grow etotal array if necessary + + if (atom->nlocal > nmax) { + memory->sfree(etotal); + nmax = atom->nmax; + etotal = (double *) + memory->smalloc(nmax*sizeof(double),"compute/etotal/atom:etotal"); + scalar_atom = etotal; + } + + // compute total energy for each atom in group + + double *epair = compute_epair->scalar_atom; + double mvv2e = force->mvv2e; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *mask = atom->mask; + int *type = atom->type; + int nlocal = atom->nlocal; + + double ke; + + if (mass) + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ke = 0.5 * mvv2e * mass[type[i]] * + (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + etotal[i] = ke + epair[i]; + } + } + else + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ke = 0.5 * mvv2e * rmass[i] * + (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + etotal[i] = ke + epair[i]; + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +int ComputeEtotalAtom::memory_usage() +{ + int bytes = nmax * sizeof(double); + return bytes; +} diff --git a/src/compute_etotal_atom.h b/src/compute_etotal_atom.h new file mode 100644 index 0000000000..b5c171e2ac --- /dev/null +++ b/src/compute_etotal_atom.h @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_ETOTAL_ATOM_H +#define COMPUTE_ETOTAL_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeEtotalAtom : public Compute { + public: + ComputeEtotalAtom(class LAMMPS *, int, char **); + ~ComputeEtotalAtom(); + void init(); + void compute_peratom(); + int memory_usage(); + + private: + int nmax; + double *etotal; + Compute *compute_epair; +}; + +} + +#endif diff --git a/src/compute_ke_atom.cpp b/src/compute_ke_atom.cpp new file mode 100644 index 0000000000..22c8573233 --- /dev/null +++ b/src/compute_ke_atom.cpp @@ -0,0 +1,104 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "compute_ke_atom.h" +#include "atom.h" +#include "modify.h" +#include "comm.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeKEAtom::ComputeKEAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute ke/atom command"); + + peratom_flag = 1; + size_peratom = 0; + + nmax = 0; + ke = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeKEAtom::~ComputeKEAtom() +{ + memory->sfree(ke); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeKEAtom::init() +{ + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"ke/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning("More than one compute ke/atom defined"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeKEAtom::compute_peratom() +{ + // grow ke array if necessary + + if (atom->nlocal > nmax) { + memory->sfree(ke); + nmax = atom->nmax; + ke = (double *) memory->smalloc(nmax*sizeof(double),"compute/ke/atom:ke"); + scalar_atom = ke; + } + + // compute kinetic energy for each atom in group + + double mvv2e = force->mvv2e; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *mask = atom->mask; + int *type = atom->type; + int nlocal = atom->nlocal; + + if (mass) + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ke[i] = 0.5 * mvv2e * mass[type[i]] * + (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + } + } + else + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + ke[i] = 0.5 * mvv2e * rmass[i] * + (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]); + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +int ComputeKEAtom::memory_usage() +{ + int bytes = nmax * sizeof(double); + return bytes; +} diff --git a/src/compute_ke_atom.h b/src/compute_ke_atom.h new file mode 100644 index 0000000000..948181f546 --- /dev/null +++ b/src/compute_ke_atom.h @@ -0,0 +1,36 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_KE_ATOM_H +#define COMPUTE_KE_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeKEAtom : public Compute { + public: + ComputeKEAtom(class LAMMPS *, int, char **); + ~ComputeKEAtom(); + void init(); + void compute_peratom(); + int memory_usage(); + + private: + int nmax; + double *ke; +}; + +} + +#endif diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp new file mode 100644 index 0000000000..16ee3c7ca9 --- /dev/null +++ b/src/compute_pressure.cpp @@ -0,0 +1,210 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "string.h" +#include "stdlib.h" +#include "compute_pressure.h" +#include "atom.h" +#include "domain.h" +#include "modify.h" +#include "fix.h" +#include "force.h" +#include "pair.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 4) error->all("Illegal compute pressure command"); + + if (igroup) error->all("Compute pressure must use group all"); + + // store temperature ID used by pressure computation + // insure it is valid for temperature computation + + int n = strlen(arg[3]) + 1; + id_pre = new char[n]; + strcpy(id_pre,arg[3]); + + int icompute = modify->find_compute(id_pre); + + if (icompute < 0) error->all("Could not find compute pressure temp ID"); + if (modify->compute[icompute]->tempflag == 0) + error->all("Compute pressure temp ID does not compute temperature"); + + scalar_flag = vector_flag = 1; + size_vector = 6; + extensive = 0; + pressflag = 1; + + vector = new double[6]; +} + +/* ---------------------------------------------------------------------- */ + +ComputePressure::~ComputePressure() +{ + delete [] id_pre; + delete [] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePressure::init() +{ + boltz = force->boltz; + nktv2p = force->nktv2p; + + // set temperature used by pressure + + int icompute = modify->find_compute(id_pre); + if (icompute < 0) error->all("Could not find compute pressure temp ID"); + temperature = modify->compute[icompute]; + + // set flags/ptrs for all contributions to virial + + pairflag = bondflag = angleflag = dihedralflag = improperflag = 0; + kspaceflag = 0; + shakeflag = bodyflag = rigidflag = poemsflag = 0; + + if (force->pair) { + pairflag = 1; + pair_virial = force->pair->virial; + } + if (atom->molecular) { + if (force->bond) { + bondflag = 1; + bond_virial = force->bond->virial; + } + if (force->angle) { + angleflag = 1; + angle_virial = force->angle->virial; + } + if (force->dihedral) { + dihedralflag = 1; + dihedral_virial = force->dihedral->virial; + } + if (force->improper) { + improperflag = 1; + improper_virial = force->improper->virial; + } + } + + if (force->kspace) { + kspaceflag = 1; + kspace_virial = force->kspace->virial; + } + + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(modify->fix[i]->style,"shake") == 0) { + shakeflag = 1; + shake_virial = modify->fix[i]->virial; + } + if (strcmp(modify->fix[i]->style,"rigid") == 0 || + strcmp(modify->fix[i]->style,"poems") == 0) { + bodyflag = 1; + if (strcmp(modify->fix[i]->style,"rigid") == 0) { + rigidflag = 1; + rigid_virial = modify->fix[i]->virial; + } else { + poemsflag = 1; + poems_virial = modify->fix[i]->virial; + } + } + } +} + +/* ---------------------------------------------------------------------- + compute total pressure, averaged over Pxx, Pyy, Pzz + assume temperature has already been computed +------------------------------------------------------------------------- */ + +double ComputePressure::compute_scalar() +{ + inv_volume = 1.0 / (domain->xprd * domain->yprd * domain->zprd); + virial_compute(3); + scalar = (temperature->dof * boltz * temperature->scalar + + virial[0] + virial[1] + virial[2]) / 3.0 * inv_volume * nktv2p; + return scalar; +} + +/* ---------------------------------------------------------------------- + compute pressure tensor + assume KE tensor has already been computed +------------------------------------------------------------------------- */ + +void ComputePressure::compute_vector() +{ + inv_volume = 1.0 / (domain->xprd * domain->yprd * domain->zprd); + virial_compute(6); + double *ke_tensor = temperature->vector; + for (int i = 0; i < 6; i++) + vector[i] = (ke_tensor[i] + virial[i]) * inv_volume * nktv2p; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePressure::virial_compute(int n) +{ + int i; + double v[6]; + + for (i = 0; i < n; i++) v[i] = 0.0; + + // sum contributions to virial from various forces and fixes + + if (pairflag) + for (i = 0; i < n; i++) v[i] += pair_virial[i]; + + if (atom->molecular) { + if (bondflag) + for (i = 0; i < n; i++) v[i] += bond_virial[i]; + if (angleflag) + for (i = 0; i < n; i++) v[i] += angle_virial[i]; + if (dihedralflag) + for (i = 0; i < n; i++) v[i] += dihedral_virial[i]; + if (improperflag) + for (i = 0; i < n; i++) v[i] += improper_virial[i]; + if (shakeflag) + for (i = 0; i < n; i++) v[i] += shake_virial[i]; + } + + if (bodyflag) { + if (rigidflag) for (i = 0; i < n; i++) v[i] += rigid_virial[i]; + if (poemsflag) for (i = 0; i < n; i++) v[i] += poems_virial[i]; + } + + // sum virial across procs + + MPI_Allreduce(v,virial,n,MPI_DOUBLE,MPI_SUM,world); + + // KSpace virial contribution is already summed across procs + + if (force->kspace) + for (i = 0; i < n; i++) virial[i] += kspace_virial[i]; + + // LJ long-range tail correction + + if (force->pair && force->pair->tail_flag) + for (i = 0; i < n; i++) virial[i] += force->pair->ptail * inv_volume; +} diff --git a/src/compute_pressure.h b/src/compute_pressure.h new file mode 100644 index 0000000000..03c018140c --- /dev/null +++ b/src/compute_pressure.h @@ -0,0 +1,44 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_PRESSURE_H +#define COMPUTE_PRESSURE_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePressure : public Compute { + public: + ComputePressure(class LAMMPS *, int, char **); + ~ComputePressure(); + void init(); + double compute_scalar(); + void compute_vector(); + + private: + double boltz,nktv2p,inv_volume; + double *pair_virial,*bond_virial,*angle_virial; + double *dihedral_virial,*improper_virial,*kspace_virial; + double *shake_virial,*rigid_virial,*poems_virial; + int pairflag,bondflag,angleflag,dihedralflag,improperflag,kspaceflag; + int shakeflag,bodyflag,rigidflag,poemsflag; + Compute *temperature; + double virial[6]; + + void virial_compute(int); +}; + +} + +#endif diff --git a/src/compute_rotate_dipole.cpp b/src/compute_rotate_dipole.cpp new file mode 100644 index 0000000000..e20eee7e80 --- /dev/null +++ b/src/compute_rotate_dipole.cpp @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "compute_rotate_dipole.h" +#include "atom.h" +#include "force.h" +#include "pair.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define INERTIA3D 0.4 // moments of inertia for sphere and disk +#define INERTIA2D 0.5 + +/* ---------------------------------------------------------------------- */ + +ComputeRotateDipole::ComputeRotateDipole(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute rotate/dipole command"); + + if (atom->check_style("dipole") == 0) + error->all("Must use atom style dipole with compute rotate/dipole"); + + scalar_flag = 1; + extensive = 1; + + inertia = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeRotateDipole::~ComputeRotateDipole() +{ + delete [] inertia; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeRotateDipole::init() +{ + delete [] inertia; + inertia = new double[atom->ntypes+1]; + double *mass = atom->mass; + + // insure use of dipole pair_style + // set sigma to Pair's sigma + + Pair *pair = force->pair_match("dipole"); + if (pair == NULL) + error->all("Pair style is incompatible with compute rotate/dipole"); + double **sigma; + pair->extract_dipole(&sigma); + + if (force->dimension == 3) + for (int i = 1; i <= atom->ntypes; i++) + inertia[i] = INERTIA3D * mass[i] * 0.25*sigma[i][i]*sigma[i][i]; + else + for (int i = 1; i <= atom->ntypes; i++) + inertia[i] = INERTIA2D * mass[i] * 0.25*sigma[i][i]*sigma[i][i]; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeRotateDipole::compute_scalar() +{ + double *dipole = atom->dipole; + double **omega = atom->omega; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double erot = 0.0; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit && dipole[type[i]] > 0.0) + erot += inertia[type[i]] * + (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] + + omega[i][2]*omega[i][2]); + + MPI_Allreduce(&erot,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + scalar *= 0.5; + return scalar; +} diff --git a/src/compute_rotate_dipole.h b/src/compute_rotate_dipole.h new file mode 100644 index 0000000000..62e7d09a33 --- /dev/null +++ b/src/compute_rotate_dipole.h @@ -0,0 +1,34 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_ROTATE_DIPOLE_H +#define COMPUTE_ROTATE_DIPOLE_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeRotateDipole : public Compute { + public: + ComputeRotateDipole(class LAMMPS *, int, char **); + ~ComputeRotateDipole(); + void init(); + double compute_scalar(); + + private: + double *inertia; +}; + +} + +#endif diff --git a/src/compute_rotate_gran.cpp b/src/compute_rotate_gran.cpp new file mode 100644 index 0000000000..10a55bf525 --- /dev/null +++ b/src/compute_rotate_gran.cpp @@ -0,0 +1,68 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "compute_rotate_gran.h" +#include "atom.h" +#include "force.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define INERTIA3D 0.4 // moments of inertia for sphere and disk +#define INERTIA2D 0.5 + +/* ---------------------------------------------------------------------- */ + +ComputeRotateGran::ComputeRotateGran(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute rotate/gran command"); + + if (atom->check_style("granular") == 0) + error->all("Must use atom style granular with compute rotate/gran"); + + scalar_flag = 1; + extensive = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeRotateGran::init() +{ + if (force->dimension == 3) pfactor = 0.5 * force->mvv2e * INERTIA3D; + else pfactor = 0.5 * force->mvv2e * INERTIA2D; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeRotateGran::compute_scalar() +{ + double **phiv = atom->phiv; + double *radius = atom->radius; + double *rmass = atom->rmass; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double erot = 0.0; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + erot += (phiv[i][0]*phiv[i][0] + phiv[i][1]*phiv[i][1] + + phiv[i][2]*phiv[i][2]) * radius[i]*radius[i]*rmass[i]; + + MPI_Allreduce(&erot,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + scalar *= pfactor; + return scalar; +} diff --git a/src/compute_rotate_gran.h b/src/compute_rotate_gran.h new file mode 100644 index 0000000000..9bf17af119 --- /dev/null +++ b/src/compute_rotate_gran.h @@ -0,0 +1,33 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_ROTATE_GRAN_H +#define COMPUTE_ROTATE_GRAN_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeRotateGran : public Compute { + public: + ComputeRotateGran(class LAMMPS *, int, char **); + void init(); + double compute_scalar(); + + private: + double pfactor; +}; + +} + +#endif diff --git a/src/compute_stress_atom.cpp b/src/compute_stress_atom.cpp new file mode 100644 index 0000000000..32fd21495a --- /dev/null +++ b/src/compute_stress_atom.cpp @@ -0,0 +1,255 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "compute_stress_atom.h" +#include "atom.h" +#include "neighbor.h" +#include "modify.h" +#include "comm.h" +#include "update.h" +#include "force.h" +#include "pair.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +/* ---------------------------------------------------------------------- */ + +ComputeStressAtom::ComputeStressAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute stress/atom command"); + + peratom_flag = 1; + size_peratom = 6; + comm_reverse = 6; + neigh_half_once = 1; + + nmax = 0; + stress = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeStressAtom::~ComputeStressAtom() +{ + memory->destroy_2d_double_array(stress); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressAtom::init() +{ + if (force->pair == NULL || force->pair->single_enable == 0) + error->all("Pair style does not support computing per-atom stress"); + + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style,"stress/atom") == 0) count++; + if (count > 1 && comm->me == 0) + error->warning("More than one compute stress/atom defined"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressAtom::compute_peratom() +{ + int i,j,k,n,itype,jtype,numneigh; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + double factor_coul,factor_lj,fforce,rmass; + int *neighs; + Pair::One one; + + // grow stress array if necessary + + if (atom->nmax > nmax) { + memory->destroy_2d_double_array(stress); + nmax = atom->nmax; + stress = + memory->create_2d_double_array(nmax,6,"compute/stress/atom:stress"); + vector_atom = stress; + } + + // clear stress array + // n includes ghosts only if newton_pair flag is set + + if (force->newton_pair) n = atom->nlocal + atom->nghost; + else n = atom->nlocal; + + for (i = 0; i < n; i++) { + stress[i][0] = 0.0; + stress[i][1] = 0.0; + stress[i][2] = 0.0; + stress[i][3] = 0.0; + stress[i][4] = 0.0; + stress[i][5] = 0.0; + } + + // if needed, build a half neighbor list + + if (!neighbor->half_every) neighbor->build_half(); + + // compute pairwise stress for all atoms via pair->single() + // use half neighbor list + + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + double **cutsq = force->pair->cutsq; + + double **x = atom->x; + int *type = atom->type; + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + for (i = 0; i < nlocal; i++) { + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + neighs = neighbor->firstneigh[i]; + numneigh = neighbor->numneigh[i]; + + for (k = 0; k < numneigh; k++) { + j = neighs[k]; + + if (j < nall) factor_coul = factor_lj = 1.0; + else { + factor_coul = special_coul[j/nall]; + factor_lj = special_lj[j/nall]; + j %= nall; + } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + force->pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,0,one); + fforce = one.fforce; + + stress[i][0] -= delx*delx*fforce; + stress[i][1] -= dely*dely*fforce; + stress[i][2] -= delz*delz*fforce; + stress[i][3] -= delx*dely*fforce; + stress[i][4] -= delx*delz*fforce; + stress[i][5] -= dely*delz*fforce; + if (force->newton_pair || j < nlocal) { + stress[j][0] -= delx*delx*fforce; + stress[j][1] -= dely*dely*fforce; + stress[j][2] -= delz*delz*fforce; + stress[j][3] -= delx*dely*fforce; + stress[j][4] -= delx*delz*fforce; + stress[j][5] -= dely*delz*fforce; + } + } + } + } + + // communicate stress between neighbor procs + + if (force->newton_pair) comm->reverse_comm_compute(this); + + // remove double counting of per-atom stress + + for (i = 0; i < nlocal; i++) { + stress[i][0] *= 0.5; + stress[i][1] *= 0.5; + stress[i][2] *= 0.5; + stress[i][3] *= 0.5; + stress[i][4] *= 0.5; + stress[i][5] *= 0.5; + } + + // include kinetic energy term for each atom + // mvv2e converts mv^2 to energy + + double **v = atom->v; + double *mass = atom->mass; + double mvv2e = force->mvv2e; + + for (i = 0; i < nlocal; i++) { + rmass = mvv2e * mass[type[i]]; + stress[i][0] -= rmass*v[i][0]*v[i][0]; + stress[i][1] -= rmass*v[i][1]*v[i][1]; + stress[i][2] -= rmass*v[i][2]*v[i][2]; + stress[i][3] -= rmass*v[i][0]*v[i][1]; + stress[i][4] -= rmass*v[i][0]*v[i][2]; + stress[i][5] -= rmass*v[i][1]*v[i][2]; + } + + // convert to pressure units (actually stress/volume = pressure) + + double nktv2p = force->nktv2p; + for (i = 0; i < nlocal; i++) { + stress[i][0] *= nktv2p; + stress[i][1] *= nktv2p; + stress[i][2] *= nktv2p; + stress[i][3] *= nktv2p; + stress[i][4] *= nktv2p; + stress[i][5] *= nktv2p; + } +} + +/* ---------------------------------------------------------------------- */ + +int ComputeStressAtom::pack_reverse_comm(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = stress[i][0]; + buf[m++] = stress[i][1]; + buf[m++] = stress[i][2]; + buf[m++] = stress[i][3]; + buf[m++] = stress[i][4]; + buf[m++] = stress[i][5]; + } + return 6; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressAtom::unpack_reverse_comm(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + stress[j][0] += buf[m++]; + stress[j][1] += buf[m++]; + stress[j][2] += buf[m++]; + stress[j][3] += buf[m++]; + stress[j][4] += buf[m++]; + stress[j][5] += buf[m++]; + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +int ComputeStressAtom::memory_usage() +{ + int bytes = nmax*6 * sizeof(double); + return bytes; +} diff --git a/src/compute_stress_atom.h b/src/compute_stress_atom.h new file mode 100644 index 0000000000..f795a7899a --- /dev/null +++ b/src/compute_stress_atom.h @@ -0,0 +1,39 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_STRESS_ATOM_H +#define COMPUTE_STRESS_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeStressAtom : public Compute { + + public: + ComputeStressAtom(class LAMMPS *, int, char **); + ~ComputeStressAtom(); + void init(); + void compute_peratom(); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + int memory_usage(); + + private: + int nmax; + double **stress; +}; + +} + +#endif diff --git a/src/compute_temp.cpp b/src/compute_temp.cpp new file mode 100644 index 0000000000..b4e2b2e6be --- /dev/null +++ b/src/compute_temp.cpp @@ -0,0 +1,128 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "compute_temp.h" +#include "atom.h" +#include "force.h" +#include "modify.h" +#include "fix.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeTemp::ComputeTemp(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 3) error->all("Illegal compute temp command"); + + scalar_flag = vector_flag = 1; + size_vector = 6; + extensive = 0; + tempflag = 1; + + vector = new double[6]; +} + +/* ---------------------------------------------------------------------- */ + +ComputeTemp::~ComputeTemp() +{ + delete [] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTemp::init() +{ + fix_dof = 0; + for (int i = 0; i < modify->nfix; i++) + fix_dof += modify->fix[i]->dof(igroup); + recount(); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTemp::recount() +{ + double natoms = group->count(igroup); + dof = force->dimension * natoms; + dof -= extra_dof + fix_dof; + if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz); + else tfactor = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeTemp::compute_scalar() +{ + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double t = 0.0; + + if (mass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * + mass[type[i]]; + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i]; + } + + MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + if (dynamic) recount(); + scalar *= tfactor; + return scalar; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTemp::compute_vector() +{ + int i; + + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone,t[6]; + for (i = 0; i < 6; i++) t[i] = 0.0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (mass) massone = mass[type[i]]; + else massone = rmass[i]; + t[0] += massone * v[i][0]*v[i][0]; + t[1] += massone * v[i][1]*v[i][1]; + t[2] += massone * v[i][2]*v[i][2]; + t[3] += massone * v[i][0]*v[i][1]; + t[4] += massone * v[i][0]*v[i][2]; + t[5] += massone * v[i][1]*v[i][2]; + } + + MPI_Allreduce(t,vector,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; +} diff --git a/src/compute_temp.h b/src/compute_temp.h new file mode 100644 index 0000000000..89db81c534 --- /dev/null +++ b/src/compute_temp.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_TEMP_H +#define COMPUTE_TEMP_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeTemp : public Compute { + public: + ComputeTemp(class LAMMPS *, int, char **); + ~ComputeTemp(); + void init(); + double compute_scalar(); + void compute_vector(); + + private: + int fix_dof; + double tfactor; + + void recount(); +}; + +} + +#endif diff --git a/src/compute_temp_partial.cpp b/src/compute_temp_partial.cpp new file mode 100644 index 0000000000..36a571d5c3 --- /dev/null +++ b/src/compute_temp_partial.cpp @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "stdlib.h" +#include "compute_temp_partial.h" +#include "atom.h" +#include "force.h" +#include "modify.h" +#include "fix.h" +#include "group.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeTempPartial::ComputeTempPartial(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 6) error->all("Illegal compute temp/partial command"); + + xflag = atoi(arg[3]); + yflag = atoi(arg[4]); + zflag = atoi(arg[5]); + + scalar_flag = vector_flag = 1; + size_vector = 6; + extensive = 0; + tempflag = 1; + + vector = new double[6]; +} + +/* ---------------------------------------------------------------------- */ + +ComputeTempPartial::~ComputeTempPartial() +{ + delete [] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempPartial::init() +{ + fix_dof = 0; + for (int i = 0; i < modify->nfix; i++) + fix_dof += modify->fix[i]->dof(igroup); + recount(); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempPartial::recount() +{ + double natoms = group->count(igroup); + dof = (xflag+yflag+zflag) * natoms; + dof -= extra_dof + fix_dof; + if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz); + else tfactor = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeTempPartial::compute_scalar() +{ + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double t = 0.0; + + if (mass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + t += (xflag*v[i][0]*v[i][0] + yflag*v[i][1]*v[i][1] + + zflag*v[i][2]*v[i][2]) * mass[type[i]]; + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + t += (xflag*v[i][0]*v[i][0] + yflag*v[i][1]*v[i][1] + + zflag*v[i][2]*v[i][2]) * rmass[i]; + } + + MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + if (dynamic) recount(); + scalar *= tfactor; + return scalar; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempPartial::compute_vector() +{ + int i; + + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone,t[6]; + for (i = 0; i < 6; i++) t[i] = 0.0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (mass) massone = mass[type[i]]; + else massone = rmass[i]; + t[0] += massone * xflag*v[i][0]*v[i][0]; + t[1] += massone * yflag*v[i][1]*v[i][1]; + t[2] += massone * zflag*v[i][2]*v[i][2]; + t[3] += massone * xflag*yflag*v[i][0]*v[i][1]; + t[4] += massone * xflag*zflag*v[i][0]*v[i][2]; + t[5] += massone * yflag*zflag*v[i][1]*v[i][2]; + } + + MPI_Allreduce(&t,&vector,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; +} diff --git a/src/compute_temp_partial.h b/src/compute_temp_partial.h new file mode 100644 index 0000000000..d12a96d078 --- /dev/null +++ b/src/compute_temp_partial.h @@ -0,0 +1,39 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_TEMP_PARTIAL_H +#define COMPUTE_TEMP_PARTIAL_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeTempPartial : public Compute { + public: + ComputeTempPartial(class LAMMPS *, int, char **); + ~ComputeTempPartial(); + void init(); + double compute_scalar(); + void compute_vector(); + + private: + int xflag,yflag,zflag; + int fix_dof; + double tfactor; + + void recount(); +}; + +} + +#endif diff --git a/src/compute_temp_ramp.cpp b/src/compute_temp_ramp.cpp new file mode 100644 index 0000000000..d63cbc2625 --- /dev/null +++ b/src/compute_temp_ramp.cpp @@ -0,0 +1,213 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "stdlib.h" +#include "string.h" +#include "compute_temp_ramp.h" +#include "atom.h" +#include "force.h" +#include "group.h" +#include "modify.h" +#include "fix.h" +#include "domain.h" +#include "lattice.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MIN(A,B) ((A) < (B)) ? (A) : (B) +#define MAX(A,B) ((A) > (B)) ? (A) : (B) + +/* ---------------------------------------------------------------------- */ + +ComputeTempRamp::ComputeTempRamp(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg < 9) error->all("Illegal compute temp command"); + + if (strcmp(arg[3],"vx") == 0) v_dim = 0; + else if (strcmp(arg[3],"vy") == 0) v_dim = 1; + else if (strcmp(arg[3],"vz") == 0) v_dim = 2; + else error->all("Illegal compute temp/ramp command"); + + if (v_dim == 0) { + v_lo = xscale*atof(arg[4]); + v_hi = xscale*atof(arg[5]); + } else if (v_dim == 1) { + v_lo = yscale*atof(arg[4]); + v_hi = yscale*atof(arg[5]); + } else if (v_dim == 0) { + v_lo = zscale*atof(arg[4]); + v_hi = zscale*atof(arg[5]); + } + + if (strcmp(arg[6],"x") == 0) coord_dim = 0; + else if (strcmp(arg[6],"y") == 0) coord_dim = 1; + else if (strcmp(arg[6],"z") == 0) coord_dim = 2; + else error->all("Illegal compute temp/ramp command"); + + if (coord_dim == 0) { + coord_lo = xscale*atof(arg[7]); + coord_hi = xscale*atof(arg[8]); + } else if (coord_dim == 1) { + coord_lo = yscale*atof(arg[7]); + coord_hi = yscale*atof(arg[8]); + } else if (coord_dim == 2) { + coord_lo = zscale*atof(arg[7]); + coord_hi = zscale*atof(arg[8]); + } + + // parse optional args + + scaleflag = 1; + + int iarg = 9; + while (iarg < narg) { + if (strcmp(arg[iarg],"units") == 0) { + if (iarg+2 > narg) error->all("Illegal compute temp/ramp command"); + if (strcmp(arg[iarg+1],"box") == 0) scaleflag = 0; + else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1; + else error->all("Illegal compute temp/ramp command"); + iarg += 2; + } else error->all("Illegal compute temp/ramp command"); + } + + // setup scaling + + if (scaleflag && domain->lattice == NULL) + error->all("Use of compute temp/ramp with undefined lattice"); + + if (scaleflag) { + xscale = domain->lattice->xlattice; + yscale = domain->lattice->ylattice; + zscale = domain->lattice->zlattice; + } + else xscale = yscale = zscale = 1.0; + + scalar_flag = vector_flag = 1; + size_vector = 6; + extensive = 0; + tempflag = 1; + + vector = new double[6]; +} + +/* ---------------------------------------------------------------------- */ + +ComputeTempRamp::~ComputeTempRamp() +{ + delete [] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempRamp::init() +{ + fix_dof = 0; + for (int i = 0; i < modify->nfix; i++) + fix_dof += modify->fix[i]->dof(igroup); + recount(); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempRamp::recount() +{ + double natoms = group->count(igroup); + dof = force->dimension * natoms; + dof -= extra_dof + fix_dof; + if (dof > 0) tfactor = force->mvv2e / (dof * force->boltz); + else tfactor = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeTempRamp::compute_scalar() +{ + double fraction,vramp,vtmp[3]; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double t = 0.0; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + fraction = (x[i][coord_dim] - coord_lo) / (coord_hi - coord_lo); + fraction = MAX(fraction,0.0); + fraction = MIN(fraction,1.0); + vramp = v_lo + fraction*(v_hi - v_lo); + vtmp[0] = v[i][0]; + vtmp[1] = v[i][1]; + vtmp[2] = v[i][2]; + vtmp[v_dim] -= vramp; + if (mass) + t += (vtmp[0]*vtmp[0] + vtmp[1]*vtmp[1] + vtmp[2]*vtmp[2]) * + mass[type[i]]; + else + t += (vtmp[0]*vtmp[0] + vtmp[1]*vtmp[1] + vtmp[2]*vtmp[2]) * rmass[i]; + } + + MPI_Allreduce(&t,&scalar,1,MPI_DOUBLE,MPI_SUM,world); + if (dynamic) recount(); + scalar *= tfactor; + return scalar; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempRamp::compute_vector() +{ + int i; + double fraction,vramp,vtmp[3]; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone,t[6]; + for (i = 0; i < 6; i++) t[i] = 0.0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + fraction = (x[i][coord_dim] - coord_lo) / (coord_hi - coord_lo); + fraction = MAX(fraction,0.0); + fraction = MIN(fraction,1.0); + vramp = v_lo + fraction*(v_hi - v_lo); + vtmp[0] = v[i][0]; + vtmp[1] = v[i][1]; + vtmp[2] = v[i][2]; + vtmp[v_dim] -= vramp; + + if (mass) massone = mass[type[i]]; + else massone = rmass[i]; + t[0] += massone * vtmp[0]*vtmp[0]; + t[1] += massone * vtmp[1]*vtmp[1]; + t[2] += massone * vtmp[2]*vtmp[2]; + t[3] += massone * vtmp[0]*vtmp[1]; + t[4] += massone * vtmp[0]*vtmp[2]; + t[5] += massone * vtmp[1]*vtmp[2]; + } + + MPI_Allreduce(&t,&vector,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; +} diff --git a/src/compute_temp_ramp.h b/src/compute_temp_ramp.h new file mode 100644 index 0000000000..ea3d604017 --- /dev/null +++ b/src/compute_temp_ramp.h @@ -0,0 +1,42 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_TEMP_RAMP_H +#define COMPUTE_TEMP_RAMP_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeTempRamp : public Compute { + public: + ComputeTempRamp(class LAMMPS *, int, char **); + ~ComputeTempRamp(); + void init(); + double compute_scalar(); + void compute_vector(); + + private: + int coord_dim; + double coord_lo,coord_hi; + int v_dim; + double v_lo,v_hi; + int scaleflag,fix_dof; + double tfactor,xscale,yscale,zscale; + + void recount(); +}; + +} + +#endif diff --git a/src/compute_temp_region.cpp b/src/compute_temp_region.cpp new file mode 100644 index 0000000000..ca79c8df35 --- /dev/null +++ b/src/compute_temp_region.cpp @@ -0,0 +1,133 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "mpi.h" +#include "string.h" +#include "compute_temp_region.h" +#include "atom.h" +#include "force.h" +#include "domain.h" +#include "region.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputeTempRegion::ComputeTempRegion(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg != 4) error->all("Illegal compute temp/region command"); + + for (iregion = 0; iregion < domain->nregion; iregion++) + if (strcmp(arg[3],domain->regions[iregion]->id) == 0) break; + if (iregion == domain->nregion) + error->all("Temperature region ID does not exist"); + + scalar_flag = vector_flag = 1; + size_vector = 6; + extensive = 0; + tempflag = 1; + + vector = new double[6]; +} + +/* ---------------------------------------------------------------------- */ + +ComputeTempRegion::~ComputeTempRegion() +{ + delete [] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempRegion::init() +{ + dof = 0; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeTempRegion::compute_scalar() +{ + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + int count = 0; + double t = 0.0; + + if (mass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit && + domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) { + count++; + t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * + mass[type[i]]; + } + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit && + domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) { + count++; + t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) * rmass[i]; + } + } + + double tarray[2],tarray_all[2]; + tarray[0] = count; + tarray[1] = t; + MPI_Allreduce(tarray,tarray_all,2,MPI_DOUBLE,MPI_SUM,world); + dof = force->dimension * tarray_all[0] - extra_dof; + if (dof > 0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz); + else scalar = 0.0; + return scalar; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeTempRegion::compute_vector() +{ + int i; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone,t[6]; + for (i = 0; i < 6; i++) t[i] = 0.0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit && + domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2])) { + if (mass) massone = mass[type[i]]; + else massone = rmass[i]; + t[0] += massone * v[i][0]*v[i][0]; + t[1] += massone * v[i][1]*v[i][1]; + t[2] += massone * v[i][2]*v[i][2]; + t[3] += massone * v[i][0]*v[i][1]; + t[4] += massone * v[i][0]*v[i][2]; + t[5] += massone * v[i][1]*v[i][2]; + } + + MPI_Allreduce(&t,&vector,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; +} diff --git a/src/compute_temp_region.h b/src/compute_temp_region.h new file mode 100644 index 0000000000..32cf5ac1d7 --- /dev/null +++ b/src/compute_temp_region.h @@ -0,0 +1,35 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef COMPUTE_TEMP_REGION_H +#define COMPUTE_TEMP_REGION_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeTempRegion : public Compute { + public: + ComputeTempRegion(class LAMMPS *, int, char **); + ~ComputeTempRegion(); + void init(); + double compute_scalar(); + void compute_vector(); + + private: + int iregion; +}; + +} + +#endif diff --git a/src/fix_shear_history.cpp b/src/fix_shear_history.cpp new file mode 100644 index 0000000000..cde7edcdad --- /dev/null +++ b/src/fix_shear_history.cpp @@ -0,0 +1,284 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "string.h" +#include "stdio.h" +#include "fix_shear_history.h" +#include "atom.h" +#include "neighbor.h" +#include "force.h" +#include "update.h" +#include "modify.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MAXTOUCH 15 + +/* ---------------------------------------------------------------------- */ + +FixShearHistory::FixShearHistory(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + restart_peratom = 1; + + // perform initial allocation of atom-based arrays + // register with atom class + + npartner = NULL; + partner = NULL; + shearpartner = NULL; + grow_arrays(atom->nmax); + atom->add_callback(0); + atom->add_callback(1); + + // initialize npartner to 0 so neighbor list creation is OK the 1st time + + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) npartner[i] = 0; +} + +/* ---------------------------------------------------------------------- */ + +FixShearHistory::~FixShearHistory() +{ + // unregister this fix so atom class doesn't invoke it any more + + atom->delete_callback(id,0); + atom->delete_callback(id,1); + + // delete locally stored arrays + + memory->sfree(npartner); + memory->destroy_2d_int_array(partner); + memory->destroy_3d_double_array(shearpartner); +} + +/* ---------------------------------------------------------------------- */ + +int FixShearHistory::setmask() +{ + int mask = 0; + mask |= PRE_EXCHANGE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixShearHistory::init() +{ + if (atom->tag_enable == 0) + error->all("Pair style granular with history requires atoms have IDs"); +} + +/* ---------------------------------------------------------------------- + copy shear partner info from neighbor lists to atom arrays + so can be exchanged with atoms +------------------------------------------------------------------------- */ + +void FixShearHistory::pre_exchange() +{ + int i,j,k,m; + + // zero npartners for all current atoms + + int nlocal = atom->nlocal; + for (i = 0; i < nlocal; i++) npartner[i] = 0; + + // copy shear info from neighbor list atoms to atom arrays + // nlocal = nlocal_neighbor = nlocal when neighbor list last built, + // which might be pre-insert on this step + + int numneigh; + int *neighs,*touch; + double *firstshear,*shear; + int *tag = atom->tag; + nlocal = neighbor->nlocal_neighbor; + + for (i = 0; i < nlocal; i++) { + neighs = neighbor->firstneigh[i]; + touch = neighbor->firsttouch[i]; + firstshear = neighbor->firstshear[i]; + numneigh = neighbor->numneigh[i]; + for (k = 0; k < numneigh; k++) { + if (touch[k]) { + shear = &firstshear[3*k]; + j = neighs[k]; + if (npartner[i] < MAXTOUCH) { + m = npartner[i]; + partner[i][m] = tag[j]; + shearpartner[i][m][0] = shear[0]; + shearpartner[i][m][1] = shear[1]; + shearpartner[i][m][2] = shear[2]; + } + npartner[i]++; + if (j < nlocal) { + if (npartner[j] < MAXTOUCH) { + m = npartner[j]; + partner[j][m] = tag[i]; + shearpartner[j][m][0] = -shear[0]; + shearpartner[j][m][1] = -shear[1]; + shearpartner[j][m][2] = -shear[2]; + } + npartner[j]++; + } + } + } + } + + // test for too many touching neighbors + + int flag = 0; + for (i = 0; i < nlocal; i++) + if (npartner[i] >= MAXTOUCH) flag = 1; + int flag_all; + MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); + if (flag_all) error->all("Too many touching neighbors - boost MAXTOUCH"); +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +int FixShearHistory::memory_usage() +{ + int nmax = atom->nmax; + int bytes = nmax * sizeof(int); + bytes += nmax*MAXTOUCH * sizeof(int); + bytes += nmax*MAXTOUCH*3 * sizeof(double); + return bytes; +} + +/* ---------------------------------------------------------------------- + allocate local atom-based arrays +------------------------------------------------------------------------- */ + +void FixShearHistory::grow_arrays(int nmax) +{ + npartner = (int *) memory->srealloc(npartner,nmax*sizeof(int), + "shear_history:npartner"); + partner = memory->grow_2d_int_array(partner,nmax,MAXTOUCH, + "shear_history:partner"); + shearpartner = + memory->grow_3d_double_array(shearpartner,nmax,MAXTOUCH,3, + "shear_history:shearpartner"); +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based arrays +------------------------------------------------------------------------- */ + +void FixShearHistory::copy_arrays(int i, int j) +{ + npartner[j] = npartner[i]; + for (int m = 0; m < npartner[j]; m++) { + partner[j][m] = partner[i][m]; + shearpartner[j][m][0] = shearpartner[i][m][0]; + shearpartner[j][m][1] = shearpartner[i][m][1]; + shearpartner[j][m][2] = shearpartner[i][m][2]; + } +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based arrays for exchange with another proc +------------------------------------------------------------------------- */ + +int FixShearHistory::pack_exchange(int i, double *buf) +{ + int m = 0; + buf[m++] = npartner[i]; + for (int n = 0; n < npartner[i]; n++) { + buf[m++] = partner[i][n]; + buf[m++] = shearpartner[i][n][0]; + buf[m++] = shearpartner[i][n][1]; + buf[m++] = shearpartner[i][n][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based arrays from exchange with another proc +------------------------------------------------------------------------- */ + +int FixShearHistory::unpack_exchange(int nlocal, double *buf) +{ + int m = 0; + npartner[nlocal] = static_cast (buf[m++]); + for (int n = 0; n < npartner[nlocal]; n++) { + partner[nlocal][n] = static_cast (buf[m++]); + shearpartner[nlocal][n][0] = buf[m++]; + shearpartner[nlocal][n][1] = buf[m++]; + shearpartner[nlocal][n][2] = buf[m++]; + } + return m; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based arrays for restart file +------------------------------------------------------------------------- */ + +int FixShearHistory::pack_restart(int i, double *buf) +{ + int m = 0; + buf[m++] = 4*npartner[i] + 2; + buf[m++] = npartner[i]; + for (int n = 0; n < npartner[i]; n++) { + buf[m++] = partner[i][n]; + buf[m++] = shearpartner[i][n][0]; + buf[m++] = shearpartner[i][n][1]; + buf[m++] = shearpartner[i][n][2]; + } + return m; +} + +/* ---------------------------------------------------------------------- + unpack values from atom->extra array to restart the fix +------------------------------------------------------------------------- */ + +void FixShearHistory::unpack_restart(int nlocal, int nth) +{ + double **extra = atom->extra; + + // skip to Nth set of extra values + + int m = 0; + for (int i = 0; i < nth; i++) m += static_cast (extra[nlocal][m]); + m++; + + npartner[nlocal] = static_cast (extra[nlocal][m++]); + for (int n = 0; n < npartner[nlocal]; n++) { + partner[nlocal][n] = static_cast (extra[nlocal][m++]); + shearpartner[nlocal][n][0] = extra[nlocal][m++]; + shearpartner[nlocal][n][1] = extra[nlocal][m++]; + shearpartner[nlocal][n][2] = extra[nlocal][m++]; + } +} + +/* ---------------------------------------------------------------------- + maxsize of any atom's restart data +------------------------------------------------------------------------- */ + +int FixShearHistory::maxsize_restart() +{ + return 4*MAXTOUCH + 2; +} + +/* ---------------------------------------------------------------------- + size of atom nlocal's restart data +------------------------------------------------------------------------- */ + +int FixShearHistory::size_restart(int nlocal) +{ + return 4*npartner[nlocal] + 2; +} diff --git a/src/nialhjea_fs b/src/nialhjea_fs new file mode 100644 index 0000000000..ba69361643 --- /dev/null +++ b/src/nialhjea_fs @@ -0,0 +1,3608 @@ +testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest +THIS IS THE PAIR EAM FS VERSION OF NIALHJEA +testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest + 3 + 1000 0.1300722995578975E-01 1000 0.5678391959798995E-02 0.5650000000000000E+01 + 28 58.710 3.5200 fcc + 0.0000000000000000E+00 -0.1332662793615358E+00 -0.1452921454581837E+00 -0.1523531912368142E+00 -0.1581862523552362E+00 + -0.1639082041116888E+00 -0.1699426545382059E+00 -0.1764570476376752E+00 -0.1835109199136706E+00 -0.1911112227682255E+00 + -0.1992425242400153E+00 -0.2078735593152208E+00 -0.2169708161705926E+00 -0.2264981576262208E+00 -0.2364198685383210E+00 + -0.2467010212354559E+00 -0.2573089641630046E+00 -0.2682127177172648E+00 -0.2793832876249742E+00 -0.2907936148383499E+00 + -0.3024184814336230E+00 -0.3142343948579320E+00 -0.3262194641112117E+00 -0.3383532759151806E+00 -0.3506164751688710E+00 + -0.3629930849818281E+00 -0.3754632992578539E+00 -0.3880132539605681E+00 -0.4006282340364624E+00 -0.4132944249954278E+00 + -0.4259988342802910E+00 -0.4387292219786865E+00 -0.4514740394367802E+00 -0.4642223746432430E+00 -0.4769639034723383E+00 + -0.4896888460377404E+00 -0.5023882063058194E+00 -0.5150514008208491E+00 -0.5276733170954859E+00 -0.5402439685620584E+00 + -0.5527559057851690E+00 -0.5652019937956556E+00 -0.5775754037468577E+00 -0.5898697374354533E+00 -0.6020783706550734E+00 + -0.6141958187973504E+00 -0.6262163111449786E+00 -0.6381344390125845E+00 -0.6499424015305308E+00 -0.6616382540753616E+00 + -0.6731993263249691E+00 -0.6845796030423443E+00 -0.6957060801011892E+00 -0.7064948085245568E+00 -0.7168695757140675E+00 + -0.7267732527299753E+00 -0.7361710465584164E+00 -0.7450484575868490E+00 -0.7534069422321110E+00 -0.7612592416825148E+00 + -0.7686253227224800E+00 -0.7755292274454266E+00 -0.7819968032841373E+00 -0.7880540868431538E+00 -0.7937266203490037E+00 + -0.7990383766649565E+00 -0.8040117767243267E+00 -0.8086674652146524E+00 -0.8130242928279436E+00 -0.8170993717012625E+00 + -0.8209081734003210E+00 -0.8244646490459413E+00 -0.8277813583284139E+00 -0.8308695990447905E+00 -0.8337395320876144E+00 + -0.8364002989992798E+00 -0.8388601306360481E+00 -0.8411264464017005E+00 -0.8432059440847066E+00 -0.8451046806746021E+00 + -0.8468281447278194E+00 -0.8483813209452364E+00 -0.8497687476559737E+00 -0.8509945678935900E+00 -0.8520625747193371E+00 + -0.8529762514032520E+00 -0.8537388100896948E+00 -0.8543532100632678E+00 -0.8548222073722460E+00 -0.8551483635456201E+00 + -0.8553340719766496E+00 -0.8553815772750362E+00 -0.8552929923971586E+00 -0.8550703138095166E+00 -0.8547151651374190E+00 + -0.8542288599579191E+00 -0.8536141001159478E+00 -0.8528770375410186E+00 -0.8520101609408499E+00 -0.8510194840111716E+00 + -0.8499064644469634E+00 -0.8486725211340236E+00 -0.8473190381844873E+00 -0.8458473685456269E+00 -0.8442588372306652E+00 + -0.8425547442066161E+00 -0.8407363669700096E+00 -0.8388049628370240E+00 -0.8367617709719433E+00 -0.8346080141771175E+00 + -0.8323449004663495E+00 -0.8299736244409459E+00 -0.8274953684882504E+00 -0.8249113038193059E+00 -0.8222225913624328E+00 + -0.8194312028270083E+00 -0.8165381656110142E+00 -0.8135381986589678E+00 -0.8104430318985472E+00 -0.8072486480744487E+00 + -0.8039562298106482E+00 -0.8005669360809051E+00 -0.7970819051712361E+00 -0.7935022573432313E+00 -0.7898290971921718E+00 + -0.7860635135890277E+00 -0.7822065375250205E+00 -0.7782588382932190E+00 -0.7742197532367605E+00 -0.7700870580234671E+00 + -0.7658477859557991E+00 -0.7614923740747592E+00 -0.7569976237158578E+00 -0.7523403043259940E+00 -0.7474924540260339E+00 + -0.7424262490644793E+00 -0.7371152605107092E+00 -0.7315359786377336E+00 -0.7256688371398212E+00 -0.7194997208059100E+00 + -0.7130147649374017E+00 -0.7062107830858579E+00 -0.6990840527339586E+00 -0.6916355099263285E+00 -0.6838688833277935E+00 + -0.6757902321840703E+00 -0.6674074545321318E+00 -0.6587298477273151E+00 -0.6497677278712075E+00 -0.6405321085533657E+00 + -0.6310344355558080E+00 -0.6212863721358168E+00 -0.6112922466782784E+00 -0.6010783652240157E+00 -0.5906465248553197E+00 + -0.5800085678384548E+00 -0.5691757383537599E+00 -0.5581582564186043E+00 -0.5469659281367214E+00 -0.5356081318998811E+00 + -0.5240938131155666E+00 -0.5124314854938561E+00 -0.5006292372993926E+00 -0.4886947412876452E+00 -0.4766352673015746E+00 + -0.4644576967166927E+00 -0.4521685380961173E+00 -0.4397739435565100E+00 -0.4272797254586216E+00 -0.4146913731272406E+00 + -0.4020140693777172E+00 -0.3892527066834290E+00 -0.3764119028647137E+00 -0.3634960162151266E+00 -0.3505091600038455E+00 + -0.3374552163098947E+00 -0.3243378491869073E+00 -0.3111605171690215E+00 -0.2979264851148429E+00 -0.2846388353950218E+00 + -0.2713004784405015E+00 -0.2579141626735364E+00 -0.2444824838465252E+00 -0.2310078938154909E+00 -0.2174927087734169E+00 + -0.2039391169721405E+00 -0.1903491859578246E+00 -0.1767248693464794E+00 -0.1630680131652866E+00 -0.1493803617833507E+00 + -0.1356635634555516E+00 -0.1219191755016809E+00 -0.1081486691423308E+00 -0.9435343401120377E-01 -0.8054492422289172E-01 + -0.6670414857713070E-01 -0.5284236389642416E-01 -0.3896067277847237E-01 -0.2506137114673379E-01 -0.1114505736346416E-01 + 0.2787869992531000E-02 0.1673649714292225E-01 0.3069995798121283E-01 0.4467743152122949E-01 0.5866813997114662E-01 + 0.7267134735307934E-01 0.8668635275736136E-01 0.1007124932111410E+00 0.1147491401988674E+00 0.1287956978815430E+00 + 0.1428516014164529E+00 0.1569163153723068E+00 0.1709893322335105E+00 0.1850701709882827E+00 0.1991583757947666E+00 + 0.2132535147217212E+00 0.2273551785580352E+00 0.2414629796876397E+00 0.2555765510256194E+00 0.2696955450121337E+00 + 0.2838196326609008E+00 0.2979485026581798E+00 0.3120818605100766E+00 0.3262194277345074E+00 0.3403609410961295E+00 + 0.3545061518803436E+00 0.3686548252055175E+00 0.3828067393706931E+00 0.3969616852363487E+00 0.4111194656371424E+00 + 0.4252798948247261E+00 0.4394427979383266E+00 0.4536080105023714E+00 0.4677753779491880E+00 0.4819447551653937E+00 + 0.4961160060612713E+00 0.5102890031615175E+00 0.5244636272329899E+00 0.5386397670398893E+00 0.5528173195811590E+00 + 0.5669961916288884E+00 0.5811763038337503E+00 0.5953575986744184E+00 0.6095400529056221E+00 0.6237236940889446E+00 + 0.6379086197162707E+00 0.6520950167319981E+00 0.6662831791056405E+00 0.6804735214359070E+00 0.6946665872026117E+00 + 0.7088630510277696E+00 0.7230637149920511E+00 0.7372694995930971E+00 0.7514814302896511E+00 0.7657006207512822E+00 + 0.7799282539728765E+00 0.7941655623409360E+00 0.8084138075998624E+00 0.8226742614970703E+00 0.8369481877037046E+00 + 0.8512368254336948E+00 0.8655413750282932E+00 0.8798629856427098E+00 0.8942027450633461E+00 0.9085616716017455E+00 + 0.9229407079527192E+00 0.9373407168612360E+00 0.9517624784199370E+00 0.9662066888041991E+00 0.9806739602523891E+00 + 0.9951648221004206E+00 0.1009679722693299E+01 0.1024219032006336E+01 0.1038783044826459E+01 0.1053371984359273E+01 + 0.1067986006143130E+01 0.1082625202169261E+01 0.1097289605119975E+01 0.1111979192652043E+01 0.1126693891663521E+01 + 0.1141433582496241E+01 0.1156198103032580E+01 0.1170987252656857E+01 0.1185800796057570E+01 0.1200638466853661E+01 + 0.1215499971032784E+01 0.1230384990195972E+01 0.1245293184603845E+01 0.1260224196025355E+01 0.1275177650390923E+01 + 0.1290153160254313E+01 0.1305150327069121E+01 0.1320168743286779E+01 0.1335207994283188E+01 0.1350267660123350E+01 + 0.1365347317171768E+01 0.1380446539557269E+01 0.1395564900502009E+01 0.1410701973522016E+01 0.1425857333509093E+01 + 0.1441030557701353E+01 0.1456221226550525E+01 0.1471428924494518E+01 0.1486653240641253E+01 0.1501893769371186E+01 + 0.1517150110865678E+01 0.1532421871566029E+01 0.1547708664570152E+01 0.1563010109971501E+01 0.1578325835145321E+01 + 0.1593655474987493E+01 0.1608998672109891E+01 0.1624371180506387E+01 0.1639740502114151E+01 0.1655122356345302E+01 + 0.1670516417892671E+01 0.1685922369619611E+01 0.1701339902568634E+01 0.1716768715949499E+01 0.1732208517108212E+01 + 0.1747659021479414E+01 0.1763119952524256E+01 0.1778591041654877E+01 0.1794072028147745E+01 0.1809562659046684E+01 + 0.1825062689057695E+01 0.1840571880435753E+01 0.1856090002865933E+01 0.1871616833338670E+01 0.1887152156020591E+01 + 0.1902695762121880E+01 0.1918247449760493E+01 0.1933807023824201E+01 0.1949374295830467E+01 0.1964949083785456E+01 + 0.1980531212042564E+01 0.1996120511159695E+01 0.2011716817757780E+01 0.2027319974378536E+01 0.2042929829344224E+01 + 0.2058546236616969E+01 0.2074169055660697E+01 0.2089798151303690E+01 0.2105433393602993E+01 0.2121074657710956E+01 + 0.2136721823742874E+01 0.2152374776647946E+01 0.2168033406081115E+01 0.2183697606278244E+01 0.2199367275932566E+01 + 0.2215042318074360E+01 0.2230722639952553E+01 0.2246408152918789E+01 0.2262098772314182E+01 0.2277794417357875E+01 + 0.2293495011038814E+01 0.2309200480010006E+01 0.2324910754483760E+01 0.2340625768131687E+01 0.2356345457985135E+01 + 0.2372069764338704E+01 0.2387798630656611E+01 0.2403532003480336E+01 0.2419269832339658E+01 0.2435012069665014E+01 + 0.2450758670702946E+01 0.2466509593432718E+01 0.2482264798486547E+01 0.2498024249070006E+01 0.2513787910886542E+01 + 0.2529555752062322E+01 0.2545327743074537E+01 0.2561103856680077E+01 0.2576884067847857E+01 0.2592668353691494E+01 + 0.2608456693404804E+01 0.2624249068198495E+01 0.2640045461239012E+01 0.2655845857588801E+01 0.2671650244148466E+01 + 0.2687458609600455E+01 0.2703270944353804E+01 0.2719087240491504E+01 0.2734907491718758E+01 0.2750731693312261E+01 + 0.2766559842071786E+01 0.2782391936272532E+01 0.2798227975619128E+01 0.2814067961200806E+01 0.2829911895447779E+01 + 0.2845759782089161E+01 0.2861611626111980E+01 0.2877467433721947E+01 0.2893327212308449E+01 0.2909190970421690E+01 + 0.2925058717783131E+01 0.2940930465370343E+01 0.2956806225646105E+01 0.2972686013021615E+01 0.2988569844663630E+01 + 0.3004457741744432E+01 0.3020349731207816E+01 0.3036245848084562E+01 0.3052146138327856E+01 0.3068050662093938E+01 + 0.3083959497337403E+01 0.3099872743561932E+01 0.3115790525549542E+01 0.3131712996890727E+01 0.3147640343150343E+01 + 0.3163572784533585E+01 0.3179510577942580E+01 0.3195454018354155E+01 0.3211403439482311E+01 0.3227359213718501E+01 + 0.3243321751378190E+01 0.3259291499296893E+01 0.3275268938843027E+01 0.3291254583421065E+01 0.3307248975552397E+01 + 0.3323252683617341E+01 0.3339266298346260E+01 0.3355290429139160E+01 0.3371325700295216E+01 0.3387372747215409E+01 + 0.3403432212646379E+01 0.3419504743012368E+01 0.3435590984884243E+01 0.3451691581620338E+01 0.3467807170206726E+01 + 0.3483938378319635E+01 0.3500085821623841E+01 0.3516250101317652E+01 0.3532431801926151E+01 0.3548631489345226E+01 + 0.3564849709131778E+01 0.3581086985033565E+01 0.3597344652416893E+01 0.3613622490530517E+01 0.3629920843003930E+01 + 0.3646240132058665E+01 0.3662580753832387E+01 0.3678943078161282E+01 0.3695327448517830E+01 0.3711734182088804E+01 + 0.3728163569978022E+01 0.3744615877522165E+01 0.3761091344705235E+01 0.3777590186658585E+01 0.3794112594236921E+01 + 0.3810658734656357E+01 0.3827228752187168E+01 0.3843822768889325E+01 0.3860440885384449E+01 0.3877083181654072E+01 + 0.3893749717858398E+01 0.3910440535169144E+01 0.3927155656609344E+01 0.3943895087897474E+01 0.3960658818286859E+01 + 0.3977446821402751E+01 0.3994259056066866E+01 0.4011095467111076E+01 0.4027955986175584E+01 0.4044840532489744E+01 + 0.4061749013633730E+01 0.4078681326279053E+01 0.4095637356908441E+01 0.4112616982511369E+01 0.4129620071256468E+01 + 0.4146646483140302E+01 0.4163696070611252E+01 0.4180768679168807E+01 0.4197864147938219E+01 0.4214982310220819E+01 + 0.4232122994020187E+01 0.4249286022544283E+01 0.4266471214683492E+01 0.4283678385466899E+01 0.4300907346494270E+01 + 0.4318157906348262E+01 0.4335429870982637E+01 0.4352723044092500E+01 0.4370037227462390E+01 0.4387372221295607E+01 + 0.4404727824526063E+01 0.4422103835109979E+01 0.4439500050301689E+01 0.4456916266912927E+01 0.4474352281555639E+01 + 0.4491807890868955E+01 0.4509282891733321E+01 0.4526777081468666E+01 0.4544290258021121E+01 0.4561822220135298E+01 + 0.4579372767515736E+01 0.4596941700976757E+01 0.4614528822579842E+01 0.4632133935763207E+01 0.4649756845459109E+01 + 0.4667397358203146E+01 0.4685055282234032E+01 0.4702730427585877E+01 0.4720422606171269E+01 0.4738131631857456E+01 + 0.4755857320535952E+01 0.4773599490184296E+01 0.4791357960922696E+01 0.4809132555063428E+01 0.4826923097156268E+01 + 0.4844729414026645E+01 0.4862551334810888E+01 0.4880388690984844E+01 0.4898241316389871E+01 0.4916109047253045E+01 + 0.4933991722205747E+01 0.4951889182295560E+01 0.4969801270997834E+01 0.4987727834222142E+01 0.5005668720316748E+01 + 0.5023623780069656E+01 0.5041592866707418E+01 0.5059575835892119E+01 0.5077572545715171E+01 0.5095582856689347E+01 + 0.5113606631739316E+01 0.5131643736190284E+01 0.5149694037754543E+01 0.5167757406516841E+01 0.5185833714918900E+01 + 0.5203922837741345E+01 0.5222024652085636E+01 0.5240139037355135E+01 0.5258265875233761E+01 0.5276405049664660E+01 + 0.5294556446828821E+01 0.5312719955121622E+01 0.5330895465129331E+01 0.5349083197331439E+01 0.5367282875848076E+01 + 0.5385494235244209E+01 0.5403717174591350E+01 0.5421951595034059E+01 0.5440197399763505E+01 0.5458454493990288E+01 + 0.5476722784918579E+01 0.5495002181717851E+01 0.5513292595496480E+01 0.5531593939274245E+01 0.5549906127955438E+01 + 0.5568229078301286E+01 0.5586562708902733E+01 0.5604906940153441E+01 0.5623261694222876E+01 0.5641626895028466E+01 + 0.5660002468209782E+01 0.5678388341101183E+01 0.5696784442705152E+01 0.5715190703666806E+01 0.5733607056245972E+01 + 0.5752033434292926E+01 0.5770469773221294E+01 0.5788916009983083E+01 0.5807372083043617E+01 0.5825837932355000E+01 + 0.5844313499333083E+01 0.5862798726831699E+01 0.5881293559118404E+01 0.5899797941851205E+01 0.5918311822053070E+01 + 0.5936835148090665E+01 0.5955367869649308E+01 0.5973909937710687E+01 0.5992461304530181E+01 0.6010993710199870E+01 + 0.6029563495483089E+01 0.6048142443794930E+01 0.6066730512264272E+01 0.6085327659184557E+01 0.6103933843993559E+01 + 0.6122549027251964E+01 0.6141173170624000E+01 0.6159806236856411E+01 0.6178448189759933E+01 0.6197098994189034E+01 + 0.6215758616023336E+01 0.6234427022148239E+01 0.6253104180437035E+01 0.6271790059732240E+01 0.6290484629827574E+01 + 0.6309187861451164E+01 0.6327899726246912E+01 0.6346620196758565E+01 0.6365349246411810E+01 0.6384086849498459E+01 + 0.6402832981160216E+01 0.6421587617372310E+01 0.6440350734927804E+01 0.6459122311422306E+01 0.6477902325238560E+01 + 0.6496690755531631E+01 0.6515487582214305E+01 0.6534292785942100E+01 0.6553106348100002E+01 0.6571928250787252E+01 + 0.6590758476804609E+01 0.6609597009640567E+01 0.6628443833458164E+01 0.6647298933081430E+01 0.6666162293983589E+01 + 0.6685033902273446E+01 0.6703913744683604E+01 0.6722801808558643E+01 0.6741698081842145E+01 0.6760602553065809E+01 + 0.6779515211338037E+01 0.6798436046331943E+01 0.6817365048274937E+01 0.6836302207937280E+01 0.6855247516621816E+01 + 0.6874200966153282E+01 0.6893162548867991E+01 0.6912132257603389E+01 0.6931110085688530E+01 0.6950096026934304E+01 + 0.6969090075623598E+01 0.6988092226501735E+01 0.7007102474767507E+01 0.7026120816064235E+01 0.7045147246470421E+01 + 0.7064181762491003E+01 0.7083224361049062E+01 0.7102275039477362E+01 0.7121333795510111E+01 0.7140400627274076E+01 + 0.7159475533281437E+01 0.7178558512421901E+01 0.7197649563954585E+01 0.7216748687500626E+01 0.7235855883035654E+01 + 0.7254971150883136E+01 0.7274094491705881E+01 0.7293225906500751E+01 0.7312365396590522E+01 0.7331512963616746E+01 + 0.7350668609535120E+01 0.7369832336606407E+01 0.7389004147392185E+01 0.7408184044746747E+01 0.7427372031812411E+01 + 0.7446568112012670E+01 0.7465772289046285E+01 0.7484984566881565E+01 0.7504204949750658E+01 0.7523433442143897E+01 + 0.7542670048804212E+01 0.7561914774721672E+01 0.7581167625127947E+01 0.7600428605492169E+01 0.7619697721514100E+01 + 0.7638974979120491E+01 0.7658260384459254E+01 0.7677553943895177E+01 0.7696855664005213E+01 0.7716165551573454E+01 + 0.7735483613586325E+01 0.7754812044852841E+01 0.7774146430634772E+01 0.7793489013893222E+01 0.7812839802364948E+01 + 0.7832198803967884E+01 0.7851566026796888E+01 0.7870941479120802E+01 0.7890325169377391E+01 0.7909717106169680E+01 + 0.7929117298262355E+01 0.7948525754578284E+01 0.7967942484194026E+01 0.7987367496337072E+01 0.8006800800381754E+01 + 0.8026242405846276E+01 0.8045692322388845E+01 0.8065150559804493E+01 0.8084617128021762E+01 0.8104092037099576E+01 + 0.8123575297224079E+01 0.8143066918705415E+01 0.8162566911974665E+01 0.8182075287581299E+01 0.8201592056189469E+01 + 0.8221117228575778E+01 0.8240650815626054E+01 0.8260192828332890E+01 0.8279743277792548E+01 0.8299302175202868E+01 + 0.8318869531860187E+01 0.8338445359156225E+01 0.8358029668577160E+01 0.8377622471699610E+01 0.8397223780188767E+01 + 0.8416833605796000E+01 0.8436451960357047E+01 0.8456078855787993E+01 0.8475714304085500E+01 0.8495358317322456E+01 + 0.8515010907646797E+01 0.8534672087279333E+01 0.8554341868511301E+01 0.8574020263702693E+01 0.8593707285279649E+01 + 0.8613402945733171E+01 0.8633107257617183E+01 0.8652820233545668E+01 0.8672541886191894E+01 0.8692272228285830E+01 + 0.8712011272612585E+01 0.8731759032010899E+01 0.8751515519370983E+01 0.8771280747633298E+01 0.8791054729785913E+01 + 0.8810837478864300E+01 0.8830629007948218E+01 0.8850429330161134E+01 0.8870238458668837E+01 0.8890056406676365E+01 + 0.8909883187428321E+01 0.8929718814206822E+01 0.8949563300329515E+01 0.8969416659148337E+01 0.8989278904048760E+01 + 0.9009150048447722E+01 0.9029030105792657E+01 0.9048919089560115E+01 0.9068817013254048E+01 0.9088723890405547E+01 + 0.9108639734570488E+01 0.9128564559328495E+01 0.9148498378283008E+01 0.9168441205058130E+01 0.9188393053299251E+01 + 0.9208353936670647E+01 0.9228323868854844E+01 0.9248302863551771E+01 0.9268290934477903E+01 0.9288288095363413E+01 + 0.9308294359953749E+01 0.9328309742007235E+01 0.9348334255293310E+01 0.9368367913593602E+01 0.9388410730698894E+01 + 0.9408462720409801E+01 0.9428523896534983E+01 0.9448594272890006E+01 0.9468673863297340E+01 0.9488762681584802E+01 + 0.9508860741584925E+01 0.9528968057134250E+01 0.9549084642072614E+01 0.9569210510241618E+01 0.9589345675484282E+01 + 0.9609490151644962E+01 0.9629643952567108E+01 0.9649807092094022E+01 0.9669979584066937E+01 0.9690161442325262E+01 + 0.9710352680705284E+01 0.9730553313039422E+01 0.9750763353155946E+01 0.9770982814877840E+01 0.9791211712022829E+01 + 0.9811450058402528E+01 0.9831697867820566E+01 0.9851955154073806E+01 0.9872221930951270E+01 0.9892498212232454E+01 + 0.9912784011688075E+01 0.9933079343078646E+01 0.9953384220154447E+01 0.9973698656654562E+01 0.9994022666306762E+01 + 0.1001435626282665E+02 0.1003470009456882E+02 0.1005505370279354E+02 0.1007541692221616E+02 0.1009578976686720E+02 + 0.1011617225075480E+02 0.1013656438786407E+02 0.1015696619215623E+02 0.1017737767756941E+02 0.1019779885801728E+02 + 0.1021822974738978E+02 0.1023867035955192E+02 0.1025912070834428E+02 0.1027958080758259E+02 0.1030005067105711E+02 + 0.1032053031253292E+02 0.1034101974574955E+02 0.1036151898442014E+02 0.1038202804223235E+02 0.1040254693284723E+02 + 0.1042307566989899E+02 0.1044361426699570E+02 0.1046416273771851E+02 0.1048472109562067E+02 0.1050528935422884E+02 + 0.1052586752704187E+02 0.1054645562753072E+02 0.1056705366913900E+02 0.1058766166528144E+02 0.1060827962934513E+02 + 0.1062890757468810E+02 0.1064950908609077E+02 0.1067015700336870E+02 0.1069081494185409E+02 0.1071148291478914E+02 + 0.1073216093538781E+02 0.1075284901683381E+02 0.1077354717228192E+02 0.1079425541485676E+02 0.1081497375765323E+02 + 0.1083570221373617E+02 0.1085644079614013E+02 0.1087718951786965E+02 0.1089794839189827E+02 0.1091871743116957E+02 + 0.1093949664859596E+02 0.1096028605705928E+02 0.1098108566940994E+02 0.1100189549846826E+02 0.1102271555702228E+02 + 0.1104354585782909E+02 0.1106438641361461E+02 0.1108523723707299E+02 0.1110609834086651E+02 0.1112696973762601E+02 + 0.1114785143995061E+02 0.1116874346040703E+02 0.1118964581153000E+02 0.1121055850582263E+02 0.1123148155575473E+02 + 0.1125241497376490E+02 0.1127335877225852E+02 0.1129431296360895E+02 0.1131527756015691E+02 0.1133625257420954E+02 + 0.1135723801804252E+02 0.1137823390389772E+02 0.1139924024398471E+02 0.1142025705047962E+02 0.1144128433552578E+02 + 0.1146232211123331E+02 0.1148337038967921E+02 0.1150442918290690E+02 0.1152549850292635E+02 0.1154657836171509E+02 + 0.1156766877121638E+02 0.1158876974333961E+02 0.1160988128996192E+02 0.1163100342292520E+02 0.1165213615403900E+02 + 0.1167327949507859E+02 0.1169443345778498E+02 0.1171559805386622E+02 0.1173677329499617E+02 0.1175795919281455E+02 + 0.1177915575892700E+02 0.1180036300490579E+02 0.1182158094228856E+02 0.1184280958257915E+02 0.1186404893724685E+02 + 0.1188529901772762E+02 0.1190655983542237E+02 0.1192783140169806E+02 0.1194911372788769E+02 0.1197040682528970E+02 + 0.1199171070516803E+02 0.1201302537875296E+02 0.1203435085723962E+02 0.1205568715178919E+02 0.1207703427352811E+02 + 0.1209839223354848E+02 0.1211976104290818E+02 0.1214114071263091E+02 0.1216253125370503E+02 0.1218393267708453E+02 + 0.1220534499368958E+02 0.1222676821440496E+02 0.1224820235008141E+02 0.1226964741153520E+02 0.1229110340954733E+02 + 0.1231257035486524E+02 0.1233404825820068E+02 0.1235553713023114E+02 0.1237703698160018E+02 0.1239854782291576E+02 + 0.1242006966475194E+02 0.1244160251764720E+02 0.1246314639210712E+02 0.1248470129860064E+02 0.1250626724756299E+02 + 0.1252784424939512E+02 0.1254943231446288E+02 0.1257103145309731E+02 0.1259264167559508E+02 0.1261426299221796E+02 + 0.1263589541319379E+02 0.1265753894871477E+02 0.1267919360893930E+02 0.1270085940399096E+02 0.1272253634395807E+02 + 0.1274422443889557E+02 0.1276592369882235E+02 0.1278763413372411E+02 0.1280935575355105E+02 0.1283108856821895E+02 + 0.1285283258760953E+02 0.1287458782156935E+02 0.1289635427991064E+02 0.1291813197241135E+02 0.1293992090881460E+02 + 0.1296172109882920E+02 0.1298353255212942E+02 0.1300535527835513E+02 0.1302718928711147E+02 0.1304903458796954E+02 + 0.1307089119046614E+02 0.1309275910410295E+02 0.1311463833834799E+02 0.1313652890263444E+02 0.1315843080636154E+02 + 0.1318034405889441E+02 0.1320226866956276E+02 0.1322420464766316E+02 0.1324615200245751E+02 0.1326811074317337E+02 + 0.1329008087900448E+02 0.1331206241910968E+02 0.1333405537261467E+02 0.1335605974861005E+02 0.1337807555615254E+02 + 0.1340010280426523E+02 0.1342214150193681E+02 0.1344419165812167E+02 0.1346625328174062E+02 0.1348832638168022E+02 + 0.1351041096679353E+02 0.1353250704589885E+02 0.1355461462778115E+02 0.1357673372119115E+02 0.1359886433484638E+02 + 0.1362100647742997E+02 0.1364316015759144E+02 0.1366532538394614E+02 0.1368750216507624E+02 0.1370969050953028E+02 + 0.1373189042582217E+02 0.1375410192243334E+02 0.1377632500781127E+02 0.1379855969036910E+02 0.1382080597848685E+02 + 0.1384306388051198E+02 0.1386533340475719E+02 0.1388761455950183E+02 0.1390990735299232E+02 0.1393221179344152E+02 + 0.1395452788902909E+02 0.1397685564790063E+02 0.1399919507816944E+02 0.1402154618791462E+02 0.1404390898518284E+02 + 0.1406628347798727E+02 0.1408866967430708E+02 0.1411106758208999E+02 0.1413347720924909E+02 0.1415589856366520E+02 + 0.1417833165318584E+02 0.1420077648562560E+02 0.1422323306876623E+02 0.1424570141035628E+02 0.1426818151811159E+02 + 0.1429067339971510E+02 0.1431317706281675E+02 0.1433569251503422E+02 0.1435821976395167E+02 0.1438075881712129E+02 + 0.1440330968206166E+02 0.1442587236626011E+02 0.1444844687717011E+02 0.1447103322221295E+02 0.1449363140877790E+02 + 0.1451624144422053E+02 0.1453886333586524E+02 0.1456149709100336E+02 0.1458414271689378E+02 0.1460680022076286E+02 + 0.1462946960980574E+02 0.1465215089118382E+02 0.1467483217256191E+02 0.1469751345393999E+02 0.1472019473531807E+02 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1353993104251454E-10 0.8388292241576100E-09 0.9249073098372293E-08 0.5030460210239372E-07 + 0.1857568627085415E-06 0.5369197789403567E-06 0.1310591025996369E-05 0.2826805415934704E-05 0.5547382204843158E-05 + 0.1010438933657199E-04 0.1732779196828242E-04 0.2827168149581216E-04 0.4423859602721504E-04 0.6680154505955162E-04 + 0.9782344112589946E-04 0.1394737204414197E-03 0.1942420040555485E-03 0.2649487116051849E-03 0.3547525922860875E-03 + 0.4671551828778767E-03 0.6060022412741116E-03 0.7754822366296253E-03 0.9801220045380374E-03 0.1224779698140599E-02 + 0.1514635184246249E-02 0.1855178047873591E-02 0.2252193379531577E-02 0.2711745527424523E-02 0.3240160001952968E-02 + 0.3844003722708506E-02 0.4530063798923195E-02 0.5305325033301281E-02 0.6176946336577127E-02 0.7152236236230247E-02 + 0.8238627657747143E-02 0.9443652150831976E-02 0.1077491372619769E-01 0.1224006246116400E-01 0.1384676802438050E-01 + 0.1560269326170134E-01 0.1751546797666743E-01 0.1959266303029807E-01 0.2184176487603834E-01 0.2427015063682662E-01 + 0.2688506382240104E-01 0.2969359077621229E-01 0.3270263793270082E-01 0.3591890995727141E-01 0.3934888883309312E-01 + 0.4299881395089809E-01 0.4687466325027261E-01 0.5098213545355013E-01 0.5532663342634311E-01 0.5991324869200370E-01 + 0.6474674712088738E-01 0.6983155580921956E-01 0.7517175115663279E-01 0.8077104814605506E-01 0.8663279082458433E-01 + 0.9275994397927995E-01 0.9915508599743368E-01 0.1058204028968442E+00 0.1127576835079031E+00 0.1199683157858993E+00 + 0.1274532842288529E+00 0.1352131683733934E+00 0.1432481423386811E+00 0.1515579753861312E+00 0.1601420334607315E+00 + 0.1689992816780165E+00 0.1781282877192849E+00 0.1875272260963912E+00 0.1971938832464155E+00 0.2071256634156783E+00 + 0.2173195952919433E+00 0.2277723393431911E+00 0.2384801958210745E+00 0.2494391133870441E+00 0.2606446983191641E+00 + 0.2720922242578070E+00 0.2837766424487163E+00 0.2956925924423432E+00 0.3078344132088888E+00 0.3201961546291090E+00 + 0.3327715893216590E+00 0.3455542247685515E+00 0.3585373157011766E+00 0.3717138767102711E+00 0.3850766950442213E+00 + 0.3986183435611380E+00 0.4123311938012285E+00 0.4262074291471305E+00 0.4402390580410298E+00 0.4544179272285823E+00 + 0.4687357350008659E+00 0.4831840444068136E+00 0.4977542964098284E+00 0.5124378229635098E+00 0.5272258599826819E+00 + 0.5421095601871498E+00 0.5570800057968556E+00 0.5721282210583372E+00 0.5872451845836121E+00 0.6024218414838124E+00 + 0.6176491152810919E+00 0.6329179195834939E+00 0.6482191695086116E+00 0.6635437928430084E+00 0.6788827409254566E+00 + 0.6942269992431367E+00 0.7095675977309721E+00 0.7248956207653083E+00 0.7402022168441228E+00 0.7554786079469059E+00 + 0.7707160985682907E+00 0.7859060844203938E+00 0.8010400607996875E+00 0.8161096306150647E+00 0.8311065120745426E+00 + 0.8460225460288135E+00 0.8608497029705907E+00 0.8755800896893798E+00 0.8902059555819789E+00 0.9047196986196469E+00 + 0.9191138709734521E+00 0.9333811842999254E+00 0.9475145146896305E+00 0.9615069072817952E+00 0.9753515805486259E+00 + 0.9890419302533513E+00 0.1002571533086473E+01 0.1015934149985090E+01 0.1029123729140496E+01 0.1042134408699634E+01 + 0.1054960519166231E+01 0.1067596585507774E+01 0.1080037328974709E+01 0.1092277668638490E+01 0.1104312722655314E+01 + 0.1116137809262549E+01 0.1127748447515049E+01 0.1139140357768670E+01 0.1150309461918440E+01 0.1161251883398932E+01 + 0.1171963946954482E+01 0.1182442178186937E+01 0.1192683302888721E+01 0.1202684246168965E+01 0.1212442131380551E+01 + 0.1221954278855855E+01 0.1231218204459002E+01 0.1240231617962418E+01 0.1248992421255417E+01 0.1257498706392534E+01 + 0.1265748753489242E+01 0.1273741028472617E+01 0.1281474180694483E+01 0.1288947040414400E+01 0.1296158616159860E+01 + 0.1303108091970871E+01 0.1309794824536052E+01 0.1316218340227214E+01 0.1322378332039313E+01 0.1328274656442483E+01 + 0.1333907330152773E+01 0.1339276526828055E+01 0.1344382573695405E+01 0.1349225948116168E+01 0.1353807274094698E+01 + 0.1358127318736686E+01 0.1362186988662762E+01 0.1365987326382977E+01 0.1369529506637536E+01 0.1372814832709058E+01 + 0.1375844732711431E+01 0.1378620755860210E+01 0.1381144568729309E+01 0.1383417951498597E+01 0.1385442794196838E+01 + 0.1387221092944273E+01 0.1388754946198940E+01 0.1390046551010727E+01 0.1391098199286932E+01 0.1391912274073011E+01 + 0.1392491245851972E+01 0.1392837668865793E+01 0.1392954177462024E+01 0.1392843482468616E+01 0.1392508367599889E+01 + 0.1391951685896345E+01 0.1391176356200982E+01 0.1390185359674514E+01 0.1388981736351864E+01 0.1387568581742103E+01 + 0.1385949043473885E+01 0.1384126317988323E+01 0.1382103647281089E+01 0.1379884315695416E+01 0.1377471646767576E+01 + 0.1374869000126249E+01 0.1372079768447110E+01 0.1369107374463862E+01 0.1365955268036790E+01 0.1362626923279866E+01 + 0.1359125835747256E+01 0.1355455519680076E+01 0.1351619505314043E+01 0.1347621336248676E+01 0.1343464566878517E+01 + 0.1339152759886839E+01 0.1334689483802160E+01 0.1330078310617843E+01 0.1325322813474955E+01 0.1320426564408511E+01 + 0.1315393132157122E+01 0.1310226080036051E+01 0.1304928963873535E+01 0.1299505330010257E+01 0.1293958713361729E+01 + 0.1288292635543297E+01 0.1282510603057466E+01 0.1276616105543136E+01 0.1270612614086314E+01 0.1264503579591840E+01 + 0.1258292431215576E+01 0.1251982574856509E+01 0.1245577391708143E+01 0.1239080236868539E+01 0.1232494438008325E+01 + 0.1225823294095955E+01 0.1219070074179471E+01 0.1212238016223985E+01 0.1205330326004104E+01 0.1198350176050432E+01 + 0.1191300704649328E+01 0.1184185014895046E+01 0.1177006173793340E+01 0.1169767211415667E+01 0.1162471120103017E+01 + 0.1155120853718478E+01 0.1147719326947540E+01 0.1140269414645216E+01 0.1132773951228974E+01 0.1125235730116526E+01 + 0.1117657503207466E+01 0.1110041980407784E+01 0.1102391829196240E+01 0.1094709674231619E+01 0.1086998096999836E+01 + 0.1079259635499933E+01 0.1071496783967914E+01 0.1063711992637463E+01 0.1055907667536516E+01 0.1048086170318704E+01 + 0.1040249818128692E+01 0.1032400883500383E+01 0.1024541594287072E+01 0.1016674133622509E+01 0.1008800639911969E+01 + 0.1000923206852306E+01 0.9930438834801176E+00 0.9851646742469989E+00 0.9772875391210279E+00 0.9694143937135093E+00 + 0.9615471094301068E+00 0.9536875136454389E+00 0.9458373899002650E+00 0.9379984781203971E+00 0.9301724748564474E+00 + 0.9223610335436100E+00 0.9145657647805825E+00 0.9067882366268739E+00 0.8990299749176214E+00 0.8912924635951891E+00 + 0.8835771450567167E+00 0.8758854205168844E+00 0.8682186503851309E+00 0.8605781546565948E+00 0.8529652133160540E+00 + 0.8453810667541574E+00 0.8378269161952663E+00 0.8303039241362116E+00 0.8228132147953376E+00 0.8153558745711390E+00 + 0.8079329525099168E+00 0.8005454607817869E+00 0.7931943751644794E+00 0.7858806355343143E+00 0.7786051463638074E+00 + 0.7713687772253328E+00 0.7641723633003079E+00 0.7570167058933844E+00 0.7499025729511121E+00 0.7428306995846062E+00 + 0.7358017885957079E+00 0.7288165110062022E+00 0.7218755065895981E+00 0.7149793844050807E+00 0.7081287233331618E+00 + 0.7013240726126531E+00 0.6945659523785421E+00 0.6878548542003931E+00 0.6811912416209033E+00 0.6745755506942478E+00 + 0.6680081905238785E+00 0.6614895437994238E+00 0.6550199673323996E+00 0.6485997925903795E+00 0.6422293262293763E+00 + 0.6359088506240991E+00 0.6296386243958603E+00 0.6234188829378302E+00 0.6172498389374158E+00 0.6111316828955082E+00 + 0.6050645836423746E+00 0.5990486888499783E+00 0.5930841255405085E+00 0.5871710005909401E+00 0.5813094012334057E+00 + 0.5754993955512363E+00 0.5697410329704640E+00 0.5640343447466610E+00 0.5583793444469337E+00 0.5527760284269526E+00 + 0.5472243763028636E+00 0.5417243514179740E+00 0.5362759013040796E+00 0.5308789581373305E+00 0.5255334391885358E+00 + 0.5202392472678002E+00 0.5149962711634282E+00 0.5098043860749818E+00 0.5046634540404551E+00 0.4995733243574682E+00 + 0.4945338339984403E+00 0.4895448080196743E+00 0.4846060599643165E+00 0.4797173922591353E+00 0.4748785966051021E+00 + 0.4700894543617143E+00 0.4653497369250721E+00 0.4606592060996474E+00 0.4560176144637674E+00 0.4514247057287724E+00 + 0.4468802150918596E+00 0.4423838695826035E+00 0.4379353884031551E+00 0.4335344832621323E+00 0.4291808587022021E+00 + 0.4248742124213836E+00 0.4206142355880688E+00 0.4164006131498095E+00 0.4122330241358657E+00 0.4081111419535712E+00 + 0.4040346346785266E+00 0.4000031653386660E+00 0.3960163921922264E+00 0.3920739689996687E+00 0.3881755452895829E+00 + 0.3843207666186236E+00 0.3805092748255328E+00 0.3767407082792822E+00 0.3730147021214013E+00 0.3693308885025316E+00 + 0.3656888968132757E+00 0.3620883539093817E+00 0.3585288843313358E+00 0.3550101105184098E+00 0.3515316530172374E+00 + 0.3480931306849715E+00 0.3446941608870878E+00 0.3413343596899074E+00 0.3380133420478924E+00 0.3347307219857906E+00 + 0.3314861127756896E+00 0.3282791271090590E+00 0.3251093772638369E+00 0.3219764752666408E+00 0.3188800330501668E+00 + 0.3158196626058555E+00 0.3127949761318864E+00 0.3098055861765790E+00 0.3068511057772733E+00 0.3039311485947566E+00 + 0.3010453290433147E+00 0.2981932624164749E+00 0.2953745650085209E+00 0.2925888542318437E+00 0.2898357487302072E+00 + 0.2871148684879984E+00 0.2844258349355381E+00 0.2817682710505188E+00 0.2791418014556485E+00 0.2765460525125659E+00 + 0.2739806524121053E+00 0.2714452312609780E+00 0.2689394211649400E+00 0.2664628563085241E+00 0.2640151730313972E+00 + 0.2615960099014194E+00 0.2592050077844695E+00 0.2568418099111116E+00 0.2545060619401636E+00 0.2521974120192415E+00 + 0.2499155108423418E+00 0.2476600117045342E+00 0.2454305705538249E+00 0.2432268460402566E+00 0.2410484995623153E+00 + 0.2388951953107000E+00 0.2367666003095238E+00 0.2346623844550057E+00 0.2325822205517195E+00 0.2305257843464541E+00 + 0.2284927545597522E+00 0.2264828129151803E+00 0.2244956441663966E+00 0.2225309361220672E+00 0.2205883796686914E+00 + 0.2186676687913947E+00 0.2167685005927387E+00 0.2148905753096101E+00 0.2130335963282359E+00 0.2111972701973850E+00 + 0.2093813066398013E+00 0.2075854185619259E+00 0.2058093220619543E+00 0.2040527364362842E+00 0.2023153841843948E+00 + 0.2005969910122156E+00 0.1988972858340233E+00 0.1972160007729189E+00 0.1955528711599284E+00 0.1939076355317738E+00 + 0.1922800356273561E+00 0.1906698163829959E+00 0.1890767259264730E+00 0.1875005155699057E+00 0.1859409398015150E+00 + 0.1843977562763068E+00 0.1828707258057186E+00 0.1813596123462640E+00 0.1798641829872162E+00 0.1783842079373634E+00 + 0.1769194605108787E+00 0.1754697171123329E+00 0.1740347572208903E+00 0.1726143633737163E+00 0.1712083211486371E+00 + 0.1698164191460766E+00 0.1684384489703060E+00 0.1670742052100373E+00 0.1657234854183902E+00 0.1643860900922608E+00 + 0.1630618226511230E+00 0.1617504894152905E+00 0.1604518995836656E+00 0.1591658652110027E+00 0.1578922011847117E+00 + 0.1566307252012296E+00 0.1553812577419816E+00 0.1541436220489565E+00 0.1529176440999246E+00 0.1517031525833137E+00 + 0.1504999788727721E+00 0.1493079570014363E+00 0.1481269236359270E+00 0.1469567180500930E+00 0.1457971820985229E+00 + 0.1446481601898438E+00 0.1435094992598286E+00 0.1423810487443264E+00 0.1412626605520352E+00 0.1401541890371375E+00 + 0.1390554909718100E+00 0.1379664255186285E+00 0.1368868542028802E+00 0.1358166408848024E+00 0.1347556517317591E+00 + 0.1337037551903719E+00 0.1326608219586172E+00 0.1316267249579071E+00 0.1306013393051614E+00 0.1295845422848884E+00 + 0.1285762133212826E+00 0.1275762339503552E+00 0.1265844877921041E+00 0.1256008605227379E+00 0.1246252398469633E+00 + 0.1236575154703454E+00 0.1226975790717512E+00 0.1217453242758857E+00 0.1208006466259300E+00 0.1198634435562893E+00 + 0.1189336143654594E+00 0.1180110601890202E+00 0.1170956839727626E+00 0.1161873904459593E+00 0.1152860860947805E+00 + 0.1143916791358692E+00 0.1135040794900743E+00 0.1126231987563555E+00 0.1117489501858582E+00 0.1108812486561707E+00 + 0.1100200106457653E+00 0.1091651542086276E+00 0.1083165989490820E+00 0.1074742659968154E+00 0.1066380779821052E+00 + 0.1058079590112519E+00 0.1049838346422265E+00 0.1041656318605295E+00 0.1033532790552702E+00 0.1025467059954647E+00 + 0.1017458438065610E+00 0.1009506249471885E+00 0.1001609831861390E+00 0.9937685357957692E-01 0.9859817244848566E-01 + 0.9782487735634983E-01 0.9705690708707349E-01 0.9629420162313919E-01 0.9553670212400750E-01 0.9478435090475915E-01 + 0.9403709141497944E-01 0.9329486821788784E-01 0.9255762696971309E-01 0.9182531439931366E-01 0.9109787828804443E-01 + 0.9037526744987140E-01 0.8965743171173354E-01 0.8894432189415159E-01 0.8823588979208480E-01 0.8753208815603555E-01 + 0.8683287067340226E-01 0.8613819195007733E-01 0.8544800749229453E-01 0.8476227368872161E-01 0.8408094779279952E-01 + 0.8340398790532604E-01 0.8273135295728512E-01 0.8206300269292026E-01 0.8139889765304979E-01 0.8073899915862499E-01 + 0.8008326929452908E-01 0.7943167089361686E-01 0.7878416752099129E-01 0.7814072345852002E-01 0.7750130368958605E-01 + 0.7686587388407512E-01 0.7623440038359473E-01 0.7560685018692687E-01 0.7498319093571042E-01 0.7436339090035288E-01 + 0.7374741896616860E-01 0.7313524461974377E-01 0.7252683793552536E-01 0.7192216956263091E-01 0.7132121071188088E-01 + 0.7072393314304767E-01 0.7013030915232332E-01 0.6954031156000041E-01 0.6895391369836718E-01 0.6837108939981353E-01 + 0.6779181298514624E-01 0.6721605925211059E-01 0.6664380346411826E-01 0.6607502133917825E-01 0.6550968903902774E-01 + 0.6494778315846379E-01 0.6438928071487048E-01 0.6383415913794230E-01 0.6328239625959906E-01 0.6273397030409252E-01 + 0.6218885987830131E-01 0.6164704396221248E-01 0.6110850189958664E-01 0.6057321338880634E-01 0.6004115847390429E-01 + 0.5951231753576908E-01 0.5898667128352685E-01 0.5846420074609691E-01 0.5794488726391903E-01 0.5742871248084910E-01 + 0.5691565833622340E-01 0.5640570705708669E-01 0.5589884115058460E-01 0.5539504339651542E-01 0.5489429684004177E-01 + 0.5439658478455860E-01 0.5390189078471544E-01 0.5341019863959112E-01 0.5292149238601910E-01 0.5243575629206128E-01 + 0.5195297485062703E-01 0.5147313277323774E-01 0.5099621498393213E-01 0.5052220661331305E-01 0.5005109299273101E-01 + 0.4958285964860470E-01 0.4911749229687554E-01 0.4865497683759399E-01 0.4819529934963621E-01 0.4773844608554897E-01 + 0.4728440346652141E-01 0.4683315807748007E-01 0.4638469666230777E-01 0.4593900611918208E-01 0.4549607349603369E-01 + 0.4505588598612064E-01 0.4461843092371864E-01 0.4418369577992455E-01 0.4375166815857148E-01 0.4332233579225347E-01 + 0.4289568653845881E-01 0.4247170837580991E-01 0.4205038940040735E-01 0.4163171782227736E-01 0.4121568196192090E-01 + 0.4080227024696274E-01 0.4039147120889799E-01 0.3998327347993617E-01 0.3957766578994016E-01 0.3917463696345855E-01 + 0.3877417591685010E-01 0.3837627165549899E-01 0.3798091327111933E-01 0.3758808993914695E-01 0.3719779091621782E-01 + 0.3681000553773126E-01 0.3642472321549702E-01 0.3604193343546399E-01 0.3566162575553031E-01 0.3528378980343305E-01 + 0.3490841527471608E-01 0.3453549193077510E-01 0.3416500959697864E-01 0.3379695816086406E-01 0.3343132757040658E-01 + 0.3306810783236118E-01 0.3270728901067565E-01 0.3234886122497425E-01 0.3199281464910996E-01 0.3163913950978563E-01 + 0.3128782608524168E-01 0.3093886470401072E-01 0.3059224574373675E-01 0.3024795963005924E-01 0.2990599683556058E-01 + 0.2956634787877624E-01 0.2922900332326631E-01 0.2889395377674870E-01 0.2856118989029233E-01 0.2823070235756949E-01 + 0.2790248191416771E-01 0.2757651933695894E-01 0.2725280544352705E-01 0.2693133109165141E-01 0.2661208717884729E-01 + 0.2629506464196176E-01 0.2598025445682497E-01 0.2566764763795566E-01 0.2535723523832159E-01 0.2504900834915327E-01 + 0.2474295809981158E-01 0.2443907565770799E-01 0.2413735222827780E-01 0.2383777905500606E-01 0.2354034741950517E-01 + 0.2324504864164501E-01 0.2295187407973472E-01 0.2266081513075604E-01 0.2237186323064830E-01 0.2208500985464502E-01 + 0.2180024651766184E-01 0.2151756477473634E-01 0.2123695622151859E-01 0.2095841249481422E-01 0.2068192527317876E-01 + 0.2040748627756411E-01 0.2013508727201714E-01 0.1986472006443057E-01 0.1959637650734679E-01 0.1933004849881481E-01 + 0.1906572798330038E-01 0.1880340695265023E-01 0.1854307744711091E-01 0.1828473155640220E-01 0.1802836142084625E-01 + 0.1777395923255295E-01 0.1752151723666215E-01 0.1727102773264334E-01 0.1702248307565384E-01 0.1677587567795624E-01 + 0.1653119801039607E-01 0.1628844260394024E-01 0.1604760205127793E-01 0.1580866900848456E-01 0.1557163619674996E-01 + 0.1533649640417201E-01 0.1510324248761716E-01 0.1487186737464884E-01 0.1464236406552526E-01 0.1441472563526792E-01 + 0.1418894523580252E-01 0.1396501609817369E-01 0.1374293153483488E-01 0.1352268494201562E-01 0.1330426980216726E-01 + 0.1308767968648953E-01 0.1287290825753935E-01 0.1265994927192371E-01 0.1244879658307933E-01 0.1223944414413996E-01 + 0.1203188601089432E-01 0.1182611634483635E-01 0.1162212941630988E-01 0.1141991960775031E-01 0.1121948141702494E-01 + 0.1102080946087490E-01 0.1082389847846042E-01 0.1062874333501194E-01 0.1043533902558977E-01 0.1024368067895393E-01 + 0.1005376356154735E-01 0.9865583081593922E-02 0.9679134793314684E-02 0.9494414401263529E-02 0.9311417764785166E-02 + 0.9130140902597625E-02 0.8950579997500882E-02 0.8772731401214267E-02 0.8596591639343950E-02 0.8422157416482423E-02 + 0.8249425621441884E-02 0.8078393332622082E-02 0.7909057823514530E-02 0.7741416568343256E-02 0.7575467247842871E-02 + 0.7411207755174127E-02 0.7248636201976184E-02 0.7087750924555473E-02 0.6928550490209059E-02 0.6771033703680868E-02 + 0.6615199613748215E-02 0.6461047519934641E-02 0.6308576979345235E-02 0.6157787813618597E-02 0.6008680115989046E-02 + 0.5861254258451652E-02 0.5715510899020261E-02 0.5571450989068522E-02 0.5429075780740853E-02 0.5288386834419521E-02 + 0.5149386026230897E-02 0.5012075555572173E-02 0.4876457952637328E-02 0.4742536085917297E-02 0.4610313169647435E-02 + 0.4479792771170533E-02 0.4350978818180493E-02 0.4223875605807347E-02 0.4098487803498918E-02 0.3974820461650163E-02 + 0.3852879017924298E-02 0.3732669303204216E-02 0.3614197547105479E-02 0.3497470382973937E-02 0.3382494852283408E-02 + 0.3269278408338597E-02 0.3157828919178777E-02 0.3048154669566634E-02 0.2940264361933685E-02 0.2834167116141327E-02 + 0.2729872467901025E-02 0.2627390365681719E-02 0.2526731165915232E-02 0.2427905626291050E-02 0.2330924896912227E-02 + 0.2235800509061165E-02 0.2142544361300639E-02 0.2051168702609613E-02 0.1961686112225166E-02 0.1874109475832896E-02 + 0.1788451957715710E-02 0.1704726968437611E-02 0.1622948127603452E-02 0.1543129221197582E-02 0.1465284152965789E-02 + 0.1389426889263572E-02 0.1315571396752711E-02 0.1243731572285281E-02 0.1173921164272465E-02 0.1106153684794404E-02 + 0.1040442311668004E-02 0.9767997796547971E-03 0.9152382599604941E-03 0.8557692271559906E-03 0.7984033126378760E-03 + 0.7431501437484684E-03 0.6900181676963877E-03 0.6390144594619438E-03 0.5901445129451447E-03 0.5434120147240581E-03 + 0.4988185999463610E-03 0.4563635900883120E-03 0.4160437125934487E-03 0.3778528027632167E-03 0.3417814887280997E-03 + 0.3078168608981688E-03 0.2759421279962239E-03 0.2461362626341978E-03 0.2183736404266527E-03 0.1926236778641105E-03 + 0.1688504756124491E-03 0.1470124755772384E-03 0.1270621419785909E-03 0.1089456788163143E-03 0.9260279843818645E-04 + 0.7796655839983218E-04 0.6496328632466781E-04 0.5351261488371726E-04 0.4352765109263255E-04 0.3491530554961739E-04 + 0.2757680758595959E-04 0.2140843101578471E-04 0.1630245156608879E-04 0.1214835033531085E-04 0.8834266891203550E-05 + 0.6248690035680286E-05 0.4282353222462611E-05 0.2830275035848309E-05 0.1793853932613698E-05 0.1082893085919590E-05 + 0.6174003285747537E-06 0.3289872539180627E-06 0.1616905202076728E-06 0.7206870776681014E-07 0.2849911999804606E-07 + 0.9712198708650968E-08 0.2742442283547959E-08 0.6076172112450161E-09 0.9772731077597771E-10 0.1017048852958432E-10 + 0.5734341782146348E-12 0.1311491489053561E-13 0.7338688834175233E-16 0.3808514445153469E-19 0.2185032842849075E-24 + 0.4450194794086531E-34 0.4448435176905321E-58 0.1173305758391880E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 13 26.982 4.0500 fcc + 0.0000000000000000E+00 -0.9628279509886344E-01 -0.9953365511717502E-01 -0.1085367257834955E+00 -0.1214218487615201E+00 + -0.1368680672855588E+00 -0.1540621427490459E+00 -0.1724823698187966E+00 -0.1917766936082239E+00 -0.2116972667780488E+00 + -0.2320627441427241E+00 -0.2527367403313019E+00 -0.2736137350811652E+00 -0.2946105714789528E+00 -0.3156602493701524E+00 + -0.3367083306444053E+00 -0.3577089488344269E+00 -0.3786243739249987E+00 -0.3994221660811231E+00 -0.4200735094048743E+00 + -0.4404904782781875E+00 -0.4603267076635175E+00 -0.4791342002596235E+00 -0.4966697876448934E+00 -0.5129130363987204E+00 + -0.5279649398751899E+00 -0.5419673801142365E+00 -0.5550615741668476E+00 -0.5673715677751278E+00 -0.5790001198451177E+00 + -0.5900298137753388E+00 -0.6005259461781434E+00 -0.6105396931325852E+00 -0.6201109775165654E+00 -0.6292707959422479E+00 + -0.6380435230284373E+00 -0.6464477036605579E+00 -0.6544979268477449E+00 -0.6622058329958839E+00 -0.6695796004816827E+00 + -0.6766263822113870E+00 -0.6833513422524340E+00 -0.6897586759282083E+00 -0.6958513916294100E+00 -0.7016318963634165E+00 + -0.7071020397392846E+00 -0.7122632455033970E+00 -0.7171166154132189E+00 -0.7216630115090188E+00 -0.7259031214369276E+00 + -0.7298375104167867E+00 -0.7334666626446351E+00 -0.7367910666835507E+00 -0.7398107650409456E+00 -0.7425268555598952E+00 + -0.7449393618108722E+00 -0.7470487599589724E+00 -0.7488555593770301E+00 -0.7503603132693473E+00 -0.7515636266841099E+00 + -0.7524661625108897E+00 -0.7530686459172391E+00 -0.7533718513852463E+00 -0.7533768363262632E+00 -0.7530840012877273E+00 + -0.7524921131814579E+00 -0.7515804606478103E+00 -0.7502792607163535E+00 -0.7484607038243816E+00 -0.7459636916668000E+00 + -0.7426298640002307E+00 -0.7383310820407341E+00 -0.7329796809143272E+00 -0.7265308852606689E+00 -0.7189742772379484E+00 + -0.7103273715872973E+00 -0.7006269201238819E+00 -0.6899214100415596E+00 -0.6782669062893683E+00 -0.6657222644919032E+00 + -0.6523467518594732E+00 -0.6381981822655980E+00 -0.6233317828078055E+00 -0.6077995440370048E+00 -0.5916499059655702E+00 + -0.5749276704151935E+00 -0.5576740608036261E+00 -0.5399269902646231E+00 -0.5217207897977505E+00 -0.5030872174417831E+00 + -0.4840550838961484E+00 -0.4646507036272260E+00 -0.4448981173724120E+00 -0.4248192982742891E+00 -0.4044343519155205E+00 + -0.3837617000246638E+00 -0.3628182478945590E+00 -0.3416195360896790E+00 -0.3201798773328464E+00 -0.2985124796289278E+00 + -0.2766295567505006E+00 -0.2545424272145054E+00 -0.2322616028428013E+00 -0.2097968679392537E+00 -0.1871573500428596E+00 + -0.1643515831380795E+00 -0.1413875641241673E+00 -0.1182728032683014E+00 -0.9501436929434126E-01 -0.7161893009339959E-01 + -0.4809278834346697E-01 -0.2444191370712145E-01 -0.6719720983290323E-03 0.2321164851959434E-01 0.4720381488457415E-01 + 0.7129962756731612E-01 0.9549440222479744E-01 0.1197836527451308E+00 0.1441630239601834E+00 0.1686284833950578E+00 + 0.1931760053643994E+00 0.2178017590483101E+00 0.2425020494231500E+00 0.2672733026214353E+00 0.2921120755096318E+00 + 0.3170150833336578E+00 0.3419794799317026E+00 0.3670036243095800E+00 0.3920881689533946E+00 0.4172368973967129E+00 + 0.4424568644116991E+00 0.4677578158531293E+00 0.4931511605824372E+00 0.5186488234682329E+00 0.5442622221402917E+00 + 0.5700014909585294E+00 0.5958749808858199E+00 0.6218890074764571E+00 0.6480477945330341E+00 0.6743535566999124E+00 + 0.7008066705597229E+00 0.7274058941450217E+00 0.7541486054898794E+00 0.7810310401956295E+00 0.8080485153972305E+00 + 0.8351956330126833E+00 0.8624664590130959E+00 0.8898546780165009E+00 0.9173537241128331E+00 0.9449568897488558E+00 + 0.9726574149554992E+00 0.1000448559348619E+01 0.1028323659291245E+01 0.1056276172451073E+01 0.1084299711777170E+01 + 0.1112388070685622E+01 0.1140535241011345E+01 0.1168735425061202E+01 0.1196983042901978E+01 0.1225272735836553E+01 + 0.1253599366863931E+01 0.1281958018782363E+01 0.1310343990479578E+01 0.1338752791854684E+01 0.1367180137734465E+01 + 0.1395621941077129E+01 0.1424074305699794E+01 0.1452533518717449E+01 0.1480996042842949E+01 0.1509458508665117E+01 + 0.1537917706995331E+01 0.1566370831749105E+01 0.1594814471963946E+01 0.1623246104160209E+01 0.1651663086958648E+01 + 0.1680062903840593E+01 0.1708443156854245E+01 0.1736801560607192E+01 0.1765135936545083E+01 0.1793444207513674E+01 + 0.1821724397566120E+01 0.1849974626590099E+01 0.1878193078402154E+01 0.1906378032515773E+01 0.1934527846644618E+01 + 0.1962640952792409E+01 0.1990715853560963E+01 0.2018751118665230E+01 0.2046745381644585E+01 0.2074697336759590E+01 + 0.2102605736064189E+01 0.2130469386642917E+01 0.2158287148004209E+01 0.2186057929620079E+01 0.2213780688603973E+01 + 0.2241454427518249E+01 0.2269078192303640E+01 0.2296651070323292E+01 0.2324172188515120E+01 0.2351640711701886E+01 + 0.2379055842086045E+01 0.2406416827027384E+01 0.2433722996957316E+01 0.2460973865437883E+01 0.2488169306929864E+01 + 0.2515309789359613E+01 0.2542396607347866E+01 0.2569432057808982E+01 0.2596419519065771E+01 0.2623363422536599E+01 + 0.2650269129601363E+01 0.2677142739909846E+01 0.2703990861443457E+01 0.2730820370008068E+01 0.2757638179775513E+01 + 0.2784451039495457E+01 0.2811265362580523E+01 0.2838087094127737E+01 0.2864921614243932E+01 0.2891773674664324E+01 + 0.2918647364337785E+01 0.2945546099121457E+01 0.2972472630730262E+01 0.2999429070422704E+01 0.3026416923420929E+01 + 0.3053437130653784E+01 0.3080490115009347E+01 0.3107575829842219E+01 0.3134693807981898E+01 0.3161843209919625E+01 + 0.3189022870212173E+01 0.3216231341437487E+01 0.3243466935272163E+01 0.3270727760447288E+01 0.3298011757479649E+01 + 0.3325316730182467E+01 0.3352640374035690E+01 0.3379980301550311E+01 0.3407334064796215E+01 0.3434699175284783E+01 + 0.3462073121407959E+01 0.3489453383638473E+01 0.3516837447692921E+01 0.3544222815852538E+01 0.3571607016626300E+01 + 0.3598987612930495E+01 0.3626362208945728E+01 0.3653728455799938E+01 0.3681084056213634E+01 0.3708426768230866E+01 + 0.3735754408148046E+01 0.3763064852741161E+01 0.3790356040882480E+01 0.3817625974627172E+01 0.3844872719842444E+01 + 0.3872094406443206E+01 0.3899289228291301E+01 0.3926455442808664E+01 0.3953591370348690E+01 0.3980695393365072E+01 + 0.4007765955412338E+01 0.4034801560008381E+01 0.4061800769384807E+01 0.4088762203148616E+01 0.4115684536874605E+01 + 0.4142566500646071E+01 0.4169406877558640E+01 0.4196204502200039E+01 0.4222958259116835E+01 0.4249667081277604E+01 + 0.4276329948540632E+01 0.4302945886132529E+01 0.4329513963143877E+01 0.4356033291046330E+01 0.4382503022235336E+01 + 0.4408922348601389E+01 0.4435290500132353E+01 0.4461606743549172E+01 0.4487870380976208E+01 0.4514080748647457E+01 + 0.4540237215649173E+01 0.4566339182699858E+01 0.4592386080967303E+01 0.4618377370923009E+01 0.4644312541233742E+01 + 0.4670191107689631E+01 0.4696012612168792E+01 0.4721776621637420E+01 0.4747482727184995E+01 0.4773130543093758E+01 + 0.4798719705941583E+01 0.4824249873737505E+01 0.4849720725089056E+01 0.4875131958400324E+01 0.4900483291100185E+01 + 0.4925774458899197E+01 0.4951005215074943E+01 0.4976175329784288E+01 0.5001284589402100E+01 0.5026332801140161E+01 + 0.5051319771276494E+01 0.5076245336511819E+01 0.5101109341973393E+01 0.5125911646062397E+01 0.5150652119931829E+01 + 0.5175330646984699E+01 0.5199947122391546E+01 0.5224501452626964E+01 0.5248993555024179E+01 0.5273423357346785E+01 + 0.5297790805953600E+01 0.5322095829385203E+01 0.5346338394872665E+01 0.5370518467903519E+01 0.5394636022497286E+01 + 0.5418691040867781E+01 0.5442683513098503E+01 0.5466613436830711E+01 0.5490480816963549E+01 0.5514285665365584E+01 + 0.5538028000597862E+01 0.5561707847647368E+01 0.5585325237670777E+01 0.5608880207748139E+01 0.5632372800646136E+01 + 0.5655803064590023E+01 0.5679171053044746E+01 0.5702476824504079E+01 0.5725720442287942E+01 0.5748901974347438E+01 + 0.5772021493077228E+01 0.5795079075135007E+01 0.5818074801267764E+01 0.5841008756144801E+01 0.5863881028196719E+01 + 0.5886691709361872E+01 0.5909440895975128E+01 0.5932128683720454E+01 0.5954755179911128E+01 0.5977320485443878E+01 + 0.5999824709469358E+01 0.6022267962734361E+01 0.6044650358660738E+01 0.6066972013230976E+01 0.6089233044877606E+01 + 0.6111433574377054E+01 0.6133573724746905E+01 0.6155653621147478E+01 0.6177673390786589E+01 0.6199633162827851E+01 + 0.6221533068302496E+01 0.6243373240024188E+01 0.6265153812506977E+01 0.6286874921886278E+01 0.6308536705842656E+01 + 0.6330139303528365E+01 0.6351682855496508E+01 0.6373167503632674E+01 0.6394593391089307E+01 0.6415960662221997E+01 + 0.6437269462528379E+01 0.6458519938589133E+01 0.6479712238010886E+01 0.6500846509371517E+01 0.6521922902167027E+01 + 0.6542941566760541E+01 0.6563902654333011E+01 0.6584806316835689E+01 0.6605652706944284E+01 0.6626441978014737E+01 + 0.6647174088072036E+01 0.6667849577716816E+01 0.6688468412040860E+01 0.6709030746709217E+01 0.6729536737868406E+01 + 0.6749986542110525E+01 0.6770380316439014E+01 0.6790718218235369E+01 0.6811000456475160E+01 0.6831227079554464E+01 + 0.6851398303748420E+01 0.6871514287649720E+01 0.6891575190080648E+01 0.6911581170066203E+01 0.6931532386808209E+01 + 0.6951428999660269E+01 0.6971271168103572E+01 0.6991059051723765E+01 0.7010792810188176E+01 0.7030472603224527E+01 + 0.7050098590599536E+01 0.7069670932099115E+01 0.7089189787508612E+01 0.7108655316594129E+01 0.7128067679084379E+01 + 0.7147427034653132E+01 0.7166733542902411E+01 0.7185987363346015E+01 0.7205188655394117E+01 0.7224337578337899E+01 + 0.7243434291334958E+01 0.7262478953395287E+01 0.7281471723367670E+01 0.7300412759926576E+01 0.7319302221559616E+01 + 0.7338140266555139E+01 0.7356927052990867E+01 0.7375662738722378E+01 0.7394347481372199E+01 0.7412981438319438E+01 + 0.7431564766689641E+01 0.7450097623345021E+01 0.7468580164875283E+01 0.7487012547588363E+01 0.7505394927501915E+01 + 0.7523727460334936E+01 0.7542010301499733E+01 0.7560243606094313E+01 0.7578427528894725E+01 0.7596562224348212E+01 + 0.7614647846566118E+01 0.7632684549317478E+01 0.7650672486022634E+01 0.7668611809747173E+01 0.7686502673196021E+01 + 0.7704345228708073E+01 0.7722139628250660E+01 0.7739886023414384E+01 0.7757584565408455E+01 0.7775235405055646E+01 + 0.7792838692788044E+01 0.7810394578642622E+01 0.7827903212257197E+01 0.7845364742866390E+01 0.7862779319297943E+01 + 0.7880147089969217E+01 0.7897468202883433E+01 0.7914742805626958E+01 0.7931971045365675E+01 0.7949153068842364E+01 + 0.7966289022373804E+01 0.7983379051848088E+01 0.8000423302722167E+01 0.8017421920019366E+01 0.8034375048327233E+01 + 0.8051282831795312E+01 0.8068145414133273E+01 0.8084962938608882E+01 0.8101735548046269E+01 0.8118463384824164E+01 + 0.8135146590874683E+01 0.8151785307681390E+01 0.8168379676278345E+01 0.8184929837248552E+01 0.8201435930723028E+01 + 0.8217898096379580E+01 0.8234316473441851E+01 0.8250691200678498E+01 0.8267022416402313E+01 0.8283310258469461E+01 + 0.8299554864278941E+01 0.8315756370771805E+01 0.8331914914430893E+01 0.8348030631280192E+01 0.8364103656884673E+01 + 0.8380134126349787E+01 0.8396122174321329E+01 0.8412067934985277E+01 0.8427971542067645E+01 0.8443833128834413E+01 + 0.8459652828091619E+01 0.8475430772185273E+01 0.8491167093001646E+01 0.8506861921967246E+01 0.8522515390049147E+01 + 0.8538127627755209E+01 0.8553698765134389E+01 0.8569228931777127E+01 0.8584718256815695E+01 0.8600166868924553E+01 + 0.8615574896321021E+01 0.8630942466765738E+01 0.8646269707563008E+01 0.8661556745561711E+01 0.8676803707155621E+01 + 0.8692010718284379E+01 0.8707177904433900E+01 0.8722305390637324E+01 0.8737393301475592E+01 0.8752441761078339E+01 + 0.8767450893124774E+01 0.8782420820844322E+01 0.8797351667017651E+01 0.8812243553977586E+01 0.8827096603609940E+01 + 0.8841910937354429E+01 0.8856686676205864E+01 0.8871423940714820E+01 0.8886122850988944E+01 0.8900783526693864E+01 + 0.8915406087054141E+01 0.8929990650854535E+01 0.8944537336441012E+01 0.8959046261721827E+01 0.8973517544168701E+01 + 0.8987951300817869E+01 0.9002347648271487E+01 0.9016706702698437E+01 0.9031028579835858E+01 0.9045313394990188E+01 + 0.9059561263038376E+01 0.9073772298429056E+01 0.9087946615184084E+01 0.9102084326899423E+01 0.9116185546746657E+01 + 0.9130250387474085E+01 0.9144278961408215E+01 0.9158271380454892E+01 0.9172227756100682E+01 0.9186148199414212E+01 + 0.9200032821047387E+01 0.9213881731236844E+01 0.9227695039805166E+01 0.9241472856162442E+01 0.9255215289307372E+01 + 0.9268922447828803E+01 0.9282594439906916E+01 0.9296231373314885E+01 0.9309833355419986E+01 0.9323400493185019E+01 + 0.9336932882359978E+01 0.9350430594893881E+01 0.9363893783342821E+01 0.9377322553011272E+01 0.9390717008807609E+01 + 0.9404077255245511E+01 0.9417403396445167E+01 0.9430695536134984E+01 0.9443953777652798E+01 0.9457178223947256E+01 + 0.9470368977579316E+01 0.9483526140723573E+01 0.9496649815169690E+01 0.9509740102323899E+01 0.9522797103210273E+01 + 0.9535822238420437E+01 0.9548812165768359E+01 0.9561769891801452E+01 0.9574694732427433E+01 0.9587586786767478E+01 + 0.9600446153569266E+01 0.9613272931208536E+01 0.9626067217690245E+01 0.9638829110650304E+01 0.9651558707356724E+01 + 0.9664256104711166E+01 0.9676921399250290E+01 0.9689554687147089E+01 0.9702157469174860E+01 0.9714727037387689E+01 + 0.9727264885308301E+01 0.9739771107669302E+01 0.9752245798846879E+01 0.9764689052861872E+01 0.9777100963381457E+01 + 0.9789481623720420E+01 0.9801831126842281E+01 0.9814149565361319E+01 0.9826437031543161E+01 0.9838693617306955E+01 + 0.9850919414226038E+01 0.9863114513529872E+01 0.9875279006105066E+01 0.9887412982496855E+01 0.9899516532910610E+01 + 0.9911589747212901E+01 0.9923632714933214E+01 0.9935645525264956E+01 0.9947628267067159E+01 0.9959581028865557E+01 + 0.9971503898854007E+01 0.9983396964895977E+01 0.9995260314525778E+01 0.1000709403494981E+02 0.1001889821304812E+02 + 0.1003067293537552E+02 0.1004241828816303E+02 0.1005413435731925E+02 0.1006582122843160E+02 0.1007747898676759E+02 + 0.1008910771727630E+02 0.1010070750458943E+02 0.1011227843302306E+02 0.1012382058657841E+02 0.1013533404894347E+02 + 0.1014681890349423E+02 0.1015827523329602E+02 0.1016970312110463E+02 0.1018110264936784E+02 0.1019247390022638E+02 + 0.1020381695551557E+02 0.1021513189676633E+02 0.1022641880520652E+02 0.1023767776176225E+02 0.1024890884705905E+02 + 0.1026011214142316E+02 0.1027128772488293E+02 0.1028243567716970E+02 0.1029355607771946E+02 0.1030464900567390E+02 + 0.1031571453988140E+02 0.1032675275889879E+02 0.1033776374099216E+02 0.1034874756413813E+02 0.1035970430602517E+02 + 0.1037063404405489E+02 0.1038153685534300E+02 0.1039241281672065E+02 0.1040326200473567E+02 0.1041408449565369E+02 + 0.1042488036545932E+02 0.1043564968985735E+02 0.1044639254427403E+02 0.1045710900385802E+02 0.1046779914348181E+02 + 0.1047846303774262E+02 0.1048910076096391E+02 0.1049971238719612E+02 0.1051029799021812E+02 0.1052085764353829E+02 + 0.1053139142039568E+02 0.1054189939376099E+02 0.1055238163633786E+02 0.1056283822056399E+02 0.1057326921861215E+02 + 0.1058367470239147E+02 0.1059405474354847E+02 0.1060440941346801E+02 0.1061473878327465E+02 0.1062504292383371E+02 + 0.1063532190575210E+02 0.1064557579937992E+02 0.1065580467481084E+02 0.1066600860188387E+02 0.1067618765018412E+02 + 0.1068634188904373E+02 0.1069647138754325E+02 0.1070657621451248E+02 0.1071665643853165E+02 0.1072671212793241E+02 + 0.1073674335079890E+02 0.1074675017496875E+02 0.1075673266803417E+02 0.1076669089734308E+02 0.1077662492999989E+02 + 0.1078653483286685E+02 0.1079642067256462E+02 0.1080628251547384E+02 0.1081612042773567E+02 0.1082593447525316E+02 + 0.1083572472369191E+02 0.1084549123848135E+02 0.1085523408481566E+02 0.1086495332765466E+02 0.1087464903172486E+02 + 0.1088432126152055E+02 0.1089397008130446E+02 0.1090359555510911E+02 0.1091319774673763E+02 0.1092277671976472E+02 + 0.1093233253753738E+02 0.1094186526317629E+02 0.1095137495957662E+02 0.1096086168940853E+02 0.1097032555892928E+02 + 0.1097976666590150E+02 0.1098918498743821E+02 0.1099858058553585E+02 0.1100795352196447E+02 0.1101730385826855E+02 + 0.1102663165576839E+02 0.1103593697556089E+02 0.1104521987852084E+02 0.1105448042530153E+02 0.1106371867633628E+02 + 0.1107293247783943E+02 0.1108212631163812E+02 0.1109129802968301E+02 0.1110044769153667E+02 0.1110957535654645E+02 + 0.1111868108384563E+02 0.1112776493235422E+02 0.1113682696078008E+02 0.1114586722761977E+02 0.1115488579115973E+02 + 0.1116388270947705E+02 0.1117285804044050E+02 0.1118181184171143E+02 0.1119074417074485E+02 0.1119965508479030E+02 + 0.1120854464089276E+02 0.1121741289589355E+02 0.1122625990643143E+02 0.1123508572894327E+02 0.1124389041966516E+02 + 0.1125267403463331E+02 0.1126143662968485E+02 0.1127017826045877E+02 0.1127889898239682E+02 0.1128759885074458E+02 + 0.1129627792055189E+02 0.1130493624667420E+02 0.1131357388377320E+02 0.1132219088631773E+02 0.1133078730858470E+02 + 0.1133936320465983E+02 0.1134791862843856E+02 0.1135645363362708E+02 0.1136496827374269E+02 0.1137346260211521E+02 + 0.1138193667188745E+02 0.1139039053601605E+02 0.1139882424727257E+02 0.1140723785824395E+02 0.1141563142133352E+02 + 0.1142400498876172E+02 0.1143235861256712E+02 0.1144069234460682E+02 0.1144900623655768E+02 0.1145730033991675E+02 + 0.1146557470600226E+02 0.1147382938595421E+02 0.1148206443073531E+02 0.1149027989113191E+02 0.1149847581775414E+02 + 0.1150665226103736E+02 0.1151480927124249E+02 0.1152294689845698E+02 0.1153106519259537E+02 0.1153916420340013E+02 + 0.1154724398044246E+02 0.1155530457312277E+02 0.1156334603067165E+02 0.1157136840215052E+02 0.1157937173645239E+02 + 0.1158735608230234E+02 0.1159532148825857E+02 0.1160326800271278E+02 0.1161119567389111E+02 0.1161910454985465E+02 + 0.1162699467850026E+02 0.1163486610756115E+02 0.1164271888460782E+02 0.1165055305704804E+02 0.1165836867212856E+02 + 0.1166616577693494E+02 0.1167394441839248E+02 0.1168170464326700E+02 0.1168944649816522E+02 0.1169717002953568E+02 + 0.1170487528366932E+02 0.1171256230670009E+02 0.1172023114460535E+02 0.1172788184320704E+02 0.1173551444817181E+02 + 0.1174312900501185E+02 0.1175072555908556E+02 0.1175830415559807E+02 0.1176586483960187E+02 0.1177340765599744E+02 + 0.1178093264953387E+02 0.1178843986480948E+02 0.1179592934627236E+02 0.1180340113822094E+02 0.1181085528480470E+02 + 0.1181829166269570E+02 0.1182570985953448E+02 0.1183311348562248E+02 0.1184049703658763E+02 0.1184786329267578E+02 + 0.1185521227437533E+02 0.1186254400205932E+02 0.1186985849598701E+02 0.1187715577630568E+02 0.1188443611784194E+02 + 0.1189169878246886E+02 0.1189894457481569E+02 0.1190617328225404E+02 0.1191338494670332E+02 0.1192057960986771E+02 + 0.1192775731323726E+02 0.1193491809808902E+02 0.1194206200548831E+02 0.1194918907628982E+02 0.1195629935113887E+02 + 0.1196339287047247E+02 0.1197046967452045E+02 0.1197752980330694E+02 0.1198457329665118E+02 0.1199160019416887E+02 + 0.1199861053527344E+02 0.1200560435917693E+02 0.1201258170489155E+02 0.1201954261123063E+02 0.1202648711680959E+02 + 0.1203341526004761E+02 0.1204032707916849E+02 0.1204722261220184E+02 0.1205410189698429E+02 0.1206096497116060E+02 + 0.1206781187218495E+02 0.1207464559802799E+02 0.1208146027002577E+02 0.1208825888009797E+02 0.1209504146494779E+02 + 0.1210180806109399E+02 0.1210855896537541E+02 0.1211529410378007E+02 0.1212201340030601E+02 0.1212871689296240E+02 + 0.1213540461963384E+02 0.1214207661808061E+02 0.1214873292593939E+02 0.1215537358072345E+02 0.1216199861982349E+02 + 0.1216860808050769E+02 0.1217520199992239E+02 0.1218178041509279E+02 0.1218834336292295E+02 0.1219489088019657E+02 + 0.1220142300357730E+02 0.1220793976960926E+02 0.1221444121471769E+02 0.1222092737520902E+02 0.1222739828727144E+02 + 0.1223385398697564E+02 0.1224029451027501E+02 0.1224671989300593E+02 0.1225313017088853E+02 0.1225952537952718E+02 + 0.1226590555441035E+02 0.1227227073091185E+02 0.1227862094429078E+02 0.1228495622969180E+02 0.1229127662214604E+02 + 0.1229758215657148E+02 0.1230387286777276E+02 0.1231014879044237E+02 0.1231640995916075E+02 0.1232265640839672E+02 + 0.1232888817250763E+02 0.1233510528574038E+02 0.1234130778223132E+02 0.1234749569600697E+02 0.1235366906098424E+02 + 0.1235982791097082E+02 0.1236597227966591E+02 0.1237210220066028E+02 0.1237821770743661E+02 0.1238431883337027E+02 + 0.1239040561172962E+02 0.1239647807567605E+02 0.1240253625826483E+02 0.1240858019244517E+02 0.1241460991106090E+02 + 0.1242062544685069E+02 0.1242662683244833E+02 0.1243261410038329E+02 0.1243858728308130E+02 0.1244454641286415E+02 + 0.1245049152195065E+02 0.1245642264245671E+02 0.1246233980639583E+02 0.1246824304567928E+02 0.1247413239211681E+02 + 0.1248000787741680E+02 0.1248586953318652E+02 0.1249171739093289E+02 0.1249755148206230E+02 0.1250337183788155E+02 + 0.1250917848959775E+02 0.1251497146831911E+02 0.1252075080505461E+02 0.1252651653071523E+02 0.1253226867611377E+02 + 0.1253800727196519E+02 0.1254373234888717E+02 0.1254944393740030E+02 0.1255514206792864E+02 0.1256082677079984E+02 + 0.1256649807624557E+02 0.1257215601440174E+02 0.1257780061530919E+02 0.1258343190891375E+02 0.1258904992506636E+02 + 0.1259465469352414E+02 0.1260024624394981E+02 0.1260582460591276E+02 0.1261138980888892E+02 0.1261694188226133E+02 + 0.1262248085532045E+02 0.1262800675726433E+02 0.1263351961719898E+02 0.1263901946413904E+02 0.1264450285631671E+02 + 0.1264997675865174E+02 0.1265543773449255E+02 0.1266088581249014E+02 0.1266632102120516E+02 0.1267174338910899E+02 + 0.1267715294458313E+02 0.1268254971592008E+02 0.1268793373132342E+02 0.1269330501890832E+02 0.1269866360670164E+02 + 0.1270400952264229E+02 0.1270934279458158E+02 0.1271466345028335E+02 0.1271997151742474E+02 0.1272526702359572E+02 + 0.1273054999630008E+02 0.1273582044112639E+02 0.1274107829127974E+02 0.1274632368547512E+02 0.1275155665077283E+02 + 0.1275677721414707E+02 0.1276198540248610E+02 0.1276718124259236E+02 0.1277236476118314E+02 0.1277753598489035E+02 + 0.1278269494026117E+02 0.1278784165375827E+02 0.1279297615176009E+02 0.1279809846056095E+02 0.1280320860637152E+02 + 0.1280830661531907E+02 0.1281339251344765E+02 0.1281846632671840E+02 0.1282352808100990E+02 0.1282857780211833E+02 + 0.1283361551575781E+02 0.1283864124756066E+02 0.1284365502307763E+02 0.1284865686777834E+02 0.1285364680705105E+02 + 0.1285862486620364E+02 0.1286359107046338E+02 0.1286854544497717E+02 0.1287348801481206E+02 0.1287841880495558E+02 + 0.1288333784031538E+02 0.1288824514572031E+02 0.1289314074592015E+02 0.1289802466558600E+02 0.1290289692931037E+02 + 0.1290775756160805E+02 0.1291260658691528E+02 0.1291744402959128E+02 0.1292226991391726E+02 0.1292708426409754E+02 + 0.1293188710425972E+02 0.1293667845845432E+02 0.1294145835065556E+02 0.1294622680476155E+02 0.1295098384459444E+02 + 0.1295572949390062E+02 0.1296046377635092E+02 0.1296518671554123E+02 0.1296989833499209E+02 0.1297459865814951E+02 + 0.1297928770838488E+02 0.1298396550899552E+02 0.1298863208320455E+02 0.1299328745416105E+02 0.1299793164494091E+02 + 0.1300256467854653E+02 0.1300718657790715E+02 0.1301179736587904E+02 0.1301639706524610E+02 0.1302098569871943E+02 + 0.1302556328893826E+02 0.1303012985846953E+02 0.1303468542980876E+02 0.1303923002537965E+02 0.1304376366753469E+02 + 0.1304828637855533E+02 0.1305279818065219E+02 0.1305729909596507E+02 0.1306178914656352E+02 0.1306626835444681E+02 + 0.1307073674154426E+02 0.1307519432971517E+02 0.1307964114074970E+02 0.1308407719636832E+02 0.1308850251822266E+02 + 0.1309291712789514E+02 0.1309732104689959E+02 0.1310172496590404E+02 0.1310612888490850E+02 0.1311053280391295E+02 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2350503764662797E-10 0.1452741565148498E-08 0.1598024605657181E-07 0.8670887247915710E-07 + 0.3194268290355064E-06 0.9210999532108705E-06 0.2243032243257230E-05 0.4826533736759059E-05 0.9449280963997414E-05 + 0.1717086310497067E-04 0.2937628005930804E-04 0.4781640004850213E-04 0.7464459701436190E-04 0.1124489746320072E-03 + 0.1642797466831127E-03 0.2336714851009560E-03 0.3246600692852489E-03 0.4417942752036344E-03 0.5901420321021944E-03 + 0.7752914499470295E-03 0.1003346783485080E-02 0.1280919550391384E-02 0.1615115062592291E-02 0.2013514662642524E-02 + 0.2484153982012019E-02 0.3035497556237696E-02 0.3676410143962806E-02 0.4416125103690986E-02 0.5264210184320288E-02 + 0.6230531083824742E-02 0.7325213125386473E-02 0.8558601392363368E-02 0.9941219653166928E-02 0.1148372839483666E-01 + 0.1319688227020127E-01 0.1509148724834461E-01 0.1717835774193908E-01 0.1946827396813322E-01 0.2197193978231332E-01 + 0.2469994120640449E-01 0.2766270585561205E-01 0.3087046344978465E-01 0.3433320757803945E-01 0.3806065886804223E-01 + 0.4206222969448004E-01 0.4634699054488188E-01 0.5092363814510472E-01 0.5580046543156136E-01 0.6098533344267084E-01 + 0.6648564518809444E-01 0.7230832154110638E-01 0.7845977918695805E-01 0.8494591064833676E-01 0.9177206639800155E-01 + 0.9894303905839608E-01 0.1064630496784886E+00 0.1143357360692630E+00 0.1225641431711653E+00 0.1311507154193881E+00 + 0.1400972910661206E+00 0.1494050984128002E+00 0.1590747538999337E+00 0.1691062619971989E+00 0.1794990168322592E+00 + 0.1902518054930074E+00 0.2013628129347618E+00 0.2128296284212524E+00 0.2246492534260200E+00 0.2368181109190946E+00 + 0.2493320559624748E+00 0.2621863875369867E+00 0.2753758615225286E+00 0.2888947047534727E+00 0.3027366300710904E+00 + 0.3168948522952475E+00 0.3313621050382702E+00 0.3461306582847914E+00 0.3611923366625136E+00 0.3765385383301647E+00 + 0.3921602544104397E+00 0.4080480888974157E+00 0.4241922789697600E+00 0.4405827156430124E+00 0.4572089646963136E+00 + 0.4740602878111100E+00 0.4911256638616449E+00 0.5083938102993529E+00 0.5258532045756759E+00 0.5434921055502246E+00 + 0.5612985748336912E+00 0.5792604980173683E+00 0.5973656057436424E+00 0.6156014945742982E+00 0.6339556476159732E+00 + 0.6524154548645443E+00 0.6709682332326954E+00 0.6896012462273114E+00 0.7083017232457365E+00 0.7270568784622643E+00 + 0.7458539292785299E+00 0.7646801143137046E+00 0.7835227109126022E+00 0.8023690521519213E+00 0.8212065433269309E+00 + 0.8400226779029110E+00 0.8588050529176166E+00 0.8775413838228915E+00 0.8962195187553934E+00 0.9148274522281129E+00 + 0.9333533382360560E+00 0.9517855027710543E+00 0.9701124557421923E+00 0.9883229022998167E+00 0.1006405753562465E+01 + 0.1024350136747383E+01 0.1042145404706545E+01 0.1059781144871260E+01 0.1077247187609600E+01 0.1094533614001869E+01 + 0.1111630763040373E+01 0.1128529238260637E+01 0.1145219913812065E+01 0.1161693939976847E+01 0.1177942748146633E+01 + 0.1193958055267189E+01 0.1209731867761823E+01 0.1225256484945006E+01 0.1240524501938026E+01 0.1255528812099049E+01 + 0.1270262608980346E+01 0.1284719387825761E+01 0.1298892946621899E+01 0.1312777386716678E+01 0.1326367113019209E+01 + 0.1339656833795096E+01 0.1352641560071424E+01 0.1365316604665792E+01 0.1377677580853886E+01 0.1389720400690019E+01 + 0.1401441272995214E+01 0.1412836701027270E+01 0.1423903479847286E+01 0.1434638693397013E+01 0.1445039711301291E+01 + 0.1455104185409776E+01 0.1464830046091919E+01 0.1474215498299109E+01 0.1483259017407622E+01 0.1491959344855860E+01 + 0.1500315483589179E+01 0.1508326693325296E+01 0.1515992485653126E+01 0.1523312618977543E+01 0.1530287093322397E+01 + 0.1536916145003750E+01 0.1543200241185077E+01 0.1549140074325868E+01 0.1554736556534737E+01 0.1559990813837915E+01 + 0.1564904180373601E+01 0.1569478192522416E+01 0.1573714582983838E+01 0.1577615274808202E+01 0.1581182375393509E+01 + 0.1584418170455991E+01 0.1587325117983052E+01 0.1589905842176854E+01 0.1592163127396545E+01 0.1594099912106772E+01 + 0.1595719282839819E+01 0.1597024468178396E+01 0.1598018832765788E+01 0.1598705871349761E+01 0.1599089202866354E+01 + 0.1599172564569312E+01 0.1598959806210704E+01 0.1598454884277914E+01 0.1597661856291940E+01 0.1596584875171653E+01 + 0.1595228183668366E+01 0.1593596108874842E+01 0.1591693056812536E+01 0.1589523507100701E+01 0.1587092007710641E+01 + 0.1584403169808198E+01 0.1581461662687349E+01 0.1578272208797470E+01 0.1574839578866685E+01 0.1571168587123450E+01 + 0.1567264086618331E+01 0.1563130964647693E+01 0.1558774138280876E+01 0.1554198549992189E+01 0.1549409163398889E+01 + 0.1544410959106127E+01 0.1539208930659677E+01 0.1533808080607080E+01 0.1528213416667707E+01 0.1522429948012042E+01 + 0.1516462681650386E+01 0.1510316618931021E+01 0.1503996752147732E+01 0.1497508061256460E+01 0.1490855510700755E+01 + 0.1484044046345540E+01 0.1477078592518635E+01 0.1469964049159342E+01 0.1462705289073315E+01 0.1455307155292826E+01 + 0.1447774458541496E+01 0.1440111974802394E+01 0.1432324442988392E+01 0.1424416562713602E+01 0.1416392992164560E+01 + 0.1408258346069873E+01 0.1400017193766902E+01 0.1391674057364033E+01 0.1383233409997026E+01 0.1374699674177898E+01 + 0.1366077220234727E+01 0.1357370364840755E+01 0.1348583369631108E+01 0.1339720439905439E+01 0.1330785723414737E+01 + 0.1321783309230582E+01 0.1312717226695031E+01 0.1303591444449351E+01 0.1294409869539786E+01 0.1285176346598528E+01 + 0.1275894657098056E+01 0.1266568518676988E+01 0.1257201584535619E+01 0.1247797442899263E+01 0.1238359616547584E+01 + 0.1228891562408019E+01 0.1219396671211496E+01 0.1209878267208578E+01 0.1200339607944202E+01 0.1190783884089205E+01 + 0.1181214219326823E+01 0.1171633670292365E+01 0.1162045226564264E+01 0.1152451810704780E+01 0.1142856278348570E+01 + 0.1133261418337408E+01 0.1123669952899346E+01 0.1114084537870646E+01 0.1104507762958775E+01 0.1094942152044870E+01 + 0.1085390163524009E+01 0.1075854190681740E+01 0.1066336562105254E+01 0.1056839542127690E+01 0.1047365331304049E+01 + 0.1037916066917227E+01 0.1028493823512701E+01 0.1019100613460447E+01 0.1009738387542688E+01 0.1000409035566070E+01 + 0.9911143869969610E+00 0.9818562116185301E+00 0.9726362202083267E+00 0.9634560652350970E+00 0.9543173415736288E+00 + 0.9452215872364120E+00 0.9361702841209427E+00 0.9271648587715566E+00 0.9182066831546644E+00 0.9092970754463097E+00 + 0.9004373008310244E+00 0.8916285723109384E+00 0.8828720515241635E+00 0.8741688495714935E+00 0.8655200278504954E+00 + 0.8569265988960664E+00 0.8483895272266132E+00 0.8399097301949807E+00 0.8314880788433289E+00 0.8231253987611650E+00 + 0.8148224709457564E+00 0.8065800326641964E+00 0.7983987783164219E+00 0.7902793602984723E+00 0.7822223898653531E+00 + 0.7742284379928720E+00 0.7662980362378170E+00 0.7584316775959118E+00 0.7506298173569868E+00 0.7428928739568187E+00 + 0.7352212298251275E+00 0.7276152322292518E+00 0.7200751941130188E+00 0.7126013949303633E+00 0.7051940814732806E+00 + 0.6978534686936988E+00 0.6905797405188852E+00 0.6833730506600221E+00 0.6762335234136188E+00 0.6691612544554096E+00 + 0.6621563116264519E+00 0.6552187357111161E+00 0.6483485412067125E+00 0.6415457170844840E+00 0.6348102275417313E+00 + 0.6281420127448483E+00 0.6215409895630656E+00 0.6150070522926947E+00 0.6085400733717113E+00 0.6021399040845107E+00 + 0.5958063752566826E+00 0.5895392979396676E+00 0.5833384640851877E+00 0.5772036472093250E+00 0.5711346030461549E+00 + 0.5651310701908592E+00 0.5591927707322315E+00 0.5533194108745153E+00 0.5475106815485299E+00 0.5417662590120353E+00 + 0.5360858054393003E+00 0.5304689694998603E+00 0.5249153869264497E+00 0.5194246810720941E+00 0.5139964634563777E+00 + 0.5086303343008993E+00 0.5033258830539155E+00 0.4980826889042317E+00 0.4929003212843441E+00 0.4877783403628898E+00 + 0.4827162975264554E+00 0.4777137358507827E+00 0.4727701905614446E+00 0.4678851894840552E+00 0.4630582534840750E+00 + 0.4582888968962981E+00 0.4535766279440972E+00 0.4489209491485098E+00 0.4443213577272558E+00 0.4397773459837845E+00 + 0.4352884016864413E+00 0.4308540084378585E+00 0.4264736460346724E+00 0.4221467908176804E+00 0.4178729160125361E+00 + 0.4136514920611062E+00 0.4094819869436024E+00 0.4053638664915989E+00 0.4012965946920645E+00 0.3972796339825281E+00 + 0.3933124455374964E+00 0.3893944895462572E+00 0.3855252254821869E+00 0.3817041123636960E+00 0.3779306090069412E+00 + 0.3742041742704262E+00 0.3705242672916375E+00 0.3668903477158274E+00 0.3633018759170965E+00 0.3597583132118892E+00 + 0.3562591220650529E+00 0.3528037662885790E+00 0.3493917112331675E+00 0.3460224239727477E+00 0.3426953734820877E+00 + 0.3394100308076194E+00 0.3361658692316251E+00 0.3329623644299036E+00 0.3297989946230563E+00 0.3266752407215223E+00 + 0.3235905864644950E+00 0.3205445185528428E+00 0.3175365267761750E+00 0.3145661041341699E+00 0.3116327469522978E+00 + 0.3087359549920661E+00 0.3058752315559112E+00 0.3030500835868565E+00 0.3002600217630693E+00 0.2975045605874296E+00 + 0.2947832184722352E+00 0.2920955178191660E+00 0.2894409850946181E+00 0.2868191509005325E+00 0.2842295500408273E+00 + 0.2816717215835535E+00 0.2791452089188812E+00 0.2766495598130334E+00 0.2741843264582723E+00 0.2717490655190478E+00 + 0.2693433381744174E+00 0.2669667101568407E+00 0.2646187517874495E+00 0.2622990380079024E+00 0.2600071484089175E+00 + 0.2577426672555859E+00 0.2555051835095635E+00 0.2532942908482358E+00 0.2511095876809479E+00 0.2489506771623981E+00 + 0.2468171672032794E+00 0.2447086704782614E+00 0.2426248044314016E+00 0.2405651912790701E+00 0.2385294580104723E+00 + 0.2365172363858518E+00 0.2345281629324596E+00 0.2325618789383613E+00 0.2306180304441682E+00 0.2286962682327625E+00 + 0.2267962478170977E+00 0.2249176294261405E+00 0.2230600779890333E+00 0.2212232631175415E+00 0.2194068590868594E+00 + 0.2176105448148379E+00 0.2158340038397009E+00 0.2140769242963177E+00 0.2123389988910903E+00 0.2106199248755169E+00 + 0.2089194040184958E+00 0.2072371425774233E+00 0.2055728512681448E+00 0.2039262452338156E+00 0.2022970440127238E+00 + 0.2006849715051299E+00 0.1990897559391716E+00 0.1975111298358903E+00 0.1959488299734197E+00 0.1944025973503926E+00 + 0.1928721771486053E+00 0.1913573186949898E+00 0.1898577754229339E+00 0.1883733048329959E+00 0.1869036684530497E+00 + 0.1854486317979078E+00 0.1840079643284546E+00 0.1825814394103312E+00 0.1811688342722097E+00 0.1797699299636905E+00 + 0.1783845113128567E+00 0.1770123668835237E+00 0.1756532889322104E+00 0.1743070733648679E+00 0.1729735196933954E+00 + 0.1716524309919727E+00 0.1703436138532354E+00 0.1690468783443259E+00 0.1677620379628421E+00 0.1664889095927099E+00 + 0.1652273134600088E+00 0.1639770730887696E+00 0.1627380152567701E+00 0.1615099699513493E+00 0.1602927703252654E+00 + 0.1590862526526123E+00 0.1578902562848216E+00 0.1567046236067624E+00 0.1555291999929633E+00 0.1543638337639696E+00 + 0.1532083761428563E+00 0.1520626812119101E+00 0.1509266058694993E+00 0.1498000097871428E+00 0.1486827553667961E+00 + 0.1475747076983654E+00 0.1464757345174640E+00 0.1453857061634240E+00 0.1443044955375730E+00 0.1432319780617891E+00 + 0.1421680316373446E+00 0.1411125366040483E+00 0.1400653756996955E+00 0.1390264340198362E+00 0.1379955989778688E+00 + 0.1369727602654673E+00 0.1359578098133525E+00 0.1349506417524104E+00 0.1339511523751675E+00 0.1329592400976282E+00 + 0.1319748054214808E+00 0.1309977508966756E+00 0.1300279810843844E+00 0.1290654025203415E+00 0.1281099236785748E+00 + 0.1271614549355259E+00 0.1262199085345698E+00 0.1252851985509296E+00 0.1243572408569959E+00 0.1234359530880505E+00 + 0.1225212546083961E+00 0.1216130664778956E+00 0.1207113114189237E+00 0.1198159137837281E+00 0.1189267995222068E+00 + 0.1180438961500998E+00 0.1171671327175942E+00 0.1162964397783483E+00 0.1154317493589289E+00 0.1145729949286663E+00 + 0.1137201113699259E+00 0.1128730349487938E+00 0.1120317032861783E+00 0.1111960553293266E+00 0.1103660313237529E+00 + 0.1095415727855802E+00 0.1087226224742927E+00 0.1079091243658972E+00 0.1071010236264925E+00 0.1062982665862460E+00 + 0.1055008007137718E+00 0.1047085745909144E+00 0.1039215378879289E+00 0.1031396413390617E+00 0.1023628367185243E+00 + 0.1015910768168619E+00 0.1008243154177097E+00 0.1000625072749386E+00 0.9930560809018427E-01 0.9855357449075822E-01 + 0.9780636400793745E-01 0.9706393505562982E-01 0.9632624690941162E-01 0.9559325968593356E-01 0.9486493432269383E-01 + 0.9414123255817297E-01 0.9342211691232764E-01 0.9270755066744044E-01 0.9199749784932158E-01 0.9129192320885827E-01 + 0.9059079220391024E-01 0.8989407098154546E-01 0.8920172636061409E-01 0.8851372581465511E-01 0.8783003745513447E-01 + 0.8715063001500779E-01 0.8647547283260665E-01 0.8580453583584287E-01 0.8513778952672810E-01 0.8447520496620298E-01 + 0.8381675375927530E-01 0.8316240804045885E-01 0.8251214045951316E-01 0.8186592416747822E-01 0.8122373280299988E-01 + 0.8058554047894315E-01 0.7995132176928955E-01 0.7932105169631275E-01 0.7869470571803144E-01 0.7807225971593283E-01 + 0.7745368998296467E-01 0.7683897321179178E-01 0.7622808648331135E-01 0.7562100725542614E-01 0.7501771335206921E-01 + 0.7441818295247755E-01 0.7382239458071076E-01 0.7323032709541087E-01 0.7264195967979867E-01 0.7205727183190487E-01 + 0.7147624335502985E-01 0.7089885434843042E-01 0.7032508519822850E-01 0.6975491656853922E-01 0.6918832939281314E-01 + 0.6862530486539103E-01 0.6806582443326617E-01 0.6750986978805110E-01 0.6695742285814540E-01 0.6640846580110123E-01 + 0.6586298099618196E-01 0.6532095103711212E-01 0.6478235872501446E-01 0.6424718706153042E-01 0.6371541924212147E-01 + 0.6318703864954746E-01 0.6266202884751911E-01 0.6214037357452046E-01 0.6162205673779986E-01 0.6110706240752450E-01 + 0.6059537481109686E-01 0.6008697832762830E-01 0.5958185748256901E-01 0.5907999694248869E-01 0.5858138151000727E-01 + 0.5808599611887154E-01 0.5759382582917469E-01 0.5710485582271634E-01 0.5661907139850073E-01 0.5613645796836825E-01 + 0.5565700105276017E-01 0.5518068627661225E-01 0.5470749936537444E-01 0.5423742614115482E-01 0.5377045251898517E-01 + 0.5330656450320408E-01 0.5284574818395761E-01 0.5238798973381230E-01 0.5193327540447994E-01 0.5148159152365149E-01 + 0.5103292449193595E-01 0.5058726077990446E-01 0.5014458692523559E-01 0.4970488952995948E-01 0.4926815525779950E-01 + 0.4883437083160901E-01 0.4840352303089959E-01 0.4797559868946120E-01 0.4755058469306943E-01 0.4712846797727979E-01 + 0.4670923552530574E-01 0.4629287436597942E-01 0.4587937157179187E-01 0.4546871425701189E-01 0.4506088957588125E-01 + 0.4465588472088415E-01 0.4425368692108926E-01 0.4385428344056262E-01 0.4345766157684944E-01 0.4306380865952269E-01 + 0.4267271204879778E-01 0.4228435913421057E-01 0.4189873733335742E-01 0.4151583409069603E-01 0.4113563687640473E-01 + 0.4075813318529899E-01 0.4038331053580396E-01 0.4001115646898086E-01 0.3964165854760631E-01 0.3927480435530239E-01 + 0.3891058149571723E-01 0.3854897759175296E-01 0.3818998028484157E-01 0.3783357723426573E-01 0.3747975611652434E-01 + 0.3712850462474054E-01 0.3677981046811218E-01 0.3643366137140177E-01 0.3609004507446641E-01 0.3574894933182556E-01 + 0.3541036191226535E-01 0.3507427059847887E-01 0.3474066318674111E-01 0.3440952748661676E-01 0.3408085132070126E-01 + 0.3375462252439219E-01 0.3343082894569176E-01 0.3310945844503797E-01 0.3279049889516447E-01 0.3247393818098731E-01 + 0.3215976419951815E-01 0.3184796485980308E-01 0.3153852808288556E-01 0.3123144180179359E-01 0.3092669396154863E-01 + 0.3062427251919747E-01 0.3032416544386438E-01 0.3002636071682391E-01 0.2973084633159302E-01 0.2943761029404197E-01 + 0.2914664062252300E-01 0.2885792534801624E-01 0.2857145251429220E-01 0.2828721017808998E-01 0.2800518640931039E-01 + 0.2772536929122391E-01 0.2744774692069189E-01 0.2717230740840119E-01 0.2689903887911129E-01 0.2662792947191326E-01 + 0.2635896734050006E-01 0.2609214065344760E-01 0.2582743759450599E-01 0.2556484636290022E-01 0.2530435517364029E-01 + 0.2504595225783962E-01 0.2478962586304191E-01 0.2453536425355501E-01 0.2428315571079263E-01 0.2403298853362201E-01 + 0.2378485103871834E-01 0.2353873156092471E-01 0.2329461845361733E-01 0.2305250008907579E-01 0.2281236485885801E-01 + 0.2257420117417889E-01 0.2233799746629312E-01 0.2210374218688127E-01 0.2187142380843883E-01 0.2164103082466791E-01 + 0.2141255175087165E-01 0.2118597512435002E-01 0.2096128950479806E-01 0.2073848347470486E-01 0.2051754563975416E-01 + 0.2029846462922549E-01 0.2008122909639606E-01 0.1986582771894261E-01 0.1965224919934375E-01 0.1944048226528158E-01 + 0.1923051567004319E-01 0.1902233819292149E-01 0.1881593863961467E-01 0.1861130584262509E-01 0.1840842866165638E-01 + 0.1820729598400922E-01 0.1800789672497538E-01 0.1781021982822961E-01 0.1761425426621972E-01 0.1741998904055397E-01 + 0.1722741318238660E-01 0.1703651575280017E-01 0.1684728584318532E-01 0.1665971257561794E-01 0.1647378510323276E-01 + 0.1628949261059417E-01 0.1610682431406360E-01 0.1592576946216329E-01 0.1574631733593689E-01 0.1556845724930608E-01 + 0.1539217854942354E-01 0.1521747061702217E-01 0.1504432286676001E-01 0.1487272474756165E-01 0.1470266574295493E-01 + 0.1453413537140393E-01 0.1436712318663735E-01 0.1420161877797267E-01 0.1403761177063589E-01 0.1387509182607664E-01 + 0.1371404864227910E-01 0.1355447195406791E-01 0.1339635153340976E-01 0.1323967718971016E-01 0.1308443877010535E-01 + 0.1293062615974990E-01 0.1277822928209887E-01 0.1262723809918580E-01 0.1247764261189538E-01 0.1232943286023138E-01 + 0.1218259892357987E-01 0.1203713092096717E-01 0.1189301901131328E-01 0.1175025339368011E-01 0.1160882430751480E-01 + 0.1146872203288826E-01 0.1132993689072848E-01 0.1119245924304928E-01 0.1105627949317382E-01 0.1092138808595317E-01 + 0.1078777550798031E-01 0.1065543228779879E-01 0.1052434899610681E-01 0.1039451624595617E-01 0.1026592469294671E-01 + 0.1013856503541558E-01 0.1001242801462182E-01 0.9887504414926333E-02 0.9763785063966725E-02 0.9641260832827890E-02 + 0.9519922636207538E-02 0.9399761432577210E-02 0.9280768224338752E-02 0.9162934057976000E-02 0.9046250024202221E-02 + 0.8930707258102832E-02 0.8816296939273676E-02 0.8703010291955119E-02 0.8590838585161509E-02 0.8479773132806546E-02 + 0.8369805293824308E-02 0.8260926472285997E-02 0.8153128117512804E-02 0.8046401724184376E-02 0.7940738832443478E-02 + 0.7836131027996606E-02 0.7732569942210602E-02 0.7630047252205678E-02 0.7528554680944333E-02 0.7428083997316856E-02 + 0.7328627016223001E-02 0.7230175598650108E-02 0.7132721651747814E-02 0.7036257128899153E-02 0.6940774029788536E-02 + 0.6846264400466227E-02 0.6752720333409701E-02 0.6660133967581916E-02 0.6568497488486375E-02 0.6477803128219479E-02 + 0.6388043165519663E-02 0.6299209925814047E-02 0.6211295781262146E-02 0.6124293150797016E-02 0.6038194500163917E-02 + 0.5952992341956366E-02 0.5868679235650055E-02 0.5785247787634298E-02 0.5702690651241371E-02 0.5621000526773856E-02 + 0.5540170161529816E-02 0.5460192349826328E-02 0.5381059933021076E-02 0.5302765799532243E-02 0.5225302884857029E-02 + 0.5148664171588471E-02 0.5072842689431090E-02 0.4997831515215207E-02 0.4923623772910095E-02 0.4850212633636272E-02 + 0.4777591315676702E-02 0.4705753084487369E-02 0.4634691252707118E-02 0.4564399180166933E-02 0.4494870273898941E-02 + 0.4426097988144961E-02 0.4358075824365064E-02 0.4290797331245945E-02 0.4224256104709619E-02 0.4158445787922197E-02 + 0.4093360071303100E-02 0.4028992692534918E-02 0.3965337436573796E-02 0.3902388135660784E-02 0.3840138669334105E-02 + 0.3778582964442547E-02 0.3717714995160261E-02 0.3657528783002880E-02 0.3598018396845369E-02 0.3539177952941635E-02 + 0.3481001614946027E-02 0.3423483593937147E-02 0.3366618148443765E-02 0.3310399584473416E-02 0.3254822255543565E-02 + 0.3199880562715664E-02 0.3145568954632342E-02 0.3091881927557716E-02 0.3038814025421337E-02 0.2986359839865667E-02 + 0.2934514010297470E-02 0.2883271223943334E-02 0.2832626215909399E-02 0.2782573769245732E-02 0.2733108715015361E-02 + 0.2684225932368273E-02 0.2635920348620736E-02 0.2588186939339922E-02 0.2541020728434335E-02 0.2494416788250113E-02 + 0.2448370239673485E-02 0.2402876252239763E-02 0.2357930044248895E-02 0.2313526882888074E-02 0.2269662084361452E-02 + 0.2226331014027437E-02 0.2183529086543647E-02 0.2141251766019886E-02 0.2099494566179429E-02 0.2058253050528833E-02 + 0.2017522832536582E-02 0.1977299575820819E-02 0.1937578994346416E-02 0.1898356852631761E-02 0.1859628965965341E-02 + 0.1821391200632576E-02 0.1783639474153031E-02 0.1746369755528287E-02 0.1709578065500809E-02 0.1673260476823867E-02 + 0.1637413114542927E-02 0.1602032156288575E-02 0.1567113832581223E-02 0.1532654427147850E-02 0.1498650277250755E-02 + 0.1465097774028671E-02 0.1431993362850165E-02 0.1399333543679485E-02 0.1367114871454921E-02 0.1335333956479567E-02 + 0.1303987464824598E-02 0.1273072118744786E-02 0.1242584697106271E-02 0.1212522035826240E-02 0.1182881028324278E-02 + 0.1153658625985074E-02 0.1124851838631879E-02 0.1096457735010339E-02 0.1068473443281882E-02 0.1040896151525936E-02 + 0.1013723108250083E-02 0.9869516229069582E-03 0.9605790664167954E-03 0.9346028716940452E-03 0.9090205341765010E-03 + 0.8838296123550832E-03 0.8590277283020786E-03 0.8346125681955534E-03 0.8105818828371373E-03 0.7869334881601800E-03 + 0.7636652657249203E-03 0.7407751631967363E-03 0.7182611948033279E-03 0.6961214417659799E-03 0.6743540526996259E-03 + 0.6529572439758464E-03 0.6319293000421489E-03 0.6112685736903467E-03 0.5909734862658870E-03 0.5710425278092155E-03 + 0.5514742571193334E-03 0.5322673017285347E-03 0.5134203577763651E-03 0.4949321897694443E-03 0.4768016302125221E-03 + 0.4590275790946831E-03 0.4416090032129194E-03 0.4245449353136761E-03 0.4078344730309316E-03 0.3914767775974666E-03 + 0.3754710723036193E-03 0.3598166406754878E-03 0.3445128243419585E-03 0.3295590205570407E-03 0.3149546793411112E-03 + 0.3006993002013562E-03 0.2867924283882840E-03 0.2732336506415988E-03 0.2600225903747107E-03 0.2471589022432513E-03 + 0.2346422660385661E-03 0.2224723798427698E-03 0.2106489523774314E-03 0.1991716944731751E-03 0.1880403095829506E-03 + 0.1772544832569928E-03 0.1668138714930798E-03 0.1567180878715900E-03 0.1469666893810824E-03 0.1375591608372710E-03 + 0.1284948977961454E-03 0.1197731878613226E-03 0.1113931902866863E-03 0.1033539137784803E-03 0.9565419240704367E-04 + 0.8829265954769630E-04 0.8126771978413778E-04 0.7457751872672617E-04 0.6821991072362678E-04 0.6219242447627770E-04 + 0.5649222661344906E-04 0.5111608333233986E-04 0.4606032028242377E-04 0.4132078095054316E-04 0.3689278390632745E-04 + 0.3277107938782920E-04 0.2894980585093507E-04 0.2542244727468145E-04 0.2218179221009314E-04 0.1921989578338595E-04 + 0.1652804611495441E-04 0.1409673689099332E-04 0.1191564811913617E-04 0.9973637403230573E-05 0.8258744369264157E-05 + 0.6758211140689631E-05 0.5458521963065276E-05 0.4345465168603044E-05 0.3404220589992921E-05 0.2619475202729796E-05 + 0.1975569103509067E-05 0.1456672814492850E-05 0.1046995232007964E-05 0.7310192213004316E-06 0.4937588492987344E-06 + 0.3210285891032542E-06 0.1997107219284094E-06 0.1180030350752796E-06 0.6562550627018659E-07 0.3396305969110393E-07 + 0.1612304561662313E-07 0.6892228656363058E-08 0.2589636663001748E-08 0.8280887390551865E-09 0.2156614040605737E-09 + 0.4301139703498805E-10 0.6010118005039632E-11 0.5149083260942099E-12 0.2193180426472887E-13 0.3274661750280784E-15 + 0.9138109562588437E-18 0.1354704193168576E-21 0.5668023630192864E-28 0.1003507143230543E-40 0.5696705688614969E-79 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 1 1.0080 1.8000 fcc + 0.0000000000000000E+00 -0.1535560579048078E+00 -0.2907237616945244E+00 -0.4159976694362098E+00 -0.5313742240924204E+00 + -0.6381516341634162E+00 -0.7372865497340048E+00 -0.8295323942693905E+00 -0.9155075568639930E+00 -0.9957340210656841E+00 + -0.1070661374993902E+01 -0.1140682768426532E+01 -0.1206146070115003E+01 -0.1267361986331669E+01 -0.1324610161159111E+01 + -0.1378143882981543E+01 -0.1428193796698535E+01 -0.1474970886958801E+01 -0.1518668914237085E+01 -0.1559466431801390E+01 + -0.1597528475905044E+01 -0.1633007997183788E+01 -0.1666047084236993E+01 -0.1696778018255523E+01 -0.1725324188761563E+01 + -0.1751800894031140E+01 -0.1776316044902340E+01 -0.1798970786973415E+01 -0.1819860053348930E+01 -0.1839073057876778E+01 + -0.1856693737076276E+01 -0.1872801147573207E+01 -0.1887469824748019E+01 -0.1900770107406360E+01 -0.1912768432550330E+01 + -0.1923527603729046E+01 -0.1933107035951585E+01 -0.1941562979733216E+01 -0.1948948726501137E+01 -0.1955314797295812E+01 + -0.1960709116458849E+01 -0.1965177171789682E+01 -0.1968762162475479E+01 -0.1971505135945817E+01 -0.1973445114672207E+01 + -0.1974619213818786E+01 -0.1975062750551728E+01 -0.1974809345728893E+01 -0.1973891018616083E+01 -0.1972338275210313E+01 + -0.1970180190692498E+01 -0.1967444486480829E+01 -0.1964157602310837E+01 -0.1960344763727966E+01 -0.1956030045342894E+01 + -0.1951236430167903E+01 -0.1945985865324263E+01 -0.1940299314385106E+01 -0.1934196806595530E+01 -0.1927697483190939E+01 + -0.1920819641016471E+01 -0.1913580773633311E+01 -0.1905997610082929E+01 -0.1898086151466418E+01 -0.1889861705483819E+01 + -0.1881338919067047E+01 -0.1872531809229777E+01 -0.1863453792248377E+01 -0.1854117711279363E+01 -0.1844535862511214E+01 + -0.1834720019941148E+01 -0.1824681458861012E+01 -0.1814430978130464E+01 -0.1803978921310083E+01 -0.1793335196722089E+01 + -0.1782509296501631E+01 -0.1771510314697401E+01 -0.1760346964476296E+01 -0.1749027594483329E+01 -0.1737560204404532E+01 + -0.1725952459777540E+01 -0.1714211706091635E+01 -0.1702344982216385E+01 -0.1690359033195583E+01 -0.1678260322440748E+01 + -0.1666055043356523E+01 -0.1653749130428169E+01 -0.1641348269799635E+01 -0.1628857909368793E+01 -0.1616283268425060E+01 + -0.1603629346852960E+01 -0.1590900933923877E+01 -0.1578102616696916E+01 -0.1565238788048639E+01 -0.1552313654350187E+01 + -0.1539331242809444E+01 -0.1526295408494650E+01 -0.1513209841055223E+01 -0.1500078071154424E+01 -0.1486903476627897E+01 + -0.1473689288381174E+01 -0.1460438596038697E+01 -0.1447154353356060E+01 -0.1433839383406718E+01 -0.1420496383553594E+01 + -0.1407127930215773E+01 -0.1393736483439595E+01 -0.1380324391283206E+01 -0.1366893894023143E+01 -0.1353447128190937E+01 + -0.1339986130447453E+01 -0.1326512841302277E+01 -0.1313029108685023E+01 -0.1299536691375160E+01 -0.1286037262296563E+01 + -0.1272532411682773E+01 -0.1259023650118594E+01 -0.1245512411463359E+01 -0.1232000055660992E+01 -0.1218487871441779E+01 + -0.1204977078920362E+01 -0.1191468832094503E+01 -0.1177964221248664E+01 -0.1164464275266519E+01 -0.1150969963856213E+01 + -0.1137482199691838E+01 -0.1124001840474834E+01 -0.1110529690918452E+01 -0.1097066504658454E+01 -0.1083612986093118E+01 + -0.1070169792155417E+01 -0.1056737534020013E+01 -0.1043316778747819E+01 -0.1029908050870580E+01 -0.1016511833917833E+01 + -0.1003128571888578E+01 -0.9897586706698354E+00 -0.9764024994041254E+00 -0.9630603918080221E+00 -0.9497326474434862E+00 + -0.9364195329439393E+00 -0.9231212831968543E+00 -0.9098381024844113E+00 -0.8965701655839697E+00 -0.8833176188297485E+00 + -0.8700805811373453E+00 -0.8568591449923775E+00 -0.8436533774046202E+00 -0.8304633208290344E+00 -0.8172889940547750E+00 + -0.8041303930634986E+00 -0.7909874918580566E+00 -0.7778602432626174E+00 -0.7647485796954503E+00 -0.7516524139151204E+00 + -0.7385716397412827E+00 -0.7255061327509165E+00 -0.7124557509508342E+00 -0.6994203354274540E+00 -0.6863997109745679E+00 + -0.6733936866998824E+00 -0.6604020566111790E+00 -0.6474246001827013E+00 -0.6344610829025981E+00 -0.6215112568020091E+00 + -0.6085748609664665E+00 -0.5956516220302268E+00 -0.5827412546541748E+00 -0.5698434619878014E+00 -0.5569579361158532E+00 + -0.5440843584902399E+00 -0.5312224003475492E+00 -0.5183717231128886E+00 -0.5055319787902968E+00 -0.4927028103404054E+00 + -0.4798838520455784E+00 -0.4670747298631208E+00 -0.4542750617668665E+00 -0.4414844580776081E+00 -0.4287025217826503E+00 + -0.4159288488449873E+00 -0.4031630285022929E+00 -0.3904046435562347E+00 -0.3776532706523132E+00 -0.3649084805505702E+00 + -0.3521698383875012E+00 -0.3394369039294391E+00 -0.3267092318177014E+00 -0.3139863718057774E+00 -0.3012678689887569E+00 + -0.2885532640253530E+00 -0.2758420933527601E+00 -0.2631338893944120E+00 -0.2504281807610877E+00 -0.2377244924455082E+00 + -0.2250223460105389E+00 -0.2123212597713198E+00 -0.1996207489715085E+00 -0.1869203259537742E+00 -0.1742195003247300E+00 + -0.1615177791145765E+00 -0.1488146669314823E+00 -0.1361096661109569E+00 -0.1234022768604086E+00 -0.1106919973989453E+00 + -0.9797832409262908E-01 -0.8526075158534008E-01 -0.7253877292531064E-01 -0.5981187968757973E-01 -0.4707956209239161E-01 + -0.3434130911979061E-01 -0.2159660862033985E-01 -0.8844947422254279E-02 0.3914188564942300E-02 0.1668131425026886E-01 + 0.2945694526441001E-01 0.4224159786604931E-01 0.5503578885129357E-01 0.6784003546613926E-01 0.8065485532187089E-01 + 0.9348076631322821E-01 0.1063182865393753E+00 0.1191679342274936E+00 0.1320302276589731E+00 0.1449056850980641E+00 + 0.1577948247229719E+00 0.1706981645593397E+00 0.1836162224158824E+00 0.1965495158223847E+00 0.2094985619696659E+00 + 0.2224638776517585E+00 0.2354459792100279E+00 0.2484453824792379E+00 0.2614626027354943E+00 0.2744981546460752E+00 + 0.2875525522209847E+00 0.3006263087661927E+00 0.3137199368386514E+00 0.3268339482028364E+00 0.3399688537888836E+00 + 0.3531251636522359E+00 0.3663033869348276E+00 0.3795040318275802E+00 0.3927276055344020E+00 0.4059746142374676E+00 + 0.4192455630638039E+00 0.4325409560532072E+00 0.4458612961272428E+00 0.4592070850596310E+00 0.4725788234476167E+00 + 0.4859770106845307E+00 0.4994021449334540E+00 0.5128547231018850E+00 0.5263352408174535E+00 0.5398441924046491E+00 + 0.5533820708624786E+00 0.5669493678430300E+00 0.5805465736309947E+00 0.5941741771240481E+00 0.6078326658140436E+00 + 0.6215225257691057E+00 0.6352442416164141E+00 0.6489982965258876E+00 0.6627851721945213E+00 0.6766053488314805E+00 + 0.6904593051439232E+00 0.7043475183234973E+00 0.7182704640335023E+00 0.7322286163966445E+00 0.7462224479835151E+00 + 0.7602524298016173E+00 0.7743190312849433E+00 0.7884227202841974E+00 0.8025639630575290E+00 0.8167432242618240E+00 + 0.8309609669444393E+00 0.8452176525355792E+00 0.8595137408410123E+00 0.8738496900353998E+00 0.8882259566559134E+00 + 0.9026429955964752E+00 0.9171012601023203E+00 0.9316012017649666E+00 0.9461432705176964E+00 0.9607279146312910E+00 + 0.9753555807102323E+00 0.9900267136892760E+00 0.1004741756830290E+01 0.1019501151719556E+01 0.1034305338265334E+01 + 0.1049154754695761E+01 0.1064049837557060E+01 0.1078991021712077E+01 0.1093978740339108E+01 0.1109013424930930E+01 + 0.1124095505294220E+01 0.1139225409549223E+01 0.1154403564129567E+01 0.1169630393782453E+01 0.1184906321569069E+01 + 0.1200231768865166E+01 0.1215607155361878E+01 0.1231032899066835E+01 0.1246509416305429E+01 0.1262037121722220E+01 + 0.1277616428282728E+01 0.1293247747275209E+01 0.1308931488312698E+01 0.1324668059335260E+01 0.1340457866612423E+01 + 0.1356301314745660E+01 0.1372198806671151E+01 0.1388150743662683E+01 0.1404157525334607E+01 0.1420219549645083E+01 + 0.1436337212899343E+01 0.1452510909753110E+01 0.1468741033216232E+01 0.1485027974656301E+01 0.1501372123802541E+01 + 0.1517773868749642E+01 0.1534233595961925E+01 0.1550751690277352E+01 0.1567328534911856E+01 0.1583964511463701E+01 + 0.1600659999917852E+01 0.1617415378650525E+01 0.1634231024433875E+01 0.1651107312440629E+01 0.1668044616248917E+01 + 0.1685043307847061E+01 0.1702103757638609E+01 0.1719226334447252E+01 0.1736411405521971E+01 0.1753659336542133E+01 + 0.1770970491622715E+01 0.1788345233319539E+01 0.1805783922634601E+01 0.1823286919021478E+01 0.1840854580390711E+01 + 0.1858487263115261E+01 0.1876185322036066E+01 0.1893949110467636E+01 0.1911778980203568E+01 0.1929675281522265E+01 + 0.1947638363192579E+01 0.1965668572479554E+01 0.1983766255150165E+01 0.2001931755479132E+01 0.2020165416254637E+01 + 0.2038467578784327E+01 0.2056838582901055E+01 0.2075278766968794E+01 0.2093788467888599E+01 0.2112368021104497E+01 + 0.2131017760609439E+01 0.2149738018951330E+01 0.2168529127238993E+01 0.2187391415148134E+01 0.2206325210927415E+01 + 0.2225330841404466E+01 0.2244408631991916E+01 0.2263558906693465E+01 0.2282781988109954E+01 0.2302078197445396E+01 + 0.2321447854513099E+01 0.2340891277741691E+01 0.2360408784181265E+01 0.2380000689509425E+01 0.2399667308037372E+01 + 0.2419408952716023E+01 0.2439225935142099E+01 0.2459118565564146E+01 0.2479087152888749E+01 0.2499132004686517E+01 + 0.2519253427198186E+01 0.2539451725340665E+01 0.2559727202713198E+01 0.2580080161603353E+01 0.2600510902993117E+01 + 0.2621019726564874E+01 0.2641606930707586E+01 0.2662272812522710E+01 0.2683017667830213E+01 0.2703841791174714E+01 + 0.2724745475831364E+01 0.2745729013811853E+01 0.2766792695870475E+01 0.2787936811510058E+01 0.2809161648987794E+01 + 0.2830467495321410E+01 0.2851854636294917E+01 0.2873323356464579E+01 0.2894873939164848E+01 0.2916506666514209E+01 + 0.2938221819421049E+01 0.2960019677589501E+01 0.2981900519525381E+01 0.3003864622541801E+01 0.3025912262765175E+01 + 0.3048043715140940E+01 0.3070259253439192E+01 0.3092559150260705E+01 0.3114943677042409E+01 0.3137413104063187E+01 + 0.3159967700449641E+01 0.3182607734181641E+01 0.3205333472098077E+01 0.3228145179902447E+01 0.3251043122168472E+01 + 0.3274027562345680E+01 0.3297098762765072E+01 0.3320256984644469E+01 0.3343502488094288E+01 0.3366835532122889E+01 + 0.3390256374642066E+01 0.3413765272472630E+01 0.3437362481349784E+01 0.3461048255928476E+01 0.3484822849788961E+01 + 0.3508686515442005E+01 0.3532639504334363E+01 0.3556682066854127E+01 0.3580814452335925E+01 0.3605036909066328E+01 + 0.3629349684289036E+01 0.3653753024210198E+01 0.3678247174003544E+01 0.3702832377815693E+01 0.3727508878771226E+01 + 0.3752276918977883E+01 0.3777136739531759E+01 0.3802088580522303E+01 0.3827132681037432E+01 0.3852269279168641E+01 + 0.3877498612015998E+01 0.3902820915693174E+01 0.3928236425332438E+01 0.3953745375089617E+01 0.3979347998149013E+01 + 0.4005044526728421E+01 0.4030835192083855E+01 0.4056720224514617E+01 0.4082699853368021E+01 0.4108774307044248E+01 + 0.4134943813001183E+01 0.4161208597759163E+01 0.4187568886905720E+01 0.4214024905100390E+01 0.4240576876079345E+01 + 0.4267225022660046E+01 0.4293969566746052E+01 0.4320810729331575E+01 0.4347748730506037E+01 0.4374783789458776E+01 + 0.4401916124483547E+01 0.4429145952983095E+01 0.4456473491473638E+01 0.4483898955589500E+01 0.4511422560087357E+01 + 0.4539044518850936E+01 0.4566765044895316E+01 0.4594584350371322E+01 0.4622502646570012E+01 0.4650520143926894E+01 + 0.4678637052026418E+01 0.4706853579606230E+01 0.4735169934561444E+01 0.4763586323948928E+01 0.4792102953991607E+01 + 0.4820720030082579E+01 0.4849437756789456E+01 0.4878256337858449E+01 0.4907175976218555E+01 0.4936196873985707E+01 + 0.4965319232466936E+01 0.4994543252164328E+01 0.5023869132779231E+01 0.5053297073216303E+01 0.5082827271587405E+01 + 0.5112459925215758E+01 0.5142195230639895E+01 0.5172033383617539E+01 0.5201974579129658E+01 0.5232019011384368E+01 + 0.5262166873820703E+01 0.5292418359112656E+01 0.5322773659173003E+01 0.5353232965157039E+01 0.5383796467466556E+01 + 0.5414464355753495E+01 0.5445236818923759E+01 0.5476114045141041E+01 0.5507096221830388E+01 0.5538183535682169E+01 + 0.5569376172655497E+01 0.5600674317982096E+01 0.5632078156169850E+01 0.5663587871006478E+01 0.5695203645563089E+01 + 0.5726925662197861E+01 0.5758754102559550E+01 0.5790689147591050E+01 0.5822730977532937E+01 0.5854879771926981E+01 + 0.5887135709619618E+01 0.5919498968765412E+01 0.5951969726830611E+01 0.5984548160596443E+01 0.6017234446162569E+01 + 0.6050028758950551E+01 0.6082931273707150E+01 0.6115942164507743E+01 0.6149061604759621E+01 0.6182289767205272E+01 + 0.6215626823925810E+01 0.6249072946344119E+01 0.6282628305228231E+01 0.6316293070694456E+01 0.6350067412210745E+01 + 0.6383951498599807E+01 0.6417945498042277E+01 0.6452049578080040E+01 0.6486263905619155E+01 0.6520588646933274E+01 + 0.6555023967666467E+01 0.6589570032836555E+01 0.6624227006838173E+01 0.6658995053445667E+01 0.6693874335816274E+01 + 0.6728865016493213E+01 0.6763967257408575E+01 0.6799181219886369E+01 0.6834507064645582E+01 0.6869944951802993E+01 + 0.6905495040876272E+01 0.6941157490786817E+01 0.6976932459862688E+01 0.7012820105841560E+01 0.7048820585873601E+01 + 0.7084934056524147E+01 0.7121160673776924E+01 0.7157500593036525E+01 0.7193953969131448E+01 0.7230520956316742E+01 + 0.7267201708277015E+01 0.7303996378128941E+01 0.7340905118424199E+01 0.7377928081152227E+01 0.7415065417742714E+01 + 0.7452317279068625E+01 0.7489683815448713E+01 0.7527165176650154E+01 0.7564761511891398E+01 0.7602472969844660E+01 + 0.7640299698638533E+01 0.7678241845860797E+01 0.7716299558560847E+01 0.7754472983252295E+01 0.7792762265915677E+01 + 0.7831167552000825E+01 0.7869688986429596E+01 0.7908326713598298E+01 0.7947080877380213E+01 0.7985951621128103E+01 + 0.8024939087676790E+01 0.8064043419345456E+01 0.8103264757940238E+01 0.8142603244756712E+01 0.8182059020582113E+01 + 0.8221632225698052E+01 0.8261322999882655E+01 0.8301131482413128E+01 0.8341057812068073E+01 0.8381102127129775E+01 + 0.8421264565386728E+01 0.8461545264135914E+01 0.8501944360185011E+01 0.8542461989854800E+01 0.8583098288981544E+01 + 0.8623853392919127E+01 0.8664727436541362E+01 0.8705720554244369E+01 0.8746832879948686E+01 0.8788064547101555E+01 + 0.8829415688679173E+01 0.8870886437188865E+01 0.8912476924671346E+01 0.8954187282702780E+01 0.8996017642397092E+01 + 0.9037968134408045E+01 0.9080038888931480E+01 0.9122230035707283E+01 0.9164541704021747E+01 0.9206974022709504E+01 + 0.9249527120155676E+01 0.9292201124297971E+01 0.9334996162628819E+01 0.9377912362197343E+01 0.9420949849611493E+01 + 0.9464108751040072E+01 0.9507389192214658E+01 0.9550791298431900E+01 0.9594315194555200E+01 0.9637961005016923E+01 + 0.9681728853820376E+01 0.9725618864541687E+01 0.9769631160331837E+01 0.9813765863918640E+01 0.9858023097608644E+01 + 0.9902402983288997E+01 0.9946905642429570E+01 0.9991531196084678E+01 0.1003627976489508E+02 0.1008115146908984E+02 + 0.1012614642848822E+02 0.1017126476250151E+02 0.1021650659013498E+02 0.1026187202998970E+02 0.1030736120026423E+02 + 0.1035297421875671E+02 0.1039871120286647E+02 0.1044457226959594E+02 0.1049055753555247E+02 0.1053666711695001E+02 + 0.1058290112961095E+02 0.1062925968896805E+02 0.1067574291006588E+02 0.1072235090756281E+02 0.1076908379573268E+02 + 0.1081594168846656E+02 0.1086292469927445E+02 0.1091003294128697E+02 0.1095726652725712E+02 0.1100462556956189E+02 + 0.1105211018020406E+02 0.1109972047081387E+02 0.1114745655265044E+02 0.1119531853660384E+02 0.1124330653319640E+02 + 0.1129142065258453E+02 0.1133966100456022E+02 0.1138802769855287E+02 0.1143652084363064E+02 0.1148514054850226E+02 + 0.1153388692151854E+02 0.1158276007067394E+02 0.1163176010360828E+02 0.1168088712760808E+02 0.1173014124960834E+02 + 0.1177952257619401E+02 0.1182903121360145E+02 0.1187866726772023E+02 0.1192843084409426E+02 0.1197832204792367E+02 + 0.1202834098406616E+02 0.1207848775703852E+02 0.1212876247101815E+02 0.1217916522984446E+02 0.1222969613702057E+02 + 0.1228035529571446E+02 0.1233114280876082E+02 0.1238205877866202E+02 0.1243310330759011E+02 0.1248427649738783E+02 + 0.1253557844957024E+02 0.1258700926532612E+02 0.1263856904551937E+02 0.1269025789069041E+02 0.1274207590105764E+02 + 0.1279402317651873E+02 0.1284609981665210E+02 0.1289830592071831E+02 0.1295064158766139E+02 0.1300310691611016E+02 + 0.1305570200437972E+02 0.1310842695047267E+02 0.1316128185208051E+02 0.1321426680658502E+02 0.1326738191105951E+02 + 0.1332062726227020E+02 0.1337400295667756E+02 0.1342750909043750E+02 0.1348114575940276E+02 0.1353491305912430E+02 + 0.1358881108485235E+02 0.1364283993153797E+02 0.1369699969383405E+02 0.1375129046609678E+02 0.1380571234238685E+02 + 0.1386026541647074E+02 0.1391494978182183E+02 0.1396976553162181E+02 0.1402471275876187E+02 0.1407979155584384E+02 + 0.1413500201518157E+02 0.1419034422880200E+02 0.1424581828844641E+02 0.1430142428557176E+02 0.1435716231135165E+02 + 0.1441303245667767E+02 0.1446903481216061E+02 0.1452516946813144E+02 0.1458143651464284E+02 0.1463783604146995E+02 + 0.1469436813811187E+02 0.1475103289379257E+02 0.1480783039746221E+02 0.1486476073779820E+02 0.1492182400320636E+02 + 0.1497902028182210E+02 0.1503634966151138E+02 0.1509381222987208E+02 0.1515140807423487E+02 0.1520913728166454E+02 + 0.1526699993896084E+02 0.1532499613265989E+02 0.1538312594903494E+02 0.1544138947409778E+02 0.1549978679359965E+02 + 0.1555831799303221E+02 0.1561698315762881E+02 0.1567578237236552E+02 0.1573471572196207E+02 0.1579378329088299E+02 + 0.1585298516333866E+02 0.1591232142328633E+02 0.1597179215443117E+02 0.1603139744022732E+02 0.1609113736387884E+02 + 0.1615101200834081E+02 0.1621102145632030E+02 0.1627116579027744E+02 0.1633144509242638E+02 0.1639185944473622E+02 + 0.1645240892893225E+02 0.1651309362649662E+02 0.1657391361866950E+02 0.1663486898645014E+02 0.1669595981059768E+02 + 0.1675718617163216E+02 0.1681854814983560E+02 0.1688004582525278E+02 0.1694167927769237E+02 0.1700344858672776E+02 + 0.1706535383169809E+02 0.1712739509170910E+02 0.1718957244563422E+02 0.1725188597211529E+02 0.1731433574956364E+02 + 0.1737692185616106E+02 0.1743964436986050E+02 0.1750250336838723E+02 0.1756549892923954E+02 0.1762863112968988E+02 + 0.1769190004678551E+02 0.1775530575734953E+02 0.1781884833798184E+02 0.1788252786505983E+02 0.1794634441473943E+02 + 0.1801029806295595E+02 0.1807438888542495E+02 0.1813861695764293E+02 0.1820298235488868E+02 0.1826748515222356E+02 + 0.1833212542449270E+02 0.1839690324632588E+02 0.1846181869213811E+02 0.1852687183613067E+02 0.1859206275229210E+02 + 0.1865739151439864E+02 0.1872285819601541E+02 0.1878846287049704E+02 0.1885420561098861E+02 0.1892008649042634E+02 + 0.1898610558153868E+02 0.1905226295684672E+02 0.1911855868866527E+02 0.1918499284910370E+02 0.1925156551006659E+02 + 0.1931827674325448E+02 0.1938512662016491E+02 0.1945211521209302E+02 0.1951924259013235E+02 0.1958650882517566E+02 + 0.1965391398791571E+02 0.1972145814884597E+02 0.1978914137826159E+02 0.1985696374625988E+02 0.1992492532274116E+02 + 0.1999302617740977E+02 0.2006126637977442E+02 0.2012964599914926E+02 0.2019816510465454E+02 0.2026682376521724E+02 + 0.2033562204957191E+02 0.2040456002626147E+02 0.2047363776363781E+02 0.2054285532986256E+02 0.2061221279290795E+02 + 0.2068171022055733E+02 0.2075134768040595E+02 0.2082112523986171E+02 0.2089104296614605E+02 0.2096110092629424E+02 + 0.2103129918715649E+02 0.2110163781539841E+02 0.2117211687750176E+02 0.2124273643976533E+02 0.2131349656830528E+02 + 0.2138439732905617E+02 0.2145543878777140E+02 0.2152662101002412E+02 0.2159794406120766E+02 0.2166940800653642E+02 + 0.2174101291104644E+02 0.2181275883959610E+02 0.2188464585686669E+02 0.2195667402736326E+02 0.2202884341541514E+02 + 0.2210115408517663E+02 0.2217360610062771E+02 0.2224619952557461E+02 0.2231893442365038E+02 0.2239181085831591E+02 + 0.2246482889286010E+02 0.2253798859040076E+02 0.2261129001388523E+02 0.2268473322609096E+02 0.2275831828962614E+02 + 0.2283204526693043E+02 0.2290591422027539E+02 0.2297992521176526E+02 0.2305407830333766E+02 0.2312837355676387E+02 + 0.2320281103364977E+02 0.2327739079543636E+02 0.2335211290340030E+02 0.2342697741865454E+02 0.2350198440214897E+02 + 0.2357713391467102E+02 0.2365242601684612E+02 0.2372786076913854E+02 0.2380343823185174E+02 0.2387915846512908E+02 + 0.2395502152895441E+02 0.2403102748315263E+02 0.2410717638739019E+02 0.2418346830117586E+02 0.2425990328386112E+02 + 0.2433648139464079E+02 0.2441320269255370E+02 0.2449006723648306E+02 0.2456707508515719E+02 0.2464422629715007E+02 + 0.2472152093088173E+02 0.2479895904461906E+02 0.2487654069647616E+02 0.2495426594441500E+02 0.2503213484624594E+02 + 0.2511014745962827E+02 0.2518830384207072E+02 0.2526660405093208E+02 0.2534504814342175E+02 0.2542363617660013E+02 + 0.2550236820737923E+02 0.2558124429252339E+02 0.2566026448864954E+02 0.2573942885222773E+02 0.2581873743958190E+02 + 0.2589819030689023E+02 0.2597778751018570E+02 0.2605752910535647E+02 0.2613741514814674E+02 0.2621744569415681E+02 + 0.2629762079884404E+02 0.2637794051752302E+02 0.2645840490536618E+02 0.2653901401740439E+02 0.2661976790852737E+02 + 0.2670066663348421E+02 0.2678171024688378E+02 0.2686289880319548E+02 0.2694423235674941E+02 0.2702571096173704E+02 + 0.2710733467221175E+02 0.2718910354208919E+02 0.2727101762514775E+02 0.2735307697502924E+02 0.2743528164523912E+02 + 0.2751763168914713E+02 0.2760012715998774E+02 0.2768276811086066E+02 0.2776555459473111E+02 0.2784848666443062E+02 + 0.2793156437265721E+02 0.2801478777197602E+02 0.2809815691481973E+02 0.2818167185348894E+02 0.2826533264015273E+02 + 0.2834913932684915E+02 0.2843309196548557E+02 0.2851719060783909E+02 0.2860143530555727E+02 0.2868582611015826E+02 + 0.2877036307303130E+02 0.2885504624543746E+02 0.2893987567850965E+02 0.2902485142325337E+02 0.2910997353054712E+02 + 0.2919524205114265E+02 0.2928065703566552E+02 0.2936621853461569E+02 0.2945192659836760E+02 0.2953778127717089E+02 + 0.2962378262115081E+02 0.2970993068030837E+02 0.2979622550452115E+02 0.2988266714354346E+02 0.2996925564700682E+02 + 0.3005599106442041E+02 0.3014287344517153E+02 0.3022990283852592E+02 0.3031707929362812E+02 0.3040440285950215E+02 + 0.3049187358505165E+02 0.3057949151906041E+02 0.3066725671019266E+02 0.3075516920699371E+02 0.3084322905789012E+02 + 0.3093143631119021E+02 0.3101979101508448E+02 0.3110829321764588E+02 0.3119694296683040E+02 0.3128574031047729E+02 + 0.3137468529630954E+02 0.3146377797193422E+02 0.3155301838484299E+02 0.3164240658241237E+02 0.3173194261190401E+02 + 0.3182162652046552E+02 0.3191145835513032E+02 0.3200143816281827E+02 0.3209156599033621E+02 0.3218184188437798E+02 + 0.3227226589152506E+02 0.3236283805824685E+02 0.3245355843090114E+02 0.3254442705573426E+02 0.3263544397888169E+02 + 0.3272660924636835E+02 0.3281792290410885E+02 0.3290938499790812E+02 0.3300099557346138E+02 0.3309275467635493E+02 + 0.3318466235206626E+02 0.3327671864596444E+02 0.3336892360331044E+02 0.3346127726925774E+02 0.3355377968885226E+02 + 0.3364643090703304E+02 0.3373923096863262E+02 0.3383217991837713E+02 0.3392527780088678E+02 0.3401852466067623E+02 + 0.3411192054215498E+02 0.3420546548962749E+02 0.3429915954729392E+02 0.3439300275925001E+02 0.3448699516948774E+02 + 0.3458113682189561E+02 0.3467542776025882E+02 0.3476986802825981E+02 0.3486445766947862E+02 0.3495919672739288E+02 + 0.3505408524537850E+02 0.3514912326671002E+02 0.3524431083456054E+02 0.3533964799200239E+02 0.3543513478200754E+02 + 0.3553077124744756E+02 0.3562655743109424E+02 0.3572249337561980E+02 0.3581857912359721E+02 0.3591481471750058E+02 + 0.3601120019970533E+02 0.3610773561248870E+02 0.3620442099802995E+02 0.3630125639841068E+02 0.3639824185561516E+02 + 0.3649537741153064E+02 0.3659266310794771E+02 0.3669009898656054E+02 0.3678768508896718E+02 0.3688542145666988E+02 + 0.3698330813107555E+02 0.3708134515349577E+02 0.3717938217591600E+02 0.3727741919833622E+02 0.3737545622075644E+02 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8576998932607242E-09 0.5148474978702150E-07 0.5500333859843751E-06 0.2898571356744415E-05 + 0.1037065667137954E-04 0.2904394432880980E-04 0.6869069328866988E-04 0.1435525383839498E-03 0.2729524897641136E-03 + 0.4817179545381958E-03 0.8004046139757985E-03 0.1265323067409609E-02 0.1918378981427738E-02 0.2806743664553777E-02 + 0.3982376035816319E-02 0.5501419303057878E-02 0.7423496677200373E-02 0.9810930426149240E-02 0.1272790776956854E-01 + 0.1623961574245743E-01 0.2041136538278681E-01 0.2530772356585144E-01 0.3099166862766308E-01 0.3752378368081732E-01 + 0.4496149929855063E-01 0.5335839507962672E-01 0.6276356754813610E-01 0.7322106991690198E-01 0.8476942747035206E-01 + 0.9744123071429918E-01 0.1112628070018588E+00 0.1262539700776599E+00 0.1424278458837341E+00 0.1597907720342443E+00 + 0.1783422675846084E+00 0.1980750690841191E+00 0.2189752283993167E+00 0.2410222674169928E+00 0.2641893844693322E+00 + 0.2884437071578631E+00 0.3137465861762969E+00 0.3400539247340754E+00 0.3673165382520538E+00 0.3954805391293457E+00 + 0.4244877415567311E+00 0.4542760815685687E+00 0.4847800477740307E+00 0.5159311184824792E+00 0.5476582012304797E+00 + 0.5798880710234582E+00 0.6125458039182285E+00 0.6455552028889719E+00 0.6788392132348257E+00 0.7123203250985853E+00 + 0.7459209609702914E+00 0.7795638463441852E+00 0.8131723619807327E+00 0.8466708764954843E+00 0.8799850582522438E+00 + 0.9130421657784031E+00 0.9457713161447614E+00 0.9781037309602292E+00 0.1009972959823397E+01 0.1041315081248019E+01 + 0.1072068881238206E+01 0.1102176009831869E+01 0.1131581116058128E+01 0.1160231961866557E+01 0.1188079515683897E+01 + 0.1215078026337852E+01 0.1241185078158618E+01 0.1266361628127532E+01 0.1290572025989520E+01 0.1313784018282635E+01 + 0.1335968737264703E+01 0.1357100675734715E+01 0.1377157648755932E+01 0.1396120743289401E+01 0.1413974256741546E+01 + 0.1430705625418266E+01 0.1446305343861415E+01 0.1460766876022088E+01 0.1474086559199635E+01 0.1486263501646126E+01 + 0.1497299474703849E+01 0.1507198800308697E+01 0.1515968234655533E+01 0.1523616848783268E+01 0.1530155906797786E+01 + 0.1535598742410441E+01 0.1539960634428920E+01 0.1543258681796175E+01 0.1545511678732089E+01 0.1546739990491811E+01 + 0.1546965430214609E+01 0.1546211137297620E+01 0.1544501457690412E+01 0.1541861826468803E+01 0.1538318653010165E+01 + 0.1533899209057386E+01 0.1528631519925127E+01 0.1522544259069783E+01 0.1515666646213862E+01 0.1508028349186392E+01 + 0.1499659389613263E+01 0.1490590052565443E+01 0.1480850800248451E+01 0.1470472189793603E+01 0.1459484795190111E+01 + 0.1447919133377286E+01 0.1435805594497667E+01 0.1423174376295045E+01 0.1410055422625766E+01 0.1396478366037582E+01 + 0.1382472474357517E+01 0.1368066601218609E+01 0.1353289140445096E+01 0.1338167984206406E+01 0.1322730484842268E+01 + 0.1307003420254224E+01 0.1291012962752784E+01 0.1274784651244435E+01 0.1258343366638420E+01 0.1241713310349911E+01 + 0.1224917985773531E+01 0.1207980182599308E+01 0.1190921963841912E+01 0.1173764655453436E+01 0.1156528838389896E+01 + 0.1139234343002130E+01 0.1121900245622720E+01 0.1104544867221897E+01 0.1087185774007220E+01 0.1069839779843846E+01 + 0.1052522950374696E+01 0.1035250608722480E+01 0.1018037342658465E+01 0.1000897013126039E+01 0.9838427640104167E+00 + 0.9668870330493002E+00 0.9500415637828995E+00 0.9333174184453955E+00 0.9167249917036894E+00 0.9002740251531050E+00 + 0.8839736224835302E+00 0.8678322652333790E+00 0.8518578290525983E+00 0.8360576003997890E+00 0.8204382936023470E+00 + 0.8050060682122852E+00 0.7897665465941298E+00 0.7747248316849636E+00 0.7598855248702404E+00 0.7452527439225495E+00 + 0.7308301409539072E+00 0.7166209203354966E+00 0.7026278565420246E+00 0.6888533118809829E+00 0.6752992540701540E+00 + 0.6619672736296282E+00 0.6488586010574048E+00 0.6359741237603777E+00 0.6233144027150980E+00 0.6108796888351882E+00 + 0.5986699390246809E+00 0.5866848318987949E+00 0.5749237831558405E+00 0.5633859605859940E+00 0.5520702987046087E+00 + 0.5409755129995881E+00 0.5301001137840697E+00 0.5194424196473048E+00 0.5090005704981659E+00 0.4987725401971368E+00 + 0.4887561487740056E+00 0.4789490742297346E+00 0.4693488639221445E+00 0.4599529455361500E+00 0.4507586376402879E+00 + 0.4417631598321903E+00 0.4329636424765457E+00 0.4243571360398264E+00 0.4159406200268177E+00 0.4077110115246057E+00 + 0.3996651733602655E+00 0.3917999218790373E+00 0.3841120343502322E+00 0.3765982560085148E+00 0.3692553067386082E+00 + 0.3620798874117488E+00 0.3550686858825059E+00 0.3482183826548197E+00 0.3415256562262722E+00 0.3349871881197929E+00 + 0.3285996676120873E+00 0.3223597961681734E+00 0.3162642915914723E+00 0.3103098918988991E+00 0.3044933589304323E+00 + 0.2988114817025848E+00 0.2932610795151651E+00 0.2878390048206519E+00 0.2825421458654130E+00 0.2773674291118858E+00 + 0.2723118214507413E+00 0.2673723322118953E+00 0.2625460149830915E+00 0.2578299692446370E+00 0.2532213418286768E+00 + 0.2487173282112436E+00 0.2443151736451206E+00 0.2400121741413617E+00 0.2358056773071348E+00 0.2316930830473297E+00 + 0.2276718441371882E+00 0.2237394666729961E+00 0.2198935104076650E+00 0.2161315889778330E+00 0.2124513700288889E+00 + 0.2088505752441177E+00 0.2053269802839583E+00 0.2018784146411472E+00 0.1985027614173130E+00 0.1951979570263882E+00 + 0.1919619908299856E+00 0.1887929047096988E+00 0.1856887925810768E+00 0.1826477998538276E+00 0.1796681228426198E+00 + 0.1767480081326520E+00 0.1738857519039822E+00 0.1710796992184251E+00 0.1683282432726463E+00 0.1656298246209137E+00 + 0.1629829303707959E+00 0.1603860933549304E+00 0.1578378912818327E+00 0.1553369458685551E+00 0.1528819219578573E+00 + 0.1504715266224071E+00 0.1481045082583851E+00 0.1457796556707337E+00 0.1434957971521608E+00 0.1412517995578756E+00 + 0.1390465673779208E+00 0.1368790418088395E+00 0.1347481998263070E+00 0.1326530532602482E+00 0.1305926478738530E+00 + 0.1285660624478085E+00 0.1265724078709661E+00 0.1246108262385681E+00 0.1226804899590787E+00 0.1207806008705706E+00 + 0.1189103893675429E+00 0.1170691135389732E+00 0.1152560583183238E+00 0.1134705346461653E+00 0.1117118786460041E+00 + 0.1099794508138442E+00 0.1082726352219536E+00 0.1065908387372449E+00 0.1049334902546352E+00 0.1033000399456902E+00 + 0.1016899585228177E+00 0.1001027365192277E+00 0.9853788358483354E-01 0.9699492779823146E-01 0.9547341499485665E-01 + 0.9397290811138079E-01 0.9249298654638069E-01 0.9103324553728220E-01 0.8959329555354877E-01 0.8817276170606399E-01 + 0.8677128317262857E-01 0.8538851263947052E-01 0.8402411575864875E-01 0.8267777062120664E-01 0.8134916724591848E-01 + 0.8003800708345375E-01 0.7874400253576731E-01 0.7746687649051477E-01 0.7620636187027600E-01 0.7496220119635953E-01 + 0.7373414616695294E-01 0.7252195724937327E-01 0.7132540328616367E-01 0.7014426111477837E-01 0.6897831520058859E-01 + 0.6782735728294027E-01 0.6669118603398869E-01 0.6556960673003079E-01 0.6446243093505667E-01 0.6336947619623536E-01 + 0.6229056575105237E-01 0.6122552824581402E-01 0.6017419746523230E-01 0.5913641207280737E-01 0.5811201536172281E-01 + 0.5710085501597033E-01 0.5610278288142408E-01 0.5511765474658521E-01 0.5414533013271837E-01 0.5318567209310896E-01 + 0.5223854702116695E-01 0.5130382446711163E-01 0.5038137696297216E-01 0.4947107985564236E-01 0.4857281114773465E-01 + 0.4768645134597841E-01 0.4681188331691594E-01 0.4594899214965088E-01 0.4509766502540915E-01 0.4425779109367826E-01 + 0.4342926135469399E-01 0.4261196854804814E-01 0.4180580704719781E-01 0.4101067275965932E-01 0.4022646303267519E-01 + 0.3945307656414969E-01 0.3869041331864940E-01 0.3793837444827467E-01 0.3719686221820911E-01 0.3646577993676117E-01 + 0.3574503188971662E-01 0.3503452327882445E-01 0.3433416016424531E-01 0.3364384941079507E-01 0.3296349863782079E-01 + 0.3229301617255276E-01 0.3163231100677876E-01 0.3098129275669249E-01 0.3033987162577284E-01 0.2970795837055464E-01 + 0.2908546426915543E-01 0.2847230109242889E-01 0.2786838107761748E-01 0.2727361690438311E-01 0.2668792167309761E-01 + 0.2611120888527847E-01 0.2554339242606102E-01 0.2498438654859956E-01 0.2443410586029598E-01 0.2389246531075691E-01 + 0.2335938018138393E-01 0.2283476607650571E-01 0.2231853891596374E-01 0.2181061492906659E-01 0.2131091064983147E-01 + 0.2081934291343454E-01 0.2033582885379438E-01 0.1986028590221680E-01 0.1939263178703108E-01 0.1893278453415130E-01 + 0.1848066246849892E-01 0.1803618421622546E-01 0.1759926870767613E-01 0.1716983518103927E-01 0.1674780318662707E-01 + 0.1633309259173651E-01 0.1592562358604172E-01 0.1552531668746990E-01 0.1513209274851720E-01 0.1474587296296080E-01 + 0.1436657887292672E-01 0.1399413237627429E-01 0.1362845573426023E-01 0.1326947157944628E-01 0.1291710292381743E-01 + 0.1257127316707774E-01 0.1223190610509324E-01 0.1189892593845275E-01 0.1157225728111806E-01 0.1125182516913743E-01 + 0.1093755506939646E-01 0.1062937288838200E-01 0.1032720498093588E-01 0.1003097815897619E-01 0.9740619700164219E-02 + 0.9456057356497178E-02 0.9177219362806280E-02 0.8904034445141316E-02 0.8636431829023183E-02 0.8374341247546036E-02 + 0.8117692949311960E-02 0.7866417706180585E-02 0.7620446820816740E-02 0.7379712134019578E-02 0.7144146031816014E-02 + 0.6913681452302325E-02 0.6688251892216657E-02 0.6467791413225554E-02 0.6252234647907211E-02 0.6041516805413253E-02 + 0.5835573676791136E-02 0.5634341639947666E-02 0.5437757664233824E-02 0.5245759314629934E-02 0.5058284755509180E-02 + 0.4875272753955811E-02 0.4696662682613547E-02 0.4522394522037392E-02 0.4352408862520555E-02 0.4186646905366133E-02 + 0.4025050463570553E-02 0.3867561961883894E-02 0.3714124436208813E-02 0.3564681532297067E-02 0.3419177503699341E-02 + 0.3277557208920367E-02 0.3139766107727285E-02 0.3005750256555324E-02 0.2875456302949815E-02 0.2748831478978852E-02 + 0.2625823593545541E-02 0.2506381023522792E-02 0.2390452703627873E-02 0.2277988114946939E-02 0.2168937272013016E-02 + 0.2063250708333439E-02 0.1960879460254761E-02 0.1861775049045227E-02 0.1765889461065943E-02 0.1673175125893125E-02 + 0.1583584892244586E-02 0.1497072001553956E-02 0.1413590059026983E-02 0.1333093002004349E-02 0.1255535065446408E-02 + 0.1180870744346243E-02 0.1109054752869345E-02 0.1040041980010902E-02 0.9737874415562595E-03 0.9102462281261181E-03 + 0.8493734490870866E-03 0.7911241721104120E-03 0.7354533581681445E-03 0.6823157917680999E-03 0.6316660062474194E-03 + 0.5834582039715675E-03 0.5376461713226330E-03 0.4941831884102573E-03 0.4530219335027502E-03 0.4141143822583456E-03 + 0.3774117019399670E-03 0.3428641409258591E-03 0.3104209139870729E-03 0.2800300839961760E-03 0.2516384409654113E-03 + 0.2251913795924475E-03 0.2006327768245250E-03 0.1779048713433524E-03 0.1569481473297049E-03 0.1377012253937927E-03 + 0.1201007641585952E-03 0.1040813766598551E-03 0.8957556647504338E-04 0.7651368930508610E-04 0.6482394658893534E-04 + 0.5443241860150438E-04 0.4526314532314971E-04 0.3723826410463467E-04 0.3027821368846399E-04 0.2430201435404447E-04 + 0.1922763365777299E-04 0.1497244622116435E-04 0.1145379401469120E-04 0.8589650285013768E-05 0.6299385349542388E-05 + 0.4504625622961494E-05 0.3130188220885624E-05 0.2105062280742719E-05 0.1363395085845545E-05 0.8454270900288885E-06 + 0.4983067594254876E-06 0.2767065679872027E-06 0.1431594160449781E-06 0.6804490613003522E-07 0.2918182930693568E-07 + 0.1102919874006033E-07 0.3560261260656263E-08 0.9406176465862757E-09 0.1916420214061158E-09 0.2763777688791933E-10 + 0.2482312356945943E-11 0.1136644735947497E-12 0.1904831683752850E-14 0.6466043629846817E-17 0.1381172060080856E-20 + 0.1274303700193166E-26 0.2106088550891557E-38 0.1212886175035114E-71 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.3765610317640694E+00 0.7400358894127599E+00 0.1090712381667745E+01 0.1428873061247002E+01 + 0.1754795319320031E+01 0.2068751483890357E+01 0.2371008922950546E+01 0.2661830152878451E+01 0.2941472952229258E+01 + 0.3210190480819170E+01 0.3468231403786657E+01 0.3715840020150198E+01 0.3953256395252374E+01 0.4180716496383695E+01 + 0.4398452330811846E+01 0.4606692085398965E+01 0.4805660266967400E+01 0.4995577842570571E+01 0.5176662378836555E+01 + 0.5349128179575754E+01 0.5513186420878141E+01 0.5669045282968079E+01 0.5816910078133630E+01 0.5956983374101555E+01 + 0.6089465112286805E+01 0.6214552720405558E+01 0.6332441219002502E+01 0.6443323321505209E+01 0.6547389527480199E+01 + 0.6644828208826436E+01 0.6735825688701171E+01 0.6820566313030878E+01 0.6899232514514866E+01 0.6972004869081964E+01 + 0.7039062144810148E+01 0.7100581343365575E+01 0.7156737734061032E+01 0.7207704880673625E+01 0.7253654661198675E+01 + 0.7294757280749858E+01 0.7331181277846054E+01 0.7363093524351962E+01 0.7390659219363427E+01 0.7414041877348629E+01 + 0.7433403310874117E+01 0.7448903608259055E+01 0.7460701106512816E+01 0.7468952359920434E+01 0.7473812104646840E+01 + 0.7475433219735298E+01 0.7473966684877387E+01 0.7469561535331859E+01 0.7462364814367910E+01 0.7452521523604532E+01 + 0.7440174571612401E+01 0.7425464721137732E+01 0.7408530535299623E+01 0.7389508323102637E+01 0.7368532084596213E+01 + 0.7345733456000793E+01 0.7321241655108376E+01 0.7295183427252115E+01 0.7267682992125909E+01 0.7238861991720891E+01 + 0.7208839439630969E+01 0.7177731671964857E+01 0.7145652300086835E+01 0.7112712165393094E+01 0.7079019296315407E+01 + 0.7044678867728360E+01 0.7009793162921103E+01 0.6974461538279471E+01 0.6938780390809384E+01 0.6902843128617441E+01 + 0.6866740144450676E+01 0.6830558792382606E+01 0.6794383367719482E+01 0.6758295090186962E+01 0.6722372090444448E+01 + 0.6686689399961921E+01 0.6651318944281731E+01 0.6616329539676658E+01 0.6581786893203926E+01 0.6547753606144576E+01 + 0.6514289180807551E+01 0.6481450030667977E+01 0.6449289493800484E+01 0.6417857849559566E+01 0.6387202338451258E+01 + 0.6357367185132800E+01 0.6328393624470087E+01 0.6300319930576388E+01 0.6273181448749665E+01 0.6247010630220808E+01 + 0.6221837069619801E+01 0.6197687545062726E+01 0.6174586060758330E+01 0.6152553892029570E+01 0.6131609632642339E+01 + 0.6111769244331025E+01 0.6093046108408382E+01 0.6075451079345281E+01 0.6058992540204510E+01 0.6043676459811814E+01 + 0.6029506451546534E+01 0.6016483833633909E+01 0.6004607690820981E+01 0.5993874937318422E+01 0.5984280380890941E+01 + 0.5975816787979942E+01 0.5968474949742999E+01 0.5962243748896129E+01 0.5957110227246338E+01 0.5953059653803552E+01 + 0.5950075593363216E+01 0.5948139975452642E+01 0.5947233163536738E+01 0.5947334024380974E+01 0.5948419997472152E+01 + 0.5950467164400099E+01 0.5953450318106323E+01 0.5957343031908459E+01 0.5962117728212475E+01 0.5967745746827388E+01 + 0.5974197412800709E+01 0.5981442103695763E+01 0.5989448316235365E+01 0.5998183732239485E+01 0.6007615283788049E+01 + 0.6017709217542990E+01 0.6028431158167253E+01 0.6039746170781648E+01 0.6051618822403686E+01 0.6064013242315937E+01 + 0.6076893181314657E+01 0.6090222069792634E+01 0.6103963074613425E+01 0.6118079154737412E+01 0.6132533115562999E+01 + 0.6147287661949624E+01 0.6162305449892092E+01 0.6177549136818604E+01 0.6192981430488190E+01 0.6208565136465474E+01 + 0.6224263204154009E+01 0.6240038771371831E+01 0.6255855207455509E+01 0.6271676154881747E+01 0.6287465569397743E+01 + 0.6303187758654289E+01 0.6318807419337479E+01 0.6334289672797612E+01 0.6349600099175650E+01 0.6364704770029900E+01 + 0.6379570279467482E+01 0.6394163773787110E+01 0.6408452979641630E+01 0.6422406230730219E+01 0.6435992493032277E+01 + 0.6449181388596262E+01 0.6461943217898319E+01 0.6474248980787193E+01 0.6486070396033000E+01 0.6497379919498787E+01 + 0.6508150760955191E+01 0.6518356899559369E+01 0.6527973098020561E+01 0.6536974915475707E+01 0.6545338719099223E+01 + 0.6553041694472095E+01 0.6560061854736102E+01 0.6566378048559677E+01 0.6571969966942736E+01 0.6576818148888014E+01 + 0.6580903985967331E+01 0.6584209725811516E+01 0.6586718474552983E+01 0.6588414198250604E+01 0.6589281723326368E+01 + 0.6589306736044133E+01 0.6588475781060250E+01 0.6586776259076728E+01 0.6584196423626929E+01 0.6580725377024553E+01 + 0.6576353065506066E+01 0.6571070273597098E+01 0.6564868617732960E+01 0.6557740539163546E+01 0.6549679296172584E+01 + 0.6540678955640928E+01 0.6530734383983693E+01 0.6519841237490329E+01 0.6507995952096807E+01 0.6495195732618538E+01 + 0.6481438541472563E+01 0.6466723086916791E+01 0.6451048810834144E+01 0.6434415876088694E+01 0.6416825153480584E+01 + 0.6398278208326170E+01 0.6378777286689151E+01 0.6358325301288192E+01 0.6336925817105747E+01 0.6314583036722893E+01 + 0.6291301785403415E+01 0.6267087495951198E+01 0.6241946193363197E+01 0.6215884479300494E+01 0.6188909516399138E+01 + 0.6161029012441793E+01 0.6132251204410994E+01 0.6102584842443767E+01 0.6072039173707282E+01 0.6040623926214209E+01 + 0.6008349292596213E+01 0.5975225913853303E+01 0.5941264863095957E+01 0.5906477629296895E+01 0.5870876101068294E+01 + 0.5834472550479789E+01 0.5797279616932335E+01 0.5759310291102085E+01 0.5720577898967909E+01 0.5681096085935931E+01 + 0.5640878801073526E+01 0.5599940281464876E+01 0.5558295036699770E+01 0.5515957833506386E+01 0.5472943680538803E+01 + 0.5429267813328917E+01 0.5384945679412595E+01 0.5339992923638538E+01 0.5294425373668760E+01 0.5248259025678392E+01 + 0.5201510030262340E+01 0.5154194678555982E+01 0.5106329388576237E+01 0.5057930691789439E+01 0.5009015219911397E+01 + 0.4959599691945191E+01 0.4909700901461299E+01 0.4859335704124821E+01 0.4808521005473441E+01 0.4757273748950229E+01 + 0.4705610904194174E+01 0.4653549455591696E+01 0.4601106391091448E+01 0.4548298691284878E+01 0.4495143318754116E+01 + 0.4441657207689196E+01 0.4387857253775341E+01 0.4333760304351776E+01 0.4279383148842287E+01 0.4224742509458196E+01 + 0.4169855032173684E+01 0.4114737277973392E+01 0.4059405714371826E+01 0.4003876707203877E+01 0.3948166512685741E+01 + 0.3892291269744721E+01 0.3836266992617200E+01 0.3780109563712459E+01 0.3723834726741400E+01 0.3667458080107569E+01 + 0.3610995070558891E+01 0.3554460987097478E+01 0.3497870955145241E+01 0.3441239930962816E+01 0.3384582696318687E+01 + 0.3327913853406216E+01 0.3271247820004922E+01 0.3214598824883478E+01 0.3157980903440747E+01 0.3101407893581784E+01 + 0.3044893431825231E+01 0.2988450949638577E+01 0.2932093669997769E+01 0.2875834604167262E+01 0.2819686548696998E+01 + 0.2763662082632170E+01 0.2707773564932239E+01 0.2652033132094799E+01 0.2596452695980827E+01 0.2541043941836626E+01 + 0.2485818326509053E+01 0.2430787076849344E+01 0.2375961188301807E+01 0.2321351423672851E+01 0.2266968312076604E+01 + 0.2212822148052429E+01 0.2158922990850521E+01 0.2105280663881218E+01 0.2051904754323755E+01 0.1998804612890416E+01 + 0.1945989353741675E+01 0.1893467854548430E+01 0.1841248756696710E+01 0.1789340465631234E+01 0.1737751151333199E+01 + 0.1686488748928507E+01 0.1635560959422214E+01 0.1584975250555055E+01 0.1534738857778293E+01 0.1484858785342541E+01 + 0.1435341807496924E+01 0.1386194469794414E+01 0.1337423090499684E+01 0.1289033762095411E+01 0.1241032352883452E+01 + 0.1193424508676993E+01 0.1146215654580135E+01 0.1099410996851037E+01 0.1053015524845333E+01 0.1007034013035967E+01 + 0.9614710231061919E+00 0.9163309061121906E+00 0.8716178047119132E+00 0.8273356554569915E+00 0.7834881911441322E+00 + 0.7400789432232032E+00 0.6971112442584428E+00 0.6545882304400988E+00 0.6125128441430950E+00 0.5708878365301393E+00 + 0.5297157701959697E+00 0.4889990218502538E+00 0.4487397850361310E+00 0.4089400728816994E+00 0.3696017208819437E+00 + 0.3307263897082250E+00 0.2923155680431669E+00 0.2543705754380062E+00 0.2168925651904757E+00 0.1798825272404206E+00 + 0.1433412910812248E+00 0.1072695286845231E+00 0.7166775743626266E-01 0.3653634308175027E-01 0.1875502677966891E-02 + -0.3231469244926006E-01 -0.6603431374472693E-01 -0.9928357246226212E-01 -0.1320628167035092E+00 -0.1643725284591359E+00 + -0.1962133206540352E+00 -0.2275859341981871E+00 -0.2584912350448162E+00 -0.2889302112573159E+00 -0.3189039700865247E+00 + -0.3484137350596561E+00 -0.3774608430824280E+00 -0.4060467415555353E+00 -0.4341729855069461E+00 -0.4618412347410261E+00 + -0.4890532510058743E+00 -0.5158108951799040E+00 -0.5421161244787339E+00 -0.5679709896834355E+00 -0.5933776323912099E+00 + -0.6183382822893291E+00 -0.6428552544532798E+00 -0.6669309466699765E+00 -0.6905678367868668E+00 -0.7137684800877064E+00 + -0.7365355066956285E+00 -0.7588716190043869E+00 -0.7807795891382519E+00 -0.8022622564412896E+00 -0.8233225249964942E+00 + -0.8439633611754367E+00 -0.8641877912188305E+00 -0.8839988988484928E+00 -0.9033998229112149E+00 -0.9223937550548300E+00 + -0.9409839374369939E+00 -0.9591736604667737E+00 -0.9769662605796675E+00 -0.9943651180460338E+00 -0.1011373654813408E+01 + -0.1027995332382722E+01 -0.1044233649718800E+01 -0.1060092141195189E+01 -0.1075574374573462E+01 -0.1090683949017157E+01 + -0.1105424493140398E+01 -0.1119799663091301E+01 -0.1133813140670142E+01 -0.1147468631482395E+01 -0.1160769863126533E+01 + -0.1173720583416712E+01 -0.1186324558640121E+01 -0.1198585571849071E+01 -0.1210507421187702E+01 -0.1222093918253196E+01 + -0.1233348886491358E+01 -0.1244276159626517E+01 -0.1254879580125511E+01 -0.1265162997695628E+01 -0.1275130267816335E+01 + -0.1284785250304552E+01 -0.1294131807913390E+01 -0.1303173804963923E+01 -0.1311915106009982E+01 -0.1320359574535607E+01 + -0.1328511071684896E+01 -0.1336373455024057E+01 -0.1343950577335306E+01 -0.1351246285442432E+01 -0.1358264419067570E+01 + -0.1365008809719085E+01 -0.1371483279610062E+01 -0.1377691640607245E+01 -0.1383637693209943E+01 -0.1389325225558719E+01 + -0.1394758012473418E+01 -0.1399939814520254E+01 -0.1404874377107532E+01 -0.1409565429609723E+01 -0.1414016684519505E+01 + -0.1418231836627389E+01 -0.1422214562228558E+01 -0.1425968518356584E+01 -0.1429497342043625E+01 -0.1432804649606689E+01 + -0.1435894035959656E+01 -0.1438769073950589E+01 -0.1441433313724035E+01 -0.1443890282107847E+01 -0.1446143482024210E+01 + -0.1448196391924410E+01 -0.1450052465247018E+01 -0.1451715129899050E+01 -0.1453187787759769E+01 -0.1454473814206628E+01 + -0.1455576557663118E+01 -0.1456499339167960E+01 -0.1457245451965397E+01 -0.1457818161116118E+01 -0.1458220703128390E+01 + -0.1458456285609144E+01 -0.1458528086934452E+01 -0.1458439255939184E+01 -0.1458192911625301E+01 -0.1457792142888557E+01 + -0.1457240008263066E+01 -0.1456539535683532E+01 -0.1455693722264615E+01 -0.1454705534097164E+01 -0.1453577906060864E+01 + -0.1452313741653029E+01 -0.1450915912833076E+01 -0.1449387259882392E+01 -0.1447730591279191E+01 -0.1445948683588039E+01 + -0.1444044281363676E+01 -0.1442020097068773E+01 -0.1439878811005344E+01 -0.1437623071259354E+01 -0.1435255493658342E+01 + -0.1432778661741579E+01 -0.1430195126742490E+01 -0.1427507407583088E+01 -0.1424717990879937E+01 -0.1421829330961478E+01 + -0.1418843849896296E+01 -0.1415763937532114E+01 -0.1412591951545110E+01 -0.1409330217499327E+01 -0.1405981028915838E+01 + -0.1402546647351420E+01 -0.1399029302486348E+01 -0.1395431192221163E+01 -0.1391754482782035E+01 -0.1388001308834431E+01 + -0.1384173773604920E+01 -0.1380273949010718E+01 -0.1376303875796823E+01 -0.1372265563680394E+01 -0.1368160991502163E+01 + -0.1363992107384622E+01 -0.1359760828896748E+01 -0.1355469043224972E+01 -0.1351118607350228E+01 -0.1346711348230812E+01 + -0.1342249062990785E+01 -0.1337733519113769E+01 -0.1333166454641865E+01 -0.1328549578379474E+01 -0.1323884570101832E+01 + -0.1319173080768030E+01 -0.1314416732738336E+01 -0.1309617119995603E+01 -0.1304775808370537E+01 -0.1299894335770717E+01 + -0.1294974212413071E+01 -0.1290016921059716E+01 -0.1285023917256931E+01 -0.1279996629577071E+01 -0.1274936459863322E+01 + -0.1269844783477041E+01 -0.1264722949547587E+01 -0.1259572281224406E+01 -0.1254394075931317E+01 -0.1249189605622732E+01 + -0.1243960117041727E+01 -0.1238706831979822E+01 -0.1233430947538271E+01 -0.1228133636390794E+01 -0.1222816047047525E+01 + -0.1217479304120173E+01 -0.1212124508588114E+01 -0.1206752738065413E+01 -0.1201365047068555E+01 -0.1195962467284892E+01 + -0.1190546007841516E+01 -0.1185116655574617E+01 -0.1179675375299079E+01 -0.1174223110078329E+01 -0.1168760781494218E+01 + -0.1163289289916911E+01 -0.1157809514774660E+01 -0.1152322314823388E+01 -0.1146828528415948E+01 -0.1141328973770988E+01 + -0.1135824449241374E+01 -0.1130315733582035E+01 -0.1124803586217146E+01 -0.1119288747506621E+01 -0.1113771939011809E+01 + -0.1108253863760298E+01 -0.1102735206509786E+01 -0.1097216634010968E+01 -0.1091698795269313E+01 -0.1086182321805725E+01 + -0.1080667827915982E+01 -0.1075155910928945E+01 -0.1069647151463423E+01 -0.1064142113683687E+01 -0.1058641345553532E+01 + -0.1053145379088904E+01 -0.1047654730608969E+01 -0.1042169900985625E+01 -0.1036691375891408E+01 -0.1031219626045731E+01 + -0.1025755107459436E+01 -0.1020298261677578E+01 -0.1014849516020502E+01 -0.1009409283823040E+01 -0.1003977964671914E+01 + -0.9985559446412423E+00 -0.9931435965261650E+00 -0.9877412800745212E+00 -0.9823493422165672E+00 -0.9769681172927177E+00 + -0.9715979272792943E+00 -0.9662390820122231E+00 -0.9608918794086823E+00 -0.9555566056867116E+00 -0.9502335355826994E+00 + -0.9449229325667899E+00 -0.9396250490561532E+00 -0.9343401266261530E+00 -0.9290683962193379E+00 -0.9238100783522983E+00 + -0.9185653833203373E+00 -0.9133345113999997E+00 -0.9081176530493820E+00 -0.9029149891062611E+00 -0.8977266909840595E+00 + -0.8925529208655598E+00 -0.8873938318944620E+00 -0.8822495683646910E+00 -0.8771202659075404E+00 -0.8720060516765797E+00 + -0.8669070445303514E+00 -0.8618233552128786E+00 -0.8567550865319589E+00 -0.8517023335352547E+00 -0.8466651836841759E+00 + -0.8416437170255952E+00 -0.8366380063613471E+00 -0.8316481174155630E+00 -0.8266741089998076E+00 -0.8217160331760809E+00 + -0.8167739354176268E+00 -0.8118478547676139E+00 -0.8069378239956513E+00 -0.8020438697521995E+00 -0.7971660127208436E+00 + -0.7923042677684496E+00 -0.7874586440932471E+00 -0.7826291453708021E+00 -0.7778157698979398E+00 -0.7730185107345809E+00 + -0.7682373558435663E+00 -0.7634722882284258E+00 -0.7587232860691486E+00 -0.7539903228559367E+00 -0.7492733675209987E+00 + -0.7445723845683611E+00 -0.7398873342017247E+00 -0.7352181724504098E+00 -0.7305648512933688E+00 -0.7259273187813085E+00 + -0.7213055191569296E+00 -0.7166993929733191E+00 -0.7121088772104908E+00 -0.7075339053901175E+00 -0.7029744076884417E+00 + -0.6984303110474385E+00 -0.6939015392841926E+00 -0.6893880131985548E+00 -0.6848896506790639E+00 -0.6804063668071960E+00 + -0.6759380739599310E+00 -0.6714846819106545E+00 -0.6670460979284606E+00 -0.6626222268758263E+00 -0.6582129713047191E+00 + -0.6538182315511271E+00 -0.6494379058280859E+00 -0.6450718903171657E+00 -0.6407200792584876E+00 -0.6363823650392715E+00 + -0.6320586382809613E+00 -0.6277487879249267E+00 -0.6234527013167734E+00 -0.6191702642893190E+00 -0.6149013612442086E+00 + -0.6106458752322457E+00 -0.6064036880324198E+00 -0.6021746802297080E+00 -0.5979587312916264E+00 -0.5937557196436042E+00 + -0.5895655227431641E+00 -0.5853880171529922E+00 -0.5812230786128654E+00 -0.5770705821105107E+00 -0.5729304019514115E+00 + -0.5688024118275793E+00 -0.5646864848853448E+00 -0.5605824937921645E+00 -0.5564903108025173E+00 -0.5524098078228833E+00 + -0.5483408564758644E+00 -0.5442833281634526E+00 -0.5402370941295085E+00 -0.5362020255214600E+00 -0.5321779934512643E+00 + -0.5281648690556621E+00 -0.5241625235557782E+00 -0.5201708283160628E+00 -0.5161896549026552E+00 -0.5122188751411803E+00 + -0.5082583611740192E+00 -0.5043079855170916E+00 -0.5003676211161868E+00 -0.4964371414029022E+00 -0.4925164203501901E+00 + -0.4886053325275901E+00 -0.4847037531561659E+00 -0.4808115581632069E+00 -0.4769286242367184E+00 -0.4730548288797583E+00 + -0.4691900504646559E+00 -0.4653341682871753E+00 -0.4614870626206452E+00 -0.4576486147701215E+00 -0.4538187071266341E+00 + -0.4499972232215512E+00 -0.4461840477811270E+00 -0.4423790667812826E+00 -0.4385821675026696E+00 -0.4347932385860811E+00 + -0.4310121700882537E+00 -0.4272388535381303E+00 -0.4234731819936421E+00 -0.4197150500990645E+00 -0.4159643541430195E+00 + -0.4122209921171803E+00 -0.4084848637757519E+00 -0.4047558706957974E+00 -0.4010339163384737E+00 -0.3973189061112476E+00 + -0.3936107474311905E+00 -0.3899093497893938E+00 -0.3862146248166102E+00 -0.3825264863501910E+00 -0.3788448505024144E+00 + -0.3751696357302771E+00 -0.3715007629068495E+00 -0.3678381553942878E+00 -0.3641817391185885E+00 -0.3605314426461966E+00 + -0.3568871972625555E+00 -0.3532489370527205E+00 -0.3496165989841241E+00 -0.3459901229916214E+00 -0.3423694520649201E+00 + -0.3387545323385251E+00 -0.3351453131843082E+00 -0.3315417473068326E+00 -0.3279437908415819E+00 -0.3243514034561918E+00 + -0.3207645484548654E+00 -0.3171831928860834E+00 -0.3136073076537766E+00 -0.3100368676321130E+00 -0.3064718517840476E+00 + -0.3029122432838121E+00 -0.2993580296435038E+00 -0.2958092028439498E+00 -0.2922657594700352E+00 -0.2887277008506632E+00 + -0.2851950332035602E+00 -0.2816677677851020E+00 -0.2781459210453749E+00 -0.2746295147886844E+00 -0.2711185763397140E+00 + -0.2676131387155659E+00 -0.2641132408039054E+00 -0.2606189275474402E+00 -0.2571302501349864E+00 -0.2536472661993449E+00 + -0.2501700400222663E+00 -0.2466986427467328E+00 -0.2432331525968512E+00 -0.2397736551055949E+00 -0.2363202433506903E+00 + -0.2328730181989250E+00 -0.2294320885591435E+00 -0.2259975716442418E+00 -0.2225695932424345E+00 -0.2191482879980940E+00 + -0.2157337997024620E+00 -0.2123262815945201E+00 -0.2089258966723290E+00 -0.2055328180151234E+00 -0.2021472291164557E+00 + -0.1987693242286884E+00 -0.1953993087191055E+00 -0.1920373994379287E+00 -0.1886838250985003E+00 -0.1853388266698828E+00 + -0.1820026577821215E+00 -0.1786755851443744E+00 -0.1753578889761193E+00 -0.1720498634515968E+00 -0.1687518171576267E+00 + -0.1654640735649029E+00 -0.1621869715128154E+00 -0.1589208657078173E+00 -0.1556661272352739E+00 -0.1524231440846908E+00 + -0.1491923216881294E+00 -0.1459740834715274E+00 -0.1427688714185721E+00 -0.1395771466466322E+00 -0.1363993899941623E+00 + -0.1332361026188316E+00 -0.1300878066054895E+00 -0.1269550455829047E+00 -0.1238383853480043E+00 -0.1207384144961449E+00 + -0.1176557450556807E+00 -0.1145910131248316E+00 -0.1115448795085540E+00 -0.1085180303527610E+00 -0.1055111777728831E+00 + -0.1025250604733206E+00 -0.9956044435388604E-01 -0.9661812309881886E-01 -0.9369891874337012E-01 -0.9080368221234399E-01 + -0.8793329382426256E-01 -0.8508866375406340E-01 -0.8227073244639434E-01 -0.7948047097061904E-01 -0.7671888130764398E-01 + -0.7398699655753553E-01 -0.7128588105567601E-01 -0.6861663038386651E-01 -0.6598037126130515E-01 -0.6337826129880289E-01 + -0.6081148859784694E-01 -0.5828127117427706E-01 -0.5578885618432740E-01 -0.5333551892862030E-01 -0.5092256160742038E-01 + -0.4855131179798897E-01 -0.4622312062232615E-01 -0.4393936057086534E-01 -0.4170142294489704E-01 -0.3951071487762254E-01 + -0.3736865589081760E-01 -0.3527667394121730E-01 -0.3323620090791550E-01 -0.3124866746947142E-01 -0.2931549731709577E-01 + -0.2743810064840861E-01 -0.2561786688503255E-01 -0.2385615655688409E-01 -0.2215429229678155E-01 -0.2051354889121152E-01 + -0.1893514233719176E-01 -0.1742021786166798E-01 -0.1596983686930661E-01 -0.1458496279764457E-01 -0.1326644587608198E-01 + -0.1201500680808027E-01 -0.1083121942521028E-01 -0.9715492398480059E-02 -0.8668050137937885E-02 -0.7688913067140435E-02 + -0.6777877525966872E-02 -0.5934495634602323E-02 -0.5158055544131036E-02 -0.4447562605453990E-02 -0.3801722107660840E-02 + -0.3218924367835703E-02 -0.2697233092980475E-02 -0.2234378075199077E-02 -0.1827753413977412E-02 -0.1474422570309129E-02 + -0.1171131627019387E-02 -0.9143321317637030E-03 -0.7002148003936321E-03 -0.5247551181118452E-03 -0.3837714480605755E-03 + -0.2729955946109330E-03 -0.1881548319023403E-03 -0.1250631789481358E-03 -0.7971820570180325E-04 -0.4839798665393986E-04 + -0.2775118225470492E-04 -0.1487196131798424E-04 -0.7351058493098910E-05 -0.3295260747991843E-05 -0.1310550608265630E-05 + -0.4491803501599659E-06 -0.1275625109004752E-06 -0.2842493719500779E-07 -0.4598019108179812E-08 -0.4812641260020268E-09 + -0.2729062991232811E-10 -0.6277478184238277E-12 -0.3532884035284522E-14 -0.1843992263449434E-17 -0.1064033801639711E-22 + -0.2179574996326970E-32 -0.2191274365894180E-56 -0.5812978673716309E-216 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.8687248663605213E+00 0.1707263902374461E+01 0.2516310697140216E+01 0.3296545407385949E+01 + 0.4048635017677018E+01 0.4773233612655782E+01 0.5470982663629552E+01 0.6142511330615299E+01 0.6788436779961467E+01 + 0.7409364516870689E+01 0.8005888731517908E+01 0.8578592656974877E+01 0.9128048936794247E+01 0.9654819999856910E+01 + 0.1015945843992924E+02 0.1064250739729831E+02 0.1110450093984054E+02 0.1154596444092118E+02 0.1196741495160918E+02 + 0.1236936156481509E+02 0.1275230576911170E+02 0.1311674179017046E+02 0.1346315691793700E+02 0.1379203181786923E+02 + 0.1410384082476923E+02 0.1439905221795016E+02 0.1467812847668937E+02 0.1494152651512514E+02 0.1518969789595702E+02 + 0.1542308902250295E+02 0.1564214130885283E+02 0.1584729132803401E+02 0.1603897093826909E+02 0.1621760738756086E+02 + 0.1638362339698061E+02 0.1653743722316642E+02 0.1667946270065578E+02 0.1681010926478216E+02 0.1692978195595912E+02 + 0.1703888140625709E+02 0.1713780380924828E+02 0.1722694087415465E+02 0.1730667976538239E+02 0.1737740302856498E+02 + 0.1743948850426588E+02 0.1749330923051193E+02 0.1753923333533993E+02 0.1757762392054244E+02 0.1760883893779540E+02 + 0.1763323105833935E+02 0.1765114753736991E+02 0.1766293007427053E+02 0.1766891466979376E+02 0.1766943148126528E+02 + 0.1766480467684931E+02 0.1765535228987511E+02 0.1764138607418140E+02 0.1762321136139172E+02 0.1760112692098567E+02 + 0.1757542482398380E+02 0.1754639031101227E+02 0.1751430166546395E+02 0.1747943009241989E+02 0.1744203960394378E+02 + 0.1740238691130952E+02 0.1736072132467072E+02 0.1731728466062878E+02 0.1727231115810628E+02 0.1722602740288191E+02 + 0.1717865226109467E+02 0.1713039682197727E+02 0.1708146435003250E+02 0.1703205024682137E+02 0.1698234202248845E+02 + 0.1693251927710871E+02 0.1688275369189969E+02 0.1683320903030526E+02 0.1678404114892058E+02 0.1673539801819411E+02 + 0.1668741975280949E+02 0.1664023865162014E+02 0.1659397924698056E+02 0.1654875836329216E+02 0.1650468518455595E+02 + 0.1646186133070283E+02 0.1642038094245007E+02 0.1638033077441462E+02 0.1634179029619614E+02 0.1630483180112684E+02 + 0.1626952052237267E+02 0.1623591475605696E+02 0.1620406599106814E+02 0.1617401904520420E+02 0.1614581220729854E+02 + 0.1611947738496719E+02 0.1609504025761150E+02 0.1607252043430844E+02 0.1605193161621790E+02 0.1603328176313632E+02 + 0.1601657326382578E+02 0.1600180310974979E+02 0.1598896307184925E+02 0.1597803987999542E+02 0.1596901540476141E+02 + 0.1596186684115860E+02 0.1595656689399044E+02 0.1595308396448294E+02 0.1595138233785788E+02 0.1595142237152340E+02 + 0.1595316068356454E+02 0.1595655034122527E+02 0.1596154104908305E+02 0.1596807933662661E+02 0.1597610874495764E+02 + 0.1598557001234738E+02 0.1599640125838981E+02 0.1600853816650400E+02 0.1602191416454864E+02 0.1603646060332359E+02 + 0.1605210693274370E+02 0.1606878087548201E+02 0.1608640859789002E+02 0.1610491487801469E+02 0.1612422327054205E+02 + 0.1614425626850959E+02 0.1616493546163930E+02 0.1618618169115549E+02 0.1620791520096096E+02 0.1623005578505677E+02 + 0.1625252293110075E+02 0.1627523596000996E+02 0.1629811416152313E+02 0.1632107692564781E+02 0.1634404386992741E+02 + 0.1636693496247232E+02 0.1638967064070816E+02 0.1641217192580325E+02 0.1643436053274611E+02 0.1645615897605117E+02 + 0.1647749067108008E+02 0.1649828003097248E+02 0.1651845255918834E+02 0.1653793493767038E+02 0.1655665511064232E+02 + 0.1657454236406513E+02 0.1659152740077896E+02 0.1660754241136564E+02 0.1662252114077064E+02 0.1663639895072981E+02 + 0.1664911287805092E+02 0.1666060168880418E+02 0.1667080592848118E+02 0.1667966796818515E+02 0.1668713204691969E+02 + 0.1669314431004635E+02 0.1669765284398512E+02 0.1670060770723475E+02 0.1670196095779233E+02 0.1670166667705496E+02 + 0.1669968099028751E+02 0.1669596208374337E+02 0.1669047021852679E+02 0.1668316774128659E+02 0.1667401909183290E+02 + 0.1666299080776961E+02 0.1665005152623624E+02 0.1663517198285345E+02 0.1661832500796750E+02 0.1659948552028914E+02 + 0.1657863051802247E+02 0.1655573906758000E+02 0.1653079228997926E+02 0.1650377334501676E+02 0.1647466741331476E+02 + 0.1644346167633494E+02 0.1641014529445382E+02 0.1637470938319258E+02 0.1633714698769450E+02 0.1629745305554087E+02 + 0.1625562440799640E+02 0.1621165970977314E+02 0.1616555943740087E+02 0.1611732584629117E+02 0.1606696293657995E+02 + 0.1601447641783236E+02 0.1595987367269281E+02 0.1590316371956016E+02 0.1584435717436734E+02 0.1578346621154290E+02 + 0.1572050452422970E+02 0.1565548728383454E+02 0.1558843109898079E+02 0.1551935397393391E+02 0.1544827526656816E+02 + 0.1537521564594045E+02 0.1530019704953602E+02 0.1522324264024800E+02 0.1514437676315159E+02 0.1506362490213083E+02 + 0.1498101363641504E+02 0.1489657059707905E+02 0.1481032442355990E+02 0.1472230472024070E+02 0.1463254201315024E+02 + 0.1454106770682513E+02 0.1444791404137927E+02 0.1435311404982355E+02 0.1425670151567689E+02 0.1415871093090752E+02 + 0.1405917745424228E+02 0.1395813686987899E+02 0.1385562554663566E+02 0.1375168039756887E+02 0.1364633884009084E+02 + 0.1353963875661431E+02 0.1343161845575160E+02 0.1332231663409325E+02 0.1321177233858961E+02 0.1310002492955745E+02 + 0.1298711404433202E+02 0.1287307956158335E+02 0.1275796156631419E+02 0.1264180031555601E+02 0.1252463620477686E+02 + 0.1240650973501518E+02 0.1228746148075084E+02 0.1216753205852430E+02 0.1204676209631323E+02 0.1192519220367461E+02 + 0.1180286294265961E+02 0.1167981479950663E+02 0.1155608815711772E+02 0.1143172326832159E+02 0.1130676022992646E+02 + 0.1118123895756377E+02 0.1105519916132396E+02 0.1092868032218412E+02 0.1080172166922607E+02 0.1067436215764326E+02 + 0.1054664044753408E+02 0.1041859488347744E+02 0.1029026347488684E+02 0.1016168387713817E+02 0.1003289337346536E+02 + 0.9903928857617679E+01 0.9774826817272114E+01 0.9645623318193554E+01 0.9516353989134197E+01 0.9387054007464796E+01 + 0.9257758085527723E+01 0.9128500457703609E+01 0.8999314868181001E+01 0.8870234559419087E+01 0.8741292261293285E+01 + 0.8612520180912444E+01 0.8483949993096608E+01 0.8355612831503974E+01 0.8227539280395387E+01 0.8099759367023964E+01 + 0.7972302554638278E+01 0.7845197736086287E+01 0.7718473228007762E+01 0.7592156765602027E+01 0.7466275497958868E+01 + 0.7340855983939128E+01 0.7215924188591989E+01 0.7091505480096169E+01 0.6967624627211525E+01 0.6844305797227783E+01 + 0.6721572554397537E+01 0.6599447858839925E+01 0.6477954065901652E+01 0.6357112925962435E+01 0.6236945584671568E+01 + 0.6117472583602064E+01 0.5998713861309926E+01 0.5880688754784813E+01 0.5763416001279670E+01 0.5646913740506246E+01 + 0.5531199517183574E+01 0.5416290283926924E+01 0.5302202404464881E+01 0.5188951657171522E+01 0.5076553238901992E+01 + 0.4965021769119214E+01 0.4854371294299406E+01 0.4744615292604905E+01 0.4635766678812629E+01 0.4527837809486449E+01 + 0.4420840488382136E+01 0.4314785972074110E+01 0.4209684975792541E+01 0.4105547679460195E+01 0.4002383733918524E+01 + 0.3900202267332557E+01 0.3799011891764151E+01 0.3698820709903869E+01 0.3599636321951710E+01 0.3501465832636705E+01 + 0.3404315858366423E+01 0.3308192534496821E+01 0.3213101522713837E+01 0.3119048018517560E+01 0.3026036758800617E+01 + 0.2934072029512395E+01 0.2843157673401020E+01 0.2753297097824851E+01 0.2664493282626155E+01 0.2576748788059156E+01 + 0.2490065762765371E+01 0.2404445951788702E+01 0.2319890704624000E+01 0.2236400983291912E+01 0.2153977370433589E+01 + 0.2072620077419250E+01 0.1992328952464182E+01 0.1913103488746359E+01 0.1834942832520140E+01 0.1757845791220436E+01 + 0.1681810841551835E+01 0.1606836137557940E+01 0.1532919518665786E+01 0.1460058517700443E+01 0.1388250368865471E+01 + 0.1317492015684907E+01 0.1247780118901998E+01 0.1179111064331551E+01 0.1111480970661150E+01 0.1044885697198059E+01 + 0.9793208515582879E+00 0.9147817972939893E+00 0.8512636614565350E+00 0.7887613420918976E+00 0.7272695156654265E+00 + 0.6667826444134151E+00 0.6072949836187563E+00 0.5488005888082287E+00 0.4912933228690584E+00 0.4347668630826892E+00 + 0.3792147080735970E+00 0.3246301846712228E+00 0.2710064546832890E+00 0.2183365215789164E+00 0.1666132370796914E+00 + 0.1158293076575852E+00 0.6597730093832276E-01 0.1704965200881259E-01 -0.3096133037222471E-01 -0.7806345766145839E-01 + -0.1242646555170061E+00 -0.1695729578839355E+00 -0.2139965011800796E+00 -0.2575435185826074E+00 -0.3002223344158743E+00 + -0.3420413586411577E+00 -0.3830090814482432E+00 -0.4231340679495004E+00 -0.4624249529762802E+00 -0.5008904359780200E+00 + -0.5385392760237241E+00 -0.5753802869061535E+00 -0.6114223323483075E+00 -0.6466743213121019E+00 -0.6811452034089456E+00 + -0.7148439644120911E+00 -0.7477796218700159E+00 -0.7799612208208035E+00 -0.8113978296067292E+00 -0.8420985357887053E+00 + -0.8720724421598169E+00 -0.9013286628575624E+00 -0.9298763195738665E+00 -0.9577245378622440E+00 -0.9848824435414749E+00 + -0.1011359159194722E+01 -0.1037163800763434E+01 -0.1062305474235226E+01 -0.1086793272424552E+01 -0.1110636271845517E+01 + -0.1133843529675753E+01 -0.1156424080810253E+01 -0.1178386935004340E+01 -0.1199741074104586E+01 -0.1220495449366658E+01 + -0.1240658978858965E+01 -0.1260240544951108E+01 -0.1279248991885808E+01 -0.1297693123433412E+01 -0.1315581700627601E+01 + -0.1332923439581261E+01 -0.1349727009381238E+01 -0.1366001030060941E+01 -0.1381754070649363E+01 -0.1396994647295475E+01 + -0.1411731221466749E+01 -0.1425972198220502E+01 -0.1439725924546859E+01 -0.1453000687782247E+01 -0.1465804714091862E+01 + -0.1478146167020199E+01 -0.1490033146108215E+01 -0.1501473685575904E+01 -0.1512475753069052E+01 -0.1523047248468980E+01 + -0.1533196002763981E+01 -0.1542929776981157E+01 -0.1552256261177614E+01 -0.1561183073489532E+01 -0.1569717759238136E+01 + -0.1577867790091117E+01 -0.1585640563278520E+01 -0.1593043400861668E+01 -0.1600083549054143E+01 -0.1606768177593432E+01 + -0.1613104379162233E+01 -0.1619099168858133E+01 -0.1624759483710538E+01 -0.1630092182243682E+01 -0.1635104044084646E+01 + -0.1639801769615148E+01 -0.1644191979666060E+01 -0.1648281215253528E+01 -0.1652075937355576E+01 -0.1655582526728141E+01 + -0.1658807283759452E+01 -0.1661756428361703E+01 -0.1664436099898922E+01 -0.1666852357150144E+01 -0.1669011178306643E+01 + -0.1670918461002464E+01 -0.1672580022377071E+01 -0.1674001599169259E+01 -0.1675188847841216E+01 -0.1676147344732051E+01 + -0.1676882586239485E+01 -0.1677399989029130E+01 -0.1677704890270234E+01 -0.1677802547897067E+01 -0.1677698140895068E+01 + -0.1677396769610920E+01 -0.1676903456085609E+01 -0.1676223144409744E+01 -0.1675360701100275E+01 -0.1674320915497755E+01 + -0.1673108500183398E+01 -0.1671728091415232E+01 -0.1670184249582419E+01 -0.1668481459677102E+01 -0.1666624131783108E+01 + -0.1664616601580613E+01 -0.1662463130866198E+01 -0.1660167908087604E+01 -0.1657735048892448E+01 -0.1655168596690241E+01 + -0.1652472523227175E+01 -0.1649650729172852E+01 -0.1646707044718564E+01 -0.1643645230186273E+01 -0.1640468976647931E+01 + -0.1637181906554373E+01 -0.1633787574373395E+01 -0.1630289467236240E+01 -0.1626691005592231E+01 -0.1622995543870765E+01 + -0.1619206371150311E+01 -0.1615326711833899E+01 -0.1611359726330491E+01 -0.1607308511741977E+01 -0.1603176102555118E+01 + -0.1598965471338085E+01 -0.1594679529441171E+01 -0.1590321127701217E+01 -0.1585893057149300E+01 -0.1581398049721393E+01 + -0.1576838778971485E+01 -0.1572217860786824E+01 -0.1567537854104941E+01 -0.1562801261632051E+01 -0.1558010530562515E+01 + -0.1553168053298982E+01 -0.1548276168172963E+01 -0.1543337160165420E+01 -0.1538353261627133E+01 -0.1533326652998501E+01 + -0.1528259463528551E+01 -0.1523153771992774E+01 -0.1518011607409659E+01 -0.1512834949755512E+01 -0.1507625730677423E+01 + -0.1502385834204081E+01 -0.1497117097454231E+01 -0.1491821311342496E+01 -0.1486500221282453E+01 -0.1481155527886632E+01 + -0.1475788887663291E+01 -0.1470401913709823E+01 -0.1464996176402467E+01 -0.1459573204082366E+01 -0.1454134483737546E+01 + -0.1448681461680846E+01 -0.1443215544223580E+01 -0.1437738098344736E+01 -0.1432250452355627E+01 -0.1426753896559857E+01 + -0.1421249683908433E+01 -0.1415739030649932E+01 -0.1410223116975571E+01 -0.1404703087659131E+01 -0.1399180052691527E+01 + -0.1393655087910084E+01 -0.1388129235622212E+01 -0.1382603505223591E+01 -0.1377078873810667E+01 -0.1371556286787404E+01 + -0.1366036658466202E+01 -0.1360520872663014E+01 -0.1355009783286443E+01 -0.1349504214920848E+01 -0.1344004963403421E+01 + -0.1338512796395142E+01 -0.1333028453945557E+01 -0.1327552649051373E+01 -0.1322086068208856E+01 -0.1316629371959906E+01 + -0.1311183195431850E+01 -0.1305748148870926E+01 -0.1300324818169403E+01 -0.1294913765386324E+01 -0.1289515529261906E+01 + -0.1284130625725508E+01 -0.1278759548397190E+01 -0.1273402769082885E+01 -0.1268060738263149E+01 -0.1262733885575457E+01 + -0.1257422620290157E+01 -0.1252127331779953E+01 -0.1246848389983009E+01 -0.1241586145859656E+01 -0.1236340931842745E+01 + -0.1231113062281559E+01 -0.1225902833879501E+01 -0.1220710526125339E+01 -0.1215536401718194E+01 -0.1210380706986247E+01 + -0.1205243672299176E+01 -0.1200125512474344E+01 -0.1195026427176832E+01 -0.1189946601313249E+01 -0.1184886205419436E+01 + -0.1179845396042039E+01 -0.1174824316114016E+01 -0.1169823095324133E+01 -0.1164841850480436E+01 -0.1159880685867766E+01 + -0.1154939693599391E+01 -0.1150018953962708E+01 -0.1145118535759160E+01 -0.1140238496638358E+01 -0.1135378883426438E+01 + -0.1130539732448745E+01 -0.1125721069846856E+01 -0.1120922911890006E+01 -0.1116145265280953E+01 -0.1111388127456360E+01 + -0.1106651486881709E+01 -0.1101935323340800E+01 -0.1097239608219940E+01 -0.1092564304786787E+01 -0.1087909368463974E+01 + -0.1083274747097547E+01 -0.1078660381220247E+01 -0.1074066204309709E+01 -0.1069492143041646E+01 -0.1064938117538041E+01 + -0.1060404041610429E+01 -0.1055889822998297E+01 -0.1051395363602706E+01 -0.1046920559715141E+01 -0.1042465302241655E+01 + -0.1038029476922388E+01 -0.1033612964546500E+01 -0.1029215641162557E+01 -0.1024837378284490E+01 -0.1020478043093089E+01 + -0.1016137498633167E+01 -0.1011815604006419E+01 -0.1007512214560045E+01 -0.1003227182071147E+01 -0.9989603549270579E+00 + -0.9947115783015485E+00 -0.9904806943270184E+00 -0.9862675422627522E+00 -0.9820719586592493E+00 -0.9778937775186953E+00 + -0.9737328304516771E+00 -0.9695889468301108E+00 -0.9654619539365238E+00 -0.9613516771097025E+00 -0.9572579398867307E+00 + -0.9531805641415736E+00 -0.9491193702201466E+00 -0.9450741770719889E+00 -0.9410448023785890E+00 -0.9370310626784017E+00 + -0.9330327734886064E+00 -0.9290497494236897E+00 -0.9250818043108714E+00 -0.9211287513024286E+00 -0.9171904029850091E+00 + -0.9132665714859235E+00 -0.9093570685765163E+00 -0.9054617057726567E+00 -0.9015802944323839E+00 -0.8977126458507625E+00 + -0.8938585713520132E+00 -0.8900178823789437E+00 -0.8861903905797556E+00 -0.8823759078922311E+00 -0.8785742466254294E+00 + -0.8747852195388349E+00 -0.8710086399190866E+00 -0.8672443216543031E+00 -0.8634920793060465E+00 -0.8597517281789752E+00 + -0.8560230843882563E+00 -0.8523059649247257E+00 -0.8486001877179036E+00 -0.8449055716968552E+00 -0.8412219368489985E+00 + -0.8375491042768192E+00 -0.8338868962526480E+00 -0.8302351362714315E+00 -0.8265936491016083E+00 -0.8229622608341091E+00 + -0.8193407989295268E+00 -0.8157290922634788E+00 -0.8121269711702471E+00 -0.8085342674846857E+00 -0.8049508145824523E+00 + -0.8013764474186241E+00 -0.7978110025647080E+00 -0.7942543182440929E+00 -0.7907062343659974E+00 -0.7871665925579165E+00 + -0.7836352361966469E+00 -0.7801120104378853E+00 -0.7765967622444689E+00 -0.7730893404132703E+00 -0.7695895956008084E+00 + -0.7660973803475873E+00 -0.7626125491011952E+00 -0.7591349582382320E+00 -0.7556644660850415E+00 -0.7522009329373659E+00 + -0.7487442210788564E+00 -0.7452941947985601E+00 -0.7418507204073561E+00 -0.7384136662534099E+00 -0.7349829027366561E+00 + -0.7315583023223650E+00 -0.7281397395537861E+00 -0.7247270910639445E+00 -0.7213202355865901E+00 -0.7179190539663420E+00 + -0.7145234291680540E+00 -0.7111332462854418E+00 -0.7077483925489899E+00 -0.7043687573331715E+00 -0.7009942321630125E+00 + -0.6976247107200276E+00 -0.6942600888475667E+00 -0.6909002645555757E+00 -0.6875451380248399E+00 -0.6841946116106925E+00 + -0.6808485898462595E+00 -0.6775069794452312E+00 -0.6741696893042333E+00 -0.6708366305047628E+00 -0.6675077163147983E+00 + -0.6641828621900246E+00 -0.6608619857747765E+00 -0.6575450069026729E+00 -0.6542318475970094E+00 -0.6509224320708961E+00 + -0.6476166867272263E+00 -0.6443145401584339E+00 -0.6410159231461258E+00 -0.6377207686605807E+00 -0.6344290118601643E+00 + -0.6311405900906676E+00 -0.6278554428846229E+00 -0.6245735119605972E+00 -0.6212947412225088E+00 -0.6180190767589913E+00 + -0.6147464668428325E+00 -0.6114768619305104E+00 -0.6082102146618701E+00 -0.6049464798599574E+00 -0.6016856145310354E+00 + -0.5984275778648340E+00 -0.5951723312350204E+00 -0.5919198381999848E+00 -0.5886700645038960E+00 -0.5854229780781174E+00 + -0.5821785490429797E+00 -0.5789367497099552E+00 -0.5756975545842548E+00 -0.5724609403678959E+00 -0.5692268859632494E+00 + -0.5659953724771183E+00 -0.5627663832253617E+00 -0.5595399037381192E+00 -0.5563159217656418E+00 -0.5530944272847829E+00 + -0.5498754125061794E+00 -0.5466588718821447E+00 -0.5434448021153181E+00 -0.5402332021681084E+00 -0.5370240732729479E+00 + -0.5338174189434215E+00 -0.5306132449862715E+00 -0.5274115595143415E+00 -0.5242123729604776E+00 -0.5210156980924291E+00 + -0.5178215500287884E+00 -0.5146299462559857E+00 -0.5114409066464112E+00 -0.5082544534776542E+00 -0.5050706114529327E+00 + -0.5018894077227221E+00 -0.4987108719076290E+00 -0.4955350361225455E+00 -0.4923619350021070E+00 -0.4891916057274888E+00 + -0.4860240880545712E+00 -0.4828594243435082E+00 -0.4796976595897113E+00 -0.4765388414562883E+00 -0.4733830203079488E+00 + -0.4702302492464025E+00 -0.4670805841472636E+00 -0.4639340836984699E+00 -0.4607908094402333E+00 -0.4576508258065108E+00 + -0.4545142001680199E+00 -0.4513810028767579E+00 -0.4482513073120319E+00 -0.4451251899279745E+00 -0.4420027303025001E+00 + -0.4388840111876836E+00 -0.4357691185614755E+00 -0.4326581416807331E+00 -0.4295511731354427E+00 -0.4264483089040742E+00 + -0.4233496484099363E+00 -0.4202552945784125E+00 -0.4171653538949250E+00 -0.4140799364634484E+00 -0.4109991560653700E+00 + -0.4079231302184809E+00 -0.4048519802358120E+00 -0.4017858312840442E+00 -0.3987248124411331E+00 -0.3956690567527806E+00 + -0.3926187012873193E+00 -0.3895738871885333E+00 -0.3865347597258667E+00 -0.3835014683414236E+00 -0.3804741666930851E+00 + -0.3774530126929794E+00 -0.3744381685404753E+00 -0.3714298007487684E+00 -0.3684280801640104E+00 -0.3654331819758509E+00 + -0.3624452857181055E+00 -0.3594645752581452E+00 -0.3564912387734580E+00 -0.3535254687136594E+00 -0.3505674617460703E+00 + -0.3476174186827757E+00 -0.3446755443868791E+00 -0.3417420476554580E+00 -0.3388171410764583E+00 -0.3359010408565321E+00 + -0.3329939666165476E+00 -0.3300961411511784E+00 -0.3272077901487176E+00 -0.3243291418668700E+00 -0.3214604267599845E+00 + -0.3186018770527939E+00 -0.3157537262553701E+00 -0.3129162086136159E+00 -0.3100895584892342E+00 -0.3072740096627376E+00 + -0.3044697945526863E+00 -0.3016771433440111E+00 -0.2988962830179719E+00 -0.2961274362760575E+00 -0.2933708203499825E+00 + -0.2906266456898650E+00 -0.2878951145227867E+00 -0.2851764192741990E+00 -0.2824707408451726E+00 -0.2797782467393001E+00 + -0.2770990890342526E+00 -0.2744334021946651E+00 -0.2717813007251957E+00 -0.2691428766655449E+00 -0.2665181969328780E+00 + -0.2639073005217756E+00 -0.2613101955776174E+00 -0.2587268563663881E+00 -0.2561572201724773E+00 -0.2536011841663135E+00 + -0.2510586022957567E+00 -0.2485292822692960E+00 -0.2460129827152067E+00 -0.2435094106190135E+00 -0.2410182191615573E+00 + -0.2385390061013152E+00 -0.2360713128665393E+00 -0.2336146245440482E+00 -0.2311683709702571E+00 -0.2287319291436186E+00 + -0.2263046271825591E+00 -0.2238857500445038E+00 -0.2214745471939171E+00 -0.2190702423535930E+00 -0.2166720453861016E+00 + -0.2142791662241082E+00 -0.2118908305935776E+00 -0.2095062970515578E+00 -0.2071248745972281E+00 -0.2047459398312080E+00 + -0.2023689523724028E+00 -0.1999934670554019E+00 -0.1976191414090548E+00 -0.1952457371550912E+00 -0.1928731150462155E+00 + -0.1905012233025302E+00 -0.1881300810881581E+00 -0.1857597595959972E+00 -0.1833903639169085E+00 -0.1810220185223115E+00 + -0.1786548578143285E+00 -0.1762890213721006E+00 -0.1739246522622315E+00 -0.1715618967099617E+00 -0.1692009041513801E+00 + -0.1668418273480159E+00 -0.1644848225100573E+00 -0.1621300494242820E+00 -0.1597776715867397E+00 -0.1574278563403202E+00 + -0.1550807750173627E+00 -0.1527366030874480E+00 -0.1503955203105244E+00 -0.1480577108955310E+00 -0.1457233636646466E+00 + -0.1433926722233472E+00 -0.1410658351364051E+00 -0.1387430561099922E+00 -0.1364245441800418E+00 -0.1341105139070126E+00 + -0.1318011855772175E+00 -0.1294967854108453E+00 -0.1271975457768302E+00 -0.1249037054146965E+00 -0.1226155096635082E+00 + -0.1203332106980454E+00 -0.1180570677723090E+00 -0.1157873474704553E+00 -0.1135243239652422E+00 -0.1112682792840448E+00 + -0.1090195035824928E+00 -0.1067782954257439E+00 -0.1045449620773913E+00 -0.1023198197959724E+00 -0.1001031941390004E+00 + -0.9789542027442202E-01 -0.9569684329933507E-01 -0.9350781856577459E-01 -0.9132871201329762E-01 -0.8915990050804710E-01 + -0.8700177218790264E-01 -0.8485472681323365E-01 -0.8271917612269755E-01 -0.8059554419341119E-01 -0.7848426780471512E-01 + -0.7638579680463178E-01 -0.7430059447796174E-01 -0.7222913791482828E-01 -0.7017191837828506E-01 -0.6812944166942314E-01 + -0.6610222848819827E-01 -0.6409081478795155E-01 -0.6209575212134812E-01 -0.6011760797515669E-01 -0.5815696609097321E-01 + -0.5621442676864546E-01 -0.5429060714874503E-01 -0.5238614147002400E-01 -0.5050168129729559E-01 -0.4863789571467226E-01 + -0.4679547147851291E-01 -0.4497511312379645E-01 -0.4317754301696363E-01 -0.4140350134749559E-01 -0.3965374604968968E-01 + -0.3792905264519061E-01 -0.3623021399585374E-01 -0.3455803995547253E-01 -0.3291335690774033E-01 -0.3129700717659555E-01 + -0.2970984829376720E-01 -0.2815275210690626E-01 -0.2662660371018717E-01 -0.2513230017763598E-01 -0.2367074907776015E-01 + -0.2224286674626115E-01 -0.2084957629177444E-01 -0.1949180530768286E-01 -0.1817048326111876E-01 -0.1688653852836564E-01 + -0.1564089504398897E-01 -0.1443446852927493E-01 -0.1326816226396534E-01 -0.1214286236395461E-01 -0.1105943252668154E-01 + -0.1001870820551502E-01 -0.9021490174708021E-02 -0.8068537447652485E-02 -0.7160559513483508E-02 -0.6298207860858848E-02 + -0.5482066763324758E-02 -0.4712643308532483E-02 -0.3990356664167553E-02 -0.3315526587400327E-02 -0.2688361202633861E-02 + -0.2108944095059771E-02 -0.1577220795897805E-02 -0.1092984770086615E-02 -0.6558630595718385E-03 -0.2653017861664537E-03 + 0.7944822189490764E-04 0.3793453454019918E-03 0.6355702167323619E-03 0.8495373838452211E-03 0.1022904990027115E-02 + 0.1157581756795607E-02 0.1255730447553756E-02 0.1319766883295748E-02 0.1352353488459118E-02 0.1356386278494535E-02 + 0.1334974179358035E-02 0.1291409617048463E-02 0.1229129462600355E-02 0.1151665700113620E-02 0.1062585641275423E-02 + 0.9654221768740550E-03 0.8635954616548462E-03 0.7603285776664598E-03 0.6585610737771120E-03 0.5608657269660935E-03 + 0.4693752087118773E-03 0.3857262433307593E-03 0.3110288768033999E-03 0.2458671434387088E-03 0.1903343314865707E-03 + 0.1441011800570143E-03 0.1065093644667441E-03 0.7667716125666785E-04 0.5360156636052818E-04 0.3624338213230885E-04 + 0.2358881126340773E-04 0.1468957244294401E-04 0.8688517982512364E-05 0.4836926461183601E-05 0.2505806106186696E-05 + 0.1190778874910442E-05 0.5095498141563876E-06 0.1916497626697207E-06 0.6134629795982277E-07 0.1599283622173898E-07 + 0.3192844313628801E-08 0.4465991345509002E-09 0.3830055172706218E-10 0.1633011596692233E-11 0.2440735408533676E-13 + 0.6817882595562817E-16 0.1011756708173479E-19 0.4237417807138562E-26 0.7509788045435901E-39 0.4267446943283257E-77 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.5899841183367943E+00 0.1161355619573833E+01 0.1714505862663386E+01 0.2249819256784396E+01 + 0.2767673391510573E+01 0.3268439177645294E+01 0.3752481000506378E+01 0.4220156886514003E+01 0.4671818683172639E+01 + 0.5107812251922465E+01 0.5528477672848820E+01 0.5934149459862732E+01 0.6325156784687305E+01 0.6701823707789128E+01 + 0.7064469414269955E+01 0.7413408452670304E+01 0.7748950974623735E+01 0.8071402973330306E+01 0.8381066518882308E+01 + 0.8678239988567556E+01 0.8963218290390984E+01 0.9236293078186977E+01 0.9497752956839562E+01 0.9747883676281340E+01 + 0.9986968313100460E+01 0.1021528743874655E+02 0.1043311927348773E+02 0.1064073982542990E+02 0.1083842301406511E+02 + 0.1102644077796590E+02 0.1120506316638604E+02 0.1137455841466486E+02 0.1153519300345998E+02 0.1168723170195367E+02 + 0.1183093759528836E+02 0.1196657209658812E+02 0.1209439494401590E+02 0.1221466418339854E+02 0.1232763613702556E+02 + 0.1243356535929262E+02 0.1253270457991625E+02 0.1262530463549414E+02 0.1271161439022432E+02 0.1279188064662818E+02 + 0.1286634804714671E+02 0.1293525896749568E+02 0.1299885340267705E+02 0.1305736884654751E+02 0.1311104016584454E+02 + 0.1316009946956320E+02 0.1320477597456633E+02 0.1324529586829482E+02 0.1328188216942499E+02 0.1331475458729735E+02 + 0.1334412938091442E+02 0.1337021921827631E+02 0.1339323303679160E+02 0.1341337590546720E+02 0.1343084888954589E+02 + 0.1344584891822348E+02 0.1345856865604004E+02 0.1346919637850042E+02 0.1347791585244115E+02 0.1348490622162011E+02 + 0.1349034189796659E+02 0.1349439245888940E+02 0.1349722255100133E+02 0.1349899180057996E+02 0.1349985473104553E+02 + 0.1349996068770030E+02 0.1349945376993611E+02 0.1349847277108194E+02 0.1349715112602811E+02 0.1349561686673074E+02 + 0.1349399258566773E+02 0.1349239540728639E+02 0.1349093696745374E+02 0.1348972340089195E+02 0.1348885533655486E+02 + 0.1348842790087613E+02 0.1348853072879561E+02 0.1348924798244868E+02 0.1349065837738147E+02 0.1349283521613647E+02 + 0.1349584642903438E+02 0.1349975462196169E+02 0.1350461713095838E+02 0.1351048608338651E+02 0.1351740846544771E+02 + 0.1352542619580703E+02 0.1353457620507051E+02 0.1354489052085530E+02 0.1355639635818421E+02 0.1356911621492991E+02 + 0.1358306797202959E+02 0.1359826499818650E+02 0.1361471625877207E+02 0.1363242642864042E+02 0.1365139600856614E+02 + 0.1367162144501598E+02 0.1369309525296598E+02 0.1371580614147713E+02 0.1373973914174481E+02 0.1376487573734043E+02 + 0.1379119399636717E+02 0.1381866870525614E+02 0.1384727150393395E+02 0.1387697102209792E+02 0.1390773301634148E+02 + 0.1393952050787757E+02 0.1397229392061555E+02 0.1400601121935343E+02 0.1404062804785455E+02 0.1407609786658558E+02 + 0.1411237208990064E+02 0.1414940022246391E+02 0.1418712999471152E+02 0.1422550749716204E+02 0.1426447731339282E+02 + 0.1430398265150846E+02 0.1434396547393582E+02 0.1438436662538888E+02 0.1442512595885534E+02 0.1446618245946512E+02 + 0.1450747436611004E+02 0.1454893929069182E+02 0.1459051433488456E+02 0.1463213620430574E+02 0.1467374131999813E+02 + 0.1471526592713335E+02 0.1475664620085529E+02 0.1479781834918989E+02 0.1483871871295512E+02 0.1487928386261246E+02 + 0.1491945069200887E+02 0.1495915650896474E+02 0.1499833912267056E+02 0.1503693692786206E+02 0.1507488898574914E+02 + 0.1511213510168126E+02 0.1514861589953717E+02 0.1518427289283329E+02 0.1521904855255031E+02 0.1525288637168290E+02 + 0.1528573092652318E+02 0.1531752793469264E+02 0.1534822430994272E+02 0.1537776821374822E+02 0.1540610910372214E+02 + 0.1543319777888478E+02 0.1545898642182323E+02 0.1548342863778163E+02 0.1550647949072526E+02 0.1552809553642536E+02 + 0.1554823485261403E+02 0.1556685706626144E+02 0.1558392337803033E+02 0.1559939658396475E+02 0.1561324109447264E+02 + 0.1562542295066320E+02 0.1563590983810227E+02 0.1564467109805053E+02 0.1565167773625032E+02 0.1565690242932856E+02 + 0.1566031952888424E+02 0.1566190506332994E+02 0.1566163673755728E+02 0.1565949393049741E+02 0.1565545769064767E+02 + 0.1564951072963612E+02 0.1564163741389599E+02 0.1563182375452176E+02 0.1562005739537916E+02 0.1560632759954093E+02 + 0.1559062523411967E+02 0.1557294275356961E+02 0.1555327418152762E+02 0.1553161509126428E+02 0.1550796258481429E+02 + 0.1548231527085568E+02 0.1545467324140574E+02 0.1542503804740110E+02 0.1539341267322875E+02 0.1535980151027311E+02 + 0.1532421032954375E+02 0.1528664625344730E+02 0.1524711772676548E+02 0.1520563448690045E+02 0.1516220753344726E+02 + 0.1511684909715194E+02 0.1506957260831226E+02 0.1502039266467727E+02 0.1496932499890005E+02 0.1491638644559677E+02 + 0.1486159490806366E+02 0.1480496932470243E+02 0.1474652963520277E+02 0.1468629674652943E+02 0.1462429249875961E+02 + 0.1456053963081552E+02 0.1449506174613458E+02 0.1442788327831924E+02 0.1435902945680608E+02 0.1428852627259312E+02 + 0.1421640044406208E+02 0.1414267938293157E+02 0.1406739116037524E+02 0.1399056447333767E+02 0.1391222861107943E+02 + 0.1383241342198120E+02 0.1375114928063558E+02 0.1366846705525355E+02 0.1358439807541183E+02 0.1349897410016506E+02 + 0.1341222728654655E+02 0.1332419015847903E+02 0.1323489557611632E+02 0.1314437670563505E+02 0.1305266698949474E+02 + 0.1295980011718308E+02 0.1286580999646230E+02 0.1277073072513102E+02 0.1267459656331543E+02 0.1257744190630183E+02 + 0.1247930125792220E+02 0.1238020920450298E+02 0.1228020038938623E+02 0.1217930948803182E+02 0.1207757118370758E+02 + 0.1197502014377439E+02 0.1187169099657116E+02 0.1176761830890495E+02 0.1166283656414955E+02 0.1155738014095610E+02 + 0.1145128329257739E+02 0.1134458012680787E+02 0.1123730458653994E+02 0.1112949043093634E+02 0.1102117121721842E+02 + 0.1091238028306897E+02 0.1080315072964744E+02 0.1069351540521540E+02 0.1058350688936919E+02 0.1047315747787608E+02 + 0.1036249916810981E+02 0.1025156364508113E+02 0.1014038226805835E+02 0.1002898605777191E+02 0.9917405684197892E+01 + 0.9805671454913359E+01 0.9693813304017528E+01 0.9581860781611367E+01 0.9469843043828288E+01 0.9357788843408597E+01 + 0.9245726520809420E+01 0.9133683995842015E+01 0.9021688759828107E+01 0.8909767868266561E+01 0.8797947934001263E+01 + 0.8686255120881437E+01 0.8574715137904995E+01 0.8463353233835596E+01 0.8352194192283553E+01 0.8241262327241410E+01 + 0.8130581479064045E+01 0.8020175010883365E+01 0.7910065805447962E+01 0.7800276262377434E+01 0.7690828295821206E+01 + 0.7581743332512092E+01 0.7473042310204099E+01 0.7364745676484368E+01 0.7256873387949169E+01 0.7149444909733861E+01 + 0.7042479215386244E+01 0.6935994787073786E+01 0.6830009616114025E+01 0.6724541203818547E+01 0.6619606562640385E+01 + 0.6515222217614777E+01 0.6411404208083596E+01 0.6308168089693712E+01 0.6205528936659299E+01 0.6103501344278738E+01 + 0.6002099431696649E+01 0.5901336844901273E+01 0.5801226759948285E+01 0.5701781886401747E+01 0.5603014470983003E+01 + 0.5504936301418622E+01 0.5407558710478755E+01 0.5310892580196972E+01 0.5214948346263076E+01 0.5119736002580636E+01 + 0.5025265105980838E+01 0.4931544781084478E+01 0.4838583725304196E+01 0.4746390213979240E+01 0.4654972105634751E+01 + 0.4564336847358377E+01 0.4474491480286574E+01 0.4385442645193613E+01 0.4297196588176073E+01 0.4209759166425876E+01 + 0.4123135854085263E+01 0.4037331748177098E+01 0.3952351574603862E+01 0.3868199694209329E+01 0.3784880108896700E+01 + 0.3702396467797228E+01 0.3620752073483427E+01 0.3539949888221543E+01 0.3459992540257458E+01 0.3380882330130837E+01 + 0.3302621237012444E+01 0.3225210925059441E+01 0.3148652749783842E+01 0.3072947764429528E+01 0.2998096726353141E+01 + 0.2924100103404396E+01 0.2850958080301697E+01 0.2778670564998860E+01 0.2707237195038878E+01 0.2636657343891009E+01 + 0.2566930127267545E+01 0.2498054409416378E+01 0.2430028809386447E+01 0.2362851707262292E+01 0.2296521250364838E+01 + 0.2231035359415401E+01 0.2166391734659781E+01 0.2102587861949918E+01 0.2039621018780374E+01 0.1977488280277051E+01 + 0.1916186525135823E+01 0.1855712441508784E+01 0.1796062532835888E+01 0.1737233123619909E+01 0.1679220365142876E+01 + 0.1622020241122005E+01 0.1565628573303434E+01 0.1510041026992134E+01 0.1455253116516494E+01 0.1401260210626005E+01 + 0.1348057537820834E+01 0.1295640191612015E+01 0.1244003135710985E+01 0.1193141209147503E+01 0.1143049131314995E+01 + 0.1093721506942225E+01 0.1045152830990733E+01 0.9973374934770503E+00 0.9502697842192204E+00 0.9039438975069450E+00 + 0.8583539366947573E+00 0.8134939187180027E+00 0.7693577785309419E+00 0.7259393734669808E+00 0.6832324875204686E+00 + 0.6412308355501580E+00 0.5999280674039510E+00 0.5593177719650326E+00 0.5193934811192902E+00 0.4801486736441256E+00 + 0.4415767790185855E+00 0.4036711811552292E+00 0.3664252220536028E+00 0.3298322053757856E+00 0.2938853999441776E+00 + 0.2585780431619257E+00 0.2239033443561915E+00 0.1898544880448611E+00 0.1564246371270075E+00 0.1236069359975595E+00 + 0.9139451358676925E-01 0.5978048632501255E-01 0.2875796103333898E-01 -0.1679962259405253E-02 -0.3154018757241899E-01 + -0.6082962030108538E-01 -0.8955516461660286E-01 -0.1177237209366101E+00 -0.1453421834658722E+00 -0.1724174378064842E+00 + -0.1989563586366328E+00 -0.2249658074573321E+00 -0.2504526304061375E+00 -0.2754236561371938E+00 -0.2998856937666934E+00 + -0.3238455308829152E+00 -0.3473099316199632E+00 -0.3702856347944674E+00 -0.3927793521041590E+00 -0.4147977663876007E+00 + -0.4363475299441409E+00 -0.4574352629131093E+00 -0.4780675517114195E+00 -0.4982509475286878E+00 -0.5179919648788196E+00 + -0.5372970802072690E+00 -0.5561727305530091E+00 -0.5746253122642059E+00 -0.5926611797667505E+00 -0.6102866443846747E+00 + -0.6275079732115432E+00 -0.6443313880318098E+00 -0.6607630642913176E+00 -0.6768091301158876E+00 -0.6924756653771867E+00 + -0.7077687008048035E+00 -0.7226942171437692E+00 -0.7372581443564278E+00 -0.7514663608678986E+00 -0.7653246928540729E+00 + -0.7788389135713435E+00 -0.7920147427271221E+00 -0.8048578458902081E+00 -0.8173738339401606E+00 -0.8295682625548225E+00 + -0.8414466317350016E+00 -0.8530143853655495E+00 -0.8642769108119376E+00 -0.8752395385514281E+00 -0.8859075418380596E+00 + -0.8962861364005478E+00 -0.9063804801723496E+00 -0.9161956730529236E+00 -0.9257367566995721E+00 -0.9350087143488421E+00 + -0.9440164706668895E+00 -0.9527648916278635E+00 -0.9612587844196464E+00 -0.9695028973760704E+00 -0.9775019199350281E+00 + -0.9852604826214921E+00 -0.9927831570549439E+00 -0.1000074455980330E+01 -0.1007138833321882E+01 -0.1013980684259106E+01 + -0.1020604345324242E+01 -0.1027014094520476E+01 -0.1033214151460282E+01 -0.1039208677523227E+01 -0.1045001776032526E+01 + -0.1050597492449770E+01 -0.1055999814587213E+01 -0.1061212672836912E+01 -0.1066239940416186E+01 -0.1071085433628814E+01 + -0.1075752912141292E+01 -0.1080246079273645E+01 -0.1084568582304249E+01 -0.1088724012788046E+01 -0.1092715906887623E+01 + -0.1096547745716693E+01 -0.1100222955695317E+01 -0.1103744908916555E+01 -0.1107116923523791E+01 -0.1110342264098502E+01 + -0.1113424142057791E+01 -0.1116365716061343E+01 -0.1119170092427236E+01 -0.1121840325556284E+01 -0.1124379418364351E+01 + -0.1126790322722266E+01 -0.1129075939902947E+01 -0.1131239121035218E+01 -0.1133282667564084E+01 -0.1135209331716900E+01 + -0.1137021816975156E+01 -0.1138722778551496E+01 -0.1140314823871568E+01 -0.1141800513060382E+01 -0.1143182359432848E+01 + -0.1144462829988106E+01 -0.1145644345907359E+01 -0.1146729283054887E+01 -0.1147719972481915E+01 -0.1148618700933064E+01 + -0.1149427711355036E+01 -0.1150149203407336E+01 -0.1150785333974662E+01 -0.1151338217680745E+01 -0.1151809927403365E+01 + -0.1152202494790314E+01 -0.1152517910775978E+01 -0.1152758126098446E+01 -0.1152925051816752E+01 -0.1153020559828135E+01 + -0.1153046483385062E+01 -0.1153004617611814E+01 -0.1152896720020397E+01 -0.1152724511025663E+01 -0.1152489674459358E+01 + -0.1152193858082955E+01 -0.1151838674099132E+01 -0.1151425699661622E+01 -0.1150956477383416E+01 -0.1150432515843014E+01 + -0.1149855290088658E+01 -0.1149226242140391E+01 -0.1148546781489776E+01 -0.1147818285597133E+01 -0.1147042100386233E+01 + -0.1146219540736222E+01 -0.1145351890970717E+01 -0.1144440405343972E+01 -0.1143486308523956E+01 -0.1142490796072246E+01 + -0.1141455034920708E+01 -0.1140380163844745E+01 -0.1139267293933129E+01 -0.1138117509054281E+01 -0.1136931866318917E+01 + -0.1135711396538980E+01 -0.1134457104682830E+01 -0.1133169970326549E+01 -0.1131850948101341E+01 -0.1130500968136960E+01 + -0.1129120936501098E+01 -0.1127711735634675E+01 -0.1126274224782987E+01 -0.1124809240422688E+01 -0.1123317596684496E+01 + -0.1121800085771649E+01 -0.1120257478374031E+01 -0.1118690524077965E+01 -0.1117099951771584E+01 -0.1115486470045851E+01 + -0.1113850767591084E+01 -0.1112193513589038E+01 -0.1110515358100515E+01 -0.1108816932448459E+01 -0.1107098849596516E+01 + -0.1105361704523115E+01 -0.1103606074590946E+01 -0.1101832519911928E+01 -0.1100041583707593E+01 -0.1098233792664933E+01 + -0.1096409657287642E+01 -0.1094569672242852E+01 -0.1092714316703250E+01 -0.1090844054684662E+01 -0.1088959335379075E+01 + -0.1087060593483124E+01 -0.1085148249522008E+01 -0.1083222710168924E+01 -0.1081284368559944E+01 -0.1079333604604411E+01 + -0.1077370785290845E+01 -0.1075396264988352E+01 -0.1073410385743633E+01 -0.1071413477573506E+01 -0.1069405858753038E+01 + -0.1067387836099281E+01 -0.1065359705250640E+01 -0.1063321750941883E+01 -0.1061274247274852E+01 -0.1059217457984850E+01 + -0.1057151636702792E+01 -0.1055077027213080E+01 -0.1052993863707296E+01 -0.1050902371033679E+01 -0.1048802764942500E+01 + -0.1046695252327259E+01 -0.1044580031461829E+01 -0.1042457292233526E+01 -0.1040327216372171E+01 -0.1038189977675128E+01 + -0.1036045742228431E+01 -0.1033894668623957E+01 -0.1031736908172717E+01 -0.1029572605114311E+01 -0.1027401896822551E+01 + -0.1025224914007316E+01 -0.1023041780912662E+01 -0.1020852615511239E+01 -0.1018657529695029E+01 -0.1016456629462466E+01 + -0.1014250015101953E+01 -0.1012037781371852E+01 -0.1009820017676932E+01 -0.1007596808241376E+01 -0.1005368232278329E+01 + -0.1003134364156065E+01 -0.1000895273560783E+01 -0.9986510256561214E+00 -0.9964016812393415E+00 -0.9941472968943378E+00 + -0.9918879251414070E+00 -0.9896236145838693E+00 -0.9873544100515853E+00 -0.9850803527413915E+00 -0.9828014803544729E+00 + -0.9805178272307916E+00 -0.9782294244804987E+00 -0.9759363001124680E+00 -0.9736384791599416E+00 -0.9713359838033104E+00 + -0.9690288334901421E+00 -0.9667170450524106E+00 -0.9644006328210118E+00 -0.9620796087376083E+00 -0.9597539824638249E+00 + -0.9574237614878179E+00 -0.9550889512283189E+00 -0.9527495551361136E+00 -0.9504055747930490E+00 -0.9480570100085778E+00 + -0.9457038589139001E+00 -0.9433461180537021E+00 -0.9409837824755957E+00 -0.9386168458172143E+00 -0.9362453003910622E+00 + -0.9338691372671331E+00 -0.9314883463533257E+00 -0.9291029164737088E+00 -0.9267128354446561E+00 -0.9243180901489110E+00 + -0.9219186666075736E+00 -0.9195145500500918E+00 -0.9171057249822572E+00 -0.9146921752522568E+00 -0.9122738841148049E+00 + -0.9098508342934115E+00 -0.9074230080407725E+00 -0.9049903871973761E+00 -0.9025529532482975E+00 -0.9001106873782734E+00 + -0.8976635705250287E+00 -0.8952115834309455E+00 -0.8927547066930527E+00 -0.8902929208114043E+00 -0.8878262062358644E+00 + -0.8853545434113288E+00 -0.8828779128213984E+00 -0.8803962950305826E+00 -0.8779096707249944E+00 -0.8754180207516187E+00 + -0.8729213261561652E+00 -0.8704195682195257E+00 -0.8679127284928716E+00 -0.8654007888314326E+00 -0.8628837314269541E+00 + -0.8603615388388851E+00 -0.8578341940243193E+00 -0.8553016803666958E+00 -0.8527639817033201E+00 -0.8502210823517030E+00 + -0.8476729671347476E+00 -0.8451196214048268E+00 -0.8425610310667432E+00 -0.8399971825996356E+00 -0.8374280630778245E+00 + -0.8348536601906327E+00 -0.8322739622612096E+00 -0.8296889582643635E+00 -0.8270986378434532E+00 -0.8245029913263251E+00 + -0.8219020097403632E+00 -0.8192956848266297E+00 -0.8166840090531358E+00 -0.8140669756272810E+00 -0.8114445785074459E+00 + -0.8088168124137882E+00 -0.8061836728382580E+00 -0.8035451560538301E+00 -0.8009012591230101E+00 -0.7982519799055862E+00 + -0.7955973170657049E+00 -0.7929372700782288E+00 -0.7902718392344300E+00 -0.7876010256470514E+00 -0.7849248312546936E+00 + -0.7822432588256222E+00 -0.7795563119609465E+00 -0.7768639950972300E+00 -0.7741663135085275E+00 -0.7714632733078751E+00 + -0.7687548814482437E+00 -0.7660411457229735E+00 -0.7633220747657076E+00 -0.7605976780498430E+00 -0.7578679658874885E+00 + -0.7551329494280029E+00 -0.7523926406560499E+00 -0.7496470523892526E+00 -0.7468961982754271E+00 -0.7441400927894049E+00 + -0.7413787512294852E+00 -0.7386121897135014E+00 -0.7358404251745365E+00 -0.7330634753562915E+00 -0.7302813588081042E+00 + -0.7274940948796763E+00 -0.7247017037154513E+00 -0.7219042062487405E+00 -0.7191016241955283E+00 -0.7162939800480140E+00 + -0.7134812970679073E+00 -0.7106635992794407E+00 -0.7078409114621805E+00 -0.7050132591435788E+00 -0.7021806685913191E+00 + -0.6993431668054603E+00 -0.6965007815103690E+00 -0.6936535411464760E+00 -0.6908014748618515E+00 -0.6879446125036175E+00 + -0.6850829846091927E+00 -0.6822166223973989E+00 -0.6793455577594238E+00 -0.6764698232496565E+00 -0.6735894520763950E+00 + -0.6707044780924551E+00 -0.6678149357856630E+00 -0.6649208602692607E+00 -0.6620222872722230E+00 -0.6591192531294906E+00 + -0.6562117947721472E+00 -0.6532999497175199E+00 -0.6503837560592365E+00 -0.6474632524572266E+00 -0.6445384781276909E+00 + -0.6416094728330407E+00 -0.6386762768718036E+00 -0.6357389310685252E+00 -0.6327974767636543E+00 -0.6298519558034233E+00 + -0.6269024105297427E+00 -0.6239488837700962E+00 -0.6209914188274636E+00 -0.6180300594702640E+00 -0.6150648499223307E+00 + -0.6120958348529247E+00 -0.6091230593667976E+00 -0.6061465689942978E+00 -0.6031664096815428E+00 -0.6001826277806448E+00 + -0.5971952700400222E+00 -0.5942043835947710E+00 -0.5912100159571299E+00 -0.5882122150070307E+00 -0.5852110289827398E+00 + -0.5822065064716095E+00 -0.5791986964009260E+00 -0.5761876480288783E+00 -0.5731734109356420E+00 -0.5701560350145878E+00 + -0.5671355704636246E+00 -0.5641120677766707E+00 -0.5610855777352810E+00 -0.5580561514004118E+00 -0.5550238401043444E+00 + -0.5519886954427705E+00 -0.5489507692670410E+00 -0.5459101136765916E+00 -0.5428667810115466E+00 -0.5398208238455037E+00 + -0.5367722949785179E+00 -0.5337212474302724E+00 -0.5306677344334658E+00 -0.5276118094273992E+00 -0.5245535260517865E+00 + -0.5214929381407842E+00 -0.5184300997172553E+00 -0.5153650649872665E+00 -0.5122978883348268E+00 -0.5092286243168869E+00 + -0.5061573276585855E+00 -0.5030840532487656E+00 -0.5000088561357634E+00 -0.4969317915234724E+00 -0.4938529147677048E+00 + -0.4907722813728380E+00 -0.4876899469887706E+00 -0.4846059674081886E+00 -0.4815203985641517E+00 -0.4784332965280080E+00 + -0.4753447175076490E+00 -0.4722547178461055E+00 -0.4691633540205086E+00 -0.4660706826414067E+00 -0.4629767604524667E+00 + -0.4598816443305548E+00 -0.4567853912862148E+00 -0.4536880584645588E+00 -0.4505897031465675E+00 -0.4474903827508280E+00 + -0.4443901548357052E+00 -0.4412890771019746E+00 -0.4381872073959169E+00 -0.4350846037128897E+00 -0.4319813242013982E+00 + -0.4288774271676646E+00 -0.4257729710807258E+00 -0.4226680145780600E+00 -0.4195626164717658E+00 -0.4164568357553127E+00 + -0.4133507316108669E+00 -0.4102443634172216E+00 -0.4071377907583458E+00 -0.4040310734325635E+00 -0.4009242714623935E+00 + -0.3978174451050561E+00 -0.3947106548636826E+00 -0.3916039614992301E+00 -0.3884974260431417E+00 -0.3853911098107584E+00 + -0.3822850744155176E+00 -0.3791793817839579E+00 -0.3760740941715547E+00 -0.3729692741794092E+00 -0.3698649847718308E+00 + -0.3667612892948207E+00 -0.3636582514955066E+00 -0.3605559355425407E+00 -0.3574544060475049E+00 -0.3543537280873476E+00 + -0.3512539672278892E+00 -0.3481551895484317E+00 -0.3450574616675028E+00 -0.3419608507697824E+00 -0.3388654246342396E+00 + -0.3357712516635236E+00 -0.3326784009146562E+00 -0.3295869421310594E+00 -0.3264969457759724E+00 -0.3234084830672975E+00 + -0.3203216260139267E+00 -0.3172364474535990E+00 -0.3141530210923392E+00 -0.3110714215455339E+00 -0.3079917243806994E+00 + -0.3049140061619978E+00 -0.3018383444965689E+00 -0.2987648180827280E+00 -0.2956935067601084E+00 -0.2926244915618033E+00 + -0.2895578547685831E+00 -0.2864936799652645E+00 -0.2834320520992921E+00 -0.2803730575416270E+00 -0.2773167841500085E+00 + -0.2742633213346799E+00 -0.2712127601266646E+00 -0.2681651932486745E+00 -0.2651207151887529E+00 -0.2620794222767396E+00 + -0.2590414127636577E+00 -0.2560067869041315E+00 -0.2529756470419290E+00 -0.2499480976987507E+00 -0.2469242456663659E+00 + -0.2439042001022238E+00 -0.2408880726286486E+00 -0.2378759774357503E+00 -0.2348680313881797E+00 -0.2318643541358485E+00 + -0.2288650682287657E+00 -0.2258702992361172E+00 -0.2228801758697354E+00 -0.2198948301121145E+00 -0.2169143973491063E+00 + -0.2139390165074705E+00 -0.2109688301974238E+00 -0.2080039848603569E+00 -0.2050446309218908E+00 -0.2020909229504274E+00 + -0.1991430198213881E+00 -0.1962010848872974E+00 -0.1932652861539021E+00 -0.1903357964625070E+00 -0.1874127936787024E+00 + -0.1844964608876812E+00 -0.1815869865963202E+00 -0.1786845649422172E+00 -0.1757893959098759E+00 -0.1729016855542115E+00 + -0.1700216462315742E+00 -0.1671494968384586E+00 -0.1642854630580883E+00 -0.1614297776150348E+00 -0.1585826805380398E+00 + -0.1557444194312012E+00 -0.1529152497536538E+00 -0.1500954351078926E+00 -0.1472852475368416E+00 -0.1444849678297712E+00 + -0.1416948858371486E+00 -0.1389153007944590E+00 -0.1361465216550372E+00 -0.1333888674318927E+00 -0.1306426675484822E+00 + -0.1279082621983536E+00 -0.1251860027135053E+00 -0.1224762519412908E+00 -0.1197793846295987E+00 -0.1170957878199916E+00 + -0.1144258612484021E+00 -0.1117700177528869E+00 -0.1091286836878541E+00 -0.1065022993440523E+00 -0.1038913193734918E+00 + -0.1012962132183315E+00 -0.9871746554259221E-01 -0.9615557666540349E-01 -0.9361106299427452E-01 -0.9108445745667579E-01 + -0.8857630992797585E-01 -0.8608718765349675E-01 -0.8361767566217436E-01 -0.8116837716895883E-01 -0.7873991396273913E-01 + -0.7633292677617219E-01 -0.7394807563333809E-01 -0.7158604017067217E-01 -0.6924751992606029E-01 -0.6693323459041152E-01 + -0.6464392421534722E-01 -0.6238034936994107E-01 -0.6014329123865809E-01 -0.5793355165176966E-01 -0.5575195303860343E-01 + -0.5359933829294623E-01 -0.5147657053882339E-01 -0.4938453278367397E-01 -0.4732412744463571E-01 -0.4529627573227194E-01 + -0.4330191687455879E-01 -0.4134200716236433E-01 -0.3941751879595017E-01 -0.3752943851022626E-01 -0.3567876595462575E-01 + -0.3386651180149903E-01 -0.3209369555493235E-01 -0.3036134302986153E-01 -0.2867048346931652E-01 -0.2702214626567594E-01 + -0.2541735724993743E-01 -0.2385713451135265E-01 -0.2234248370839688E-01 -0.2087439283106441E-01 -0.1945382637408551E-01 + -0.1808171888098112E-01 -0.1675896782019106E-01 -0.1548642575704695E-01 -0.1426489178948888E-01 -0.1309510222150092E-01 + -0.1197772045673314E-01 -0.1091332610623831E-01 -0.9902403319266216E-02 -0.8945328365362132E-02 -0.8042356520369600E-02 + -0.7193608339198911E-02 -0.6399055435312237E-02 -0.5658505931682774E-02 -0.4971589801402351E-02 -0.4337744378844948E-02 + -0.3756200394787513E-02 -0.3225968971126078E-02 -0.2745830102014657E-02 -0.2314323246553361E-02 -0.1929740760130854E-02 + -0.1590124991640147E-02 -0.1293269963677403E-02 -0.1036728620523732E-02 -0.8178266578560640E-03 -0.6336839173092652E-03 + -0.4812442114554411E-03 -0.3573142088885663E-03 -0.2586116204308245E-03 -0.1818223529741868E-03 -0.1236655132753167E-03 + -0.8096414791917507E-04 -0.5071843506793948E-04 -0.3017679859046307E-04 -0.1689928305171012E-04 -0.8806800438416483E-05 + -0.4209924174242123E-05 -0.1812186230608453E-05 -0.6856430207874943E-06 -0.2207762234777510E-06 -0.5789808120346374E-07 + -0.1162764438867681E-07 -0.1636092194626611E-08 -0.1411469196261160E-09 -0.6053864648970130E-11 -0.9102103938482552E-13 + -0.2557695550579744E-15 -0.3818161159862620E-19 -0.1608640056516381E-25 -0.2867908542943528E-38 -0.1639405452192707E-76 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.1490972894185426E+01 0.2898594369705328E+01 0.4226102647398204E+01 0.5476628578286624E+01 + 0.6653199649346901E+01 0.7758744314426550E+01 0.8796096630727330E+01 0.9768001136837229E+01 0.1067711788189623E+02 + 0.1152602750277483E+02 0.1231723624359168E+02 0.1305318081663842E+02 0.1373623301352756E+02 0.1436870398832137E+02 + 0.1495284814912227E+02 0.1549086661002188E+02 0.1598491017060163E+02 0.1643708180475745E+02 0.1684943865406904E+02 + 0.1722399353297733E+02 0.1756271596351480E+02 0.1786753276618034E+02 0.1814032824076472E+02 0.1838294397656276E+02 + 0.1859717833554092E+02 0.1878478565478038E+02 0.1894747521601122E+02 0.1908691003043678E+02 0.1920470548645839E+02 + 0.1930242790649218E+02 0.1938159305696006E+02 0.1944366465286470E+02 0.1949005289524725E+02 0.1952211307638757E+02 + 0.1954114428394226E+02 0.1954838823141548E+02 0.1954502823850324E+02 0.1953218838101044E+02 0.1951093282627426E+02 + 0.1948226536638306E+02 0.1944712915800228E+02 0.1940640667433629E+02 0.1936091987169615E+02 0.1931143057032402E+02 + 0.1925864104655939E+02 0.1920319483112569E+02 0.1914567770627270E+02 0.1908661889272693E+02 0.1902649241587448E+02 + 0.1896571863932183E+02 0.1890466595293786E+02 0.1884365260166379E+02 0.1878294864077429E+02 0.1872277800286541E+02 + 0.1866332066162236E+02 0.1860471487736171E+02 0.1854705950943718E+02 0.1849041638082738E+02 0.1843481268057272E+02 + 0.1838024339018270E+02 0.1832667372067947E+02 0.1827404154756324E+02 0.1822225983166999E+02 0.1817121901462569E+02 + 0.1812078937837576E+02 0.1807082335907063E+02 0.1802115780640943E+02 0.1797161618037463E+02 0.1792201067812283E+02 + 0.1787214428462332E+02 0.1782181274145043E+02 0.1777080642893208E+02 0.1771891215763021E+02 0.1766591486587512E+02 + 0.1761159922079143E+02 0.1755575112093501E+02 0.1749815909930632E+02 0.1743861562611338E+02 0.1737691831122648E+02 + 0.1731287100679569E+02 0.1724628481099027E+02 0.1717697897426687E+02 0.1710478170998087E+02 0.1702953091152244E+02 + 0.1695107477848783E+02 0.1686927235468663E+02 0.1678399398103932E+02 0.1669512166663813E+02 0.1660254938142798E+02 + 0.1650618327411663E+02 0.1640594181904419E+02 0.1630175589583457E+02 0.1619356880571659E+02 0.1608133622844232E+02 + 0.1596502612374653E+02 0.1584461858128563E+02 0.1572010562296940E+02 0.1559149096155470E+02 0.1545878971931102E+02 + 0.1532202811049239E+02 0.1518124309126241E+02 0.1503648198061937E+02 0.1488780205575875E+02 0.1473527012519185E+02 + 0.1457896208281294E+02 0.1441896244597594E+02 0.1425536388050388E+02 0.1408826671541400E+02 0.1391777844999757E+02 + 0.1374401325574798E+02 0.1356709147548415E+02 0.1338713912187045E+02 0.1320428737738750E+02 0.1301867209766444E+02 + 0.1283043331994052E+02 0.1263971477828357E+02 0.1244666342705594E+02 0.1225142897398476E+02 0.1205416342406364E+02 + 0.1185502063538666E+02 0.1165415588789458E+02 0.1145172546589620E+02 0.1124788625511554E+02 0.1104279535490879E+02 + 0.1083660970619294E+02 0.1062948573553064E+02 0.1042157901572463E+02 0.1021304394318828E+02 0.1000403343227721E+02 + 0.9794698626690922E+01 0.9585188627981971E+01 0.9375650241143855E+01 0.9166227737187679E+01 0.8957062632560726E+01 + 0.8748293485208164E+01 0.8540055707031815E+01 0.8332481392456542E+01 0.8125699162775922E+01 0.7919834025914198E+01 + 0.7715007251210231E+01 0.7511336258802102E+01 0.7308934523167021E+01 0.7107911490350968E+01 0.6908372508405361E+01 + 0.6710418770533413E+01 0.6514147270438017E+01 0.6319650769353934E+01 0.6127017774240882E+01 0.5936332526610492E+01 + 0.5747675001458052E+01 0.5561120915770464E+01 0.5376741746084129E+01 0.5194604754569927E+01 0.5014773023128366E+01 + 0.4837305494984530E+01 0.4662257023280675E+01 0.4489678426173787E+01 0.4319616547955467E+01 0.4152114325723103E+01 + 0.3987210861143229E+01 0.3824941496860732E+01 0.3665337897121076E+01 0.3508428132186630E+01 0.3354236766142388E+01 + 0.3202784947701370E+01 0.3054090503634531E+01 0.2908168034465503E+01 0.2765029012085665E+01 0.2624681878960210E+01 + 0.2487132148611466E+01 0.2352382507080828E+01 0.2220432915085888E+01 0.2091280710604522E+01 0.1964920711632258E+01 + 0.1841345318874233E+01 0.1720544618147173E+01 0.1602506482281042E+01 0.1487216672323735E+01 0.1374658937865809E+01 + 0.1264815116314972E+01 0.1157665230963353E+01 0.1053187587702279E+01 0.9513588702517990E+00 0.8521542337834218E+00 + 0.7555473968256491E+00 0.6615107313528323E+00 0.5700153509680036E+00 0.4810311971000716E+00 0.3945271231455855E+00 + 0.3104709764939235E+00 0.2288296783834506E+00 0.1495693015446019E+00 0.7265514559315535E-01 -0.1948189855172862E-02 + -0.7427673437111640E-01 -0.1443670782148313E+00 -0.2122563061647371E+00 -0.2779819336760306E+00 -0.3415818453668393E+00 + -0.4030942358252462E+00 -0.4625575527254874E+00 -0.5200104422372566E+00 -0.5754916967079484E+00 -0.6290402045940768E+00 + -0.6806949026143181E+00 -0.7304947300937417E+00 -0.7784785854658435E+00 -0.8246852848961586E+00 -0.8691535229891830E+00 + -0.9119218355379459E+00 -0.9530285642737767E+00 -0.9925118235722190E+00 -0.1030409469069388E+01 -0.1066759068142054E+01 + -0.1101597872203433E+01 -0.1134962790765932E+01 -0.1166890367221378E+01 -0.1197416756288568E+01 -0.1226577703077706E+01 + -0.1254408523721037E+01 -0.1280944087518682E+01 -0.1306218800548890E+01 -0.1330266590691901E+01 -0.1353120894016819E+01 + -0.1374814642481296E+01 -0.1395380252894130E+01 -0.1414849617091440E+01 -0.1433254093277628E+01 -0.1450624498482941E+01 + -0.1466991102090209E+01 -0.1482383620384031E+01 -0.1496831212076521E+01 -0.1510362474764622E+01 -0.1523005442274803E+01 + -0.1534787582851975E+01 -0.1545735798150416E+01 -0.1555876422985430E+01 -0.1565235225805577E+01 -0.1573837409846275E+01 + -0.1581707614926664E+01 -0.1588869919852685E+01 -0.1595347845390397E+01 -0.1601164357774630E+01 -0.1606341872719178E+01 + -0.1610902259895794E+01 -0.1614866847850344E+01 -0.1618256429325549E+01 -0.1621091266960840E+01 -0.1623391099340840E+01 + -0.1625175147365167E+01 -0.1626462120913114E+01 -0.1627270225777996E+01 -0.1627617170846768E+01 -0.1627520175501631E+01 + -0.1626995977221341E+01 -0.1626060839360731E+01 -0.1624730559088164E+01 -0.1623020475461238E+01 -0.1620945477622288E+01 + -0.1618520013095815E+01 -0.1615758096171077E+01 -0.1612673316353719E+01 -0.1609278846871282E+01 -0.1605587453218097E+01 + -0.1601611501725963E+01 -0.1597362968147642E+01 -0.1592853446240992E+01 -0.1588094156342277E+01 -0.1583095953917781E+01 + -0.1577869338083636E+01 -0.1572424460084281E+01 -0.1566771131720695E+01 -0.1560918833720039E+01 -0.1554876724038992E+01 + -0.1548653646093535E+01 -0.1542258136908566E+01 -0.1535698435181091E+01 -0.1528982489251385E+01 -0.1522117964976844E+01 + -0.1515112253503763E+01 -0.1507972478932725E+01 -0.1500705505873594E+01 -0.1493317946886631E+01 -0.1485816169806484E+01 + -0.1478206304946291E+01 -0.1470494252179348E+01 -0.1462685687896228E+01 -0.1454786071835450E+01 -0.1446800653786156E+01 + -0.1438734480161472E+01 -0.1430592400441542E+01 -0.1422379073485444E+01 -0.1414098973711402E+01 -0.1405756397145003E+01 + -0.1397355467335255E+01 -0.1388900141138563E+01 -0.1380394214370867E+01 -0.1371841327328378E+01 -0.1363244970177461E+01 + -0.1354608488214437E+01 -0.1345935086996126E+01 -0.1337227837342175E+01 -0.1328489680210275E+01 -0.1319723431445484E+01 + -0.1310931786405037E+01 -0.1302117324460026E+01 -0.1293282513375510E+01 -0.1284429713570631E+01 -0.1275561182260429E+01 + -0.1266679077481073E+01 -0.1257785462000340E+01 -0.1248882307115163E+01 -0.1239971496338172E+01 -0.1231054828975166E+01 + -0.1222134023595495E+01 -0.1213210721397372E+01 -0.1204286489470143E+01 -0.1195362823955608E+01 -0.1186441153110434E+01 + -0.1177522840271803E+01 -0.1168609186728368E+01 -0.1159701434498662E+01 -0.1150800769019061E+01 -0.1141908321743441E+01 + -0.1133025172656630E+01 -0.1124152352703810E+01 -0.1115290846137928E+01 -0.1106441592787264E+01 -0.1097605490245227E+01 + -0.1088783395984451E+01 -0.1079976129397275E+01 -0.1071184473764625E+01 -0.1062409178155359E+01 -0.1053650959258049E+01 + -0.1044910503147221E+01 -0.1036188466985990E+01 -0.1027485480667053E+01 -0.1018802148393944E+01 -0.1010139050204464E+01 + -0.1001496743438119E+01 -0.9928757641494527E+00 -0.9842766284690484E+00 -0.9756998339140143E+00 -0.9671458606496940E+00 + -0.9586151727043447E+00 -0.9501082191384856E+00 -0.9416254351705762E+00 -0.9331672432606939E+00 -0.9247340541538072E+00 + -0.9163262678842421E+00 -0.9079442747428956E+00 -0.8995884562087340E+00 -0.8912591858460664E+00 -0.8829568301690750E+00 + -0.8746817494750385E+00 -0.8664342986476723E+00 -0.8582148279319598E+00 -0.8500236836818522E+00 -0.8418612090821510E+00 + -0.8337277448458742E+00 -0.8256236298884094E+00 -0.8175492019796625E+00 -0.8095047983754566E+00 -0.8014907564293513E+00 + -0.7935074141860654E+00 -0.7855551109576326E+00 -0.7776341878834073E+00 -0.7697449884750045E+00 -0.7618878591472366E+00 + -0.7540631497360738E+00 -0.7462712140046344E+00 -0.7385124101381848E+00 -0.7307871012290940E+00 -0.7230956557526664E+00 + -0.7154384480347357E+00 -0.7078158587119011E+00 -0.7002282751852088E+00 -0.6926760920681024E+00 -0.6851597116293913E+00 + -0.6776795442319780E+00 -0.6702360087680368E+00 -0.6628295330912921E+00 -0.6554605544470310E+00 -0.6481295199004043E+00 + -0.6408368867635551E+00 -0.6335831230220497E+00 -0.6263687077610380E+00 -0.6191941315915128E+00 -0.6120598970769715E+00 + -0.6049665191607240E+00 -0.5979145255940220E+00 -0.5909044573650831E+00 -0.5839368691290320E+00 -0.5770123296386506E+00 + -0.5701314221757601E+00 -0.5632947449829158E+00 -0.5565029116949882E+00 -0.5497565517700718E+00 -0.5430563109189926E+00 + -0.5364028515325477E+00 -0.5297968531054059E+00 -0.5232390126554224E+00 -0.5167300451368810E+00 -0.5102706838459522E+00 + -0.5038616808163805E+00 -0.4975038072031411E+00 -0.4911978536514589E+00 -0.4849446306482554E+00 -0.4787449688526985E+00 + -0.4725997194020929E+00 -0.4665097541888966E+00 -0.4604759661041344E+00 -0.4544992692419215E+00 -0.4485805990591846E+00 + -0.4427209124840173E+00 -0.4369211879653461E+00 -0.4311824254558134E+00 -0.4255056463188713E+00 -0.4198918931501576E+00 + -0.4143422295021775E+00 -0.4088577395001772E+00 -0.4034395273358983E+00 -0.3980887166245596E+00 -0.3928064496090112E+00 + -0.3875938861934557E+00 -0.3824522027875051E+00 -0.3773825909395854E+00 -0.3723862557368422E+00 -0.3674644139467203E+00 + -0.3626182918733373E+00 -0.3578491228995945E+00 -0.3531581446837392E+00 -0.3485465959768078E+00 -0.3440157130250673E+00 + -0.3395667255192788E+00 -0.3352008520504021E+00 -0.3309192950292724E+00 -0.3267232350259450E+00 -0.3226138244828918E+00 + -0.3185921807551977E+00 -0.3146593784305226E+00 -0.3108164408820478E+00 -0.3070643310091922E+00 -0.3034039411238457E+00 + -0.2998360819446073E+00 -0.2963614706684425E+00 -0.2929807180988327E+00 -0.2896943148224383E+00 -0.2865026164432708E+00 + -0.2834058279051005E+00 -0.2804039869602682E+00 -0.2774969468771566E+00 -0.2746843585203667E+00 -0.2719656519882723E+00 + -0.2693400180531267E+00 -0.2668063897203013E+00 -0.2643634243062732E+00 -0.2620094865300300E+00 -0.2597426332192892E+00 + -0.2575606003500299E+00 -0.2554607932624695E+00 -0.2534402810239623E+00 -0.2514957960316366E+00 -0.2496237400535760E+00 + -0.2478201979810306E+00 -0.2460809605838598E+00 -0.2444015574991944E+00 -0.2427773015044900E+00 -0.2412033447902379E+00 + -0.2396747474109387E+00 -0.2381865573144384E+00 -0.2367339003009647E+00 -0.2353120769446503E+00 -0.2339166619743637E+00 + -0.2325435999910598E+00 -0.2311892899420583E+00 -0.2298506498591054E+00 -0.2285251535007102E+00 -0.2272108322697357E+00 + -0.2259062395150722E+00 -0.2246103800296458E+00 -0.2233226143482858E+00 -0.2220425533758296E+00 -0.2207699612307818E+00 + -0.2195046807982463E+00 -0.2182465877415019E+00 -0.2169955687347858E+00 -0.2157515141286527E+00 -0.2145143163564465E+00 + -0.2132838697320672E+00 -0.2120600704271507E+00 -0.2108428164580473E+00 -0.2096320076725845E+00 -0.2084275457364440E+00 + -0.2072293341191706E+00 -0.2060372780798283E+00 -0.2048512846523208E+00 -0.2036712626303956E+00 -0.2024971225523388E+00 + -0.2013287766853885E+00 -0.2001661390098699E+00 -0.1990091252030775E+00 -0.1978576526229085E+00 -0.1967116402912710E+00 + -0.1955710088772761E+00 -0.1944356806802258E+00 -0.1933055796124141E+00 -0.1921806311817510E+00 -0.1910607624742264E+00 + -0.1899459021362168E+00 -0.1888359803566597E+00 -0.1877309288490946E+00 -0.1866306808335939E+00 -0.1855351710185818E+00 + -0.1844443355825659E+00 -0.1833581121557800E+00 -0.1822764398017569E+00 -0.1811992589988340E+00 -0.1801265116216080E+00 + -0.1790581409223451E+00 -0.1779940915123532E+00 -0.1769343093433298E+00 -0.1758787416886912E+00 -0.1748273371248939E+00 + -0.1737800455127509E+00 -0.1727368179787582E+00 -0.1716976068964338E+00 -0.1706623658676789E+00 -0.1696310497041661E+00 + -0.1686036144087650E+00 -0.1675800171570109E+00 -0.1665602162786198E+00 -0.1655441712390600E+00 -0.1645318426211851E+00 + -0.1635231921069348E+00 -0.1625181824591057E+00 -0.1615167775032033E+00 -0.1605189421093761E+00 -0.1595246421744391E+00 + -0.1585338446039885E+00 -0.1575465172946173E+00 -0.1565626291162327E+00 -0.1555821498944797E+00 -0.1546050503932762E+00 + -0.1536313022974632E+00 -0.1526608781955763E+00 -0.1516937515627348E+00 -0.1507298967436624E+00 -0.1497692889358336E+00 + -0.1488119041727559E+00 -0.1478577193073842E+00 -0.1469067119956771E+00 -0.1459588606802934E+00 -0.1450141445744331E+00 + -0.1440725436458233E+00 -0.1431340386008554E+00 -0.1421986108688733E+00 -0.1412662425866119E+00 -0.1403369165827954E+00 + -0.1394106163628882E+00 -0.1384873260940094E+00 -0.1375670305900030E+00 -0.1366497152966734E+00 -0.1357353662771839E+00 + -0.1348239701976193E+00 -0.1339155143127141E+00 -0.1330099864517488E+00 -0.1321073750046149E+00 -0.1312076689080463E+00 + -0.1303108576320237E+00 -0.1294169311663473E+00 -0.1285258800073831E+00 -0.1276376951449777E+00 -0.1267523680495491E+00 + -0.1258698906593478E+00 -0.1249902553678929E+00 -0.1241134550115789E+00 -0.1232394828574590E+00 -0.1223683325912011E+00 + -0.1214999983052166E+00 -0.1206344744869641E+00 -0.1197717560074267E+00 -0.1189118381097634E+00 -0.1180547163981319E+00 + -0.1172003868266877E+00 -0.1163488456887531E+00 -0.1155000896061621E+00 -0.1146541155187737E+00 -0.1138109206741603E+00 + -0.1129705026174663E+00 -0.1121328591814367E+00 -0.1112979884766172E+00 -0.1104658888817227E+00 -0.1096365590341772E+00 + -0.1088099978208190E+00 -0.1079862043687761E+00 -0.1071651780365066E+00 -0.1063469184050076E+00 -0.1055314252691870E+00 + -0.1047186986294014E+00 -0.1039087386831581E+00 -0.1031015458169785E+00 -0.1022971205984247E+00 -0.1014954637682864E+00 + -0.1006965762329294E+00 -0.9990045905680092E-01 -0.9910711345509600E-01 -0.9831654078657849E-01 -0.9752874254656095E-01 + -0.9674372036003734E-01 -0.9596147597497186E-01 -0.9518201125574054E-01 -0.9440532817672517E-01 -0.9363142881605759E-01 + -0.9286031534951537E-01 -0.9209199004456679E-01 -0.9132645525456264E-01 -0.9056371341307594E-01 -0.8980376702838780E-01 + -0.8904661867811879E-01 -0.8829227100400254E-01 -0.8754072670680409E-01 -0.8679198854137972E-01 -0.8604605931187735E-01 + -0.8530294186707681E-01 -0.8456263909586934E-01 -0.8382515392287562E-01 -0.8309048930419941E-01 -0.8235864822331807E-01 + -0.8162963368710800E-01 -0.8090344872200475E-01 -0.8018009637029486E-01 -0.7945957968654156E-01 -0.7874190173414135E-01 + -0.7802706558201103E-01 -0.7731507430140443E-01 -0.7660593096285831E-01 -0.7589963863326689E-01 -0.7519620037308256E-01 + -0.7449561923364434E-01 -0.7379789825463164E-01 -0.7310304046164423E-01 -0.7241104886390530E-01 -0.7172192645209033E-01 + -0.7103567619627764E-01 -0.7035230104402376E-01 -0.6967180391855922E-01 -0.6899418771710759E-01 -0.6831945530932572E-01 + -0.6764760953586510E-01 -0.6697865320705315E-01 -0.6631258910169627E-01 -0.6564941996600249E-01 -0.6498914851262336E-01 + -0.6433177741981720E-01 -0.6367730933073025E-01 -0.6302574685279916E-01 -0.6237709255727147E-01 -0.6173134897884694E-01 + -0.6108851861543815E-01 -0.6044860392805121E-01 -0.5981160734078578E-01 -0.5917753124095684E-01 -0.5854637797933600E-01 + -0.5791814987051506E-01 -0.5729284919339011E-01 -0.5667047819176833E-01 -0.5605103907509822E-01 -0.5543453401932198E-01 + -0.5482096516785345E-01 -0.5421033463268072E-01 -0.5360264449559476E-01 -0.5299789680954505E-01 -0.5239609360012387E-01 + -0.5179723686717961E-01 -0.5120132858656160E-01 -0.5060837071199547E-01 -0.5001836517709381E-01 -0.4943131389750106E-01 + -0.4884721877317583E-01 -0.4826608169081145E-01 -0.4768790452639723E-01 -0.4711268914792258E-01 -0.4654043741822612E-01 + -0.4597115119799098E-01 -0.4540483234889028E-01 -0.4484148273688456E-01 -0.4428110423567344E-01 -0.4372369873030461E-01 + -0.4316926812094350E-01 -0.4261781432680625E-01 -0.4206933929025882E-01 -0.4152384498108628E-01 -0.4098133340093556E-01 + -0.4044180658793538E-01 -0.3990526662149652E-01 -0.3937171562729746E-01 -0.3884115578245902E-01 -0.3831358932091222E-01 + -0.3778901853896358E-01 -0.3726744580106369E-01 -0.3674887354578273E-01 -0.3623330429199824E-01 -0.3572074064530062E-01 + -0.3521118530462180E-01 -0.3470464106909250E-01 -0.3420111084513349E-01 -0.3370059765378802E-01 -0.3320310463829990E-01 + -0.3270863507194550E-01 -0.3221719236612464E-01 -0.3172878007871772E-01 -0.3124340192271698E-01 -0.3076106177513717E-01 + -0.3028176368621473E-01 -0.2980551188890199E-01 -0.2933231080866432E-01 -0.2886216507358872E-01 -0.2839507952481046E-01 + -0.2793105922726807E-01 -0.2747010948079293E-01 -0.2701223583154306E-01 -0.2655744408378990E-01 -0.2610574031206566E-01 + -0.2565713087368143E-01 -0.2521162242162311E-01 -0.2476922191783597E-01 -0.2432993664690480E-01 -0.2389377423013912E-01 + -0.2346074264007272E-01 -0.2303085021538444E-01 -0.2260410567625017E-01 -0.2218051814013276E-01 -0.2176009713801780E-01 + -0.2134285263110349E-01 -0.2092879502794953E-01 -0.2051793520209298E-01 -0.2011028451013516E-01 -0.1970585481030489E-01 + -0.1930465848150186E-01 -0.1890670844282149E-01 -0.1851201817356444E-01 -0.1812060173372857E-01 -0.1773247378498237E-01 + -0.1734764961211651E-01 -0.1696614514496612E-01 -0.1658797698079692E-01 -0.1621316240714285E-01 -0.1584171942508113E-01 + -0.1547366677292802E-01 -0.1510902395033159E-01 -0.1474781124273767E-01 -0.1439004974619603E-01 -0.1403576139247217E-01 + -0.1368496897442080E-01 -0.1333769617157242E-01 -0.1299396757587675E-01 -0.1265380871753636E-01 -0.1231724609085785E-01 + -0.1198430718003442E-01 -0.1165502048476427E-01 -0.1132941554559642E-01 -0.1100752296888000E-01 -0.1068937445118038E-01 + -0.1037500280300520E-01 -0.1006444197166726E-01 -0.9757727063089234E-02 -0.9454894362331736E-02 -0.9155981352602857E-02 + -0.8861026732477590E-02 -0.8570070431026370E-02 -0.8283153620518910E-02 -0.8000318726330972E-02 -0.7721609433644288E-02 + -0.7447070690483597E-02 -0.7176748706588126E-02 -0.6910690947562739E-02 -0.6648946123695469E-02 -0.6391564172768492E-02 + -0.6138596236119977E-02 -0.5890094627143023E-02 -0.5646112791328837E-02 -0.5406705256875357E-02 -0.5171927574793084E-02 + -0.4941836247340325E-02 -0.4716488643516831E-02 -0.4495942900234213E-02 -0.4280257807663031E-02 -0.4069492677135494E-02 + -0.3863707189852578E-02 -0.3662961224513759E-02 -0.3467314661850819E-02 -0.3276827163911870E-02 -0.3091557925807099E-02 + -0.2911565397496689E-02 -0.2736906973081798E-02 -0.2567638644951017E-02 -0.2403814620049312E-02 -0.2245486895479086E-02 + -0.2092704790623673E-02 -0.1945514433017997E-02 -0.1803958195289058E-02 -0.1668074080673803E-02 -0.1537895054912087E-02 + -0.1413448322734187E-02 -0.1294754547748605E-02 -0.1181827015318322E-02 -0.1074670739037643E-02 -0.9732815127318119E-03 + -0.8776449115510747E-03 -0.7877352477807324E-03 -0.7035144894988547E-03 -0.6249311532533495E-03 -0.5519191855637202E-03 + -0.4843968523409821E-03 -0.4222656603112821E-03 -0.3654093402469373E-03 -0.3136929282422736E-03 -0.2669619883460904E-03 + -0.2250420274226155E-03 -0.1877381608793739E-03 -0.1548350954324305E-03 -0.1260975017208530E-03 -0.1012708544007759E-03 + -0.8008281908161370E-04 -0.6224526246190971E-04 -0.4745695222159778E-04 -0.3540699419800758E-04 -0.2577902344419184E-04 + -0.1825612034243538E-04 -0.1252636105889374E-04 -0.8288832859917125E-05 -0.5259851630896392E-05 -0.3179018438370757E-05 + -0.1814657830647114E-05 -0.9681145896094296E-06 -0.4763777092066571E-06 -0.2125847804801365E-06 -0.8416563922630169E-07 + -0.2871694661282378E-07 -0.8118483409326055E-08 -0.1800875019886702E-08 -0.2899912795055122E-09 -0.3021521412802248E-10 + -0.1705617717949463E-11 -0.3905505511147667E-13 -0.2187979755795985E-15 -0.1136823060733138E-18 -0.6529908184057616E-24 + -0.1331494455842040E-33 -0.1332533824576676E-57 -0.3518780789111388E-217 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2980561953329615E-01 0.5916214233164482E-01 0.8807376775591262E-01 0.1165446070923979E+00 + 0.1445785896945104E+00 0.1721793127131528E+00 0.1993498372288393E+00 0.2260924395124203E+00 0.2524083296657185E+00 + 0.2782973516026372E+00 0.3037576786932059E+00 0.3287855187856478E+00 0.3533748410476745E+00 0.3775171353675275E+00 + 0.4012012131151563E+00 0.4244130560281678E+00 0.4471357179640750E+00 0.4693492823288160E+00 0.4910308762069837E+00 + 0.5121547406179706E+00 0.5326923549257166E+00 0.5526126122474077E+00 0.5718820417388514E+00 0.5904650728749644E+00 + 0.6083243362816283E+00 0.6254209952953163E+00 0.6417151022124156E+00 0.6571659731229090E+00 0.6717325752842186E+00 + 0.6853739211620790E+00 0.6980494635281584E+00 0.7097194863416821E+00 0.7203454865385274E+00 0.7298905422913191E+00 + 0.7383196637747241E+00 0.7456001229593330E+00 0.7517017594547573E+00 0.7565972599187180E+00 0.7602624090360081E+00 + 0.7626763105428430E+00 0.7638215772227638E+00 0.7636844892256079E+00 0.7622551204578512E+00 0.7595274331582714E+00 + 0.7554993411058685E+00 0.7501727422062439E+00 0.7435535214678834E+00 0.7356515256112056E+00 0.7264805107514307E+00 + 0.7160580647622865E+00 0.7044055060626673E+00 0.6915477606740609E+00 0.6775132194747052E+00 0.6623335776287783E+00 + 0.6460436581976104E+00 0.6286812219467698E+00 0.6102867653501249E+00 0.5909033087616116E+00 0.5705761766794121E+00 + 0.5493527719676207E+00 0.5272823458290659E+00 0.5044157652415996E+00 0.4808052794806210E+00 0.4565042872543610E+00 + 0.4315671058772241E+00 0.4060487438014351E+00 0.3800046777198434E+00 0.3534906353440669E+00 0.3265623848532687E+00 + 0.2992755319008061E+00 0.2716853249594787E+00 0.2438464696819385E+00 0.2158129528517275E+00 0.1876378764027582E+00 + 0.1593733018915083E+00 0.1310701057169563E+00 0.1027778452988341E+00 0.7454463634517153E-01 0.4641704126567402E-01 + 0.1843996871823178E-01 -0.9343415788128404E-02 -0.3689176836917064E-01 -0.6416563450906662E-01 -0.9112750630870141E-01 + -0.1177418695188684E+00 -0.1439752406767907E+00 -0.1697961946978080E+00 -0.1951753833029356E+00 -0.2200855446874273E+00 + -0.2445015048556650E+00 -0.2684001710639848E+00 -0.2917605178254852E+00 -0.3145635659398817E+00 -0.3367923550171064E+00 + -0.3584319099660255E+00 -0.3794692019194473E+00 -0.3998931040638364E+00 -0.4196943428370452E+00 -0.4388654449501550E+00 + -0.4574006806803239E+00 -0.4752960038707706E+00 -0.4925489890615999E+00 -0.5091587661615586E+00 -0.5251259530560686E+00 + -0.5404525865310800E+00 -0.5551420518758782E+00 -0.5691990115107658E+00 -0.5826293329679667E+00 -0.5954400165361110E+00 + -0.6076391228604799E+00 -0.6192357007728714E+00 -0.6302397156066638E+00 -0.6406619782344070E+00 -0.6505140750472834E+00 + -0.6598082990779603E+00 -0.6685575824509672E+00 -0.6767754303275997E+00 -0.6844758564958461E+00 -0.6916733207396428E+00 + -0.6983826681062417E+00 -0.7046190701754369E+00 -0.7103979684200303E+00 -0.7157350197331149E+00 -0.7206460441846081E+00 + -0.7251469750570049E+00 -0.7292538111984742E+00 -0.7329825717202728E+00 -0.7363492530549652E+00 -0.7393697883820587E+00 + -0.7420600094185869E+00 -0.7444356105635324E+00 -0.7465121153771925E+00 -0.7483048453692615E+00 -0.7498288910627880E+00 + -0.7510990852950691E+00 -0.7521299787110952E+00 -0.7529358174001737E+00 -0.7535305226219949E+00 -0.7539276725644879E+00 + -0.7541404860724225E+00 -0.7541818082827765E+00 -0.7540640981003759E+00 -0.7537994174452843E+00 -0.7533994222016963E+00 + -0.7528753547968463E+00 -0.7522380383374159E+00 -0.7514978722304342E+00 -0.7506648292152125E+00 -0.7497484537329505E+00 + -0.7487578615608312E+00 -0.7477017406379203E+00 -0.7465883530109418E+00 -0.7454255378288276E+00 -0.7442207153161546E+00 + -0.7429808916567682E+00 -0.7417126647203566E+00 -0.7404222305663006E+00 -0.7391153906607812E+00 -0.7377975597449168E+00 + -0.7364737742936068E+00 -0.7351487015066457E+00 -0.7338266487757376E+00 -0.7325115735730846E+00 -0.7312070937093148E+00 + -0.7299164979106890E+00 -0.7286427566676440E+00 -0.7273885333088894E+00 -0.7261561952575059E+00 -0.7249478254275804E+00 + -0.7237652337221139E+00 -0.7226099685950527E+00 -0.7214833286424112E+00 -0.7203863741895169E+00 -0.7193199388434760E+00 + -0.7182846409819289E+00 -0.7172808951511491E+00 -0.7163089233484455E+00 -0.7153687661656919E+00 -0.7144602937725963E+00 + -0.7135832167201219E+00 -0.7127370965461225E+00 -0.7119213561669281E+00 -0.7111352900401826E+00 -0.7103780740857679E+00 + -0.7096487753530824E+00 -0.7089463614243792E+00 -0.7082697095451826E+00 -0.7076176154740552E+00 -0.7069888020452744E+00 + -0.7063819274390548E+00 -0.7057955931550737E+00 -0.7052283516861344E+00 -0.7046787138897004E+00 -0.7041451560560322E+00 + -0.7036261266724787E+00 -0.7031200528842719E+00 -0.7026253466530071E+00 -0.7021404106145906E+00 -0.7016636436391807E+00 + -0.7011934460961990E+00 -0.7007282248280853E+00 -0.7002663978369600E+00 -0.6998063986888191E+00 -0.6993466806403545E+00 + -0.6988857204938393E+00 -0.6984220221858803E+00 -0.6979541201161606E+00 -0.6974805822225486E+00 -0.6970000128092043E+00 + -0.6965110551345379E+00 -0.6960123937660179E+00 -0.6955027567089953E+00 -0.6949809173168499E+00 -0.6944456959898160E+00 + -0.6938959616699598E+00 -0.6933306331398015E+00 -0.6927486801321128E+00 -0.6921491242584105E+00 -0.6915310397636959E+00 + -0.6908935541148920E+00 -0.6902358484304498E+00 -0.6895571577584888E+00 -0.6888567712107797E+00 -0.6881340319597943E+00 + -0.6873883371059062E+00 -0.6866191374217884E+00 -0.6858259369808462E+00 -0.6850082926764688E+00 -0.6841658136386904E+00 + -0.6832981605547428E+00 -0.6824050448998029E+00 -0.6814862280841192E+00 -0.6805415205224655E+00 -0.6795707806318362E+00 + -0.6785739137629465E+00 -0.6775508710711322E+00 -0.6765016483318922E+00 -0.6754262847062551E+00 -0.6743248614609347E+00 + -0.6731975006480673E+00 -0.6720443637491410E+00 -0.6708656502875580E+00 -0.6696615964141065E+00 -0.6684324734694262E+00 + -0.6671785865273722E+00 -0.6659002729230488E+00 -0.6645979007690805E+00 -0.6632718674635170E+00 -0.6619225981926605E+00 + -0.6605505444318366E+00 -0.6591561824471119E+00 -0.6577400118006743E+00 -0.6563025538625172E+00 -0.6548443503309030E+00 + -0.6533659617639238E+00 -0.6518679661243543E+00 -0.6503509573398282E+00 -0.6488155438802812E+00 -0.6472623473544041E+00 + -0.6456920011267967E+00 -0.6441051489573446E+00 -0.6425024436642409E+00 -0.6408845458119288E+00 -0.6392521224252083E+00 + -0.6376058457305376E+00 -0.6359463919255466E+00 -0.6342744399776308E+00 -0.6325906704524237E+00 -0.6308957643728299E+00 + -0.6291904021092484E+00 -0.6274752623015023E+00 -0.6257510208129137E+00 -0.6240183497169164E+00 -0.6222779163164849E+00 + -0.6205303821966133E+00 -0.6187764023100156E+00 -0.6170166240961311E+00 -0.6152516866334947E+00 -0.6134822198254523E+00 + -0.6117088436191340E+00 -0.6099321672576039E+00 -0.6081527885649929E+00 -0.6063712932644193E+00 -0.6045882543284419E+00 + -0.6028042313617739E+00 -0.6010197700159075E+00 -0.5992354014353167E+00 -0.5974516417348416E+00 -0.5956689915078388E+00 + -0.5938879353646483E+00 -0.5921089415009345E+00 -0.5903324612953872E+00 -0.5885589289362899E+00 -0.5867887610764325E+00 + -0.5850223565158195E+00 -0.5832600959116285E+00 -0.5815023415148403E+00 -0.5797494369329861E+00 -0.5780017069183963E+00 + -0.5762594571813876E+00 -0.5745229742277652E+00 -0.5727925252200571E+00 -0.5710683578618634E+00 -0.5693507003047140E+00 + -0.5676397610768275E+00 -0.5659357290331757E+00 -0.5642387733262232E+00 -0.5625490433967653E+00 -0.5608666689842511E+00 + -0.5591917601560096E+00 -0.5575244073547678E+00 -0.5558646814639211E+00 -0.5542126338899364E+00 -0.5525682966613572E+00 + -0.5509316825438423E+00 -0.5493027851706900E+00 -0.5476815791883145E+00 -0.5460680204161578E+00 -0.5444620460205136E+00 + -0.5428635747017666E+00 -0.5412725068945640E+00 -0.5396887249804451E+00 -0.5381120935124601E+00 -0.5365424594513395E+00 + -0.5349796524127961E+00 -0.5334234849255057E+00 -0.5318737526994184E+00 -0.5303302349039710E+00 -0.5287926944558559E+00 + -0.5272608783160018E+00 -0.5257345177954069E+00 -0.5242133288695329E+00 -0.5226970125009548E+00 -0.5211852549699725E+00 + -0.5196777282129478E+00 -0.5181740901680973E+00 -0.5166739851285399E+00 -0.5151770441023719E+00 -0.5136828851796083E+00 + -0.5121911139058056E+00 -0.5107013236622320E+00 -0.5092130960524547E+00 -0.5077260012952530E+00 -0.5062395986237541E+00 + -0.5047534366907523E+00 -0.5032670539801658E+00 -0.5017799792246062E+00 -0.5002917318290815E+00 -0.4988018223008544E+00 + -0.4973097526855100E+00 -0.4958150170093096E+00 -0.4943171017279344E+00 -0.4928154861817414E+00 -0.4913096430576898E+00 + -0.4897990388581003E+00 -0.4882831343764708E+00 -0.4867613851805592E+00 -0.4852332421030025E+00 -0.4836981517397486E+00 + -0.4821555569566233E+00 -0.4806048974043609E+00 -0.4790456100424820E+00 -0.4774771296724106E+00 -0.4758988894802721E+00 + -0.4743103215898168E+00 -0.4727108576259886E+00 -0.4710999292896421E+00 -0.4694769689439838E+00 -0.4678414102133217E+00 + -0.4661926885947614E+00 -0.4645302420834957E+00 -0.4628535118124025E+00 -0.4611619427066728E+00 -0.4594549841542420E+00 + -0.4577320906928324E+00 -0.4559927227144522E+00 -0.4542363471882220E+00 -0.4524624384024584E+00 -0.4506704787269636E+00 + -0.4488599593965099E+00 -0.4470303813165587E+00 -0.4451812558922650E+00 -0.4433121058818812E+00 -0.4414224662756842E+00 + -0.4395118852016028E+00 -0.4375799248587367E+00 -0.4356261624800019E+00 -0.4336501913251545E+00 -0.4316516217054698E+00 + -0.4296300820413793E+00 -0.4275852199543783E+00 -0.4255167033945205E+00 -0.4234242218048398E+00 -0.4213074873240124E+00 + -0.4191662360285776E+00 -0.4170002292160105E+00 -0.4148092547299044E+00 -0.4125931283284775E+00 -0.4103516950975684E+00 + -0.4080848309091941E+00 -0.4057924439266636E+00 -0.4034744761571206E+00 -0.4011309050522512E+00 -0.3987617451577198E+00 + -0.3963670498117089E+00 -0.3939469128927054E+00 -0.3915014706163934E+00 -0.3890309033812195E+00 -0.3865354376618079E+00 + -0.3840153479490107E+00 -0.3814709587348666E+00 -0.3789026465402212E+00 -0.3763108419821045E+00 -0.3736960318772730E+00 + -0.3710587613774890E+00 -0.3683996361312071E+00 -0.3657193244652975E+00 -0.3630185595792629E+00 -0.3602981417430927E+00 + -0.3575589404884341E+00 -0.3548018967810906E+00 -0.3520280251610328E+00 -0.3492384158340347E+00 -0.3464342366967726E+00 + -0.3436167352746726E+00 -0.3407872405489845E+00 -0.3379471646464616E+00 -0.3350980043615843E+00 -0.3322413424775305E+00 + -0.3293788488479631E+00 -0.3265122811972369E+00 -0.3236434855917447E+00 -0.3207743965298733E+00 -0.3179070365923667E+00 + -0.3150435155888747E+00 -0.3121860291300399E+00 -0.3093368565477600E+00 -0.3064983580792707E+00 -0.3036729712235190E+00 + -0.3008632061710796E+00 -0.2980716402017605E+00 -0.2953009109372595E+00 -0.2925537083300732E+00 -0.2898327652646850E+00 + -0.2871408466433073E+00 -0.2844807368267285E+00 -0.2818552253018305E+00 -0.2792670904519203E+00 -0.2767190813152813E+00 + -0.2742138972325089E+00 -0.2717541653057443E+00 -0.2693424156246247E+00 -0.2669810542566010E+00 -0.2646723340554829E+00 + -0.2624183234141169E+00 -0.2602208731776114E+00 -0.2580815820450847E+00 -0.2560017609230388E+00 -0.2539823968540338E+00 + -0.2520241173314579E+00 -0.2501271560242013E+00 -0.2482913211710008E+00 -0.2465159681564286E+00 -0.2447999780373049E+00 + -0.2431417440311489E+00 -0.2415391681797712E+00 -0.2399896705229777E+00 -0.2384902131086874E+00 -0.2370373409624846E+00 + -0.2356272416659091E+00 -0.2342558243668445E+00 -0.2329188177912029E+00 -0.2316118850938999E+00 -0.2303307511904072E+00 + -0.2290713356663495E+00 -0.2278298817525086E+00 -0.2266030696708936E+00 -0.2253881016292194E+00 -0.2241827467507004E+00 + -0.2229853380898954E+00 -0.2217947209120437E+00 -0.2206101607947411E+00 -0.2194312294160579E+00 -0.2182576912681023E+00 + -0.2170894123227367E+00 -0.2159263013992442E+00 -0.2147682815470252E+00 -0.2136152801508975E+00 -0.2124672267271450E+00 + -0.2113240526296465E+00 -0.2101856910076705E+00 -0.2090520767782083E+00 -0.2079231465985940E+00 -0.2067988388391586E+00 + -0.2056790935559256E+00 -0.2045638524633573E+00 -0.2034530589071708E+00 -0.2023466578372234E+00 -0.2012445957804879E+00 + -0.2001468208141218E+00 -0.1990532825386412E+00 -0.1979639320512100E+00 -0.1968787219190523E+00 -0.1957976061529950E+00 + -0.1947205401811518E+00 -0.1936474808227552E+00 -0.1925783862621419E+00 -0.1915132160229021E+00 -0.1904519309421991E+00 + -0.1893944931452612E+00 -0.1883408660200601E+00 -0.1872910141921747E+00 -0.1862449034998491E+00 -0.1852025009692512E+00 + -0.1841637747899360E+00 -0.1831286942905153E+00 -0.1820972299145447E+00 -0.1810693531966281E+00 -0.1800450367387435E+00 + -0.1790242541867973E+00 -0.1780069802074076E+00 -0.1769931904649212E+00 -0.1759828615986671E+00 -0.1749759712004503E+00 + -0.1739724977922888E+00 -0.1729724208043943E+00 -0.1719757205534020E+00 -0.1709823782208502E+00 -0.1699923758319090E+00 + -0.1690056962343670E+00 -0.1680223230778698E+00 -0.1670422407934179E+00 -0.1660654345731199E+00 -0.1650918903502081E+00 + -0.1641215947793118E+00 -0.1631545352169931E+00 -0.1621906997025439E+00 -0.1612300769390466E+00 -0.1602726562746950E+00 + -0.1593184276843816E+00 -0.1583673817515448E+00 -0.1574195096502818E+00 -0.1564748031277238E+00 -0.1555332544866742E+00 + -0.1545948565685086E+00 -0.1536596027363397E+00 -0.1527274868584397E+00 -0.1517985032919279E+00 -0.1508726468667154E+00 + -0.1499499128697113E+00 -0.1490302970292871E+00 -0.1481137954999969E+00 -0.1472004048475565E+00 -0.1462901220340763E+00 + -0.1453829444035485E+00 -0.1444788696675867E+00 -0.1435778958914185E+00 -0.1426800214801243E+00 -0.1417852451651289E+00 + -0.1408935659909356E+00 -0.1400049833021089E+00 -0.1391194967304976E+00 -0.1382371061827025E+00 -0.1373578118277804E+00 + -0.1364816140851888E+00 -0.1356085136129656E+00 -0.1347385112961426E+00 -0.1338716082353913E+00 -0.1330078057358998E+00 + -0.1321471052964751E+00 -0.1312895085988738E+00 -0.1304350174973551E+00 -0.1295836340084561E+00 -0.1287353603009860E+00 + -0.1278901986862372E+00 -0.1270481516084132E+00 -0.1262092216352652E+00 -0.1253734114489432E+00 -0.1245407238370528E+00 + -0.1237111616839186E+00 -0.1228847279620496E+00 -0.1220614257238084E+00 -0.1212412580932750E+00 -0.1204242282583109E+00 + -0.1196103394628140E+00 -0.1187995949991672E+00 -0.1179919982008737E+00 -0.1171875524353817E+00 -0.1163862610970906E+00 + -0.1155881276005403E+00 -0.1147931553737807E+00 -0.1140013478519165E+00 -0.1132127084708265E+00 -0.1124272406610577E+00 + -0.1116449478418844E+00 -0.1108658334155396E+00 -0.1100899007616072E+00 -0.1093171532315786E+00 -0.1085475941435698E+00 + -0.1077812267771939E+00 -0.1070180543685908E+00 -0.1062580801056096E+00 -0.1055013071231401E+00 -0.1047477384985937E+00 + -0.1039973772475303E+00 -0.1032502263194267E+00 -0.1025062885935886E+00 -0.1017655668751993E+00 -0.1010280638915064E+00 + -0.1002937822881413E+00 -0.9956272462557243E-01 -0.9883489337568613E-01 -0.9811029091849610E-01 -0.9738891953897792E-01 + -0.9667078142402649E-01 -0.9595587865953395E-01 -0.9524421322758671E-01 -0.9453578700377881E-01 -0.9383060175463867E-01 + -0.9312865913516950E-01 -0.9242996068649882E-01 -0.9173450783363590E-01 -0.9104230188333598E-01 -0.9035334402206746E-01 + -0.8966763531408090E-01 -0.8898517669957863E-01 -0.8830596899298146E-01 -0.8763001288129194E-01 -0.8695730892255034E-01 + -0.8628785754438455E-01 -0.8562165904264758E-01 -0.8495871358014560E-01 -0.8429902118545067E-01 -0.8364258175179907E-01 + -0.8298939503607108E-01 -0.8233946065785329E-01 -0.8169277809857793E-01 -0.8104934670074115E-01 -0.8040916566719632E-01 + -0.7977223406052095E-01 -0.7913855080245588E-01 -0.7850811467341570E-01 -0.7788092431206631E-01 -0.7725697821497177E-01 + -0.7663627473630474E-01 -0.7601881208762261E-01 -0.7540458833770475E-01 -0.7479360141245189E-01 -0.7418584909484364E-01 + -0.7358132902495440E-01 -0.7298003870002605E-01 -0.7238197547459475E-01 -0.7178713656067244E-01 -0.7119551902797848E-01 + -0.7060711980422413E-01 -0.7002193567544460E-01 -0.6943996328638005E-01 -0.6886119914090269E-01 -0.6828563960248966E-01 + -0.6771328089473920E-01 -0.6714411910192997E-01 -0.6657815016962187E-01 -0.6601536990529702E-01 -0.6545577397903950E-01 + -0.6489935792425362E-01 -0.6434611713841799E-01 -0.6379604688387538E-01 -0.6324914228865730E-01 -0.6270539834734140E-01 + -0.6216480992194123E-01 -0.6162737174282699E-01 -0.6109307840967654E-01 -0.6056192439245466E-01 -0.6003390403242120E-01 + -0.5950901154316545E-01 -0.5898724101166728E-01 -0.5846858639938206E-01 -0.5795304154335106E-01 -0.5744060015733360E-01 + -0.5693125583296245E-01 -0.5642500204092020E-01 -0.5592183213213570E-01 -0.5542173933900042E-01 -0.5492471677660394E-01 + -0.5443075744398622E-01 -0.5393985422540789E-01 -0.5345199989163673E-01 -0.5296718710124915E-01 -0.5248540840194668E-01 + -0.5200665623188704E-01 -0.5153092292102712E-01 -0.5105820069247997E-01 -0.5058848166388249E-01 -0.5012175784877501E-01 + -0.4965802115799089E-01 -0.4919726340105649E-01 -0.4873947628759936E-01 -0.4828465142876621E-01 -0.4783278033864765E-01 + -0.4738385443571101E-01 -0.4693786504423999E-01 -0.4649480339577959E-01 -0.4605466063058778E-01 -0.4561742779909139E-01 + -0.4518309586334694E-01 -0.4475165569850558E-01 -0.4432309809428110E-01 -0.4389741375642146E-01 -0.4347459330818220E-01 + -0.4305462729180289E-01 -0.4263750616998431E-01 -0.4222322032736679E-01 -0.4181176007201023E-01 -0.4140311563687321E-01 + -0.4099727718129280E-01 -0.4059423479246362E-01 -0.4019397848691562E-01 -0.3979649821199152E-01 -0.3940178384732158E-01 + -0.3900982520629698E-01 -0.3862061203754088E-01 -0.3823413402637604E-01 -0.3785038079629078E-01 -0.3746934191040018E-01 + -0.3709100687290486E-01 -0.3671536513054492E-01 -0.3634240607405034E-01 -0.3597211903958652E-01 -0.3560449331019496E-01 + -0.3523951811722967E-01 -0.3487718264178740E-01 -0.3451747601613299E-01 -0.3416038732511890E-01 -0.3380590560759827E-01 + -0.3345401985783308E-01 -0.3310471902689426E-01 -0.3275799202405693E-01 -0.3241382771818768E-01 -0.3207221493912545E-01 + -0.3173314247905550E-01 -0.3139659909387535E-01 -0.3106257350455455E-01 -0.3073105439848577E-01 -0.3040203043082867E-01 + -0.3007549022584622E-01 -0.2975142237823227E-01 -0.2942981545443215E-01 -0.2911065799395422E-01 -0.2879393851067332E-01 + -0.2847964549412637E-01 -0.2816776741079883E-01 -0.2785829270540316E-01 -0.2755120980214808E-01 -0.2724650710599997E-01 + -0.2694417300393482E-01 -0.2664419586618161E-01 -0.2634656404745713E-01 -0.2605126588819128E-01 -0.2575828971574435E-01 + -0.2546762384561452E-01 -0.2517925658263681E-01 -0.2489317622217316E-01 -0.2460937105129300E-01 -0.2432782934994559E-01 + -0.2404853939212278E-01 -0.2377148944701278E-01 -0.2349666778014561E-01 -0.2322406265452879E-01 -0.2295366233177469E-01 + -0.2268545507321884E-01 -0.2241942914102913E-01 -0.2215557279930686E-01 -0.2189387431517832E-01 -0.2163432195987824E-01 + -0.2137690400982439E-01 -0.2112160874768343E-01 -0.2086842446342893E-01 -0.2061733945539015E-01 -0.2036834203129333E-01 + -0.2012142050929418E-01 -0.1987656321900255E-01 -0.1963375850249907E-01 -0.1939299471534369E-01 -0.1915426022757691E-01 + -0.1891754342471287E-01 -0.1868283270872514E-01 -0.1845011649902528E-01 -0.1821938323343368E-01 -0.1799062136914412E-01 + -0.1776381938368037E-01 -0.1753896577584702E-01 -0.1731604906667307E-01 -0.1709505780034925E-01 -0.1687598054515926E-01 + -0.1665880589440464E-01 -0.1644352246732421E-01 -0.1623011891000752E-01 -0.1601858389630291E-01 -0.1580890612872058E-01 + -0.1560107433933019E-01 -0.1539507729065434E-01 -0.1519090377655698E-01 -0.1498854262312769E-01 -0.1478798268956219E-01 + -0.1458921286903872E-01 -0.1439222208959125E-01 -0.1419699931497929E-01 -0.1400353354555478E-01 -0.1381181381912668E-01 + -0.1362182921182277E-01 -0.1343356883894992E-01 -0.1324702185585244E-01 -0.1306217745876907E-01 -0.1287902488568931E-01 + -0.1269755341720873E-01 -0.1251775237738444E-01 -0.1233961113459019E-01 -0.1216311910237258E-01 -0.1198826574030775E-01 + -0.1181504055485940E-01 -0.1164343310023902E-01 -0.1147343297926770E-01 -0.1130502984424104E-01 -0.1113821339779698E-01 + -0.1097297339378707E-01 -0.1080929963815219E-01 -0.1064718198980239E-01 -0.1048661036150212E-01 -0.1032757472076096E-01 + -0.1017006509073034E-01 -0.1001407155110739E-01 -0.9859584239045534E-02 -0.9706593350073452E-02 -0.9555089139022180E-02 + -0.9405061920961404E-02 -0.9256502072145643E-02 -0.9109400030970487E-02 -0.8963746298940305E-02 -0.8819531441647413E-02 + -0.8676746089763751E-02 -0.8535380940045894E-02 -0.8395426756353708E-02 -0.8256874370684052E-02 -0.8119714684219669E-02 + -0.7983938668394324E-02 -0.7849537365975339E-02 -0.7716501892163617E-02 -0.7584823435712779E-02 -0.7454493260067761E-02 + -0.7325502704523865E-02 -0.7197843185407555E-02 -0.7071506197279220E-02 -0.6946483314159568E-02 -0.6822766190779977E-02 + -0.6700346563858386E-02 -0.6579216253401177E-02 -0.6459367164032316E-02 -0.6340791286350805E-02 -0.6223480698317331E-02 + -0.6107427566671246E-02 -0.5992624148378852E-02 -0.5879062792113993E-02 -0.5766735939772315E-02 -0.5655636128019704E-02 + -0.5545755989876484E-02 -0.5437088256338068E-02 -0.5329625758033137E-02 -0.5223361426920646E-02 -0.5118288298026128E-02 + -0.5014399511218785E-02 -0.4911688313029938E-02 -0.4810148058513781E-02 -0.4709772213151562E-02 -0.4610554354799431E-02 + -0.4512488175681280E-02 -0.4415567484426667E-02 -0.4319786208154660E-02 -0.4225138394604049E-02 -0.4131618214309937E-02 + -0.4039219962827338E-02 -0.3947938063001268E-02 -0.3857767067283620E-02 -0.3768701660096141E-02 -0.3680736660238960E-02 + -0.3593867023344052E-02 -0.3508087844372004E-02 -0.3423394360151161E-02 -0.3339781951956864E-02 -0.3257246148128755E-02 + -0.3175782626723511E-02 -0.3095387218199560E-02 -0.3016055908130390E-02 -0.2937784839941740E-02 -0.2860570317667780E-02 + -0.2784408808720544E-02 -0.2709296946665686E-02 -0.2635231533997301E-02 -0.2562209544902880E-02 -0.2490228128008725E-02 + -0.2419284609094953E-02 -0.2349376493767305E-02 -0.2280501470072159E-02 -0.2212657411038820E-02 -0.2145842377131630E-02 + -0.2080054618592456E-02 -0.2015292577651429E-02 -0.1951554890581906E-02 -0.1888840389572373E-02 -0.1827148104385303E-02 + -0.1766477263769774E-02 -0.1706827296590603E-02 -0.1648197832633426E-02 -0.1590588703040315E-02 -0.1533999940326040E-02 + -0.1478431777920006E-02 -0.1423884649172962E-02 -0.1370359185761869E-02 -0.1317856215419179E-02 -0.1266376758905965E-02 + -0.1215922026140108E-02 -0.1166493411382406E-02 -0.1118092487374301E-02 -0.1070720998310677E-02 -0.1024380851520841E-02 + -0.9790741077189988E-03 -0.9348029696732801E-03 -0.8915697691294780E-03 -0.8493769518112139E-03 -0.8082270603040555E-03 + -0.7681227146151712E-03 -0.7290665901840791E-03 -0.6910613931034242E-03 -0.6541098322911179E-03 -0.6182145883382149E-03 + -0.5833782787391545E-03 -0.5496034191941447E-03 -0.5168923806574943E-03 -0.4852473417906704E-03 -0.4546702364667819E-03 + -0.4251626959634362E-03 -0.3967259854759182E-03 -0.3693609345830440E-03 -0.3430678613055810E-03 -0.3178464894144324E-03 + -0.2936958586742664E-03 -0.2706142277521279E-03 -0.2485989695820504E-03 -0.2276464590608424E-03 -0.2077519530613687E-03 + -0.1889094628931880E-03 -0.1711116195232660E-03 -0.1543495320979493E-03 -0.1386126405900494E-03 -0.1238885637399120E-03 + -0.1101629438755946E-03 -0.9741929069423303E-04 -0.8563882667209854E-04 -0.7480033745236668E-04 -0.6488003134095919E-04 + -0.5585141292167375E-04 -0.4768517677466276E-04 -0.4034912832859186E-04 -0.3380813996360609E-04 -0.2802415155542768E-04 + -0.2295622562937124E-04 -0.1856066806040990E-04 -0.1479122565136393E-04 -0.1159937173437365E-04 -0.8934689902304919E-05 + -0.6745363761688971E-05 -0.4978776837729040E-05 -0.3582221071745688E-05 -0.2503704396851613E-05 -0.1692837474640400E-05 + -0.1101766951461853E-05 -0.6861082076102529E-06 -0.4058159914808505E-06 -0.2259190936022548E-06 -0.1170390843846189E-06 + -0.5561789832021472E-07 -0.2379962422071496E-07 -0.8951415949547709E-08 -0.2865311296782646E-08 -0.7469799452895257E-09 + -0.1491286872225022E-09 -0.2085937681520927E-10 -0.1788909961745903E-11 -0.7627333239967911E-13 -0.1139998169589491E-14 + -0.3184439268690364E-17 -0.4725628150249130E-21 -0.1979177475376566E-27 -0.3507608647733454E-40 -0.1993203231761145E-78 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.2092827306407022E+00 0.4057670184399992E+00 0.5898979350532600E+00 0.7621100296525628E+00 + 0.9228266176030425E+00 0.1072464703931703E+01 0.1211436937704310E+01 0.1340155639290343E+01 0.1459036896649656E+01 + 0.1568504688229295E+01 0.1668994708900562E+01 0.1760957569185768E+01 0.1844861052822834E+01 0.1921191152910295E+01 + 0.1990451661396074E+01 0.2053162158653891E+01 0.2109854336461265E+01 0.2161066684867483E+01 0.2207337676111377E+01 + 0.2249197680806415E+01 0.2287159946209046E+01 0.2321711046373938E+01 0.2353301272500611E+01 0.2382335462875013E+01 + 0.2409164771274074E+01 0.2434079838629096E+01 0.2457305766029753E+01 0.2478999191665430E+01 0.2499247656714136E+01 + 0.2518071314420061E+01 0.2535426902944383E+01 0.2551213776615215E+01 0.2565281681669818E+01 0.2577439879309795E+01 + 0.2587467166041904E+01 0.2595122320937184E+01 0.2600154520609984E+01 0.2602313301685621E+01 0.2601357711533437E+01 + 0.2597064364112607E+01 0.2589234201573016E+01 0.2577697846846366E+01 0.2562319511937518E+01 0.2542999496459417E+01 + 0.2519675368173886E+01 0.2492321960446077E+01 0.2460950350463687E+01 0.2425605997739516E+01 0.2386366226474959E+01 + 0.2343337229915742E+01 0.2296650762147126E+01 0.2246460665073238E+01 0.2192939357621151E+01 0.2136274392226351E+01 + 0.2076665161774061E+01 0.2014319819428672E+01 0.1949452454898987E+01 0.1882280554098696E+01 0.1813022755076766E+01 + 0.1741896901539862E+01 0.1669118386164077E+01 0.1594898769003028E+01 0.1519444651395879E+01 0.1442956782587889E+01 + 0.1365629374518453E+01 0.1287649599638170E+01 0.1209197246937915E+01 0.1130444512385982E+01 0.1051555901479737E+01 + 0.9726882234608905E+00 0.8939906587816835E+00 0.8156048835327433E+00 0.7376652366657381E+00 0.6602989178988580E+00 + 0.5836262061335374E+00 0.5077606900028175E+00 0.4328095037959179E+00 0.3588735634485049E+00 0.2860477985519050E+00 + 0.2144213774203916E+00 0.1440779231718307E+00 0.7509571953458535E-01 0.7547905706075591E-02 -0.5849733992897237E-01 + -0.1229766270456308E+00 -0.1858311911485266E+00 -0.2470067412388819E+00 -0.3064533166418045E+00 -0.3641251522021267E+00 + -0.4199805510487963E+00 -0.4739817641533713E+00 -0.5260948759595897E+00 -0.5762896954288581E+00 -0.6245396519239588E+00 + -0.6708216954350136E+00 -0.7151162007320108E+00 -0.7574068751038985E+00 -0.7976806694123654E+00 -0.8359276922467996E+00 + -0.8721411270148933E+00 -0.9063171518391930E+00 -0.9384548621556141E+00 -0.9685561959238236E+00 -0.9966258613642036E+00 + -0.1022671267132381E+01 -0.1046702454831763E+01 -0.1068732033749353E+01 -0.1088775117682357E+01 -0.1106849263704848E+01 + -0.1122974412708365E+01 -0.1137172831539331E+01 -0.1149469056553965E+01 -0.1159889838419920E+01 -0.1168464088017379E+01 + -0.1175222823334259E+01 -0.1180199117315087E+01 -0.1183428046714909E+01 -0.1184946642134393E+01 -0.1184793839575426E+01 + -0.1183010434064154E+01 -0.1179639036149073E+01 -0.1174724032402013E+01 -0.1168311551439714E+01 -0.1160449437451607E+01 + -0.1151187233775371E+01 -0.1140576179713346E+01 -0.1128669224538139E+01 -0.1115521063495940E+01 -0.1101188201577848E+01 + -0.1085729051876920E+01 -0.1069204076448596E+01 -0.1051675978683903E+01 -0.1033209957189757E+01 -0.1013874031892834E+01 + -0.9937394533112268E+00 -0.9728812053358954E+00 -0.9513786099635553E+00 -0.9293160385930985E+00 -0.9067837279225540E+00 + -0.8838786881577604E+00 -0.8607056760163188E+00 -0.8373781836996756E+00 -0.8140193666454354E+00 -0.7907627971280821E+00 + -0.7677528886053459E+00 -0.7451447902474176E+00 -0.7231035087242984E+00 -0.7018019856777432E+00 -0.6814178596116595E+00 + -0.6621286890901025E+00 -0.6441055293683786E+00 -0.6275049500959465E+00 -0.6124598554819389E+00 -0.5990697931249144E+00 + -0.5873917551816811E+00 -0.5774326999496706E+00 -0.5691450588850681E+00 -0.5624262731985009E+00 -0.5571229156877342E+00 + -0.5530392710790523E+00 -0.5499495211576281E+00 -0.5476120912055904E+00 -0.5457844127402661E+00 -0.5442364096307576E+00 + -0.5427613802609629E+00 -0.5411835048730576E+00 -0.5393618006932226E+00 -0.5371908460844405E+00 -0.5345989223491749E+00 + -0.5315443627327854E+00 -0.5280108835019925E+00 -0.5240025549054657E+00 -0.5195389048925442E+00 -0.5146504785947575E+00 + -0.5093750286076997E+00 -0.5037543971983343E+00 -0.4978320732717670E+00 -0.4916513597181557E+00 -0.4852540635555492E+00 + -0.4786796148269129E+00 -0.4719645242683226E+00 -0.4651420995758296E+00 -0.4582423523395834E+00 -0.4512920402678477E+00 + -0.4443148009770967E+00 -0.4373313437888304E+00 -0.4303596744600146E+00 -0.4234153346275730E+00 -0.4165116431348047E+00 + -0.4096599305448206E+00 -0.4028697612557244E+00 -0.3961491399203882E+00 -0.3895047005196642E+00 -0.3829418775915900E+00 + -0.3764650599017688E+00 -0.3700777273477470E+00 -0.3637825721974685E+00 -0.3575816059257799E+00 -0.3514762529766660E+00 + -0.3454674327743286E+00 -0.3395556312570763E+00 -0.3337409631312600E+00 -0.3280232259503844E+00 -0.3224019470255501E+00 + -0.3168764240734279E+00 -0.3114457604107825E+00 -0.3061088954126595E+00 -0.3008646308661068E+00 -0.2957116537733492E+00 + -0.2906485560879659E+00 -0.2856738518046101E+00 -0.2807859917668553E+00 -0.2759833765084032E+00 -0.2712643673995287E+00 + -0.2666272963328205E+00 -0.2620704741493222E+00 -0.2575921979776381E+00 -0.2531907576339031E+00 -0.2488644412092475E+00 + -0.2446115399531009E+00 -0.2404303525450218E+00 -0.2363191888342949E+00 -0.2322763731150775E+00 -0.2283002469950982E+00 + -0.2243891719075561E+00 -0.2205415313087940E+00 -0.2167557325982774E+00 -0.2130302087922870E+00 -0.2093634199784029E+00 + -0.2057538545741509E+00 -0.2022000304100722E+00 -0.1987004956548198E+00 -0.1952538295976336E+00 -0.1918586433016487E+00 + -0.1885135801398642E+00 -0.1852173162242242E+00 -0.1819685607370943E+00 -0.1787660561734181E+00 -0.1756085785009749E+00 + -0.1724949372454470E+00 -0.1694239755063514E+00 -0.1663945699093716E+00 -0.1634056305001383E+00 -0.1604561005841044E+00 + -0.1575449565168044E+00 -0.1546712074484661E+00 -0.1518338950266697E+00 -0.1490320930604994E+00 -0.1462649071494050E+00 + -0.1435314742798000E+00 -0.1408309623922306E+00 -0.1381625699217879E+00 -0.1355255253142844E+00 -0.1329190865205691E+00 + -0.1303425404712269E+00 -0.1277952025337876E+00 -0.1252764159544457E+00 -0.1227855512861943E+00 -0.1203220058051661E+00 + -0.1178852029168765E+00 -0.1154745915539778E+00 -0.1130896455670350E+00 -0.1107298631097586E+00 -0.1083947660200428E+00 + -0.1060838991980789E+00 -0.1037968299827469E+00 -0.1015331475274080E+00 -0.9929246217615594E-01 -0.9707440484152201E-01 + -0.9487862638456054E-01 -0.9270479699818115E-01 -0.9055260559454251E-01 -0.8842175919725527E-01 -0.8631198233909854E-01 + -0.8422301646589628E-01 -0.8215461934715129E-01 -0.8010656449399124E-01 -0.7807864058492887E-01 -0.7607065089990145E-01 + -0.7408241276301041E-01 -0.7211375699433867E-01 -0.7016452737119373E-01 -0.6823458009908026E-01 -0.6632378329267392E-01 + -0.6443201646703840E-01 -0.6255917003929234E-01 -0.6070514484090285E-01 -0.5886985164075899E-01 -0.5705321067914502E-01 + -0.5525515121271331E-01 -0.5347561107053028E-01 -0.5171453622124416E-01 -0.4997188035140731E-01 -0.4824760445495881E-01 + -0.4654167643385925E-01 -0.4485407070984989E-01 -0.4318476784728866E-01 -0.4153375418700541E-01 -0.3990102149109915E-01 + -0.3828656659858688E-01 -0.3669039109180319E-01 -0.3511250097343621E-01 -0.3355290635407111E-01 -0.3201162115010978E-01 + -0.3048866279191616E-01 -0.2898405194203557E-01 -0.2749781222332479E-01 -0.2602996995682040E-01 -0.2458055390917123E-01 + -0.2314959504944821E-01 -0.2173712631514516E-01 -0.2034318238717427E-01 -0.1896779947365720E-01 -0.1761101510230969E-01 + -0.1627286792121220E-01 -0.1495339750775495E-01 -0.1365264418554666E-01 -0.1237064884906971E-01 -0.1110745279586314E-01 + -0.9863097566016712E-02 -0.8637624788750709E-02 -0.7431076035862909E-02 -0.6243492681816734E-02 -0.5074915770246633E-02 + -0.3925385886656976E-02 -0.2794943037087542E-02 -0.1683626532521779E-02 -0.5914748788115108E-03 0.4814743281079707E-03 + 0.1535184501935395E-02 0.2569620160881108E-02 0.3584747017927284E-02 0.4580532066695804E-02 0.5556943663146154E-02 + 0.6513951603328201E-02 0.7451527197409622E-02 0.8369643340202203E-02 0.9268274578406274E-02 0.1014739717479459E-01 + 0.1100698916955656E-01 0.1184703043902031E-01 0.1266750275197406E-01 0.1346838982380348E-01 0.1424967736866517E-01 + 0.1501135314991321E-01 0.1575340702899826E-01 0.1647583101305540E-01 0.1717861930140175E-01 0.1786176833115984E-01 + 0.1852527682222726E-01 0.1916914582181181E-01 0.1979337874875210E-01 0.2039798143784515E-01 0.2098296218440263E-01 + 0.2154833178926046E-01 0.2209410360446425E-01 0.2262029357986047E-01 0.2312692031081800E-01 0.2361400508731372E-01 + 0.2408157194461195E-01 0.2452964771577501E-01 0.2495826208624157E-01 0.2536744765071304E-01 0.2575723997259286E-01 + 0.2612767764622501E-01 0.2647880236218226E-01 0.2681065897585869E-01 0.2712329557962571E-01 0.2741676357881194E-01 + 0.2769111777177585E-01 0.2794641643434182E-01 0.2818272140887457E-01 0.2840009819827491E-01 0.2859861606518020E-01 + 0.2877834813666253E-01 0.2893937151471862E-01 0.2908176739285332E-01 0.2920562117906286E-01 0.2931102262552834E-01 + 0.2939806596533533E-01 0.2946685005654058E-01 0.2951747853391014E-01 0.2955005996865805E-01 0.2956470803651828E-01 + 0.2956154169448472E-01 0.2954068536655733E-01 0.2950226913883336E-01 0.2944642896428323E-01 0.2937330687754944E-01 + 0.2928305122010533E-01 0.2917581687610584E-01 0.2905176551925757E-01 0.2891106587102654E-01 0.2875389397049235E-01 + 0.2858043345614350E-01 0.2839087585989199E-01 0.2818542091356523E-01 0.2796427686810767E-01 0.2772766082569555E-01 + 0.2747579908493241E-01 0.2720892749925168E-01 0.2692729184860401E-01 0.2663114822445014E-01 0.2632076342801500E-01 + 0.2599641538168244E-01 0.2565839355332355E-01 0.2530699939325154E-01 0.2494254678338238E-01 0.2456536249805061E-01 + 0.2417578667578270E-01 0.2377417330116236E-01 0.2336089069573457E-01 0.2293632201668000E-01 0.2250086576175244E-01 + 0.2205493627870053E-01 0.2159896427709156E-01 0.2113339734011533E-01 0.2065870043356471E-01 0.2017535640876495E-01 + 0.1968386649574995E-01 0.1918475078245607E-01 0.1867854867511944E-01 0.1816581933441314E-01 0.1764714208114318E-01 + 0.1712311676453094E-01 0.1659436408523645E-01 0.1606152586432164E-01 0.1552526524830300E-01 0.1498626683930028E-01 + 0.1444523673804386E-01 0.1390290248615655E-01 0.1336001289267242E-01 0.1281733772819916E-01 0.1227566726846887E-01 + 0.1173581166726628E-01 0.1119860013688112E-01 0.1066487991231793E-01 0.1013551497353980E-01 0.9611384498049214E-02 + 0.9093381014167966E-02 0.8582408223524964E-02 0.8079378459570645E-02 0.7585209747505587E-02 0.7100822429962137E-02 + 0.6627135322258290E-02 0.6165061361244632E-02 0.5715502712913672E-02 0.5279345306314358E-02 0.4857452765248114E-02 + 0.4450659715107746E-02 0.4059764450523725E-02 0.3685520960736674E-02 0.3328630324427772E-02 0.2989731504787848E-02 + 0.2669391599617415E-02 0.2368095630986141E-02 0.2086235995182996E-02 0.1824101737017772E-02 0.1581867863467087E-02 + 0.1359584970329603E-02 0.1157169521569523E-02 0.9743951931644752E-03 0.8108857691386213E-03 0.6661101530243749E-03 + 0.5393801270545922E-03 0.4298515449594449E-03 0.3365296699754433E-03 0.2582793513780087E-03 0.1938406504102719E-03 + 0.1418503565121643E-03 0.1008695525362177E-03 0.6941697110285677E-04 0.4600732088117413E-04 0.2919305903894978E-04 + 0.1760728677207078E-04 0.1000464291784026E-04 0.5296427334745831E-05 0.2575932371020878E-05 0.1130373835070578E-05 + 0.4371389867137730E-06 0.1443839527546615E-06 0.3903079296907923E-07 0.8136509367815676E-08 0.1200603994451306E-08 + 0.1103313091144371E-09 0.5169033352084336E-11 0.8862989414281884E-13 0.3078210235071099E-15 0.6727297563933329E-19 + 0.6350331239490211E-25 0.1073811882539351E-36 0.6326995303161769E-70 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 diff --git a/src/niu3.eam b/src/niu3.eam new file mode 100755 index 0000000000..b5f2176f00 --- /dev/null +++ b/src/niu3.eam @@ -0,0 +1,304 @@ +Ni function (universal 3) + 28 58.710 3.5200 FCC + 500 5.0100200400801306e-04 500 9.6969696969697039e-03 4.8000000000000114e+00 + 0. -5.0517016048996766e-01 -7.9317853848267106e-01 -1.0217438587039425e+00 -1.2174805690269395e+00 + -1.3915708504375530e+00 -1.5499932328286121e+00 -1.6963954974188340e+00 -1.8332004716104038e+00 -1.9621160791940611e+00 + -2.0843760483513876e+00 -2.1992938880209749e+00 -2.3093396176347341e+00 -2.4151048342909860e+00 -2.5170730411782927e+00 + -2.6156455313181937e+00 -2.7111597934241303e+00 -2.8039029250035838e+00 -2.8941216165036252e+00 -2.9820297219149694e+00 + -3.0678140937243796e+00 -3.1516391457178798e+00 -3.2336504675375721e+00 -3.3139777215379382e+00 -3.3927369891350594e+00 + -3.4700326894515854e+00 -3.5459591620359561e+00 -3.6206019830134863e+00 -3.6940390674917722e+00 -3.7663415995091469e+00 + -3.8375748211898610e+00 -3.9077987065080180e+00 -3.9770685396213423e+00 -4.0454354138360316e+00 -4.1129466641100976e+00 + -4.1796462436871593e+00 -4.2455750533765979e+00 -4.3107712306517953e+00 -4.3752704043257609e+00 -4.4391059197901370e+00 + -4.5023090387655884e+00 -4.5649091171416387e+00 -4.6269337636658463e+00 -4.6884089819903636e+00 -4.7493592982170298e+00 + -4.8098078755955100e+00 -4.8697766180438862e+00 -4.9292862637278461e+00 -4.9883564698644989e+00 -5.0470058897358570e+00 + -5.1052522427840188e+00 -5.1623072179650649e+00 -5.2189018510607639e+00 -5.2751350144308446e+00 -5.3310209820086811e+00 + -5.3865733770414863e+00 -5.4418052123181724e+00 -5.4967289272545088e+00 -5.5513564221275828e+00 -5.6056990897199057e+00 + -5.6597678446140094e+00 -5.7135731503426257e+00 -5.7671250445876296e+00 -5.8204331625956058e+00 -5.8735067589604455e+00 + -5.9263547279134343e+00 -5.9789856222417370e+00 -6.0314076709491928e+00 -6.0836287957580453e+00 -6.1356566265451704e+00 + -6.1874985157960793e+00 -6.2391615521814003e+00 -6.2906525731472414e+00 -6.3419781770271015e+00 -6.3931447341185503e+00 + -6.4441583972792955e+00 -6.4950251118515041e+00 -6.5457506250122037e+00 -6.5963404945961486e+00 -6.6468000974149675e+00 + -6.6971346371185234e+00 -6.7473491516179536e+00 -6.7974485201119705e+00 -6.8474374697293854e+00 -6.8973205818230383e+00 + -6.9471022979348334e+00 -6.9967869254475659e+00 -7.0463786429507991e+00 -7.0958815053338640e+00 -7.1452994486230068e+00 + -7.1946362945806470e+00 -7.2438957550783698e+00 -7.2930814362578644e+00 -7.3421968424935073e+00 -7.3912453801662821e+00 + -7.4402303612538390e+00 -7.4891550067840740e+00 -7.5380224500758857e+00 -7.5868357398816215e+00 -7.6355978434033887e+00 + -7.6843116489928320e+00 -7.7329799690993184e+00 -7.7816055427344679e+00 -7.8301910379813648e+00 -7.8787390543927813e+00 + -7.9272521252767660e+00 -7.9757327198801704e+00 -8.0241832454879045e+00 -8.0726060494311014e+00 -8.1210034210155300e+00 + -8.1693775933707116e+00 -8.2177307452265609e+00 -8.2660650026147664e+00 -8.3143824405092914e+00 -8.3626850843966167e+00 + -8.4109749117892534e+00 -8.4592538536799680e+00 -8.5075237959315473e+00 -8.5557865806474069e+00 -8.6040440074316393e+00 + -8.6522978346561672e+00 -8.7005497806599692e+00 -8.7488015249013529e+00 -8.7970547090747573e+00 -8.8453109381845820e+00 + -8.8935717815805901e+00 -8.9417402661794085e+00 -8.9898383368729355e+00 -9.0379436351492473e+00 -9.0860575781817374e+00 + -9.1341815522981733e+00 -9.1823169138104959e+00 -9.2304649898246680e+00 -9.2786270790152230e+00 -9.3268044523757681e+00 + -9.3749983539491382e+00 -9.4232100015290143e+00 -9.4714405873368719e+00 -9.5196912786851726e+00 -9.5679632186102026e+00 + -9.6162575264887096e+00 -9.6645752986381694e+00 -9.7129176088877784e+00 -9.7612855091464326e+00 -9.8096800299389315e+00 + -9.8581021809341678e+00 -9.9065529514548416e+00 -9.9550333109705207e+00 -1.0003544209576205e+01 -1.0052086578458329e+01 + -1.0100661330345247e+01 -1.0149269359941854e+01 -1.0197911544358305e+01 -1.0246588743517407e+01 -1.0295301800557468e+01 + -1.0344051542219859e+01 -1.0392838779225485e+01 -1.0441664306641712e+01 -1.0490528904236726e+01 -1.0539433336827699e+01 + -1.0588378354614804e+01 -1.0637364693509198e+01 -1.0686393075449359e+01 -1.0735464208710937e+01 -1.0784578788206602e+01 + -1.0833737495777086e+01 -1.0882941000477615e+01 -1.0932189958852859e+01 -1.0981485015205521e+01 -1.1030826801860144e+01 + -1.1080215939416007e+01 -1.1129653036995705e+01 -1.1179138692487811e+01 -1.1228673492782434e+01 -1.1278258013997231e+01 + -1.1327892821704779e+01 -1.1377578471149377e+01 -1.1427315507456228e+01 -1.1477104465839943e+01 -1.1526945871807015e+01 + -1.1576840241350737e+01 -1.1626788081143559e+01 -1.1676789888720691e+01 -1.1726846152666326e+01 -1.1776957352790021e+01 + -1.1827123960296717e+01 -1.1877346437960568e+01 -1.1927625240283987e+01 -1.1977960813666357e+01 -1.2028353596557736e+01 + -1.2078804019606196e+01 -1.2129312505807263e+01 -1.2179879470659557e+01 -1.2230505322233341e+01 -1.2281190461588324e+01 + -1.2331935282489439e+01 -1.2382740171822832e+01 -1.2433605509650079e+01 -1.2484531669341038e+01 -1.2535519017690660e+01 + -1.2586567915048647e+01 -1.2637678715430582e+01 -1.2688851766635594e+01 -1.2740087410360104e+01 -1.2791385982309691e+01 + -1.2842747812302150e+01 -1.2894173224380381e+01 -1.2945662536907093e+01 -1.2997216062675022e+01 -1.3048834108996232e+01 + -1.3100516977805853e+01 -1.3152264965755137e+01 -1.3204078364302120e+01 -1.3255957459800982e+01 -1.3307902533596177e+01 + -1.3359913862102815e+01 -1.3411991716894249e+01 -1.3464136364786839e+01 -1.3516348067917022e+01 -1.3568627083826016e+01 + -1.3620973665531096e+01 -1.3673388061610183e+01 -1.3725870516267150e+01 -1.3778421269413343e+01 -1.3831040556733626e+01 + -1.3883728609760851e+01 -1.3936485655939009e+01 -1.3989311918697354e+01 -1.4042207617510314e+01 -1.4095172967964288e+01 + -1.4148208181825794e+01 -1.4201313467092689e+01 -1.4254489028066530e+01 -1.4307735065404927e+01 -1.4360825840962775e+01 + -1.4413978799379436e+01 -1.4467200637720680e+01 -1.4520491531087600e+01 -1.4573851651247821e+01 -1.4627281166688022e+01 + -1.4680780242682715e+01 -1.4734349041210180e+01 -1.4787987721378727e+01 -1.4841696438965585e+01 -1.4895475346811168e+01 + -1.4949324594764903e+01 -1.5003244329738379e+01 -1.5057234695747354e+01 -1.5111295833957456e+01 -1.5165427882730739e+01 + -1.5219630977660984e+01 -1.5273905251625195e+01 -1.5328250834816970e+01 -1.5382667854791293e+01 -1.5437156436504551e+01 + -1.5491716702349208e+01 -1.5546348772196666e+01 -1.5601052763435575e+01 -1.5655828791002250e+01 -1.5710676967424547e+01 + -1.5765597402851995e+01 -1.5820590205094163e+01 -1.5875655479554666e+01 -1.5930793329658627e+01 -1.5986003856268781e+01 + -1.6041287158172963e+01 -1.6096643331986456e+01 -1.6152072472167561e+01 -1.6207574671060911e+01 -1.6263150018929764e+01 + -1.6318798603984646e+01 -1.6374520512410413e+01 -1.6430315828395351e+01 -1.6486184634163351e+01 -1.6542127009998921e+01 + -1.6598143034272539e+01 -1.6654232783472025e+01 -1.6710396332224377e+01 -1.6766633753325436e+01 -1.6822945117765585e+01 + -1.6879330494748046e+01 -1.6935789951724587e+01 -1.6992323554410177e+01 -1.7048931366811757e+01 -1.7105613451248814e+01 + -1.7162369868381802e+01 -1.7219200677228514e+01 -1.7276105935188525e+01 -1.7333085698066157e+01 -1.7390140020095373e+01 + -1.7447268953950697e+01 -1.7504472550780861e+01 -1.7561750860218694e+01 -1.7619103930409892e+01 -1.7676531808023810e+01 + -1.7734034538283254e+01 -1.7791612164975845e+01 -1.7849264730476307e+01 -1.7906992275765219e+01 -1.7964794840444824e+01 + -1.8022672462761875e+01 -1.8080625179621734e+01 -1.8138653026605425e+01 -1.8196756037990440e+01 -1.8254934246764151e+01 + -1.8313187684642116e+01 -1.8371516382082859e+01 -1.8429920368310263e+01 -1.8488399671318348e+01 -1.8546954317899235e+01 + -1.8605584333649176e+01 -1.8664289742987989e+01 -1.8723070569174411e+01 -1.8781926834319393e+01 -1.8840858559402477e+01 + -1.8899865764282822e+01 -1.8958948467713867e+01 -1.9018106687365503e+01 -1.9077340439822024e+01 -1.9136649740611233e+01 + -1.9196034604209103e+01 -1.9255495044051372e+01 -1.9315031072554348e+01 -1.9374642701124799e+01 -1.9434329940162570e+01 + -1.9494092799088207e+01 -1.9553931286346369e+01 -1.9613845409416626e+01 -1.9673835174834608e+01 -1.9733900588187907e+01 + -1.9794041654145190e+01 -1.9854258376453799e+01 -1.9914550757959887e+01 -1.9974918800611590e+01 -2.0035362505476201e+01 + -2.0095881872749146e+01 -2.0156476901763995e+01 -2.0217147590998366e+01 -2.0277893938093484e+01 -2.0338715939858389e+01 + -2.0399613592277888e+01 -2.0460586890529044e+01 -2.0521635828982994e+01 -2.0582760401222004e+01 -2.0643960600042533e+01 + -2.0705236417468427e+01 -2.0766587844759101e+01 -2.0828014872417498e+01 -2.0889517490199864e+01 -2.0951095687123598e+01 + -2.1012749451479294e+01 -2.1074478770834048e+01 -2.1136283632044297e+01 -2.1198164021260027e+01 -2.1260119923935804e+01 + -2.1322151324842025e+01 -2.1384258208059805e+01 -2.1446440557008827e+01 -2.1508698354438025e+01 -2.1571031582440582e+01 + -2.1633440222459740e+01 -2.1695924255298678e+01 -2.1758483661130299e+01 -2.1821118419499157e+01 -2.1883828509315435e+01 + -2.1946613908883251e+01 -2.2009474595907591e+01 -2.2072410547490904e+01 -2.2135421740141624e+01 -2.2198508149625354e+01 + -2.2261669751600152e+01 -2.2324906520680884e+01 -2.2388218431072119e+01 -2.2451605456420339e+01 -2.2515067569818370e+01 + -2.2578604743809933e+01 -2.2642216950395323e+01 -2.2705904161046874e+01 -2.2769666346698159e+01 -2.2833503477769341e+01 + -2.2897415524152620e+01 -2.2961402455235202e+01 -2.3025464239895996e+01 -2.3089600846513576e+01 -2.3153812242971071e+01 + -2.3218098396659570e+01 -2.3282459274490293e+01 -2.3346894842892652e+01 -2.3411405067819828e+01 -2.3475989914765478e+01 + -2.3540649348746115e+01 -2.3605383334332714e+01 -2.3670191835634910e+01 -2.3735074816317024e+01 -2.3800032239597726e+01 + -2.3865064068258562e+01 -2.3930170264648723e+01 -2.3995350790681982e+01 -2.4060605607854882e+01 -2.4125934677236842e+01 + -2.4191337959488578e+01 -2.4256815414853463e+01 -2.4322367003169916e+01 -2.4387992683878451e+01 -2.4453692416015087e+01 + -2.4519466158226919e+01 -2.4585313868769163e+01 -2.4651235505509703e+01 -2.4717231025938531e+01 -2.4783300387171153e+01 + -2.4849443545942677e+01 -2.4915660458622597e+01 -2.4981951081215925e+01 -2.5048315369364445e+01 -2.5114753278356716e+01 + -2.5181264763122385e+01 -2.5247849778241061e+01 -2.5314508277950381e+01 -2.5381240216142828e+01 -2.5448045546370622e+01 + -2.5514924221854017e+01 -2.5581876195479936e+01 -2.5648901419802769e+01 -2.5715999847061425e+01 -2.5783171429163417e+01 + -2.5850416117703276e+01 -2.5917733863959484e+01 -2.5985124618898908e+01 -2.6052588333183735e+01 -2.6120124957166922e+01 + -2.6187734440899703e+01 -2.6255416734137384e+01 -2.6323171786339913e+01 -2.6390999546672560e+01 -2.6458899964009333e+01 + -2.6526872986945250e+01 -2.6594918563787246e+01 -2.6663036642560087e+01 -2.6731227171017508e+01 -2.6799490096630279e+01 + -2.6867825366607576e+01 -2.6936232927879701e+01 -2.7004712727119340e+01 -2.7073264710729632e+01 -2.7141888824860530e+01 + -2.7210585015393917e+01 -2.7279353227967249e+01 -2.7348193407960821e+01 -2.7417105500503567e+01 -2.7486089450479881e+01 + -2.7555145202530412e+01 -2.7624272701049790e+01 -2.7693471890195497e+01 -2.7762742713890816e+01 -2.7832085115820746e+01 + -2.7901499039439045e+01 -2.7970984427971530e+01 -2.8040541224415165e+01 -2.8110169371542838e+01 -2.8179868811902452e+01 + -2.8249639487825789e+01 -2.8319481341422943e+01 -2.8389394314591641e+01 -2.8459378349013832e+01 -2.8529433386177288e+01 + -2.8599559367335587e+01 -2.8669756233536873e+01 -2.8740023925633068e+01 -2.8810362384271002e+01 -2.8880771549902647e+01 + -2.8951251362561607e+01 -2.9021801762731002e+01 -2.9092422690058129e+01 -2.9163114084212566e+01 -2.9233875884670852e+01 + -2.9304708030721031e+01 -2.9375610461472206e+01 -2.9446583115842486e+01 -2.9517625932568308e+01 -2.9588738850209438e+01 + -2.9659921807143974e+01 -2.9731174741575614e+01 -2.9802497591530710e+01 -2.9873890294866897e+01 -2.9945352789269464e+01 + -3.0016885012252033e+01 -3.0088486901162696e+01 -3.0160158393185156e+01 -3.0231899425338497e+01 -3.0303709934482413e+01 + -3.0375589857305158e+01 -3.0447539130352652e+01 -3.0519557690005286e+01 -3.0591645472488608e+01 -3.0663802413871281e+01 + -3.0736028450080539e+01 -3.0808323516880364e+01 -3.0880687549896038e+01 -3.0953120484603915e+01 -3.1025622256328688e+01 + 1.0000000000000000e+01 9.8993242032246371e+00 9.8057191085309796e+00 9.7122900702135553e+00 9.6190607944140538e+00 + 9.5260540818798063e+00 9.4332918527874199e+00 9.3407951709670556e+00 9.2485842675412187e+00 9.1566785639921022e+00 + 9.0650966946685685e+00 8.9738565287487972e+00 8.8829751916672990e+00 8.7924690860197643e+00 8.7023539119586530e+00 + 8.6126446870900395e+00 8.5233557658822292e+00 8.4345008585987102e+00 8.3460930497666368e+00 8.2581448161884055e+00 + 8.1706680445109328e+00 8.0836740483591711e+00 7.9971735850459709e+00 7.9111768718671556e+00 7.8256936019907357e+00 + 7.7407329599515151e+00 7.6563036367581105e+00 7.5724138446213090e+00 7.4890713313149035e+00 7.4062833941746078e+00 + 7.3240568937442561e+00 7.2423982670791531e+00 7.1613135407112622e+00 7.0808083432878277e+00 7.0008879178868995e+00 + 6.9215571340211000e+00 6.8428204993344366e+00 6.7646821709996345e+00 6.6871459668244597e+00 6.6102153760714941e+00 + 6.5338935699995488e+00 6.4581834121337636e+00 6.3830874682686840e+00 6.3086080162124460e+00 6.2347470552773245e+00 + 6.1615063155225300e+00 6.0888872667561031e+00 6.0168911272995160e+00 5.9455188725228254e+00 5.8747712431541856e+00 + 5.8046487533705715e+00 5.7351516986726381e+00 5.6662801635515905e+00 5.5980340289504795e+00 5.5304129795266590e+00 + 5.4634165107192416e+00 5.3970439356263000e+00 5.3312943916964741e+00 5.2661668472395320e+00 5.2016601077597215e+00 + 5.1377728221172276e+00 5.0745034885205484e+00 5.0118504603546512e+00 4.9498119518489432e+00 4.8883860435884969e+00 + 4.8275706878724520e+00 4.7673637139236007e+00 4.7077628329525680e+00 4.6487656430795710e+00 4.5903696341183604e+00 + 4.5325721922252171e+00 4.4753706044153034e+00 4.4187620629512878e+00 4.3627436696064308e+00 4.3073124398053722e+00 + 4.2524653066454619e+00 4.1981991248019028e+00 4.1445106743194629e+00 4.0913966642936259e+00 4.0388537364436559e+00 + 3.9868784685803007e+00 3.9354673779716904e+00 3.8846169246080535e+00 3.8343235143699275e+00 3.7845835021006451e+00 + 3.7353931945865924e+00 3.6867488534464030e+00 3.6386466979333392e+00 3.5910829076501329e+00 3.5440536251817321e+00 + 3.4975549586455656e+00 3.4515829841626982e+00 3.4061337482512926e+00 3.3612032701449550e+00 3.3167875440371120e+00 + 3.2728825412544325e+00 3.2294842123596226e+00 3.1865884891868035e+00 3.1441912868105533e+00 3.1022885054503888e+00 + 3.0608760323122084e+00 3.0199497433692102e+00 2.9795055050822441e+00 2.9395391760631071e+00 2.9000466086804977e+00 + 2.8610236506118696e+00 2.8224661463407159e+00 2.7843699386024952e+00 2.7467308697794124e+00 2.7095447832462014e+00 + 2.6728075246672347e+00 2.6365149432474198e+00 2.6006628929371232e+00 2.5652472335932828e+00 2.5302638320970061e+00 + 2.4957085634295453e+00 2.4615773117070177e+00 2.4278659711761890e+00 2.3945704471710769e+00 2.3616866570323651e+00 + 2.3292105309901103e+00 2.2971380130111925e+00 2.2654650616121756e+00 2.2341876506386598e+00 2.2033017700121320e+00 + 2.1728034264450997e+00 2.1426886441253288e+00 2.1129534653705520e+00 2.0835939512536754e+00 2.0546061822001747e+00 + 2.0259862585579214e+00 1.9977303011403791e+00 1.9698344517436936e+00 1.9422948736395682e+00 1.9151077520426867e+00 + 1.8882692945553075e+00 1.8617757315883168e+00 1.8356233167606177e+00 1.8098083272764001e+00 1.7843270642818041e+00 + 1.7591758532008299e+00 1.7343510440521328e+00 1.7098490117462504e+00 1.6856661563643627e+00 1.6617989034191183e+00 + 1.6382437040983007e+00 1.6149970354911076e+00 1.5920554007986354e+00 1.5694153295280060e+00 1.5470733776717225e+00 + 1.5250261278715769e+00 1.5032701895688163e+00 1.4818021991397359e+00 1.4606188200184036e+00 1.4397167428059703e+00 + 1.4190926853676089e+00 1.3987433929171260e+00 1.3786656380898776e+00 1.3588562210043307e+00 1.3393119693125612e+00 + 1.3200297382401516e+00 1.3010064106158339e+00 1.2822388968913216e+00 1.2637241351513353e+00 1.2454590911147605e+00 + 1.2274407581266260e+00 1.2096661571415410e+00 1.1921323366990961e+00 1.1748363728909510e+00 1.1577753693205821e+00 + 1.1409464570554135e+00 1.1243467945718493e+00 1.1079735676937119e+00 1.0918239895238244e+00 1.0758953003693179e+00 + 1.0601847676609850e+00 1.0446896858667927e+00 1.0294073763996394e+00 1.0143351875199400e+00 9.9947049423283119e-01 + 9.8481069818076961e-01 9.7035322753107422e-01 9.5609553685923743e-01 9.4203510702756788e-01 9.2816944506015275e-01 + 9.1449608401352123e-01 9.0101258284363794e-01 8.8771652626940778e-01 8.7460552463267049e-01 8.6167721375499085e-01 + 8.4892925479136494e-01 8.3635933408090324e-01 8.2396516299494493e-01 8.1174447778230174e-01 7.9969503941215692e-01 + 7.8781463341458746e-01 7.7610106971892279e-01 7.6455218248987933e-01 7.5316582996180870e-01 7.4193989427123341e-01 + 7.3087228128747483e-01 7.1996092044178539e-01 7.0920376455494605e-01 6.9859878966352440e-01 6.8814399484488220e-01 + 6.7783740204091103e-01 6.6767705588071991e-01 6.5766102350242051e-01 6.4778739437393895e-01 6.3805428011308152e-01 + 6.2845981430683651e-01 6.1900215233006151e-01 6.0967947116362708e-01 6.0048996921213060e-01 5.9143186612108778e-01 + 5.8250340259395017e-01 5.7370284020878159e-01 5.6502846123474981e-01 5.5647856844851162e-01 5.4805148495055178e-01 + 5.3974555398145085e-01 5.3155913873843019e-01 5.2349062219165532e-01 5.1553840690106156e-01 5.0770091483322233e-01 + 4.9997658717849447e-01 4.9236388416861310e-01 4.8486128489444091e-01 4.7746728712437303e-01 4.7018040712309350e-01 + 4.6299917947073332e-01 4.5592215688277093e-01 4.4894791003037327e-01 4.4207502736140292e-01 4.3530211492211102e-01 + 4.2862779617936830e-01 4.2205071184386433e-01 4.1556951969380762e-01 4.0918289439959388e-01 4.0288952734917061e-01 + 3.9668812647427920e-01 3.9057741607756924e-01 3.8455613666061161e-01 3.7862304475270037e-01 3.7277691274081626e-01 + 3.6701652870034884e-01 3.6134069622685772e-01 3.5574823426883739e-01 3.5023797696151959e-01 3.4480877346164718e-01 + 3.3945948778332813e-01 3.3418899863496421e-01 3.2899619925721169e-01 3.2387999726210026e-01 3.1883931447318403e-01 + 3.1387308676685954e-01 3.0898026391477451e-01 3.0415980942741427e-01 2.9941070039879136e-01 2.9473192735234299e-01 + 2.9012249408790858e-01 2.8558141753001287e-01 2.8110772757715452e-01 2.7670046695245354e-01 2.7235869105539834e-01 + 2.6808146781476161e-01 2.6386787754278096e-01 2.5971701279057946e-01 2.5562797820463778e-01 2.5159989038467856e-01 + 2.4763187774259166e-01 2.4372308036269530e-01 2.3987264986319179e-01 2.3607974925875652e-01 2.3234355282446906e-01 + 2.2866324596092369e-01 2.2503802506048665e-01 2.2146709737491133e-01 2.1794968088402022e-01 2.1448500416573690e-01 + 2.1107230626729301e-01 2.0771083657756151e-01 2.0439985470075150e-01 2.0113863033121149e-01 1.9792644312946006e-01 + 1.9476258259946633e-01 1.9164634796702718e-01 1.8857704805947506e-01 1.8555400118649334e-01 1.8257653502209870e-01 + 1.7964398648790514e-01 1.7675570163748855e-01 1.7391103554195020e-01 1.7110935217664736e-01 1.6835002430910073e-01 + 1.6563243338803524e-01 1.6295596943364199e-01 1.6032003092885994e-01 1.5772402471195601e-01 1.5516736587011604e-01 + 1.5264947763423642e-01 1.5016979127480834e-01 1.4772774599894145e-01 1.4532278884846228e-01 1.4295437459917348e-01 + 1.4062196566113006e-01 1.3832503198009682e-01 1.3606305094001581e-01 1.3383550726658733e-01 1.3164189293190898e-01 + 1.2948170706017503e-01 1.2735445583442129e-01 1.2525965240434545e-01 1.2319681679512406e-01 1.2116547581730508e-01 + 1.1916516297767910e-01 1.1719541839120495e-01 1.1525578869391095e-01 1.1334582695682949e-01 1.1146509260089488e-01 + 1.0961315131283333e-01 1.0778957496203434e-01 1.0599394151839725e-01 1.0422583497111182e-01 1.0248484524841883e-01 + 1.0077056813830154e-01 9.9082605210113250e-02 9.7420563737128152e-02 9.5784056620032310e-02 9.4172702311299705e-02 + 9.2586124740488884e-02 9.1023953240430000e-02 8.9485822474299592e-02 8.7971372363576883e-02 8.6480248016858940e-02 + 8.5012099659556473e-02 8.3566582564446712e-02 8.2143356983039428e-02 8.0742088077824459e-02 7.9362445855320374e-02 + 7.8004105099968690e-02 7.6666745308809237e-02 7.5350050627007725e-02 7.4053709784148491e-02 7.2777416031309272e-02 + 7.1520867078974870e-02 7.0283765035655144e-02 6.9065816347314346e-02 6.7866731737558084e-02 6.6686226148542804e-02 + 6.5524018682673990e-02 6.4379832544994464e-02 6.3253394986330314e-02 6.2144437247152684e-02 6.1052694502150562e-02 + 5.9977905805502552e-02 5.8919814036857865e-02 5.7878165848002538e-02 5.6852711610213102e-02 5.5843205362281267e-02 + 5.4849404759204079e-02 5.3871071021555084e-02 5.2907968885476775e-02 5.1959866553358269e-02 5.1026535645117388e-02 + 5.0107751150135327e-02 4.9203291379825043e-02 4.8312937920789834e-02 4.7436475588615856e-02 4.6573692382274823e-02 + 4.5724379439095575e-02 4.4888330990358272e-02 4.4065344317457900e-02 4.3255219708641324e-02 4.2457760416331647e-02 + 4.1672772615001907e-02 4.0900065359606330e-02 4.0139450544587119e-02 3.9390742863385508e-02 3.8653759768535023e-02 + 3.7928321432253886e-02 3.7214250707576557e-02 3.6511373090018173e-02 3.5819516679722607e-02 3.5138512144143652e-02 + 3.4468192681223808e-02 3.3808393983053797e-02 3.3158954200040336e-02 3.2519713905552639e-02 3.1890516061029439e-02 + 3.1271205981592498e-02 3.0661631302092207e-02 3.0061641943631479e-02 2.9471090080552376e-02 2.8889830107845960e-02 + 2.8317718609035092e-02 2.7754614324478899e-02 2.7200378120111335e-02 2.6654872956618725e-02 2.6117963859025206e-02 + 2.5589517886701607e-02 2.5069404103800874e-02 2.4557493550066090e-02 2.4053659212077361e-02 2.3557775994875407e-02 + 2.3069720693975837e-02 2.2589371967784877e-02 2.2116610310377816e-02 2.1651318024671573e-02 2.1193379195963979e-02 + 2.0742679665830766e-02 2.0299107006404360e-02 1.9862550494997966e-02 1.9432901089081245e-02 1.9010051401619821e-02 + 1.8593895676740635e-02 1.8184329765760343e-02 1.7781251103520468e-02 1.7384558685080709e-02 1.6994153042732330e-02 + 1.6609936223318855e-02 1.6231811765900273e-02 1.5859684679716324e-02 1.5493461422459553e-02 1.5133049878863769e-02 + 1.4778359339593705e-02 1.4429300480422236e-02 1.4085785341715229e-02 1.3747727308204616e-02 1.3415041089038238e-02 + 1.3087642698128565e-02 1.2765449434765652e-02 1.2448379864521963e-02 1.2136353800409783e-02 1.1829292284323834e-02 + 1.1527117568744027e-02 1.1229753098690343e-02 1.0937123493950818e-02 1.0649154531552685e-02 1.0365773128486300e-02 + 1.0086907324682204e-02 9.8124862662264389e-03 9.5424401888180022e-03 9.2767004014673304e-03 9.0151992704248229e-03 + 8.7578702033437317e-03 8.5046476336718135e-03 8.2554670052626400e-03 8.0102647572203867e-03 7.7689783089454623e-03 + 7.5315460454166705e-03 7.2979073026746000e-03 7.0680023535117376e-03 6.8417723933825170e-03 6.6191595265108760e-03 + 6.4001067521917143e-03 6.1845579513078452e-03 5.9724578730325772e-03 5.7637521217223098e-03 5.5583871440119115e-03 + 5.3563102160883447e-03 5.1574694311534164e-03 4.9618136870692719e-03 4.7692926741860209e-03 4.5798568633435566e-03 + 4.3934574940516224e-03 4.2100465628429617e-03 4.0295768117985520e-03 3.8520017172329890e-03 3.6772754785580619e-03 + 3.5053530073032024e-03 3.3361899162928088e-03 3.1697425089940445e-03 3.0059677690114639e-03 2.8448233497412878e-03 + 2.6862675641767808e-03 2.5302593748634528e-03 2.3767583840036965e-03 2.2257248237074201e-03 2.0771195463848979e-03 + 1.9309040152846180e-03 1.7870402951681297e-03 1.6454910431250580e-03 1.5062194995254519e-03 1.3691894790999193e-03 + 1.2343653621603723e-03 1.1017120859476148e-03 9.7119513610272046e-04 8.4278053827493982e-04 7.1643484984554306e-04 + 5.9212515177992087e-04 4.6981904059889557e-04 3.4948462047074136e-04 2.3109049541980564e-04 1.1460576165300829e-04 + 0. 0. 0. 0. 0. + 0. 5.9010126319814817e-05 9.5123001765930887e-04 4.3610102840051235e-03 1.2418760266605156e-02 + 2.7296776919998988e-02 5.0949808246058437e-02 8.4958617911537360e-02 1.3044948432187731e-01 1.8806835258921506e-01 + 2.5799305640066805e-01 3.3997082530515677e-01 4.3337134797535981e-01 5.3724810475810614e-01 6.5040262300578888e-01 + 7.7144783782308224e-01 8.9886793518261499e-01 1.0310729771528742e+00 1.1664473126750252e+00 1.3033913052230872e+00 + 1.4403562964417773e+00 1.5758730017291569e+00 1.7085737236354248e+00 1.8372088913430460e+00 1.9606585051503700e+00 + 2.0779390964991507e+00 2.1882068168517321e+00 2.2907572507149467e+00 2.3850225157235485e+00 2.4705661709060394e+00 + 2.5470764069287242e+00 2.6143579421585343e+00 2.6723229980107988e+00 2.7209816778323130e+00 2.7604320266538878e+00 + 2.7908500052743079e+00 2.8124795717793063e+00 2.8256230270044398e+00 2.8306317476844498e+00 2.8278974020662275e+00 + 2.8178437174311881e+00 2.8009188471197035e+00 2.7775883659789145e+00 2.7483289074652220e+00 2.7136224425962325e+00 + 2.6739511903254396e+00 2.6297931404181583e+00 2.5816181632919921e+00 2.5298846763057838e+00 2.4750368324058769e+00 + 2.4175021946711297e+00 2.3576898589451218e+00 2.2959889862334961e+00 2.2327677067340232e+00 2.1683723581147518e+00 + 2.1031270218484224e+00 2.0373333229482995e+00 1.9712704602410369e+00 1.9051954362820354e+00 1.8393434581054251e+00 + 1.7739284821481149e+00 1.7091438788567075e+00 1.6451631946320333e+00 1.5821409908724249e+00 1.5202137419055788e+00 + 1.4595007755506515e+00 1.4001052418942663e+00 1.3421150976051877e+00 1.2856040947366125e+00 1.2306327644709114e+00 + 1.1772493876521040e+00 1.1254909452253727e+00 1.0753840428599872e+00 1.0269458050837557e+00 9.8018473519940130e-01 + 9.3510153809833696e-01 8.9168990383690883e-01 8.4993725050077984e-01 8.0982542546483316e-01 7.7133136465729990e-01 + 7.3442770987267991e-01 6.9908338454677477e-01 6.6526412872113738e-01 6.3293299418218751e-01 6.0205080097434305e-01 + 5.7257655665637230e-01 5.4446783980309021e-01 5.1768114935412513e-01 4.9217222148221218e-01 4.6789631569801671e-01 + 4.4480847193145756e-01 4.2286374033358065e-01 4.0201738552994115e-01 3.8222506703151460e-01 3.6344299747029751e-01 + 3.4562808028171510e-01 3.2873802840042821e-01 3.1273146547670727e-01 2.9756801105628305e-01 2.8320835109841447e-01 + 2.6961429513751689e-01 2.5674882132317656e-01 2.4457611050121031e-01 2.3306157042885722e-01 2.2217185114615656e-01 + 2.1187485245800097e-01 2.0213972441401395e-01 1.9293686160916401e-01 1.8423789206599128e-01 1.7601566139938463e-01 + 1.6824421290823288e-01 1.6089876418413329e-01 1.5395568077589861e-01 1.4739244740058677e-01 1.4118763714583071e-01 + 1.3532087906606094e-01 1.2977282453457750e-01 1.2452511267704969e-01 1.1956033517667564e-01 1.1486200070957642e-01 + 1.1041449923916735e-01 1.0620306637086507e-01 1.0221374794353455e-01 9.8433365010703433e-02 9.4849479343793064e-02 + 9.1450359570144357e-02 8.8224948041312423e-02 8.5162828511148092e-02 8.2254194688911930e-02 7.9489819719782862e-02 + 7.6861026633556762e-02 7.4359659791945365e-02 7.1978057355755354e-02 6.9709024785019391e-02 6.7545809377936639e-02 + 6.5482075848213306e-02 6.3511882934839115e-02 6.1629661033566707e-02 5.9830190835290065e-02 5.8108582952962173e-02 + 5.6460258515815376e-02 5.4880930707118747e-02 5.3366587219797479e-02 5.1913473602555715e-02 5.0518077467937905e-02 + 4.9177113532858696e-02 4.7887509461463251e-02 4.6646392479786414e-02 4.5451076731534812e-02 4.4299051344329321e-02 + 4.3187969175906726e-02 4.2115636210163343e-02 4.1080001573322589e-02 4.0079148141122012e-02 3.9111283708509692e-02 + 3.8174732694119751e-02 3.7267928352499924e-02 3.6389405467974978e-02 3.5537793504821114e-02 3.4711810189337999e-02 + 3.3910255500315678e-02 3.3132006045311968e-02 3.2376009801025063e-02 3.1641281197056115e-02 3.0926896523147174e-02 + 3.0231989640976842e-02 2.9555747982425329e-02 2.8897408817098458e-02 2.8256255772741601e-02 2.7631615592998982e-02 + 2.7022855117770250e-02 2.6429378472184961e-02 2.5850624450970416e-02 2.5286064085690785e-02 2.4735198383046275e-02 + 2.4197556223065408e-02 2.3672692406680351e-02 2.3160185842761583e-02 2.2659637865279025e-02 2.2170670671835202e-02 + 2.1692925875283153e-02 2.1226063160710629e-02 2.0769759040521030e-02 2.0323705700767247e-02 1.9887609932384143e-02 + 1.9461192141316586e-02 1.9044185431947969e-02 1.8636334758602713e-02 1.8237396140230899e-02 1.7847135933689695e-02 + 1.7465330161385073e-02 1.7091763889272138e-02 1.6726230651524898e-02 1.6368531918402485e-02 1.6018476604117482e-02 + 1.5675880611694337e-02 1.5340566412041456e-02 1.5012362654659439e-02 1.4691103807558503e-02 1.4376629824175480e-02 + 1.4068785835212261e-02 1.3767421863463636e-02 1.3472392559873647e-02 1.3183556959150522e-02 1.2900778253428224e-02 + 1.2623923582545604e-02 1.2352863839649619e-02 1.2087473490903944e-02 1.1827630408180745e-02 1.1573215713719498e-02 + 1.1324113635776012e-02 1.1080211374406845e-02 1.0841398976555172e-02 1.0607569219707735e-02 1.0378617503423171e-02 + 1.0154441748097653e-02 9.9349423003910475e-03 9.7200218447674458e-03 9.5095853206588199e-03 9.3035398448000906e-03 + 9.1017946383145087e-03 8.9042609581665988e-03 8.7108520326330541e-03 8.5214830004667341e-03 8.3360708534563344e-03 + 8.1545343821158855e-03 7.9767941242498419e-03 7.8027723161667450e-03 7.6323928463390700e-03 7.4655812113108566e-03 + 7.3022644736793763e-03 7.1423712220031466e-03 6.9858315324717313e-03 6.8325769322190866e-03 6.6825403641552206e-03 + 6.5356561531992319e-03 6.3918599738218562e-03 6.2510888187975733e-03 6.1132809690869205e-03 5.9783759647687174e-03 + 5.8463145769541147e-03 5.7170387806181611e-03 5.5904917282912081e-03 5.4666177245562830e-03 5.3453622013025781e-03 + 5.2266716936939239e-03 5.1104938168121949e-03 4.9967772429345414e-03 4.8854716794144715e-03 4.7765278471371131e-03 + 4.6698974595187626e-03 4.5655332020223260e-03 4.4633887121737770e-03 4.3634185600484876e-03 4.2655782292140842e-03 + 4.1698240981107859e-03 4.0761134218494921e-03 3.9844043144161567e-03 3.8946557312677932e-03 3.8068274523043177e-03 + 3.7208800652058643e-03 3.6367749491276330e-03 3.5544742587341888e-03 3.4739409085721706e-03 3.3951385577662696e-03 + 3.3180315950305517e-03 3.2425851239922809e-03 3.1687649488125469e-03 3.0965375601038209e-03 3.0258701211323263e-03 + 2.9567304543036133e-03 2.8890870279202896e-03 2.8229089432085241e-03 2.7581659216093096e-03 2.6948282923243694e-03 + 2.6328669801167909e-03 2.5722534933561303e-03 2.5129599123076413e-03 2.4549588776574399e-03 2.3982235792709000e-03 + 2.3427277451791295e-03 2.2884456307876860e-03 2.2353520083073786e-03 2.1834221563960809e-03 2.1326318500153457e-03 + 2.0829573504910909e-03 2.0343753957773325e-03 1.9868631909199103e-03 1.9403983987140230e-03 1.8949591305523622e-03 + 1.8505239374625310e-03 1.8070718013256451e-03 1.7645821262764899e-03 1.7230347302798696e-03 1.6824098368790896e-03 + 1.6426880671145255e-03 1.6038504316082877e-03 1.5658783228106390e-03 1.5287535074066244e-03 1.4924581188781386e-03 + 1.4569746502193157e-03 1.4222859468012855e-03 1.3883751993830559e-03 1.3552259372668837e-03 1.3228220215934505e-03 + 1.2911476387746715e-03 1.2601872940613337e-03 1.2299258052420187e-03 1.2003482964717746e-03 1.1714401922264736e-03 + 1.1431872113803060e-03 1.1155753614053091e-03 1.0885909326878856e-03 1.0622204929616186e-03 1.0364508818534041e-03 + 1.0112692055400316e-03 9.8666283151283701e-04 9.6261938344921819e-04 9.3912673618656156e-04 9.1617301079857313e-04 + 8.9374656977029426e-04 8.7183601227025162e-04 8.5043016951734385e-04 8.2951810024052205e-04 8.0908908622959533e-04 + 7.8913262797420530e-04 7.6963844039006427e-04 7.5059644863021552e-04 7.3199678397861331e-04 7.1382977982614032e-04 + 6.9608596772510398e-04 6.7875607352167050e-04 6.6183101356499102e-04 6.4530189098998408e-04 6.2915999207315693e-04 + 6.1339678265999453e-04 5.9800390466146700e-04 5.8297317261902029e-04 5.6829657033648229e-04 5.5396624757679883e-04 + 5.3997451682300662e-04 5.2631385010162846e-04 5.1297687586741511e-04 4.9995637594766468e-04 4.8724528254567509e-04 + 4.7483667530116673e-04 4.6272377840723272e-04 4.5089995778220364e-04 4.3935871829548813e-04 4.2809370104602770e-04 + 4.1709868069276027e-04 4.0636756283551206e-04 3.9589438144539517e-04 3.8567329634417967e-04 3.7569859073094576e-04 + 3.6596466875535652e-04 3.5646605313704831e-04 3.4719738282937979e-04 3.3815341072727413e-04 3.2932900141820903e-04 + 3.2071912897517658e-04 3.1231887479109613e-04 3.0412342545394974e-04 2.9612807066136011e-04 2.8832820117438013e-04 + 2.8071930680946024e-04 2.7329697446802463e-04 2.6605688620252518e-04 2.5899481731896101e-04 2.5210663451460773e-04 + 2.4538829405039951e-04 2.3883583995754076e-04 2.3244540227755281e-04 2.2621319533494815e-04 2.2013551604236053e-04 + 2.1420874223712898e-04 2.0842933104886149e-04 2.0279381729763207e-04 1.9729881192189717e-04 1.9194100043584596e-04 + 1.8671714141556012e-04 1.8162406501339226e-04 1.7665867150027260e-04 1.7181792983513803e-04 1.6709887626118174e-04 + 1.6249861292849666e-04 1.5801430654247602e-04 1.5364318703756877e-04 1.4938254627607905e-04 1.4522973677123623e-04 + 1.4118217043452164e-04 1.3723731734648428e-04 1.3339270455082000e-04 1.2964591487125629e-04 1.2599458575065798e-04 + 1.2243640811247618e-04 1.1896912524339207e-04 1.1559053169753544e-04 1.1229847222142672e-04 1.0909084069933963e-04 + 1.0596557911894027e-04 1.0292067655662610e-04 9.9954168182353649e-05 9.7064134283507061e-05 9.4248699307630801e-05 + 9.1506030923423857e-05 8.8834339100102040e-05 8.6231875204344742e-05 8.3696931114819219e-05 8.1227838353902480e-05 + 7.8822967236273373e-05 7.6480726034077341e-05 7.4199560158407993e-05 7.1977951356812751e-05 6.9814416926499475e-05 + 6.7707508943029831e-05 6.5655813504213612e-05 6.3657949988866168e-05 6.1712570330282358e-05 5.9818358304071853e-05 + 5.7974028830165385e-05 5.6178327288702694e-05 5.4430028849589227e-05 5.2727937815392426e-05 5.1070886977526431e-05 + 4.9457736985278073e-05 4.7887375727560756e-05 4.6358717727160289e-05 4.4870703547245875e-05 4.3422299209859138e-05 + 4.2012495626317673e-05 4.0640308039126966e-05 3.9304775475375526e-05 3.8004960211247439e-05 3.6739947247565801e-05 + 3.5508843796142400e-05 3.4310778776663886e-05 3.3144902324029873e-05 3.2010385305857383e-05 3.0906418850064473e-05 + 2.9832213882209505e-05 2.8787000672575664e-05 2.7770028392667219e-05 2.6780564681032955e-05 2.5817895218209702e-05 + 2.4881323310664734e-05 2.3970169483444534e-05 2.3083771081538595e-05 2.2221481879665080e-05 2.1382671700350851e-05 + 2.0566726040181392e-05 1.9773045704053120e-05 1.9001046447230654e-05 1.8250158625112214e-05 1.7519826850580754e-05 + 1.6809509658667816e-05 1.6118679178557115e-05 1.5446820812670342e-05 1.4793432922725696e-05 1.4158026522648345e-05 + 1.3540124978214771e-05 1.2939263713231488e-05 1.2354989922202923e-05 1.1786862289310442e-05 1.1234450713584233e-05 + 1.0697336040167097e-05 1.0175109797512299e-05 9.6673739404608315e-06 9.1737405989803780e-06 8.6938318325755241e-06 + 8.2272793901403372e-06 7.7737244752313066e-06 7.3328175165903700e-06 6.9042179438641416e-06 6.4875939683566573e-06 + 6.0826223687688533e-06 5.6889882817751591e-06 5.3063849973837519e-06 4.9345137589397459e-06 4.5730835677019240e-06 + 4.2218109918944072e-06 3.8804199801278200e-06 3.5486416791253358e-06 3.2262142556238214e-06 2.9128827224128399e-06 + 2.6083987683696969e-06 2.3125205924632631e-06 2.0250127415929456e-06 1.7456459522151562e-06 1.4741969956554718e-06 + 1.2104485270563944e-06 9.5418893783608431e-07 7.0521221163838584e-07 4.6331778365889687e-07 2.2831040328782914e-07 + 0. 0. 0. 0. 0. + diff --git a/src/pointers.h b/src/pointers.h new file mode 100644 index 0000000000..6edd1031f6 --- /dev/null +++ b/src/pointers.h @@ -0,0 +1,79 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// Pointers class contains ptrs to master copy of +// fundamental and top-level LAMMPS class ptrs stored in lammps.h +// every LAMMPS class inherits from Pointers to get access to lammps.h ptrs +// these variables are auto-initialized by Pointer class constructor +// *& variables are really pointers to the pointers in lammps.h +// & enables them to be used in any class as error->all() + +#ifndef POINTERS_H +#define POINTERS_H + +#include "mpi.h" +#include "lammps.h" + +namespace LAMMPS_NS { + +class Pointers { + public: + Pointers(LAMMPS *ptr) : + lmp(ptr), + memory(ptr->memory), + error(ptr->error), + universe(ptr->universe), + input(ptr->input), + atom(ptr->atom), + update(ptr->update), + neighbor(ptr->neighbor), + comm(ptr->comm), + domain(ptr->domain), + force(ptr->force), + modify(ptr->modify), + group(ptr->group), + output(ptr->output), + timer(ptr->timer), + world(ptr->world), + infile(ptr->infile), + screen(ptr->screen), + logfile(ptr->logfile) {} + virtual ~Pointers() {} + + protected: + LAMMPS *lmp; + Memory *&memory; + Error *&error; + Universe *&universe; + Input *&input; + + Atom *&atom; + Update *&update; + Neighbor *&neighbor; + Comm *&comm; + Domain *&domain; + Force *&force; + Modify *&modify; + Group *&group; + Output *&output; + Timer *&timer; + + MPI_Comm &world; + FILE *&infile; + FILE *&screen; + FILE *&logfile; +}; + +} + +#endif diff --git a/src/style_meam.h b/src/style_meam.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/style_opt.h b/src/style_opt.h new file mode 100644 index 0000000000..e69de29bb2